<?php
/** Adminer Editor - Compact database editor
* @link https://www.adminer.org/
* @author Jakub Vrana, https://www.vrana.cz/
* @copyright 2009 Jakub Vrana
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
* @version 5.5.1
*/namespace
Adminer;const
VERSION="5.5.1";error_reporting(24575);set_error_handler(function($Jb,$Kb){return!!preg_match('~^Undefined (array key|offset|index)~',$Kb);},E_WARNING|E_NOTICE);$Zb=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Zb||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$W){$Xf=filter_input_array(constant("INPUT$W"),FILTER_UNSAFE_RAW);if($Xf)$$W=$Xf;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
connection($g=null){return($g?:Db::$instance);}function
adminer(){return
Adminer::$instance;}function
driver(){return
Driver::$instance;}function
connect(){$bb=adminer()->credentials();$K=Driver::connect($bb[0],$bb[1],$bb[2]);return(is_object($K)?$K:null);}function
idf_unescape($s){if(!preg_match('~^[`\'"[]~',$s))return$s;$kd=substr($s,-1);return
str_replace($kd.$kd,$kd,substr($s,1,-1));}function
q($Q){return
connection()->quote($Q);}function
idx($ka,$u,$i=null){return($ka&&array_key_exists($u,$ka)?$ka[$u]:$i);}function
number($W){return
preg_replace('~[^0-9]+~','',$W);}function
number_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}function
remove_slashes(array$kg,$Zb=false){$K=array();foreach($kg
as$u=>$W)$K[stripslashes($u)]=(is_array($W)?remove_slashes($W,$Zb):($Zb?$W:stripslashes($W)));return$K;}function
bracket_escape($s,$sa=false){static$Nf=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return
strtr($s,($sa?array_flip($Nf):$Nf));}function
min_version($lg,$wd="",$g=null){$g=connection($g);$df=$g->server_info;if($wd&&preg_match('~([\d.]+)-MariaDB~',$df,$_)){$df=$_[1];$lg=$wd;}return$lg&&version_compare($df,$lg)>=0;}function
charset(Db$f){return(min_version("5.5.3",0,$f)?"utf8mb4":"utf8");}function
ini_set($he,$X){return(function_exists('ini_set')?\ini_set($he,$X):false);}function
ini_bool($Qc){$W=ini_get($Qc);return(preg_match('~^(on|true|yes)$~i',$W)||(int)$W);}function
ini_bytes($Qc){$W=ini_get($Qc);switch(strtolower(substr($W,-1))){case'g':$W=(int)$W*1024;case'm':$W=(int)$W*1024;case'k':$W=(int)$W*1024;}return$W;}function
sid(){static$K;if($K===null)$K=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$K;}function
set_password($Y,$O,$U,$F){$_SESSION["pwds"][$Y][$O][$U]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function
get_password(){$K=get_session("pwds");if(is_array($K))$K=($_COOKIE["adminer_key"]?decrypt_string($K[0],$_COOKIE["adminer_key"]):false);return$K;}function
get_val($I,$k=0,$Sa=null){$Sa=connection($Sa);$J=$Sa->query($I);if(!is_object($J))return
false;$L=$J->fetch_row();return($L?$L[$k]:false);}function
get_vals($I,$d=0){$K=array();$J=connection()->query($I);if(is_object($J)){while($L=$J->fetch_row())$K[]=$L[$d];}return$K;}function
get_key_vals($I,$g=null,$gf=true){$g=connection($g);$K=array();$J=$g->query($I);if(is_object($J)){while($L=$J->fetch_row()){if($gf)$K[$L[0]]=$L[1];else$K[]=$L[0];}}return$K;}function
get_rows($I,$g=null,$j="<p class='error'>"){$Sa=connection($g);$K=array();$J=$Sa->query($I);if(is_object($J)){while($L=$J->fetch_assoc())$K[]=$L;}elseif(!$J&&!$g&&$j&&(defined('Adminer\PAGE_HEADER')||$j=="-- "))echo$j.error()."\n";return$K;}function
unique_array($L,array$t){foreach($t
as$Nc){if(preg_match("~PRIMARY|UNIQUE~",$Nc["type"])&&!$Nc["partial"]){$K=array();foreach($Nc["columns"]as$u){if(!isset($L[$u]))continue
2;$K[$u]=$L[$u];}return$K;}}}function
escape_key($u){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$u,$_))return$_[1].idf_escape(idf_unescape($_[2])).$_[3];return
idf_escape($u);}function
where(array$Z,array$l=array()){$K=array();foreach((array)$Z["where"]as$u=>$W){$u=bracket_escape($u,true);$d=escape_key($u);$k=idx($l,$u,array());$Wb=$k["type"];$K[]=$d.(JUSH=="sql"&&$Wb=="json"?" = CAST(".q($W)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^jsonb?$~',$k["full_type"])?"::jsonb = ".q($W)."::jsonb":(JUSH=="sql"&&is_numeric($W)&&preg_match('~\.~',$W)?" LIKE ".q($W):(JUSH=="mssql"&&strpos($Wb,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$W)):" = ".unconvert_field($k,q($W))))));if(JUSH=="sql"&&preg_match('~char|text~',$Wb)&&preg_match("~[^ -@]~",$W))$K[]="$d = ".q($W)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$u)$K[]=escape_key($u)." IS NULL";return
implode(" AND ",$K);}function
where_check($W,array$l=array()){parse_str($W,$Fa);remove_slashes(array(&$Fa));return
where($Fa,$l);}function
where_link($q,$d,$X,$fe="="){return"&where%5B$q%5D%5Bcol%5D=".urlencode($d)."&where%5B$q%5D%5Bop%5D=".urlencode(($X!==null?$fe:"IS NULL"))."&where%5B$q%5D%5Bval%5D=".urlencode($X);}function
convert_fields(array$e,array$l,array$N=array()){$K="";foreach($e
as$u=>$W){if($N&&!in_array(idf_escape($u),$N))continue;$la=convert_field($l[$u]);if($la)$K
.=", $la AS ".idf_escape($u);}return$K;}function
cookie_path(){return
strtr(preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),array(";"=>"%3B",","=>"%2C"));}function
cookie($B,$X,$pd=2592000){header("Set-Cookie: $B=".rawurlencode($X).($pd?"; expires=".gmdate("D, d M Y H:i:s",time()+$pd)." GMT":"")."; path=".cookie_path().(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function
get_url($eg,$Va){$K=@file_get_contents($eg,false,$Va);if(function_exists('http_get_last_response_headers'))$http_response_header=http_get_last_response_headers();return
array($K,(preg_match('~^HTTP/[\d.]+ (\d+)~',$http_response_header[0],$_)?$_[1]:''),);}function
get_settings($Xa){parse_str($_COOKIE[$Xa],$hf);return$hf;}function
get_setting($u,$Xa="adminer_settings",$i=null){return
idx(get_settings($Xa),$u,$i);}function
save_settings(array$hf,$Xa="adminer_settings"){$X=http_build_query($hf+get_settings($Xa));cookie($Xa,$X);$_COOKIE[$Xa]=$X;}function
restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function
stop_session($ec=false){$fg=ini_bool("session.use_cookies");if(!$fg||$ec){session_write_close();if($fg&&ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($u){return$_SESSION[$u][DRIVER][SERVER][$_GET["username"]];}function
set_session($u,$W){$_SESSION[$u][DRIVER][SERVER][$_GET["username"]]=$W;}function
auth_url($Y,$O,$U,$h=null){$dg=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($h!==null?"db|":"").($Y=='mssql'||$Y=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$dg,$_);return"$_[1]?".(sid()?SID."&":"").($Y!="server"||$O!=""?urlencode($Y)."=".urlencode($O)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($U).($h!=""?"&db=".urlencode($h):"").($_[2]?"&$_[2]":"");}function
is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
redirect($z,$Hd=null){if($Hd!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($z!==null?$z:$_SERVER["REQUEST_URI"]))][]=$Hd;}if($z!==null){if($z=="")$z=".";header("Location: $z");exit;}}function
query_redirect($I,$z,$Hd,$Me=true,$Ob=true,$Tb=false,$Ef=""){if($Ob){$pf=microtime(true);$Tb=!connection()->query($I);$Ef=format_time($pf);}$mf=($I?adminer()->messageQuery($I,$Ef,$Tb):"");if($Tb){adminer()->error
.=error().$mf.script("messagesPrint();")."<br>";return
false;}if($Me)redirect($z,$Hd.$mf);return
true;}class
Queries{static$queries=array();static$start=0;}function
queries($I){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$I:(preg_match('~;$~',$I)?"DELIMITER ;;\n$I;\nDELIMITER ":$I).";");return
connection()->query($I);}function
apply_queries($I,array$_f,$Lb='Adminer\table'){foreach($_f
as$R){if(!queries("$I ".$Lb($R)))return
false;}return
true;}function
queries_redirect($z,$Hd,$Me){$He=implode("\n",Queries::$queries);$Ef=format_time(Queries::$start);return
query_redirect($He,$z,$Hd,$Me,false,!$Me,$Ef);}function
format_time($pf){return
sprintf('%.3f s',max(0,microtime(true)-$pf));}function
relative_uri(){return
str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function
remove_from_uri($pe=""){return
substr(preg_replace("~(?<=[?&])($pe".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function
get_file($u,$jb=false,$mb=""){$Xb=$_FILES[$u];if(!$Xb)return
null;foreach($Xb
as$u=>$W)$Xb[$u]=(array)$W;$K='';foreach($Xb["error"]as$u=>$j){if($j)return$j;$B=$Xb["name"][$u];$Kf=$Xb["tmp_name"][$u];$Ua=file_get_contents($jb&&preg_match('~\.gz$~',$B)?"compress.zlib://$Kf":$Kf);if($jb){$pf=substr($Ua,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$pf))$Ua=iconv("utf-16","utf-8",$Ua);elseif($pf=="\xEF\xBB\xBF")$Ua=substr($Ua,3);}$K
.=$Ua;if($mb)$K
.=(preg_match("($mb\\s*\$)",$Ua)?"":$mb)."\n\n";}return$K;}function
upload_error($j){$Cd=($j==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($j?'Unable to upload a file.'.($Cd?" ".sprintf('Maximum allowed file size is %sB.',$Cd):""):'File does not exist.');}function
repeat_pattern($ve,$v){return
str_repeat("$ve{0,65535}",$v/65535)."$ve{0,".($v%65535)."}";}function
is_utf8($W){return(preg_match('~~u',$W)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$W));}function
format_number($W){return
strtr(number_format($W,0,".",','),preg_split('~~u','0123456789',-1,PREG_SPLIT_NO_EMPTY));}function
friendly_url($W){return
preg_replace('~\W~i','-',$W);}function
table_status1($R,$Ub=false){$K=table_status($R,$Ub);return($K?reset($K):array("Name"=>$R));}function
column_foreign_keys($R){$K=array();foreach(adminer()->foreignKeys($R)as$ic){foreach($ic["source"]as$W)$K[$W][]=$ic;}return$K;}function
fields_from_edit(){$K=array();foreach((array)$_POST["field_keys"]as$u=>$W){if($W!=""){$W=bracket_escape($W);$_POST["function"][$W]=$_POST["field_funs"][$u];$_POST["fields"][$W]=$_POST["field_vals"][$u];}}foreach((array)$_POST["fields"]as$u=>$W){$B=bracket_escape($u,true);$K[$B]=array("field"=>$B,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($u==driver()->primary),);}return$K;}function
dump_headers($Ic,$Qd=false){$K=adminer()->dumpHeaders($Ic,$Qd);$me=$_POST["output"];if($me!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Ic).".$K".($me!="file"&&preg_match('~^[0-9a-z]+$~',$me)?".$me":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$K;}function
dump_csv(array$L){$Rf=$_POST["format"]=="tsv";foreach($L
as$u=>$W){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($Rf?'\t':'[,;]|^$').'~',$W))$L[$u]='"'.str_replace('"','""',$W).'"';}echo
implode(($_POST["format"]=="csv"?",":($Rf?"\t":";")),$L)."\r\n";}function
apply_sql_function($o,$d){return($o?($o=="unixepoch"?"DATETIME($d, '$o')":($o=="count distinct"?"COUNT(DISTINCT ":strtoupper("$o("))."$d)"):$d);}function
get_temp_dir(){return
ini_get("upload_tmp_dir")?:sys_get_temp_dir();}function
file_open_lock($m){if(is_link($m))return;$n=@fopen($m,"c+");if(!$n)return;@chmod($m,0660);if(!flock($n,LOCK_EX)){fclose($n);return;}return$n;}function
file_write_unlock($n,$gb){rewind($n);fwrite($n,$gb);ftruncate($n,strlen($gb));file_unlock($n);}function
file_unlock($n){flock($n,LOCK_UN);fclose($n);}function
first(array$ka){return
reset($ka);}function
password_file($Za){$m=get_temp_dir()."/adminer.key";if(!$Za&&!file_exists($m))return'';$n=file_open_lock($m);if(!$n)return'';$K=stream_get_contents($n);if(!$K){$K=rand_string();file_write_unlock($n,$K);}else
file_unlock($n);return$K;}function
rand_string(){return(function_exists('random_bytes')?bin2hex(random_bytes(16)):md5(uniqid(strval(mt_rand()),true)));}function
select_value($W,$y,array$k,$Cf){if(is_array($W)){$K="";if(array_filter($W,'is_array')==array_values($W)){$fd=array();foreach($W
as$V)$fd+=array_fill_keys(array_keys($V),null);foreach(array_keys($fd)as$ed)$K
.="<th>".h($ed);foreach($W
as$V){$K
.="<tr>";foreach(array_merge($fd,$V)as$hg)$K
.="<td>".select_value($hg,$y,$k,$Cf);}}else{foreach($W
as$ed=>$V)$K
.="<tr>".($W!=array_values($W)?"<th>".h($ed):"")."<td>".select_value($V,$y,$k,$Cf);}return"<table>$K</table>";}if(!$y)$y=adminer()->selectLink($W,$k);if($y===null){if(is_mail($W))$y="mailto:$W";if(is_url($W))$y=$W;}$W=driver()->value($W,$k);$K=adminer()->editVal($W,$k);if($K!==null){if(!is_utf8($K))$K="\0";elseif($Cf!=""&&is_shortable($k))$K=shorten_utf8($K,max(0,+$Cf));else$K=h($K);}return
adminer()->selectVal($K,$y,$k,$W);}function
is_blob(array$k){return
preg_match('~blob|bytea|raw|file~',$k["type"])&&!in_array($k["type"],idx(driver()->structuredTypes(),'User types',array()));}function
is_mail($Bb){$ma='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$wb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$ve="$ma+(\\.$ma+)*@($wb?\\.)+$wb";return
is_string($Bb)&&preg_match("(^$ve(,\\s*$ve)*\$)i",$Bb);}function
is_url($Q){$wb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return
preg_match("~^((https?):)?//($wb?\\.)+$wb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function
is_shortable(array$k){return!preg_match('~'.number_type().'|date|time|year~',$k["type"]);}function
host_port($O){return(preg_match('~^(:([^:].*)|(\[(.+)\]|(([^:]+://)?[^:]+))(:(\d+))?)$~',$O,$_)?array($_[4].$_[5],$_[2].$_[8]):array($O,''));}function
count_rows($R,array$Z,$Yc,array$p){$I=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($Yc&&(JUSH=="sql"||count($p)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$p).")$I":"SELECT COUNT(*)".($Yc?" FROM (SELECT 1$I GROUP BY ".implode(", ",$p).") x":$I));}function
slow_query($I){$h=adminer()->database();$Ff=adminer()->queryTimeout();$jf=driver()->slowQuery($I,$Ff);$g=null;if(!$jf&&support("kill")){$g=connect();if($g&&($h==""||$g->select_db($h))){$gd=get_val(connection_id(),0,$g);echo
script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$gd&token=".get_token()."'); }, 1000 * $Ff);");}}ob_flush();flush();$K=@get_key_vals(($jf?:$I),$g,false);if($g){echo
script("clearTimeout(timeout);");ob_flush();flush();}return$K;}function
get_token(){$Ke=rand(1,1e6);return($Ke^$_SESSION["token"]).":$Ke";}function
verify_token(){list($Lf,$Ke)=explode(":",$_POST["token"]);return($Ke^$_SESSION["token"])==$Lf&&in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"));}function
compress_alphabet(){return
strtr(implode(range('"','~')),"'\\","!\n");}function
decompress_string($Q){$ga=array_flip(str_split(compress_alphabet()));$v=strlen($Q);$jg=($v?13*($v-1)/2-$ga[$Q[0]]:0);$c="";$Re=0;$Se=0;for($q=1;$q<$v;$q+=2){$Re=($Re<<13)+$ga[$Q[$q]]*93+$ga[$Q[$q+1]];$Se+=13;while($Se>=8&&$jg>=8){$Se-=8;$jg-=8;$c
.=chr($Re>>$Se);$Re&=(1<<$Se)-1;}}if($c=="")return"";return(function_exists('gzinflate')?gzinflate($c):inflate($c));}function
inflate($c){$nd=array(3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258);$od=array(0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0);$qb=array(1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577);$sb=array(0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13);$K="";$H=0;do{$ac=inflate_bits($c,$H,1);$T=inflate_bits($c,$H,2);if(!$T){$H=($H+7)&~7;$v=inflate_bits($c,$H,16);$H+=16;$K
.=substr($c,$H>>3,$v);$H+=$v<<3;}else{if($T==1){$rd=array_merge(array_fill(0,144,8),array_fill(0,112,9),array_fill(0,24,7),array_fill(0,8,8));$tb=array_fill(0,30,5);}else{$qd=inflate_bits($c,$H,5)+257;$rb=inflate_bits($c,$H,5)+1;$D=array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);$Kd=array_fill(0,19,0);$Jd=inflate_bits($c,$H,4)+4;for($q=0;$q<$Jd;$q++)$Kd[$D[$q]]=inflate_bits($c,$H,3);$Ld=inflate_table($Kd);$w=array();while(count($w)<$qd+$rb){$wf=inflate_symbol($c,$H,$Ld);if($wf==16)$w=array_merge($w,array_fill(0,inflate_bits($c,$H,2)+3,end($w)));elseif($wf==17)$w=array_merge($w,array_fill(0,inflate_bits($c,$H,3)+3,0));elseif($wf==18)$w=array_merge($w,array_fill(0,inflate_bits($c,$H,7)+11,0));else$w[]=$wf;}$rd=array_slice($w,0,$qd);$tb=array_slice($w,$qd);}$sd=inflate_table($rd);$vb=inflate_table($tb);while(($wf=inflate_symbol($c,$H,$sd))!=256){if($wf<256)$K
.=chr($wf);else{$v=$nd[$wf-257]+inflate_bits($c,$H,$od[$wf-257]);$ub=inflate_symbol($c,$H,$vb);$Zd=strlen($K)-$qb[$ub]-inflate_bits($c,$H,$sb[$ub]);for($q=0;$q<$v;$q++)$K
.=$K[$Zd+$q];}}}}while(!$ac);return$K;}function
inflate_bits($c,&$H,$Ya){$K=0;for($q=0;$q<$Ya;$q++){$K+=((ord($c[$H>>3])>>($H&7))&1)<<$q;$H++;}return$K;}function
inflate_table(array$w){$R=array();$Ka=0;for($za=1;$za<=max($w);$za++){foreach($w
as$wf=>$v){if($v==$za){$R[$za][$Ka]=$wf;$Ka++;}}$Ka<<=1;}return$R;}function
inflate_symbol($c,&$H,array$R){$Ka=0;$za=0;do{$Ka=($Ka<<1)+inflate_bits($c,$H,1);$za++;}while(!isset($R[$za][$Ka]));return$R[$za][$Ka];}function
script($lf,$Mf="\n"){return"<script".nonce().">$lf</script>$Mf";}function
script_src($eg,$kb=false){return"<script src='".h($eg)."'".nonce().($kb?" defer":"")."></script>\n";}function
nonce(){return' nonce="'.get_nonce().'"';}function
input_hidden($B,$X=""){return"<input type='hidden' name='".h($B)."' value='".h($X)."'>\n";}function
input_token(){return
input_hidden("token",get_token());}function
target_blank(){return' target="_blank" rel="noreferrer noopener"';}function
h($Q){return
str_replace(array('&','<','"',"'","\0"),array('&amp;','&lt;','&quot;','&#039;','&#0;'),$Q);}function
nl_br($Q){return
str_replace("\n","<br>",$Q);}function
checkbox($B,$X,$Ga,$hd="",$de="",$Ja="",$jd=""){$K="<input type='checkbox' name='$B' value='".h($X)."'".($Ga?" checked":"").($jd?" aria-labelledby='$jd'":"").">".($de?script("qsl('input').onclick = function () { $de };",""):"");return($hd!=""||$Ja?"<label".($Ja?" class='$Ja'":"").">$K".h($hd)."</label>":$K);}function
optionlist($C,$Ze=null,$gg=false){$K="";foreach($C
as$ed=>$V){$ie=array($ed=>$V);if(is_array($V)){$K
.='<optgroup label="'.h($ed).'">';$ie=$V;}foreach($ie
as$u=>$W)$K
.='<option'.($gg||is_string($u)?' value="'.h($u).'"':'').($Ze!==null&&($gg||is_string($u)?(string)$u:$W)===$Ze?' selected':'').'>'.h($W);if(is_array($V))$K
.='</optgroup>';}return$K;}function
html_select($B,array$C,$X="",$ce="",$jd=""){static$hd=0;$id="";if(!$jd&&substr($C[""],0,1)=="("){$hd++;$jd="label-$hd";$id="<option value='' id='$jd'>".h($C[""]);unset($C[""]);}return"<select name='".h($B)."'".($jd?" aria-labelledby='$jd'":"").">".$id.optionlist($C,$X)."</select>".($ce?script("qsl('select').onchange = function () { $ce };",""):"");}function
html_radios($B,array$C,$X="",$cf=""){$K="";foreach($C
as$u=>$W)$K
.="<label><input type='radio' name='".h($B)."' value='".h($u)."'".($u==$X?" checked":"").">".h($W)."</label>$cf";return$K;}function
confirm($Hd="",$af="qsl('input')"){return
script("$af.onclick = () => confirm('".($Hd?js_escape($Hd):'Are you sure?')."');","");}function
print_fieldset($r,$md,$og=false){echo"<fieldset><legend>","<a href='#fieldset-$r'>$md</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$r');",""),"</legend>","<div id='fieldset-$r'".($og?"":" class='hidden'").">\n";}function
bold($_a,$Ja=""){return($_a?" class='active $Ja'":($Ja?" class='$Ja'":""));}function
js_escape($Q){return
addcslashes($Q,"\r\n'\\/");}function
pagination($E,$eb){return" ".($E==$eb?$E+1:'<a href="'.h(remove_from_uri("page|next").($E?"&page=$E".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).'">'.($E+1)."</a>");}function
hidden_fields(array$Fe,array$Kc=array(),$Be=''){$K=false;foreach($Fe
as$u=>$W){if(!in_array($u,$Kc)){if(is_array($W))hidden_fields($W,array(),$u);else{$K=true;echo
input_hidden(($Be?$Be."[$u]":$u),$W);}}}return$K;}function
hidden_fields_get(){echo(sid()?input_hidden(session_name(),session_id()):''),(SERVER!==null?input_hidden(DRIVER,SERVER):""),input_hidden("username",$_GET["username"]);}function
file_input($Sc){$_d="max_file_uploads";$Ad=ini_get($_d);$bg="upload_max_filesize";$cg=ini_get($bg);return(ini_bool("file_uploads")?$Sc.script("qsl('input[type=\"file\"]').onchange = partialArg(fileChange, "."$Ad, '".sprintf('Increase %s.',"$_d = $Ad")."', ".ini_bytes("upload_max_filesize").", '".sprintf('Increase %s.',"$bg = $cg")."')"):'File uploads are disabled.');}function
enum_input($T,$b,array$k,$X,$Eb=""){preg_match_all("~'((?:[^']|'')*)'~",$k["length"],$yd);$Be=($k["type"]=="enum"?"val-":"");$Ga=(is_array($X)?in_array("null",$X):$X===null);$K=($k["null"]&&$Be?"<label><input type='$T'$b value='null'".($Ga?" checked":"")."><i>$Eb</i></label>":"");foreach($yd[1]as$W){$W=stripcslashes(str_replace("''","'",$W));$Ga=(is_array($X)?in_array($Be.$W,$X):$X===$W);$K
.=" <label><input type='$T'$b value='".h($Be.$W)."'".($Ga?' checked':'').'>'.h(adminer()->editVal($W,$k)).'</label>';}return$K;}function
input(array$k,$X,$o,$ra=false){$B=h(bracket_escape($k["field"]));echo"<td class='function'>";if(is_array($X)&&!$o)$o="json";$cd=($o=="json"||preg_match('~^jsonb?$~',$k["full_type"]));if($cd&&$X!=''&&(JUSH!="pgsql"||$k["type"]!="json"))$X=json_encode(is_array($X)?$X:json_decode($X),128|64|256);$Qe=(JUSH=="mssql"&&$k["auto_increment"]);if($Qe&&!$_POST["save"])$o=null;$oc=(isset($_GET["select"])||$Qe?array("orig"=>'original'):array())+adminer()->editFunctions($k);$Hb=driver()->enumLength($k);if($Hb){$k["type"]="enum";$k["length"]=$Hb;}$b=" name='fields[$B]".($k["type"]=="enum"||$k["type"]=="set"?"[]":"")."'".($ra?" autofocus":"");echo
driver()->unconvertFunction($k)." ";$R=$_GET["edit"]?:$_GET["select"];if($k["type"]=="enum")echo
h($oc[""])."<td>".adminer()->editInput($R,$k,$b,$X);else{$xc=(in_array($o,$oc)||isset($oc[$o]));echo(count($oc)>1?"<select name='function[$B]'>".optionlist($oc,$o===null||$xc?$o:"")."</select>".on_help("event.target.value.replace(/^SQL\$/, '')",1).script("qsl('select').onchange = functionChange;",""):h(reset($oc))).'<td>';$Sc=adminer()->editInput($R,$k,$b,$X);if($Sc!="")echo$Sc;elseif(preg_match('~bool~',$k["type"]))echo"<input type='hidden'$b value='0'>"."<input type='checkbox'".(preg_match('~^(1|t|true|y|yes|on)$~i',$X)?" checked='checked'":"")."$b value='1'>";elseif($k["type"]=="set")echo
enum_input("checkbox",$b,$k,(is_string($X)?explode(",",$X):$X));elseif(is_blob($k)&&ini_bool("file_uploads"))echo"<input type='file' name='fields-$B'>";elseif($cd)echo"<textarea$b cols='50' rows='12' class='jush-js'>".h($X).'</textarea>';elseif(($Bf=preg_match('~text|lob|memo~i',$k["type"]))||preg_match("~\n~",$X)){if($Bf&&JUSH!="sqlite")$b
.=" cols='50' rows='12'";else{$M=min(12,substr_count($X,"\n")+1);$b
.=" cols='30' rows='$M'";}echo"<textarea$b>".h($X).'</textarea>';}else{$Sf=driver()->types();$Ed=(!preg_match('~int~',$k["type"])&&preg_match('~^(\d+)(,(\d+))?$~',$k["length"],$_)?((preg_match("~binary~",$k["type"])?2:1)*$_[1]+($_[3]?1:0)+($_[2]&&!$k["unsigned"]?1:0)):($Sf[$k["type"]]?$Sf[$k["type"]]+($k["unsigned"]?0:1):0));if(JUSH=='sql'&&min_version(5.6)&&preg_match('~time~',$k["type"]))$Ed+=7;echo"<input".((!$xc||$o==="")&&preg_match('~(?<!o)int(?!er)~',$k["type"])&&!preg_match('~\[\]~',$k["full_type"])?" type='number'":"")." value='".h($X)."'".($Ed?" data-maxlength='$Ed'":"").(preg_match('~char|binary~',$k["type"])&&$Ed>20?" size='".($Ed>99?60:40)."'":"")."$b>";}echo
adminer()->editHint($R,$k,$X);$bc=0;foreach($oc
as$u=>$W){if($u===""||!$W)break;$bc++;}if($bc&&count($oc)>1)echo
script("qsl('td').oninput = partial(skipOriginal, $bc);");}}function
process_input(array$k){$s=bracket_escape($k["field"]);$o=idx($_POST["function"],$s);if($o=="orig")return(preg_match('~^CURRENT_TIMESTAMP~i',$k["on_update"])?idf_escape($k["field"]):false);if($o=="NULL")return"NULL";if(is_blob($k)&&ini_bool("file_uploads")){$Xb=get_file("fields-$s");if(!is_string($Xb))return
false;return
driver()->quoteBinary($Xb);}$X=idx($_POST["fields"],$s);if($X===null)return
false;if($k["type"]=="enum"||driver()->enumLength($k)){$X=idx($X,0);if($X=="orig"||!$X)return
false;if($X=="null")return"NULL";$X=substr($X,4);}if($k["auto_increment"]&&$X=="")return
null;if($k["type"]=="set")$X=implode(",",(array)$X);if($o=="json"){$o="";$X=json_decode($X,true);if(!is_array($X))return
false;return$X;}return
adminer()->processInput($k,$X,$o);}function
search_tables(){$_GET["where"][0]["val"]=$_POST["query"];$bf="<ul>\n";foreach(table_status('',true)as$R=>$S){$B=adminer()->tableName($S);if(isset($S["Engine"])&&$B!=""&&(!$_POST["tables"]||in_array($R,$_POST["tables"]))){$J=connection()->query("SELECT".limit("1 FROM ".table($R)," WHERE ".implode(" AND ",adminer()->selectSearchProcess(fields($R),array())),1));if(!$J||$J->fetch_row()){$De="<a href='".h(ME."select=".urlencode($R)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."'>$B</a>";echo"$bf<li>".($J?$De:"<p class='error'>$De: ".error())."\n";$bf="";}}}echo($bf?"<p class='message'>".'No tables.':"</ul>")."\n";}function
on_help($Pa,$if=0){return
script("mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $Pa, $if) }, onmouseout: helpMouseout});","");}function
edit_form($R,array$l,$L,$ag,$j=''){$zf=adminer()->tableName(table_status1($R,true));page_header(($ag?'Edit':'Insert'),$j,array("select"=>array($R,$zf)),$zf);adminer()->editRowPrint($R,$l,$L,$ag);if($L===false){echo"<p class='error'>".'No rows.'."\n";return;}echo"<form action='' method='post' enctype='multipart/form-data' id='form'>\n";$Ab=false;if(!$l)echo"<p class='error'>".'You have no privileges to update this table.'."\n";else{echo"<table class='layout nowrap'>".script("qsl('table').onkeydown = editingKeydown;");$ra=!$_POST;foreach($l
as$B=>$k){echo"<tr><th>".adminer()->fieldName($k);$i=idx($_GET["set"],bracket_escape($B));if($i===null){$i=$k["default"];if($k["type"]=="bit"&&preg_match("~^b'([01]*)'\$~",$i,$Oe))$i=$Oe[1];if(JUSH=="sql"&&preg_match('~binary~',$k["type"]))$i=bin2hex($i);}$X=($L!==null?($L[$B]!=""&&JUSH=="sql"&&preg_match("~enum|set~",$k["type"])&&is_array($L[$B])?implode(",",$L[$B]):(is_bool($L[$B])?+$L[$B]:$L[$B])):(!$ag&&$k["auto_increment"]?"":(isset($_GET["select"])?false:$i)));if(!$_POST["save"]&&is_string($X))$X=adminer()->editVal($X,$k);if(($ag&&!isset($k["privileges"]["update"]))||$k["generated"])echo"<td class='function'><td>".select_value($X,'',$k,null);else{$Ab=true;$o=($_POST["save"]?idx($_POST["function"],$B,""):($ag&&preg_match('~^CURRENT_TIMESTAMP~i',$k["on_update"])?"now":($X===false?null:($X!==null?'':'NULL'))));if(!$_POST&&!$ag&&$X==$k["default"]&&preg_match('~^[\w.]+\(~',$X))$o="SQL";if(preg_match("~time~",$k["type"])&&preg_match('~^CURRENT_TIMESTAMP~i',$X)){$X="";$o="now";}if($k["type"]=="uuid"&&$X=="uuid()"){$X="";$o="uuid";}if($ra!==false)$ra=($k["auto_increment"]||$o=="now"||$o=="uuid"?null:true);input($k,$X,$o,$ra);if($ra)$ra=false;}}if(!support("table")&&!fields($R))echo"<tr>"."<th><input name='field_keys[]'>".script("qsl('input').oninput = fieldChange;","")."<td class='function'>".html_select("field_funs[]",adminer()->editFunctions(array("null"=>isset($_GET["select"]))))."<td><input name='field_vals[]'>";echo"</table>\n";}echo"<p>\n";if($Ab){echo"<input type='submit' value='".'Save'."'>\n";if(!isset($_GET["select"]))echo"<input type='submit' name='insert' value='".($ag?'Save and continue edit':'Save and insert next')."' title='Ctrl+Shift+Enter'>\n",($ag?script("qsl('input').onclick = function () { return !ajaxForm(this.form, '".'Saving'."…', this); };"):"");}echo($ag?"<input type='submit' name='delete' value='".'Delete'."'>".confirm()."\n":"");if(isset($_GET["select"]))hidden_fields(array("check"=>(array)$_POST["check"],"clone"=>$_POST["clone"],"all"=>$_POST["all"]));echo
input_hidden("referer",(isset($_POST["referer"])?$_POST["referer"]:$_SERVER["HTTP_REFERER"])),input_hidden("save",1),input_token(),"</form>\n";}function
shorten_utf8($Q,$v=80,$uf=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$v).")($)?)u",$Q,$_))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$v).")($)?)",$Q,$_);return
h($_[1]).$uf.(isset($_[2])?"":"<i>…</i>");}function
icon($Hc,$B,$Gc,$Gf){return"<button type='submit' ".($B?"name='$B'":"draggable='true'")." title='".h($Gf)."' class='icon icon-$Hc".($B?"":" jsonly")."'><span>$Gc</span></button>";}if(isset($_GET["file"])){if(substr(VERSION,-4)!='-dev'){if($_SERVER["HTTP_IF_MODIFIED_SINCE"]){header("HTTP/1.1 304 Not Modified");exit;}header("Expires: ".gmdate("D, d M Y H:i:s",time()+365*24*60*60)." GMT");header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");header("Cache-Control: immutable");}ini_set("zlib.output_compression",'1');if($_GET["file"]=="default.css"){header("Content-Type: text/css; charset=utf-8");echo
decompress_string('*R]!6crZ+HR?P"r%m?-Om[F4Y/$@`RgH!"/-lj5g+/g*l:siHtv(6jLQ>^3w8PQomZ}Ek@^nucvL-jaAka5e?Tg!yq6crV[e=B$vVQZ6n`0>M+o_tQt!|vG[q<>G<,A&j/M<(R0gbwbo19Q1B:i<H"=u-0kL.yE2Gg
1m`[
A*]5F7=!bcdSlg$]^5[@Fp^bX9g_(vd9O<{7;lyE"Xo0^X3E1Z@$v<UN#(n2:!@/tx1!GZ=8|$r?eR-wc0ZN^SBR<kCW+Sqbu]wbUbr5j1bk>C`(B
~<5&Oij%HgQ$6)$Lc!7a[(^q
F
UV.mTk.y6n[)#CL-?^Sp(Ks:y1_Tw)cBdLj"R}(mw!UgIDhmlZKu3z"@S.:Tb;*+?UlJ[rE])mqLn?6AFugS?k+WT"4P^LO~m@t/Tl8HkX$(x68*@qkrn&dSmYBElSA3n,J*`]RYRK+}PF!r45YZgql4vv1idNA;yiY4@)Yu`E/I_|Yh/Zg,0:$I@{Dv;O>~y^Ay)kl)BCEcka>Skw?f6)q
GAo1E]Lva2Ew+hY-q~]D>_wY$D;!u5T]mz0sSpfDVyNW(/t
Ui=pGcPZ_>QC
JWJ
r&p@n=AIZ+2.j.s@d&SRX
u#~XUiRJ$.neCE{4X#rOLk(R#1`H,E@*~XjbD*hD0i<>^n.kM
,Wu0gUxY6)^nbgy<<F(c89m`ut

lUwr{UC<VkRo1
4Cnbw`4^L>mgLxwxF@v;H>)UcZ:FvUI9X13CCJom3c}MBTj
e
SJ6FnqY[xk6f:R{X-M!q1Y{:ybOY<Zd*N!.]{7y+G04vr_gN_2aH+(9[1DjEm/SSz8w>)-xq0W5jC3V
C
%Ye4
U1V~N@v"!IGl(-,K+UlzV0rb+{#kr{!m6`Y<DnX4cW"/*3ZAjSj=w<%ER/z$I@Di.pYOx0s=fBWgkF<y0
u8T[Xe:V>nVHx/)Y"[TW
#IP<VLDI`h~R)4UE:pW*Kf3v|<cd6.x$?=7SVrH4?&q,R.G/*Uz`h4%[}(P;-NMvgT03c(mI?$^0^*z7ym{ydVDtq@-/9YJ:(J88-yEku
H7feA@g%T9jQ7c#f7?{<N.oI_L}t35:Kw%HdG$9$=FAnWfFP.K#t`/Sj0;+j2ZEYT*=MO&x#Fus)+lUbWU`.H^U@NnpQM[S!eUw0<tl-q&XxLQBj:WdOv!i=0HYyLh9.LdiLN0yDN=$5b.0aS;"(NEo[,0,b(`0x.pJd&jw`"5h6?Z)d_+HpdX*eR"GH@K!lVGyk3X2M^ml`F:mM6-7a/C}=+Rv8vgF3}Z#:8q)N&G=Q&l53kVDDBvLupDO2CJkHS5/TS=KN,6$B,$PlW,KZ:RYE>7Gc6@=Q#O*xDOIWx*_&D5-Qa<2lDAr3!2D&vT[&$=Vxj1{j_[cNeTO.u1?
K2IAMiP^)8&:df+)`,7+{4H+MShdhdX9_s"2:5?fPF`5jNP5aqLcO,__U(z&6kR&eBU@}
v+l=
?Kn/d"gD2m!?3~mlBUYp1!6_eLb?;ft$Y=a3.ZUU,nk8amMs-gUj9x:8[j!Y7{(ac
ELr>/rj>n?Tn5JTc8F4Tda)GM(Q`8Z)XS+m^PiU,_{@<cu&_AxAWR,A}GND%.n,jXNlRMvq*aS"_/)JXEH9%C%xz+de!/nUc#V"dKC/9bZ<h/@$Y-h3_9O?!I2.kBp/TxPrY^|SHS1a97dch4]g7?#Gv4[V,1U((15@B,L9M!rS=#/lCARq+pz^CM75<T<?JgmN3J[&9:#TB
~n9Z24r8R,JwI8q.BbDH`r)#wq$P5Jm4>oK%`C}
!Iu%}4z:UT^eTQkbZ1IB)^-_D+{$`=cwwhhkr@Ah??%csyoEna
o#o}:H9YK$m^nsn$Psa@Al!S
8<">0slr&"j%3=XoD_p+(eocZ-
uxJ1EcE}<`]&I,mu_n1m>fw!=[
$I}3*VSn8#E]w?$yj,!_?uC$On^7=gN6wwD`MBEJ-N<?:Nr3;?Dovr+Ys=
ooTv>r.+4iBW-&-*=8PF7PG3T%:N1tE3oiuDM0RsnqS^Ize>;y<M<0.t(D6vR,E;gA%~E9ugxgE=GZ^wI0!jfa&@2aneoRoNujU#,WTMz#2Z46"]h&FpeZO7J!-FsKdHxlk^Bz@|UjMJVyC[32qNbm=Lh0q`w>gK>t=QuzmX7~y_JUE=y>o&b_Q>lHnsz#DgH@7|tg59C$Xrv]cuvYsQnUs1L?tKdsh0BAb5TeTCuZsrujeCyrx"N%7Lx,TMwwHAv,Y%p;i3ka)O,kkKLL>mc(Z)ujRq`iN%n/LMKSFKxAnqpI6d8nKHy&B9l>n?0#7xx#1v=Dy],qZ/=JxGvFL7y?UoTLJN!j"g&[cWJHs6=IrP*DwX&%1FL>DHckr4QnWZRstbA.Ap-,,WI`F819)1b<*yXd4^l]/qh7W
5AK-!K;,0VaNM-4xY.R~t3hu0eB;[5[2wo1
"U[Rsi*;)G[}4R`7T&VF@Y8s_i=}w)_8BJ:AvhF&^w)3ACT6_DycY%1L@)
w4mC:BeR**$h+_OH#GL2yLnG_[EMIIa[zEmc0.[QnL>M8qHfz@5KA!_y36nd)H"*wI$T=rumaUt)0j.v|.8,HLv)G`>/H7:k6HoBE<
hOh)6**K"9aLh(CldX>~%bJ.twJ3w_Sr2^v5R$F,3x13^<Yv:ejS7x_;BwZoGDF?_5b/VKnnt!$#.:*oA$L=y0OU6jQkIMI^>c.]Nv/$=qFIm.>o3AKnWPJ|??FmM]JL
<>mpt@{d.U`)@cdVgPf7]7QwA');}elseif($_GET["file"]=="dark.css"){header("Content-Type: text/css; charset=utf-8");echo
decompress_string('$OsX9b7V>fh0U7tC7-+;-OA*~UsU(SFi_c8JDxaPG<Q0iMBu;e)lfe|iRQ{m?e=+R0+PM6!*|s<CAT,t`Zvd53"xl;W(9un?%JB$r"{K_-)_`3X8Pds7^47QRoxIL`@19f<XA*(iN%|:Uc9=h;er501[Irf7A-bN<C*%T4}<e?C"LWvO-$ZF^$P%
G?p6F1u:&Mb3$X
LmI5mZ&]]d`$qO>S
Y^LR5H77mQ5QC.,j7XqLe](
i3X5*>t<0qwv4tKdl=K^IYq<?K3P*</$gy$I1hZD@3N_h~Y6BueAae]
2,Kkvo9,hJcmoYL#F)XFhrs&_;1/Un_ct(E2+5=PXt97yexC7gKTqw+[<<fn-z3W_w56#8Xnq[pBjX-ms.ZG5)k!OnwJP`G!+|C`y2$m(@S:a!YJSB*zIu6j@3Qx7>vMf^(}H&m(1`k)uk<RvJIZvGHU7M5w[osQgml.L*OS?"+cHdJnGD$qWD_[51`H<<FBeB<|[Uq-vf>/rRF+b/]i=)["FJ#
Zy!OoL<r>U5>Qrhc>mltPKMq"iH+idlxeUl*2=rk<D^B@7l.h3"YO&FEjPjXd:m
Yze!Z3]PK8ZXjQj=B9u8UW61nJky!,TS&UQP"vZU&)w,EI2B,.32p/oOyz$"33(QX#w.#.dz]ziPH0c7m(o"3U;/Y}Ed:Xwv@yF"0}cKY<4K;,O3HEV*D:yK02I!]q%C.96,AXt;x6Dqs[>=>a<sDJZnL;hSwb*T+HTV7|aEM{Cdi)ZsKApAOyI>4}vxsk57');}elseif($_GET["file"]=="functions.js"){header("Content-Type: text/javascript; charset=utf-8");echo
decompress_string('.X!<]iDmr+SyhDs2VuCQ
m:=1apS3+pJlArG"bSL#)]?`?]-GXI0U+~;rmzyvM["jtt6paN`]+]ew?`C@!lF6JEB&i%`--~FLl-39N$1VViUP)wbG2Wt"a6A.v>?H;xXS`:yuTD58IL^5cLA5UYp)V_,]5Y6eCKfn:I):j:pv^G^(c;5^B`-c"9Hfx|
?`AB%Tc-QflMwV90eCCZ8D]0ZE!f+hX>(lh]r0UH8MhE=G(tTWM^[i`GQ]Rkh/RB1.bj`R+Ji!_)~.,
{v.?@?o&?yo]1BftC4rlNPKNDI1bug(duy[G
^PK)juV~dx633"`81.s9$;pc<i>4oBYf^VCVmgna5lw;!,jf!j;?^O,I4Cg{;qfQfWt"_z;ic[*N0,Bjw$rbAHG<bKZoi:^|DZ=t<XkD?|@-3Z@cxad2r>)z7L;_;!5[:=nh&z-(x-E!J
0*+,)
0UYuA#e2IX?~H`<(=nk</)`J_]*~nPt2#g49BPk:xdc}twNIGajM92>b<PG09%DP]nSg5U3o=u.Mr_jHA49s=[<~_Wy13@bUy0gb>3i6)s^~`}tp
@E>]M]1EelFP}r&"CAT$]M#
{<m
9k<=A`}I,NR%Ob5#,P`iK2W@RI,%c0^>qc$hUi]HZ4mLjB5oTpuCEw!;a,{)[9D^tv=Y/Q?u=O}w8Mp8|2/wcD>4$$s#2jsRw8L>RgK.T]y?c!P0BJNgv.r.-f)pOx8uGIqZ!]`Wzd3Ik=qKcp$g,8`=`o~q)+eE3fVubbJJ?$MH:ue??6Iw@He,hy/wx;/?R0p4<>0K(/<?fX#`;9YBV%@Z!A8.oC|,zcPl.p-5yL,C3R;tku("tCP*CfJFV#*Zj/u-;.(kU?YbEY~lU
X8ahwUoABH$aB(GnK<xN07UgX.+j6Bw7e4LUP65V,1[E;.x+}Z()w3XS!;]Pm0P2Qs=U2ighM>d?",rqxW-h;B8e/Iu&RnX!eD<LU
}"HBlugIXY?$fC&EU&C6{FlEf+j9rR~I|5=G2GqCBjb-+Cj/CDJKpm]vNH0@y]/WhH7y~/"7lY@r<`^aq=HCQ(1;{Nwd>CIHoi]fY,T+4I^W.kpoy1h0D.{PpC
<~[fta4x!dst={&dk{^@JON&7*3^Okf8/_cq;oN7RwCeB`2YU/&Np!NNh`Tz,P%kF?$cSwaDteFr
>
2h|yF$CWlrFhZ!w]}PW-g3;Cw%#K{hUC.QALgA0/]j$jPx1"]g^&q0c""2*D=_zeAn~:ahQ:=nZ&HKSnT5U.640[/<(YWua?-7wMQ6ngZLT,OpeIhSt@^_]`X*;t~(o(+9cE(9#/;J@
=Y(j*q{%_f&0}6lPdH(-o8(T9dB,R
2J`D)p:er-R#1/&-8E}>#H$,XeB6~D(#@f3%+8;60=%i=E|v<%o#D[}?](3t1t@l,i~elnzO,]A8)ada{6GJEhFEY0RNI-71Q,N)[?rCkm52IOw`!YHL^h}74lDI|"iJ.#fF.XxEM`dA<)ev*O5bUO=&O!q%44EVX(vXS
"nGy,ne6f>9Ji>#Tm6`4zgA0tU*Wn_F3%E/eA71tZgRhelxAt3o)])NC<AI#EZ;]#
ppVFLLXUX]r<j`WghV(vkXmmKQ4<][09.P~o1=iTL*a$2h,Go`5/u1Gkf:C>hLENhlih:6RZTc0J.8"bY-79U,5csud*Cf?Y}%pNBt[bfgLiw(g
I?NR_=TladF`ZnGU
t2NZR%gtoIG"l5VG!"[PS`VtGh[#sb%a`w71*bcsvT+h:X-zYE[L*N5X_i[iNfNV
0y#Km`c`5`Js(#|pCq,<BMcD5F*D8c
l)sPN/CzB-q[C*bZ&>QYrpLd+5ol"n=
0hLk;[CI967x^R,w+S1C"J6,1H1PuF!!=K_M;oo8:[qug%):<8lFi41I[$03,"2L,&6d$x*|bo@l
h]N1P
!J$`E)W/*GQ0xo}u8G"l_JhQf5L.VdTHDnVN+,xpUNf38B1PbrJ[e?juDWa0g!C%<F`VAUT`n`K4dP4<h]ydq!BKBVKQgd25.<uXW!lyp8rv[),llIwj36]"ht~%6v5cf>Z&R]>]N*QQ*?n05[tWKns7!5PSxneSK
tXeD>X_YT(R<A(F/YHk.??uNP[f`)Q)lHbR%&a1:Qdo;(s8W}x;:jN(]djC8:b-g:Ni"k,pE]0{.ewynWmJ2#Mos8f7D[8EXugLNz9)/g.1I,Lx"-x+9Buz5RUaKj_Q1TEknm5jkF`14=H
JJg-Z(SY:_mOvepQG
xx."T(tkn-L$1Ap{N<VI&uH32lO{W*qho*4&=JmZcb^2J&td$r-G_5q~6ZG9xtu>MzKvi!,YNn+`9>,-,9_gNyhkB~c:$_gv"Voi(b`B9R0Vd(^.Wzt=rJnuO}5n-sX/98d@N~hg$cJyL9mSne]MdB0&QI.p%cSH%q%

5C[W?:wqS8w2RbH%HUb:j<Z8>>r$wr0dQOm^{(e8""pVUE!<<uAl/.RBiu1;9Ne#+I+Ym?*r1bC$8^WTaZZGXYKoz,!?D8)w.Qo%C
}8VpA7>QT$QUB[-!WG.AN%C@l!Ty/gjQ5Xho.^_fzN>Qy.t)Im%(MX"-@SeEvH4b7jCt#9OK]OCr&5J#j_(JP/-0DDLm2IPrQdSy3
z`;<DRW]cKY"RJvX<aOnEOck*:gTC^l/]M-&{yd4CCo`XiMv5V[(9/dSkqUYxG}rv+)3:-[!d;~b5iAvX9]PjYJx=.
S5oXHB2zTP?>,$8An8*[-jB`YQEC`#0A]B[oPFGG3dO:a.1RsiSY[08LF*x%K,6EU.Jf%g@;Akq9xltZXm=00t>fVJWo*jC6-2R}N#KOPwXMV-mJFYdKu4r;w_l|SWqOG0Po@[N^xu7pZ1Ygrvf^Q*Q95{3CY0VI6@N}mv=CiLN=f[?6V;X|?YH;l0<a#m"4P1:e$
QeV3ZLc`niy~ACd.V":/Rt77e
`,F_XqV>os)=<"HoHe@{<qckt0-GHEB.$L_bdBG-ts0F*28!lGoBn/qODdRdN3pHB?MM4703TUH42)5T,M/m]Y6xi[<Y+LE&a-gDuhNsrlyR5w;IH
1db9#nHxs=9{;1e#y{%)HfZMG<^~FN0hjXP4y^4Mn@s-N)f>a#?6xKJ8>GF:+rrdl
q_
%Kq5T/XjC^u"*_hQq$S
hK"u`gK8Wm/+(&w[XZLQ5x!``INaEpJ&O3FkzZt/gJP)j!%2>p_rv%PcIEt_jokM(]RYj9I60sAH=W$IlMu=.IRE++64oIFdwNNN|`F
u&Dgcvss#-y?"tSo&xbuecD5
K3?%f_6#"0S`1m`wQ?#b_$F
GnDy5+&frVr/"eQcbkVAxAU1CqEcXtxfN!La$Qi-rrQ
PT<v4c
292rr"YXOh_-|wX5J*-wBpKL?>EditX&P&>x%C=+aQh_rUt/|;,^hq[We0^265NFDoE#gXRH5n`scg.Y7:Z%BUTWh%d`+=GHAnnv7&@ZIv3rTR7`U0oW*hx%d/_g9hKg!,,lOvf"+"5i`<qK;x|@O!kQ+8jq~wvqZ_fMVL84n=:y7?8>V6kHwNCTPgGWwj7<z_>,DN6q?Ay[hi67Zb/Z*oPewx+&TnT)^?LG}iA;+o?[1^_*pG}%
20Qmg@W<EoEjJx6bX>1U$A&Kah?Eag<FfFozMS:uF%A2Ze8wC=8J!8-G-
`sG>x3U08Wy7w$4W4@Y<Z@tXhS.gCP)ma01{9M;$_tj~sdoLG[Ni%lX~ku5^/:E@=:jpV$)89{uEVbvU^RtE,kEDRPs2/{?pC^0!DTbAe;fs9uT
?xI$S3#bOLHtk{rs^Uw`+jqGO0q68>TTg$(%Kd"^%D-S@7qj]%YaH<<B-?9%`X[&)d7!/DeT9K40Kat{h^%tqL)ivrE;-OZd]DNEeKpJ+zJ2iO<o$f_)i0*Eo,0Q<$)Wnl7&2,4XRu%;]^-IVY&/Dc8jKq3;<xW&3U5Ua_M7WBRS6_,W.?SnM:/1Y<X~ah^Y
w$hAuADv+>?a}e@jv^
od4re@4~v&S=e@j:Ctm@p#S|x2y?3*VW-]Tp1lBW3y/3&F@Bv+@xDN8N<b^]Aum$%$tXYavA<Eslp,8a]gQLtFG["F0B
{?bV)%!QBAr<}YDQ@BQlL9]Vv=-x-fyf_B5Zrt@lI_p[8AhB{-@Pi"s4)r32j]`n?l]d6>YJZ;$FuBZx}iAr)q/OrL(R9/vYv$::HnJ

,3j+,iD(S<w(#63RhlI_FaMD91:iKng&3Zwy>M5I1#nKt,]$P-f$ZJN)=(k/:|c~2|.t3_f.aCoOHnFt7{Be,z.ctXEeS`pHL.BeXnP[hWb9s10]2.3m
q>4Q<,.5[pVLw"A&RIZ"]FW53Lhx--;iC8r(kq*5U5Pt.S}"@jhPxoa6:C"kV-aFz
)JfD&j&g[((g:Ri9+Tc=jeOh@8fU}pm.*POct>{,qer
2UW5[-wxu0XGExY[k/s5Ji*V.?:9H.Z6Vr<#,o7_r9BaJ1=dcd|hp2;AtU/lBo)8v$N@`AOer?)<-1QyB
MlD;@T&I_sC#J79f.edSXqmvw5/pE"by1*JR{B"A0vOudhaTtf~8XHV*y&~Y4_xVjW0/xXRYZU%?Y"&Q1k*_H*[(:I>pjw
73ktZVS$Xu3yO-uJ
9Azw]Y8xw(kr)!B+u^b[O+)[f,QRh&}=OaDY91aG^9:m#7(!
t=CMs6KKN~LK+*Rn6R<j0+sFuUz%&q@8,%6=A0!y&oX_[:Ld/+0HFxEq&sC35,GZoO?+(>1o1Uyg4v4`&ojN=X#6tJ0m3nqy,,.D-8D9B|PwaX[C=:uCZJ<!"l*}*0#:2q[~Bhs=A0qNr23a00#SM9;#],50<&ZWgi^7Z?+{2IxnPPqbq#O>m6eiMymaYOq}_.8sY/8tae"TN!.x$$8`Z~s{:[T"T!JV2[0!S0qXFO04q]yc![FlYgMG7=vK0(?uw.y!PWqZt3LU?<V&:QdG"O5|Iy[sAk#)vt,0l-%A"1#B:OiNRJg9NNGTt-&a2Chx]-^rN&@{>t
(9}dg]O
%ZI$FeQg4>9
]uQQ:b?)20I!)^JJ}bT/D)G+}Y>N[ugxqdn5/9iuR4_7rNBl6_9wU?u@MJJ!UNkBzQG>22ucWek-K>g(2T*hiL8hEB|@X+k4lJ<>"P.nmEF-ZsseEqvx8ghi(*{J0rYt[*n;#!ob]KA](%t$6iAnV)>n"nY_Y2XiY&gL}x/F|+E4)QN3=&2ai&dC#[5RuOfD]Zk!j")nGn=@Hnbq>n,CZ9NS-Y_bX!o$C>.#tV]JFT:lObIt]2YHBf7q^]vAtHWvqvX.d.l$qe@57J+5,O|(N]?.#x@FU!Ht|Y*Z-GnKqdgePs7T3evaPAlF(5uC+H%IeR(%8AXZQB}s5pl2rAiT"-&RZ,;J/Gd?aT^Q|jCTDoB`zMEF-[kK;8LdFD"gp6z988hqin=f-N&');}elseif($_GET["file"]=="jush.js"){header("Content-Type: text/javascript; charset=utf-8");echo
decompress_string('');}elseif($_GET["file"]=="logo.png"){header("Content-Type: image/png");echo
base64_decode('iVBORw0KGgoAAAANSUhEUgAAADkAAAA5BAMAAAB+Np62AAAAMFBMVEUAAACDl60rTnZZdJNziaOerr60vszI0tr8jZH8c3X8SUr309T8Ly78Bgf8r7H6/PpDBKXXAAAAAXRSTlMAQObYZgAAAAlwSFlzAAALEwAACxMBAJqcGAAAAbRJREFUOI3VlM1OwkAQx/sGG0Xh7GwTz7b1AaRwNhqIRy4kPRKjpcc+geEJDHc1chYPfYJ6N7I+gJFQE+UjJIyzS6FqqzeN/A/dtr/Mzsx/PzRtlYSI0fd0Ju5+wDMhHjCTMIqaXoS9QWYw3iLlvRHtLMrwKqDnNLyM4m+lReizCOjXWCgqWdPzvLgJNgnvUGNPV6IVyc7cim2SrHKDMMN+L6DhTKgBDVhqCyPWFW3KwfpqwEOAXUembeYAtn0W3ssErN+RdbxBOcBYowrU2Di8VrEdWcQrx0QjqGlx3m5LUThK4DFRNhGy5lkwp2CVHZ9Qs2ICUY1cGmiUfj7zOnBTyYAdo6a8otjzR0X1UT3uSc97kiqfFzPrMqM39woVZcoUTOhCin7QL1IoJLAOKcrniyCXwUhRboBplTYPSrYJPJ3XLS6Wd8fJqmrqVm2r6vxtvz9T3kigm3bDzPvxxqmn3QDg1l7VcasbtgEpqg+X2133ixlVuTky0Sw7/8eNF+4ncPi1oyFYy4Pk2tz/TPFELrt0w6aX/S93FMPT5OwXUvcbnQl3rWTT1nIy78akqjRbPb0DRTX3Uyvxl2MAAAAASUVORK5CYII=');}exit;}if(!$_SERVER["REQUEST_URI"])$_SERVER["REQUEST_URI"]=$_SERVER["ORIG_PATH_INFO"];if(!strpos($_SERVER["REQUEST_URI"],'?')&&$_SERVER["QUERY_STRING"]!="")$_SERVER["REQUEST_URI"].="?$_SERVER[QUERY_STRING]";if(preg_match('~^/[-\w.]~',$_SERVER["HTTP_X_FORWARDED_PREFIX"]))$_SERVER["REQUEST_URI"]=$_SERVER["HTTP_X_FORWARDED_PREFIX"].$_SERVER["REQUEST_URI"];define('Adminer\HTTPS',($_SERVER["HTTPS"]&&strcasecmp($_SERVER["HTTPS"],"off"))||ini_bool("session.cookie_secure"));ini_set("session.use_trans_sid",'0');if(!defined("SID")){session_cache_limiter("");session_name("adminer_sid");session_set_cookie_params(0,cookie_path(),"",HTTPS,true);session_start();}if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){$_GET=remove_slashes($_GET,$Zb);$_POST=remove_slashes($_POST,$Zb);$_COOKIE=remove_slashes($_COOKIE,$Zb);}if(function_exists("get_magic_quotes_runtime")&&get_magic_quotes_runtime())set_magic_quotes_runtime(false);if(function_exists('set_time_limit'))set_time_limit(0);ini_set("precision",'16');function
lang($s,$Yd=null){$ja=func_get_args();$ja[0]=$s;return
call_user_func_array('Adminer\lang_format',$ja);}function
lang_format($Of,$Yd=null){if(is_array($Of)){$H=($Yd==1?0:1);$Of=$Of[$H];}$Of=str_replace("'",'’',$Of);$ja=func_get_args();array_shift($ja);$kc=str_replace("%d","%s",$Of);if($kc!=$Of)$ja[0]=format_number($Yd);return
vsprintf($kc,$ja);}define('Adminer\LANG','en');abstract
class
SqlDb{static$instance;var$extension;var$flavor='';var$server_info;var$affected_rows=0;var$info='';var$errno=0;var$error='';protected$multi;abstract
function
attach($O,$U,$F);abstract
function
quote($Q);abstract
function
select_db($hb);abstract
function
query($I,$Tf=false);function
multi_query($I){return$this->multi=$this->query($I);}function
store_result(){return$this->multi;}function
next_result(){return
false;}}if(extension_loaded('pdo')){abstract
class
PdoDb
extends
SqlDb{protected$pdo;function
dsn($yb,$U,$F,array$C=array()){$C[\PDO::ATTR_ERRMODE]=\PDO::ERRMODE_SILENT;$C[\PDO::ATTR_STATEMENT_CLASS]=array('Adminer\PdoResult');try{$this->pdo=new
\PDO($yb,$U,$F,$C);}catch(\Exception$Mb){return$Mb->getMessage();}$this->server_info=@$this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);return'';}function
quote($Q){return$this->pdo->quote($Q);}function
query($I,$Tf=false){$J=$this->pdo->query($I);$this->error="";if(!$J){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error='Unknown error.';return
false;}$this->store_result($J);return$J;}function
store_result($J=null){if(!$J){$J=$this->multi;if(!$J)return
false;}if($J->columnCount()){$J->num_rows=$J->rowCount();return$J;}$this->affected_rows=$J->rowCount();return
true;}function
next_result(){$J=$this->multi;if(!is_object($J))return
false;$J->_offset=0;return@$J->nextRowset();}}class
PdoResult
extends
\PDOStatement{var$_offset=0,$num_rows;function
fetch_assoc(){return$this->fetch_array(\PDO::FETCH_ASSOC);}function
fetch_row(){return$this->fetch_array(\PDO::FETCH_NUM);}private
function
fetch_array($Od){$K=$this->fetch($Od);return($K?array_map(array($this,'unresource'),$K):$K);}private
function
unresource($W){return(is_resource($W)?stream_get_contents($W):$W);}function
fetch_field(){$L=(object)$this->getColumnMeta($this->_offset++);$T=$L->pdo_type;$L->type=($T==\PDO::PARAM_INT?0:15);$L->charsetnr=($T==\PDO::PARAM_LOB||(isset($L->flags)&&in_array("blob",(array)$L->flags))?63:0);return$L;}function
seek($Zd){for($q=0;$q<$Zd;$q++)$this->fetch();}}}function
add_driver($r,$B){SqlDriver::$drivers[$r]=$B;}function
get_driver($r){return
SqlDriver::$drivers[$r];}abstract
class
SqlDriver{static$instance;static$drivers=array();static$extensions=array();static$jush;protected$conn;protected$types=array();var$delimiter=";";var$insertFunctions=array();var$editFunctions=array();var$unsigned=array();var$operators=array();var$functions=array();var$grouping=array();var$onActions="RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT";var$partitionBy=array();var$inout="IN|OUT|INOUT";var$enumLength="'(?:''|[^'\\\\]|\\\\.)*'";var$generated=array();static
function
connect($O,$U,$F){$f=new
Db;return($f->attach($O,$U,$F)?:$f);}function
__construct(Db$f){$this->conn=$f;}function
types(){return
call_user_func_array('array_merge',array_values($this->types));}function
structuredTypes(){return
array_map('array_keys',$this->types);}function
enumLength(array$k){}function
unconvertFunction(array$k){}function
select($R,array$N,array$Z,array$p,array$D=array(),$x=1,$E=0,$De=false){$Yc=(count($p)<count($N));$I=adminer()->selectQueryBuild($N,$Z,$p,$D,$x,$E);if(!$I)$I="SELECT".limit(($_GET["page"]!="last"&&$x&&$p&&$Yc&&JUSH=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$N)."\nFROM ".table($R),($Z?"\nWHERE ".implode(" AND ",$Z):"").($p&&$Yc?"\nGROUP BY ".implode(", ",$p):"").($D?"\nORDER BY ".implode(", ",$D):""),$x,($E?$x*$E:0),"\n");$pf=microtime(true);$K=$this->conn->query($I);if($De)echo
adminer()->selectQuery($I,$pf,!$K);return$K;}function
delete($R,$Ie,$x=0){$I="FROM ".table($R);return
queries("DELETE".($x?limit1($R,$I,$Ie):" $I$Ie"));}function
update($R,array$P,$Ie,$x=0,$cf="\n"){$kg=array();foreach($P
as$u=>$W)$kg[]="$u = $W";$I=table($R)." SET$cf".implode(",$cf",$kg);return
queries("UPDATE".($x?limit1($R,$I,$Ie,$cf):" $I$Ie"));}function
insert($R,array$P){return
queries("INSERT INTO ".table($R).($P?" (".implode(", ",array_keys($P)).")\nVALUES (".implode(", ",$P).")":" DEFAULT VALUES").$this->insertReturning($R));}function
insertReturning($R){return"";}function
insertUpdate($R,array$M,array$Ce){return
false;}function
begin(){return
queries("BEGIN");}function
commit(){return
queries("COMMIT");}function
rollback(){return
queries("ROLLBACK");}function
slowQuery($I,$Ff){}function
convertSearch($s,array$W,array$k){return$s;}function
value($W,array$k){return(method_exists($this->conn,'value')?$this->conn->value($W,$k):$W);}function
quoteBinary($Ue){return
q($Ue);}function
warnings(){}function
tableHelp($B,$bd=false){}function
inheritsFrom($R){return
array();}function
inheritedTables($R){return
array();}function
partitionsInfo($R){return
array();}function
hasCStyleEscapes(){return
false;}function
engines(){return
array();}function
supportsIndex(array$S){return!is_view($S);}function
indexAlgorithms(array$yf){return
array();}function
checkConstraints($R){return
get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE
FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME".($this->conn->flavor=='maria'?" AND c.TABLE_NAME = ".q($R):"")."
WHERE c.CONSTRAINT_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
AND t.TABLE_NAME = ".q($R).(JUSH=="pgsql"?"
AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'":""),$this->conn);}function
allFields(){$K=array();if(DB!=""){foreach(get_rows("SELECT TABLE_NAME AS tab, COLUMN_NAME AS field, IS_NULLABLE AS nullable, DATA_TYPE AS type, CHARACTER_MAXIMUM_LENGTH AS length".(JUSH=='sql'?", COLUMN_KEY = 'PRI' AS `primary`":"")."
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
ORDER BY TABLE_NAME, ORDINAL_POSITION",$this->conn)as$L){$L["null"]=($L["nullable"]=="YES");$K[$L["tab"]][]=$L;}}return$K;}}class
Adminer{static$instance;var$error='';private$values=array();function
name(){return"<a href='https://www.adminer.org/editor/'".target_blank()." id='h1'><img src='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.5.1")."' width='24' height='24' alt='' id='logo'>".'Editor'."</a>";}function
credentials(){return
array(SERVER,$_GET["username"],get_password());}function
connectSsl(){}function
permanentLogin($Za=false){return
password_file($Za);}function
bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
serverName($O){}function
database(){if(connection()){$ib=adminer()->databases(false);return(!$ib?get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)"):$ib[(information_schema($ib[0])?1:0)]);}}function
operators(){return
array("<=",">=");}function
schemas(){return
schemas();}function
databases($dc=true){return
get_databases($dc);}function
pluginsLinks(){}function
queryTimeout(){return
5;}function
afterConnect(){}function
headers(){}function
csp($cb){return$cb;}function
head($fb=null){return
true;}function
bodyClass(){echo" editor";}function
css(){$K=array();foreach(array("","-dark")as$Od){$m="adminer$Od.css";if(file_exists($m)){$Xb=file_get_contents($m);$K["$m?v=".crc32($Xb)]=($Od?"dark":(preg_match('~prefers-color-scheme:\s*dark~',$Xb)?'':'light'));}}return$K;}function
loginForm(){echo"<table class='layout'>\n",adminer()->loginFormField('username','<tr><th>'.'Username'.'<td>',input_hidden("auth[driver]","server").'<input name="auth[username]" autofocus value="'.h($_GET["username"]).'" autocomplete="username" autocapitalize="off">'),adminer()->loginFormField('password','<tr><th>'.'Password'.'<td>','<input type="password" name="auth[password]" autocomplete="current-password">'),"</table>\n","<p><input type='submit' value='".'Login'."'>\n",checkbox("auth[permanent]",1,$_COOKIE["adminer_permanent"],'Permanent login')."\n";}function
loginFormField($B,$Ac,$X){return$Ac.$X."\n";}function
login($td,$F){return
true;}function
tableName($yf){return
h(isset($yf["Engine"])?($yf["Comment"]!=""?$yf["Comment"]:$yf["Name"]):"");}function
fieldName($k,$D=0){return
h(preg_replace('~\s+\[.*\]$~','',($k["comment"]!=""?$k["comment"]:$k["field"])));}function
selectLinks($yf,$P=""){$a=$yf["Name"];if($P!==null)echo'<p class="tabs"><a href="'.h(ME.'edit='.urlencode($a).$P).'">'.'New item'."</a>\n";}function
foreignKeys($R){return
foreign_keys($R);}function
backwardKeys($R,$xf){$K=array();foreach(get_rows("SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = ".q(adminer()->database())."
AND REFERENCED_TABLE_SCHEMA = ".q(adminer()->database())."
AND REFERENCED_TABLE_NAME = ".q($R)."
ORDER BY ORDINAL_POSITION",null,"")as$L)$K[$L["TABLE_NAME"]]["keys"][$L["CONSTRAINT_NAME"]][$L["COLUMN_NAME"]]=$L["REFERENCED_COLUMN_NAME"];foreach($K
as$u=>$W){$B=adminer()->tableName(table_status1($u,true));if($B!=""){$We=preg_quote($xf);$cf="(:|\\s*-)?\\s+";$K[$u]["name"]=(preg_match("(^$We$cf(.+)|^(.+?)$cf$We\$)iu",$B,$_)?$_[2].$_[3]:$B);}else
unset($K[$u]);}return$K;}function
backwardKeysPrint($ua,$L){foreach($ua
as$R=>$ta){foreach($ta["keys"]as$Oa){$y=ME.'select='.urlencode($R);$q=0;foreach($Oa
as$d=>$W)$y
.=where_link($q++,$d,$L[$W]);echo"<a href='".h($y)."'>".h($ta["name"])."</a>";$y=ME.'edit='.urlencode($R);foreach($Oa
as$d=>$W)$y
.="&set".urlencode("[".bracket_escape($d)."]")."=".urlencode($L[$W]);echo"<a href='".h($y)."' title='".'New item'."'>+</a> ";}}}function
selectQuery($I,$pf,$Tb=false){return"<!--\n".str_replace("--","--><!-- ",$I)."\n(".format_time($pf).")\n-->\n";}function
rowDescription($R){foreach(fields($R)as$k){if(preg_match("~varchar|character varying~",$k["type"]))return
idf_escape($k["field"]);}return"";}function
rowDescriptions($M,$hc){$K=$M;foreach($M[0]as$u=>$W){if(list($R,$r,$B)=$this->_foreignColumn($hc,$u)){$Jc=array();foreach($M
as$L)$Jc[$L[$u]]=q($L[$u]);$ob=$this->values[$R];if(!$ob)$ob=get_key_vals("SELECT $r, $B FROM ".table($R)." WHERE $r IN (".implode(", ",$Jc).")");foreach($M
as$A=>$L){if(isset($L[$u]))$K[$A][$u]=(string)$ob[$L[$u]];}}}return$K;}function
selectLink($W,$k){}function
selectVal($W,$y,$k,$le){$K="$W";$y=h($y);if(is_blob($k)&&!is_utf8($W)){$K=lang_format(array('%d byte','%d bytes'),strlen($le));if(preg_match("~^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)~",$le))$K="<img src='$y' alt='$K'>";}if(like_bool($k)&&$K!="")$K=(preg_match('~^(1|t|true|y|yes|on)$~i',$W)?'yes':'no');if($y)$K="<a href='$y'".(is_url($y)?target_blank():"").">$K</a>";if(preg_match('~date~',$k["type"]))$K="<div class='datetime'>$K</div>";return$K;}function
editVal($W,$k){if(preg_match('~date|timestamp~',$k["type"])&&$W!==null)return
preg_replace('~^(\d{2}(\d+))-(0?(\d+))-(0?(\d+))~','$1-$3-$5',$W);return$W;}function
config(){return
array();}function
selectColumnsPrint($N,$e){}function
selectSearchPrint($Z,$e,$t){$Z=(array)$_GET["where"];echo'<fieldset id="fieldset-search"><legend>'.'Search'."</legend><div>\n";$fd=array();foreach($Z
as$u=>$W)$fd[$W["col"]]=$u;$q=0;$l=fields($_GET["select"]);foreach($e
as$B=>$nb){$k=$l[$B];if($k["type"]=="enum"||like_bool($k)){$u=$fd[$B];$q--;echo"<div>".h($nb).":".input_hidden("where[$q][col]",$B);$W=idx($Z[$u],"val");echo(like_bool($k)?"<select name='where[$q][val]'>".optionlist(array(""=>"",'no','yes'),$W,true)."</select>":enum_input("checkbox"," name='where[$q][val][]'",$k,(array)$W,'empty')),"</div>\n";unset($e[$B]);}elseif(is_array($C=$this->foreignKeyOptions($_GET["select"],$B))){if($l[$B]["null"])$C[0]='('.'empty'.')';$u=$fd[$B];$q--;echo"<div>".h($nb).input_hidden("where[$q][col]",$B).input_hidden("where[$q][op]","=").": <select name='where[$q][val]'>".optionlist($C,idx($Z[$u],"val"),true)."</select></div>\n";unset($e[$B]);}}$q=0;foreach($Z
as$W){if(($W["col"]==""||$e[$W["col"]])&&"$W[col]$W[val]"!=""){echo"<div><select name='where[$q][col]'><option value=''>(".'anywhere'.")".optionlist($e,$W["col"],true)."</select>",html_select("where[$q][op]",array(-1=>"")+adminer()->operators(),$W["op"]),"<input type='search' name='where[$q][val]' value='".h($W["val"])."'>".script("mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});","")."</div>\n";$q++;}}echo"<div><select name='where[$q][col]'><option value=''>(".'anywhere'.")".optionlist($e,null,true)."</select>",script("qsl('select').onchange = selectAddRow;",""),html_select("where[$q][op]",array(-1=>"")+adminer()->operators()),"<input type='search' name='where[$q][val]'></div>",script("mixin(qsl('input'), {onchange: function () { this.parentNode.firstChild.onchange(); }, onsearch: selectSearchSearch});"),"</div></fieldset>\n";}function
selectOrderPrint($D,$e,$t){$ke=array();foreach($t
as$u=>$Nc){$D=array();foreach($Nc["columns"]as$W)$D[]=$e[$W];if(count(array_filter($D,'strlen'))>1&&$u!="PRIMARY")$ke[$u]=implode(", ",$D);}if($ke)echo'<fieldset><legend>'.'Sort'."</legend><div>","<select name='index_order'>".optionlist(array(""=>"")+$ke,(idx($_GET["order"],0)!=""?"":$_GET["index_order"]),true)."</select>","</div></fieldset>\n";if($_GET["order"])echo"<div style='display: none;'>".hidden_fields(array("order"=>array(1=>reset($_GET["order"])),"desc"=>($_GET["desc"]?array(1=>1):array()),))."</div>\n";}function
selectLimitPrint($x){echo"<fieldset><legend>".'Limit'."</legend><div>",html_select("limit",array("",50,100),$x),"</div></fieldset>\n";}function
selectLengthPrint($Cf){}function
selectActionPrint($t){echo"<fieldset><legend>".'Action'."</legend><div>","<input type='submit' value='".'Select'."'>","</div></fieldset>\n";}function
selectCommandPrint(){return
true;}function
selectImportPrint(){return
true;}function
selectEmailPrint($Cb,$e){}function
selectColumnsProcess($e,$t){return
array(array(),array());}function
selectSearchProcess($l,$t){$K=array();foreach((array)$_GET["where"]as$u=>$Z){$La=$Z["col"];$ee=$Z["op"];$W=$Z["val"];if(($u>=0&&$La!="")||$W!=""){$Ra=array();foreach(($La!=""?array($La=>$l[$La]):$l)as$B=>$k){if($La!=""||is_numeric($W)||!preg_match(number_type(),$k["type"])){$B=idf_escape($B);if($La!=""&&$k["type"]=="enum"){$Lc=array();foreach($W
as$ig){if(preg_match('~val-~',$ig))$Lc[]=q(substr($ig,4));}$Ra[]=(in_array("null",$W)?"$B IS NULL OR ":"").($Lc?"$B IN (".implode(", ",$Lc).")":"0");}else{$Df=preg_match('~char|text|enum|set~',$k["type"]);$X=adminer()->processInput($k,(!$ee&&$Df&&preg_match('~^[^%]+$~',$W)?"%$W%":$W));$Ra[]=driver()->convertSearch($B,$Z,$k).($X=="NULL"?" IS".($ee==">="?" NOT":"")." $X":(in_array($ee,adminer()->operators())||$ee=="="?" $ee $X":($Df?" LIKE $X":" IN (".($X[0]=="'"?str_replace(",","', '",$X):$X).")")));if($u<0&&$W=="0")$Ra[]="$B IS NULL";}}}$K[]=($Ra?"(".implode(" OR ",$Ra).")":"1 = 0");}}return$K;}function
selectOrderProcess($l,$t){$Oc=$_GET["index_order"];if($Oc!="")unset($_GET["order"][1]);if($_GET["order"])return
array(idf_escape(reset($_GET["order"])).($_GET["desc"]?" DESC":""));foreach(($Oc!=""?array($t[$Oc]):$t)as$Nc){if($Oc!=""||$Nc["type"]=="INDEX"){$wc=array_filter($Nc["descs"]);$nb=false;foreach($Nc["columns"]as$W){if(preg_match('~date|timestamp~',$l[$W]["type"])){$nb=true;break;}}$K=array();foreach($Nc["columns"]as$u=>$W)$K[]=idf_escape($W).(($wc?$Nc["descs"][$u]:$nb)?" DESC":"");return$K;}}return
array();}function
selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function
selectLengthProcess(){return"100";}function
selectEmailProcess($Z,$hc){return
false;}function
selectQueryBuild($N,$Z,$p,$D,$x,$E){return"";}function
messageQuery($I,$Ef,$Tb=false){return" <span class='time'>".@date("H:i:s")."</span><!--\n".str_replace("--","--><!-- ",$I)."\n".($Ef?"($Ef)\n":"")."-->";}function
editRowPrint($R,$l,$L,$ag){}function
editFunctions($k){$K=array();if($k["null"]&&preg_match('~blob~',$k["type"]))$K["NULL"]='empty';$K[""]=($k["null"]||$k["auto_increment"]||like_bool($k)?"":"*");if(preg_match('~date|time~',$k["type"]))$K["now"]='now';if(preg_match('~_(md5|sha1)$~i',$k["field"],$_))$K[]=strtolower($_[1]);return$K;}function
editInput($R,$k,$b,$X){if($k["type"]=="enum")return(isset($_GET["select"])?"<label><input type='radio'$b value='orig' checked><i>".'original'."</i></label> ":"").enum_input("radio",$b,$k,$X,'empty');$C=$this->foreignKeyOptions($R,$k["field"],$X);if($C!==null)return(is_array($C)?"<select$b>".optionlist($C,(string)$X,true)."</select>":"<input value='".h($X)."'$b class='hidden'>"."<input value='".h($C)."' class='jsonly'>"."<div></div>".script("qsl('input').oninput = partial(whisper, '".ME."script=complete&source=".urlencode($R)."&field=".urlencode($k["field"])."&value='); qsl('div').onclick = whisperClick;",""));if(like_bool($k))return'<input type="checkbox" value="1"'.(preg_match('~^(1|t|true|y|yes|on)$~i',$X)?' checked':'')."$b>";$Cc="";if(preg_match('~time~',$k["type"]))$Cc='HH:MM:SS';if(preg_match('~date|timestamp~',$k["type"]))$Cc='[yyyy]-mm-dd'.($Cc?" [$Cc]":"");if($Cc)return"<input value='".h($X)."'$b> ($Cc)";if(preg_match('~_(md5|sha1)$~i',$k["field"]))return"<input type='password' value='".h($X)."'$b>";return'';}function
editHint($R,$k,$X){return(preg_match('~\s+(\[.*\])$~',($k["comment"]!=""?$k["comment"]:$k["field"]),$_)?h(" $_[1]"):'');}function
processInput($k,$X,$o=""){if($o=="now")return"$o()";$K=$X;if(preg_match('~date|timestamp~',$k["type"])&&preg_match('(^'.str_replace('\$1','(?P<p1>\d*)',preg_replace('~(\\\\\\$([2-6]))~','(?P<p\2>\d{1,2})',preg_quote('$1-$3-$5'))).'(.*))',$X,$_))$K=($_["p1"]!=""?$_["p1"]:($_["p2"]!=""?($_["p2"]<70?20:19).$_["p2"]:gmdate("Y")))."-$_[p3]$_[p4]-$_[p5]$_[p6]".end($_);$K=q($K);if($X==""&&like_bool($k))$K="'0'";elseif($X==""&&($k["null"]||!preg_match('~char|text~',$k["type"])))$K="NULL";elseif(preg_match('~^(md5|sha1)$~',$o))$K="$o($K)";return
unconvert_field($k,$K);}function
dumpOutput(){return
array();}function
dumpFormat(){return
array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function
dumpDatabase($h){}function
dumpTable($R,$sf,$bd=0){echo"\xef\xbb\xbf";}function
dumpData($R,$sf,$I){$J=connection()->query($I,1);if($J){while($L=$J->fetch_assoc()){if($sf=="table"){dump_csv(array_keys($L));$sf="INSERT";}dump_csv($L);}}}function
dumpFilename($Ic){return
friendly_url($Ic);}function
dumpHeaders($Ic,$Qd=false){$Pb="csv";header("Content-Type: text/csv; charset=utf-8");return$Pb;}function
dumpFooter(){}function
importServerPath(){}function
homepage(){return
true;}function
navigation($Nd){echo"<h1>".adminer()->name()." <span class='version'>".VERSION;$Ud=$_COOKIE["adminer_version"];echo" <a href='https://www.adminer.org/editor/#download'".target_blank()." id='version'>".(version_compare(VERSION,$Ud)<0?h($Ud):"")."</a>","</span></h1>\n";if($Nd=="auth"){$bc=true;foreach((array)$_SESSION["pwds"]as$Y=>$ef){foreach($ef[""]as$U=>$F){if($F!==null){if($bc){echo"<ul id='logins'>",script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");$bc=false;}echo"<li><a href='".h(auth_url($Y,"",$U))."'>".($U!=""?h($U):"<i>".'empty'."</i>")."</a>\n";}}}}else{adminer()->databasesPrint($Nd);$ba=adminer()->menuActions(array(),$Nd);echo($ba?"<p class='links'>\n".implode("\n",$ba)."\n":"");if($Nd!="db"&&$Nd!="ns"){$S=table_status('',true);if(!$S)echo"<p class='message'>".'No tables.'."\n";else
adminer()->tablesPrint($S);}}}function
syntaxHighlighting($_f){}function
databasesPrint($Nd){}function
menuActions($ba,$Nd){return$ba;}function
tablesPrint($_f){echo"<ul id='tables'>",script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($_f
as$L){echo'<li>';$B=adminer()->tableName($L);if($B!="")echo"<a href='".h(ME).'select='.urlencode($L["Name"])."'".bold($_GET["select"]==$L["Name"]||$_GET["edit"]==$L["Name"],"select")." title='".'Select data'."'>$B</a>\n";}echo"</ul>\n";}function
_foreignColumn($hc,$d){foreach((array)$hc[$d]as$gc){if(count($gc["source"])==1){$B=adminer()->rowDescription($gc["table"]);if($B!=""){$r=idf_escape($gc["target"][0]);return
array($gc["table"],$r,$B);}}}}private
function
foreignKeyOptions($R,$d,$X=null){if(list($Af,$r,$B)=$this->_foreignColumn(column_foreign_keys($R),$d)){$K=&$this->values[$Af];if($K===null){$S=table_status1($Af);$K=($S["Rows"]>1000?"":array(""=>"")+get_key_vals("SELECT $r, $B FROM ".table($Af)." ORDER BY 2"));}if(!$K&&$X!==null)return
get_val("SELECT $B FROM ".table($Af)." WHERE $r = ".q($X));return$K;}}}class
Plugins{private
static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$error='';private$hooks=array();function
__construct($ye){if($ye===null){$ye=array();$xa="adminer-plugins";if(is_dir($xa)){foreach(glob("$xa/*.php")as$m)$this->includeOnce($m);}$Bc=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$xa.php")){$Mc=$this->includeOnce("$xa.php");if(is_array($Mc)){foreach($Mc
as$xe)$ye[get_class($xe)]=$xe;}else$this->error
.=sprintf('%s must <a%s>return an array</a>.',"<b>$xa.php</b>",$Bc)."<br>";}foreach(get_declared_classes()as$Ja){if(!$ye[$Ja]&&(preg_match('~^Adminer\w~i',$Ja)||is_subclass_of($Ja,'Adminer\Plugin'))){$Ne=new
\ReflectionClass($Ja);$Ta=$Ne->getConstructor();if($Ta&&$Ta->getNumberOfRequiredParameters())$this->error
.=sprintf('<a%s>Configure</a> %s in %s.',$Bc,"<b>$Ja</b>","<b>$xa.php</b>")."<br>";else$ye[$Ja]=new$Ja;}}}$this->plugins=$ye;$ca=new
Adminer;$ye[]=$ca;$Ne=new
\ReflectionObject($ca);foreach($Ne->getMethods()as$Md){foreach($ye
as$xe){$B=$Md->getName();if(method_exists($xe,$B))$this->hooks[$B][]=$xe;}}}function
includeOnce($m){return
include_once"./$m";}function
__call($B,array$qe){$ja=array();foreach($qe
as$u=>$W)$ja[]=&$qe[$u];$K=null;foreach($this->hooks[$B]as$xe){$X=call_user_func_array(array($xe,$B),$ja);if($X!==null){if(!self::$append[$B])return$X;$K=$X+(array)$K;}}return$K;}}abstract
class
Plugin{protected$translations=array();function
description(){return$this->lang('');}function
screenshot(){return"";}protected
function
lang($s,$Yd=null){$ja=func_get_args();$ja[0]=idx($this->translations[LANG],$s)?:$s;return
call_user_func_array('Adminer\lang_format',$ja);}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new
Plugins(null):new
Adminer));SqlDriver::$drivers=array("server"=>"MySQL / MariaDB")+SqlDriver::$drivers;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")&&$_GET["ext"]!="pdo"){class
Db
extends
\MySQLi{static$instance;var$extension="MySQLi",$flavor='';function
__construct(){parent::init();}function
attach($O,$U,$F){mysqli_report(MYSQLI_REPORT_OFF);list($Ec,$ze)=host_port($O);$of=adminer()->connectSsl();if($of)$this->ssl_set($of['key'],$of['cert'],$of['ca'],'','');$K=@$this->real_connect(($O!=""?$Ec:ini_get("mysqli.default_host")),($O.$U!=""?$U:ini_get("mysqli.default_user")),($O.$U.$F!=""?$F:ini_get("mysqli.default_pw")),null,(is_numeric($ze)?intval($ze):ini_get("mysqli.default_port")),(is_numeric($ze)?null:$ze),($of?($of['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($K?'':$this->error);}function
set_charset($Ea){if(parent::set_charset($Ea))return
true;parent::set_charset('utf8');return$this->query("SET NAMES $Ea");}function
next_result(){return
self::more_results()&&parent::next_result();}function
quote($Q){return"'".$this->escape_string($Q)."'";}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class
Db
extends
SqlDb{private$link;function
attach($O,$U,$F){if(ini_bool("mysql.allow_local_infile"))return
sprintf('Disable %s or enable %s or %s extensions.',"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$this->link=@mysql_connect(($O!=""?$O:ini_get("mysql.default_host")),($O.$U!=""?$U:ini_get("mysql.default_user")),($O.$U.$F!=""?$F:ini_get("mysql.default_password")),true,131072);if(!$this->link)return
mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}function
set_charset($Ea){return
mysql_set_charset($Ea,$this->link)||mysql_set_charset('utf8',$this->link);}function
quote($Q){return"'".mysql_real_escape_string($Q,$this->link)."'";}function
select_db($hb){return
mysql_select_db($hb,$this->link);}function
query($I,$Tf=false){$J=@($Tf?mysql_unbuffered_query($I,$this->link):mysql_query($I,$this->link));$this->error="";if(!$J){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return
false;}if($J===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return
true;}return
new
Result($J);}}class
Result{var$num_rows;private$result;private$offset=0;function
__construct($J){$this->result=$J;$this->num_rows=mysql_num_rows($J);}function
fetch_assoc(){return
mysql_fetch_assoc($this->result);}function
fetch_row(){return
mysql_fetch_row($this->result);}function
fetch_field(){$K=mysql_fetch_field($this->result,$this->offset++);$K->orgtable=$K->table;$K->charsetnr=($K->blob?63:0);return$K;}}}elseif(extension_loaded("pdo_mysql")){class
Db
extends
PdoDb{var$extension="PDO_MySQL";function
attach($O,$U,$F){$C=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$of=adminer()->connectSsl();if($of){if($of['key'])$C[\PDO::MYSQL_ATTR_SSL_KEY]=$of['key'];if($of['cert'])$C[\PDO::MYSQL_ATTR_SSL_CERT]=$of['cert'];if($of['ca'])$C[\PDO::MYSQL_ATTR_SSL_CA]=$of['ca'];if(isset($of['verify']))$C[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$of['verify'];}list($Ec,$ze)=host_port($O);return$this->dsn("mysql:charset=utf8".($Ec!=""?";host=$Ec":'').($ze?(is_numeric($ze)?";port=":";unix_socket=").$ze:""),$U,$F,$C);}function
set_charset($Ea){return$this->query("SET NAMES $Ea");}function
select_db($hb){return$this->query("USE ".idf_escape($hb));}function
query($I,$Tf=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Tf);return
parent::query($I,$Tf);}}}class
Driver
extends
SqlDriver{static$extensions=array("MySQLi","MySQL","PDO_MySQL");static$jush="sql";var$unsigned=array("unsigned","zerofill","unsigned zerofill");var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","REGEXP","IN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL");var$functions=array("char_length","date","from_unixtime","lower","round","floor","ceil","sec_to_time","time_to_sec","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");var$partitionBy=array("HASH","LINEAR HASH","KEY","LINEAR KEY","RANGE","LIST");static
function
connect($O,$U,$F){$f=parent::connect($O,$U,$F);if(is_string($f)){if(function_exists('iconv')&&!is_utf8($f)&&strlen($Ue=iconv("windows-1250","utf-8",$f))>strlen($f))$f=$Ue;return$f;}$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->flavor=(preg_match('~MariaDB~',$f->server_info)?'maria':'mysql');add_driver(DRIVER,($f->flavor=='maria'?"MariaDB":"MySQL"));return$f;}function
__construct(Db$f){parent::__construct($f);$this->types=array('Numbers'=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),'Date and time'=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),'Strings'=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),'Lists'=>array("enum"=>65535,"set"=>64),'Binary'=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),'Geometry'=>array("geometry"=>0,"point"=>0,"linestring"=>0,"polygon"=>0,"multipoint"=>0,"multilinestring"=>0,"multipolygon"=>0,"geometrycollection"=>0),);$this->insertFunctions=array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date"=>"+ interval/- interval","time"=>"addtime/subtime","char|text"=>"concat",);if(min_version('5.7.8',10.2,$f))$this->types['Strings']["json"]=4294967295;if(min_version('',10.7,$f)){$this->types['Strings']["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version('',10.5,$f)){$this->types['Network']["inet6"]=39;if(min_version('','10.10',$f))$this->types['Network']["inet4"]=15;}if(min_version(9,11.7,$f))$this->types['Numbers']["vector"]=16383;if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function
unconvertFunction(array$k){return(preg_match("~binary~",$k["type"])?"<code class='jush-sql'>UNHEX</code>":($k["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"<code>b''</code>"):($k["type"]=="vector"?"<code class='jush-sql'>".($this->conn->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."</code>":(preg_match("~geometry|point|linestring|polygon~",$k["type"])?"<code class='jush-sql'>GeomFromText</code>":""))));}function
insert($R,array$P){return($P?parent::insert($R,$P):queries("INSERT INTO ".table($R)." ()\nVALUES ()"));}function
insertUpdate($R,array$M,array$Ce){$e=array_keys(reset($M));$Be="INSERT INTO ".table($R)." (".implode(", ",$e).") VALUES\n";$kg=array();foreach($e
as$u)$kg[$u]="$u = VALUES($u)";$uf="\nON DUPLICATE KEY UPDATE ".implode(", ",$kg);$kg=array();$v=0;foreach($M
as$P){$X="(".implode(", ",$P).")";if($kg&&(strlen($Be)+$v+strlen($X)+strlen($uf)>1e6)){if(!queries($Be.implode(",\n",$kg).$uf))return
false;$kg=array();$v=0;}$kg[]=$X;$v+=strlen($X)+2;}return
queries($Be.implode(",\n",$kg).$uf);}function
slowQuery($I,$Ff){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$Ff FOR $I";elseif(preg_match('~^(SELECT\b)(.+)~is',$I,$_))return"$_[1] /*+ MAX_EXECUTION_TIME(".($Ff*1000).") */ $_[2]";}}function
convertSearch($s,array$W,array$k){return(preg_match('~char|text|enum|set~',$k["type"])&&!preg_match("~^utf8~",$k["collation"])&&preg_match('~[\x80-\xFF]~',$W['val'])?"CONVERT($s USING ".charset($this->conn).")":$s);}function
quoteBinary($Ue){return"X".q(bin2hex($Ue));}function
warnings(){$J=$this->conn->query("SHOW WARNINGS");if($J&&$J->num_rows){ob_start();print_select_result($J);return
ob_get_clean();}}function
tableHelp($B,$bd=false){$vd=($this->conn->flavor=='maria');if(information_schema(DB))return
strtolower("information-schema-".($vd?"$B-table/":str_replace("_","-",$B)."-table.html"));if(DB=="mysql")return($vd?"mysql$B-table/":"system-schema.html");}function
partitionsInfo($R){$mc="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($R);$J=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $mc ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$K=array();list($K["partition_by"],$K["partition"],$K["partitions"])=$J->fetch_row();$te=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $mc AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$K["partition_names"]=array_keys($te);$K["partition_values"]=array_values($te);return$K;}function
hasCStyleEscapes(){static$Ca;if($Ca===null){$nf=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Ca=(strpos($nf,'NO_BACKSLASH_ESCAPES')===false);}return$Ca;}function
engines(){$K=array();foreach(get_rows("SHOW ENGINES")as$L){if(preg_match("~YES|DEFAULT~",$L["Support"]))$K[]=$L["Engine"];}return$K;}function
indexAlgorithms(array$yf){return(preg_match('~^(MEMORY|NDB)$~',$yf["Engine"])?array("HASH","BTREE"):array());}}function
idf_escape($s){return"`".str_replace("`","``",$s)."`";}function
table($s){return
idf_escape($s);}function
get_databases($dc){$K=get_session("dbs");if($K===null){$I="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$K=($dc?slow_query($I):get_vals($I));restart_session();set_session("dbs",$K);stop_session();}return$K;}function
limit($I,$Z,$x,$Zd=0,$cf=" "){return" $I$Z".($x?$cf."LIMIT $x".($Zd?" OFFSET $Zd":""):"");}function
limit1($R,$I,$Z,$cf="\n"){return
limit($I,$Z,1,0,$cf);}function
db_collation($h,array$Na){$K=null;$Za=get_val("SHOW CREATE DATABASE ".idf_escape($h),1);if(preg_match('~ COLLATE ([^ ]+)~',$Za,$_))$K=$_[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$Za,$_))$K=$Na[$_[1]][-1];return$K;}function
logged_user(){return
get_val("SELECT USER()");}function
tables_list(){return
get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function
count_tables(array$ib){$K=array();foreach($ib
as$h)$K[$h]=count(get_vals("SHOW TABLES IN ".idf_escape($h)));return$K;}function
table_status($B="",$Ub=false){$K=array();foreach(get_rows($Ub?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($B!=""?"AND TABLE_NAME = ".q($B):"ORDER BY Name"):"SHOW TABLE STATUS".($B!=""?" LIKE ".q(addcslashes($B,"%_\\")):""))as$L){if($L["Engine"]=="InnoDB")$L["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$L["Comment"]);if(!isset($L["Engine"]))$L["Comment"]="";if($B!="")$L["Name"]=$B;$K[$L["Name"]]=$L;}return$K;}function
is_view(array$S){return$S["Engine"]===null;}function
fk_support(array$S){return
preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$S["Engine"]);}function
fields($R){$vd=(connection()->flavor=='maria');$K=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($R)." ORDER BY ORDINAL_POSITION")as$L){$k=$L["COLUMN_NAME"];$T=$L["COLUMN_TYPE"];$qc=$L["GENERATION_EXPRESSION"];$Sb=$L["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Sb,$pc);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$T,$xd);$i=$L["COLUMN_DEFAULT"];if($i!=""){$ad=preg_match('~text|json~',$xd[1]);if(!$vd&&$ad)$i=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($i));if($vd||$ad){$i=($i=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($_){return
stripslashes(str_replace("''","'",$_[1]));},$i));}if(!$vd&&preg_match('~binary~',$xd[1])&&preg_match('~^0x(\w*)$~',$i,$_))$i=pack("H*",$_[1]);}$K[$k]=array("field"=>$k,"full_type"=>$T,"type"=>$xd[1],"length"=>$xd[2],"unsigned"=>ltrim($xd[3].$xd[4]),"default"=>($pc?($vd?$qc:stripslashes($qc)):$i),"null"=>($L["IS_NULLABLE"]=="YES"),"auto_increment"=>($Sb=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Sb,$_)?$_[1]:""),"collation"=>$L["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$L[PRIVILEGES],where,order")),"comment"=>$L["COLUMN_COMMENT"],"primary"=>($L["COLUMN_KEY"]=="PRI"),"generated"=>($pc[1]=="PERSISTENT"?"STORED":$pc[1]),);}return$K;}function
indexes($R,$g=null){$K=array();foreach(get_rows("SHOW INDEX FROM ".table($R),$g)as$L){$B=$L["Key_name"];$K[$B]["type"]=($B=="PRIMARY"?"PRIMARY":($L["Index_type"]=="FULLTEXT"?"FULLTEXT":($L["Non_unique"]?(preg_match('~^(SPATIAL|VECTOR)$~',$L["Index_type"])?$L["Index_type"]:"INDEX"):"UNIQUE")));$K[$B]["columns"][]=$L["Column_name"];$K[$B]["lengths"][]=($L["Index_type"]=="SPATIAL"?null:$L["Sub_part"]);$K[$B]["descs"][]=null;$K[$B]["algorithm"]=$L["Index_type"];}return$K;}function
foreign_keys($R){static$ve='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$K=array();$ab=get_val("SHOW CREATE TABLE ".table($R),1);if($ab){preg_match_all("~CONSTRAINT ($ve) FOREIGN KEY ?\\(((?:$ve,? ?)+)\\) REFERENCES ($ve)(?:\\.($ve))? \\(((?:$ve,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$ab,$yd,PREG_SET_ORDER);foreach($yd
as$_){preg_match_all("~$ve~",$_[2],$lf);preg_match_all("~$ve~",$_[5],$Af);$K[idf_unescape($_[1])]=array("db"=>idf_unescape($_[4]!=""?$_[3]:$_[4]),"table"=>idf_unescape($_[4]!=""?$_[4]:$_[3]),"source"=>array_map('Adminer\idf_unescape',$lf[0]),"target"=>array_map('Adminer\idf_unescape',$Af[0]),"on_delete"=>($_[6]?:"RESTRICT"),"on_update"=>($_[7]?:"RESTRICT"),);}}return$K;}function
view($B){return
array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($B),1)));}function
collations(){$K=array();foreach(get_rows("SHOW COLLATION")as$L){if($L["Default"])$K[$L["Charset"]][-1]=$L["Collation"];else$K[$L["Charset"]][]=$L["Collation"];}ksort($K);foreach($K
as$u=>$W)sort($K[$u]);return$K;}function
information_schema($h){return($h=="information_schema")||(min_version(5.5)&&$h=="performance_schema");}function
error(){return
h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function
create_database($h,$Ma){return
queries("CREATE DATABASE ".idf_escape($h).($Ma?" COLLATE ".q($Ma):""));}function
drop_databases(array$ib){$K=apply_queries("DROP DATABASE",$ib,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$K;}function
rename_database($B,$Ma){$K=false;if(create_database($B,$Ma)){$_f=array();$ng=array();foreach(tables_list()as$R=>$T){if($T=='VIEW')$ng[]=$R;else$_f[]=$R;}$K=(!$_f&&!$ng)||move_tables($_f,$ng,$B);drop_databases($K?array(DB):array());}return$K;}function
auto_increment(){$qa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$Nc){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$Nc["columns"],true)){$qa="";break;}if($Nc["type"]=="PRIMARY")$qa=" UNIQUE";}}return" AUTO_INCREMENT$qa";}function
alter_table($R,$B,array$l,array$fc,$Qa,$Fb,$Ma,$pa,$se){$ha=array();foreach($l
as$k){if($k[1]){$i=$k[1][3];if(preg_match('~ GENERATED~',$i)){$k[1][3]=(connection()->flavor=='maria'?"":$k[1][2]);$k[1][2]=$i;}$ha[]=($R!=""?($k[0]!=""?"CHANGE ".idf_escape($k[0]):"ADD"):" ")." ".implode($k[1]).($R!=""?$k[2]:"");}else$ha[]="DROP ".idf_escape($k[0]);}$ha=array_merge($ha,$fc);$qf=($Qa!==null?" COMMENT=".q($Qa):"").($Fb?" ENGINE=".q($Fb):"").($Ma?" COLLATE ".q($Ma):"").($pa!=""?" AUTO_INCREMENT=$pa":"");if($se){$te=array();if($se["partition_by"]=='RANGE'||$se["partition_by"]=='LIST'){foreach($se["partition_names"]as$u=>$W){$X=$se["partition_values"][$u];$te[]="\n  PARTITION ".idf_escape($W)." VALUES ".($se["partition_by"]=='RANGE'?"LESS THAN":"IN").($X!=""?" ($X)":" MAXVALUE");}}$qf
.="\nPARTITION BY $se[partition_by]($se[partition])";if($te)$qf
.=" (".implode(",",$te)."\n)";elseif($se["partitions"])$qf
.=" PARTITIONS ".(+$se["partitions"]);}elseif($se===null)$qf
.="\nREMOVE PARTITIONING";if($R=="")return
queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$ha)."\n)$qf");if($R!=$B)$ha[]="RENAME TO ".table($B);if($qf)$ha[]=ltrim($qf);return($ha?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$ha)):true);}function
alter_indexes($R,$ha){$Da=array();foreach($ha
as$W)$Da[]=($W[2]=="DROP"?"\nDROP INDEX ".idf_escape($W[1]):"\nADD $W[0] ".($W[0]=="PRIMARY"?"KEY ":"").($W[1]!=""?idf_escape($W[1])." ":"")."(".implode(", ",$W[2]).")");return
queries("ALTER TABLE ".table($R).implode(",",$Da));}function
truncate_tables(array$_f){return
apply_queries("TRUNCATE TABLE",$_f);}function
drop_views(array$ng){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$ng)));}function
drop_tables(array$_f){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$_f)));}function
move_tables(array$_f,array$ng,$Af){$Pe=array();foreach($_f
as$R)$Pe[]=table($R)." TO ".idf_escape($Af).".".table($R);if(!$Pe||queries("RENAME TABLE ".implode(", ",$Pe))){$lb=array();foreach($ng
as$R)$lb[table($R)]=view($R);connection()->select_db($Af);$h=idf_escape(DB);foreach($lb
as$B=>$mg){if(!queries("CREATE VIEW $B AS ".str_replace(" $h."," ",$mg["select"]))||!queries("DROP VIEW $h.$B"))return
false;}return
true;}return
false;}function
copy_tables(array$_f,array$ng,$Af){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($_f
as$R){$B=($Af==DB?table("copy_$R"):idf_escape($Af).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $B"))||!queries("CREATE TABLE $B LIKE ".table($R))||!queries("INSERT INTO $B SELECT * FROM ".table($R)))return
false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$L){$Qf=$L["Trigger"];if(!queries("CREATE TRIGGER ".($Af==DB?idf_escape("copy_$Qf"):idf_escape($Af).".".idf_escape($Qf))." $L[Timing] $L[Event] ON $B FOR EACH ROW\n$L[Statement];"))return
false;}}foreach($ng
as$R){$B=($Af==DB?table("copy_$R"):idf_escape($Af).".".table($R));$mg=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $B"))||!queries("CREATE VIEW $B AS $mg[select]"))return
false;}return
true;}function
trigger($B,$R){if($B=="")return
array();$M=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($B));return
reset($M);}function
triggers($R){$K=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$L)$K[$L["Trigger"]]=array($L["Timing"],$L["Event"]);return$K;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
routine($B,$T){$l=get_rows("SELECT
	PARAMETER_NAME field,
	DATA_TYPE type,
	REGEXP_REPLACE(DTD_IDENTIFIER, '^[^(]+\\\\(?|\\\\)$', '') length,
	REGEXP_REPLACE(DTD_IDENTIFIER, '^[^ ]+ ', '') `unsigned`,
	1 `null`,
	DTD_IDENTIFIER full_type,
	".($T=="FUNCTION"?"''":"PARAMETER_MODE")." `inout`,
	CHARACTER_SET_NAME collation
FROM information_schema.PARAMETERS
WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND SPECIFIC_NAME = ".q($B)."
ORDER BY ORDINAL_POSITION");$K=connection()->query("SELECT
	ROUTINE_COMMENT comment,
	CONCAT(IF(IS_DETERMINISTIC = 'YES', 'DETERMINISTIC\\n', ''), IF(SQL_DATA_ACCESS != 'CONTAINS SQL', CONCAT(SQL_DATA_ACCESS, '\\n'), ''), ROUTINE_DEFINITION) definition,
	'SQL' language
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$T' AND ROUTINE_NAME = ".q($B))->fetch_assoc();if($l&&$l[0]['field']=='')$K['returns']=array_shift($l);$K['fields']=$l;return$K;}function
routines(){return
get_rows("SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function
routine_languages(){return
array();}function
routine_id($B,array$L){return
idf_escape($B);}function
last_id($J){return
get_val("SELECT LAST_INSERT_ID()");}function
explain(Db$f,$I){return$f->query("EXPLAIN ".(min_version(5.7)?"":"PARTITIONS ").$I);}function
found_rows(array$S,array$Z){return($Z||$S["Engine"]!="InnoDB"?null:$S["Rows"]);}function
create_sql($R,$pa,$sf){$K=get_val("SHOW CREATE TABLE ".table($R),1);if(!$pa)$K=preg_replace('~ AUTO_INCREMENT=\d+~','',$K);return$K;}function
truncate_sql($R){return"TRUNCATE ".table($R);}function
use_sql($hb,$sf=""){$B=idf_escape($hb);$K="";if(preg_match('~CREATE~',$sf)&&($Za=get_val("SHOW CREATE DATABASE $B",1))){set_utf8mb4($Za);if($sf=="DROP+CREATE")$K="DROP DATABASE IF EXISTS $B;\n";$K
.="$Za;\n";}return$K."USE $B";}function
trigger_sql($R){$K="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")),null,"-- ")as$L)$K
.="\nCREATE TRIGGER ".idf_escape($L["Trigger"])." $L[Timing] $L[Event] ON ".table($L["Table"])." FOR EACH ROW\n$L[Statement];;\n";return$K;}function
show_variables(){return
get_rows("SHOW VARIABLES");}function
show_status(){return
get_rows("SHOW STATUS");}function
process_list(){return
get_rows("SHOW FULL PROCESSLIST");}function
convert_field(array$k){if(preg_match("~binary~",$k["type"]))return"HEX(".idf_escape($k["field"]).")";if($k["type"]=="bit")return"BIN(".idf_escape($k["field"])." + 0)";if($k["type"]=="vector")return(connection()->flavor=='maria'?"VEC_ToText":"VECTOR_TO_STRING")."(".idf_escape($k["field"]).")";if(preg_match("~geometry|point|linestring|polygon~",$k["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($k["field"]).")";}function
unconvert_field(array$k,$K){if(preg_match("~binary~",$k["type"]))$K="UNHEX($K)";if($k["type"]=="bit")$K="CONVERT(b$K, UNSIGNED)";if($k["type"]=="vector")$K=(connection()->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."($K)";if(preg_match("~geometry|point|linestring|polygon~",$k["type"])){$Be=(min_version(8)?"ST_":"");$K=$Be."GeomFromText($K, $Be"."SRID($k[field]))";}return$K;}function
support($Vb){return
preg_match('~^(comment|columns|copy|database|drop_col|dump|event|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'.(min_version(8)?'|descidx':'').(min_version('8.0.16','10.2.1')?'|check':'').')$~',$Vb);}function
kill_process($r){return
queries("KILL ".number($r));}function
connection_id(){return"SELECT CONNECTION_ID()";}function
max_connections(){return
get_val("SELECT @@max_connections");}function
types(){return
array();}function
type_values($r){return"";}function
schemas(){return
array();}function
get_schema(){return"";}function
set_schema($Ve,$g=null){return
true;}}define('Adminer\JUSH',Driver::$jush);define('Adminer\SERVER',"".$_GET[DRIVER]);define('Adminer\DB',"$_GET[db]");define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').($_GET["ext"]?"ext=".urlencode($_GET["ext"]).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));function
page_header($Gf,$j="",$Ba=array(),$Hf=""){page_headers();if(is_ajax()&&$j){page_messages($j);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$If=$Gf.($Hf!=""?": $Hf":"");$Jf=strip_tags($If.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo'<!DOCTYPE html>
<html lang="en" dir="ltr">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>',$Jf,'</title>
<link rel="stylesheet" href="',h(preg_replace("~\\?.*~","",ME)."?file=default.css&version=5.5.1"),'">
';$db=adminer()->css();if(is_int(key($db)))$db=array_fill_keys($db,'light');$yc=in_array('light',$db)||in_array('',$db);$vc=in_array('dark',$db)||in_array('',$db);$fb=($yc?($vc?null:false):($vc?:null));$Fd=" media='(prefers-color-scheme: dark)'";if($fb!==false)echo"<link rel='stylesheet'".($fb?"":$Fd)." href='".h(preg_replace("~\\?.*~","",ME)."?file=dark.css&version=5.5.1")."'>\n";echo"<meta name='color-scheme' content='".($fb===null?"light dark":($fb?"dark":"light"))."'>\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.5.1");if(adminer()->head($fb))echo"<link rel='icon' href='data:image/gif;base64,R0lGODlhEAAQAJEAAAQCBPz+/PwCBAROZCH5BAEAAAAALAAAAAAQABAAAAI2hI+pGO1rmghihiUdvUBnZ3XBQA7f05mOak1RWXrNq5nQWHMKvuoJ37BhVEEfYxQzHjWQ5qIAADs='>\n","<link rel='apple-touch-icon' href='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.5.1")."'>\n";foreach($db
as$eg=>$Od){$b=($Od=='dark'&&!$fb?$Fd:($Od=='light'&&$vc?" media='(prefers-color-scheme: light)'":""));echo"<link rel='stylesheet'$b href='".h($eg)."'>\n";}echo"\n<body class='".'ltr'." nojs";adminer()->bodyClass();echo"'>\n",script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."')")."});
document.body.classList.replace('nojs', 'js');
if (!window.isSecureContext) {
	document.body.classList.add('insecure');
}
const offlineMessage = '".js_escape('You are offline.')."';
const thousandsSeparator = '".js_escape(',')."';"),"<div id='help' class='jush-".JUSH." jsonly hidden'></div>\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"<div id='content'>\n","<span id='menuopen' class='jsonly'>".icon("move","","menu","")."</span>".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Ba!==null){$y=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'<p id="breadcrumb"><a href="'.h($y?:".").'">'.get_driver(DRIVER).'</a> » ';$y=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$O=adminer()->serverName(SERVER);$O=($O!=""?$O:'Server');if($Ba===false)echo"$O\n";else{echo"<a href='".h($y)."' accesskey='1' title='Alt+Shift+1'>$O</a> » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ba)))echo'<a href="'.h($y."&db=".urlencode(DB).(support("scheme")?"&ns=":"")).'">'.h(DB).'</a> » ';if(is_array($Ba)){if($_GET["ns"]!="")echo'<a href="'.h(substr(ME,0,-1)).'">'.h($_GET["ns"]).'</a> » ';foreach($Ba
as$u=>$W){$nb=(is_array($W)?$W[1]:h($W));if($nb!="")echo"<a href='".h(ME."$u=").urlencode(is_array($W)?$W[0]:$W)."'>$nb</a> » ";}}echo"$Gf\n";}}echo"<h2>$If</h2>\n","<div id='ajaxstatus' class='jsonly hidden'></div>\n";restart_session();page_messages($j);$ib=&get_session("dbs");if(DB!=""&&$ib&&!in_array(DB,$ib,true))$ib=null;stop_session();define('Adminer\PAGE_HEADER',1);}function
page_headers(){header("Content-Type: text/html; charset=utf-8");header("Cache-Control: no-cache");header("X-Frame-Options: deny");header("X-XSS-Protection: 0");header("X-Content-Type-Options: nosniff");header("Referrer-Policy: origin-when-cross-origin");foreach(adminer()->csp(csp())as$cb){$zc=array();foreach($cb
as$u=>$W)$zc[]="$u $W";header("Content-Security-Policy: ".implode("; ",$zc));}adminer()->headers();}function
csp(){return
array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self' https://www.adminer.org","frame-src"=>"'none'","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function
get_nonce(){static$Wd;if(!$Wd)$Wd=base64_encode(rand_string());return$Wd;}function
page_messages($j){$dg=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$Id=idx($_SESSION["messages"],$dg);if($Id){echo"<div class='message'>".implode("</div>\n<div class='message'>",$Id)."</div>".script("messagesPrint();");unset($_SESSION["messages"][$dg]);}if($j)echo"<div class='error'>$j</div>\n";if(adminer()->error)echo"<div class='error'>".adminer()->error."</div>\n";}function
page_footer($Nd=""){echo"</div>\n\n<div id='foot' class='foot'>\n<div id='menu'>\n";adminer()->navigation($Nd);echo"</div>\n";if($Nd!="auth")echo'<form action="" method="post">
<p class="logout">
<span>',h($_GET["username"])."\n",'</span>
<input type="submit" name="logout" value="Logout" id="logout">
',input_token(),'</form>
';echo"</div>\n\n",script("setupSubmitHighlight(document);");}function
int32($A){while($A>=2147483648)$A-=4294967296;while($A<=-2147483649)$A+=4294967296;return(int)$A;}function
long2str(array$V,$pg){$Ue='';foreach($V
as$W)$Ue
.=pack('V',$W);if($pg)return
substr($Ue,0,end($V));return$Ue;}function
str2long($Ue,$pg){$V=array_values(unpack('V*',str_pad($Ue,4*ceil(strlen($Ue)/4),"\0")));if($pg)$V[]=strlen($Ue);return$V;}function
xxtea_mx($tg,$sg,$vf,$ed){return
int32((($tg>>5&0x7FFFFFF)^$sg<<2)+(($sg>>3&0x1FFFFFFF)^$tg<<4))^int32(($vf^$sg)+($ed^$tg));}function
encrypt_string($rf,$u){if($rf=="")return"";$u=array_values(unpack("V*",pack("H*",md5($u))));$V=str2long($rf,true);$A=count($V)-1;$tg=$V[$A];$sg=$V[0];$Ge=floor(6+52/($A+1));$vf=0;while($Ge-->0){$vf=int32($vf+0x9E3779B9);$zb=$vf>>2&3;for($ne=0;$ne<$A;$ne++){$sg=$V[$ne+1];$Rd=xxtea_mx($tg,$sg,$vf,$u[$ne&3^$zb]);$tg=int32($V[$ne]+$Rd);$V[$ne]=$tg;}$sg=$V[0];$Rd=xxtea_mx($tg,$sg,$vf,$u[$ne&3^$zb]);$tg=int32($V[$A]+$Rd);$V[$A]=$tg;}return
long2str($V,false);}function
decrypt_string($rf,$u){if($rf=="")return"";if(!$u)return
false;$u=array_values(unpack("V*",pack("H*",md5($u))));$V=str2long($rf,false);$A=count($V)-1;$tg=$V[$A];$sg=$V[0];$Ge=floor(6+52/($A+1));$vf=int32($Ge*0x9E3779B9);while($vf){$zb=$vf>>2&3;for($ne=$A;$ne>0;$ne--){$tg=$V[$ne-1];$Rd=xxtea_mx($tg,$sg,$vf,$u[$ne&3^$zb]);$sg=int32($V[$ne]-$Rd);$V[$ne]=$sg;}$tg=$V[$A];$Rd=xxtea_mx($tg,$sg,$vf,$u[$ne&3^$zb]);$sg=int32($V[0]-$Rd);$V[0]=$sg;$vf=int32($vf-0x9E3779B9);}return
long2str($V,true);}$G=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$W){list($u)=explode(":",$W);$G[$u]=$W;}}function
add_invalid_login(){$wa=get_temp_dir()."/adminer-invalid";foreach(glob("$wa*")?:array($wa)as$m){$n=file_open_lock($m);if($n)break;}if(!$n)$n=file_open_lock("$wa-".rand_string());if(!$n)return;$Wc=json_decode(stream_get_contents($n),true);$Ef=time();if($Wc){foreach($Wc
as$Xc=>$W){if($W[0]<$Ef)unset($Wc[$Xc]);}}$Vc=&$Wc[adminer()->bruteForceKey()];if(!$Vc)$Vc=array($Ef+30*60,0);$Vc[1]++;file_write_unlock($n,json_encode($Wc));}function
check_invalid_login(array&$G){$Wc=array();foreach(glob(get_temp_dir()."/adminer-invalid*")as$m){$n=file_open_lock($m);if($n){$Wc=json_decode(stream_get_contents($n),true);file_unlock($n);break;}}$Vc=idx($Wc,adminer()->bruteForceKey(),array());$Vd=($Vc[1]>29?$Vc[0]-time():0);if($Vd>0)auth_error(lang_format(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($Vd/60)),$G);}$oa=$_POST["auth"];if($oa){session_regenerate_id();$Y=$oa["driver"];$O=$oa["server"];$U=$oa["username"];$F=(string)$oa["password"];$h=$oa["db"];set_password($Y,$O,$U,$F);$_SESSION["db"][$Y][$O][$U][$h]=true;if($oa["permanent"]){$u=implode("-",array_map('base64_encode',array($Y,$O,$U,$h)));$Ee=adminer()->permanentLogin(true);$G[$u]="$u:".base64_encode($Ee?encrypt_string($F,$Ee):"");cookie("adminer_permanent",implode(" ",$G));}if(count($_POST)==1||DRIVER!=$Y||SERVER!=$O||$_GET["username"]!==$U||DB!=$h)redirect(auth_url($Y,$O,$U,$h));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$u)set_session($u,null);unset_permanent($G);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Logout successful.'.' '.'Thanks for using Adminer, consider <a href="http://localhost/en/donation/">donating</a>.');}elseif($G&&!$_SESSION["pwds"]){session_regenerate_id();$Ee=adminer()->permanentLogin();foreach($G
as$u=>$W){list(,$Ia)=explode(":",$W);list($Y,$O,$U,$h)=array_map('base64_decode',explode("-",$u));set_password($Y,$O,$U,decrypt_string(base64_decode($Ia),$Ee));$_SESSION["db"][$Y][$O][$U][$h]=true;}}function
unset_permanent(array&$G){foreach($G
as$u=>$W){list($Y,$O,$U,$h)=array_map('base64_decode',explode("-",$u));if($Y==DRIVER&&$O==SERVER&&$U==$_GET["username"]&&$h==DB)unset($G[$u]);}cookie("adminer_permanent",implode(" ",$G));}function
auth_error($j,array&$G){$ff=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$ff]||$_GET[$ff])&&!$_SESSION["token"])$j='Session expired, please login again.';else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$j
.=($j?'<br>':'').sprintf('Master password expired. <a href="http://localhost/en/extension/"%s>Implement</a> %s method to make it permanent.',target_blank(),'<code>permanentLogin()</code>');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($G);}}if(!$_COOKIE[$ff]&&$_GET[$ff]&&ini_bool("session.use_only_cookies"))$j='Session support must be enabled.';$qe=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$qe["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$j,null);echo"<form action='' method='post'>\n","<div>";if(hidden_fields($_POST,array("auth")))echo"<p class='message'>".'The action will be performed after successful login with the same credentials.'."\n";echo"</div>\n";adminer()->loginForm();echo"</form>\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($G);page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){list($Ec,$ze)=host_port(SERVER);if(preg_match('~[^-\w.:/]~',$Ec.$ze))auth_error('Invalid server.',$G);if(preg_match('~^-?\d+~',$ze,$_)&&($_[0]<1024||$_[0]>65535))auth_error('Connecting to privileged ports is not allowed.',$G);check_invalid_login($G);$bb=adminer()->credentials();$f=Driver::connect($bb[0],$bb[1],$bb[2]);if(is_object($f)){Db::$instance=$f;Driver::$instance=new
Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$td=null;if(!is_object($f)||($td=adminer()->login($_GET["username"],get_password()))!==true){$j=(is_string($f)?nl_br(h($f)):(is_string($td)?$td:'Invalid credentials.')).(preg_match('~^ | $~',get_password())?'<br>'.'There is a space in the input password which might be the cause.':'');auth_error($j,$G);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($oa&&$_POST["token"])$_POST["token"]=get_token();$j='';if($_POST){if(!verify_token()){$Qc="max_input_vars";$Dd=ini_get($Qc);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$u){$W=ini_get($u);if($W&&(!$Dd||$W<$Dd)){$Qc=$u;$Dd=$W;}}}$j=(!$_POST["token"]&&$Dd?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$Qc'"):'Invalid CSRF token. Send the form again.'.' '.'If you did not send this request from Adminer then close this page.');}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$j=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$j
.=' '.'You can upload a big SQL file via FTP and import it from server.';}function
doc_link(array$ue,$Bf=""){return"";}function
email_header($zc){return"=?UTF-8?B?".base64_encode($zc)."?=";}function
send_mail($Bb,$tf,$Hd,$mc="",array$Yb=array()){$Ib=PHP_EOL;$Hd=str_replace("\n",$Ib,wordwrap(str_replace("\r","","$Hd\n")));$Aa=uniqid("boundary");$na="";foreach((array)$Yb["error"]as$u=>$W){if(!$W)$na
.="--$Aa$Ib"."Content-Type: ".str_replace("\n","",$Yb["type"][$u]).$Ib."Content-Disposition: attachment; filename=\"".preg_replace('~["\n]~','',$Yb["name"][$u])."\"$Ib"."Content-Transfer-Encoding: base64$Ib$Ib".chunk_split(base64_encode(file_get_contents($Yb["tmp_name"][$u])),76,$Ib).$Ib;}$ya="";$_c="Content-Type: text/plain; charset=utf-8$Ib"."Content-Transfer-Encoding: 8bit";if($na){$na
.="--$Aa--$Ib";$ya="--$Aa$Ib$_c$Ib$Ib";$_c="Content-Type: multipart/mixed; boundary=\"$Aa\"";}$_c
.=$Ib."MIME-Version: 1.0$Ib"."X-Mailer: Adminer Editor".($mc?$Ib."From: ".str_replace("\n","",$mc):"");return
mail($Bb,email_header($tf),$ya.$Hd.$na,$_c);}function
like_bool(array$k){return$k["type"]=="bool"||(preg_match('~bit|tinyint~',$k["type"])&&$k["length"]==1);}connection()->select_db(adminer()->database());adminer()->afterConnect();add_driver(DRIVER,'Login');if(isset($_GET["select"])&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["download"])){$a=$_GET["download"];$l=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$N=array(idf_escape($_GET["field"]));$J=driver()->select($a,$N,array(where($_GET,$l)),$N);$L=($J?$J->fetch_row():array());echo
driver()->value($L[0],$l[$_GET["field"]]);exit;}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$l=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$l):""):where($_GET,$l));$ag=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($l
as$B=>$k){if((!$ag&&!isset($k["privileges"]["insert"]))||adminer()->fieldName($k)=="")unset($l[$B]);}if($_POST&&!$j&&!isset($_GET["select"])){$z=$_POST["referer"];if($_POST["insert"])$z=($ag?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$z))$z=ME."select=".urlencode($a);$t=indexes($a);$Vf=unique_array($_GET["where"],$t);$Je="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($z,'Item has been deleted.',driver()->delete($a,$Je,$Vf?0:1));else{$P=array();foreach($l
as$B=>$k){$W=process_input($k);if($W!==false&&$W!==null)$P[idf_escape($B)]=$W;}if($ag){if(!$P)redirect($z);queries_redirect($z,'Item has been updated.',driver()->update($a,$P,$Je,$Vf?0:1));if(is_ajax()){page_headers();page_messages($j);exit;}}else{$J=driver()->insert($a,$P);$ld=($J?last_id($J):0);queries_redirect($z,sprintf('Item%s has been inserted.',($ld?" $ld":"")),$J);}}}$L=null;if($Z){$N=array();foreach($l
as$B=>$k){if(isset($k["privileges"]["select"])){$la=($_POST["clone"]&&$k["auto_increment"]?"''":convert_field($k));$N[]=($la?"$la AS ":"").idf_escape($B);}}$L=array();if(!support("table"))$N=array("*");if($N){$J=driver()->select($a,$N,array($Z),$N,array(),(isset($_GET["select"])?2:1));if(!$J)$j=error();else{$L=$J->fetch_assoc();if(!$L)$L=false;}if(isset($_GET["select"])&&(!$L||$J->fetch_assoc()))$L=null;}}if(!support("table")&&!$l){if(!$Z){$J=driver()->select($a,array("*"),array(),array("*"));$L=($J?$J->fetch_assoc():false);if(!$L)$L=array(driver()->primary=>"");}if($L){foreach($L
as$u=>$W){if(!$Z)$L[$u]=null;$l[$u]=array("field"=>$u,"null"=>($u!=driver()->primary),"auto_increment"=>($u==driver()->primary));}}}if($_POST["save"])$L=(array)$_POST["fields"]+($L?$L:array());edit_form($a,$l,$L,$ag,$j);}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$t=indexes($a);$l=fields($a);$jc=column_foreign_keys($a);$ae=$S["Oid"];$da=get_settings("adminer_import");$Te=array();$e=array();$Xe=array();$je=array();$Cf="";foreach($l
as$u=>$k){$B=adminer()->fieldName($k);$Sd=html_entity_decode(strip_tags($B),ENT_QUOTES);if(isset($k["privileges"]["select"])&&$B!=""){$e[$u]=$Sd;if(is_shortable($k))$Cf=adminer()->selectLengthProcess();}if(isset($k["privileges"]["where"])&&$B!="")$Xe[$u]=$Sd;if(isset($k["privileges"]["order"])&&$B!="")$je[$u]=$Sd;$Te+=$k["privileges"];}list($N,$p)=adminer()->selectColumnsProcess($e,$t);$N=array_unique($N);$p=array_unique($p);$Yc=count($p)<count($N);$Z=adminer()->selectSearchProcess($l,$t);$D=adminer()->selectOrderProcess($l,$t);$x=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Wf=>$L){$la=convert_field($l[key($L)]);$N=array($la?:idf_escape(key($L)));$Z[]=where_check($Wf,$l);$K=driver()->select($a,$N,$Z,$N);if($K)echo
first($K->fetch_row());}exit;}$Ce=$Yf=array();foreach($t
as$Nc){if($Nc["type"]=="PRIMARY"){$Ce=array_flip($Nc["columns"]);$Yf=($N?$Ce:array());foreach($Yf
as$u=>$W){if(in_array(idf_escape($u),$N))unset($Yf[$u]);}break;}}if($ae&&!$Ce){$Ce=$Yf=array($ae=>0);$t[]=array("type"=>"PRIMARY","columns"=>array($ae));}if($_POST&&!$j){$rg=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Ha=array();foreach($_POST["check"]as$Fa)$Ha[]=where_check($Fa,$l);$rg[]="((".implode(") OR (",$Ha)."))";}$rg=($rg?"\nWHERE ".implode(" AND ",$rg):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$mc=($N?implode(", ",$N):"*").convert_fields($e,$l,$N)."\nFROM ".table($a);$sc=($p&&$Yc?"\nGROUP BY ".implode(", ",$p):"").($D?"\nORDER BY ".implode(", ",$D):"");$I="SELECT $mc$rg$sc";if(is_array($_POST["check"])&&!$Ce){$Uf=array();foreach($_POST["check"]as$W)$Uf[]="(SELECT".limit($mc,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$l).$sc,1).")";$I=implode(" UNION ALL ",$Uf);}adminer()->dumpData($a,"table",$I);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$jc)){if($_POST["save"]||$_POST["delete"]){$J=true;$ea=0;$P=array();if(!$_POST["delete"]){foreach($l
as$B=>$W){$s=bracket_escape($B);if(isset($_POST["fields"][$s])||$_FILES["fields-$s"]){$W=process_input($l[$B]);if($W!==null&&($_POST["clone"]||$W!==false))$P[idf_escape($B)]=($W!==false?$W:idf_escape($B));}}}if($_POST["delete"]||$P){$I=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($P)).")\nSELECT ".implode(", ",$P)."\nFROM ".table($a):"");if($_POST["all"]||($Ce&&is_array($_POST["check"]))||$Yc){$J=($_POST["delete"]?driver()->delete($a,$rg):($_POST["clone"]?queries("INSERT $I$rg".driver()->insertReturning($a)):driver()->update($a,$P,$rg)));$ea=connection()->affected_rows;if(is_object($J))$ea+=$J->num_rows;}else{foreach((array)$_POST["check"]as$W){$qg="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($W,$l);$J=($_POST["delete"]?driver()->delete($a,$qg,1):($_POST["clone"]?queries("INSERT".limit1($a,$I,$qg)):driver()->update($a,$P,$qg,1)));if(!$J)break;$ea+=connection()->affected_rows;}}}$Hd=lang_format(array('%d item has been affected.','%d items have been affected.'),$ea);if($_POST["clone"]&&$J&&$ea==1){$ld=last_id($J);if($ld)$Hd=sprintf('Item%s has been inserted.'," $ld");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$Hd,$J);if(!$_POST["delete"]){$_e=(array)$_POST["fields"];edit_form($a,array_intersect_key($l,$_e),$_e,!$_POST["clone"],$j);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$j='Ctrl+click on a value to modify it.';else{$J=true;$ea=0;foreach($_POST["val"]as$Wf=>$L){$P=array();foreach($L
as$u=>$W){$u=bracket_escape($u,true);$P[idf_escape($u)]=(preg_match('~char|text~',$l[$u]["type"])||$W!=""?adminer()->processInput($l[$u],$W):"NULL");}$J=driver()->update($a,$P," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Wf,$l),($Yc||$Ce?0:1)," ");if(!$J)break;$ea+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang_format(array('%d item has been affected.','%d items have been affected.'),$ea),$J);}}elseif(!is_string($Xb=get_file("csv_file",true)))$j=upload_error($Xb);elseif(!preg_match('~~u',$Xb))$j='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$da["output"],"format"=>$_POST["separator"]),"adminer_import");$J=true;$Oa=array_keys($l);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Xb,$yd);$ea=count($yd[0]);driver()->begin();$cf=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$M=array();foreach($yd[0]as$u=>$W){preg_match_all("~((?>\"[^\"]*\")+|[^$cf]*)$cf~",$W.$cf,$zd);if(!$u&&!array_diff($zd[1],$Oa)){$Oa=$zd[1];$ea--;}else{$P=array();foreach($zd[1]as$q=>$La)$P[idf_escape($Oa[$q])]=($La==""&&$l[$Oa[$q]]["null"]?"NULL":q(preg_match('~^".*"$~s',$La)?str_replace('""','"',substr($La,1,-1)):$La));$M[]=$P;}}$J=(!$M||driver()->insertUpdate($a,$M,$Ce));if($J)driver()->commit();queries_redirect(remove_from_uri("page"),lang_format(array('%d row has been imported.','%d rows have been imported.'),$ea),$J);driver()->rollback();}}}$zf=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else
page_header('Select'.": $zf",$j);$P=null;if(isset($Te["insert"])||!support("table")){$qe=array();foreach((array)$_GET["where"]as$W){if(isset($jc[$W["col"]])&&count($jc[$W["col"]])==1&&($W["op"]=="="||(!$W["op"]&&(is_array($W["val"])||!preg_match('~[_%]~',$W["val"])))))$qe["set"."[".bracket_escape($W["col"])."]"]=$W["val"];}$P=$qe?"&".http_build_query($qe):"";}adminer()->selectLinks($S,$P);if(!$e&&support("table"))echo"<p class='error'>".'Unable to select the table'.($l?".":": ".error())."\n";else{echo"<form action='' id='form'>\n","<div style='display: none;'>";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"</div>\n";adminer()->selectColumnsPrint($N,$e);adminer()->selectSearchPrint($Z,$Xe,$t);adminer()->selectOrderPrint($D,$je,$t);adminer()->selectLimitPrint($x);adminer()->selectLengthPrint($Cf);adminer()->selectActionPrint($t);echo"</form>\n";$E=$_GET["page"];$lc=null;if($E=="last"){$lc=get_val(count_rows($a,$Z,$Yc,$p));$E=floor(max(0,intval($lc)-1)/$x);}$Ye=$N;$rc=$p;if(!$Ye){$Ye[]="*";$Wa=convert_fields($e,$l,$N);if($Wa)$Ye[]=substr($Wa,2);}foreach($N
as$u=>$W){$k=$l[idf_unescape($W)];if($k&&($la=convert_field($k)))$Ye[$u]="$la AS $W";}if(!$Yc&&$Yf){foreach($Yf
as$u=>$W){$Ye[]=idf_escape($u);if($rc)$rc[]=idf_escape($u);}}$J=driver()->select($a,$Ye,$Z,$rc,$D,$x,$E,true);if(!$J)echo"<p class='error'>".error()."\n";else{if(JUSH=="mssql"&&$E)$J->seek($x*$E);$Db=array();echo"<form action='' method='post' enctype='multipart/form-data'>\n";$M=array();while($L=$J->fetch_assoc()){if($E&&JUSH=="oracle")unset($L["RNUM"]);$M[]=$L;}if($_GET["page"]!="last"&&$x&&$p&&$Yc&&JUSH=="sql")$lc=get_val(" SELECT FOUND_ROWS()");if(!$M)echo"<p class='message'>".'No rows.'."\n";else{$va=adminer()->backwardKeys($a,$zf);echo"<div class='scrollable'>","<table id='table' class='nowrap checkable odds'>",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"<thead><tr>".(!$p&&$N?"":"<td><input type='checkbox' id='all-page' class='jsonly'>".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." <a href='".h($_GET["modify"]?remove_from_uri("modify"):$_SERVER["REQUEST_URI"]."&modify=1")."'>".'Modify'."</a>");$Td=array();$oc=array();reset($N);$Le=1;foreach($M[0]as$u=>$W){if(!isset($Yf[$u])){$W=idx($_GET["columns"],key($N))?:array();$k=$l[$N?($W?$W["col"]:current($N)):$u];$B=($k?adminer()->fieldName($k,$Le):($W["fun"]?"*":h($u)));if($B!=""){$Le++;$Td[$u]=$B;$d=idf_escape($u);$Fc=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($u);$nb="&desc%5B0%5D=1";echo"<th id='th[".h(bracket_escape($u))."]'>".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$nc=apply_sql_function($W["fun"],$B);$kf=isset($k["privileges"]["order"])||$nc!=$B;echo($kf?"<a href='".h($Fc.($D[0]==$d||$D[0]==$u?$nb:''))."'>$nc</a>":$nc);$Gd=($kf?"<a href='".h($Fc.$nb)."' title='".'descending'."' class='text'> ↓</a>":'');if(!$W["fun"]&&isset($k["privileges"]["where"])){$Gd
.='<a href="#fieldset-search" title="'.'Search'.'" class="text jsonly"> =</a>';$Gd
.=script("qsl('a').onclick = partial(selectSearch, '".js_escape($u)."');");}echo($Gd?"<span class='column hidden'>$Gd</span>":"");}$oc[$u]=$W["fun"];next($N);}}$w=array();if($_GET["modify"]){foreach($M
as$L){foreach($L
as$u=>$W)$w[$u]=max($w[$u],min(40,strlen(utf8_decode($W))));}}echo($va?"<th>".'Relations':"")."</thead>\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($M,$jc)as$A=>$L){$Vf=unique_array($M[$A],$t);if(!$Vf){$Vf=array();reset($N);foreach($M[$A]as$u=>$W){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($N)))$Vf[$u]=$W;next($N);}}$Wf="";foreach($Vf
as$u=>$W){$k=(array)$l[$u];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$k["type"])&&strlen($W)>64){$u=(strpos($u,'(')?$u:idf_escape($u));$u="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$k["collation"])?$u:"CONVERT($u USING ".charset(connection()).")").")";$W=md5($W);}$Wf
.="&".($W!==null?urlencode("where[".bracket_escape($u)."]")."=".urlencode($W===false?"f":$W):"null%5B%5D=".urlencode($u));}echo"<tr>".(!$p&&$N?"":"<td>".checkbox("check[]",substr($Wf,1),in_array(substr($Wf,1),(array)$_POST["check"])).($Yc||information_schema(DB)?"":" <a href='".h(ME."edit=".urlencode($a).$Wf)."' class='edit'>".'edit'."</a>"));reset($N);foreach($L
as$u=>$W){if(isset($Td[$u])){$d=current($N);$k=(array)$l[$u];if($W!=""&&(!isset($Db[$u])||$Db[$u]!=""))$Db[$u]=(is_mail($W)?$Td[$u]:"");$y="";if(is_blob($k)&&$W!="")$y=ME.'download='.urlencode($a).'&field='.urlencode($u).$Wf;if(!$y&&$W!==null){foreach((array)$jc[$u]as$ic){if(count($jc[$u])==1||end($ic["source"])==$u){$y="";foreach($ic["source"]as$q=>$lf)$y
.=where_link($q,$ic["target"][$q],$M[$A][$lf]);$y=($ic["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($ic["db"]),ME):ME).'select='.urlencode($ic["table"]).$y;if($ic["ns"])$y=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($ic["ns"]),$y);if(count($ic["source"])==1)break;}}}if($d=="COUNT(*)"){$y=ME."select=".urlencode($a);$q=0;foreach((array)$_GET["where"]as$V){if(!array_key_exists($V["col"],$Vf))$y
.=where_link($q++,$V["col"],$V["val"],$V["op"]);}foreach($Vf
as$ed=>$V)$y
.=where_link($q++,$ed,$V);}$Gc=select_value($W,$y,$k,$Cf);$r=h("val[$Wf][".bracket_escape($u)."]");$Ae=idx(idx($_POST["val"],$Wf),bracket_escape($u));$ag=idx($k["privileges"],"update");$Ab=!is_array($L[$u])&&is_utf8($Gc)&&$M[$A][$u]==$L[$u]&&!$oc[$u]&&!$k["generated"]&&$ag;$T=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$d,$_)?$l[idf_unescape($_[2])]["type"]:$k["type"]);$Bf=preg_match('~text|json|lob~',$T);$Zc=preg_match(number_type(),$T)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$d);echo"<td id='$r'".($Zc&&($W===null||is_numeric(strip_tags($Gc))||$T=="money")?" class='number'":"");if(($_GET["modify"]&&$Ab&&$W!==null)||$Ae!==null){$uc=h($Ae!==null?$Ae:$L[$u]);echo">".($Bf?"<textarea name='$r' cols='30' rows='".(substr_count($L[$u],"\n")+1)."'>$uc</textarea>":"<input name='$r' value='$uc' size='$w[$u]'>");}else{$ud=strpos($Gc,"<i>…</i>");echo($ag?" data-text='".($ud?2:($Bf?1:0))."'".($Ab?"":" data-warning='".h('Use edit link to modify this value.')."'"):"").">$Gc";}}next($N);}if($va)echo"<td>";adminer()->backwardKeysPrint($va,$M[$A]);echo"</tr>\n";}if(is_ajax())exit;echo"</table>\n","</div>\n";}if(!is_ajax()){if($M||$E){$Nb=true;if($_GET["page"]!="last"){if(!$x||(count($M)<$x&&($M||!$E)))$lc=($E?$E*$x:0)+count($M);elseif(JUSH!="sql"||!$Yc){$lc=($Yc?false:found_rows($S,$Z));if(intval($lc)<max(1e4,2*($E+1)*$x))$lc=first(slow_query(count_rows($a,$Z,$Yc,$p)));elseif(JUSH=='sql'||JUSH=='pgsql')$Nb=false;}}$oe=($x&&($lc===false||$lc>$x||$E));if($oe)echo(($lc===false?count($M)+1:$lc-$E*$x)>$x?'<p><a href="'.h(remove_from_uri("page|next").($_GET["next"]?"&next=".urlencode($_GET["next"]):"")."&page=".($E+1)).'" class="loadmore">'.'Load more data'.'</a>'.script("qsl('a').onclick = partial(selectLoadMore, $x, '".'Loading'."…');",""):''),"\n";echo"<div class='footer'><div>\n";if($oe){$Bd=($lc===false?$E+($M?(count($M)>=$x?2:1):0):floor(($lc-1)/$x));echo"<fieldset>";if(JUSH!="simpledb"&&JUSH!="redis"){echo"<legend><a href='".h(remove_from_uri("page"))."'>".'Page'."</a></legend>",script("qsl('a').onclick = function () { pageClick(this.href, +prompt('".'Page'."', '".($E+1)."')); return false; };"),pagination(0,$E).($E>5?" …":"");for($q=max(1,$E-4);$q<min($Bd,$E+5);$q++)echo
pagination($q,$E);if($Bd>0)echo($E+5<$Bd?" …":""),($Nb&&$lc!==false?pagination($Bd,$E):" <a href='".h(remove_from_uri("page")."&page=last")."' title='~$Bd'>".'last'."</a>");}else
echo"<legend>".'Page'."</legend>",pagination(0,$E).($E>1?" …":""),($E?pagination($E,$E):""),($Bd>$E?pagination($E+1,$E).($Bd>$E+1?" …":""):"");echo"</fieldset>\n";}echo"<fieldset>","<legend>".'Whole result'."</legend>";$pb=($Nb?"":"~ ").$lc;$de="const checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$pb' : checked); selectCount('selected2', this.checked || !checked ? '$pb' : checked);";echo
checkbox("all",1,0,($lc!==false?($Nb?"":"~ ").lang_format(array('%d row','%d rows'),$lc):""),$de)."\n","</fieldset>\n";if(adminer()->selectCommandPrint())echo'<fieldset',($_GET["modify"]?'':' class="jsonly"'),'><legend>Modify</legend><div>
<input type="submit" value="Save"',($_GET["modify"]?'':' title="'.'Ctrl+click on a value to modify it.'.'"'),'>
</div></fieldset>
<fieldset><legend>Selected <span id="selected"></span></legend><div>
<input type="submit" name="edit" value="Edit">
<input type="submit" name="clone" value="Clone">
<input type="submit" name="delete" value="Delete">',confirm(),'</div></fieldset>
';$kc=adminer()->dumpFormat();foreach((array)$_GET["columns"]as$d){if($d["fun"]){unset($kc['sql']);break;}}if($kc){print_fieldset("export",'Export'." <span id='selected2'></span>");$me=adminer()->dumpOutput();echo($me?html_select("output",$me,$da["output"])." ":""),html_select("format",$kc,$da["format"])," <input type='submit' name='export' value='".'Export'."'>\n","</div></fieldset>\n";}adminer()->selectEmailPrint(array_filter($Db,'strlen'),$e);echo"</div></div>\n";}if(adminer()->selectImportPrint())echo"<p>","<a href='#import'>".'Import'."</a>",script("qsl('a').onclick = partial(toggle, 'import');",""),"<span id='import'".($_POST["import"]?"":" class='hidden'").">: ",file_input("<input type='file' name='csv_file'> ".html_select("separator",array("csv"=>"CSV,","csv;"=>"CSV;","tsv"=>"TSV"),$da["format"])." <input type='submit' name='import' value='".'Import'."'>"),"</span>";echo
input_token(),"</form>\n",(!$p&&$N?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["script"])){if($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));elseif(list($R,$r,$B)=adminer()->_foreignColumn(column_foreign_keys($_GET["source"]),$_GET["field"])){$x=11;$J=connection()->query("SELECT $r, $B FROM ".table($R)." WHERE ".(preg_match('~^[0-9]+$~',$_GET["value"])?"$r = $_GET[value] OR ":"")."$B LIKE ".q("$_GET[value]%")." ORDER BY 2 LIMIT $x");for($q=1;($L=$J->fetch_row())&&$q<$x;$q++)echo"<a href='".h(ME."edit=".urlencode($R)."&where".urlencode("[".bracket_escape(idf_unescape($r))."]")."=".urlencode($L[0]))."'>".h($L[1])."</a><br>\n";if($L)echo"...\n";}exit;}else{page_header('Server',"",false);if(adminer()->homepage()){echo"<form action='' method='post'>\n","<p>".'Search data in tables'.": <input type='search' name='query' value='".h($_POST["query"])."'> <input type='submit' value='".'Search'."'>\n";if($_POST["query"]!="")search_tables();echo"<div class='scrollable'>\n","<table class='nowrap checkable odds'>\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'<thead><tr class="wrap">','<td><input id="check-all" type="checkbox" class="jsonly">'.script("qs('#check-all').onclick = partial(formCheck, /^tables\[/);",""),'<th>'.'Table','<td>'.'Rows',"</thead>\n";foreach(table_status()as$R=>$L){$B=adminer()->tableName($L);if($B!=""){echo'<tr><td>'.checkbox("tables[]",$R,in_array($R,(array)$_POST["tables"],true)),"<th><a href='".h(ME).'select='.urlencode($R)."'>$B</a>";$W=format_number($L["Rows"]);echo"<td align='right'><a href='".h(ME."edit=").urlencode($R)."'>".($L["Engine"]=="InnoDB"&&$W?"~ $W":$W)."</a>";}}echo"</table>\n","</div>\n","</form>\n",script("tableCheck();");adminer()->pluginsLinks();}}page_footer();