';$te=array("select"=>'Select data');if(support("table")||support("indexes"))$te["table"]='Show structure';$Zd=false;if(support("table")){$Zd=is_view($Jh);if($Zd)$te["view"]='Alter view';else$te["create"]='Alter table';}if($N!==null)$te["edit"]='New item';$B=$Jh["Name"];foreach($te
as$y=>$X)echo" $X";echo
doc_link(array(JUSH=>$l->tableHelp($B,$Zd)),"?"),"\n";}function
foreignKeys($Q){return
foreign_keys($Q);}function
backwardKeys($Q,$Ih){return
array();}function
backwardKeysPrint($Da,$J){}function
selectQuery($G,$_h,$Lc=false){global$l;$I="
\n";if(!$Lc&&($Yi=$l->warnings())){$u="warnings";$I=", ".($l->functions||$l->grouping?html_select("columns[$t][fun]",array(-1=>"")+array_filter(array('Functions'=>$l->functions,'Aggregation'=>$l->grouping)),$X["fun"]).on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, '(') + ')'",1).script("qsl('select').onchange = function () { helpClose();".($y!==""?"":" qsl('select, input', this.parentNode).onchange();")." };","")."($d)":$d)."
\n";$t++;}echo"\n";}function
selectSearchPrint($Z,$e,$x){print_fieldset("search",'Search',$Z);foreach($x
as$t=>$w){if($w["type"]=="FULLTEXT")echo"".select_input(" name='where[$t][col]'",$e,$X["col"],($X?"selectFieldChange":"selectAddRow"),"(".'anywhere'.")"),html_select("where[$t][op]",$this->operators,$X["op"],$Ra),"",script("mixin(qsl('input'), {oninput: function () { $Ra }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});",""),"
\n";}echo"\n";}function
selectOrderPrint($xf,$e,$x){print_fieldset("sort",'Sort',$xf);$t=0;foreach((array)$_GET["order"]as$y=>$X){if($X!=""){echo"".select_input(" name='order[$t]'",$e,$X,"selectFieldChange"),checkbox("desc[$t]",1,isset($_GET["desc"][$y]),'descending')."
\n";$t++;}}echo"".select_input(" name='order[$t]'",$e,"","selectAddRow"),checkbox("desc[$t]",1,false,'descending')."
\n","\n";}function
selectLimitPrint($z){echo"($B) ".h($V.($M!=""?"@".$this->serverName($M):"").($j!=""?" - $j":""))."\n";}}}}if($Jf)echo"\n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$S=array();if($_GET["ns"]!==""&&!$Pe&&DB!=""){$f->select_db(DB);$S=table_status('',true);}$this->syntaxHighlighting($S);$this->databasesPrint($Pe);$la=array();if(DB==""||!$Pe){if(support("sql")){$la[]="".'SQL command'."";$la[]="".'Import'."";}$la[]="".'Export'."";}$Id=$_GET["ns"]!==""&&!$Pe&&DB!="";if($Id)$la[]='".'Create table'."";echo($la?"\n".implode("\n",$la)."\n":"");if($Id){if($S)$this->tablesPrint($S);else
echo"
".'No tables.'."
\n";}}}function
syntaxHighlighting($S){global$f;echo
script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.0.6");if(support("sql")){echo"\n";}echo
script("bodyLoad('".(is_object($f)?preg_replace('~^(\d\.?\d).*~s','\1',$f->server_info):"")."'".($f->maria?", true":"").");");}function
databasesPrint($Pe){global$b,$f;$i=$this->databases();if(DB&&$i&&!in_array(DB,$i))array_unshift($i,DB);echo'\n";}function
tablesPrint($S){echo"".script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($S
as$Q=>$O){$B=$this->tableName($O);if($B!="")echo'- ".'select'." ",(support("table")||support("indexes")?'$B":"$B")."\n";}echo"
\n";}}$b=(function_exists('adminer_object')?adminer_object():new
Adminer);$Zb=array("server"=>"MySQL / MariaDB")+$Zb;if(!defined('Adminer\DRIVER')){define('Adminer\DRIVER',"server");if(extension_loaded("mysqli")){class
Db
extends
\MySQLi{var$extension="MySQLi";function
__construct(){parent::init();}function
connect($M="",$V="",$E="",$Ib=null,$bg=null,$ph=null){global$b;mysqli_report(MYSQLI_REPORT_OFF);list($Ad,$bg)=explode(":",$M,2);$zh=$b->connectSsl();if($zh)$this->ssl_set($zh['key'],$zh['cert'],$zh['ca'],'','');$I=@$this->real_connect(($M!=""?$Ad:ini_get("mysqli.default_host")),($M.$V!=""?$V:ini_get("mysqli.default_user")),($M.$V.$E!=""?$E:ini_get("mysqli.default_pw")),$Ib,(is_numeric($bg)?$bg:ini_get("mysqli.default_port")),(!is_numeric($bg)?$bg:$ph),($zh?($zh['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,false);return$I;}function
set_charset($Sa){if(parent::set_charset($Sa))return
true;parent::set_charset('utf8');return$this->query("SET NAMES $Sa");}function
result($G,$n=0){$H=$this->query($G);if(!$H)return
false;$J=$H->fetch_array();return$J[$n];}function
quote($P){return"'".$this->escape_string($P)."'";}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class
Db{var$extension="MySQL",$server_info,$affected_rows,$errno,$error;private$link,$result;function
connect($M,$V,$E){if(ini_bool("mysql.allow_local_infile")){$this->error=sprintf('Disable %s or enable %s or %s extensions.',"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");return
false;}$this->link=@mysql_connect(($M!=""?$M:ini_get("mysql.default_host")),("$M$V"!=""?$V:ini_get("mysql.default_user")),("$M$V$E"!=""?$E:ini_get("mysql.default_password")),true,131072);if($this->link)$this->server_info=mysql_get_server_info($this->link);else$this->error=mysql_error();return(bool)$this->link;}function
set_charset($Sa){if(function_exists('mysql_set_charset')){if(mysql_set_charset($Sa,$this->link))return
true;mysql_set_charset('utf8',$this->link);}return$this->query("SET NAMES $Sa");}function
quote($P){return"'".mysql_real_escape_string($P,$this->link)."'";}function
select_db($Ib){return
mysql_select_db($Ib,$this->link);}function
query($G,$yi=false){$H=@($yi?mysql_unbuffered_query($G,$this->link):mysql_query($G,$this->link));$this->error="";if(!$H){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return
false;}if($H===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return
true;}return
new
Result($H);}function
multi_query($G){return$this->result=$this->query($G);}function
store_result(){return$this->result;}function
next_result(){return
false;}function
result($G,$n=0){$H=$this->query($G);return($H?$H->fetch_column($n):false);}}class
Result{var$num_rows;private$result,$offset=0;function
__construct($H){$this->result=$H;$this->num_rows=mysql_num_rows($H);}function
fetch_assoc(){return
mysql_fetch_assoc($this->result);}function
fetch_row(){return
mysql_fetch_row($this->result);}function
fetch_column($n){return($this->num_rows?mysql_result($this->result,0,$n):false);}function
fetch_field(){$I=mysql_fetch_field($this->result,$this->offset++);$I->orgtable=$I->table;$I->orgname=$I->name;$I->charsetnr=($I->blob?63:0);return$I;}function
__destruct(){mysql_free_result($this->result);}}}elseif(extension_loaded("pdo_mysql")){class
Db
extends
PdoDb{var$extension="PDO_MySQL";function
connect($M,$V,$E){global$b;$vf=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$zh=$b->connectSsl();if($zh){if($zh['key'])$vf[\PDO::MYSQL_ATTR_SSL_KEY]=$zh['key'];if($zh['cert'])$vf[\PDO::MYSQL_ATTR_SSL_CERT]=$zh['cert'];if($zh['ca'])$vf[\PDO::MYSQL_ATTR_SSL_CA]=$zh['ca'];if(isset($zh['verify']))$vf[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$zh['verify'];}$this->dsn("mysql:charset=utf8;host=".str_replace(":",";unix_socket=",preg_replace('~:(\d)~',';port=\1',$M)),$V,$E,$vf);return
true;}function
set_charset($Sa){$this->query("SET NAMES $Sa");}function
select_db($Ib){return$this->query("USE ".idf_escape($Ib));}function
query($G,$yi=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$yi);return
parent::query($G,$yi);}}}class
Driver
extends
SqlDriver{static$fg=array("MySQLi","MySQL","PDO_MySQL");static$be="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");function
__construct($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->editFunctions=array(array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",),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->editFunctions[0]['uuid']='uuid';}if(min_version(9,'',$f)){$this->types['Numbers']["vector"]=16383;$this->editFunctions[0]['vector']='string_to_vector';}if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function
unconvertFunction($n){return(preg_match("~binary~",$n["type"])?"UNHEX
":($n["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"b''
"):(preg_match("~geometry|point|linestring|polygon~",$n["type"])?"GeomFromText
":"")));}function
insert($Q,$N){return($N?parent::insert($Q,$N):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function
insertUpdate($Q,$K,$F){$e=array_keys(reset($K));$hg="INSERT INTO ".table($Q)." (".implode(", ",$e).") VALUES\n";$Qi=array();foreach($e
as$y)$Qi[$y]="$y = VALUES($y)";$Fh="\nON DUPLICATE KEY UPDATE ".implode(", ",$Qi);$Qi=array();$qe=0;foreach($K
as$N){$Y="(".implode(", ",$N).")";if($Qi&&(strlen($hg)+$qe+strlen($Y)+strlen($Fh)>1e6)){if(!queries($hg.implode(",\n",$Qi).$Fh))return
false;$Qi=array();$qe=0;}$Qi[]=$Y;$qe+=strlen($Y)+2;}return
queries($hg.implode(",\n",$Qi).$Fh);}function
slowQuery($G,$bi){if(min_version('5.7.8','10.1.2')){if($this->conn->maria)return"SET STATEMENT max_statement_time=$bi FOR $G";elseif(preg_match('~^(SELECT\b)(.+)~is',$G,$A))return"$A[1] /*+ MAX_EXECUTION_TIME(".($bi*1000).") */ $A[2]";}}function
convertSearch($v,$X,$n){return(preg_match('~char|text|enum|set~',$n["type"])&&!preg_match("~^utf8~",$n["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($v USING ".charset($this->conn).")":$v);}function
warnings(){$H=$this->conn->query("SHOW WARNINGS");if($H&&$H->num_rows){ob_start();select($H);return
ob_get_clean();}}function
tableHelp($B,$Zd=false){$xe=$this->conn->maria;if(information_schema(DB))return
strtolower("information-schema-".($xe?"$B-table/":str_replace("_","-",$B)."-table.html"));if(DB=="mysql")return($xe?"mysql$B-table/":"system-schema.html");}function
hasCStyleEscapes(){static$Oa;if($Oa===null){$xh=$this->conn->result("SHOW VARIABLES LIKE 'sql_mode'",1);$Oa=(strpos($xh,'NO_BACKSLASH_ESCAPES')===false);}return$Oa;}}function
idf_escape($v){return"`".str_replace("`","``",$v)."`";}function
table($v){return
idf_escape($v);}function
connect($Ab){global$Zb;$f=new
Db;if($f->connect($Ab[0],$Ab[1],$Ab[2])){$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->maria=preg_match('~MariaDB~',$f->server_info);$Zb[DRIVER]=($f->maria?"MariaDB":"MySQL");return$f;}$I=$f->error;if(function_exists('iconv')&&!is_utf8($I)&&strlen($Qg=iconv("windows-1250","utf-8",$I))>strlen($I))$I=$Qg;return$I;}function
get_databases($Yc){$I=get_session("dbs");if($I===null){$G="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$I=($Yc?slow_query($G):get_vals($G));restart_session();set_session("dbs",$I);stop_session();}return$I;}function
limit($G,$Z,$z,$C=0,$ch=" "){return" $G$Z".($z!==null?$ch."LIMIT $z".($C?" OFFSET $C":""):"");}function
limit1($Q,$G,$Z,$ch="\n"){return
limit($G,$Z,1,0,$ch);}function
db_collation($j,$gb){$I=null;$h=get_val("SHOW CREATE DATABASE ".idf_escape($j),1);if(preg_match('~ COLLATE ([^ ]+)~',$h,$A))$I=$A[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$h,$A))$I=$gb[$A[1]][-1];return$I;}function
engines(){$I=array();foreach(get_rows("SHOW ENGINES")as$J){if(preg_match("~YES|DEFAULT~",$J["Support"]))$I[]=$J["Engine"];}return$I;}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($i){$I=array();foreach($i
as$j)$I[$j]=count(get_vals("SHOW TABLES IN ".idf_escape($j)));return$I;}function
table_status($B="",$Mc=false){$I=array();foreach(get_rows($Mc?"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$J){if($J["Engine"]=="InnoDB")$J["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$J["Comment"]);if(!isset($J["Engine"]))$J["Comment"]="";if($B!=""){$J["Name"]=$B;return$J;}$I[$J["Name"]]=$J;}return$I;}function
is_view($R){return$R["Engine"]===null;}function
fk_support($R){return
preg_match('~InnoDB|IBMDB2I~i',$R["Engine"])||(preg_match('~NDB~i',$R["Engine"])&&min_version(5.6));}function
fields($Q){global$f;$xe=$f->maria;$I=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($Q)." ORDER BY ORDINAL_POSITION")as$J){$n=$J["COLUMN_NAME"];$U=$J["COLUMN_TYPE"];$kd=$J["GENERATION_EXPRESSION"];$Jc=$J["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Jc,$jd);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$_e);$k=$J["COLUMN_DEFAULT"];if($k!=""){$Yd=preg_match('~text|json~',$_e[1]);if(!$xe&&$Yd)$k=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($k));if($xe||$Yd){$k=($k=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($A){return
stripslashes(str_replace("''","'",$A[1]));},$k));}if(!$xe&&preg_match('~binary~',$_e[1])&&preg_match('~^0x(\w*)$~',$k,$A))$k=pack("H*",$A[1]);}$I[$n]=array("field"=>$n,"full_type"=>$U,"type"=>$_e[1],"length"=>$_e[2],"unsigned"=>ltrim($_e[3].$_e[4]),"default"=>($jd?($xe?$kd:stripslashes($kd)):$k),"null"=>($J["IS_NULLABLE"]=="YES"),"auto_increment"=>($Jc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Jc,$A)?$A[1]:""),"collation"=>$J["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$J[PRIVILEGES],where,order")),"comment"=>$J["COLUMN_COMMENT"],"primary"=>($J["COLUMN_KEY"]=="PRI"),"generated"=>($jd[1]=="PERSISTENT"?"STORED":$jd[1]),);}return$I;}function
indexes($Q,$g=null){$I=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$g)as$J){$B=$J["Key_name"];$I[$B]["type"]=($B=="PRIMARY"?"PRIMARY":($J["Index_type"]=="FULLTEXT"?"FULLTEXT":($J["Non_unique"]?($J["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$I[$B]["columns"][]=$J["Column_name"];$I[$B]["lengths"][]=($J["Index_type"]=="SPATIAL"?null:$J["Sub_part"]);$I[$B]["descs"][]=null;}return$I;}function
foreign_keys($Q){global$l;static$Xf='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$I=array();$zb=get_val("SHOW CREATE TABLE ".table($Q),1);if($zb){preg_match_all("~CONSTRAINT ($Xf) FOREIGN KEY ?\\(((?:$Xf,? ?)+)\\) REFERENCES ($Xf)(?:\\.($Xf))? \\(((?:$Xf,? ?)+)\\)(?: ON DELETE ($l->onActions))?(?: ON UPDATE ($l->onActions))?~",$zb,$Ae,PREG_SET_ORDER);foreach($Ae
as$A){preg_match_all("~$Xf~",$A[2],$rh);preg_match_all("~$Xf~",$A[5],$Th);$I[idf_unescape($A[1])]=array("db"=>idf_unescape($A[4]!=""?$A[3]:$A[4]),"table"=>idf_unescape($A[4]!=""?$A[4]:$A[3]),"source"=>array_map('Adminer\idf_unescape',$rh[0]),"target"=>array_map('Adminer\idf_unescape',$Th[0]),"on_delete"=>($A[6]?:"RESTRICT"),"on_update"=>($A[7]?:"RESTRICT"),);}}return$I;}function
view($B){return
array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($B),1)));}function
collations(){$I=array();foreach(get_rows("SHOW COLLATION")as$J){if($J["Default"])$I[$J["Charset"]][-1]=$J["Collation"];else$I[$J["Charset"]][]=$J["Collation"];}ksort($I);foreach($I
as$y=>$X)asort($I[$y]);return$I;}function
information_schema($j){return($j=="information_schema")||(min_version(5.5)&&$j=="performance_schema");}function
error(){global$f;return
h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",$f->error));}function
create_database($j,$fb){return
queries("CREATE DATABASE ".idf_escape($j).($fb?" COLLATE ".q($fb):""));}function
drop_databases($i){$I=apply_queries("DROP DATABASE",$i,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$I;}function
rename_database($B,$fb){$I=false;if(create_database($B,$fb)){$S=array();$Vi=array();foreach(tables_list()as$Q=>$U){if($U=='VIEW')$Vi[]=$Q;else$S[]=$Q;}$I=(!$S&&!$Vi)||move_tables($S,$Vi,$B);drop_databases($I?array(DB):array());}return$I;}function
auto_increment(){$Aa=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$w){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$w["columns"],true)){$Aa="";break;}if($w["type"]=="PRIMARY")$Aa=" UNIQUE";}}return" AUTO_INCREMENT$Aa";}function
alter_table($Q,$B,$o,$ad,$lb,$qc,$fb,$_a,$Tf){global$f;$c=array();foreach($o
as$n){if($n[1]){$k=$n[1][3];if(preg_match('~ GENERATED~',$k)){$n[1][3]=($f->maria?"":$n[1][2]);$n[1][2]=$k;}$c[]=($Q!=""?($n[0]!=""?"CHANGE ".idf_escape($n[0]):"ADD"):" ")." ".implode($n[1]).($Q!=""?$n[2]:"");}else$c[]="DROP ".idf_escape($n[0]);}$c=array_merge($c,$ad);$O=($lb!==null?" COMMENT=".q($lb):"").($qc?" ENGINE=".q($qc):"").($fb?" COLLATE ".q($fb):"").($_a!=""?" AUTO_INCREMENT=$_a":"");if($Q=="")return
queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$c)."\n)$O$Tf");if($Q!=$B)$c[]="RENAME TO ".table($B);if($O)$c[]=ltrim($O);return($c||$Tf?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$c).$Tf):true);}function
alter_indexes($Q,$c){foreach($c
as$y=>$X)$c[$y]=($X[2]=="DROP"?"\nDROP INDEX ".idf_escape($X[1]):"\nADD $X[0] ".($X[0]=="PRIMARY"?"KEY ":"").($X[1]!=""?idf_escape($X[1])." ":"")."(".implode(", ",$X[2]).")");return
queries("ALTER TABLE ".table($Q).implode(",",$c));}function
truncate_tables($S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views($Vi){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Vi)));}function
drop_tables($S){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function
move_tables($S,$Vi,$Th){global$f;$Eg=array();foreach($S
as$Q)$Eg[]=table($Q)." TO ".idf_escape($Th).".".table($Q);if(!$Eg||queries("RENAME TABLE ".implode(", ",$Eg))){$Pb=array();foreach($Vi
as$Q)$Pb[table($Q)]=view($Q);$f->select_db($Th);$j=idf_escape(DB);foreach($Pb
as$B=>$Ui){if(!queries("CREATE VIEW $B AS ".str_replace(" $j."," ",$Ui["select"]))||!queries("DROP VIEW $j.$B"))return
false;}return
true;}return
false;}function
copy_tables($S,$Vi,$Th){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($S
as$Q){$B=($Th==DB?table("copy_$Q"):idf_escape($Th).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $B"))||!queries("CREATE TABLE $B LIKE ".table($Q))||!queries("INSERT INTO $B SELECT * FROM ".table($Q)))return
false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$J){$ri=$J["Trigger"];if(!queries("CREATE TRIGGER ".($Th==DB?idf_escape("copy_$ri"):idf_escape($Th).".".idf_escape($ri))." $J[Timing] $J[Event] ON $B FOR EACH ROW\n$J[Statement];"))return
false;}}foreach($Vi
as$Q){$B=($Th==DB?table("copy_$Q"):idf_escape($Th).".".table($Q));$Ui=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $B"))||!queries("CREATE VIEW $B AS $Ui[select]"))return
false;}return
true;}function
trigger($B){if($B=="")return
array();$K=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($B));return
reset($K);}function
triggers($Q){$I=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$J)$I[$J["Trigger"]]=array($J["Timing"],$J["Event"]);return$I;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
routine($B,$U){global$l;$ta=array("bool","boolean","integer","double precision","real","dec","numeric","fixed","national char","national varchar");$sh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$sc=$l->enumLength;$wi="((".implode("|",array_merge(array_keys($l->types()),$ta)).")\\b(?:\\s*\\(((?:[^'\")]|$sc)++)\\))?"."\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";$Xf="$sh*(".($U=="FUNCTION"?"":$l->inout).")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$wi";$h=get_val("SHOW CREATE $U ".idf_escape($B),2);preg_match("~\\(((?:$Xf\\s*,?)*)\\)\\s*".($U=="FUNCTION"?"RETURNS\\s+$wi\\s+":"")."(.*)~is",$h,$A);$o=array();preg_match_all("~$Xf\\s*,?~is",$A[1],$Ae,PREG_SET_ORDER);foreach($Ae
as$Nf)$o[]=array("field"=>str_replace("``","`",$Nf[2]).$Nf[3],"type"=>strtolower($Nf[5]),"length"=>preg_replace_callback("~$sc~s",'Adminer\normalize_enum',$Nf[6]),"unsigned"=>strtolower(preg_replace('~\s+~',' ',trim("$Nf[8] $Nf[7]"))),"null"=>1,"full_type"=>$Nf[4],"inout"=>strtoupper($Nf[1]),"collation"=>strtolower($Nf[9]),);return
array("fields"=>$o,"comment"=>get_val("SELECT ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_NAME = ".q($B)),)+($U!="FUNCTION"?array("definition"=>$A[11]):array("returns"=>array("type"=>$A[12],"length"=>$A[13],"unsigned"=>$A[15],"collation"=>$A[16]),"definition"=>$A[17],"language"=>"SQL",));}function
routines(){return
get_rows("SELECT ROUTINE_NAME AS 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,$J){return
idf_escape($B);}function
last_id(){return
get_val("SELECT LAST_INSERT_ID()");}function
explain($f,$G){return$f->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$G);}function
found_rows($R,$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function
create_sql($Q,$_a,$Dh){$I=get_val("SHOW CREATE TABLE ".table($Q),1);if(!$_a)$I=preg_replace('~ AUTO_INCREMENT=\d+~','',$I);return$I;}function
truncate_sql($Q){return"TRUNCATE ".table($Q);}function
use_sql($Ib){return"USE ".idf_escape($Ib);}function
trigger_sql($Q){$I="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$J)$I.="\nCREATE TRIGGER ".idf_escape($J["Trigger"])." $J[Timing] $J[Event] ON ".table($J["Table"])." FOR EACH ROW\n$J[Statement];;\n";return$I;}function
show_variables(){return
get_key_vals("SHOW VARIABLES");}function
process_list(){return
get_rows("SHOW FULL PROCESSLIST");}function
show_status(){return
get_key_vals("SHOW STATUS");}function
convert_field($n){if(preg_match("~binary~",$n["type"]))return"HEX(".idf_escape($n["field"]).")";if($n["type"]=="bit")return"BIN(".idf_escape($n["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$n["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($n["field"]).")";}function
unconvert_field($n,$I){if(preg_match("~binary~",$n["type"]))$I="UNHEX($I)";if($n["type"]=="bit")$I="CONVERT(b$I, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$n["type"])){$hg=(min_version(8)?"ST_":"");$I=$hg."GeomFromText($I, $hg"."SRID($n[field]))";}return$I;}function
support($Nc){return!preg_match("~scheme|sequence|type|view_trigger|materializedview".(min_version(8)?"":"|descidx".(min_version(5.1)?"":"|event|partitioning")).(min_version('8.0.16','10.2.1')?"":"|check")."~",$Nc);}function
kill_process($X){return
queries("KILL ".number($X));}function
connection_id(){return"SELECT CONNECTION_ID()";}function
max_connections(){return
get_val("SELECT @@max_connections");}}define('Adminer\JUSH',Driver::$be);define('Adminer\SERVER',$_GET[DRIVER]);define('Adminer\DB',$_GET["db"]);define('Adminer\ME',preg_replace('~\?.*~','',relative_uri()).'?'.(sid()?SID.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));if(!ob_get_level())ob_start(null,4096);function
page_header($di,$m="",$La=array(),$ei=""){global$ca,$ia,$b,$Zb;page_headers();if(is_ajax()&&$m){page_messages($m);exit;}$fi=$di.($ei!=""?": $ei":"");$gi=strip_tags($fi.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".$b->name());echo'
',$gi,'
';$Cb=$b->css();$Fb=(count($Cb)==1?!!preg_match('~-dark~',$Cb[0]):null);if($Fb!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.0.6");if($b->head($Fb))echo"\n","\n";foreach($Cb
as$X)echo"\n";echo"\n\n";$p=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists('openssl_verify')&&file_exists($p)&&filemtime($p)+86400>time()){$Ti=unserialize(file_get_contents($p));$qg="-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK
RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs
DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO
jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B
nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ
fQIDAQAB
-----END PUBLIC KEY-----
";if(openssl_verify($Ti["version"],base64_decode($Ti["signature"]),$qg)==1)$_COOKIE["adminer_version"]=$Ti["version"];}echo
script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '$ia', '".js_escape(ME)."', '".get_token()."')")."});
document.body.className = document.body.className.replace(/ nojs/, ' js');
var offlineMessage = '".js_escape('You are offline.')."';
var thousandsSeparator = '".js_escape(',')."';"),"\n",script("mixin(qs('#help'), {onmouseover: function () { helpOpen = 1; }, onmouseout: helpMouseout});"),"\n";if($La!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'
'.$Zb[DRIVER].' » ';$_=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$M=$b->serverName(SERVER);$M=($M!=""?$M:'Server');if($La===false)echo"$M\n";else{echo"$M » ";if($_GET["ns"]!=""||(DB!=""&&is_array($La)))echo''.h(DB).' » ';if(is_array($La)){if($_GET["ns"]!="")echo''.h($_GET["ns"]).' » ';foreach($La
as$y=>$X){$Rb=(is_array($X)?$X[1]:h($X));if($Rb!="")echo"$Rb » ";}}echo"$di\n";}}echo"
$fi
\n","
\n";restart_session();page_messages($m);$i=&get_session("dbs");if(DB!=""&&$i&&!in_array(DB,$i,true))$i=null;stop_session();define('Adminer\PAGE_HEADER',1);}function
page_headers(){global$b;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($b->csp()as$Bb){$xd=array();foreach($Bb
as$y=>$X)$xd[]="$y $X";header("Content-Security-Policy: ".implode("; ",$xd));}$b->headers();}function
csp(){return
array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self'","frame-src"=>"https://www.adminer.org","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function
get_nonce(){static$af;if(!$af)$af=base64_encode(rand_string());return$af;}function
page_messages($m){$Gi=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$Ne=$_SESSION["messages"][$Gi];if($Ne){echo"
".implode("
\n
",$Ne)."
".script("messagesPrint();");unset($_SESSION["messages"][$Gi]);}if($m)echo"
$m
\n";}function
page_footer($Pe=""){global$b,$T;echo'
';if($Pe!="auth")echo'
';echo
script("setupSubmitHighlight(document);");}function
int32($Te){while($Te>=2147483648)$Te-=4294967296;while($Te<=-2147483649)$Te+=4294967296;return(int)$Te;}function
long2str($W,$Xi){$Qg='';foreach($W
as$X)$Qg.=pack('V',$X);if($Xi)return
substr($Qg,0,end($W));return$Qg;}function
str2long($Qg,$Xi){$W=array_values(unpack('V*',str_pad($Qg,4*ceil(strlen($Qg)/4),"\0")));if($Xi)$W[]=strlen($Qg);return$W;}function
xxtea_mx($ej,$dj,$Gh,$ce){return
int32((($ej>>5&0x7FFFFFF)^$dj<<2)+(($dj>>3&0x1FFFFFFF)^$ej<<4))^int32(($Gh^$dj)+($ce^$ej));}function
encrypt_string($Bh,$y){if($Bh=="")return"";$y=array_values(unpack("V*",pack("H*",md5($y))));$W=str2long($Bh,true);$Te=count($W)-1;$ej=$W[$Te];$dj=$W[0];$rg=floor(6+52/($Te+1));$Gh=0;while($rg-->0){$Gh=int32($Gh+0x9E3779B9);$hc=$Gh>>2&3;for($Lf=0;$Lf<$Te;$Lf++){$dj=$W[$Lf+1];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$ej=int32($W[$Lf]+$Se);$W[$Lf]=$ej;}$dj=$W[0];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$ej=int32($W[$Te]+$Se);$W[$Te]=$ej;}return
long2str($W,false);}function
decrypt_string($Bh,$y){if($Bh=="")return"";if(!$y)return
false;$y=array_values(unpack("V*",pack("H*",md5($y))));$W=str2long($Bh,false);$Te=count($W)-1;$ej=$W[$Te];$dj=$W[0];$rg=floor(6+52/($Te+1));$Gh=int32($rg*0x9E3779B9);while($Gh){$hc=$Gh>>2&3;for($Lf=$Te;$Lf>0;$Lf--){$ej=$W[$Lf-1];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$dj=int32($W[$Lf]-$Se);$W[$Lf]=$dj;}$ej=$W[$Te];$Se=xxtea_mx($ej,$dj,$Gh,$y[$Lf&3^$hc]);$dj=int32($W[0]-$Se);$W[0]=$dj;$Gh=int32($Gh-0x9E3779B9);}return
long2str($W,true);}$f='';$wd=$_SESSION["token"];if(!$wd)$_SESSION["token"]=rand(1,1e6);$T=get_token();$Zf=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($y)=explode(":",$X);$Zf[$y]=$X;}}function
add_invalid_login(){global$b;$Fa=get_temp_dir()."/adminer.invalid";foreach(glob("$Fa*")?:array($Fa)as$p){$r=file_open_lock($p);if($r)break;}if(!$r)$r=file_open_lock("$Fa-".rand_string());if(!$r)return;$Ud=unserialize(stream_get_contents($r));$ai=time();if($Ud){foreach($Ud
as$Vd=>$X){if($X[0]<$ai)unset($Ud[$Vd]);}}$Td=&$Ud[$b->bruteForceKey()];if(!$Td)$Td=array($ai+30*60,0);$Td[1]++;file_write_unlock($r,serialize($Ud));}function
check_invalid_login(){global$b;$Ud=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$p){$r=file_open_lock($p);if($r){$Ud=unserialize(stream_get_contents($r));file_unlock($r);break;}}$Td=($Ud?$Ud[$b->bruteForceKey()]:array());$Ze=($Td[1]>29?$Td[0]-time():0);if($Ze>0)auth_error(lang(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($Ze/60)));}$za=$_POST["auth"];if($za){session_regenerate_id();$Si=$za["driver"];$M=$za["server"];$V=$za["username"];$E=(string)$za["password"];$j=$za["db"];set_password($Si,$M,$V,$E);$_SESSION["db"][$Si][$M][$V][$j]=true;if($za["permanent"]){$y=implode("-",array_map('base64_encode',array($Si,$M,$V,$j)));$lg=$b->permanentLogin(true);$Zf[$y]="$y:".base64_encode($lg?encrypt_string($E,$lg):"");cookie("adminer_permanent",implode(" ",$Zf));}if(count($_POST)==1||DRIVER!=$Si||SERVER!=$M||$_GET["username"]!==$V||DB!=$j)redirect(auth_url($Si,$M,$V,$j));}elseif($_POST["logout"]&&(!$wd||verify_token())){foreach(array("pwds","db","dbs","queries")as$y)set_session($y,null);unset_permanent();redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Logout successful.'.' '.'Thanks for using Adminer, consider donating.');}elseif($Zf&&!$_SESSION["pwds"]){session_regenerate_id();$lg=$b->permanentLogin();foreach($Zf
as$y=>$X){list(,$Za)=explode(":",$X);list($Si,$M,$V,$j)=array_map('base64_decode',explode("-",$y));set_password($Si,$M,$V,decrypt_string(base64_decode($Za),$lg));$_SESSION["db"][$Si][$M][$V][$j]=true;}}function
unset_permanent(){global$Zf;foreach($Zf
as$y=>$X){list($Si,$M,$V,$j)=array_map('base64_decode',explode("-",$y));if($Si==DRIVER&&$M==SERVER&&$V==$_GET["username"]&&$j==DB)unset($Zf[$y]);}cookie("adminer_permanent",implode(" ",$Zf));}function
auth_error($m){global$b,$wd;$ih=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$ih]||$_GET[$ih])&&!$wd)$m='Session expired, please login again.';else{restart_session();add_invalid_login();$E=get_password();if($E!==null){if($E===false)$m.=($m?'
':'').sprintf('Master password expired. Implement %s method to make it permanent.',target_blank(),'permanentLogin()
');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent();}}if(!$_COOKIE[$ih]&&$_GET[$ih]&&ini_bool("session.use_only_cookies"))$m='Session support must be enabled.';$Of=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Of["lifetime"]);page_header('Login',$m,null);echo"\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent();page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$fg)),false);page_footer("auth");exit;}stop_session(true);if(isset($_GET["username"])&&is_string(get_password())){list($Ad,$bg)=explode(":",SERVER,2);if(preg_match('~^\s*([-+]?\d+)~',$bg,$A)&&($A[1]<1024||$A[1]>65535))auth_error('Connecting to privileged ports is not allowed.');check_invalid_login();$f=connect($b->credentials());if(is_object($f)){$l=new
Driver($f);if($b->operators===null)$b->operators=$l->operators;if(isset($f->maria)||$f->cockroach)save_settings(array("vendor-".SERVER=>$Zb[DRIVER]));}}$ve=null;if(!is_object($f)||($ve=$b->login($_GET["username"],get_password()))!==true){$m=(is_string($f)?nl_br(h($f)):(is_string($ve)?$ve:'Invalid credentials.'));auth_error($m.(preg_match('~^ | $~',get_password())?'
'.'There is a space in the input password which might be the cause.':''));}if($_POST["logout"]&&$wd&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if($za&&$_POST["token"])$_POST["token"]=$T;$m='';if($_POST){if(!verify_token()){$Od="max_input_vars";$Ge=ini_get($Od);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$y){$X=ini_get($y);if($X&&(!$Ge||$X<$Ge)){$Od=$y;$Ge=$X;}}}$m=(!$_POST["token"]&&$Ge?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$Od'"):'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"){$m=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$m.=' '.'You can upload a big SQL file via FTP and import it from server.';}function
select($H,$g=null,$Af=array(),$z=0){$te=array();$x=array();$e=array();$Ja=array();$xi=array();$I=array();for($t=0;(!$z||$t<$z)&&($J=$H->fetch_row());$t++){if(!$t){echo"":"".'No rows.')."\n";return$I;}function
referencable_primary($ah){$I=array();foreach(table_status('',true)as$Lh=>$Q){if($Lh!=$ah&&fk_support($Q)){foreach(fields($Lh)as$n){if($n["primary"]){if($I[$Lh]){unset($I[$Lh]);break;}$I[$Lh]=$n;}}}}return$I;}function
textarea($B,$Y,$K=10,$hb=80){echo"";}function
select_input($ya,$vf,$Y="",$pf="",$ag=""){$Sh=($vf?"select":"input");return"<$Sh$ya".($vf?">