<?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($bc,$cc){return!!preg_match('~^Undefined (array key|offset|index)~',$cc);},E_WARNING|E_NOTICE);$sc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($sc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$kh=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($kh)$$X=$kh;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
connection($f=null){return($f?:Db::$instance);}function
adminer(){return
Adminer::$instance;}function
driver(){return
Driver::$instance;}function
connect(){$pb=adminer()->credentials();$G=Driver::connect($pb[0],$pb[1],$pb[2]);return(is_object($G)?$G:null);}function
idf_unescape($r){if(!preg_match('~^[`\'"[]~',$r))return$r;$Md=substr($r,-1);return
str_replace($Md.$Md,$Md,substr($r,1,-1));}function
q($P){return
connection()->quote($P);}function
idx($na,$u,$h=null){return($na&&array_key_exists($u,$na)?$na[$u]:$h);}function
number($X){return
preg_replace('~[^0-9]+~','',$X);}function
number_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}function
remove_slashes(array$yh,$sc=false){$G=array();foreach($yh
as$u=>$X)$G[stripslashes($u)]=(is_array($X)?remove_slashes($X,$sc):($sc?$X:stripslashes($X)));return$G;}function
bracket_escape($r,$wa=false){static$Ug=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return
strtr($r,($wa?array_flip($Ug):$Ug));}function
min_version($_h,$be="",$f=null){$f=connection($f);$gg=$f->server_info;if($be&&preg_match('~([\d.]+)-MariaDB~',$gg,$y)){$gg=$y[1];$_h=$be;}return$_h&&version_compare($gg,$_h)>=0;}function
charset(Db$e){return(min_version("5.5.3",0,$e)?"utf8mb4":"utf8");}function
ini_set($Te,$Y){return(function_exists('ini_set')?\ini_set($Te,$Y):false);}function
ini_bool($rd){$X=ini_get($rd);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function
ini_bytes($rd){$X=ini_get($rd);switch(strtolower(substr($X,-1))){case'g':$X=(int)$X*1024;case'm':$X=(int)$X*1024;case'k':$X=(int)$X*1024;}return$X;}function
sid(){static$G;if($G===null)$G=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$G;}function
set_password($zh,$L,$V,$B){$_SESSION["pwds"][$zh][$L][$V]=($_COOKIE["adminer_key"]&&is_string($B)?array(encrypt_string($B,$_COOKIE["adminer_key"])):$B);}function
get_password(){$G=get_session("pwds");if(is_array($G))$G=($_COOKIE["adminer_key"]?decrypt_string($G[0],$_COOKIE["adminer_key"]):false);return$G;}function
get_val($E,$j=0,$db=null){$db=connection($db);$F=$db->query($E);if(!is_object($F))return
false;$H=$F->fetch_row();return($H?$H[$j]:false);}function
get_vals($E,$c=0){$G=array();$F=connection()->query($E);if(is_object($F)){while($H=$F->fetch_row())$G[]=$H[$c];}return$G;}function
get_key_vals($E,$f=null,$jg=true){$f=connection($f);$G=array();$F=$f->query($E);if(is_object($F)){while($H=$F->fetch_row()){if($jg)$G[$H[0]]=$H[1];else$G[]=$H[0];}}return$G;}function
get_rows($E,$f=null,$i="<p class='error'>"){$db=connection($f);$G=array();$F=$db->query($E);if(is_object($F)){while($H=$F->fetch_assoc())$G[]=$H;}elseif(!$F&&!$f&&$i&&(defined('Adminer\PAGE_HEADER')||$i=="-- "))echo$i.error()."\n";return$G;}function
unique_array($H,array$t){foreach($t
as$s){if(preg_match("~PRIMARY|UNIQUE~",$s["type"])&&!$s["partial"]){$G=array();foreach($s["columns"]as$u){if(!isset($H[$u]))continue
2;$G[$u]=$H[$u];}return$G;}}}function
escape_key($u){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$u,$y))return$y[1].idf_escape(idf_unescape($y[2])).$y[3];return
idf_escape($u);}function
where(array$Z,array$k=array()){$G=array();foreach((array)$Z["where"]as$u=>$X){$u=bracket_escape($u,true);$c=escape_key($u);$j=idx($k,$u,array());$pc=$j["type"];$G[]=$c.(JUSH=="sql"&&$pc=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^jsonb?$~',$j["full_type"])?"::jsonb = ".q($X)."::jsonb":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($pc,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($j,q($X))))));if(JUSH=="sql"&&preg_match('~char|text~',$pc)&&preg_match("~[^ -@]~",$X))$G[]="$c = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$u)$G[]=escape_key($u)." IS NULL";return
implode(" AND ",$G);}function
where_check($X,array$k=array()){parse_str($X,$Ma);remove_slashes(array(&$Ma));return
where($Ma,$k);}function
where_link($p,$c,$Y,$Re="="){return"&where%5B$p%5D%5Bcol%5D=".urlencode($c)."&where%5B$p%5D%5Bop%5D=".urlencode(($Y!==null?$Re:"IS NULL"))."&where%5B$p%5D%5Bval%5D=".urlencode($Y);}function
convert_fields(array$d,array$k,array$J=array()){$G="";foreach($d
as$u=>$X){if($J&&!in_array(idf_escape($u),$J))continue;$oa=convert_field($k[$u]);if($oa)$G
.=", $oa AS ".idf_escape($u);}return$G;}function
cookie_path(){return
strtr(preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),array(";"=>"%3B",","=>"%2C"));}function
cookie($z,$Y,$Sd=2592000){header("Set-Cookie: $z=".rawurlencode($Y).($Sd?"; expires=".gmdate("D, d M Y H:i:s",time()+$Sd)." GMT":"")."; path=".cookie_path().(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function
get_url($qh,$jb){$G=@file_get_contents($qh,false,$jb);if(function_exists('http_get_last_response_headers'))$http_response_header=http_get_last_response_headers();return
array($G,(preg_match('~^HTTP/[\d.]+ (\d+)~',$http_response_header[0],$y)?$y[1]:''),);}function
get_settings($lb){parse_str($_COOKIE[$lb],$kg);return$kg;}function
get_setting($u,$lb="adminer_settings",$h=null){return
idx(get_settings($lb),$u,$h);}function
save_settings(array$kg,$lb="adminer_settings"){$Y=http_build_query($kg+get_settings($lb));cookie($lb,$Y);$_COOKIE[$lb]=$Y;}function
restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function
stop_session($_c=false){$sh=ini_bool("session.use_cookies");if(!$sh||$_c){session_write_close();if($sh&&ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($u){return$_SESSION[$u][DRIVER][SERVER][$_GET["username"]];}function
set_session($u,$X){$_SESSION[$u][DRIVER][SERVER][$_GET["username"]]=$X;}function
auth_url($zh,$L,$V,$g=null){$ph=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($g!==null?"db|":"").($zh=='mssql'||$zh=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$ph,$y);return"$y[1]?".(sid()?SID."&":"").($zh!="server"||$L!=""?urlencode($zh)."=".urlencode($L)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($g!=""?"&db=".urlencode($g):"").($y[2]?"&$y[2]":"");}function
is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
redirect($Xd,$oe=null){if($oe!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Xd!==null?$Xd:$_SERVER["REQUEST_URI"]))][]=$oe;}if($Xd!==null){if($Xd=="")$Xd=".";header("Location: $Xd");exit;}}function
query_redirect($E,$Xd,$oe,$Jf=true,$gc=true,$lc=false,$Kg=""){if($gc){$tg=microtime(true);$lc=!connection()->query($E);$Kg=format_time($tg);}$qg=($E?adminer()->messageQuery($E,$Kg,$lc):"");if($lc){adminer()->error
.=error().$qg.script("messagesPrint();")."<br>";return
false;}if($Jf)redirect($Xd,$oe.$qg);return
true;}class
Queries{static$queries=array();static$start=0;}function
queries($E){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$E:(preg_match('~;$~',$E)?"DELIMITER ;;\n$E;\nDELIMITER ":$E).";");return
connection()->query($E);}function
apply_queries($E,array$S,$dc='Adminer\table'){foreach($S
as$Q){if(!queries("$E ".$dc($Q)))return
false;}return
true;}function
queries_redirect($Xd,$oe,$Jf){$Ef=implode("\n",Queries::$queries);$Kg=format_time(Queries::$start);return
query_redirect($Ef,$Xd,$oe,$Jf,false,!$Jf,$Kg);}function
format_time($tg){return
sprintf('%.3f s',max(0,microtime(true)-$tg));}function
relative_uri(){return
str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function
remove_from_uri($hf=""){return
substr(preg_replace("~(?<=[?&])($hf".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function
get_file($u,$xb=false,$_b=""){$qc=$_FILES[$u];if(!$qc)return
null;foreach($qc
as$u=>$X)$qc[$u]=(array)$X;$G='';foreach($qc["error"]as$u=>$i){if($i)return$i;$z=$qc["name"][$u];$Rg=$qc["tmp_name"][$u];$ib=file_get_contents($xb&&preg_match('~\.gz$~',$z)?"compress.zlib://$Rg":$Rg);if($xb){$tg=substr($ib,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$tg))$ib=iconv("utf-16","utf-8",$ib);elseif($tg=="\xEF\xBB\xBF")$ib=substr($ib,3);}$G
.=$ib;if($_b)$G
.=(preg_match("($_b\\s*\$)",$ib)?"":$_b)."\n\n";}return$G;}function
upload_error($i){$je=($i==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($i?'Unable to upload a file.'.($je?" ".sprintf('Maximum allowed file size is %sB.',$je):""):'File does not exist.');}function
repeat_pattern($pf,$v){return
str_repeat("$pf{0,65535}",$v/65535)."$pf{0,".($v%65535)."}";}function
is_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}function
format_number($X){return
strtr(number_format($X,0,".",','),preg_split('~~u','0123456789',-1,PREG_SPLIT_NO_EMPTY));}function
friendly_url($X){return
preg_replace('~\W~i','-',$X);}function
table_status1($Q,$mc=false){$G=table_status($Q,$mc);return($G?reset($G):array("Name"=>$Q));}function
column_foreign_keys($Q){$G=array();foreach(adminer()->foreignKeys($Q)as$m){foreach($m["source"]as$X)$G[$X][]=$m;}return$G;}function
fields_from_edit(){$G=array();foreach((array)$_POST["field_keys"]as$u=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$u];$_POST["fields"][$X]=$_POST["field_vals"][$u];}}foreach((array)$_POST["fields"]as$u=>$X){$z=bracket_escape($u,true);$G[$z]=array("field"=>$z,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($u==driver()->primary),);}return$G;}function
dump_headers($fd,$ye=false){$G=adminer()->dumpHeaders($fd,$ye);$df=$_POST["output"];if($df!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($fd).".$G".($df!="file"&&preg_match('~^[0-9a-z]+$~',$df)?".$df":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$G;}function
dump_csv(array$H){$dh=$_POST["format"]=="tsv";foreach($H
as$u=>$X){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($dh?'\t':'[,;]|^$').'~',$X))$H[$u]='"'.str_replace('"','""',$X).'"';}echo
implode(($_POST["format"]=="csv"?",":($dh?"\t":";")),$H)."\r\n";}function
apply_sql_function($o,$c){return($o?($o=="unixepoch"?"DATETIME($c, '$o')":($o=="count distinct"?"COUNT(DISTINCT ":strtoupper("$o("))."$c)"):$c);}function
get_temp_dir(){return
ini_get("upload_tmp_dir")?:sys_get_temp_dir();}function
file_open_lock($l){if(is_link($l))return;$n=@fopen($l,"c+");if(!$n)return;@chmod($l,0660);if(!flock($n,LOCK_EX)){fclose($n);return;}return$n;}function
file_write_unlock($n,$ub){rewind($n);fwrite($n,$ub);ftruncate($n,strlen($ub));file_unlock($n);}function
file_unlock($n){flock($n,LOCK_UN);fclose($n);}function
first(array$na){return
reset($na);}function
password_file($nb){$l=get_temp_dir()."/adminer.key";if(!$nb&&!file_exists($l))return'';$n=file_open_lock($l);if(!$n)return'';$G=stream_get_contents($n);if(!$G){$G=rand_string();file_write_unlock($n,$G);}else
file_unlock($n);return$G;}function
rand_string(){return(function_exists('random_bytes')?bin2hex(random_bytes(16)):md5(uniqid(strval(mt_rand()),true)));}function
select_value($X,$x,array$j,$Ig){if(is_array($X)){$G="";if(array_filter($X,'is_array')==array_values($X)){$Hd=array();foreach($X
as$W)$Hd+=array_fill_keys(array_keys($W),null);foreach(array_keys($Hd)as$Fd)$G
.="<th>".h($Fd);foreach($X
as$W){$G
.="<tr>";foreach(array_merge($Hd,$W)as$uh)$G
.="<td>".select_value($uh,$x,$j,$Ig);}}else{foreach($X
as$Fd=>$W)$G
.="<tr>".($X!=array_values($X)?"<th>".h($Fd):"")."<td>".select_value($W,$x,$j,$Ig);}return"<table>$G</table>";}if(!$x)$x=adminer()->selectLink($X,$j);if($x===null){if(is_mail($X))$x="mailto:$X";if(is_url($X))$x=$X;}$X=driver()->value($X,$j);$G=adminer()->editVal($X,$j);if($G!==null){if(!is_utf8($G))$G="\0";elseif($Ig!=""&&is_shortable($j))$G=shorten_utf8($G,max(0,+$Ig));else$G=h($G);}return
adminer()->selectVal($G,$x,$j,$X);}function
is_blob(array$j){return
preg_match('~blob|bytea|raw|file~',$j["type"])&&!in_array($j["type"],idx(driver()->structuredTypes(),'User types',array()));}function
is_mail($Sb){$pa='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$Jb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$pf="$pa+(\\.$pa+)*@($Jb?\\.)+$Jb";return
is_string($Sb)&&preg_match("(^$pf(,\\s*$pf)*\$)i",$Sb);}function
is_url($P){$Jb='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return
preg_match("~^((https?):)?//($Jb?\\.)+$Jb(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$P);}function
is_shortable(array$j){return!preg_match('~'.number_type().'|date|time|year~',$j["type"]);}function
host_port($L){return(preg_match('~^(:([^:].*)|(\[(.+)\]|(([^:]+://)?[^:]+))(:(\d+))?)$~',$L,$y)?array($y[4].$y[5],$y[2].$y[8]):array($L,''));}function
count_rows($Q,array$Z,$_d,array$Lc){$E=" FROM ".table($Q).($Z?" WHERE ".implode(" AND ",$Z):"");return($_d&&(JUSH=="sql"||count($Lc)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$Lc).")$E":"SELECT COUNT(*)".($_d?" FROM (SELECT 1$E GROUP BY ".implode(", ",$Lc).") x":$E));}function
slow_query($E){$g=adminer()->database();$Lg=adminer()->queryTimeout();$mg=driver()->slowQuery($E,$Lg);$f=null;if(!$mg&&support("kill")){$f=connect();if($f&&($g==""||$f->select_db($g))){$Id=get_val(connection_id(),0,$f);echo
script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$Id&token=".get_token()."'); }, 1000 * $Lg);");}}ob_flush();flush();$G=@get_key_vals(($mg?:$E),$f,false);if($f){echo
script("clearTimeout(timeout);");ob_flush();flush();}return$G;}function
get_token(){$Hf=rand(1,1e6);return($Hf^$_SESSION["token"]).":$Hf";}function
verify_token(){list($Sg,$Hf)=explode(":",$_POST["token"]);return($Hf^$_SESSION["token"])==$Sg&&in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"));}function
compress_alphabet(){return
strtr(implode(range('"','~')),"'\\","!\n");}function
decompress_string($P){$ka=array_flip(str_split(compress_alphabet()));$v=strlen($P);$xh=($v?13*($v-1)/2-$ka[$P[0]]:0);$Ca="";$Pf=0;$Qf=0;for($p=1;$p<$v;$p+=2){$Pf=($Pf<<13)+$ka[$P[$p]]*93+$ka[$P[$p+1]];$Qf+=13;while($Qf>=8&&$xh>=8){$Qf-=8;$xh-=8;$Ca
.=chr($Pf>>$Qf);$Pf&=(1<<$Qf)-1;}}if($Ca=="")return"";return(function_exists('gzinflate')?gzinflate($Ca):inflate($Ca));}function
inflate($Ca){$Pd=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);$Qd=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);$Db=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);$Fb=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);$G="";$D=0;do{$tc=inflate_bits($Ca,$D,1);$T=inflate_bits($Ca,$D,2);if(!$T){$D=($D+7)&~7;$v=inflate_bits($Ca,$D,16);$D+=16;$G
.=substr($Ca,$D>>3,$v);$D+=$v<<3;}else{if($T==1){$Vd=array_merge(array_fill(0,144,8),array_fill(0,112,9),array_fill(0,24,7),array_fill(0,8,8));$Gb=array_fill(0,30,5);}else{$Ud=inflate_bits($Ca,$D,5)+257;$Eb=inflate_bits($Ca,$D,5)+1;$We=array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);$re=array_fill(0,19,0);$qe=inflate_bits($Ca,$D,4)+4;for($p=0;$p<$qe;$p++)$re[$We[$p]]=inflate_bits($Ca,$D,3);$se=inflate_table($re);$Rd=array();while(count($Rd)<$Ud+$Eb){$zg=inflate_symbol($Ca,$D,$se);if($zg==16)$Rd=array_merge($Rd,array_fill(0,inflate_bits($Ca,$D,2)+3,end($Rd)));elseif($zg==17)$Rd=array_merge($Rd,array_fill(0,inflate_bits($Ca,$D,3)+3,0));elseif($zg==18)$Rd=array_merge($Rd,array_fill(0,inflate_bits($Ca,$D,7)+11,0));else$Rd[]=$zg;}$Vd=array_slice($Rd,0,$Ud);$Gb=array_slice($Rd,$Ud);}$Wd=inflate_table($Vd);$Ib=inflate_table($Gb);while(($zg=inflate_symbol($Ca,$D,$Wd))!=256){if($zg<256)$G
.=chr($zg);else{$v=$Pd[$zg-257]+inflate_bits($Ca,$D,$Qd[$zg-257]);$Hb=inflate_symbol($Ca,$D,$Ib);$_=strlen($G)-$Db[$Hb]-inflate_bits($Ca,$D,$Fb[$Hb]);for($p=0;$p<$v;$p++)$G
.=$G[$_+$p];}}}}while(!$tc);return$G;}function
inflate_bits($Ca,&$D,$mb){$G=0;for($p=0;$p<$mb;$p++){$G+=((ord($Ca[$D>>3])>>($D&7))&1)<<$p;$D++;}return$G;}function
inflate_table(array$Rd){$Q=array();$Ta=0;for($Da=1;$Da<=max($Rd);$Da++){foreach($Rd
as$zg=>$v){if($v==$Da){$Q[$Da][$Ta]=$zg;$Ta++;}}$Ta<<=1;}return$Q;}function
inflate_symbol($Ca,&$D,array$Q){$Ta=0;$Da=0;do{$Ta=($Ta<<1)+inflate_bits($Ca,$D,1);$Da++;}while(!isset($Q[$Da][$Ta]));return$Q[$Da][$Ta];}function
script($og,$Tg="\n"){return"<script".nonce().">$og</script>$Tg";}function
script_src($qh,$yb=false){return"<script src='".h($qh)."'".nonce().($yb?" defer":"")."></script>\n";}function
nonce(){return' nonce="'.get_nonce().'"';}function
input_hidden($z,$Y=""){return"<input type='hidden' name='".h($z)."' value='".h($Y)."'>\n";}function
input_token(){return
input_hidden("token",get_token());}function
target_blank(){return' target="_blank" rel="noreferrer noopener"';}function
h($P){return
str_replace(array('&','<','"',"'","\0"),array('&amp;','&lt;','&quot;','&#039;','&#0;'),$P);}function
nl_br($P){return
str_replace("\n","<br>",$P);}function
checkbox($z,$Y,$Oa,$Jd="",$Pe="",$Ra="",$Ld=""){$G="<input type='checkbox' name='$z' value='".h($Y)."'".($Oa?" checked":"").($Ld?" aria-labelledby='$Ld'":"").">".($Pe?script("qsl('input').onclick = function () { $Pe };",""):"");return($Jd!=""||$Ra?"<label".($Ra?" class='$Ra'":"").">$G".h($Jd)."</label>":$G);}function
optionlist($Ue,$ag=null,$th=false){$G="";foreach($Ue
as$Fd=>$W){$Ve=array($Fd=>$W);if(is_array($W)){$G
.='<optgroup label="'.h($Fd).'">';$Ve=$W;}foreach($Ve
as$u=>$X)$G
.='<option'.($th||is_string($u)?' value="'.h($u).'"':'').($ag!==null&&($th||is_string($u)?(string)$u:$X)===$ag?' selected':'').'>'.h($X);if(is_array($W))$G
.='</optgroup>';}return$G;}function
html_select($z,array$Ue,$Y="",$Oe="",$Ld=""){static$Jd=0;$Kd="";if(!$Ld&&substr($Ue[""],0,1)=="("){$Jd++;$Ld="label-$Jd";$Kd="<option value='' id='$Ld'>".h($Ue[""]);unset($Ue[""]);}return"<select name='".h($z)."'".($Ld?" aria-labelledby='$Ld'":"").">".$Kd.optionlist($Ue,$Y)."</select>".($Oe?script("qsl('select').onchange = function () { $Oe };",""):"");}function
html_radios($z,array$Ue,$Y="",$K=""){$G="";foreach($Ue
as$u=>$X)$G
.="<label><input type='radio' name='".h($z)."' value='".h($u)."'".($u==$Y?" checked":"").">".h($X)."</label>$K";return$G;}function
confirm($oe="",$bg="qsl('input')"){return
script("$bg.onclick = () => confirm('".($oe?js_escape($oe):'Are you sure?')."');","");}function
print_fieldset($q,$Od,$Ch=false){echo"<fieldset><legend>","<a href='#fieldset-$q'>$Od</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$q');",""),"</legend>","<div id='fieldset-$q'".($Ch?"":" class='hidden'").">\n";}function
bold($Ea,$Ra=""){return($Ea?" class='active $Ra'":($Ra?" class='$Ra'":""));}function
js_escape($P){return
addcslashes($P,"\r\n'\\/");}function
pagination($A,$sb){return" ".($A==$sb?$A+1:'<a href="'.h(remove_from_uri("page|next").($A?"&page=$A".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).'">'.($A+1)."</a>");}function
hidden_fields(array$Cf,array$id=array(),$wf=''){$G=false;foreach($Cf
as$u=>$X){if(!in_array($u,$id)){if(is_array($X))hidden_fields($X,array(),$u);else{$G=true;echo
input_hidden(($wf?$wf."[$u]":$u),$X);}}}return$G;}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($td){$ge="max_file_uploads";$he=ini_get($ge);$nh="upload_max_filesize";$oh=ini_get($nh);return(ini_bool("file_uploads")?$td.script("qsl('input[type=\"file\"]').onchange = partialArg(fileChange, "."$he, '".sprintf('Increase %s.',"$ge = $he")."', ".ini_bytes("upload_max_filesize").", '".sprintf('Increase %s.',"$nh = $oh")."')"):'File uploads are disabled.');}function
enum_input($T,$ra,array$j,$Y,$Vb=""){preg_match_all("~'((?:[^']|'')*)'~",$j["length"],$ee);$wf=($j["type"]=="enum"?"val-":"");$Oa=(is_array($Y)?in_array("null",$Y):$Y===null);$G=($j["null"]&&$wf?"<label><input type='$T'$ra value='null'".($Oa?" checked":"")."><i>$Vb</i></label>":"");foreach($ee[1]as$X){$X=stripcslashes(str_replace("''","'",$X));$Oa=(is_array($Y)?in_array($wf.$X,$Y):$Y===$X);$G
.=" <label><input type='$T'$ra value='".h($wf.$X)."'".($Oa?' checked':'').'>'.h(adminer()->editVal($X,$j)).'</label>';}return$G;}function
input(array$j,$Y,$o,$va=false){$z=h(bracket_escape($j["field"]));echo"<td class='function'>";if(is_array($Y)&&!$o)$o="json";$Dd=($o=="json"||preg_match('~^jsonb?$~',$j["full_type"]));if($Dd&&$Y!=''&&(JUSH!="pgsql"||$j["type"]!="json"))$Y=json_encode(is_array($Y)?$Y:json_decode($Y),128|64|256);$Of=(JUSH=="mssql"&&$j["auto_increment"]);if($Of&&!$_POST["save"])$o=null;$Ic=(isset($_GET["select"])||$Of?array("orig"=>'original'):array())+adminer()->editFunctions($j);$Zb=driver()->enumLength($j);if($Zb){$j["type"]="enum";$j["length"]=$Zb;}$ra=" name='fields[$z]".($j["type"]=="enum"||$j["type"]=="set"?"[]":"")."'".($va?" autofocus":"");echo
driver()->unconvertFunction($j)." ";$Q=$_GET["edit"]?:$_GET["select"];if($j["type"]=="enum")echo
h($Ic[""])."<td>".adminer()->editInput($Q,$j,$ra,$Y);else{$Sc=(in_array($o,$Ic)||isset($Ic[$o]));echo(count($Ic)>1?"<select name='function[$z]'>".optionlist($Ic,$o===null||$Sc?$o:"")."</select>".on_help("event.target.value.replace(/^SQL\$/, '')",1).script("qsl('select').onchange = functionChange;",""):h(reset($Ic))).'<td>';$td=adminer()->editInput($Q,$j,$ra,$Y);if($td!="")echo$td;elseif(preg_match('~bool~',$j["type"]))echo"<input type='hidden'$ra value='0'>"."<input type='checkbox'".(preg_match('~^(1|t|true|y|yes|on)$~i',$Y)?" checked='checked'":"")."$ra value='1'>";elseif($j["type"]=="set")echo
enum_input("checkbox",$ra,$j,(is_string($Y)?explode(",",$Y):$Y));elseif(is_blob($j)&&ini_bool("file_uploads"))echo"<input type='file' name='fields-$z'>";elseif($Dd)echo"<textarea$ra cols='50' rows='12' class='jush-js'>".h($Y).'</textarea>';elseif(($Gg=preg_match('~text|lob|memo~i',$j["type"]))||preg_match("~\n~",$Y)){if($Gg&&JUSH!="sqlite")$ra
.=" cols='50' rows='12'";else{$I=min(12,substr_count($Y,"\n")+1);$ra
.=" cols='30' rows='$I'";}echo"<textarea$ra>".h($Y).'</textarea>';}else{$eh=driver()->types();$le=(!preg_match('~int~',$j["type"])&&preg_match('~^(\d+)(,(\d+))?$~',$j["length"],$y)?((preg_match("~binary~",$j["type"])?2:1)*$y[1]+($y[3]?1:0)+($y[2]&&!$j["unsigned"]?1:0)):($eh[$j["type"]]?$eh[$j["type"]]+($j["unsigned"]?0:1):0));if(JUSH=='sql'&&min_version(5.6)&&preg_match('~time~',$j["type"]))$le+=7;echo"<input".((!$Sc||$o==="")&&preg_match('~(?<!o)int(?!er)~',$j["type"])&&!preg_match('~\[\]~',$j["full_type"])?" type='number'":"")." value='".h($Y)."'".($le?" data-maxlength='$le'":"").(preg_match('~char|binary~',$j["type"])&&$le>20?" size='".($le>99?60:40)."'":"")."$ra>";}echo
adminer()->editHint($Q,$j,$Y);$uc=0;foreach($Ic
as$u=>$X){if($u===""||!$X)break;$uc++;}if($uc&&count($Ic)>1)echo
script("qsl('td').oninput = partial(skipOriginal, $uc);");}}function
process_input(array$j){$r=bracket_escape($j["field"]);$o=idx($_POST["function"],$r);if($o=="orig")return(preg_match('~^CURRENT_TIMESTAMP~i',$j["on_update"])?idf_escape($j["field"]):false);if($o=="NULL")return"NULL";if(is_blob($j)&&ini_bool("file_uploads")){$qc=get_file("fields-$r");if(!is_string($qc))return
false;return
driver()->quoteBinary($qc);}$Y=idx($_POST["fields"],$r);if($Y===null)return
false;if($j["type"]=="enum"||driver()->enumLength($j)){$Y=idx($Y,0);if($Y=="orig"||!$Y)return
false;if($Y=="null")return"NULL";$Y=substr($Y,4);}if($j["auto_increment"]&&$Y=="")return
null;if($j["type"]=="set")$Y=implode(",",(array)$Y);if($o=="json"){$o="";$Y=json_decode($Y,true);if(!is_array($Y))return
false;return$Y;}return
adminer()->processInput($j,$Y,$o);}function
search_tables(){$_GET["where"][0]["val"]=$_POST["query"];$cg="<ul>\n";foreach(table_status('',true)as$Q=>$R){$z=adminer()->tableName($R);if(isset($R["Engine"])&&$z!=""&&(!$_POST["tables"]||in_array($Q,$_POST["tables"]))){$F=connection()->query("SELECT".limit("1 FROM ".table($Q)," WHERE ".implode(" AND ",adminer()->selectSearchProcess(fields($Q),array())),1));if(!$F||$F->fetch_row()){$_f="<a href='".h(ME."select=".urlencode($Q)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."'>$z</a>";echo"$cg<li>".($F?$_f:"<p class='error'>$_f: ".error())."\n";$cg="";}}}echo($cg?"<p class='message'>".'No tables.':"</ul>")."\n";}function
on_help($Za,$lg=0){return
script("mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $Za, $lg) }, onmouseout: helpMouseout});","");}function
edit_form($Q,array$k,$H,$U,$i=''){$Cg=adminer()->tableName(table_status1($Q,true));page_header(($U?'Edit':'Insert'),$i,array("select"=>array($Q,$Cg)),$Cg);adminer()->editRowPrint($Q,$k,$H,$U);if($H===false){echo"<p class='error'>".'No rows.'."\n";return;}echo"<form action='' method='post' enctype='multipart/form-data' id='form'>\n";$Rb=false;if(!$k)echo"<p class='error'>".'You have no privileges to update this table.'."\n";else{echo"<table class='layout nowrap'>".script("qsl('table').onkeydown = editingKeydown;");$va=!$_POST;foreach($k
as$z=>$j){echo"<tr><th>".adminer()->fieldName($j);$h=idx($_GET["set"],bracket_escape($z));if($h===null){$h=$j["default"];if($j["type"]=="bit"&&preg_match("~^b'([01]*)'\$~",$h,$Lf))$h=$Lf[1];if(JUSH=="sql"&&preg_match('~binary~',$j["type"]))$h=bin2hex($h);}$Y=($H!==null?($H[$z]!=""&&JUSH=="sql"&&preg_match("~enum|set~",$j["type"])&&is_array($H[$z])?implode(",",$H[$z]):(is_bool($H[$z])?+$H[$z]:$H[$z])):(!$U&&$j["auto_increment"]?"":(isset($_GET["select"])?false:$h)));if(!$_POST["save"]&&is_string($Y))$Y=adminer()->editVal($Y,$j);if(($U&&!isset($j["privileges"]["update"]))||$j["generated"])echo"<td class='function'><td>".select_value($Y,'',$j,null);else{$Rb=true;$o=($_POST["save"]?idx($_POST["function"],$z,""):($U&&preg_match('~^CURRENT_TIMESTAMP~i',$j["on_update"])?"now":($Y===false?null:($Y!==null?'':'NULL'))));if(!$_POST&&!$U&&$Y==$j["default"]&&preg_match('~^[\w.]+\(~',$Y))$o="SQL";if(preg_match("~time~",$j["type"])&&preg_match('~^CURRENT_TIMESTAMP~i',$Y)){$Y="";$o="now";}if($j["type"]=="uuid"&&$Y=="uuid()"){$Y="";$o="uuid";}if($va!==false)$va=($j["auto_increment"]||$o=="now"||$o=="uuid"?null:true);input($j,$Y,$o,$va);if($va)$va=false;}}if(!support("table")&&!fields($Q))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($Rb){echo"<input type='submit' value='".'Save'."'>\n";if(!isset($_GET["select"]))echo"<input type='submit' name='insert' value='".($U?'Save and continue edit':'Save and insert next')."' title='Ctrl+Shift+Enter'>\n",($U?script("qsl('input').onclick = function () { return !ajaxForm(this.form, '".'Saving'."…', this); };"):"");}echo($U?"<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($P,$v=80,$xg=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$v).")($)?)u",$P,$y))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$v).")($)?)",$P,$y);return
h($y[1]).$xg.(isset($y[2])?"":"<i>…</i>");}function
icon($ed,$z,$dd,$Ng){return"<button type='submit' ".($z?"name='$z'":"draggable='true'")." title='".h($Ng)."' class='icon icon-$ed".($z?"":" jsonly")."'><span>$dd</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,$sc);$_POST=remove_slashes($_POST,$sc);$_COOKIE=remove_slashes($_COOKIE,$sc);}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($r,$Ie=null){$ma=func_get_args();$ma[0]=$r;return
call_user_func_array('Adminer\lang_format',$ma);}function
lang_format($Vg,$Ie=null){if(is_array($Vg)){$D=($Ie==1?0:1);$Vg=$Vg[$D];}$Vg=str_replace("'",'’',$Vg);$ma=func_get_args();array_shift($ma);$Ec=str_replace("%d","%s",$Vg);if($Ec!=$Vg)$ma[0]=format_number($Ie);return
vsprintf($Ec,$ma);}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($L,$V,$B);abstract
function
quote($P);abstract
function
select_db($vb);abstract
function
query($E,$fh=false);function
multi_query($E){return$this->multi=$this->query($E);}function
store_result(){return$this->multi;}function
next_result(){return
false;}}if(extension_loaded('pdo')){abstract
class
PdoDb
extends
SqlDb{protected$pdo;function
dsn($Ob,$V,$B,array$Ue=array()){$Ue[\PDO::ATTR_ERRMODE]=\PDO::ERRMODE_SILENT;$Ue[\PDO::ATTR_STATEMENT_CLASS]=array('Adminer\PdoResult');try{$this->pdo=new
\PDO($Ob,$V,$B,$Ue);}catch(\Exception$ec){return$ec->getMessage();}$this->server_info=@$this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);return'';}function
quote($P){return$this->pdo->quote($P);}function
query($E,$fh=false){$F=$this->pdo->query($E);$this->error="";if(!$F){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error='Unknown error.';return
false;}$this->store_result($F);return$F;}function
store_result($F=null){if(!$F){$F=$this->multi;if(!$F)return
false;}if($F->columnCount()){$F->num_rows=$F->rowCount();return$F;}$this->affected_rows=$F->rowCount();return
true;}function
next_result(){$F=$this->multi;if(!is_object($F))return
false;$F->_offset=0;return@$F->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($ve){$G=$this->fetch($ve);return($G?array_map(array($this,'unresource'),$G):$G);}private
function
unresource($X){return(is_resource($X)?stream_get_contents($X):$X);}function
fetch_field(){$H=(object)$this->getColumnMeta($this->_offset++);$T=$H->pdo_type;$H->type=($T==\PDO::PARAM_INT?0:15);$H->charsetnr=($T==\PDO::PARAM_LOB||(isset($H->flags)&&in_array("blob",(array)$H->flags))?63:0);return$H;}function
seek($_){for($p=0;$p<$_;$p++)$this->fetch();}}}function
add_driver($q,$z){SqlDriver::$drivers[$q]=$z;}function
get_driver($q){return
SqlDriver::$drivers[$q];}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($L,$V,$B){$e=new
Db;return($e->attach($L,$V,$B)?:$e);}function
__construct(Db$e){$this->conn=$e;}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$j){}function
unconvertFunction(array$j){}function
select($Q,array$J,array$Z,array$Lc,array$We=array(),$w=1,$A=0,$_f=false){$_d=(count($Lc)<count($J));$E=adminer()->selectQueryBuild($J,$Z,$Lc,$We,$w,$A);if(!$E)$E="SELECT".limit(($_GET["page"]!="last"&&$w&&$Lc&&$_d&&JUSH=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$J)."\nFROM ".table($Q),($Z?"\nWHERE ".implode(" AND ",$Z):"").($Lc&&$_d?"\nGROUP BY ".implode(", ",$Lc):"").($We?"\nORDER BY ".implode(", ",$We):""),$w,($A?$w*$A:0),"\n");$tg=microtime(true);$G=$this->conn->query($E);if($_f)echo
adminer()->selectQuery($E,$tg,!$G);return$G;}function
delete($Q,$Ff,$w=0){$E="FROM ".table($Q);return
queries("DELETE".($w?limit1($Q,$E,$Ff):" $E$Ff"));}function
update($Q,array$M,$Ff,$w=0,$K="\n"){$yh=array();foreach($M
as$u=>$X)$yh[]="$u = $X";$E=table($Q)." SET$K".implode(",$K",$yh);return
queries("UPDATE".($w?limit1($Q,$E,$Ff,$K):" $E$Ff"));}function
insert($Q,array$M){return
queries("INSERT INTO ".table($Q).($M?" (".implode(", ",array_keys($M)).")\nVALUES (".implode(", ",$M).")":" DEFAULT VALUES").$this->insertReturning($Q));}function
insertReturning($Q){return"";}function
insertUpdate($Q,array$I,array$yf){return
false;}function
begin(){return
queries("BEGIN");}function
commit(){return
queries("COMMIT");}function
rollback(){return
queries("ROLLBACK");}function
slowQuery($E,$Lg){}function
convertSearch($r,array$X,array$j){return$r;}function
value($X,array$j){return(method_exists($this->conn,'value')?$this->conn->value($X,$j):$X);}function
quoteBinary($Uf){return
q($Uf);}function
warnings(){}function
tableHelp($z,$Cd=false){}function
inheritsFrom($Q){return
array();}function
inheritedTables($Q){return
array();}function
partitionsInfo($Q){return
array();}function
hasCStyleEscapes(){return
false;}function
engines(){return
array();}function
supportsIndex(array$R){return!is_view($R);}function
indexAlgorithms(array$Ag){return
array();}function
checkConstraints($Q){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($Q):"")."
WHERE c.CONSTRAINT_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
AND t.TABLE_NAME = ".q($Q).(JUSH=="pgsql"?"
AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'":""),$this->conn);}function
allFields(){$G=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$H){$H["null"]=($H["nullable"]=="YES");$G[$H["tab"]][]=$H;}}return$G;}}add_driver("sqlite","SQLite");if(isset($_GET["sqlite"])){define('Adminer\DRIVER',"sqlite");if(class_exists("SQLite3")&&$_GET["ext"]!="pdo"){abstract
class
SqliteDb
extends
SqlDb{var$extension="SQLite3";private$link;function
attach($l,$V,$B){$this->link=new
\SQLite3($l);$_h=$this->link->version();$this->server_info=$_h["versionString"];return'';}function
query($E,$fh=false){$F=@$this->link->query($E);$this->error="";if(!$F){$this->errno=$this->link->lastErrorCode();$this->error=$this->link->lastErrorMsg();return
false;}elseif($F->numColumns())return
new
Result($F);$this->affected_rows=$this->link->changes();return
true;}function
quote($P){return(is_utf8($P)?"'".$this->link->escapeString($P)."'":"x'".first(unpack('H*',$P))."'");}}class
Result{var$num_rows;private$result,$offset=0;function
__construct($F){$this->result=$F;}function
fetch_assoc(){return$this->result->fetchArray(SQLITE3_ASSOC);}function
fetch_row(){return$this->result->fetchArray(SQLITE3_NUM);}function
fetch_field(){$c=$this->offset++;$T=$this->result->columnType($c);return(object)array("name"=>$this->result->columnName($c),"type"=>($T==SQLITE3_TEXT?15:0),"charsetnr"=>($T==SQLITE3_BLOB?63:0),);}}}elseif(extension_loaded("pdo_sqlite")){abstract
class
SqliteDb
extends
PdoDb{var$extension="PDO_SQLite";function
attach($l,$V,$B){return$this->dsn(DRIVER.":$l","","");}}}if(class_exists('Adminer\SqliteDb')){class
Db
extends
SqliteDb{function
attach($l,$V,$B){parent::attach($l,$V,$B);$this->query("PRAGMA foreign_keys = 1");$this->query("PRAGMA busy_timeout = 500");return'';}function
select_db($l){if(is_readable($l)&&$this->query("ATTACH ".$this->quote(preg_match("~(^[/\\\\]|:)~",$l)?$l:dirname($_SERVER["SCRIPT_FILENAME"])."/$l")." AS a"))return!self::attach($l,'','');return
false;}}}class
Driver
extends
SqlDriver{static$extensions=array("SQLite3","PDO_SQLite");static$jush="sqlite";protected$types=array(array("integer"=>0,"real"=>0,"numeric"=>0,"text"=>0,"blob"=>0));var$insertFunctions=array();var$editFunctions=array("integer|real|numeric"=>"+/-","text"=>"||",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("hex","length","lower","round","unixepoch","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");static
function
connect($L,$V,$B){if($B!="")return'Database does not support password.';return
parent::connect(":memory:","","");}function
__construct(Db$e){parent::__construct($e);if(min_version(3.31,0,$e))$this->generated=array("STORED","VIRTUAL");if(min_version(3.37,0,$e))$this->types[0]["any"]=0;}function
structuredTypes(){return
array_keys($this->types[0]);}function
engines(){$G=array("table");if(min_version("3.8.2")){if(min_version(3.37)){$G[]="STRICT";$G[]="STRICT, WITHOUT ROWID";}$G[]="WITHOUT ROWID";}return$G;}function
insertUpdate($Q,array$I,array$yf){$yh=array();foreach($I
as$M)$yh[]="(".implode(", ",$M).")";return
queries("REPLACE INTO ".table($Q)." (".implode(", ",array_keys(reset($I))).") VALUES\n".implode(",\n",$yh));}function
tableHelp($z,$Cd=false){if($z=="sqlite_sequence")return"fileformat2.html#seqtab";if(preg_match('~^sqlite(_temp)?_(master|schema)$~',$z))return"schematab.html";}function
checkConstraints($Q){preg_match_all('~ CHECK *(\( *(((?>[^()]*[^() ])|(?1))*) *\))~',get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($Q),0,$this->conn),$ee);return
array_combine($ee[2],$ee[2]);}function
allFields(){$G=array();foreach(tables_list()as$Q=>$T){foreach(fields($Q)as$j)$G[$Q][]=$j;}return$G;}}function
idf_escape($r){return'"'.str_replace('"','""',$r).'"';}function
table($r){return
idf_escape($r);}function
get_databases($zc){return
array();}function
limit($E,$Z,$w,$_=0,$K=" "){return" $E$Z".($w?$K."LIMIT $w".($_?" OFFSET $_":""):"");}function
limit1($Q,$E,$Z,$K="\n"){return(preg_match('~^INTO~',$E)||get_val("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')")?limit($E,$Z,1,0,$K):" $E WHERE rowid = (SELECT rowid FROM ".table($Q).$Z.$K."LIMIT 1)");}function
db_collation($g,$Wa){return
get_val("PRAGMA encoding");}function
logged_user(){return
get_current_user();}function
tables_list(){return
get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name");}function
count_tables($wb){return
array();}function
table_status($z="",$mc=false){$G=array();foreach(get_rows("SELECT name AS Name, type AS Engine, sql, 'rowid' AS Oid, '' AS Auto_increment FROM sqlite_master WHERE type IN ('table', 'view') ".($z!=""?"AND name = ".q($z):"ORDER BY (name = 'sqlite_sequence'), name"))as$H){if($H["Engine"]=="table"){$xg=preg_replace('~.*\)~s','',$H["sql"]);$H["Engine"]=implode(", ",array_filter(array((preg_match('~\bSTRICT\b~i',$xg)?"STRICT":0),(preg_match('~\bWITHOUT\s+ROWID\b~i',$xg)?"WITHOUT ROWID":0),)))?:"table";}unset($H["sql"]);if(!$mc)$H["Rows"]=get_val("SELECT COUNT(*) FROM ".idf_escape($H["Name"]));$G[$H["Name"]]=$H;}if(!$mc){foreach(get_rows("SELECT * FROM sqlite_sequence".($z!=""?" WHERE name = ".q($z):""),null,"")as$H)$G[$H["name"]]["Auto_increment"]=$H["seq"];}return$G;}function
is_view($R){return$R["Engine"]=="view";}function
fk_support($R){return!get_val("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");}function
fields($Q){$G=array();$qg=get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($Q));$Bf=array("select"=>1,"where"=>1,"order"=>1);if(!preg_match('~^sqlite(_temp)?_(master|schema)$~',$Q))$Bf+=array("insert"=>1,"update"=>1);foreach(get_rows("PRAGMA table_".(min_version(3.31)?"x":"")."info(".table($Q).")")as$H){$z=$H["name"];$T=strtolower($H["type"]);$h=$H["dflt_value"];$G[$z]=array("field"=>$z,"type"=>(preg_match('~int~i',$T)?"integer":(preg_match('~char|clob|text~i',$T)?"text":(preg_match('~blob~i',$T)?"blob":(preg_match('~real|floa|doub~i',$T)?"real":(preg_match('~any~i',$T)?"any":"numeric"))))),"full_type"=>$T,"default"=>(preg_match("~^'(.*)'$~",$h,$y)?str_replace("''","'",$y[1]):($h=="NULL"?null:$h)),"null"=>!$H["notnull"],"privileges"=>$Bf,"primary"=>$H["pk"],);if($H["pk"]&&preg_match('~\bAUTOINCREMENT\b~i',$qg))$G[$z]["auto_increment"]=true;}$r='(("[^"]*+")+|[a-z0-9_]+)';preg_match_all('~'.$r.'\s+text\s+COLLATE\s+(\'[^\']+\'|\S+)~i',$qg,$ee,PREG_SET_ORDER);foreach($ee
as$y){$z=str_replace('""','"',preg_replace('~^"|"$~','',$y[1]));if($G[$z])$G[$z]["collation"]=trim($y[3],"'");}preg_match_all('~'.$r.'\s.*GENERATED ALWAYS AS \((.+)\) (STORED|VIRTUAL)~i',$qg,$ee,PREG_SET_ORDER);foreach($ee
as$y){$z=str_replace('""','"',preg_replace('~^"|"$~','',$y[1]));$G[$z]["default"]=$y[3];$G[$z]["generated"]=strtoupper($y[4]);}return$G;}function
indexes($Q,$f=null){$f=connection($f);$G=array();$qg=get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($Q),0,$f);if(preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i',$qg,$y)){$G[""]=array("type"=>"PRIMARY","columns"=>array(),"lengths"=>array(),"descs"=>array());preg_match_all('~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i',$y[1],$ee,PREG_SET_ORDER);foreach($ee
as$y){$G[""]["columns"][]=idf_unescape($y[2]).$y[4];$G[""]["descs"][]=(preg_match('~DESC~i',$y[5])?'1':null);}}if(!$G){foreach(fields($Q)as$z=>$j){if($j["primary"])$G[""]=array("type"=>"PRIMARY","columns"=>array($z),"lengths"=>array(),"descs"=>array(null));}}$sg=get_key_vals("SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = ".q($Q),$f);foreach(get_rows("PRAGMA index_list(".table($Q).")",$f)as$H){$z=$H["name"];$s=array("type"=>($H["unique"]?"UNIQUE":"INDEX"));$s["lengths"]=array();$s["descs"]=array();foreach(get_rows("PRAGMA index_info(".idf_escape($z).")",$f)as$Tf){$s["columns"][]=$Tf["name"];$s["descs"][]=null;}if(preg_match('~^CREATE( UNIQUE)? INDEX '.preg_quote(idf_escape($z).' ON '.idf_escape($Q),'~').' \((.*)\)$~i',$sg[$z],$Lf)){preg_match_all('/("[^"]*+")+( DESC)?/',$Lf[2],$ee);foreach($ee[2]as$u=>$X){if($X)$s["descs"][$u]='1';}}if(!$G[""]||$s["type"]!="UNIQUE"||$s["columns"]!=$G[""]["columns"]||$s["descs"]!=$G[""]["descs"]||!preg_match("~^sqlite_~",$z))$G[$z]=$s;}return$G;}function
foreign_keys($Q){$G=array();foreach(get_rows("PRAGMA foreign_key_list(".table($Q).")")as$H){$m=&$G[$H["id"]];if(!$m)$m=$H;$m["source"][]=$H["from"];$m["target"][]=$H["to"];}return$G;}function
view($z){return
array("select"=>preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\s+~iU','',get_val("SELECT sql FROM sqlite_master WHERE type = 'view' AND name = ".q($z))));}function
collations(){return(isset($_GET["create"])?get_vals("PRAGMA collation_list",1):array());}function
information_schema($g){return
false;}function
error(){return
h(connection()->error);}function
check_sqlite_name($z){$jc="db|sdb|sqlite";if(!preg_match("~^[^\\0]*\\.($jc)\$~",$z)){connection()->error=sprintf('Please use one of the extensions %s.',str_replace("|",", ",$jc));return
false;}return
true;}function
create_database($g,$Va){if(file_exists($g)){connection()->error='File exists.';return
false;}if(!check_sqlite_name($g))return
false;try{$x=new
Db();$x->attach($g,'','');}catch(\Exception$ec){connection()->error=$ec->getMessage();return
false;}$x->query('PRAGMA encoding = "UTF-8"');$x->query('CREATE TABLE adminer (i)');$x->query('DROP TABLE adminer');return
true;}function
drop_databases($wb){connection()->attach(":memory:",'','');foreach($wb
as$g){if(!check_sqlite_name($g))return
false;if(!@unlink($g)){connection()->error='File exists.';return
false;}}return
true;}function
rename_database($z,$Va){if(!check_sqlite_name($z))return
false;connection()->attach(":memory:",'','');connection()->error='File exists.';return@rename(DB,$z);}function
auto_increment(){return" PRIMARY KEY AUTOINCREMENT";}function
alter_table($Q,$z,$k,$Ac,$ab,$Wb,$Va,$ta,$mf){$rh=($Q==""||$Ac||$Wb);foreach($k
as$j){if($j[0]!=""||!$j[1]||$j[2]){$rh=true;break;}}$b=array();$cf=array();foreach($k
as$j){if($j[1]){$b[]=($rh?$j[1]:"ADD ".implode($j[1]));if($j[0]!="")$cf[$j[0]]=$j[1][0];}}if(!$rh){foreach($b
as$X){if(!queries("ALTER TABLE ".table($Q)." $X"))return
false;}if($Q!=$z&&!queries("ALTER TABLE ".table($Q)." RENAME TO ".table($z)))return
false;}elseif(!recreate_table($Q,$z,$b,$cf,$Ac,$ta,array(),"","",$Wb))return
false;if($ta){queries("BEGIN");queries("UPDATE sqlite_sequence SET seq = $ta WHERE name = ".q($z));if(!connection()->affected_rows)queries("INSERT INTO sqlite_sequence (name, seq) VALUES (".q($z).", $ta)");queries("COMMIT");}return
true;}function
recreate_table($Q,$z,array$k,array$cf,array$Ac,$ta="",$t=array(),$Mb="",$da="",$Wb=""){if($Q!=""){if(!$k){foreach(fields($Q)as$u=>$j){if($t)$j["auto_increment"]=0;$k[]=process_field($j,$j);$cf[$u]=idf_escape($u);}}$zf=false;foreach($k
as$j){if($j[6])$zf=true;}$Nb=array();foreach($t
as$u=>$X){if($X[2]=="DROP"){$Nb[$X[1]]=true;unset($t[$u]);}}foreach(indexes($Q)as$Gd=>$s){$d=array();foreach($s["columns"]as$u=>$c){if(!$cf[$c])continue
2;$d[]=$cf[$c].($s["descs"][$u]?" DESC":"");}if(!$Nb[$Gd]){if($s["type"]!="PRIMARY"||!$zf)$t[]=array($s["type"],$Gd,$d);}}foreach($t
as$u=>$X){if($X[0]=="PRIMARY"){unset($t[$u]);$Ac[]="  PRIMARY KEY (".implode(", ",$X[2]).")";}}foreach(foreign_keys($Q)as$Gd=>$m){foreach($m["source"]as$u=>$c){if(!$cf[$c])continue
2;$m["source"][$u]=idf_unescape($cf[$c]);}if(!isset($Ac[" $Gd"]))$Ac[]=" ".format_foreign_key($m);}queries("BEGIN");}$Ka=array();foreach($k
as$j){if(preg_match('~GENERATED~',$j[3]))unset($cf[array_search($j[0],$cf)]);$Ka[]="  ".implode($j);}$Ka=array_merge($Ka,array_filter($Ac));foreach(driver()->checkConstraints($Q)as$Ma){if($Ma!=$Mb)$Ka[]="  CHECK ($Ma)";}if($da)$Ka[]="  CHECK ($da)";$Fg=($Q!=""&&$Q==$z?"adminer_$z":$z);if(!$Wb&&$Q!="")$Wb=idx(table_status1($Q),"Engine");if(!queries("CREATE TABLE ".table($Fg)." (\n".implode(",\n",$Ka)."\n)".($Wb!="table"&&in_array($Wb,driver()->engines())?" $Wb":"")))return
false;if($Q!=""){if($cf&&!queries("INSERT INTO ".table($Fg)." (".implode(", ",$cf).") SELECT ".implode(", ",array_map('Adminer\idf_escape',array_keys($cf)))." FROM ".table($Q)))return
false;$ch=array();foreach(triggers($Q)as$ah=>$Mg){$Zg=trigger($ah,$Q);$ch[]="CREATE TRIGGER ".idf_escape($ah)." ".implode(" ",$Mg)." ON ".table($z)."\n$Zg[Statement]";}$ta=$ta?"":get_val("SELECT seq FROM sqlite_sequence WHERE name = ".q($Q));if(!queries("DROP TABLE ".table($Q))||($Q==$z&&!queries("ALTER TABLE ".table($Fg)." RENAME TO ".table($z)))||!alter_indexes($z,$t))return
false;if($ta)queries("UPDATE sqlite_sequence SET seq = $ta WHERE name = ".q($z));foreach($ch
as$Zg){if(!queries($Zg))return
false;}queries("COMMIT");}return
true;}function
index_sql($Q,$T,$z,$d){return"CREATE $T ".($T!="INDEX"?"INDEX ":"").idf_escape($z!=""?$z:uniqid($Q."_"))." ON ".table($Q)." $d";}function
alter_indexes($Q,$b){foreach($b
as$yf){if($yf[0]=="PRIMARY")return
recreate_table($Q,$Q,array(),array(),array(),"",$b);}foreach(array_reverse($b)as$X){if(!queries($X[2]=="DROP"?"DROP INDEX ".idf_escape($X[1]):index_sql($Q,$X[0],$X[1],"(".implode(", ",$X[2]).")")))return
false;}return
true;}function
truncate_tables($S){return
apply_queries("DELETE FROM",$S);}function
drop_views($Bh){return
apply_queries("DROP VIEW",$Bh);}function
drop_tables($S){return
apply_queries("DROP TABLE",$S);}function
move_tables($S,$Bh,$Eg){return
false;}function
trigger($z,$Q){if($z=="")return
array("Statement"=>"BEGIN\n\t;\nEND");$r='(?:[^`"\s]+|`[^`]*`|"[^"]*")+';$bh=trigger_options();preg_match("~^CREATE\\s+TRIGGER\\s*$r\\s*(".implode("|",$bh["Timing"]).")\\s+([a-z]+)(?:\\s+OF\\s+($r))?\\s+ON\\s*$r\\s*(?:FOR\\s+EACH\\s+ROW\\s)?(.*)~is",get_val("SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = ".q($z)),$y);$Je=$y[3];return
array("Timing"=>strtoupper($y[1]),"Event"=>strtoupper($y[2]).($Je?" OF":""),"Of"=>idf_unescape($Je),"Trigger"=>$z,"Statement"=>$y[4],);}function
triggers($Q){$G=array();$bh=trigger_options();foreach(get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = ".q($Q))as$H){preg_match('~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*('.implode("|",$bh["Timing"]).')\s*(.*?)\s+ON\b~i',$H["sql"],$y);$G[$H["name"]]=array($y[1],$y[2]);}return$G;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
begin(){return
queries("BEGIN");}function
last_id($F){return
get_val("SELECT LAST_INSERT_ROWID()");}function
explain($e,$E){return$e->query("EXPLAIN QUERY PLAN $E");}function
found_rows($R,$Z){}function
types(){return
array();}function
create_sql($Q,$ta,$vg){$G=get_val("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = ".q($Q));foreach(indexes($Q)as$z=>$s){if($z=='')continue;$G
.=";\n\n".index_sql($Q,$s['type'],$z,"(".implode(", ",array_map('Adminer\idf_escape',$s['columns'])).")");}return$G;}function
truncate_sql($Q){return"DELETE FROM ".table($Q);}function
use_sql($vb,$vg=""){}function
trigger_sql($Q){return
implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = ".q($Q)));}function
show_variables(){$G=array();foreach(get_rows("PRAGMA pragma_list")as$H){$z=$H["name"];if($z!="pragma_list"&&$z!="compile_options"){$G[$z]=array($z,'');foreach(get_rows("PRAGMA $z")as$H)$G[$z][1].=implode(", ",$H)."\n";}}return$G;}function
show_status(){$G=array();foreach(get_vals("PRAGMA compile_options")as$Te)$G[]=explode("=",$Te,2)+array('','');return$G;}function
convert_field($j){}function
unconvert_field($j,$G){return$G;}function
support($nc){return
preg_match('~^(check|columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~',$nc);}}add_driver("pgsql","PostgreSQL");if(isset($_GET["pgsql"])){define('Adminer\DRIVER',"pgsql");if(extension_loaded("pgsql")&&$_GET["ext"]!="pdo"){class
PgsqlDb
extends
SqlDb{var$extension="PgSQL";var$timeout=0;private$link,$string,$database=true;function
_error($bc,$i){if(ini_bool("html_errors"))$i=html_entity_decode(strip_tags($i));$i=preg_replace('~^[^:]*: ~','',$i);$this->error=$i;}function
attach($L,$V,$B){$g=adminer()->database();set_error_handler(array($this,'_error'));list($bd,$C)=host_port($L);$this->string="host='$bd'".($C?" port=$C":"")." user='".addcslashes($V,"'\\")."' password='".addcslashes($B,"'\\")."'";$N=adminer()->connectSsl();if(isset($N["mode"]))$this->string
.=" sslmode=$N[mode]";$this->link=@pg_connect("$this->string dbname='".($g!=""?addcslashes($g,"'\\"):"postgres")."'",PGSQL_CONNECT_FORCE_NEW);if(!$this->link&&$g!=""){$this->database=false;$this->link=@pg_connect("$this->string dbname='postgres'",PGSQL_CONNECT_FORCE_NEW);}restore_error_handler();if($this->link)pg_set_client_encoding($this->link,"UTF8");return($this->link?'':$this->error);}function
quote($P){return(function_exists('pg_escape_literal')?pg_escape_literal($this->link,$P):"'".pg_escape_string($this->link,$P)."'");}function
value($X,array$j){return($j["type"]=="bytea"&&$X!==null?pg_unescape_bytea($X):$X);}function
select_db($vb){if($vb==adminer()->database())return$this->database;$G=@pg_connect("$this->string dbname='".addcslashes($vb,"'\\")."'",PGSQL_CONNECT_FORCE_NEW);if($G)$this->link=$G;return$G;}function
close(){$this->link=@pg_connect("$this->string dbname='postgres'");}function
query($E,$fh=false){$F=@pg_query($this->link,$E);$this->error="";if(!$F){$this->error=pg_last_error($this->link);$G=false;}elseif(!pg_num_fields($F)){$this->affected_rows=pg_affected_rows($F);$G=true;}else$G=new
Result($F);if($this->timeout){$this->timeout=0;$this->query("RESET statement_timeout");}return$G;}function
warnings(){if(PHP_VERSION_ID>=70100){$G=implode("\n",pg_last_notice($this->link,2));pg_last_notice($this->link,3);}else$G=pg_last_notice($this->link);return
nl_br(h($G));}function
copyFrom($Q,array$I){$this->error='';set_error_handler(function($bc,$i){$this->error=(ini_bool('html_errors')?html_entity_decode($i):$i);return
true;});$G=pg_copy_from($this->link,$Q,$I);restore_error_handler();return$G;}}class
Result{var$num_rows;private$result,$offset=0;function
__construct($F){$this->result=$F;$this->num_rows=pg_num_rows($F);}function
fetch_assoc(){return
pg_fetch_assoc($this->result);}function
fetch_row(){return
pg_fetch_row($this->result);}function
fetch_field(){$c=$this->offset++;$G=new
\stdClass;$G->orgtable=pg_field_table($this->result,$c);$G->name=pg_field_name($this->result,$c);$T=pg_field_type($this->result,$c);$G->type=(preg_match(number_type(),$T)?0:15);$G->charsetnr=($T=="bytea"?63:0);return$G;}}}elseif(extension_loaded("pdo_pgsql")){class
PgsqlDb
extends
PdoDb{var$extension="PDO_PgSQL";var$timeout=0;function
attach($L,$V,$B){$g=adminer()->database();list($bd,$C)=host_port($L);$Ob="pgsql:host='$bd'".($C?" port=$C":"")." client_encoding=utf8 dbname='".($g!=""?addcslashes($g,"'\\"):"postgres")."'";$N=adminer()->connectSsl();if(isset($N["mode"]))$Ob
.=" sslmode=$N[mode]";return$this->dsn($Ob,$V,$B);}function
select_db($vb){return(adminer()->database()==$vb);}function
query($E,$fh=false){$G=parent::query($E,$fh);if($this->timeout){$this->timeout=0;parent::query("RESET statement_timeout");}return$G;}function
warnings(){}function
copyFrom($Q,array$I){$G=$this->pdo->pgsqlCopyFromArray($Q,$I);$this->error=idx($this->pdo->errorInfo(),2)?:'';return$G;}function
close(){}}}if(class_exists('Adminer\PgsqlDb')){class
Db
extends
PgsqlDb{function
multi_query($E){if(preg_match('~\bCOPY\s+(.+?)\s+FROM\s+stdin;\n?(.*)\n\\\\\.$~is',str_replace("\r\n","\n",$E),$y)){$I=explode("\n",$y[2]);$this->affected_rows=count($I);return$this->copyFrom($y[1],$I);}return
parent::multi_query($E);}}}class
Driver
extends
SqlDriver{static$extensions=array("PgSQL","PDO_PgSQL");static$jush="pgsql";var$operators=array("=","<",">","<=",">=","!=","~","~*","!~","LIKE","LIKE %%","ILIKE","ILIKE %%","IN","IS NULL","NOT LIKE","NOT ILIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("char_length","lower","round","to_hex","to_timestamp","upper");var$grouping=array("avg","count","count distinct","max","min","sum");var$nsOid="(SELECT oid FROM pg_namespace WHERE nspname = current_schema())";static
function
connect($L,$V,$B){$e=parent::connect($L,$V,$B);if(is_string($e))return$e;$_h=get_val("SELECT version()",0,$e);$e->flavor=(preg_match('~CockroachDB~',$_h)?'cockroach':'');$e->server_info=preg_replace('~^\D*([\d.]+[-\w]*).*~','\1',$_h);if(min_version(9,0,$e))$e->query("SET application_name = 'Adminer'");if($e->flavor=='cockroach')add_driver(DRIVER,"CockroachDB");return$e;}function
__construct(Db$e){parent::__construct($e);$this->types=array('Numbers'=>array("smallint"=>5,"integer"=>10,"bigint"=>19,"boolean"=>1,"numeric"=>0,"real"=>7,"double precision"=>16,"money"=>20),'Date and time'=>array("date"=>13,"time"=>17,"timestamp"=>20,"timestamptz"=>21,"interval"=>0),'Strings'=>array("character"=>0,"character varying"=>0,"text"=>0,"tsquery"=>0,"tsvector"=>0,"uuid"=>0,"xml"=>0),'Binary'=>array("bit"=>0,"bit varying"=>0,"bytea"=>0),'Network'=>array("cidr"=>43,"inet"=>43,"macaddr"=>17,"macaddr8"=>23,"txid_snapshot"=>0),'Geometry'=>array("box"=>0,"circle"=>0,"line"=>0,"lseg"=>0,"path"=>0,"point"=>0,"polygon"=>0),);if(min_version(9.2,0,$e)){$this->types['Strings']["json"]=4294967295;if(min_version(9.4,0,$e))$this->types['Strings']["jsonb"]=4294967295;}$this->insertFunctions=array("char"=>"md5","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date|time"=>"+ interval/- interval","char|text"=>"||",);if(min_version(12,0,$e)){$this->generated[]="STORED";if(min_version(18,0,$e))$this->generated[]="VIRTUAL";}$this->partitionBy=array("RANGE","LIST");if(!$e->flavor)$this->partitionBy[]="HASH";}function
enumLength(array$j){$Xb=$this->types['User types'][$j["type"]];return($Xb?type_values($Xb):"");}function
setUserTypes($eh){$this->types['User types']=array_flip($eh);}function
insertReturning($Q){$ta=array_filter(fields($Q),function($j){return$j['auto_increment'];});return(count($ta)==1?" RETURNING ".idf_escape(key($ta)):"");}function
insertUpdate($Q,array$I,array$yf){foreach($I
as$M){$U=array();$Z=array();foreach($M
as$u=>$X){$U[]="$u = $X";if(isset($yf[idf_unescape($u)]))$Z[]="$u = $X";}if(!(($Z&&queries("UPDATE ".table($Q)." SET ".implode(", ",$U)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($Q)." (".implode(", ",array_keys($M)).") VALUES (".implode(", ",$M).")")))return
false;}return
true;}function
slowQuery($E,$Lg){$this->conn->query("SET statement_timeout = ".(1000*$Lg));$this->conn->timeout=1000*$Lg;return$E;}function
convertSearch($r,array$X,array$j){$Hg="char|text";if(strpos($X["op"],"LIKE")===false)$Hg
.="|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|".number_type();return(preg_match("~$Hg~",$j["type"])?$r:"CAST($r AS text)");}function
quoteBinary($Uf){return"'\\x".bin2hex($Uf)."'";}function
warnings(){return$this->conn->warnings();}function
tableHelp($z,$Cd=false){$Td=array("information_schema"=>"infoschema","pg_catalog"=>($Cd?"view":"catalog"),);$x=$Td[$_GET["ns"]];if($x)return"$x-".str_replace("_","-",$z).".html";}function
inheritsFrom($Q){return
get_rows("SELECT relname AS table, nspname AS ns FROM pg_class JOIN pg_inherits ON inhparent = oid JOIN pg_namespace ON relnamespace = pg_namespace.oid WHERE inhrelid = ".$this->tableOid($Q)." ORDER BY 2, 1");}function
inheritedTables($Q){return
get_rows("SELECT relname AS table, nspname AS ns FROM pg_inherits JOIN pg_class ON inhrelid = oid JOIN pg_namespace ON relnamespace = pg_namespace.oid WHERE inhparent = ".$this->tableOid($Q)." ORDER BY 2, 1");}function
partitionsInfo($Q){$H=(min_version(10)?$this->conn->query("SELECT * FROM pg_partitioned_table WHERE partrelid = ".$this->tableOid($Q))->fetch_assoc():null);if($H){$ra=get_vals("SELECT attname FROM pg_attribute WHERE attrelid = $H[partrelid] AND attnum IN (".str_replace(" ",", ",$H["partattrs"]).")");$Ha=array('h'=>'HASH','l'=>'LIST','r'=>'RANGE');return
array("partition_by"=>$Ha[$H["partstrat"]],"partition"=>implode(", ",array_map('Adminer\idf_escape',$ra)),);}return
array();}function
tableOid($Q){return"(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = ".q($Q)." AND relkind IN ('r', 'm', 'v', 'f', 'p'))";}function
indexAlgorithms(array$Ag){static$G=array();if(!$G)$G=get_vals("SELECT amname FROM pg_am".(min_version(9.6)?" WHERE amtype = 'i'":"")." ORDER BY amname = '".($this->conn->flavor=='cockroach'?"prefix":"btree")."' DESC, amname");return$G;}function
supportsIndex(array$R){return$R["Engine"]!="view";}function
hasCStyleEscapes(){static$Ja;if($Ja===null)$Ja=(get_val("SHOW standard_conforming_strings",0,$this->conn)=="off");return$Ja;}}function
idf_escape($r){return'"'.str_replace('"','""',$r).'"';}function
table($r){return
idf_escape($r);}function
get_databases($zc){return
get_vals("SELECT datname FROM pg_database
WHERE datallowconn = TRUE AND has_database_privilege(datname, 'CONNECT')
ORDER BY datname");}function
limit($E,$Z,$w,$_=0,$K=" "){return" $E$Z".($w?$K."LIMIT $w".($_?" OFFSET $_":""):"");}function
limit1($Q,$E,$Z,$K="\n"){return(preg_match('~^INTO~',$E)?limit($E,$Z,1,0,$K):" $E".(is_view(table_status1($Q))?$Z:$K."WHERE ctid = (SELECT ctid FROM ".table($Q).$Z.$K."LIMIT 1)"));}function
db_collation($g,$Wa){return
get_val("SELECT datcollate FROM pg_database WHERE datname = ".q($g));}function
logged_user(){return
get_val("SELECT user");}function
tables_list(){$E="SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";if(support("materializedview"))$E
.="
UNION ALL
SELECT matviewname, 'MATERIALIZED VIEW'
FROM pg_matviews
WHERE schemaname = current_schema()";$E
.="
ORDER BY 1";return
get_key_vals($E);}function
count_tables($wb){$G=array();foreach($wb
as$g){if(connection()->select_db($g))$G[$g]=count(tables_list());}return$G;}function
table_status($z=""){static$Uc;if($Uc===null)$Uc=get_val("SELECT 'pg_table_size'::regproc");$G=array();foreach(get_rows("SELECT
	relname AS \"Name\",
	CASE relkind WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' ELSE 'table' END AS \"Engine\"".($Uc?",
	pg_table_size(c.oid) AS \"Data_length\",
	pg_indexes_size(c.oid) AS \"Index_length\"":"").",
	obj_description(c.oid, 'pg_class') AS \"Comment\",
	".(min_version(12)?"''":"CASE WHEN relhasoids THEN 'oid' ELSE '' END")." AS \"Oid\",
	reltuples AS \"Rows\",
	".(min_version(10)?"relispartition::int AS partition,":"")."
	current_schema() AS nspname
FROM pg_class c
WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
AND relnamespace = ".driver()->nsOid."
".($z!=""?"AND relname = ".q($z):"ORDER BY relname"))as$H)$G[$H["Name"]]=$H;return$G;}function
is_view($R){return
in_array($R["Engine"],array("view","materialized view"));}function
fk_support($R){return
true;}function
fields($Q){$G=array();$ja=array('timestamp without time zone'=>'timestamp','timestamp with time zone'=>'timestamptz',);foreach(get_rows("SELECT
	a.attname AS field,
	format_type(a.atttypid, a.atttypmod) AS full_type,
	pg_get_expr(d.adbin, d.adrelid) AS default,
	a.attnotnull::int,
	i.indrelid AS primary,
	col_description(a.attrelid, a.attnum) AS comment".(min_version(10)?",
	a.attidentity".(min_version(12)?",
	a.attgenerated":""):"")."
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_index i ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) AND i.indisprimary
WHERE a.attrelid = ".driver()->tableOid($Q)."
AND NOT a.attisdropped
AND a.attnum > 0
ORDER BY a.attnum")as$H){preg_match('~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~',$H["full_type"],$y);list(,$T,$v,$H["length"],$ea,$na)=$y;$H["length"].=$na;$Na=$T.$ea;if(isset($ja[$Na])){$H["type"]=$ja[$Na];$H["full_type"]=$H["type"].$v.$na;}else{$H["type"]=$T;$H["full_type"]=$H["type"].$v.$ea.$na;}if(in_array($H['attidentity'],array('a','d')))$H['default']='GENERATED '.($H['attidentity']=='d'?'BY DEFAULT':'ALWAYS').' AS IDENTITY';$H["generated"]=idx(array("s"=>"STORED","v"=>"VIRTUAL"),$H["attgenerated"],"");$H["null"]=!$H["attnotnull"];$H["auto_increment"]=$H['attidentity']||preg_match('~^nextval\(~i',$H["default"])||preg_match('~^unique_rowid\(~',$H["default"]);$H["privileges"]=array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1);if(!$H['generated']&&preg_match('~(.+)::[^,)]+(.*)~',$H["default"],$y))$H["default"]=($y[1]=="NULL"?null:idf_unescape($y[1]).$y[2]);$G[$H["field"]]=$H;}return$G;}function
indexes($Q,$f=null){$f=connection($f);$G=array();$Dg=driver()->tableOid($Q);$d=get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $Dg AND attnum > 0",$f);foreach(get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, amname, pg_get_expr(indpred, indrelid, true) AS partial, pg_get_expr(indexprs, indrelid) AS indexpr
FROM pg_index
JOIN pg_class ON indexrelid = oid
JOIN pg_am ON pg_am.oid = pg_class.relam
WHERE indrelid = $Dg
ORDER BY indisprimary DESC, indisunique DESC",$f)as$H){$Mf=$H["relname"];$G[$Mf]["type"]=($H["indisprimary"]?"PRIMARY":($H["indisunique"]?"UNIQUE":"INDEX"));$G[$Mf]["columns"]=array();$G[$Mf]["descs"]=array();$G[$Mf]["algorithm"]=$H["amname"];$G[$Mf]["partial"]=$H["partial"];$nd=preg_split('~(?<=\)), (?=\()~',$H["indexpr"]);foreach(explode(" ",$H["indkey"])as$od)$G[$Mf]["columns"][]=($od?$d[$od]:array_shift($nd));foreach(explode(" ",$H["indoption"])as$pd)$G[$Mf]["descs"][]=(intval($pd)&1?'1':null);$G[$Mf]["lengths"]=array();}return$G;}function
foreign_keys($Q){$G=array();foreach(get_rows("SELECT conname, condeferrable::int AS deferrable, condeferred::int AS deferred, pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE conrelid = ".driver()->tableOid($Q)."
AND contype = 'f'::char
ORDER BY conkey, conname")as$H){$H['deferrable']=($H['deferrable']?'':'NOT ').'DEFERRABLE'.($H['deferred']?' INITIALLY DEFERRED':'');if(preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA',$H['definition'],$y)){$H['source']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$y[1])));if(preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~',$y[2],$ce)){$H['ns']=idf_unescape($ce[2]);$H['table']=idf_unescape($ce[4]);}$H['target']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$y[3])));$H['on_delete']=(preg_match("~ON DELETE (".driver()->onActions.")~",$y[4],$ce)?$ce[1]:'NO ACTION');$H['on_update']=(preg_match("~ON UPDATE (".driver()->onActions.")~",$y[4],$ce)?$ce[1]:'NO ACTION');$G[$H['conname']]=$H;}}return$G;}function
view($z){return
array("select"=>trim(get_val("SELECT pg_get_viewdef(".driver()->tableOid($z).")")));}function
collations(){return
array();}function
information_schema($g){return
get_schema()=="information_schema";}function
error(){$G=h(connection()->error);if(preg_match('~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s',$G,$y))$G=$y[1].preg_replace('~((?:[^&]|&[^;]*;){'.strlen($y[3]).'})(.*)~','\1<b>\2</b>',$y[2]).$y[4];return
nl_br($G);}function
create_database($g,$Va){return
queries("CREATE DATABASE ".idf_escape($g).($Va?" ENCODING ".idf_escape($Va):""));}function
drop_databases($wb){connection()->close();return
apply_queries("DROP DATABASE",$wb,'Adminer\idf_escape');}function
rename_database($z,$Va){connection()->close();return
queries("ALTER DATABASE ".idf_escape(DB)." RENAME TO ".idf_escape($z));}function
auto_increment(){return"";}function
alter_table($Q,$z,$k,$Ac,$ab,$Wb,$Va,$ta,$mf){$b=array();$Ef=array();if($Q!=""&&$Q!=$z)$Ef[]="ALTER TABLE ".table($Q)." RENAME TO ".table($z);$dg="";foreach($k
as$j){$c=idf_escape($j[0]);$X=$j[1];if(!$X)$b[]="DROP $c";else{$wh=$X[5];unset($X[5]);if($j[0]==""){if(isset($X[6]))$X[1]=($X[1]==" bigint"?" big":($X[1]==" smallint"?" small":" "))."serial";$b[]=($Q!=""?"ADD ":"  ").implode($X);if(isset($X[6]))$b[]=($Q!=""?"ADD":" ")." PRIMARY KEY ($X[0])";}else{if($c!=$X[0])$Ef[]="ALTER TABLE ".table($z)." RENAME $c TO $X[0]";$b[]="ALTER $c TYPE$X[1]";$eg=$Q."_".idf_unescape($X[0])."_seq";$b[]="ALTER $c ".($X[3]?"SET".preg_replace('~GENERATED ALWAYS(.*) (STORED|VIRTUAL)~','EXPRESSION\1',$X[3]):(isset($X[6])?"SET DEFAULT nextval(".q($eg).")":"DROP DEFAULT"));if(isset($X[6]))$dg="CREATE SEQUENCE IF NOT EXISTS ".idf_escape($eg)." OWNED BY ".idf_escape($Q).".$X[0]";$b[]="ALTER $c ".($X[2]==" NULL"?"DROP NOT":"SET").$X[2];}if($j[0]!=""||$wh!="")$Ef[]="COMMENT ON COLUMN ".table($z).".$X[0] IS ".($wh!=""?substr($wh,9):"''");}}$b=array_merge($b,$Ac);if($Q==""){$O="";if($mf){$Sa=(connection()->flavor=='cockroach');$O=" PARTITION BY $mf[partition_by]($mf[partition])";if($mf["partition_by"]=='HASH'){$nf=+$mf["partitions"];for($p=0;$p<$nf;$p++)$Ef[]="CREATE TABLE ".idf_escape($z."_$p")." PARTITION OF ".idf_escape($z)." FOR VALUES WITH (MODULUS $nf, REMAINDER $p)";}else{$xf="MINVALUE";foreach($mf["partition_names"]as$p=>$X){$Y=$mf["partition_values"][$p];$kf=" VALUES ".($mf["partition_by"]=='LIST'?"IN ($Y)":"FROM ($xf) TO ($Y)");if($Sa)$O
.=($p?",":" (")."\n  PARTITION ".(preg_match('~^DEFAULT$~i',$X)?$X:idf_escape($X))."$kf";else$Ef[]="CREATE TABLE ".idf_escape($z."_$X")." PARTITION OF ".idf_escape($z)." FOR$kf";$xf=$Y;}$O
.=($Sa?"\n)":"");}}array_unshift($Ef,"CREATE TABLE ".table($z)." (\n".implode(",\n",$b)."\n)$O");}elseif($b)array_unshift($Ef,"ALTER TABLE ".table($Q)."\n".implode(",\n",$b));if($dg)array_unshift($Ef,$dg);if($ab!==null)$Ef[]="COMMENT ON TABLE ".table($z)." IS ".q($ab);foreach($Ef
as$E){if(!queries($E))return
false;}return
true;}function
alter_indexes($Q,$b){$nb=array();$Lb=array();$Ef=array();foreach($b
as$X){if($X[0]!="INDEX")$nb[]=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");elseif($X[2]=="DROP")$Lb[]=idf_escape($X[1]);else$Ef[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($Q."_"))." ON ".table($Q).($X[3]?" USING $X[3]":"")." (".implode(", ",$X[2]).")".($X[4]?" WHERE $X[4]":"");}if($nb)array_unshift($Ef,"ALTER TABLE ".table($Q).implode(",",$nb));if($Lb)array_unshift($Ef,"DROP INDEX ".implode(", ",$Lb));foreach($Ef
as$E){if(!queries($E))return
false;}return
true;}function
truncate_tables($S){return
queries("TRUNCATE ".implode(", ",array_map('Adminer\table',$S)));}function
drop_views($Bh){return
drop_tables($Bh);}function
drop_tables($S){foreach($S
as$Q){$O=table_status1($Q);if(!queries("DROP ".strtoupper($O["Engine"])." ".table($Q)))return
false;}return
true;}function
move_tables($S,$Bh,$Eg){foreach(array_merge($S,$Bh)as$Q){$O=table_status1($Q);if(!queries("ALTER ".strtoupper($O["Engine"])." ".table($Q)." SET SCHEMA ".idf_escape($Eg)))return
false;}return
true;}function
trigger($z,$Q){if($z=="")return
array("Statement"=>"EXECUTE PROCEDURE ()");$d=array();$Z="WHERE trigger_schema = current_schema() AND event_object_table = ".q($Q)." AND trigger_name = ".q($z);foreach(get_rows("SELECT * FROM information_schema.triggered_update_columns $Z")as$H)$d[]=$H["event_object_column"];$G=array();foreach(get_rows('SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement"
FROM information_schema.triggers'."
$Z
ORDER BY event_manipulation DESC")as$H){if($d&&$H["Event"]=="UPDATE")$H["Event"].=" OF";$H["Of"]=implode(", ",$d);if($G)$H["Event"].=" OR $G[Event]";$G=$H;}return$G;}function
triggers($Q){$G=array();foreach(get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = ".q($Q))as$H){$Zg=trigger($H["trigger_name"],$Q);$G[$Zg["Trigger"]]=array($Zg["Timing"],$Zg["Event"]);}return$G;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE","INSERT OR UPDATE","INSERT OR UPDATE OF","DELETE OR INSERT","DELETE OR UPDATE","DELETE OR UPDATE OF","DELETE OR INSERT OR UPDATE","DELETE OR INSERT OR UPDATE OF"),"Type"=>array("FOR EACH ROW","FOR EACH STATEMENT"),);}function
routine($z,$T){$I=get_rows('SELECT routine_definition AS definition, LOWER(external_language) AS language, *
FROM information_schema.routines
WHERE routine_schema = current_schema() AND specific_name = '.q($z));$G=idx($I,0,array());$G["returns"]=array("type"=>$G["type_udt_name"]);$G["fields"]=get_rows('SELECT COALESCE(parameter_name, ordinal_position::text) AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout
FROM information_schema.parameters
WHERE specific_schema = current_schema() AND specific_name = '.q($z).'
ORDER BY ordinal_position');return$G;}function
routines(){return
get_rows('SELECT specific_name AS "SPECIFIC_NAME", routine_type AS "ROUTINE_TYPE", routine_name AS "ROUTINE_NAME", type_udt_name AS "DTD_IDENTIFIER"
FROM information_schema.routines
WHERE routine_schema = current_schema()
ORDER BY SPECIFIC_NAME');}function
routine_languages(){return
get_vals("SELECT LOWER(lanname) FROM pg_catalog.pg_language");}function
routine_id($z,$H){$G=array();foreach($H["fields"]as$j){$v=$j["length"];$G[]=$j["type"].($v?"($v)":"");}return
idf_escape($z)."(".implode(", ",$G).")";}function
last_id($F){$H=(is_object($F)?$F->fetch_row():array());return($H?$H[0]:0);}function
explain($e,$E){return$e->query("EXPLAIN $E");}function
found_rows($R,$Z){if(preg_match("~ rows=([0-9]+)~",get_val("EXPLAIN SELECT * FROM ".idf_escape($R["Name"]).($Z?" WHERE ".implode(" AND ",$Z):"")),$Lf))return$Lf[1];}function
types(){return
get_key_vals("SELECT oid, typname
FROM pg_type
WHERE typnamespace = ".driver()->nsOid."
AND typtype IN ('b','d','e')
AND typelem = 0");}function
type_values($q){$Zb=get_vals("SELECT enumlabel FROM pg_enum WHERE enumtypid = $q ORDER BY enumsortorder");return($Zb?"'".implode("', '",array_map('addslashes',$Zb))."'":"");}function
schemas(){return
get_vals("SELECT nspname FROM pg_namespace ORDER BY nspname");}function
get_schema(){return
get_val("SELECT current_schema()");}function
set_schema($Vf,$f=null){$G=connection($f)->query("SET search_path TO ".idf_escape($Vf));driver()->setUserTypes(types());return$G;}function
foreign_keys_sql($Q){$G="";$O=table_status1($Q);$Fe=idf_escape($O['nspname']);$xc=foreign_keys($Q);ksort($xc);foreach($xc
as$wc=>$vc)$G
.="ALTER TABLE ONLY $Fe.".idf_escape($O['Name'])." ADD CONSTRAINT ".idf_escape($wc)." ".preg_replace('~( REFERENCES )([^(.]+\()~',"\\1$Fe.\\2",$vc["definition"]).";\n";return($G?"$G\n":$G);}function
create_sql($Q,$ta,$vg){$Rf=array();$fg=array();$O=table_status1($Q);$Fe=idf_escape($O['nspname']);if(is_view($O)){$Ah=view($Q);return
rtrim("CREATE VIEW $Fe.".idf_escape($Q)." AS $Ah[select]",";");}$k=fields($Q);if(count($O)<2||empty($k))return
false;$G="CREATE TABLE $Fe.".idf_escape($O['Name'])." (\n    ";foreach($k
as$j){if($j['default']=="nextval('$O[Name]_$j[field]_seq')"){$j['default']=null;$j['full_type']=preg_replace('~int(eger)?~','serial',$j['full_type']);}$jf=idf_escape($j['field']).' '.$j['full_type'].preg_replace('~(nextval\(\')([^.\']+\')~','\1'.str_replace("'","''",$O['nspname']).'.\2',default_value($j)).($j['null']?"":" NOT NULL");$Rf[]=$jf;if(preg_match('~nextval\(\'([^\']+)\'\)~',$j['default'],$ee)){$eg=$ee[1];$pg=first(get_rows((min_version(10)?"SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = ".q(idf_unescape($eg)):"SELECT * FROM $eg"),null,"-- "));$fg[]=($vg=="DROP+CREATE"?"DROP SEQUENCE IF EXISTS $Fe.$eg;\n":"")."CREATE SEQUENCE $Fe.$eg INCREMENT $pg[increment_by] MINVALUE $pg[min_value] MAXVALUE $pg[max_value]".($ta&&$pg['last_value']?" START ".($pg["last_value"]+1):"")." CACHE $pg[cache_value];";}}if(!empty($fg))$G=implode("\n\n",$fg)."\n\n$G";$yf="";foreach(indexes($Q)as$ld=>$s){if($s['type']=='PRIMARY'){$yf=$ld;$Rf[]="CONSTRAINT ".idf_escape($ld)." PRIMARY KEY (".implode(', ',array_map('Adminer\idf_escape',$s['columns'])).")";}}foreach(driver()->checkConstraints($Q)as$eb=>$gb)$Rf[]="CONSTRAINT ".idf_escape($eb)." CHECK ($gb)";$G
.=implode(",\n    ",$Rf)."\n)";$kf=driver()->partitionsInfo($O['Name']);if($kf)$G
.="\nPARTITION BY $kf[partition_by]($kf[partition])";$G
.="\nWITH (oids = ".($O['Oid']?'true':'false').");";if($O['Comment'])$G
.="\n\nCOMMENT ON TABLE $Fe.".idf_escape($O['Name'])." IS ".q($O['Comment']).";";foreach($k
as$oc=>$j){if($j['comment'])$G
.="\n\nCOMMENT ON COLUMN $Fe.".idf_escape($O['Name']).".".idf_escape($oc)." IS ".q($j['comment']).";";}foreach(get_rows("SELECT indexdef FROM pg_catalog.pg_indexes WHERE schemaname = current_schema() AND tablename = ".q($Q).($yf?" AND indexname != ".q($yf):""),null,"-- ")as$H)$G
.="\n\n$H[indexdef];";return
rtrim($G,';');}function
truncate_sql($Q){return"TRUNCATE ".table($Q);}function
trigger_sql($Q){$O=table_status1($Q);$G="";foreach(triggers($Q)as$Yg=>$Xg){$Zg=trigger($Yg,$O['Name']);$G
.="\nCREATE TRIGGER ".idf_escape($Zg['Trigger'])." $Zg[Timing] $Zg[Event] ON ".idf_escape($O["nspname"]).".".idf_escape($O['Name'])." $Zg[Type] $Zg[Statement];;\n";}return$G;}function
use_sql($vb,$vg=""){$z=idf_escape($vb);$G="";if(preg_match('~CREATE~',$vg)){if($vg=="DROP+CREATE")$G="DROP DATABASE IF EXISTS $z;\n";$G
.="CREATE DATABASE $z;\n";}return"$G\\connect $z";}function
show_variables(){return
get_rows("SHOW ALL");}function
process_list(){return
get_rows("SELECT * FROM pg_stat_activity ORDER BY ".(min_version(9.2)?"pid":"procpid"));}function
convert_field($j){}function
unconvert_field($j,$G){return$G;}function
support($nc){return
preg_match('~^(check|columns|comment|database|drop_col|dump|descidx|indexes|kill|partial_indexes|routine|scheme|sequence|sql|table|trigger|type|variables|view'.(min_version(9.3)?'|materializedview':'').(min_version(11)?'|procedure':'').(connection()->flavor=='cockroach'?'':'|processlist').')$~',$nc);}function
kill_process($X){return
queries("SELECT pg_terminate_backend(".number($X).")");}function
connection_id(){return"SELECT pg_backend_pid()";}function
max_connections(){return
get_val("SHOW max_connections");}}add_driver("oracle","Oracle (beta)");if(isset($_GET["oracle"])){define('Adminer\DRIVER',"oracle");if(extension_loaded("oci8")&&$_GET["ext"]!="pdo"){class
Db
extends
SqlDb{var$extension="oci8";var$_current_db;private$link;function
_error($bc,$i){if(ini_bool("html_errors"))$i=html_entity_decode(strip_tags($i));$i=preg_replace('~^[^:]*: ~','',$i);$this->error=$i;}function
attach($L,$V,$B){$this->link=@oci_new_connect($V,$B,$L,"AL32UTF8");if($this->link){$this->server_info=oci_server_version($this->link);return'';}$i=oci_error();return$i["message"];}function
quote($P){return"'".str_replace("'","''",$P)."'";}function
select_db($vb){$this->_current_db=$vb;return
true;}function
query($E,$fh=false){$F=oci_parse($this->link,$E);$this->error="";if(!$F){$i=oci_error($this->link);$this->errno=$i["code"];$this->error=$i["message"];return
false;}set_error_handler(array($this,'_error'));$G=@oci_execute($F);restore_error_handler();if($G){if(oci_num_fields($F))return
new
Result($F);$this->affected_rows=oci_num_rows($F);oci_free_statement($F);}return$G;}function
timeout($we){return
oci_set_call_timeout($this->link,$we);}}class
Result{var$num_rows;private$result,$offset=1;function
__construct($F){$this->result=$F;}private
function
convert($H){foreach((array)$H
as$u=>$X){if(is_a($X,'OCILob')||is_a($X,'OCI-Lob'))$H[$u]=$X->load();}return$H;}function
fetch_assoc(){return$this->convert(oci_fetch_assoc($this->result));}function
fetch_row(){return$this->convert(oci_fetch_row($this->result));}function
fetch_field(){$c=$this->offset++;$G=new
\stdClass;$G->name=oci_field_name($this->result,$c);$G->type=oci_field_type($this->result,$c);$G->charsetnr=(preg_match("~raw|blob|bfile~",$G->type)?63:0);return$G;}}}elseif(extension_loaded("pdo_oci")){class
Db
extends
PdoDb{var$extension="PDO_OCI";var$_current_db;function
attach($L,$V,$B){return$this->dsn("oci:dbname=//$L;charset=AL32UTF8",$V,$B);}function
select_db($vb){$this->_current_db=$vb;return
true;}}}class
Driver
extends
SqlDriver{static$extensions=array("OCI8","PDO_OCI");static$jush="oracle";var$insertFunctions=array("date"=>"current_date","timestamp"=>"current_timestamp",);var$editFunctions=array("number|float|double"=>"+/-","date|timestamp"=>"+ interval/- interval","char|clob"=>"||",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("length","lower","round","upper");var$grouping=array("avg","count","count distinct","max","min","sum");function
__construct(Db$e){parent::__construct($e);$this->types=array('Numbers'=>array("number"=>38,"binary_float"=>12,"binary_double"=>21),'Date and time'=>array("date"=>10,"timestamp"=>29,"interval year"=>12,"interval day"=>28),'Strings'=>array("char"=>2000,"varchar2"=>4000,"nchar"=>2000,"nvarchar2"=>4000,"clob"=>4294967295,"nclob"=>4294967295),'Binary'=>array("raw"=>2000,"long raw"=>2147483648,"blob"=>4294967295,"bfile"=>4294967296),);}function
begin(){return
true;}function
insertUpdate($Q,array$I,array$yf){foreach($I
as$M){$U=array();$Z=array();foreach($M
as$u=>$X){$U[]="$u = $X";if(isset($yf[idf_unescape($u)]))$Z[]="$u = $X";}if(!(($Z&&queries("UPDATE ".table($Q)." SET ".implode(", ",$U)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($Q)." (".implode(", ",array_keys($M)).") VALUES (".implode(", ",$M).")")))return
false;}return
true;}function
hasCStyleEscapes(){return
true;}}function
idf_escape($r){return'"'.str_replace('"','""',$r).'"';}function
table($r){return
idf_escape($r);}function
get_databases($zc){return
get_vals("SELECT DISTINCT tablespace_name FROM (
SELECT tablespace_name FROM user_tablespaces
UNION SELECT tablespace_name FROM all_tables WHERE tablespace_name IS NOT NULL
)
ORDER BY 1");}function
limit($E,$Z,$w,$_=0,$K=" "){return($_?" * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $E$Z) t WHERE rownum <= ".($w+$_).") WHERE rnum > $_":($w?" * FROM (SELECT $E$Z) WHERE rownum <= ".($w+$_):" $E$Z"));}function
limit1($Q,$E,$Z,$K="\n"){return" $E$Z";}function
db_collation($g,$Wa){return
get_val("SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'");}function
logged_user(){return
get_val("SELECT USER FROM DUAL");}function
get_current_db(){$g=connection()->_current_db?:DB;unset(connection()->_current_db);return$g;}function
where_owner($wf,$ef="owner"){if(!$_GET["ns"])return'';return"$wf$ef = sys_context('USERENV', 'CURRENT_SCHEMA')";}function
views_table($d){$ef=where_owner('');return"(SELECT $d FROM all_views WHERE ".($ef?:"rownum < 0").")";}function
tables_list(){$Ah=views_table("view_name");$ef=where_owner(" AND ");return
get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = ".q(DB)."$ef
UNION SELECT view_name, 'view' FROM $Ah
ORDER BY 1");}function
count_tables($wb){$G=array();foreach($wb
as$g)$G[$g]=get_val("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = ".q($g));return$G;}function
table_status($z=""){$G=array();$Xf=q($z);$g=get_current_db();$Ah=views_table("view_name");$ef=where_owner(" AND ");foreach(get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = '.q($g).$ef.($z!=""?" AND table_name = $Xf":"")."
UNION SELECT view_name, 'view', 0, 0 FROM $Ah".($z!=""?" WHERE view_name = $Xf":"")."
ORDER BY 1")as$H)$G[$H["Name"]]=$H;return$G;}function
is_view($R){return$R["Engine"]=="view";}function
fk_support($R){return
true;}function
fields($Q){$G=array();$ef=where_owner(" AND ");foreach(get_rows("SELECT * FROM all_tab_columns WHERE table_name = ".q($Q)."$ef ORDER BY column_id")as$H){$T=$H["DATA_TYPE"];$v="$H[DATA_PRECISION],$H[DATA_SCALE]";if($v==",")$v=$H["CHAR_COL_DECL_LENGTH"];$G[$H["COLUMN_NAME"]]=array("field"=>$H["COLUMN_NAME"],"full_type"=>$T.($v?"($v)":""),"type"=>strtolower($T),"length"=>$v,"default"=>$H["DATA_DEFAULT"],"null"=>($H["NULLABLE"]=="Y"),"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1),);}return$G;}function
indexes($Q,$f=null){$G=array();$ef=where_owner(" AND ","aic.table_owner");foreach(get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
FROM all_ind_columns aic
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
WHERE aic.table_name = ".q($Q)."$ef
ORDER BY ac.constraint_type, aic.column_position",$f)as$H){$ld=$H["INDEX_NAME"];$Ya=$H["DATA_DEFAULT"];$Ya=($Ya?trim($Ya,'"'):$H["COLUMN_NAME"]);$G[$ld]["type"]=($H["CONSTRAINT_TYPE"]=="P"?"PRIMARY":($H["CONSTRAINT_TYPE"]=="U"?"UNIQUE":"INDEX"));$G[$ld]["columns"][]=$Ya;$G[$ld]["lengths"][]=($H["CHAR_LENGTH"]&&$H["CHAR_LENGTH"]!=$H["COLUMN_LENGTH"]?$H["CHAR_LENGTH"]:null);$G[$ld]["descs"][]=($H["DESCEND"]&&$H["DESCEND"]=="DESC"?'1':null);}return$G;}function
view($z){$Ah=views_table("view_name, text");$I=get_rows('SELECT text "select" FROM '.$Ah.' WHERE view_name = '.q($z));return
reset($I);}function
collations(){return
array();}function
information_schema($g){return
get_schema()=="INFORMATION_SCHEMA";}function
error(){return
h(connection()->error);}function
explain($e,$E){$e->query("EXPLAIN PLAN FOR $E");return$e->query("SELECT * FROM plan_table");}function
found_rows($R,$Z){}function
auto_increment(){return"";}function
alter_table($Q,$z,$k,$Ac,$ab,$Wb,$Va,$ta,$mf){$b=$Lb=array();$af=($Q?fields($Q):array());foreach($k
as$j){$X=$j[1];if($X&&$j[0]!=""&&idf_escape($j[0])!=$X[0])queries("ALTER TABLE ".table($Q)." RENAME COLUMN ".idf_escape($j[0])." TO $X[0]");$Ze=$af[$j[0]];if($X&&$Ze){$Le=process_field($Ze,$Ze);if($X[2]==$Le[2])$X[2]="";}if($X)$b[]=($Q!=""?($j[0]!=""?"MODIFY (":"ADD ("):"  ").implode($X).($Q!=""?")":"");else$Lb[]=idf_escape($j[0]);}if($Q=="")return
queries("CREATE TABLE ".table($z)." (\n".implode(",\n",$b)."\n)");return(!$b||queries("ALTER TABLE ".table($Q)."\n".implode("\n",$b)))&&(!$Lb||queries("ALTER TABLE ".table($Q)." DROP (".implode(", ",$Lb).")"))&&($Q==$z||queries("ALTER TABLE ".table($Q)." RENAME TO ".table($z)));}function
alter_indexes($Q,$b){$Lb=array();$Ef=array();foreach($b
as$X){if($X[0]!="INDEX"){$X[2]=preg_replace('~ DESC$~','',$X[2]);$nb=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");array_unshift($Ef,"ALTER TABLE ".table($Q).$nb);}elseif($X[2]=="DROP")$Lb[]=idf_escape($X[1]);else$Ef[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($Q."_"))." ON ".table($Q)." (".implode(", ",$X[2]).")";}if($Lb)array_unshift($Ef,"DROP INDEX ".implode(", ",$Lb));foreach($Ef
as$E){if(!queries($E))return
false;}return
true;}function
foreign_keys($Q){$G=array();$E="SELECT c_list.CONSTRAINT_NAME as NAME,
c_src.COLUMN_NAME as SRC_COLUMN,
c_dest.OWNER as DEST_DB,
c_dest.TABLE_NAME as DEST_TABLE,
c_dest.COLUMN_NAME as DEST_COLUMN,
c_list.DELETE_RULE as ON_DELETE
FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
AND c_list.CONSTRAINT_TYPE = 'R'
AND c_src.TABLE_NAME = ".q($Q);foreach(get_rows($E)as$H)$G[$H['NAME']]=array("db"=>$H['DEST_DB'],"table"=>$H['DEST_TABLE'],"source"=>array($H['SRC_COLUMN']),"target"=>array($H['DEST_COLUMN']),"on_delete"=>$H['ON_DELETE'],"on_update"=>null,);return$G;}function
truncate_tables($S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views($Bh){return
apply_queries("DROP VIEW",$Bh);}function
drop_tables($S){return
apply_queries("DROP TABLE",$S);}function
last_id($F){return
0;}function
schemas(){$G=get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) ORDER BY 1");return($G?:get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = ".q(DB)." ORDER BY 1"));}function
get_schema(){return
get_val("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual");}function
set_schema($Wf,$f=null){return
connection($f)->query("ALTER SESSION SET CURRENT_SCHEMA = ".idf_escape($Wf));}function
show_variables(){return
get_rows('SELECT name, display_value FROM v$parameter');}function
show_status(){$G=array();$I=get_rows('SELECT * FROM v$instance');foreach(reset($I)as$u=>$X)$G[]=array($u,$X);return$G;}function
process_list(){return
get_rows('SELECT
	sess.process AS "process",
	sess.username AS "user",
	sess.schemaname AS "schema",
	sess.status AS "status",
	sess.wait_class AS "wait_class",
	sess.seconds_in_wait AS "seconds_in_wait",
	sql.sql_text AS "sql_text",
	sess.machine AS "machine",
	sess.port AS "port"
FROM v$session sess LEFT OUTER JOIN v$sql sql
ON sql.sql_id = sess.sql_id
WHERE sess.type = \'USER\'
ORDER BY PROCESS
');}function
convert_field($j){}function
unconvert_field($j,$G){return$G;}function
support($nc){return
preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~',$nc);}}add_driver("mssql","MS SQL");if(isset($_GET["mssql"])){define('Adminer\DRIVER',"mssql");if(extension_loaded("sqlsrv")&&$_GET["ext"]!="pdo"){class
Db
extends
SqlDb{var$extension="sqlsrv";private$link,$result;private
function
get_error(){$this->error="";foreach(sqlsrv_errors()as$i){$this->errno=$i["code"];$this->error
.="$i[message]\n";}$this->error=rtrim($this->error);}function
attach($L,$V,$B){$fb=array("UID"=>$V,"PWD"=>$B,"CharacterSet"=>"UTF-8");$N=adminer()->connectSsl();if(isset($N["Encrypt"]))$fb["Encrypt"]=$N["Encrypt"];if(isset($N["TrustServerCertificate"]))$fb["TrustServerCertificate"]=$N["TrustServerCertificate"];$g=adminer()->database();if($g!="")$fb["Database"]=$g;list($bd,$C)=host_port($L);$this->link=@sqlsrv_connect($bd.($C?",$C":""),$fb);if($this->link){$qd=sqlsrv_server_info($this->link);$this->server_info=$qd['SQLServerVersion'];}else$this->get_error();return($this->link?'':$this->error);}function
quote($P){$gh=strlen($P)!=strlen(utf8_decode($P));return($gh?"N":"")."'".str_replace("'","''",$P)."'";}function
select_db($vb){return$this->query(use_sql($vb));}function
query($E,$fh=false){$F=sqlsrv_query($this->link,$E);$this->error="";if(!$F){$this->get_error();return
false;}return$this->store_result($F);}function
multi_query($E){$this->result=sqlsrv_query($this->link,$E);$this->error="";if(!$this->result){$this->get_error();return
false;}return
true;}function
store_result($F=null){if(!$F)$F=$this->result;if(!$F)return
false;if(sqlsrv_field_metadata($F))return
new
Result($F);$this->affected_rows=sqlsrv_rows_affected($F);return
true;}function
next_result(){return$this->result?!!sqlsrv_next_result($this->result):false;}}class
Result{var$num_rows;private$result,$offset=0,$fields;function
__construct($F){$this->result=$F;}private
function
convert($H){foreach((array)$H
as$u=>$X){if(is_a($X,'DateTime'))$H[$u]=$X->format("Y-m-d H:i:s");}return$H;}function
fetch_assoc(){return$this->convert(sqlsrv_fetch_array($this->result,SQLSRV_FETCH_ASSOC));}function
fetch_row(){return$this->convert(sqlsrv_fetch_array($this->result,SQLSRV_FETCH_NUMERIC));}function
fetch_field(){if(!$this->fields)$this->fields=sqlsrv_field_metadata($this->result);$j=$this->fields[$this->offset++];$G=new
\stdClass;$G->name=$j["Name"];$G->type=($j["Type"]==1?254:15);$G->charsetnr=0;return$G;}function
seek($_){for($p=0;$p<$_;$p++)sqlsrv_fetch($this->result);}}function
last_id($F){return
get_val("SELECT SCOPE_IDENTITY()");}function
explain($e,$E){$e->query("SET SHOWPLAN_ALL ON");$G=$e->query($E);$e->query("SET SHOWPLAN_ALL OFF");return$G;}}else{abstract
class
MssqlDb
extends
PdoDb{function
select_db($vb){return$this->query(use_sql($vb));}function
lastInsertId(){return$this->pdo->lastInsertId();}}function
last_id($F){return
connection()->lastInsertId();}function
explain($e,$E){}if(extension_loaded("pdo_sqlsrv")){class
Db
extends
MssqlDb{var$extension="PDO_SQLSRV";function
attach($L,$V,$B){list($bd,$C)=host_port($L);return$this->dsn("sqlsrv:Server=$bd".($C?",$C":""),$V,$B);}}}elseif(extension_loaded("pdo_dblib")){class
Db
extends
MssqlDb{var$extension="PDO_DBLIB";function
attach($L,$V,$B){list($bd,$C)=host_port($L);return$this->dsn("dblib:charset=utf8;host=$bd".($C?(is_numeric($C)?";port=":";unix_socket=").$C:""),$V,$B);}}}}class
Driver
extends
SqlDriver{static$extensions=array("SQLSRV","PDO_SQLSRV","PDO_DBLIB");static$jush="mssql";var$insertFunctions=array("date|time"=>"getdate");var$editFunctions=array("int|decimal|real|float|money|datetime"=>"+/-","char|text"=>"+",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL");var$functions=array("len","lower","round","upper");var$grouping=array("avg","count","count distinct","max","min","sum");var$generated=array("PERSISTED","VIRTUAL");var$onActions="NO ACTION|CASCADE|SET NULL|SET DEFAULT";static
function
connect($L,$V,$B){if($L=="")$L="localhost:1433";return
parent::connect($L,$V,$B);}function
__construct(Db$e){parent::__construct($e);$this->types=array('Numbers'=>array("tinyint"=>3,"smallint"=>5,"int"=>10,"bigint"=>20,"bit"=>1,"decimal"=>0,"real"=>12,"float"=>53,"smallmoney"=>10,"money"=>20),'Date and time'=>array("date"=>10,"smalldatetime"=>19,"datetime"=>19,"datetime2"=>19,"time"=>8,"datetimeoffset"=>10),'Strings'=>array("char"=>8000,"varchar"=>8000,"text"=>2147483647,"nchar"=>4000,"nvarchar"=>4000,"ntext"=>1073741823),'Binary'=>array("binary"=>8000,"varbinary"=>8000,"image"=>2147483647),);}function
insertUpdate($Q,array$I,array$yf){$k=fields($Q);$U=array();$Z=array();$M=reset($I);$d="c".implode(", c",range(1,count($M)));$Ia=0;$ud=array();foreach($M
as$u=>$X){$Ia++;$z=idf_unescape($u);if(!$k[$z]["auto_increment"])$ud[$u]="c$Ia";if(isset($yf[$z]))$Z[]="$u = c$Ia";else$U[]="$u = c$Ia";}$yh=array();foreach($I
as$M)$yh[]="(".implode(", ",$M).")";if($Z){$gd=queries("SET IDENTITY_INSERT ".table($Q)." ON");$G=queries("MERGE ".table($Q)." USING (VALUES\n\t".implode(",\n\t",$yh)."\n) AS source ($d) ON ".implode(" AND ",$Z).($U?"\nWHEN MATCHED THEN UPDATE SET ".implode(", ",$U):"")."\nWHEN NOT MATCHED THEN INSERT (".implode(", ",array_keys($gd?$M:$ud)).") VALUES (".($gd?$d:implode(", ",$ud)).");");if($gd)queries("SET IDENTITY_INSERT ".table($Q)." OFF");}else$G=queries("INSERT INTO ".table($Q)." (".implode(", ",array_keys($M)).") VALUES\n".implode(",\n",$yh));return$G;}function
begin(){return
queries("BEGIN TRANSACTION");}function
tableHelp($z,$Cd=false){$Td=array("sys"=>"catalog-views/sys-","INFORMATION_SCHEMA"=>"information-schema-views/",);$x=$Td[get_schema()];if($x)return"relational-databases/system-$x".preg_replace('~_~','-',strtolower($z))."-transact-sql";}}function
idf_escape($r){return"[".str_replace("]","]]",$r)."]";}function
table($r){return($_GET["ns"]!=""?idf_escape($_GET["ns"]).".":"").idf_escape($r);}function
get_databases($zc){return
get_vals("SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')");}function
limit($E,$Z,$w,$_=0,$K=" "){return($w?" TOP (".($w+$_).")":"")." $E$Z";}function
limit1($Q,$E,$Z,$K="\n"){return
limit($E,$Z,1,0,$K);}function
db_collation($g,$Wa){return
get_val("SELECT collation_name FROM sys.databases WHERE name = ".q($g));}function
logged_user(){return
get_val("SELECT SUSER_NAME()");}function
tables_list(){return
get_key_vals("SELECT name, type_desc FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') ORDER BY name");}function
count_tables($wb){$G=array();foreach($wb
as$g){connection()->select_db($g);$G[$g]=get_val("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES");}return$G;}function
table_status($z=""){$G=array();foreach(get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT cast(value as varchar(max)) FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment
FROM sys.all_objects AS ao
WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') ".($z!=""?"AND name = ".q($z):"ORDER BY name"))as$H)$G[$H["Name"]]=$H;return$G;}function
is_view($R){return$R["Engine"]=="VIEW";}function
fk_support($R){return
true;}function
fields($Q){$bb=get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', ".q(get_schema()).", 'table', ".q($Q).", 'column', NULL)");$G=array();$Bg=get_val("SELECT object_id FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') AND name = ".q($Q));foreach(get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, d.definition [default], d.name default_constraint, i.is_primary_key
FROM sys.all_columns c
JOIN sys.types t ON c.user_type_id = t.user_type_id
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id
LEFT JOIN sys.index_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE c.object_id = ".q($Bg))as$H){$T=$H["type"];$v=(preg_match("~char|binary~",$T)?intval($H["max_length"])/($T[0]=='n'?2:1):($T=="decimal"?"$H[precision],$H[scale]":""));$G[$H["name"]]=array("field"=>$H["name"],"full_type"=>$T.($v?"($v)":""),"type"=>$T,"length"=>$v,"default"=>(preg_match("~^\('(.*)'\)$~",$H["default"],$y)?str_replace("''","'",$y[1]):$H["default"]),"default_constraint"=>$H["default_constraint"],"null"=>$H["is_nullable"],"auto_increment"=>$H["is_identity"],"collation"=>$H["collation_name"],"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1),"primary"=>$H["is_primary_key"],"comment"=>$bb[$H["name"]],);}foreach(get_rows("SELECT * FROM sys.computed_columns WHERE object_id = ".q($Bg))as$H){$G[$H["name"]]["generated"]=($H["is_persisted"]?"PERSISTED":"VIRTUAL");$G[$H["name"]]["default"]=$H["definition"];}return$G;}function
indexes($Q,$f=null){$G=array();foreach(get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE OBJECT_NAME(i.object_id) = ".q($Q),$f)as$H){$z=$H["name"];$G[$z]["type"]=($H["is_primary_key"]?"PRIMARY":($H["is_unique"]?"UNIQUE":"INDEX"));$G[$z]["lengths"]=array();$G[$z]["columns"][$H["key_ordinal"]]=$H["column_name"];$G[$z]["descs"][$H["key_ordinal"]]=($H["is_descending_key"]?'1':null);}return$G;}function
view($z){return
array("select"=>preg_replace('~^(?:[^[]|\[[^]]*])*\s+AS\s+~isU','',get_val("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = ".q($z))));}function
collations(){$G=array();foreach(get_vals("SELECT name FROM fn_helpcollations()")as$Va)$G[preg_replace('~_.*~','',$Va)][]=$Va;return$G;}function
information_schema($g){return
get_schema()=="INFORMATION_SCHEMA";}function
error(){return
nl_br(h(preg_replace('~^(\[[^]]*])+~m','',connection()->error)));}function
create_database($g,$Va){return
queries("CREATE DATABASE ".idf_escape($g).(preg_match('~^[a-z0-9_]+$~i',$Va)?" COLLATE $Va":""));}function
drop_databases($wb){return
queries("DROP DATABASE ".implode(", ",array_map('Adminer\idf_escape',$wb)));}function
rename_database($z,$Va){if(preg_match('~^[a-z0-9_]+$~i',$Va))queries("ALTER DATABASE ".idf_escape(DB)." COLLATE $Va");queries("ALTER DATABASE ".idf_escape(DB)." MODIFY NAME = ".idf_escape($z));return
true;}function
auto_increment(){return" IDENTITY".($_POST["Auto_increment"]!=""?"(".number($_POST["Auto_increment"]).",1)":"")." PRIMARY KEY";}function
alter_table($Q,$z,$k,$Ac,$ab,$Wb,$Va,$ta,$mf){$b=array();$bb=array();$af=fields($Q);foreach($k
as$j){$c=idf_escape($j[0]);$X=$j[1];if(!$X)$b["DROP"][]=" COLUMN $c";else{$X[1]=preg_replace("~( COLLATE )'(\\w+)'~",'\1\2',$X[1]);$bb[$j[0]]=$X[5];unset($X[5]);if(preg_match('~ AS ~',$X[3]))unset($X[1],$X[2]);if($j[0]=="")$b["ADD"][]="\n  ".implode("",$X).($Q==""?substr($Ac[$X[0]],16+strlen($X[0])):"");else{$h=$X[3];unset($X[3]);unset($X[6]);if($c!=$X[0])queries("EXEC sp_rename ".q(table($Q).".$c").", ".q(idf_unescape($X[0])).", 'COLUMN'");$b["ALTER COLUMN ".implode("",$X)][]="";$Ze=$af[$j[0]];if(default_value($Ze)!=$h){if($Ze["default"]!==null)$b["DROP"][]=" ".idf_escape($Ze["default_constraint"]);if($h)$b["ADD"][]="\n $h FOR $c";}}}}if($Q=="")return
queries("CREATE TABLE ".table($z)." (".implode(",",(array)$b["ADD"])."\n)");if($Q!=$z)queries("EXEC sp_rename ".q(table($Q)).", ".q($z));if($Ac)$b[""]=$Ac;foreach($b
as$u=>$X){if(!queries("ALTER TABLE ".table($z)." $u".implode(",",$X)))return
false;}foreach($bb
as$u=>$X){$ab=substr($X,9);queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = ".q(get_schema()).", @level1type = N'Table', @level1name = ".q($z).", @level2type = N'Column', @level2name = ".q($u));queries("EXEC sp_addextendedproperty
@name = N'MS_Description',
@value = $ab,
@level0type = N'Schema',
@level0name = ".q(get_schema()).",
@level1type = N'Table',
@level1name = ".q($z).",
@level2type = N'Column',
@level2name = ".q($u));}return
true;}function
alter_indexes($Q,$b){$s=array();$Lb=array();foreach($b
as$X){if($X[2]=="DROP"){if($X[0]=="PRIMARY")$Lb[]=idf_escape($X[1]);else$s[]=idf_escape($X[1])." ON ".table($Q);}elseif(!queries(($X[0]!="PRIMARY"?"CREATE $X[0] ".($X[0]!="INDEX"?"INDEX ":"").idf_escape($X[1]!=""?$X[1]:uniqid($Q."_"))." ON ".table($Q):"ALTER TABLE ".table($Q)." ADD PRIMARY KEY")." (".implode(", ",$X[2]).")"))return
false;}return(!$s||queries("DROP INDEX ".implode(", ",$s)))&&(!$Lb||queries("ALTER TABLE ".table($Q)." DROP ".implode(", ",$Lb)));}function
found_rows($R,$Z){}function
foreign_keys($Q){$G=array();$Ne=array("CASCADE","NO ACTION","SET NULL","SET DEFAULT");foreach(get_rows("EXEC sp_fkeys @fktable_name = ".q($Q).", @fktable_owner = ".q(get_schema()))as$H){$m=&$G[$H["FK_NAME"]];$m["db"]=$H["PKTABLE_QUALIFIER"];$m["ns"]=$H["PKTABLE_OWNER"];$m["table"]=$H["PKTABLE_NAME"];$m["on_update"]=$Ne[$H["UPDATE_RULE"]];$m["on_delete"]=$Ne[$H["DELETE_RULE"]];$m["source"][]=$H["FKCOLUMN_NAME"];$m["target"][]=$H["PKCOLUMN_NAME"];}return$G;}function
truncate_tables($S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views($Bh){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Bh)));}function
drop_tables($S){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function
move_tables($S,$Bh,$Eg){return
apply_queries("ALTER SCHEMA ".idf_escape($Eg)." TRANSFER",array_merge($S,$Bh));}function
trigger($z,$Q){if($z=="")return
array();$I=get_rows("SELECT s.name [Trigger],
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],
c.text
FROM sysobjects s
JOIN syscomments c ON s.id = c.id
WHERE s.xtype = 'TR' AND s.name = ".q($z));$G=reset($I);if($G)$G["Statement"]=preg_replace('~^.+\s+AS\s+~isU','',$G["text"]);return$G;}function
triggers($Q){$G=array();foreach(get_rows("SELECT sys1.name,
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing]
FROM sysobjects sys1
JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id
WHERE sys1.xtype = 'TR' AND sys2.name = ".q($Q))as$H)$G[$H["name"]]=array($H["Timing"],$H["Event"]);return$G;}function
trigger_options(){return
array("Timing"=>array("AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("AS"),);}function
schemas(){return
get_vals("SELECT name FROM sys.schemas");}function
get_schema(){if($_GET["ns"]!="")return$_GET["ns"];return
get_val("SELECT SCHEMA_NAME()");}function
set_schema($Vf){$_GET["ns"]=$Vf;return
true;}function
create_sql($Q,$ta,$vg){if(is_view(table_status1($Q))){$Ah=view($Q);return"CREATE VIEW ".table($Q)." AS $Ah[select]";}$k=array();$yf=false;foreach(fields($Q)as$z=>$j){$X=process_field($j,$j);if($X[6])$yf=true;$k[]=implode("",$X);}foreach(indexes($Q)as$z=>$s){if(!$yf||$s["type"]!="PRIMARY"){$d=array();foreach($s["columns"]as$u=>$X)$d[]=idf_escape($X).($s["descs"][$u]?" DESC":"");$z=idf_escape($z);$k[]=($s["type"]=="INDEX"?"INDEX $z":"CONSTRAINT $z ".($s["type"]=="UNIQUE"?"UNIQUE":"PRIMARY KEY"))." (".implode(", ",$d).")";}}foreach(driver()->checkConstraints($Q)as$z=>$Ma)$k[]="CONSTRAINT ".idf_escape($z)." CHECK ($Ma)";return"CREATE TABLE ".table($Q)." (\n\t".implode(",\n\t",$k)."\n)";}function
foreign_keys_sql($Q){$k=array();foreach(foreign_keys($Q)as$Ac)$k[]=ltrim(format_foreign_key($Ac));return($k?"ALTER TABLE ".table($Q)." ADD\n\t".implode(",\n\t",$k).";\n\n":"");}function
truncate_sql($Q){return"TRUNCATE TABLE ".table($Q);}function
use_sql($vb,$vg=""){return"USE ".idf_escape($vb);}function
trigger_sql($Q){$G="";foreach(triggers($Q)as$z=>$Zg)$G
.=create_trigger(" ON ".table($Q),trigger($z,$Q)).";";return$G;}function
convert_field($j){}function
unconvert_field($j,$G){return$G;}function
support($nc){return
preg_match('~^(check|comment|columns|database|drop_col|dump|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~',$nc);}}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($nb=false){return
password_file($nb);}function
bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
serverName($L){}function
database(){if(connection()){$wb=adminer()->databases(false);return(!$wb?get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)"):$wb[(information_schema($wb[0])?1:0)]);}}function
operators(){return
array("<=",">=");}function
schemas(){return
schemas();}function
databases($zc=true){return
get_databases($zc);}function
pluginsLinks(){}function
queryTimeout(){return
5;}function
afterConnect(){}function
headers(){}function
csp($qb){return$qb;}function
head($tb=null){return
true;}function
bodyClass(){echo" editor";}function
css(){$G=array();foreach(array("","-dark")as$ve){$l="adminer$ve.css";if(file_exists($l)){$qc=file_get_contents($l);$G["$l?v=".crc32($qc)]=($ve?"dark":(preg_match('~prefers-color-scheme:\s*dark~',$qc)?'':'light'));}}return$G;}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($z,$Xc,$Y){return$Xc.$Y."\n";}function
login($Yd,$B){return
true;}function
tableName($Ag){return
h(isset($Ag["Engine"])?($Ag["Comment"]!=""?$Ag["Comment"]:$Ag["Name"]):"");}function
fieldName($j,$We=0){return
h(preg_replace('~\s+\[.*\]$~','',($j["comment"]!=""?$j["comment"]:$j["field"])));}function
selectLinks($Ag,$M=""){$a=$Ag["Name"];if($M!==null)echo'<p class="tabs"><a href="'.h(ME.'edit='.urlencode($a).$M).'">'.'New item'."</a>\n";}function
foreignKeys($Q){return
foreign_keys($Q);}function
backwardKeys($Q,$_g){$G=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($Q)."
ORDER BY ORDINAL_POSITION",null,"")as$H)$G[$H["TABLE_NAME"]]["keys"][$H["CONSTRAINT_NAME"]][$H["COLUMN_NAME"]]=$H["REFERENCED_COLUMN_NAME"];foreach($G
as$u=>$X){$z=adminer()->tableName(table_status1($u,true));if($z!=""){$Xf=preg_quote($_g);$K="(:|\\s*-)?\\s+";$G[$u]["name"]=(preg_match("(^$Xf$K(.+)|^(.+?)$K$Xf\$)iu",$z,$y)?$y[2].$y[3]:$z);}else
unset($G[$u]);}return$G;}function
backwardKeysPrint($ya,$H){foreach($ya
as$Q=>$xa){foreach($xa["keys"]as$Xa){$x=ME.'select='.urlencode($Q);$p=0;foreach($Xa
as$c=>$X)$x
.=where_link($p++,$c,$H[$X]);echo"<a href='".h($x)."'>".h($xa["name"])."</a>";$x=ME.'edit='.urlencode($Q);foreach($Xa
as$c=>$X)$x
.="&set".urlencode("[".bracket_escape($c)."]")."=".urlencode($H[$X]);echo"<a href='".h($x)."' title='".'New item'."'>+</a> ";}}}function
selectQuery($E,$tg,$lc=false){return"<!--\n".str_replace("--","--><!-- ",$E)."\n(".format_time($tg).")\n-->\n";}function
rowDescription($Q){foreach(fields($Q)as$j){if(preg_match("~varchar|character varying~",$j["type"]))return
idf_escape($j["field"]);}return"";}function
rowDescriptions($I,$Cc){$G=$I;foreach($I[0]as$u=>$X){if(list($Q,$q,$z)=$this->_foreignColumn($Cc,$u)){$hd=array();foreach($I
as$H)$hd[$H[$u]]=q($H[$u]);$Bb=$this->values[$Q];if(!$Bb)$Bb=get_key_vals("SELECT $q, $z FROM ".table($Q)." WHERE $q IN (".implode(", ",$hd).")");foreach($I
as$_e=>$H){if(isset($H[$u]))$G[$_e][$u]=(string)$Bb[$H[$u]];}}}return$G;}function
selectLink($X,$j){}function
selectVal($X,$x,$j,$bf){$G="$X";$x=h($x);if(is_blob($j)&&!is_utf8($X)){$G=lang_format(array('%d byte','%d bytes'),strlen($bf));if(preg_match("~^(GIF|\xFF\xD8\xFF|\x89PNG\x0D\x0A\x1A\x0A)~",$bf))$G="<img src='$x' alt='$G'>";}if(like_bool($j)&&$G!="")$G=(preg_match('~^(1|t|true|y|yes|on)$~i',$X)?'yes':'no');if($x)$G="<a href='$x'".(is_url($x)?target_blank():"").">$G</a>";if(preg_match('~date~',$j["type"]))$G="<div class='datetime'>$G</div>";return$G;}function
editVal($X,$j){if(preg_match('~date|timestamp~',$j["type"])&&$X!==null)return
preg_replace('~^(\d{2}(\d+))-(0?(\d+))-(0?(\d+))~','$1-$3-$5',$X);return$X;}function
config(){return
array();}function
selectColumnsPrint($J,$d){}function
selectSearchPrint($Z,$d,$t){$Z=(array)$_GET["where"];echo'<fieldset id="fieldset-search"><legend>'.'Search'."</legend><div>\n";$Hd=array();foreach($Z
as$u=>$X)$Hd[$X["col"]]=$u;$p=0;$k=fields($_GET["select"]);foreach($d
as$z=>$Ab){$j=$k[$z];if($j["type"]=="enum"||like_bool($j)){$u=$Hd[$z];$p--;echo"<div>".h($Ab).":".input_hidden("where[$p][col]",$z);$X=idx($Z[$u],"val");echo(like_bool($j)?"<select name='where[$p][val]'>".optionlist(array(""=>"",'no','yes'),$X,true)."</select>":enum_input("checkbox"," name='where[$p][val][]'",$j,(array)$X,'empty')),"</div>\n";unset($d[$z]);}elseif(is_array($Ue=$this->foreignKeyOptions($_GET["select"],$z))){if($k[$z]["null"])$Ue[0]='('.'empty'.')';$u=$Hd[$z];$p--;echo"<div>".h($Ab).input_hidden("where[$p][col]",$z).input_hidden("where[$p][op]","=").": <select name='where[$p][val]'>".optionlist($Ue,idx($Z[$u],"val"),true)."</select></div>\n";unset($d[$z]);}}$p=0;foreach($Z
as$X){if(($X["col"]==""||$d[$X["col"]])&&"$X[col]$X[val]"!=""){echo"<div><select name='where[$p][col]'><option value=''>(".'anywhere'.")".optionlist($d,$X["col"],true)."</select>",html_select("where[$p][op]",array(-1=>"")+adminer()->operators(),$X["op"]),"<input type='search' name='where[$p][val]' value='".h($X["val"])."'>".script("mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});","")."</div>\n";$p++;}}echo"<div><select name='where[$p][col]'><option value=''>(".'anywhere'.")".optionlist($d,null,true)."</select>",script("qsl('select').onchange = selectAddRow;",""),html_select("where[$p][op]",array(-1=>"")+adminer()->operators()),"<input type='search' name='where[$p][val]'></div>",script("mixin(qsl('input'), {onchange: function () { this.parentNode.firstChild.onchange(); }, onsearch: selectSearchSearch});"),"</div></fieldset>\n";}function
selectOrderPrint($We,$d,$t){$Ye=array();foreach($t
as$u=>$s){$We=array();foreach($s["columns"]as$X)$We[]=$d[$X];if(count(array_filter($We,'strlen'))>1&&$u!="PRIMARY")$Ye[$u]=implode(", ",$We);}if($Ye)echo'<fieldset><legend>'.'Sort'."</legend><div>","<select name='index_order'>".optionlist(array(""=>"")+$Ye,(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($w){echo"<fieldset><legend>".'Limit'."</legend><div>",html_select("limit",array("",50,100),$w),"</div></fieldset>\n";}function
selectLengthPrint($Ig){}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($Tb,$d){}function
selectColumnsProcess($d,$t){return
array(array(),array());}function
selectSearchProcess($k,$t){$G=array();foreach((array)$_GET["where"]as$u=>$Z){$Ua=$Z["col"];$Qe=$Z["op"];$X=$Z["val"];if(($u>=0&&$Ua!="")||$X!=""){$cb=array();foreach(($Ua!=""?array($Ua=>$k[$Ua]):$k)as$z=>$j){if($Ua!=""||is_numeric($X)||!preg_match(number_type(),$j["type"])){$z=idf_escape($z);if($Ua!=""&&$j["type"]=="enum"){$jd=array();foreach($X
as$vh){if(preg_match('~val-~',$vh))$jd[]=q(substr($vh,4));}$cb[]=(in_array("null",$X)?"$z IS NULL OR ":"").($jd?"$z IN (".implode(", ",$jd).")":"0");}else{$Jg=preg_match('~char|text|enum|set~',$j["type"]);$Y=adminer()->processInput($j,(!$Qe&&$Jg&&preg_match('~^[^%]+$~',$X)?"%$X%":$X));$cb[]=driver()->convertSearch($z,$Z,$j).($Y=="NULL"?" IS".($Qe==">="?" NOT":"")." $Y":(in_array($Qe,adminer()->operators())||$Qe=="="?" $Qe $Y":($Jg?" LIKE $Y":" IN (".($Y[0]=="'"?str_replace(",","', '",$Y):$Y).")")));if($u<0&&$X=="0")$cb[]="$z IS NULL";}}}$G[]=($cb?"(".implode(" OR ",$cb).")":"1 = 0");}}return$G;}function
selectOrderProcess($k,$t){$md=$_GET["index_order"];if($md!="")unset($_GET["order"][1]);if($_GET["order"])return
array(idf_escape(reset($_GET["order"])).($_GET["desc"]?" DESC":""));foreach(($md!=""?array($t[$md]):$t)as$s){if($md!=""||$s["type"]=="INDEX"){$Rc=array_filter($s["descs"]);$Ab=false;foreach($s["columns"]as$X){if(preg_match('~date|timestamp~',$k[$X]["type"])){$Ab=true;break;}}$G=array();foreach($s["columns"]as$u=>$X)$G[]=idf_escape($X).(($Rc?$s["descs"][$u]:$Ab)?" DESC":"");return$G;}}return
array();}function
selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function
selectLengthProcess(){return"100";}function
selectEmailProcess($Z,$Cc){return
false;}function
selectQueryBuild($J,$Z,$Lc,$We,$w,$A){return"";}function
messageQuery($E,$Kg,$lc=false){return" <span class='time'>".@date("H:i:s")."</span><!--\n".str_replace("--","--><!-- ",$E)."\n".($Kg?"($Kg)\n":"")."-->";}function
editRowPrint($Q,$k,$H,$U){}function
editFunctions($j){$G=array();if($j["null"]&&preg_match('~blob~',$j["type"]))$G["NULL"]='empty';$G[""]=($j["null"]||$j["auto_increment"]||like_bool($j)?"":"*");if(preg_match('~date|time~',$j["type"]))$G["now"]='now';if(preg_match('~_(md5|sha1)$~i',$j["field"],$y))$G[]=strtolower($y[1]);return$G;}function
editInput($Q,$j,$ra,$Y){if($j["type"]=="enum")return(isset($_GET["select"])?"<label><input type='radio'$ra value='orig' checked><i>".'original'."</i></label> ":"").enum_input("radio",$ra,$j,$Y,'empty');$Ue=$this->foreignKeyOptions($Q,$j["field"],$Y);if($Ue!==null)return(is_array($Ue)?"<select$ra>".optionlist($Ue,(string)$Y,true)."</select>":"<input value='".h($Y)."'$ra class='hidden'>"."<input value='".h($Ue)."' class='jsonly'>"."<div></div>".script("qsl('input').oninput = partial(whisper, '".ME."script=complete&source=".urlencode($Q)."&field=".urlencode($j["field"])."&value='); qsl('div').onclick = whisperClick;",""));if(like_bool($j))return'<input type="checkbox" value="1"'.(preg_match('~^(1|t|true|y|yes|on)$~i',$Y)?' checked':'')."$ra>";$Zc="";if(preg_match('~time~',$j["type"]))$Zc='HH:MM:SS';if(preg_match('~date|timestamp~',$j["type"]))$Zc='[yyyy]-mm-dd'.($Zc?" [$Zc]":"");if($Zc)return"<input value='".h($Y)."'$ra> ($Zc)";if(preg_match('~_(md5|sha1)$~i',$j["field"]))return"<input type='password' value='".h($Y)."'$ra>";return'';}function
editHint($Q,$j,$Y){return(preg_match('~\s+(\[.*\])$~',($j["comment"]!=""?$j["comment"]:$j["field"]),$y)?h(" $y[1]"):'');}function
processInput($j,$Y,$o=""){if($o=="now")return"$o()";$G=$Y;if(preg_match('~date|timestamp~',$j["type"])&&preg_match('(^'.str_replace('\$1','(?P<p1>\d*)',preg_replace('~(\\\\\\$([2-6]))~','(?P<p\2>\d{1,2})',preg_quote('$1-$3-$5'))).'(.*))',$Y,$y))$G=($y["p1"]!=""?$y["p1"]:($y["p2"]!=""?($y["p2"]<70?20:19).$y["p2"]:gmdate("Y")))."-$y[p3]$y[p4]-$y[p5]$y[p6]".end($y);$G=q($G);if($Y==""&&like_bool($j))$G="'0'";elseif($Y==""&&($j["null"]||!preg_match('~char|text~',$j["type"])))$G="NULL";elseif(preg_match('~^(md5|sha1)$~',$o))$G="$o($G)";return
unconvert_field($j,$G);}function
dumpOutput(){return
array();}function
dumpFormat(){return
array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function
dumpDatabase($g){}function
dumpTable($Q,$vg,$Cd=0){echo"\xef\xbb\xbf";}function
dumpData($Q,$vg,$E){$F=connection()->query($E,1);if($F){while($H=$F->fetch_assoc()){if($vg=="table"){dump_csv(array_keys($H));$vg="INSERT";}dump_csv($H);}}}function
dumpFilename($fd){return
friendly_url($fd);}function
dumpHeaders($fd,$ye=false){$hc="csv";header("Content-Type: text/csv; charset=utf-8");return$hc;}function
dumpFooter(){}function
importServerPath(){}function
homepage(){return
true;}function
navigation($ue){echo"<h1>".adminer()->name()." <span class='version'>".VERSION;$Ce=$_COOKIE["adminer_version"];echo" <a href='https://www.adminer.org/editor/#download'".target_blank()." id='version'>".(version_compare(VERSION,$Ce)<0?h($Ce):"")."</a>","</span></h1>\n";if($ue=="auth"){$uc=true;foreach((array)$_SESSION["pwds"]as$zh=>$hg){foreach($hg[""]as$V=>$B){if($B!==null){if($uc){echo"<ul id='logins'>",script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");$uc=false;}echo"<li><a href='".h(auth_url($zh,"",$V))."'>".($V!=""?h($V):"<i>".'empty'."</i>")."</a>\n";}}}}else{adminer()->databasesPrint($ue);$ca=adminer()->menuActions(array(),$ue);echo($ca?"<p class='links'>\n".implode("\n",$ca)."\n":"");if($ue!="db"&&$ue!="ns"){$R=table_status('',true);if(!$R)echo"<p class='message'>".'No tables.'."\n";else
adminer()->tablesPrint($R);}}}function
syntaxHighlighting($S){}function
databasesPrint($ue){}function
menuActions($ca,$ue){return$ca;}function
tablesPrint($S){echo"<ul id='tables'>",script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($S
as$H){echo'<li>';$z=adminer()->tableName($H);if($z!="")echo"<a href='".h(ME).'select='.urlencode($H["Name"])."'".bold($_GET["select"]==$H["Name"]||$_GET["edit"]==$H["Name"],"select")." title='".'Select data'."'>$z</a>\n";}echo"</ul>\n";}function
_foreignColumn($Cc,$c){foreach((array)$Cc[$c]as$Bc){if(count($Bc["source"])==1){$z=adminer()->rowDescription($Bc["table"]);if($z!=""){$q=idf_escape($Bc["target"][0]);return
array($Bc["table"],$q,$z);}}}}private
function
foreignKeyOptions($Q,$c,$Y=null){if(list($Eg,$q,$z)=$this->_foreignColumn(column_foreign_keys($Q),$c)){$G=&$this->values[$Eg];if($G===null){$R=table_status1($Eg);$G=($R["Rows"]>1000?"":array(""=>"")+get_key_vals("SELECT $q, $z FROM ".table($Eg)." ORDER BY 2"));}if(!$G&&$Y!==null)return
get_val("SELECT $z FROM ".table($Eg)." WHERE $q = ".q($Y));return$G;}}}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($tf){if($tf===null){$tf=array();$Aa="adminer-plugins";if(is_dir($Aa)){foreach(glob("$Aa/*.php")as$l)$this->includeOnce($l);}$Yc=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$Aa.php")){$kd=$this->includeOnce("$Aa.php");if(is_array($kd)){foreach($kd
as$sf)$tf[get_class($sf)]=$sf;}else$this->error
.=sprintf('%s must <a%s>return an array</a>.',"<b>$Aa.php</b>",$Yc)."<br>";}foreach(get_declared_classes()as$Ra){if(!$tf[$Ra]&&(preg_match('~^Adminer\w~i',$Ra)||is_subclass_of($Ra,'Adminer\Plugin'))){$Kf=new
\ReflectionClass($Ra);$hb=$Kf->getConstructor();if($hb&&$hb->getNumberOfRequiredParameters())$this->error
.=sprintf('<a%s>Configure</a> %s in %s.',$Yc,"<b>$Ra</b>","<b>$Aa.php</b>")."<br>";else$tf[$Ra]=new$Ra;}}}$this->plugins=$tf;$fa=new
Adminer;$tf[]=$fa;$Kf=new
\ReflectionObject($fa);foreach($Kf->getMethods()as$te){foreach($tf
as$sf){$z=$te->getName();if(method_exists($sf,$z))$this->hooks[$z][]=$sf;}}}function
includeOnce($l){return
include_once"./$l";}function
__call($z,array$if){$ma=array();foreach($if
as$u=>$X)$ma[]=&$if[$u];$G=null;foreach($this->hooks[$z]as$sf){$Y=call_user_func_array(array($sf,$z),$ma);if($Y!==null){if(!self::$append[$z])return$Y;$G=$Y+(array)$G;}}return$G;}}abstract
class
Plugin{protected$translations=array();function
description(){return$this->lang('');}function
screenshot(){return"";}protected
function
lang($r,$Ie=null){$ma=func_get_args();$ma[0]=idx($this->translations[LANG],$r)?:$r;return
call_user_func_array('Adminer\lang_format',$ma);}}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($L,$V,$B){mysqli_report(MYSQLI_REPORT_OFF);list($bd,$C)=host_port($L);$N=adminer()->connectSsl();if($N)$this->ssl_set($N['key'],$N['cert'],$N['ca'],'','');$G=@$this->real_connect(($L!=""?$bd:ini_get("mysqli.default_host")),($L.$V!=""?$V:ini_get("mysqli.default_user")),($L.$V.$B!=""?$B:ini_get("mysqli.default_pw")),null,(is_numeric($C)?intval($C):ini_get("mysqli.default_port")),(is_numeric($C)?null:$C),($N?($N['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($G?'':$this->error);}function
set_charset($La){if(parent::set_charset($La))return
true;parent::set_charset('utf8');return$this->query("SET NAMES $La");}function
next_result(){return
self::more_results()&&parent::next_result();}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
extends
SqlDb{private$link;function
attach($L,$V,$B){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(($L!=""?$L:ini_get("mysql.default_host")),($L.$V!=""?$V:ini_get("mysql.default_user")),($L.$V.$B!=""?$B: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($La){return
mysql_set_charset($La,$this->link)||mysql_set_charset('utf8',$this->link);}function
quote($P){return"'".mysql_real_escape_string($P,$this->link)."'";}function
select_db($vb){return
mysql_select_db($vb,$this->link);}function
query($E,$fh=false){$F=@($fh?mysql_unbuffered_query($E,$this->link):mysql_query($E,$this->link));$this->error="";if(!$F){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return
false;}if($F===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return
true;}return
new
Result($F);}}class
Result{var$num_rows;private$result;private$offset=0;function
__construct($F){$this->result=$F;$this->num_rows=mysql_num_rows($F);}function
fetch_assoc(){return
mysql_fetch_assoc($this->result);}function
fetch_row(){return
mysql_fetch_row($this->result);}function
fetch_field(){$G=mysql_fetch_field($this->result,$this->offset++);$G->orgtable=$G->table;$G->charsetnr=($G->blob?63:0);return$G;}}}elseif(extension_loaded("pdo_mysql")){class
Db
extends
PdoDb{var$extension="PDO_MySQL";function
attach($L,$V,$B){$Ue=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$N=adminer()->connectSsl();if($N){if($N['key'])$Ue[\PDO::MYSQL_ATTR_SSL_KEY]=$N['key'];if($N['cert'])$Ue[\PDO::MYSQL_ATTR_SSL_CERT]=$N['cert'];if($N['ca'])$Ue[\PDO::MYSQL_ATTR_SSL_CA]=$N['ca'];if(isset($N['verify']))$Ue[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$N['verify'];}list($bd,$C)=host_port($L);return$this->dsn("mysql:charset=utf8".($bd!=""?";host=$bd":'').($C?(is_numeric($C)?";port=":";unix_socket=").$C:""),$V,$B,$Ue);}function
set_charset($La){return$this->query("SET NAMES $La");}function
select_db($vb){return$this->query("USE ".idf_escape($vb));}function
query($E,$fh=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$fh);return
parent::query($E,$fh);}}}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($L,$V,$B){$e=parent::connect($L,$V,$B);if(is_string($e)){if(function_exists('iconv')&&!is_utf8($e)&&strlen($Uf=iconv("windows-1250","utf-8",$e))>strlen($e))$e=$Uf;return$e;}$e->set_charset(charset($e));$e->query("SET sql_quote_show_create = 1, autocommit = 1");$e->flavor=(preg_match('~MariaDB~',$e->server_info)?'maria':'mysql');add_driver(DRIVER,($e->flavor=='maria'?"MariaDB":"MySQL"));return$e;}function
__construct(Db$e){parent::__construct($e);$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,$e))$this->types['Strings']["json"]=4294967295;if(min_version('',10.7,$e)){$this->types['Strings']["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version('',10.5,$e)){$this->types['Network']["inet6"]=39;if(min_version('','10.10',$e))$this->types['Network']["inet4"]=15;}if(min_version(9,11.7,$e))$this->types['Numbers']["vector"]=16383;if(min_version(5.7,10.2,$e))$this->generated=array("STORED","VIRTUAL");}function
unconvertFunction(array$j){return(preg_match("~binary~",$j["type"])?"<code class='jush-sql'>UNHEX</code>":($j["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"<code>b''</code>"):($j["type"]=="vector"?"<code class='jush-sql'>".($this->conn->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."</code>":(preg_match("~geometry|point|linestring|polygon~",$j["type"])?"<code class='jush-sql'>GeomFromText</code>":""))));}function
insert($Q,array$M){return($M?parent::insert($Q,$M):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function
insertUpdate($Q,array$I,array$yf){$d=array_keys(reset($I));$wf="INSERT INTO ".table($Q)." (".implode(", ",$d).") VALUES\n";$yh=array();foreach($d
as$u)$yh[$u]="$u = VALUES($u)";$xg="\nON DUPLICATE KEY UPDATE ".implode(", ",$yh);$yh=array();$v=0;foreach($I
as$M){$Y="(".implode(", ",$M).")";if($yh&&(strlen($wf)+$v+strlen($Y)+strlen($xg)>1e6)){if(!queries($wf.implode(",\n",$yh).$xg))return
false;$yh=array();$v=0;}$yh[]=$Y;$v+=strlen($Y)+2;}return
queries($wf.implode(",\n",$yh).$xg);}function
slowQuery($E,$Lg){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$Lg FOR $E";elseif(preg_match('~^(SELECT\b)(.+)~is',$E,$y))return"$y[1] /*+ MAX_EXECUTION_TIME(".($Lg*1000).") */ $y[2]";}}function
convertSearch($r,array$X,array$j){return(preg_match('~char|text|enum|set~',$j["type"])&&!preg_match("~^utf8~",$j["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($r USING ".charset($this->conn).")":$r);}function
quoteBinary($Uf){return"X".q(bin2hex($Uf));}function
warnings(){$F=$this->conn->query("SHOW WARNINGS");if($F&&$F->num_rows){ob_start();print_select_result($F);return
ob_get_clean();}}function
tableHelp($z,$Cd=false){$ae=($this->conn->flavor=='maria');if(information_schema(DB))return
strtolower("information-schema-".($ae?"$z-table/":str_replace("_","-",$z)."-table.html"));if(DB=="mysql")return($ae?"mysql$z-table/":"system-schema.html");}function
partitionsInfo($Q){$Gc="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($Q);$F=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $Gc ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$G=array();list($G["partition_by"],$G["partition"],$G["partitions"])=$F->fetch_row();$nf=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $Gc AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$G["partition_names"]=array_keys($nf);$G["partition_values"]=array_values($nf);return$G;}function
hasCStyleEscapes(){static$Ja;if($Ja===null){$rg=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Ja=(strpos($rg,'NO_BACKSLASH_ESCAPES')===false);}return$Ja;}function
engines(){$G=array();foreach(get_rows("SHOW ENGINES")as$H){if(preg_match("~YES|DEFAULT~",$H["Support"]))$G[]=$H["Engine"];}return$G;}function
indexAlgorithms(array$Ag){return(preg_match('~^(MEMORY|NDB)$~',$Ag["Engine"])?array("HASH","BTREE"):array());}}function
idf_escape($r){return"`".str_replace("`","``",$r)."`";}function
table($r){return
idf_escape($r);}function
get_databases($zc){$G=get_session("dbs");if($G===null){$E="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$G=($zc?slow_query($E):get_vals($E));restart_session();set_session("dbs",$G);stop_session();}return$G;}function
limit($E,$Z,$w,$_=0,$K=" "){return" $E$Z".($w?$K."LIMIT $w".($_?" OFFSET $_":""):"");}function
limit1($Q,$E,$Z,$K="\n"){return
limit($E,$Z,1,0,$K);}function
db_collation($g,array$Wa){$G=null;$nb=get_val("SHOW CREATE DATABASE ".idf_escape($g),1);if(preg_match('~ COLLATE ([^ ]+)~',$nb,$y))$G=$y[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$nb,$y))$G=$Wa[$y[1]][-1];return$G;}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$wb){$G=array();foreach($wb
as$g)$G[$g]=count(get_vals("SHOW TABLES IN ".idf_escape($g)));return$G;}function
table_status($z="",$mc=false){$G=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() ".($z!=""?"AND TABLE_NAME = ".q($z):"ORDER BY Name"):"SHOW TABLE STATUS".($z!=""?" LIKE ".q(addcslashes($z,"%_\\")):""))as$H){if($H["Engine"]=="InnoDB")$H["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$H["Comment"]);if(!isset($H["Engine"]))$H["Comment"]="";if($z!="")$H["Name"]=$z;$G[$H["Name"]]=$H;}return$G;}function
is_view(array$R){return$R["Engine"]===null;}function
fk_support(array$R){return
preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$R["Engine"]);}function
fields($Q){$ae=(connection()->flavor=='maria');$G=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($Q)." ORDER BY ORDINAL_POSITION")as$H){$j=$H["COLUMN_NAME"];$T=$H["COLUMN_TYPE"];$Kc=$H["GENERATION_EXPRESSION"];$kc=$H["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$kc,$Jc);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$T,$de);$h=$H["COLUMN_DEFAULT"];if($h!=""){$Bd=preg_match('~text|json~',$de[1]);if(!$ae&&$Bd)$h=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($h));if($ae||$Bd){$h=($h=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($y){return
stripslashes(str_replace("''","'",$y[1]));},$h));}if(!$ae&&preg_match('~binary~',$de[1])&&preg_match('~^0x(\w*)$~',$h,$y))$h=pack("H*",$y[1]);}$G[$j]=array("field"=>$j,"full_type"=>$T,"type"=>$de[1],"length"=>$de[2],"unsigned"=>ltrim($de[3].$de[4]),"default"=>($Jc?($ae?$Kc:stripslashes($Kc)):$h),"null"=>($H["IS_NULLABLE"]=="YES"),"auto_increment"=>($kc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$kc,$y)?$y[1]:""),"collation"=>$H["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$H[PRIVILEGES],where,order")),"comment"=>$H["COLUMN_COMMENT"],"primary"=>($H["COLUMN_KEY"]=="PRI"),"generated"=>($Jc[1]=="PERSISTENT"?"STORED":$Jc[1]),);}return$G;}function
indexes($Q,$f=null){$G=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$f)as$H){$z=$H["Key_name"];$G[$z]["type"]=($z=="PRIMARY"?"PRIMARY":($H["Index_type"]=="FULLTEXT"?"FULLTEXT":($H["Non_unique"]?(preg_match('~^(SPATIAL|VECTOR)$~',$H["Index_type"])?$H["Index_type"]:"INDEX"):"UNIQUE")));$G[$z]["columns"][]=$H["Column_name"];$G[$z]["lengths"][]=($H["Index_type"]=="SPATIAL"?null:$H["Sub_part"]);$G[$z]["descs"][]=null;$G[$z]["algorithm"]=$H["Index_type"];}return$G;}function
foreign_keys($Q){static$pf='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$G=array();$ob=get_val("SHOW CREATE TABLE ".table($Q),1);if($ob){preg_match_all("~CONSTRAINT ($pf) FOREIGN KEY ?\\(((?:$pf,? ?)+)\\) REFERENCES ($pf)(?:\\.($pf))? \\(((?:$pf,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$ob,$ee,PREG_SET_ORDER);foreach($ee
as$y){preg_match_all("~$pf~",$y[2],$og);preg_match_all("~$pf~",$y[5],$Eg);$G[idf_unescape($y[1])]=array("db"=>idf_unescape($y[4]!=""?$y[3]:$y[4]),"table"=>idf_unescape($y[4]!=""?$y[4]:$y[3]),"source"=>array_map('Adminer\idf_unescape',$og[0]),"target"=>array_map('Adminer\idf_unescape',$Eg[0]),"on_delete"=>($y[6]?:"RESTRICT"),"on_update"=>($y[7]?:"RESTRICT"),);}}return$G;}function
view($z){return
array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($z),1)));}function
collations(){$G=array();foreach(get_rows("SHOW COLLATION")as$H){if($H["Default"])$G[$H["Charset"]][-1]=$H["Collation"];else$G[$H["Charset"]][]=$H["Collation"];}ksort($G);foreach($G
as$u=>$X)sort($G[$u]);return$G;}function
information_schema($g){return($g=="information_schema")||(min_version(5.5)&&$g=="performance_schema");}function
error(){return
h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function
create_database($g,$Va){return
queries("CREATE DATABASE ".idf_escape($g).($Va?" COLLATE ".q($Va):""));}function
drop_databases(array$wb){$G=apply_queries("DROP DATABASE",$wb,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$G;}function
rename_database($z,$Va){$G=false;if(create_database($z,$Va)){$S=array();$Bh=array();foreach(tables_list()as$Q=>$T){if($T=='VIEW')$Bh[]=$Q;else$S[]=$Q;}$G=(!$S&&!$Bh)||move_tables($S,$Bh,$z);drop_databases($G?array(DB):array());}return$G;}function
auto_increment(){$ua=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$s){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$s["columns"],true)){$ua="";break;}if($s["type"]=="PRIMARY")$ua=" UNIQUE";}}return" AUTO_INCREMENT$ua";}function
alter_table($Q,$z,array$k,array$Ac,$ab,$Wb,$Va,$ta,$mf){$b=array();foreach($k
as$j){if($j[1]){$h=$j[1][3];if(preg_match('~ GENERATED~',$h)){$j[1][3]=(connection()->flavor=='maria'?"":$j[1][2]);$j[1][2]=$h;}$b[]=($Q!=""?($j[0]!=""?"CHANGE ".idf_escape($j[0]):"ADD"):" ")." ".implode($j[1]).($Q!=""?$j[2]:"");}else$b[]="DROP ".idf_escape($j[0]);}$b=array_merge($b,$Ac);$O=($ab!==null?" COMMENT=".q($ab):"").($Wb?" ENGINE=".q($Wb):"").($Va?" COLLATE ".q($Va):"").($ta!=""?" AUTO_INCREMENT=$ta":"");if($mf){$nf=array();if($mf["partition_by"]=='RANGE'||$mf["partition_by"]=='LIST'){foreach($mf["partition_names"]as$u=>$X){$Y=$mf["partition_values"][$u];$nf[]="\n  PARTITION ".idf_escape($X)." VALUES ".($mf["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$O
.="\nPARTITION BY $mf[partition_by]($mf[partition])";if($nf)$O
.=" (".implode(",",$nf)."\n)";elseif($mf["partitions"])$O
.=" PARTITIONS ".(+$mf["partitions"]);}elseif($mf===null)$O
.="\nREMOVE PARTITIONING";if($Q=="")return
queries("CREATE TABLE ".table($z)." (\n".implode(",\n",$b)."\n)$O");if($Q!=$z)$b[]="RENAME TO ".table($z);if($O)$b[]=ltrim($O);return($b?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$b)):true);}function
alter_indexes($Q,$b){$Ka=array();foreach($b
as$X)$Ka[]=($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(",",$Ka));}function
truncate_tables(array$S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views(array$Bh){return
queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Bh)));}function
drop_tables(array$S){return
queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$S)));}function
move_tables(array$S,array$Bh,$Eg){$Nf=array();foreach($S
as$Q)$Nf[]=table($Q)." TO ".idf_escape($Eg).".".table($Q);if(!$Nf||queries("RENAME TABLE ".implode(", ",$Nf))){$zb=array();foreach($Bh
as$Q)$zb[table($Q)]=view($Q);connection()->select_db($Eg);$g=idf_escape(DB);foreach($zb
as$z=>$Ah){if(!queries("CREATE VIEW $z AS ".str_replace(" $g."," ",$Ah["select"]))||!queries("DROP VIEW $g.$z"))return
false;}return
true;}return
false;}function
copy_tables(array$S,array$Bh,$Eg){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($S
as$Q){$z=($Eg==DB?table("copy_$Q"):idf_escape($Eg).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $z"))||!queries("CREATE TABLE $z LIKE ".table($Q))||!queries("INSERT INTO $z SELECT * FROM ".table($Q)))return
false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$H){$Zg=$H["Trigger"];if(!queries("CREATE TRIGGER ".($Eg==DB?idf_escape("copy_$Zg"):idf_escape($Eg).".".idf_escape($Zg))." $H[Timing] $H[Event] ON $z FOR EACH ROW\n$H[Statement];"))return
false;}}foreach($Bh
as$Q){$z=($Eg==DB?table("copy_$Q"):idf_escape($Eg).".".table($Q));$Ah=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $z"))||!queries("CREATE VIEW $z AS $Ah[select]"))return
false;}return
true;}function
trigger($z,$Q){if($z=="")return
array();$I=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($z));return
reset($I);}function
triggers($Q){$G=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$H)$G[$H["Trigger"]]=array($H["Timing"],$H["Event"]);return$G;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
routine($z,$T){$k=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($z)."
ORDER BY ORDINAL_POSITION");$G=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($z))->fetch_assoc();if($k&&$k[0]['field']=='')$G['returns']=array_shift($k);$G['fields']=$k;return$G;}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($z,array$H){return
idf_escape($z);}function
last_id($F){return
get_val("SELECT LAST_INSERT_ID()");}function
explain(Db$e,$E){return$e->query("EXPLAIN ".(min_version(5.7)?"":"PARTITIONS ").$E);}function
found_rows(array$R,array$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function
create_sql($Q,$ta,$vg){$G=get_val("SHOW CREATE TABLE ".table($Q),1);if(!$ta)$G=preg_replace('~ AUTO_INCREMENT=\d+~','',$G);return$G;}function
truncate_sql($Q){return"TRUNCATE ".table($Q);}function
use_sql($vb,$vg=""){$z=idf_escape($vb);$G="";if(preg_match('~CREATE~',$vg)&&($nb=get_val("SHOW CREATE DATABASE $z",1))){set_utf8mb4($nb);if($vg=="DROP+CREATE")$G="DROP DATABASE IF EXISTS $z;\n";$G
.="$nb;\n";}return$G."USE $z";}function
trigger_sql($Q){$G="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$H)$G
.="\nCREATE TRIGGER ".idf_escape($H["Trigger"])." $H[Timing] $H[Event] ON ".table($H["Table"])." FOR EACH ROW\n$H[Statement];;\n";return$G;}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$j){if(preg_match("~binary~",$j["type"]))return"HEX(".idf_escape($j["field"]).")";if($j["type"]=="bit")return"BIN(".idf_escape($j["field"])." + 0)";if($j["type"]=="vector")return(connection()->flavor=='maria'?"VEC_ToText":"VECTOR_TO_STRING")."(".idf_escape($j["field"]).")";if(preg_match("~geometry|point|linestring|polygon~",$j["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($j["field"]).")";}function
unconvert_field(array$j,$G){if(preg_match("~binary~",$j["type"]))$G="UNHEX($G)";if($j["type"]=="bit")$G="CONVERT(b$G, UNSIGNED)";if($j["type"]=="vector")$G=(connection()->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."($G)";if(preg_match("~geometry|point|linestring|polygon~",$j["type"])){$wf=(min_version(8)?"ST_":"");$G=$wf."GeomFromText($G, $wf"."SRID($j[field]))";}return$G;}function
support($nc){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':'').')$~',$nc);}function
kill_process($q){return
queries("KILL ".number($q));}function
connection_id(){return"SELECT CONNECTION_ID()";}function
max_connections(){return
get_val("SELECT @@max_connections");}function
types(){return
array();}function
type_values($q){return"";}function
schemas(){return
array();}function
get_schema(){return"";}function
set_schema($Vf,$f=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($Ng,$i="",$Ga=array(),$Og=""){page_headers();if(is_ajax()&&$i){page_messages($i);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$Pg=$Ng.($Og!=""?": $Og":"");$Qg=strip_tags($Pg.(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>',$Qg,'</title>
<link rel="stylesheet" href="',h(preg_replace("~\\?.*~","",ME)."?file=default.css&version=5.5.1"),'">
';$rb=adminer()->css();if(is_int(key($rb)))$rb=array_fill_keys($rb,'light');$Tc=in_array('light',$rb)||in_array('',$rb);$Qc=in_array('dark',$rb)||in_array('',$rb);$tb=($Tc?($Qc?null:false):($Qc?:null));$me=" media='(prefers-color-scheme: dark)'";if($tb!==false)echo"<link rel='stylesheet'".($tb?"":$me)." href='".h(preg_replace("~\\?.*~","",ME)."?file=dark.css&version=5.5.1")."'>\n";echo"<meta name='color-scheme' content='".($tb===null?"light dark":($tb?"dark":"light"))."'>\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.5.1");if(adminer()->head($tb))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($rb
as$qh=>$ve){$ra=($ve=='dark'&&!$tb?$me:($ve=='light'&&$Qc?" media='(prefers-color-scheme: light)'":""));echo"<link rel='stylesheet'$ra href='".h($qh)."'>\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($Ga!==null){$x=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'<p id="breadcrumb"><a href="'.h($x?:".").'">'.get_driver(DRIVER).'</a> » ';$x=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$L=adminer()->serverName(SERVER);$L=($L!=""?$L:'Server');if($Ga===false)echo"$L\n";else{echo"<a href='".h($x)."' accesskey='1' title='Alt+Shift+1'>$L</a> » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ga)))echo'<a href="'.h($x."&db=".urlencode(DB).(support("scheme")?"&ns=":"")).'">'.h(DB).'</a> » ';if(is_array($Ga)){if($_GET["ns"]!="")echo'<a href="'.h(substr(ME,0,-1)).'">'.h($_GET["ns"]).'</a> » ';foreach($Ga
as$u=>$X){$Ab=(is_array($X)?$X[1]:h($X));if($Ab!="")echo"<a href='".h(ME."$u=").urlencode(is_array($X)?$X[0]:$X)."'>$Ab</a> » ";}}echo"$Ng\n";}}echo"<h2>$Pg</h2>\n","<div id='ajaxstatus' class='jsonly hidden'></div>\n";restart_session();page_messages($i);$wb=&get_session("dbs");if(DB!=""&&$wb&&!in_array(DB,$wb,true))$wb=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$qb){$Vc=array();foreach($qb
as$u=>$X)$Vc[]="$u $X";header("Content-Security-Policy: ".implode("; ",$Vc));}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$Ee;if(!$Ee)$Ee=base64_encode(rand_string());return$Ee;}function
page_messages($i){$ph=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$pe=idx($_SESSION["messages"],$ph);if($pe){echo"<div class='message'>".implode("</div>\n<div class='message'>",$pe)."</div>".script("messagesPrint();");unset($_SESSION["messages"][$ph]);}if($i)echo"<div class='error'>$i</div>\n";if(adminer()->error)echo"<div class='error'>".adminer()->error."</div>\n";}function
page_footer($ue=""){echo"</div>\n\n<div id='foot' class='foot'>\n<div id='menu'>\n";adminer()->navigation($ue);echo"</div>\n";if($ue!="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($_e){while($_e>=2147483648)$_e-=4294967296;while($_e<=-2147483649)$_e+=4294967296;return(int)$_e;}function
long2str(array$W,$Dh){$Uf='';foreach($W
as$X)$Uf
.=pack('V',$X);if($Dh)return
substr($Uf,0,end($W));return$Uf;}function
str2long($Uf,$Dh){$W=array_values(unpack('V*',str_pad($Uf,4*ceil(strlen($Uf)/4),"\0")));if($Dh)$W[]=strlen($Uf);return$W;}function
xxtea_mx($Hh,$Gh,$yg,$Fd){return
int32((($Hh>>5&0x7FFFFFF)^$Gh<<2)+(($Gh>>3&0x1FFFFFFF)^$Hh<<4))^int32(($yg^$Gh)+($Fd^$Hh));}function
encrypt_string($ug,$u){if($ug=="")return"";$u=array_values(unpack("V*",pack("H*",md5($u))));$W=str2long($ug,true);$_e=count($W)-1;$Hh=$W[$_e];$Gh=$W[0];$Df=floor(6+52/($_e+1));$yg=0;while($Df-->0){$yg=int32($yg+0x9E3779B9);$Pb=$yg>>2&3;for($ff=0;$ff<$_e;$ff++){$Gh=$W[$ff+1];$ze=xxtea_mx($Hh,$Gh,$yg,$u[$ff&3^$Pb]);$Hh=int32($W[$ff]+$ze);$W[$ff]=$Hh;}$Gh=$W[0];$ze=xxtea_mx($Hh,$Gh,$yg,$u[$ff&3^$Pb]);$Hh=int32($W[$_e]+$ze);$W[$_e]=$Hh;}return
long2str($W,false);}function
decrypt_string($ug,$u){if($ug=="")return"";if(!$u)return
false;$u=array_values(unpack("V*",pack("H*",md5($u))));$W=str2long($ug,false);$_e=count($W)-1;$Hh=$W[$_e];$Gh=$W[0];$Df=floor(6+52/($_e+1));$yg=int32($Df*0x9E3779B9);while($yg){$Pb=$yg>>2&3;for($ff=$_e;$ff>0;$ff--){$Hh=$W[$ff-1];$ze=xxtea_mx($Hh,$Gh,$yg,$u[$ff&3^$Pb]);$Gh=int32($W[$ff]-$ze);$W[$ff]=$Gh;}$Hh=$W[$_e];$ze=xxtea_mx($Hh,$Gh,$yg,$u[$ff&3^$Pb]);$Gh=int32($W[0]-$ze);$W[0]=$Gh;$yg=int32($yg-0x9E3779B9);}return
long2str($W,true);}$rf=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($u)=explode(":",$X);$rf[$u]=$X;}}function
add_invalid_login(){$_a=get_temp_dir()."/adminer-invalid";foreach(glob("$_a*")?:array($_a)as$l){$n=file_open_lock($l);if($n)break;}if(!$n)$n=file_open_lock("$_a-".rand_string());if(!$n)return;$yd=json_decode(stream_get_contents($n),true);$Kg=time();if($yd){foreach($yd
as$zd=>$X){if($X[0]<$Kg)unset($yd[$zd]);}}$xd=&$yd[adminer()->bruteForceKey()];if(!$xd)$xd=array($Kg+30*60,0);$xd[1]++;file_write_unlock($n,json_encode($yd));}function
check_invalid_login(array&$rf){$yd=array();foreach(glob(get_temp_dir()."/adminer-invalid*")as$l){$n=file_open_lock($l);if($n){$yd=json_decode(stream_get_contents($n),true);file_unlock($n);break;}}$xd=idx($yd,adminer()->bruteForceKey(),array());$De=($xd[1]>29?$xd[0]-time():0);if($De>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($De/60)),$rf);}$sa=$_POST["auth"];if($sa){session_regenerate_id();$zh=$sa["driver"];$L=$sa["server"];$V=$sa["username"];$B=(string)$sa["password"];$g=$sa["db"];set_password($zh,$L,$V,$B);$_SESSION["db"][$zh][$L][$V][$g]=true;if($sa["permanent"]){$u=implode("-",array_map('base64_encode',array($zh,$L,$V,$g)));$Af=adminer()->permanentLogin(true);$rf[$u]="$u:".base64_encode($Af?encrypt_string($B,$Af):"");cookie("adminer_permanent",implode(" ",$rf));}if(count($_POST)==1||DRIVER!=$zh||SERVER!=$L||$_GET["username"]!==$V||DB!=$g)redirect(auth_url($zh,$L,$V,$g));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$u)set_session($u,null);unset_permanent($rf);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($rf&&!$_SESSION["pwds"]){session_regenerate_id();$Af=adminer()->permanentLogin();foreach($rf
as$u=>$X){list(,$Qa)=explode(":",$X);list($zh,$L,$V,$g)=array_map('base64_decode',explode("-",$u));set_password($zh,$L,$V,decrypt_string(base64_decode($Qa),$Af));$_SESSION["db"][$zh][$L][$V][$g]=true;}}function
unset_permanent(array&$rf){foreach($rf
as$u=>$X){list($zh,$L,$V,$g)=array_map('base64_decode',explode("-",$u));if($zh==DRIVER&&$L==SERVER&&$V==$_GET["username"]&&$g==DB)unset($rf[$u]);}cookie("adminer_permanent",implode(" ",$rf));}function
auth_error($i,array&$rf){$ig=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$ig]||$_GET[$ig])&&!$_SESSION["token"])$i='Session expired, please login again.';else{restart_session();add_invalid_login();$B=get_password();if($B!==null){if($B===false)$i
.=($i?'<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($rf);}}if(!$_COOKIE[$ig]&&$_GET[$ig]&&ini_bool("session.use_only_cookies"))$i='Session support must be enabled.';$if=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$if["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$i,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($rf);page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$e='';if(isset($_GET["username"])&&is_string(get_password())){list($bd,$C)=host_port(SERVER);if(preg_match('~[^-\w.:/]~',$bd.$C))auth_error('Invalid server.',$rf);if(preg_match('~^-?\d+~',$C,$y)&&($y[0]<1024||$y[0]>65535))auth_error('Connecting to privileged ports is not allowed.',$rf);check_invalid_login($rf);$pb=adminer()->credentials();$e=Driver::connect($pb[0],$pb[1],$pb[2]);if(is_object($e)){Db::$instance=$e;Driver::$instance=new
Driver($e);if($e->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Yd=null;if(!is_object($e)||($Yd=adminer()->login($_GET["username"],get_password()))!==true){$i=(is_string($e)?nl_br(h($e)):(is_string($Yd)?$Yd:'Invalid credentials.')).(preg_match('~^ | $~',get_password())?'<br>'.'There is a space in the input password which might be the cause.':'');auth_error($i,$rf);}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($sa&&$_POST["token"])$_POST["token"]=get_token();$i='';if($_POST){if(!verify_token()){$rd="max_input_vars";$ke=ini_get($rd);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$u){$X=ini_get($u);if($X&&(!$ke||$X<$ke)){$rd=$u;$ke=$X;}}}$i=(!$_POST["token"]&&$ke?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$rd'"):'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"){$i=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$i
.=' '.'You can upload a big SQL file via FTP and import it from server.';}function
doc_link(array$of,$Gg=""){return"";}function
email_header($Vc){return"=?UTF-8?B?".base64_encode($Vc)."?=";}function
send_mail($Sb,$wg,$oe,$Gc="",array$rc=array()){$ac=PHP_EOL;$oe=str_replace("\n",$ac,wordwrap(str_replace("\r","","$oe\n")));$Fa=uniqid("boundary");$qa="";foreach((array)$rc["error"]as$u=>$X){if(!$X)$qa
.="--$Fa$ac"."Content-Type: ".str_replace("\n","",$rc["type"][$u]).$ac."Content-Disposition: attachment; filename=\"".preg_replace('~["\n]~','',$rc["name"][$u])."\"$ac"."Content-Transfer-Encoding: base64$ac$ac".chunk_split(base64_encode(file_get_contents($rc["tmp_name"][$u])),76,$ac).$ac;}$Ba="";$Wc="Content-Type: text/plain; charset=utf-8$ac"."Content-Transfer-Encoding: 8bit";if($qa){$qa
.="--$Fa--$ac";$Ba="--$Fa$ac$Wc$ac$ac";$Wc="Content-Type: multipart/mixed; boundary=\"$Fa\"";}$Wc
.=$ac."MIME-Version: 1.0$ac"."X-Mailer: Adminer Editor".($Gc?$ac."From: ".str_replace("\n","",$Gc):"");return
mail($Sb,email_header($wg),$Ba.$oe.$qa,$Wc);}function
like_bool(array$j){return$j["type"]=="bool"||(preg_match('~bit|tinyint~',$j["type"])&&$j["length"]==1);}connection()->select_db(adminer()->database());if(support("scheme"))set_schema(get_schema());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"];$k=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$J=array(idf_escape($_GET["field"]));$F=driver()->select($a,$J,array(where($_GET,$k)),$J);$H=($F?$F->fetch_row():array());echo
driver()->value($H[0],$k[$_GET["field"]]);exit;}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$k=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$k):""):where($_GET,$k));$U=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($k
as$z=>$j){if((!$U&&!isset($j["privileges"]["insert"]))||adminer()->fieldName($j)=="")unset($k[$z]);}if($_POST&&!$i&&!isset($_GET["select"])){$Xd=$_POST["referer"];if($_POST["insert"])$Xd=($U?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$Xd))$Xd=ME."select=".urlencode($a);$t=indexes($a);$ih=unique_array($_GET["where"],$t);$Gf="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($Xd,'Item has been deleted.',driver()->delete($a,$Gf,$ih?0:1));else{$M=array();foreach($k
as$z=>$j){$X=process_input($j);if($X!==false&&$X!==null)$M[idf_escape($z)]=$X;}if($U){if(!$M)redirect($Xd);queries_redirect($Xd,'Item has been updated.',driver()->update($a,$M,$Gf,$ih?0:1));if(is_ajax()){page_headers();page_messages($i);exit;}}else{$F=driver()->insert($a,$M);$Nd=($F?last_id($F):0);queries_redirect($Xd,sprintf('Item%s has been inserted.',($Nd?" $Nd":"")),$F);}}}$H=null;if($Z){$J=array();foreach($k
as$z=>$j){if(isset($j["privileges"]["select"])){$oa=($_POST["clone"]&&$j["auto_increment"]?"''":convert_field($j));$J[]=($oa?"$oa AS ":"").idf_escape($z);}}$H=array();if(!support("table"))$J=array("*");if($J){$F=driver()->select($a,$J,array($Z),$J,array(),(isset($_GET["select"])?2:1));if(!$F)$i=error();else{$H=$F->fetch_assoc();if(!$H)$H=false;}if(isset($_GET["select"])&&(!$H||$F->fetch_assoc()))$H=null;}}if(!support("table")&&!$k){if(!$Z){$F=driver()->select($a,array("*"),array(),array("*"));$H=($F?$F->fetch_assoc():false);if(!$H)$H=array(driver()->primary=>"");}if($H){foreach($H
as$u=>$X){if(!$Z)$H[$u]=null;$k[$u]=array("field"=>$u,"null"=>($u!=driver()->primary),"auto_increment"=>($u==driver()->primary));}}}if($_POST["save"])$H=(array)$_POST["fields"]+($H?$H:array());edit_form($a,$k,$H,$U,$i);}elseif(isset($_GET["select"])){$a=$_GET["select"];$R=table_status1($a);$t=indexes($a);$k=fields($a);$Dc=column_foreign_keys($a);$Ke=$R["Oid"];$ga=get_settings("adminer_import");$Sf=array();$d=array();$Yf=array();$Xe=array();$Ig="";foreach($k
as$u=>$j){$z=adminer()->fieldName($j);$Ae=html_entity_decode(strip_tags($z),ENT_QUOTES);if(isset($j["privileges"]["select"])&&$z!=""){$d[$u]=$Ae;if(is_shortable($j))$Ig=adminer()->selectLengthProcess();}if(isset($j["privileges"]["where"])&&$z!="")$Yf[$u]=$Ae;if(isset($j["privileges"]["order"])&&$z!="")$Xe[$u]=$Ae;$Sf+=$j["privileges"];}list($J,$Lc)=adminer()->selectColumnsProcess($d,$t);$J=array_unique($J);$Lc=array_unique($Lc);$_d=count($Lc)<count($J);$Z=adminer()->selectSearchProcess($k,$t);$We=adminer()->selectOrderProcess($k,$t);$w=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$jh=>$H){$oa=convert_field($k[key($H)]);$J=array($oa?:idf_escape(key($H)));$Z[]=where_check($jh,$k);$G=driver()->select($a,$J,$Z,$J);if($G)echo
first($G->fetch_row());}exit;}$yf=$lh=array();foreach($t
as$s){if($s["type"]=="PRIMARY"){$yf=array_flip($s["columns"]);$lh=($J?$yf:array());foreach($lh
as$u=>$X){if(in_array(idf_escape($u),$J))unset($lh[$u]);}break;}}if($Ke&&!$yf){$yf=$lh=array($Ke=>0);$t[]=array("type"=>"PRIMARY","columns"=>array($Ke));}if($_POST&&!$i){$Fh=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Pa=array();foreach($_POST["check"]as$Ma)$Pa[]=where_check($Ma,$k);$Fh[]="((".implode(") OR (",$Pa)."))";}$Fh=($Fh?"\nWHERE ".implode(" AND ",$Fh):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$Gc=($J?implode(", ",$J):"*").convert_fields($d,$k,$J)."\nFROM ".table($a);$Nc=($Lc&&$_d?"\nGROUP BY ".implode(", ",$Lc):"").($We?"\nORDER BY ".implode(", ",$We):"");$E="SELECT $Gc$Fh$Nc";if(is_array($_POST["check"])&&!$yf){$hh=array();foreach($_POST["check"]as$X)$hh[]="(SELECT".limit($Gc,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$k).$Nc,1).")";$E=implode(" UNION ALL ",$hh);}adminer()->dumpData($a,"table",$E);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$Dc)){if($_POST["save"]||$_POST["delete"]){$F=true;$ha=0;$M=array();if(!$_POST["delete"]){foreach($k
as$z=>$X){$r=bracket_escape($z);if(isset($_POST["fields"][$r])||$_FILES["fields-$r"]){$X=process_input($k[$z]);if($X!==null&&($_POST["clone"]||$X!==false))$M[idf_escape($z)]=($X!==false?$X:idf_escape($z));}}}if($_POST["delete"]||$M){$E=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($M)).")\nSELECT ".implode(", ",$M)."\nFROM ".table($a):"");if($_POST["all"]||($yf&&is_array($_POST["check"]))||$_d){$F=($_POST["delete"]?driver()->delete($a,$Fh):($_POST["clone"]?queries("INSERT $E$Fh".driver()->insertReturning($a)):driver()->update($a,$M,$Fh)));$ha=connection()->affected_rows;if(is_object($F))$ha+=$F->num_rows;}else{foreach((array)$_POST["check"]as$X){$Eh="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$k);$F=($_POST["delete"]?driver()->delete($a,$Eh,1):($_POST["clone"]?queries("INSERT".limit1($a,$E,$Eh)):driver()->update($a,$M,$Eh,1)));if(!$F)break;$ha+=connection()->affected_rows;}}}$oe=lang_format(array('%d item has been affected.','%d items have been affected.'),$ha);if($_POST["clone"]&&$F&&$ha==1){$Nd=last_id($F);if($Nd)$oe=sprintf('Item%s has been inserted.'," $Nd");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$oe,$F);if(!$_POST["delete"]){$uf=(array)$_POST["fields"];edit_form($a,array_intersect_key($k,$uf),$uf,!$_POST["clone"],$i);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$i='Ctrl+click on a value to modify it.';else{$F=true;$ha=0;foreach($_POST["val"]as$jh=>$H){$M=array();foreach($H
as$u=>$X){$u=bracket_escape($u,true);$M[idf_escape($u)]=(preg_match('~char|text~',$k[$u]["type"])||$X!=""?adminer()->processInput($k[$u],$X):"NULL");}$F=driver()->update($a,$M," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($jh,$k),($_d||$yf?0:1)," ");if(!$F)break;$ha+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang_format(array('%d item has been affected.','%d items have been affected.'),$ha),$F);}}elseif(!is_string($qc=get_file("csv_file",true)))$i=upload_error($qc);elseif(!preg_match('~~u',$qc))$i='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$ga["output"],"format"=>$_POST["separator"]),"adminer_import");$F=true;$Xa=array_keys($k);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$qc,$ee);$ha=count($ee[0]);driver()->begin();$K=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$I=array();foreach($ee[0]as$u=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$K]*)$K~",$X.$K,$fe);if(!$u&&!array_diff($fe[1],$Xa)){$Xa=$fe[1];$ha--;}else{$M=array();foreach($fe[1]as$p=>$Ua)$M[idf_escape($Xa[$p])]=($Ua==""&&$k[$Xa[$p]]["null"]?"NULL":q(preg_match('~^".*"$~s',$Ua)?str_replace('""','"',substr($Ua,1,-1)):$Ua));$I[]=$M;}}$F=(!$I||driver()->insertUpdate($a,$I,$yf));if($F)driver()->commit();queries_redirect(remove_from_uri("page"),lang_format(array('%d row has been imported.','%d rows have been imported.'),$ha),$F);driver()->rollback();}}}$Cg=adminer()->tableName($R);if(is_ajax()){page_headers();ob_start();}else
page_header('Select'.": $Cg",$i);$M=null;if(isset($Sf["insert"])||!support("table")){$if=array();foreach((array)$_GET["where"]as$X){if(isset($Dc[$X["col"]])&&count($Dc[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$if["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$M=$if?"&".http_build_query($if):"";}adminer()->selectLinks($R,$M);if(!$d&&support("table"))echo"<p class='error'>".'Unable to select the table'.($k?".":": ".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($J,$d);adminer()->selectSearchPrint($Z,$Yf,$t);adminer()->selectOrderPrint($We,$Xe,$t);adminer()->selectLimitPrint($w);adminer()->selectLengthPrint($Ig);adminer()->selectActionPrint($t);echo"</form>\n";$A=$_GET["page"];$Fc=null;if($A=="last"){$Fc=get_val(count_rows($a,$Z,$_d,$Lc));$A=floor(max(0,intval($Fc)-1)/$w);}$Zf=$J;$Mc=$Lc;if(!$Zf){$Zf[]="*";$kb=convert_fields($d,$k,$J);if($kb)$Zf[]=substr($kb,2);}foreach($J
as$u=>$X){$j=$k[idf_unescape($X)];if($j&&($oa=convert_field($j)))$Zf[$u]="$oa AS $X";}if(!$_d&&$lh){foreach($lh
as$u=>$X){$Zf[]=idf_escape($u);if($Mc)$Mc[]=idf_escape($u);}}$F=driver()->select($a,$Zf,$Z,$Mc,$We,$w,$A,true);if(!$F)echo"<p class='error'>".error()."\n";else{if(JUSH=="mssql"&&$A)$F->seek($w*$A);$Ub=array();echo"<form action='' method='post' enctype='multipart/form-data'>\n";$I=array();while($H=$F->fetch_assoc()){if($A&&JUSH=="oracle")unset($H["RNUM"]);$I[]=$H;}if($_GET["page"]!="last"&&$w&&$Lc&&$_d&&JUSH=="sql")$Fc=get_val(" SELECT FOUND_ROWS()");if(!$I)echo"<p class='message'>".'No rows.'."\n";else{$za=adminer()->backwardKeys($a,$Cg);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>".(!$Lc&&$J?"":"<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>");$Be=array();$Ic=array();reset($J);$If=1;foreach($I[0]as$u=>$X){if(!isset($lh[$u])){$X=idx($_GET["columns"],key($J))?:array();$j=$k[$J?($X?$X["col"]:current($J)):$u];$z=($j?adminer()->fieldName($j,$If):($X["fun"]?"*":h($u)));if($z!=""){$If++;$Be[$u]=$z;$c=idf_escape($u);$cd=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($u);$Ab="&desc%5B0%5D=1";echo"<th id='th[".h(bracket_escape($u))."]'>".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$Hc=apply_sql_function($X["fun"],$z);$ng=isset($j["privileges"]["order"])||$Hc!=$z;echo($ng?"<a href='".h($cd.($We[0]==$c||$We[0]==$u?$Ab:''))."'>$Hc</a>":$Hc);$ne=($ng?"<a href='".h($cd.$Ab)."' title='".'descending'."' class='text'> ↓</a>":'');if(!$X["fun"]&&isset($j["privileges"]["where"])){$ne
.='<a href="#fieldset-search" title="'.'Search'.'" class="text jsonly"> =</a>';$ne
.=script("qsl('a').onclick = partial(selectSearch, '".js_escape($u)."');");}echo($ne?"<span class='column hidden'>$ne</span>":"");}$Ic[$u]=$X["fun"];next($J);}}$Rd=array();if($_GET["modify"]){foreach($I
as$H){foreach($H
as$u=>$X)$Rd[$u]=max($Rd[$u],min(40,strlen(utf8_decode($X))));}}echo($za?"<th>".'Relations':"")."</thead>\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($I,$Dc)as$_e=>$H){$ih=unique_array($I[$_e],$t);if(!$ih){$ih=array();reset($J);foreach($I[$_e]as$u=>$X){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($J)))$ih[$u]=$X;next($J);}}$jh="";foreach($ih
as$u=>$X){$j=(array)$k[$u];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$j["type"])&&strlen($X)>64){$u=(strpos($u,'(')?$u:idf_escape($u));$u="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$j["collation"])?$u:"CONVERT($u USING ".charset(connection()).")").")";$X=md5($X);}$jh
.="&".($X!==null?urlencode("where[".bracket_escape($u)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($u));}echo"<tr>".(!$Lc&&$J?"":"<td>".checkbox("check[]",substr($jh,1),in_array(substr($jh,1),(array)$_POST["check"])).($_d||information_schema(DB)?"":" <a href='".h(ME."edit=".urlencode($a).$jh)."' class='edit'>".'edit'."</a>"));reset($J);foreach($H
as$u=>$X){if(isset($Be[$u])){$c=current($J);$j=(array)$k[$u];if($X!=""&&(!isset($Ub[$u])||$Ub[$u]!=""))$Ub[$u]=(is_mail($X)?$Be[$u]:"");$x="";if(is_blob($j)&&$X!="")$x=ME.'download='.urlencode($a).'&field='.urlencode($u).$jh;if(!$x&&$X!==null){foreach((array)$Dc[$u]as$m){if(count($Dc[$u])==1||end($m["source"])==$u){$x="";foreach($m["source"]as$p=>$og)$x
.=where_link($p,$m["target"][$p],$I[$_e][$og]);$x=($m["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($m["db"]),ME):ME).'select='.urlencode($m["table"]).$x;if($m["ns"])$x=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($m["ns"]),$x);if(count($m["source"])==1)break;}}}if($c=="COUNT(*)"){$x=ME."select=".urlencode($a);$p=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$ih))$x
.=where_link($p++,$W["col"],$W["val"],$W["op"]);}foreach($ih
as$Fd=>$W)$x
.=where_link($p++,$Fd,$W);}$dd=select_value($X,$x,$j,$Ig);$q=h("val[$jh][".bracket_escape($u)."]");$vf=idx(idx($_POST["val"],$jh),bracket_escape($u));$U=idx($j["privileges"],"update");$Rb=!is_array($H[$u])&&is_utf8($dd)&&$I[$_e][$u]==$H[$u]&&!$Ic[$u]&&!$j["generated"]&&$U;$T=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$c,$y)?$k[idf_unescape($y[2])]["type"]:$j["type"]);$Gg=preg_match('~text|json|lob~',$T);$Ad=preg_match(number_type(),$T)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$c);echo"<td id='$q'".($Ad&&($X===null||is_numeric(strip_tags($dd))||$T=="money")?" class='number'":"");if(($_GET["modify"]&&$Rb&&$X!==null)||$vf!==null){$Pc=h($vf!==null?$vf:$H[$u]);echo">".($Gg?"<textarea name='$q' cols='30' rows='".(substr_count($H[$u],"\n")+1)."'>$Pc</textarea>":"<input name='$q' value='$Pc' size='$Rd[$u]'>");}else{$Zd=strpos($dd,"<i>…</i>");echo($U?" data-text='".($Zd?2:($Gg?1:0))."'".($Rb?"":" data-warning='".h('Use edit link to modify this value.')."'"):"").">$dd";}}next($J);}if($za)echo"<td>";adminer()->backwardKeysPrint($za,$I[$_e]);echo"</tr>\n";}if(is_ajax())exit;echo"</table>\n","</div>\n";}if(!is_ajax()){if($I||$A){$fc=true;if($_GET["page"]!="last"){if(!$w||(count($I)<$w&&($I||!$A)))$Fc=($A?$A*$w:0)+count($I);elseif(JUSH!="sql"||!$_d){$Fc=($_d?false:found_rows($R,$Z));if(intval($Fc)<max(1e4,2*($A+1)*$w))$Fc=first(slow_query(count_rows($a,$Z,$_d,$Lc)));elseif(JUSH=='sql'||JUSH=='pgsql')$fc=false;}}$gf=($w&&($Fc===false||$Fc>$w||$A));if($gf)echo(($Fc===false?count($I)+1:$Fc-$A*$w)>$w?'<p><a href="'.h(remove_from_uri("page|next").($_GET["next"]?"&next=".urlencode($_GET["next"]):"")."&page=".($A+1)).'" class="loadmore">'.'Load more data'.'</a>'.script("qsl('a').onclick = partial(selectLoadMore, $w, '".'Loading'."…');",""):''),"\n";echo"<div class='footer'><div>\n";if($gf){$ie=($Fc===false?$A+($I?(count($I)>=$w?2:1):0):floor(($Fc-1)/$w));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'."', '".($A+1)."')); return false; };"),pagination(0,$A).($A>5?" …":"");for($p=max(1,$A-4);$p<min($ie,$A+5);$p++)echo
pagination($p,$A);if($ie>0)echo($A+5<$ie?" …":""),($fc&&$Fc!==false?pagination($ie,$A):" <a href='".h(remove_from_uri("page")."&page=last")."' title='~$ie'>".'last'."</a>");}else
echo"<legend>".'Page'."</legend>",pagination(0,$A).($A>1?" …":""),($A?pagination($A,$A):""),($ie>$A?pagination($A+1,$A).($ie>$A+1?" …":""):"");echo"</fieldset>\n";}echo"<fieldset>","<legend>".'Whole result'."</legend>";$Cb=($fc?"":"~ ").$Fc;$Pe="const checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$Cb' : checked); selectCount('selected2', this.checked || !checked ? '$Cb' : checked);";echo
checkbox("all",1,0,($Fc!==false?($fc?"":"~ ").lang_format(array('%d row','%d rows'),$Fc):""),$Pe)."\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>
';$Ec=adminer()->dumpFormat();foreach((array)$_GET["columns"]as$c){if($c["fun"]){unset($Ec['sql']);break;}}if($Ec){print_fieldset("export",'Export'." <span id='selected2'></span>");$df=adminer()->dumpOutput();echo($df?html_select("output",$df,$ga["output"])." ":""),html_select("format",$Ec,$ga["format"])," <input type='submit' name='export' value='".'Export'."'>\n","</div></fieldset>\n";}adminer()->selectEmailPrint(array_filter($Ub,'strlen'),$d);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"),$ga["format"])." <input type='submit' name='import' value='".'Import'."'>"),"</span>";echo
input_token(),"</form>\n",(!$Lc&&$J?"":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($Q,$q,$z)=adminer()->_foreignColumn(column_foreign_keys($_GET["source"]),$_GET["field"])){$w=11;$F=connection()->query("SELECT $q, $z FROM ".table($Q)." WHERE ".(preg_match('~^[0-9]+$~',$_GET["value"])?"$q = $_GET[value] OR ":"")."$z LIKE ".q("$_GET[value]%")." ORDER BY 2 LIMIT $w");for($p=1;($H=$F->fetch_row())&&$p<$w;$p++)echo"<a href='".h(ME."edit=".urlencode($Q)."&where".urlencode("[".bracket_escape(idf_unescape($q))."]")."=".urlencode($H[0]))."'>".h($H[1])."</a><br>\n";if($H)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$Q=>$H){$z=adminer()->tableName($H);if($z!=""){echo'<tr><td>'.checkbox("tables[]",$Q,in_array($Q,(array)$_POST["tables"],true)),"<th><a href='".h(ME).'select='.urlencode($Q)."'>$z</a>";$X=format_number($H["Rows"]);echo"<td align='right'><a href='".h(ME."edit=").urlencode($Q)."'>".($H["Engine"]=="InnoDB"&&$X?"~ $X":$X)."</a>";}}echo"</table>\n","</div>\n","</form>\n",script("tableCheck();");adminer()->pluginsLinks();}}page_footer();