ꓖ\nK#AugÃl.sGtP\\kP&4r3[jGe-/o呧Xű9]#ihE.QKƢ>3]q)b\0@600Lu786@*C.a6TC,l&Ù&Z`(- ;B7e&W #7rxeCfL}}H+k!9\rnR_ł6]_f2w.Wf.\nGn71֠W\":WK>PBeK\rZe;v8dABw-4u#_}Z:6\$b:Қ>0`\\\r#We,e|Fܺ,*@@ k);=CDG\"Y=ݱ&[MAm+|vu\rN}9}T0P82HRMTV`5e((mT0?Ĉ#X=]ƙ.㡿w\r?'ʪ~ijgyD|q8mq_Ik:O\$|܄\0[GC+]#vmmݠ0ӷm<8wb;A:ͼӼ.ػJuwo fC\":bat\"/䗵G\r(pNAOYH̴ \r\\74A˴ST)Q#/ ҝ9%}d]Үu('Lv43e.B0rø[Eq+;XDN,X]6L1`r5*AZF>%r/\",\$ֈ7\n>1.:}F*=m:MDBk\"(0PN,Q1tCW\0ԅI& bM\\Q_c3\"#Vu#g/9%1^\rr/i+%B?\rP:g\$p.T[lGrJīng\0gF+(RbPP.&,\ng:1%%*?'\r8\rg<0oY+C)}[@r;]P'\$P%^Bb\$խj6\"JXg2b \$@d6C~]*X\"(s0%1\nM&ZNmhI\r%nd-sLGRgSZ+4e/Ru/^?q}7v/\">b\0QDO&1ࡣ9Xq59c9}3;W:\$P1\$\rc\"%9SsuY<Ÿe>+Nͣ>9?Φﳜ/?@d]=)Ep&I\$|lk\$@b\rJ\"\nZ\0A+>:tή8tW2]\n\n0Fki-2m=FZ>sQAC=W|lo\\3[ &RJ41\0H:]ǰ";break;case"sr":$e="%)h.i4 |Ez\\4S֊\rh/PHPnv0G h\r\n)EȄ:%9>/M}H`(`1ƃQp9C\nD?!G: 'a%e|Dqe0̢\nm=c/\"mF:D\"Uj8k:]\nHƖHr9a (h_(әHY7D Fn7#Il2̧1: :4c41?\n+ʆ4I(k+ r(jȎP*EƉ&b&\"?e`#FI\$FssW\$+Ҽ i\$#5D*F\\6fn:XCNy0`a_1Ep՜Bʴ;;D\"y/f5Ȣ# ia!hF8@C_[:K-9˙._̄!CS[aJ0(j(_hD}-SÛ\\\r,fJ^I6h֤`4W\$\\sC\naH#?sFboBhoaW_GF@:Θq0K-3[ފ3d<`[e4A sgËA.ٙ8VK!Q*䢘Z`O\naRBh.MLagHh5UWji6YA3b/8,4(3,9ˬ#KBqCjn܈1G/fpG&X\\(]u! \"\0U\n @iKʵ@YhSפ,~ E cl[Lp1aZ4VGn\\9@ל?\\I\nǗ3:,: g\r7u7Y8Vsb}J<4-]u|=7:GHzt1֙7B)sPL\rBS@^(s\\9N4\"UxqrbKv\"Fx}(wxAG|3I]MN:S\0)@[_kTZ:©(C3^ʩ;W*߽Yfl7|E%ʥtH(NtzWvr\n \0@/f[F=[6@4O+J^n@^mnnH&kx;PL(F0&zU^M*(%~#N6\0\\..,,P,cea 0e f,D:P,y^PqPj\n0dݬ,,htpPGj]e\r0c0VPq-,%\r!\nq/\rbZb ZK 6Եx{Q7(hcʡbΜ\$lGb(H1%PLGv7\$ea*DJERX*B/\nìUdl(\\D&li/,ܮh8\nN!0;rC\$<+o\nf\$R,>#o \"!P\$GO(8c-n øpCt̾pΌ,3N ς}(F:T.R#bFO2n[&E-g0~U|.fZ ^@\r\r>\r4 ҐEp2pDžeqHS\$fg\$\$%vg.&Q&\r'3M,N2#&&%5+I5oZfr\\:`,-%.Rq7(I4&ǧ'3u! 675hrDP\$Ci{\nr3:ha;0Ȟ\r%\\s04Н=b8mf\$7a7A:t\rA\rc ANhZzfd#Z0(Dݮ5DY\"DáϞl*!e|BCDTR,NY&F2ƪJx~rB\"4~r\$ly#\nN9#GN5w/C\n)/'Ig E\nkj, %B8BS178`?S{s-A*Orst%6ORS>r%C55NP1u'.fNH烄tXuFEUKUOcH6G?8EutHddlj}\rGnU|Ozkc&g-cichj*[E6\"{\"fFq.mcjb\r2jp{*?\rq \"VosIP\rVµQ,2Tp%%k Z3ŐH5c;җI%C-`\r@P:`\\B3-o(\niSFn#d#9P2e&1A\n:!iݲ9s&j)\"`Z5œ7>kXlܶ<2nlcFN1\rv78>82q:F\$lѣ30<`J\0@6m0뽚7\"#5xx\\\$C8AA\";d'3\rN&K8#}R6#sN7c~[Ol\$Yۢ\"76ϥ='4MW;\r͑l1m9״aC!'?Y[*K, ŀ\$\r!*8)\0ʤS\niNu=.Tj7ȮUNeU,]BLp8aDQyw/d Q+ZmbR#FB]tReM>arT\"jpcL]ҁt7w\n8p䐒ʭS\"f:EAR L7R @p!a]#P_Z5\\RyƑDaWLÛ4kuE(s/L3bN]9 NL퍚8bA\n (٦OXFH`RA@/\0M6f!a\$q=\n` 7LY9؉JDb2lLia&Q8FbDJHհOT!BN\rZ'trHbhOz{L6عT*=%Lk6eb,P}\r25̈́mPmŊ[@oŦZPopE0po\"J&(bq\r\"87h-(Hb*`4gfgÌJbzF/To.PpX?lFl,{Г^\$i%QR`ʂht4\r>4bOѰ/%b(d-d֎8(бtc-1[a\r~/ޞq '] 11Q!\n01-%R\\\rQ@86:O>k&%ʮ\\{#N]EG7d82C&K&r٨+'D6\rV\rg iN&(Tkz!3NZK\nv\rۤ\$\$*\"D\r+vpw\$-!-g)Z\0#:%BC@/\nbX\n|ҫrʤ-eʂ,CCN\"Z%\nd\nDo(%(dƠ,C^O+LDx#S.jj\0v7N7/oa2q6c}\nŤBB|l40B\0pgvg@`j@Pp4'6@-C2b=D>^@BiJ?3n^ѽ7nJʃ\$iD3";break;case"ta":$e="%)J::u>8@#\"\0p6&ALQ\\!_ FKh3Xҽ.B!Pt9_`\$RTmq?5MN%urι@WDS\n4;(pP0cAn8UUɼ_ArªZ.(qg+S\\+5~\n\$g#)eGKN@r|,F,u]FdXGiSTrP+_5ȕʙa^i6OCq)Jj^E.Q@+W@J,W(I{\$#x\r\rx@8CH4(2a\0\$ :74#1EH%!p#%9nҗ@P#x;j\"r\\K<<2Jj2t81Pd2Nx)CH3(Q*ڒŢ2(7L(\npp@2C97dr2R\n8㘨934NBX5cWn\ncSA0BTz\\EsR-TՏԯթ(1R(60dpU)#p6¸Z+˸AVH7ptaQAQ7c]4좨2Vk\n\nVI+>S[)/W}5(X/UsL6 '6|ǞW[46U\0@2\rA\"OZ1qA\0ëlLulQ;l9460z\r8a^h\\u@Tc8^2x#K`|6m3Tcln4px!,*9V.б_h҄nP^Λ,ꕐC.4NRY<5-_Ϝv\$?+pIu\"~Cm9\rB\n C!.)4\0:^ vtҝm\r7D;;ә@STЍ*-6;7t)\n3CNo:s>R` n@@T@xPRj/\\:@H++E-4dE;dGwJ()s8PATxyBvП6y(DB%,{%pΔM0)q?zyM6Sd<\0E_.\n0֘w QB\rVbQES7u0U83K.(+BR9uM;0H^00UAE3C+!MQLhE/XudLRRh9BܽUGXEYTK4[[ա5A5.t\\i!+X=]U\\ Egnv(%zVuFIW]Lz9=IwrogrX=y7f g[pY\ru_ue6\$߹ICpxYnGU||c/ol+9[w2řEȀHHmi}r8#yQOpܼT¡'Yh.@`\"j \0@ t\n`";break;case"th":$e="%OZAS0U/Z\$CDAUPȴqp*\n*\nW lM1\"T!R4\\K3umpPUq\\-c8UR\n%bh9\\EY*uq2[S\ny8\\E1BH#'\0Pb2as=G\nASZg\\Zsf{2q4\rvuTq,..+h(n1s6t9K'vK֗!AvyOS.lUشt.}pTkp+nC퓴>>Bi\"X *~-h+#\0,@4#7\r\09\r#689R: :8à4ƃ1FK=\n[;I쎷+c:lִp,,C셗\$450=9s?B.jQ@o뚑B`P#pΞϓ.(cOs̅B57OK9AlDѲQzI\r1\$6t?\nH4z\nK0%Od5s4\$Z9Պ\$C@9p6t8TT\0t92Mӳ,ҏ+Kn:RBTŇbO\\6M(js:[U\\/Hs9rb协lD?l1AP2\rMB|fE@9#tH:w!048R`@jC3:xﻅyT p^8l;2\r#D #x}\0(+w6x/%fdʑrNjا<9uʺOdѫclOxw\rs`bUk?˗N\n7jC#!B\nCl̄f;zB3hqdγ YIIՕgr<I(E\$h e:ƌld>J9-`02Lށ?G4\nNZ Ve&fKZ\\;أ`&dkrD@fz?Eܔ3l\"W_\n2zəK,('t5~lF\r4pCtQ%:Q DR1 rݫbg%xhI⻧tsa22zQrO97'Z[XbHĶňOt01K`C8djc15r#MAe: ><t?B1y ˠ \rv6ptm)ysh6ܰf\r!yY8 Q'A`T8K3`ώLO6BϐT\rɆni\r9h*`o\$9`8aᆅз:HuG939-O|@Dse빅ipmITDm9J힆Bكj!Fkon-ͺp[foɿ^Wptr\0U'MX2Cs)}+ƨ2ɠ]LMOV /M9ӈ*m*\0IwV%\\[rnټ7ʨAs~p2yJqa\$6`pt%x5Pa_)CI\\tTøNm\"'q8T&l3M\0n\nW8Z\\Ųo=@Rω s,bQZ0na:914ci}dJ)LCԖzA2YjV\rejva a戆@Z+Gp7}C0QFʌ6:t|kGXCGn_5eX~PJE\"YU5lb|I\\!\0Zvn%(b1Busqٕ)zjFLj(mET#Lit麃&TFmnюdYRaA<'\0 A\nЈB`EokMnO&M,t2LAݭͷy࿕s9\\XrYgBfoL̊)ٝ14OeiۂmJ}9?|\rHt]Q-,tӃܖ]dv3p\\}T䀥zS)WRٕ %[t'\\,PX=iX\\\\1h(.~Ǭ~8UdzcTb>b~7\rHțo7#l/GPH8H8`l:Q oLgCp ]FIH,0Ώ'\\@L|\$\\'~UO:7ܓXވ>&(\"\"E>(-doNz4yd%zg@\n`\rE{DN̬GvEIot^0~\0\"V:bdE/UB!j.gB*ɜ~ܙ\$BQѰ>[#:c6)\"yrl6h~\"921X2@FF\\đ&dB\n\\FXWG}8g8\"R&C\0cw#Rd+XXB/\n\$XFX9JQ\$=fR\\j\$c yeP6&E@d'(ӧyoOX(y/\$gj9R-JsV~3c@OY tē3 GMl6q#(ď<&Q\n)d4TI`iJA?R RN+n\"K06TL:/ OVCU-:\0%\\φ@nR~l2:sXHXgVqhͮ\n9SQ[9}}c\\&Gn\nRqR*mo6'USU55ͺ'\nH6?TEvy6xUvVSN T?R\nt4\nFgԿDH d\ndVL4YaU!eFOA[v@6X[?5<* @DWg]LEEFiȠo[v,r֞6_;i-3=AbV#k fvMm)WU g+8W\\g;L!nnV-gvg@ mW Ton{-sVqk±TKbVuQq1646d_IU\$!qr-juT3\\a+Xa`F8\"hѫv_rFw2\rwwwzÑ%~@QIm!n{ouoa)1|wnwc6Mp9e0eCu~ġB4rkRdO0*łk'Cg VRґ5O2%24\n\n;824920n\rV`xN/\$/m0@̺Ih\$`\npT\rQR#OR5 N@ɇ:`Q5'@ \r o #\")Nz n|yt|Rp=e;\\&5NF u=wQ1LV(.rPdGdtH@QcL9\")c\$.'24*ojQ\$Ы^Va|B,eZuZ^:&yS1m_{HhdHDנSgT5b܆+:yFqH7ҵ\\Y;H#cRX,0cCN\".;ԏ1#`*H#z:-9:ê\r@7;C(.@cx5ʶ b\n`ޮBJ2CJ&bzNȵJ82aՎcMX1sb72LLHX༎c42\0xC@:tD3:B}9Ѵx^'aڍ/i̍\rx#&\0,#iŴPCp۬jű-Al\\)\nUp2@5\rS'D\"XM{.2\$,C E_70`vICOڂSB356rÏ\$`ߔ\"H֛9\0P4hñBƘ컶\\AdW)\"e&0Wc\">+4QO\"إsնW:ìKn%Gj`\0006䐢@\n# zzKbssR5o@VKՔhRC\rj#DOÓ<69I֢3\r#>2!\$I86DQCl H箚\r~C\00J{#sv3jh6{e\\DJИX:b.-xia-69)H1'iĴOy8\$Qxp 4ᰚ\$I,1PC4TAR*gFR\rʰ<\"[B`\"R`uyZf4Ye #me\"jq@I/pTOc|\\;mpS]<09cI2ys)hT\"96@*P @NY\0jr(E6prXRsH)֛\$ ]IDIl\"f],pz]l\r\\&<#P4%r`ʋO/ASW\n2V.(pC\"MvaRaNDLaL)i9'eR58Z>Igy\$OkأOrkI#A\$T#\rSE a\$b!J. kݿԙswOs\"[\$!6Oȇ,\\\0XCv&7ܥPB7ԬW)%lpmxCDNaX83dI\"EZev->:\nIz&mEH =2\\D眓hVsKqą,PY43,k36tW94\"^sp ABL\r\rff 7-fnL:&-d@n>~\\)d\"DC6}n\rW\r,:j(C.DTʐ̳@=((*q)zP1!%&%CgILC !,q'h!^T\0fu{WYPN_4ѫ^,MY\$١>}flꂟ7o_E[}{^{){3q}3&t꼃4y]~|_TM;gl.`]p\$(5^D[w{(zbeӞ#N\riE\"E9p9>!]<{?Ul]\rl[?0r+r4JKnaFbF(Iް2\".L2!#FP [,onbAM\"-M/n(\" J,8 Px\r)&L\nkP>RǴC_C,H\n`Ġ [/`92~4g!Ϫ;F_L4C#LdC.LgD\r@=Ga6C?`";break;case"uk":$e="%)h-ZƂh. h-mhĆ& h#˘.(.N5-4\r7#h-C9AY7cX: sKC\")Hh,-Bht!\\ʖR8^t&P2\rH2O1EBJZnb0#O[̬=\0x0C83:x\rw^uf3(;c ^+A٧aD,R@8*[dx!ܚ2()e!L.Ǘ¦V.AsgjȎ9Y٤z{OxΙtJڣK&opMxs-Y:3FL{1ȤL;gꕟm̓6- Шo9_GQfԷ6)Wn&E1\"Iń\r}b#]91+H(1&(Ń+cLq2D5Se,`t\r5ȹEyQBul&U);aQ2@X)!p\"I^b'\rVx\rH{jbe>Ywd2s-ї:ġ\\%#-ٕVHhhj5H֎hF amZ7fKmsޒh`k?F\n2>@kϓjPvTDPK;ml4 xֳ^Mڋ6V([KT4l(\"m\r\0@#1EN\0n*v\0PVM'\"vjS^ 0ɕ?8N&dWW ?+%c@OC8k^9S-!Prq\$W?~.GG(<oDځ~02k(.i%Vm'&:^a60*;IV-\$g'WWF,4#uZhUPW[LP2XBuoĆ&QU`2?UiA_lt#z#I⥂nu \n<)GֶΗld<,x9#mWfϸЄyGrvq(tHBkIQFMIze]x&֜[}xOlR+Q0#@4n}R0TQ5#te]#eb_1u46\rƇq4L'R&Ƅt!S\rY('QJ4iCy8?:I pK^-o,QuH}pDgsk}PezT里\"DC.@bE@WOH'=y5+\nCGwGZ/\rR_DZ\\٩o+Sp5\\hAԬƸV`s%jZ4\$xOKJȄ~H\":n \0Jd O\"bKg^oKKmbJ\rʗ4}p;m<3`ʸPX2%&)gȌ뤪6k6b4̭8@ndm/P\"B3 ^\0\0@\r'b|I6^(%sbͬ ִPOfꤊ&eoE0\$?M\$q/(mrO>%3\0\n\nq@(_̗-Č\rSm `(~n+hNPPP\n H|^DPLNLK*̬LM\$|-rq@^-RFLatrc. 1j M^wDbh!.A\n[/49/g/^PA=B'&m\"k\$ 1&g)&.6Vs[\"Rw&Ok\$~l!GvOx5G\"R6\$@NG\$,oj%0%JM^^(\\*rd@m*:8lScJgM fIJ(!FFCm.-m+C1M:sf ґ64-?\nM\\mSA506Z\"2+zn@ӂ.'mfgw#ˈ w2!02Jmx2+C.p*0:/h&:o>;GvvV\rӤK2\r\nY\0OHSF\n1G\0ZZta79F\\aGsO8c33F4HI{KTtJ450>2n0!@K#&oHQJi4܈hTy'A'P'Pt4(q%%.=CyJn2b2s17T5#ITT4'J2UOVt<LO10pW'~\$onVB\r+<W/U\nHDS~W,Hk\n8qvY\r*E&-(3VNW1h:h%E(P^J*굸D6:OuqJUu U KL7uIc/5L_dhzdNlu[Fk56d0h_E\$O56f\\z9JI5aTRoh4lqj'Rfeb;efvg(G,0#&l\rgWAUigQQnvehnh`c4dvmvqLkvr6q5Mn+m5o6q6S/vNvq֜rYCetovF +L#qv7uvL6ϰpwʇ\rBf)dV6Q06ARGzwyxvScw+ LVuk|oU|NFe)Pg5-%\$h0rf3vPk52qZ%+ńsi2?%'K!~wlx~ti SMUr44p9'y{8aQd*%@uj6bDk;;s˴a/Uh.5. \rn\nZNQuX#f!1X8vH8#QvlЏ5,<x b6r@%m5;Ul^u䱔\n뷉N)˳DS+D&Y\\ؖ{1M\"\rFjvR\$3i:h#m_F\$!Owv+YPlRzyaPW8%;oVr2G\n()@:!!RnD8FtŗwڼCX`4@";break;case"uz":$e="%(a<\rƑk6LBNl6Lp(a51`u<'Ai6&%4MF`B\"u2Kc'80cAn8!\"n:far Io7X&9 5瑃Hq9L'3(}Aap-rLfqJ֘lX*MF\n%mRp(+7NY>|B:\rY.3\r4Asҙuzah@ti8[-:KZaO7;|kul7*'֊+ɜӉh@<6`50K48V7DBHCCXЎO*-C2C-7D(\r.͘t9֗Aj꾰A\0ܽ-b9\r?\n?81#/[N\"\r<Z \"4*\$&6B|3O|8b\"1xQʸ4\0x4c(CC8a^\\PR \\،x709I|8Se|tdڴXFcA,9%OQsw*IAx]=3ލh!(2R'xЯ߸\\Lk~!* 7TN<4i\$gL6v23I(m+(<8N+#Z;mmF9>yAuya'څt9\r{=DBѡ\"Ϟ5 r2st7 z6ElyB*C,7&\\([}S6RقNMk>:9s{+SRX|v612\"Cq]9\$u6AY1G u[Jbu4L!.y,Bˠ.0 fgpPtL1ID!8u%hh\$}P\n\"Z45D] &@435JaUjWfCP%]+|!p%a,|;fIe\0\"Ddm)tLڥ&5K*>I,45\n,Pr4G\0U<'bi9PPѾ\n5V:%vW:+EVHsP~K:H#`Tڝ,*å-ɑ4\"]Ķ\$\"ro&IC#aNfxG7oFWЖɓsxN%:KDnx\0i.F\n )9ϲԢ1H)FR{! Ir\$䤕DL#EvMq4X\$M2h\r.yVڸrTܒD眸,46Tq0!0q1@) !VFPOA03D#^Mꆦo͡-^B\nR\0zT4VhI67H8ZY\\B\n<)ILt3v'@:G>0i\nNfyqxXQrOSoԛ@)60z& Dپ0\"PF\$rIWRh\r31/x\"\"Y!8#>pHR'b014Ld&f_bL6g\r\$ĻS/Z}cxQ3\$(1 h0*z2\\aEUi7+5cWO3;WtxkLP:VX50K+L&VDhi]MJ)U-[ZwSR|`;-]:\r(\$ p5+NLY[,c03XUra\"\"ՙ_}!4k0\0ZsE*\rT4Nia&fJɆ*n\$<PgN#͟pFsHyI='ry\n ݕk!P*Ok[oJjE;+q9LI>h,N&'vdd9{=8霡WVeg^Y\ru#`l.&!+-loAH#jGXX}b\$u{`#Gc9bM\ri&M;M\"\$`r\0eS_B177=JkPkB9uVj.ӐsHxmi5G`\"6\nfR?=oQ3_u0gBם#~/%y_BJʼbn,\nfZ_&fDG\$\nBx/m`B\rnmBa2-\0Dc3OmҒdbb茠dB l~B,i\"lgH KtE\$\$H>f+'\nie\n0/rzF \ngLy\rp渆Fu0djK:60<0v>f/%О߀(0&,L ߩ&d=488⟀qhZR➧\$J#1X))|\"9bBjz\rqT3n> 'B6b(%JA1+n\0ޭ7E-deۆ1M#\rN.᰽ ۱y[vlo c!ju p\rtG%P\"Rj\0#nfrqJʒ=2N+Nnv6'p%c!2 c&gu*pvs&&RCrEmvҍ&7%n,m*RzRRD*Ar2r%҇,,Rr]>n.Pr6r,N1\$.s2E \"Z\$Pև|@~b!;,Lc8P\r@'\n#3%b-N.\n&dEm)Ir@@g\rV\"\$\npe04HbJL&3eye;fSq# ^3l48\$\"PRznN7fr,Iu4ih@d+Re@M~ FƜl@i-cp\$~\"\r<8Dm`Rd1C!.sE2 83cMgGf;ͱEF^>k.h\0\n9d-pe\"r't1DHcD4O\\\0FGG--4D4\$A&'>ߴԶ&12i\rTZ\\ @GV^BH'\$ΡĜ\r;@D";break;case"vi":$e="%(ha\rq]Ҍ]c\rTnAjhc,\" b5H؉q Nd) R!/5!PäA&n&0cAn810Lthb*L QCH1b ,Q^cM3s2Nr=v8]&-.c\rF 1XE)C nz477JqmU`-M@daH9[\rH!y i=Yd\$IXWxmmtWjYoqwD:<6\nc4`P7e'@@#hߢ,*X7@9Cx4|\"P!\0S\n: @6pP7̢ LBB~LrPūvSC@9p6t8DàD\0t92RSm')y6têX[!~Y Ti;\n_\r`e`X@(,8`Cxf(7Rzjm-(1jA ܋kNPer!3,H+htq\$G#A\0x`p֬rE`T!r[\0ȫ [QoƹW:v\\uZ}.y6ZLҒ-?(T,O\$ KvF%ȹB]pW7, <Ø>6\\K*l+iIñ&.ċO,EOD_b@L\n},SRw:T 6ל\r4\0&!bPMϷ9֣GIl\$D UoC]p856AC\$)Y68ȍmpՊK[\r! p\$S!^^VQv\"ictn1sϢ*ͅ3 \$rn1)|ўj :SP\n@z繡 Ɇ.dYK8_\$\nP 0xZusqs>HK]s2@y8IڤKq!1lsM),GFOBfY:0\\\\{˳\$¥9BQ&.%E\"\r*=PA`>D\0ц&3|%:D>#73#ߞ)Qw *iAʦn-\$&p<>C\" \$\rt\r.u.FFFU\r@P .x'c&Ǣ`pxzg` `%P\"z,RFDU!Ǖ\"rg/.v˄&;5B `ɱg>CkY0#,L9T\$\\4ZlOi`ێ1e}Ъkˠol\$㪉db3FQ 1\r.dO\nдd1K41im n!э&9:zFG PQaF-\nh}e[Q\$RwS]\$C022 Vm. m\n*kV\";/'!˒U')IXil~H&*gE2w+̄~r<+\"r'Ժg\$\0֑B%7l`/Ed@/J.0.jRk\\ys,p*93H3/{3P&A4VbwHEem-m\$b/\nzBJo\0}ϾA(3JcQ+2 \$CGcjf알~E](*x\"%*zS@\"4:`ЀR)\0\nq̱e)JXaF;60RѰ5k<Isi;49ck 7NSR\"A pu'V=:ίP7m&Ң:jhF1P\"jGQz#3!R\rL\"4i ,4.<~4\"r7\"nmXn&C64FPLPR=*Q\r(-2Q۬*ln=/D)MH&@1[O4armԨx k>\0-pۓR^-mGR\0#z>̉.,)fF㳌\rD`FkY E\$1l!.79\r(DM";break;case"zh":$e="%:\$\nr.r/dȻ[8 S8rNT*Ю\\9HHZ1!SVJ@%9Ql]m FU*qQ;Cf4)ΔT9w:vO\"%CBrixM3s2bV}\n%[L`*9>S%yP⣎uYоHQ)\":VdjdK:tRd(t/0Vc5_hIG*\\?M[h9ͣQpCqH\nt+ծB_cS>R\$2{T9J1.[\$hVIdDcMAlN19@rM)zQ*řvE')2TC@9p6t8\r.h@cx5+EHa^CMb]j2ŮiF1|dJB6#p9%0JLW\\2,2 Y4,ط\rC@:t\\3?hp^8.&xDωLsd)SCӡx)I\0ڑeM.յ0_!tg1%n\"HljXD5'Q_tfB ,,?%a='@1&D5+P]<TʡU*\\Ղ9+ur#!4a\"ʼn-\"Z:(pzPő4|NPOBo\rN &,bpO^C*TTZՌV\\+q],7[JŷEI\n9BQ%@) +L^\nDC^+E b5%QhĎq6.%B\nj_͈Sk̡2M<)i-T@\$\0A6Dqca\n\$,\\<9pD\"sm8QPDMF!E,RI3,y +PpP!LP1^/QäQ \$cxƤD\0F\\ROٮFhGI,Ŏl#ĀO2NJIZ¸Z:N\\PR06dEtVauTa\0I\"\n3AfftqV+T`\nF,)=`NG!\"\nўG:D+?h-P3:Ⱥ\0~`&EpOIyѮ鋣~\"K 9=P*[s E A/VŪ_L3A-ĨSBs|Q.QwEߢ)4)'*c!=f\\]/ujrXD wQ:*(Wv \rD /e;?&r %KN%.pzŹ#%I\\?d \$sE֭`z8sA̺YViº\"d]\nu܌.A?0r\rᴫ3v,Qhr:.Vj\r5tN9\0WچQ\n*@@?Q+k@\"e0@^7( wo)5H)N0=(DdXYw6\rA5wHܡ0X\rX=Yf~PU[ye\\F1ϗĀp\np.+S\\qC#pCc\\JU֢=aOaoM[x Y_CKq8[nɢWnaw\"8q>B9%7l#^S:H{%1.NUx:MB<Cvb\r3@c\0)ɟg^Uo+_x\\k[6[\"3Pr&ߛF,%Z+N/H0Ik,:IX\"6 E,:,%8(\0M*aB\0Zp
6&,P,r\ns,;\n%oL aa/hE@.z|\0b J.\0G~{+`2W @̭NQfOtMf_i/GQ~erB\$&|8Dm84r\n:lVˆ(\$D1\n~!\\'*w\$ipB\roNjg\rD\\t 8\0C^Xi+\0\np;(OJ\"!e!R>.F^l!(nc*!^42,4\r^FJ-6zezG1(#c訊hi#,\\N4t2쒀zo,(R\018,f(nqҽ+ЭrAt+\$\"Cn6e. \r!Ԕ,#G*C-\$\$*>{+\nILL73&bHZB|bv";break;case"zh-tw":$e="%:\$\ns.eUȸE9PK72(Ph)ʅ@:i aJe R)ܫ{ Nd(vQDCѮUjaʜTOABPb2ar\nr/WtЀBT)*yX^%ӕ\\r|I7FS 99STB\$rNuMТUP)&9G'ܪ{;ds'.̖L9ho^^+ieD:=.RFR%F{A,\\{Xs&֚u\0rzM6U!TDLJEtl6N_'zV~NZRZRGATO\$DЭ8UJt|R8Dp.R\$LGI,Ii.JJő[e|kzVseZ*x]4*2TC@9p6t8\r.(@cx5<\\gA2y3IHA2]+X!rB\n# 4(tDVG1(DU7sQ=3I%ZF@4/c0z\r8a^(\\0T,L8^2xྎc2tJ(AALEIFPx)GI\\ęW\0RW!u'39rW,oLQ]1H@PJ2:@ea ^ʳESpiRdܲ63M3x^H^{d1H N&k9]g1GG9{q%\$jCA\0Q7%z\n(:I*[%2=\$g1bbI',J8]c[~_ܩw}nіI]%%rT{<])];G9]#9M\\XP>Q,CC@6AZk:Cp@0C9#u_ cx3\r#?_>0\0Jr0gtDk)FGXa*%qDKG4C',qa\$\n0Cպ)%(OQV ҲBRjT9B (*\"vDV]~VdŘr_ØFX/.ac%D(sq Dr)˒H|!E)J!=' I=J2xXdDVznL7H)kZQb%`4\\\$sQ\n(B-!Ld,=+VE#[3á\"9mI0+MAX49a.BHXBaP(Rx7'D1vB\0 ~zIԄBࡒu]Xq|PAE'D#:#QU'+M;\",s(\\-1z9&b8tyzfdrg?騕00 8{.d^bBj((tb\$!\$ua\\-`x \0L ԟ(JAa<'>O=PrQ@R9cK\\\"G4ݐCN\"xS\n\nEHLIidΝ8!\"9`*@-SQUj` YĄPzmpJiTrzmÐ_B-L\$P*P\0D0\"VJC4s2<#*\"ix7f.?bڛsO%d]qS>=Lj,V! X| 2iydRsJq `w]Lc@B{KAM]#%jQ\rB'Pb\rEL`6\0D͂c;JD*)D}wt`L\r 2gR2VsKIʀSj(\"g0b%`']phR:=xm!Q4T\\عSk\n9А!J @.qX`~e7ǼZ\r9^s{+썔fcCJ\r0hxZ;OaiAa s!q%ٕ>Al@Ƙ#~NxKV|~.9E\"|_+YDbOp-S\r(Dkxp![;\\T;չmw۞PL1#_8ĀW*w}Gh8`QφC|lF\\B\r}@N\0t4db\"G\"P_YGDF!:8O{v%h}ъ1#eߑa|}W\0;I|GR^\"9)t0\04QfϊDx|9Sn, ـG\0ږn#Ϯ\rىE\0002/Cj,V/dG'OG'4aLIPKpuK0V:ucWN..VvrwZ#ΐN-@&eݐl2^wC܁P;Ԛ0>viڬFVVi\rkI!p\r=\"E\\ɑ \nf\rh#n9@Go8`;AqPؑUpL#VPo6KqL\"zlxQhS^(hbw&<#6,'8G; q/\r7q\\1gS mVc`}@\0\rJ0R! !`!ց-\"`\"!G#%\r^ޠ0Pd\0\$Af^ߊр2fo'2jJaN''\n\\Fxg抖͠i +2H^aFb*!k+*Xj.Rh\r/C?nJ%gpx8B,&\"\nZOJx0)!^aRG|Kx^z.Bi#bZݓ2Ph560B.C7\"cDtOQVz,y9:za+,/di:9T`J\raƞj\"multi=$this->query($I);}function
store_result(){return$this->multi;}function
next_result(){return
false;}}if(extension_loaded('pdo')){abstract
class
PdoDb
extends
SqlDb{protected$pdo;function
dsn($bc,$V,$G,array$vf=array()){$vf[\PDO::ATTR_ERRMODE]=\PDO::ERRMODE_SILENT;$vf[\PDO::ATTR_STATEMENT_CLASS]=array('Adminer\PdoResult');try{$this->pdo=new
\PDO($bc,$V,$G,$vf);}catch(\Exception$vc){return$vc->getMessage();}$this->server_info=@$this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);return'';}function
quote($yh){return$this->pdo->quote($yh);}function
query($I,$ui=false){$J=$this->pdo->query($I);$this->error="";if(!$J){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error=lang(23);return
false;}$this->store_result($J);return$J;}function
store_result($J=null){if(!$J){$J=$this->multi;if(!$J)return
false;}if($J->columnCount()){$J->num_rows=$J->rowCount();return$J;}$this->affected_rows=$J->rowCount();return
true;}function
next_result(){$J=$this->multi;if(!is_object($J))return
false;$J->_offset=0;return@$J->nextRowset();}}class
PdoResult
extends
\PDOStatement{var$_offset=0,$num_rows;function
fetch_assoc(){return$this->fetch_array(\PDO::FETCH_ASSOC);}function
fetch_row(){return$this->fetch_array(\PDO::FETCH_NUM);}private
function
fetch_array($Xe){$K=$this->fetch($Xe);return($K?array_map(array($this,'unresource'),$K):$K);}private
function
unresource($X){return(is_resource($X)?stream_get_contents($X):$X);}function
fetch_field(){$L=(object)$this->getColumnMeta($this->_offset++);$U=$L->pdo_type;$L->type=($U==\PDO::PARAM_INT?0:15);$L->charsetnr=($U==\PDO::PARAM_LOB||(isset($L->flags)&&in_array("blob",(array)$L->flags))?63:0);return$L;}function
seek($lf){for($s=0;$s<$lf;$s++)$this->fetch();}}}function
add_driver($t,$D){SqlDriver::$drivers[$t]=$D;}function
get_driver($t){return
SqlDriver::$drivers[$t];}abstract
class
SqlDriver{static$instance;static$drivers=array();static$extensions=array();static$jush;protected$conn;protected$types=array();var$delimiter=";";var$insertFunctions=array();var$editFunctions=array();var$unsigned=array();var$operators=array();var$functions=array();var$grouping=array();var$onActions="RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT";var$partitionBy=array();var$inout="IN|OUT|INOUT";var$enumLength="'(?:''|[^'\\\\]|\\\\.)*'";var$generated=array();static
function
connect($O,$V,$G){$f=new
Db;return($f->attach($O,$V,$G)?:$f);}function
__construct(Db$f){$this->conn=$f;}function
types(){return
call_user_func_array('array_merge',array_values($this->types));}function
structuredTypes(){return
array_map('array_keys',$this->types);}function
enumLength(array$l){}function
unconvertFunction(array$l){}function
select($R,array$N,array$Z,array$r,array$xf=array(),$z=1,$F=0,$og=false){$be=(count($r)selectQueryBuild($N,$Z,$r,$xf,$z,$F);if(!$I)$I="SELECT".limit(($_GET["page"]!="last"&&$z&&$r&&$be&&JUSH=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$N)."\nFROM ".table($R),($Z?"\nWHERE ".implode(" AND ",$Z):"").($r&&$be?"\nGROUP BY ".implode(", ",$r):"").($xf?"\nORDER BY ".implode(", ",$xf):""),$z,($F?$z*$F:0),"\n");$wh=microtime(true);$K=$this->conn->query($I);if($og)echo
adminer()->selectQuery($I,$wh,!$K);return$K;}function
delete($R,$ug,$z=0){$I="FROM ".table($R);return
queries("DELETE".($z?limit1($R,$I,$ug):" $I$ug"));}function
update($R,array$P,$ug,$z=0,$bh="\n"){$Oi=array();foreach($P
as$y=>$X)$Oi[]="$y = $X";$I=table($R)." SET$bh".implode(",$bh",$Oi);return
queries("UPDATE".($z?limit1($R,$I,$ug,$bh):" $I$ug"));}function
insert($R,array$P){return
queries("INSERT INTO ".table($R).($P?" (".implode(", ",array_keys($P)).")\nVALUES (".implode(", ",$P).")":" DEFAULT VALUES").$this->insertReturning($R));}function
insertReturning($R){return"";}function
insertUpdate($R,array$M,array$ng){return
false;}function
begin(){return
queries("BEGIN");}function
commit(){return
queries("COMMIT");}function
rollback(){return
queries("ROLLBACK");}function
slowQuery($I,$Xh){}function
convertSearch($u,array$X,array$l){return$u;}function
value($X,array$l){return(method_exists($this->conn,'value')?$this->conn->value($X,$l):$X);}function
quoteBinary($Pg){return
q($Pg);}function
warnings(){}function
tableHelp($D,$ee=false){}function
inheritsFrom($R){return
array();}function
inheritedTables($R){return
array();}function
partitionsInfo($R){return
array();}function
hasCStyleEscapes(){return
false;}function
engines(){return
array();}function
supportsIndex(array$S){return!is_view($S);}function
indexAlgorithms(array$Fh){return
array();}function
checkConstraints($R){return
get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE
FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME".($this->conn->flavor=='maria'?" AND c.TABLE_NAME = t.TABLE_NAME":"")."
WHERE c.CONSTRAINT_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
AND t.TABLE_NAME = ".q($R).(JUSH=="pgsql"?"
AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'":""),$this->conn);}function
allFields(){$K=array();if(DB!=""){foreach(get_rows("SELECT TABLE_NAME AS tab, COLUMN_NAME AS field, IS_NULLABLE AS nullable, DATA_TYPE AS type, CHARACTER_MAXIMUM_LENGTH AS length".(JUSH=='sql'?", COLUMN_KEY = 'PRI' AS `primary`":"")."
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
ORDER BY TABLE_NAME, ORDINAL_POSITION",$this->conn)as$L){$L["null"]=($L["nullable"]=="YES");$K[$L["tab"]][]=$L;}}return$K;}}add_driver("pgsql","PostgreSQL");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($rc,$k){if(ini_bool("html_errors"))$k=html_entity_decode(strip_tags($k));$k=preg_replace('~^[^:]*: ~','',$k);$this->error=$k;}function
attach($O,$V,$G){$j=adminer()->database();set_error_handler(array($this,'_error'));list($wd,$eg)=host_port(addcslashes($O,"'\\"));$this->string="host='$wd'".($eg?" port='$eg'":"")." user='".addcslashes($V,"'\\")."' password='".addcslashes($G,"'\\")."'";$vh=adminer()->connectSsl();if(isset($vh["mode"]))$this->string
.=" sslmode='".$vh["mode"]."'";$this->link=@pg_connect("$this->string dbname='".($j!=""?addcslashes($j,"'\\"):"postgres")."'",PGSQL_CONNECT_FORCE_NEW);if(!$this->link&&$j!=""){$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($yh){return(function_exists('pg_escape_literal')?pg_escape_literal($this->link,$yh):"'".pg_escape_string($this->link,$yh)."'");}function
value($X,array$l){return($l["type"]=="bytea"&&$X!==null?pg_unescape_bytea($X):$X);}function
select_db($Eb){if($Eb==adminer()->database())return$this->database;$K=@pg_connect("$this->string dbname='".addcslashes($Eb,"'\\")."'",PGSQL_CONNECT_FORCE_NEW);if($K)$this->link=$K;return$K;}function
close(){$this->link=@pg_connect("$this->string dbname='postgres'");}function
query($I,$ui=false){$J=@pg_query($this->link,$I);$this->error="";if(!$J){$this->error=pg_last_error($this->link);$K=false;}elseif(!pg_num_fields($J)){$this->affected_rows=pg_affected_rows($J);$K=true;}else$K=new
Result($J);if($this->timeout){$this->timeout=0;$this->query("RESET statement_timeout");}return$K;}function
warnings(){return
h(pg_last_notice($this->link));}function
copyFrom($R,array$M){$this->error='';set_error_handler(function($rc,$k){$this->error=(ini_bool('html_errors')?html_entity_decode($k):$k);return
true;});$K=pg_copy_from($this->link,$R,$M);restore_error_handler();return$K;}}class
Result{var$num_rows;private$result,$offset=0;function
__construct($J){$this->result=$J;$this->num_rows=pg_num_rows($J);}function
fetch_assoc(){return
pg_fetch_assoc($this->result);}function
fetch_row(){return
pg_fetch_row($this->result);}function
fetch_field(){$c=$this->offset++;$K=new
\stdClass;$K->orgtable=pg_field_table($this->result,$c);$K->name=pg_field_name($this->result,$c);$U=pg_field_type($this->result,$c);$K->type=(preg_match(number_type(),$U)?0:15);$K->charsetnr=($U=="bytea"?63:0);return$K;}function
__destruct(){pg_free_result($this->result);}}}elseif(extension_loaded("pdo_pgsql")){class
PgsqlDb
extends
PdoDb{var$extension="PDO_PgSQL";var$timeout=0;function
attach($O,$V,$G){$j=adminer()->database();list($wd,$eg)=host_port(addcslashes($O,"'\\"));$bc="pgsql:host='$wd'".($eg?" port='$eg'":"")." client_encoding=utf8 dbname='".($j!=""?addcslashes($j,"'\\"):"postgres")."'";$vh=adminer()->connectSsl();if(isset($vh["mode"]))$bc
.=" sslmode='".$vh["mode"]."'";return$this->dsn($bc,$V,$G);}function
select_db($Eb){return(adminer()->database()==$Eb);}function
query($I,$ui=false){$K=parent::query($I,$ui);if($this->timeout){$this->timeout=0;parent::query("RESET statement_timeout");}return$K;}function
warnings(){}function
copyFrom($R,array$M){$K=$this->pdo->pgsqlCopyFromArray($R,$M);$this->error=idx($this->pdo->errorInfo(),2)?:'';return$K;}function
close(){}}}if(class_exists('Adminer\PgsqlDb')){class
Db
extends
PgsqlDb{function
multi_query($I){if(preg_match('~\bCOPY\s+(.+?)\s+FROM\s+stdin;\n?(.*)\n\\\\\.$~is',str_replace("\r\n","\n",$I),$B)){$M=explode("\n",$B[2]);$this->affected_rows=count($M);return$this->copyFrom($B[1],$M);}return
parent::multi_query($I);}}}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($O,$V,$G){$f=parent::connect($O,$V,$G);if(is_string($f))return$f;$Ri=get_val("SELECT version()",0,$f);$f->flavor=(preg_match('~CockroachDB~',$Ri)?'cockroach':'');$f->server_info=preg_replace('~^\D*([\d.]+[-\w]*).*~','\1',$Ri);if(min_version(9,0,$f))$f->query("SET application_name = 'Adminer'");if($f->flavor=='cockroach')add_driver(DRIVER,"CockroachDB");return$f;}function
__construct(Db$f){parent::__construct($f);$this->types=array(lang(24)=>array("smallint"=>5,"integer"=>10,"bigint"=>19,"boolean"=>1,"numeric"=>0,"real"=>7,"double precision"=>16,"money"=>20),lang(25)=>array("date"=>13,"time"=>17,"timestamp"=>20,"timestamptz"=>21,"interval"=>0),lang(26)=>array("character"=>0,"character varying"=>0,"text"=>0,"tsquery"=>0,"tsvector"=>0,"uuid"=>0,"xml"=>0),lang(27)=>array("bit"=>0,"bit varying"=>0,"bytea"=>0),lang(28)=>array("cidr"=>43,"inet"=>43,"macaddr"=>17,"macaddr8"=>23,"txid_snapshot"=>0),lang(29)=>array("box"=>0,"circle"=>0,"line"=>0,"lseg"=>0,"path"=>0,"point"=>0,"polygon"=>0),);if(min_version(9.2,0,$f)){$this->types[lang(26)]["json"]=4294967295;if(min_version(9.4,0,$f))$this->types[lang(26)]["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,$f))$this->generated=array("STORED");$this->partitionBy=array("RANGE","LIST");if(!$f->flavor)$this->partitionBy[]="HASH";}function
enumLength(array$l){$nc=$this->types[lang(6)][$l["type"]];return($nc?type_values($nc):"");}function
setUserTypes($ti){$this->types[lang(6)]=array_flip($ti);}function
insertReturning($R){$ya=array_filter(fields($R),function($l){return$l['auto_increment'];});return(count($ya)==1?" RETURNING ".idf_escape(key($ya)):"");}function
insertUpdate($R,array$M,array$ng){foreach($M
as$P){$Ai=array();$Z=array();foreach($P
as$y=>$X){$Ai[]="$y = $X";if(isset($ng[idf_unescape($y)]))$Z[]="$y = $X";}if(!(($Z&&queries("UPDATE ".table($R)." SET ".implode(", ",$Ai)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($P)).") VALUES (".implode(", ",$P).")")))return
false;}return
true;}function
slowQuery($I,$Xh){$this->conn->query("SET statement_timeout = ".(1000*$Xh));$this->conn->timeout=1000*$Xh;return$I;}function
convertSearch($u,array$X,array$l){$Uh="char|text";if(strpos($X["op"],"LIKE")===false)$Uh
.="|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|".number_type();return(preg_match("~$Uh~",$l["type"])?$u:"CAST($u AS text)");}function
quoteBinary($Pg){return"'\\x".bin2hex($Pg)."'";}function
warnings(){return$this->conn->warnings();}function
tableHelp($D,$ee=false){$ze=array("information_schema"=>"infoschema","pg_catalog"=>($ee?"view":"catalog"),);$_=$ze[$_GET["ns"]];if($_)return"$_-".str_replace("_","-",$D).".html";}function
inheritsFrom($R){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($R)." ORDER BY 2, 1");}function
inheritedTables($R){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($R)." ORDER BY 2, 1");}function
partitionsInfo($R){$L=(min_version(10)?$this->conn->query("SELECT * FROM pg_partitioned_table WHERE partrelid = ".$this->tableOid($R))->fetch_assoc():null);if($L){$b=get_vals("SELECT attname FROM pg_attribute WHERE attrelid = $L[partrelid] AND attnum IN (".str_replace(" ",", ",$L["partattrs"]).")");$La=array('h'=>'HASH','l'=>'LIST','r'=>'RANGE');return
array("partition_by"=>$La[$L["partstrat"]],"partition"=>implode(", ",array_map('Adminer\idf_escape',$b)),);}return
array();}function
tableOid($R){return"(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = ".q($R)." AND relkind IN ('r', 'm', 'v', 'f', 'p'))";}function
indexAlgorithms(array$Fh){static$K=array();if(!$K)$K=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$K;}function
supportsIndex(array$S){return$S["Engine"]!="view";}function
hasCStyleEscapes(){static$Ma;if($Ma===null)$Ma=(get_val("SHOW standard_conforming_strings",0,$this->conn)=="off");return$Ma;}}function
idf_escape($u){return'"'.str_replace('"','""',$u).'"';}function
table($u){return
idf_escape($u);}function
get_databases($Tc){return
get_vals("SELECT datname FROM pg_database
WHERE datallowconn = TRUE AND has_database_privilege(datname, 'CONNECT')
ORDER BY datname");}function
limit($I,$Z,$z,$lf=0,$bh=" "){return" $I$Z".($z?$bh."LIMIT $z".($lf?" OFFSET $lf":""):"");}function
limit1($R,$I,$Z,$bh="\n"){return(preg_match('~^INTO~',$I)?limit($I,$Z,1,0,$bh):" $I".(is_view(table_status1($R))?$Z:$bh."WHERE ctid = (SELECT ctid FROM ".table($R).$Z.$bh."LIMIT 1)"));}function
db_collation($j,$eb){return
get_val("SELECT datcollate FROM pg_database WHERE datname = ".q($j));}function
logged_user(){return
get_val("SELECT user");}function
tables_list(){$I="SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";if(support("materializedview"))$I
.="
UNION ALL
SELECT matviewname, 'MATERIALIZED VIEW'
FROM pg_matviews
WHERE schemaname = current_schema()";$I
.="
ORDER BY 1";return
get_key_vals($I);}function
count_tables($i){$K=array();foreach($i
as$j){if(connection()->select_db($j))$K[$j]=count(tables_list());}return$K;}function
table_status($D=""){static$pd;if($pd===null)$pd=get_val("SELECT 'pg_table_size'::regproc");$K=array();foreach(get_rows("SELECT
relname AS \"Name\",
CASE relkind WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' ELSE 'table' END AS \"Engine\"".($pd?",
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."
".($D!=""?"AND relname = ".q($D):"ORDER BY relname"))as$L)$K[$L["Name"]]=$L;return$K;}function
is_view($S){return
in_array($S["Engine"],array("view","materialized view"));}function
fk_support($S){return
true;}function
fields($R){$K=array();$pa=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($R)."
AND NOT a.attisdropped
AND a.attnum > 0
ORDER BY a.attnum")as$L){preg_match('~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~',$L["full_type"],$B);list(,$U,$ve,$L["length"],$ia,$ua)=$B;$L["length"].=$ua;$Sa=$U.$ia;if(isset($pa[$Sa])){$L["type"]=$pa[$Sa];$L["full_type"]=$L["type"].$ve.$ua;}else{$L["type"]=$U;$L["full_type"]=$L["type"].$ve.$ia.$ua;}if(in_array($L['attidentity'],array('a','d')))$L['default']='GENERATED '.($L['attidentity']=='d'?'BY DEFAULT':'ALWAYS').' AS IDENTITY';$L["generated"]=($L["attgenerated"]=="s"?"STORED":"");$L["null"]=!$L["attnotnull"];$L["auto_increment"]=$L['attidentity']||preg_match('~^nextval\(~i',$L["default"])||preg_match('~^unique_rowid\(~',$L["default"]);$L["privileges"]=array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1);if(!$L['generated']&&preg_match('~(.+)::[^,)]+(.*)~',$L["default"],$B))$L["default"]=($B[1]=="NULL"?null:idf_unescape($B[1]).$B[2]);$K[$L["field"]]=$L;}return$K;}function
indexes($R,$g=null){$g=connection($g);$K=array();$Hh=driver()->tableOid($R);$d=get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $Hh AND attnum > 0",$g);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 = $Hh
ORDER BY indisprimary DESC, indisunique DESC",$g)as$L){$Fg=$L["relname"];$K[$Fg]["type"]=($L["indisprimary"]?"PRIMARY":($L["indisunique"]?"UNIQUE":"INDEX"));$K[$Fg]["columns"]=array();$K[$Fg]["descs"]=array();$K[$Fg]["algorithm"]=$L["amname"];$K[$Fg]["partial"]=$L["partial"];$Md=preg_split('~(?<=\)), (?=\()~',$L["indexpr"]);foreach(explode(" ",$L["indkey"])as$Nd)$K[$Fg]["columns"][]=($Nd?$d[$Nd]:array_shift($Md));foreach(explode(" ",$L["indoption"])as$Od)$K[$Fg]["descs"][]=(intval($Od)&1?'1':null);$K[$Fg]["lengths"]=array();}return$K;}function
foreign_keys($R){$K=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($R)."
AND contype = 'f'::char
ORDER BY conkey, conname")as$L){$L['deferrable']=($L['deferrable']?'':'NOT ').'DEFERRABLE'.($L['deferred']?' INITIALLY DEFERRED':'');if(preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA',$L['definition'],$B)){$L['source']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$B[1])));if(preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~',$B[2],$Ce)){$L['ns']=idf_unescape($Ce[2]);$L['table']=idf_unescape($Ce[4]);}$L['target']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$B[3])));$L['on_delete']=(preg_match("~ON DELETE (".driver()->onActions.")~",$B[4],$Ce)?$Ce[1]:'NO ACTION');$L['on_update']=(preg_match("~ON UPDATE (".driver()->onActions.")~",$B[4],$Ce)?$Ce[1]:'NO ACTION');$K[$L['conname']]=$L;}}return$K;}function
view($D){return
array("select"=>trim(get_val("SELECT pg_get_viewdef(".driver()->tableOid($D).")")));}function
collations(){return
array();}function
information_schema($j){return
get_schema()=="information_schema";}function
error(){$K=h(connection()->error);if(preg_match('~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s',$K,$B))$K=$B[1].preg_replace('~((?:[^&]|&[^;]*;){'.strlen($B[3]).'})(.*)~','\1\2',$B[2]).$B[4];return
nl_br($K);}function
create_database($j,$db){return
queries("CREATE DATABASE ".idf_escape($j).($db?" ENCODING ".idf_escape($db):""));}function
drop_databases($i){connection()->close();return
apply_queries("DROP DATABASE",$i,'Adminer\idf_escape');}function
rename_database($D,$db){connection()->close();return
queries("ALTER DATABASE ".idf_escape(DB)." RENAME TO ".idf_escape($D));}function
auto_increment(){return"";}function
alter_table($R,$D,$m,$Vc,$ib,$lc,$db,$ya,$Uf){$ra=array();$tg=array();if($R!=""&&$R!=$D)$tg[]="ALTER TABLE ".table($R)." RENAME TO ".table($D);$ch="";foreach($m
as$l){$c=idf_escape($l[0]);$X=$l[1];if(!$X)$ra[]="DROP $c";else{$Ni=$X[5];unset($X[5]);if($l[0]==""){if(isset($X[6]))$X[1]=($X[1]==" bigint"?" big":($X[1]==" smallint"?" small":" "))."serial";$ra[]=($R!=""?"ADD ":" ").implode($X);if(isset($X[6]))$ra[]=($R!=""?"ADD":" ")." PRIMARY KEY ($X[0])";}else{if($c!=$X[0])$tg[]="ALTER TABLE ".table($D)." RENAME $c TO $X[0]";$ra[]="ALTER $c TYPE$X[1]";$dh=$R."_".idf_unescape($X[0])."_seq";$ra[]="ALTER $c ".($X[3]?"SET".preg_replace('~GENERATED ALWAYS(.*) STORED~','EXPRESSION\1',$X[3]):(isset($X[6])?"SET DEFAULT nextval(".q($dh).")":"DROP DEFAULT"));if(isset($X[6]))$ch="CREATE SEQUENCE IF NOT EXISTS ".idf_escape($dh)." OWNED BY ".idf_escape($R).".$X[0]";$ra[]="ALTER $c ".($X[2]==" NULL"?"DROP NOT":"SET").$X[2];}if($l[0]!=""||$Ni!="")$tg[]="COMMENT ON COLUMN ".table($D).".$X[0] IS ".($Ni!=""?substr($Ni,9):"''");}}$ra=array_merge($ra,$Vc);if($R==""){$Q="";if($Uf){$Ya=(connection()->flavor=='cockroach');$Q=" PARTITION BY $Uf[partition_by]($Uf[partition])";if($Uf["partition_by"]=='HASH'){$Vf=+$Uf["partitions"];for($s=0;$s<$Vf;$s++)$tg[]="CREATE TABLE ".idf_escape($D."_$s")." PARTITION OF ".idf_escape($D)." FOR VALUES WITH (MODULUS $Vf, REMAINDER $s)";}else{$mg="MINVALUE";foreach($Uf["partition_names"]as$s=>$X){$Y=$Uf["partition_values"][$s];$Qf=" VALUES ".($Uf["partition_by"]=='LIST'?"IN ($Y)":"FROM ($mg) TO ($Y)");if($Ya)$Q
.=($s?",":" (")."\n PARTITION ".(preg_match('~^DEFAULT$~i',$X)?$X:idf_escape($X))."$Qf";else$tg[]="CREATE TABLE ".idf_escape($D."_$X")." PARTITION OF ".idf_escape($D)." FOR$Qf";$mg=$Y;}$Q
.=($Ya?"\n)":"");}}array_unshift($tg,"CREATE TABLE ".table($D)." (\n".implode(",\n",$ra)."\n)$Q");}elseif($ra)array_unshift($tg,"ALTER TABLE ".table($R)."\n".implode(",\n",$ra));if($ch)array_unshift($tg,$ch);if($ib!==null)$tg[]="COMMENT ON TABLE ".table($D)." IS ".q($ib);foreach($tg
as$I){if(!queries($I))return
false;}return
true;}function
alter_indexes($R,$ra){$h=array();$Yb=array();$tg=array();foreach($ra
as$X){if($X[0]!="INDEX")$h[]=($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")$Yb[]=idf_escape($X[1]);else$tg[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R).($X[3]?" USING $X[3]":"")." (".implode(", ",$X[2]).")".($X[4]?" WHERE $X[4]":"");}if($h)array_unshift($tg,"ALTER TABLE ".table($R).implode(",",$h));if($Yb)array_unshift($tg,"DROP INDEX ".implode(", ",$Yb));foreach($tg
as$I){if(!queries($I))return
false;}return
true;}function
truncate_tables($T){return
queries("TRUNCATE ".implode(", ",array_map('Adminer\table',$T)));}function
drop_views($Ti){return
drop_tables($Ti);}function
drop_tables($T){foreach($T
as$R){$Q=table_status1($R);if(!queries("DROP ".strtoupper($Q["Engine"])." ".table($R)))return
false;}return
true;}function
move_tables($T,$Ti,$Ph){foreach(array_merge($T,$Ti)as$R){$Q=table_status1($R);if(!queries("ALTER ".strtoupper($Q["Engine"])." ".table($R)." SET SCHEMA ".idf_escape($Ph)))return
false;}return
true;}function
trigger($D,$R){if($D=="")return
array("Statement"=>"EXECUTE PROCEDURE ()");$d=array();$Z="WHERE trigger_schema = current_schema() AND event_object_table = ".q($R)." AND trigger_name = ".q($D);foreach(get_rows("SELECT * FROM information_schema.triggered_update_columns $Z")as$L)$d[]=$L["event_object_column"];$K=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$L){if($d&&$L["Event"]=="UPDATE")$L["Event"].=" OF";$L["Of"]=implode(", ",$d);if($K)$L["Event"].=" OR $K[Event]";$K=$L;}return$K;}function
triggers($R){$K=array();foreach(get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = ".q($R))as$L){$oi=trigger($L["trigger_name"],$R);$K[$oi["Trigger"]]=array($oi["Timing"],$oi["Event"]);}return$K;}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($D,$U){$M=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($D));$K=idx($M,0,array());$K["returns"]=array("type"=>$K["type_udt_name"]);$K["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($D).'
ORDER BY ordinal_position');return$K;}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($D,$L){$K=array();foreach($L["fields"]as$l){$ve=$l["length"];$K[]=$l["type"].($ve?"($ve)":"");}return
idf_escape($D)."(".implode(", ",$K).")";}function
last_id($J){$L=(is_object($J)?$J->fetch_row():array());return($L?$L[0]:0);}function
explain($f,$I){return$f->query("EXPLAIN $I");}function
found_rows($S,$Z){if(preg_match("~ rows=([0-9]+)~",get_val("EXPLAIN SELECT * FROM ".idf_escape($S["Name"]).($Z?" WHERE ".implode(" AND ",$Z):"")),$Eg))return$Eg[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($t){$qc=get_vals("SELECT enumlabel FROM pg_enum WHERE enumtypid = $t ORDER BY enumsortorder");return($qc?"'".implode("', '",array_map('addslashes',$qc))."'":"");}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($Qg,$g=null){if(!$g)$g=connection();$K=$g->query("SET search_path TO ".idf_escape($Qg));driver()->setUserTypes(types());return$K;}function
foreign_keys_sql($R){$K="";$Q=table_status1($R);$Rc=foreign_keys($R);ksort($Rc);foreach($Rc
as$Qc=>$Pc)$K
.="ALTER TABLE ONLY ".idf_escape($Q['nspname']).".".idf_escape($Q['Name'])." ADD CONSTRAINT ".idf_escape($Qc)." $Pc[definition];\n";return($K?"$K\n":$K);}function
create_sql($R,$ya,$_h){$Jg=array();$eh=array();$Q=table_status1($R);$if=idf_escape($Q['nspname']);if(is_view($Q)){$Si=view($R);return
rtrim("CREATE VIEW $if.".idf_escape($R)." AS $Si[select]",";");}$m=fields($R);if(count($Q)<2||empty($m))return
false;$K="CREATE TABLE $if.".idf_escape($Q['Name'])." (\n ";foreach($m
as$l){$Of=idf_escape($l['field']).' '.$l['full_type'].default_value($l).($l['null']?"":" NOT NULL");$Jg[]=$Of;if(preg_match('~nextval\(\'([^\']+)\'\)~',$l['default'],$De)){$dh=$De[1];$rh=first(get_rows((min_version(10)?"SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = ".q(idf_unescape($dh)):"SELECT * FROM $dh"),null,"-- "));$eh[]=($_h=="DROP+CREATE"?"DROP SEQUENCE IF EXISTS $if.$dh;\n":"")."CREATE SEQUENCE $if.$dh INCREMENT $rh[increment_by] MINVALUE $rh[min_value] MAXVALUE $rh[max_value]".($ya&&$rh['last_value']?" START ".($rh["last_value"]+1):"")." CACHE $rh[cache_value];";}}if(!empty($eh))$K=implode("\n\n",$eh)."\n\n$K";$ng="";foreach(indexes($R)as$Kd=>$v){if($v['type']=='PRIMARY'){$ng=$Kd;$Jg[]="CONSTRAINT ".idf_escape($Kd)." PRIMARY KEY (".implode(', ',array_map('Adminer\idf_escape',$v['columns'])).")";}}foreach(driver()->checkConstraints($R)as$ob=>$pb)$Jg[]="CONSTRAINT ".idf_escape($ob)." CHECK ($pb)";$K
.=implode(",\n ",$Jg)."\n)";$Qf=driver()->partitionsInfo($Q['Name']);if($Qf)$K
.="\nPARTITION BY $Qf[partition_by]($Qf[partition])";$K
.="\nWITH (oids = ".($Q['Oid']?'true':'false').");";if($Q['Comment'])$K
.="\n\nCOMMENT ON TABLE $if.".idf_escape($Q['Name'])." IS ".q($Q['Comment']).";";foreach($m
as$Ic=>$l){if($l['comment'])$K
.="\n\nCOMMENT ON COLUMN $if.".idf_escape($Q['Name']).".".idf_escape($Ic)." IS ".q($l['comment']).";";}foreach(get_rows("SELECT indexdef FROM pg_catalog.pg_indexes WHERE schemaname = current_schema() AND tablename = ".q($R).($ng?" AND indexname != ".q($ng):""),null,"-- ")as$L)$K
.="\n\n$L[indexdef];";return
rtrim($K,';');}function
truncate_sql($R){return"TRUNCATE ".table($R);}function
trigger_sql($R){$Q=table_status1($R);$K="";foreach(triggers($R)as$ni=>$mi){$oi=trigger($ni,$Q['Name']);$K
.="\nCREATE TRIGGER ".idf_escape($oi['Trigger'])." $oi[Timing] $oi[Event] ON ".idf_escape($Q["nspname"]).".".idf_escape($Q['Name'])." $oi[Type] $oi[Statement];;\n";}return$K;}function
use_sql($Eb,$_h=""){$D=idf_escape($Eb);$K="";if(preg_match('~CREATE~',$_h)){if($_h=="DROP+CREATE")$K="DROP DATABASE IF EXISTS $D;\n";$K
.="CREATE DATABASE $D;\n";}return"$K\\connect $D";}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($l){}function
unconvert_field($l,$K){return$K;}function
support($Gc){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').')$~',$Gc);}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");}class
Adminer{static$instance;var$error='';function
name(){return"
Adminer";}function
credentials(){return
array(SERVER,$_GET["username"],get_password());}function
connectSsl(){}function
permanentLogin($h=false){return
password_file($h);}function
bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
serverName($O){return
h($O);}function
database(){return
DB;}function
databases($Tc=true){return
get_databases($Tc);}function
pluginsLinks(){}function
operators(){return
driver()->operators;}function
schemas(){return
schemas();}function
queryTimeout(){return
2;}function
afterConnect(){}function
headers(){}function
csp(array$yb){return$yb;}function
head($Bb=null){return
true;}function
bodyClass(){echo" adminer";}function
css(){$K=array();foreach(array("","-dark")as$Xe){$n="adminer$Xe.css";if(file_exists($n)){$Lc=file_get_contents($n);$K["$n?v=".crc32($Lc)]=($Xe?"dark":(preg_match('~prefers-color-scheme:\s*dark~',$Lc)?'':'light'));}}return$K;}function
loginForm(){echo"\n",adminer()->loginFormField('driver','| '.lang(30).' | ',input_hidden("auth[driver]","pgsql")."PostgreSQL"),adminer()->loginFormField('server',' |
|---|
| '.lang(31).' | ',''),adminer()->loginFormField('username',' |
|---|
| '.lang(33).' | ',''),adminer()->loginFormField('password',' |
|---|
| '.lang(34).' | ',''),adminer()->loginFormField('db',' |
|---|
| '.lang(35).' | ','')," |
|---|
\n","\n",checkbox("auth[permanent]",1,$_COOKIE["adminer_permanent"],lang(37))."\n";}function
loginFormField($D,$rd,$Y){return$rd.$Y."\n";}function
login($_e,$G){if($G=="")return
lang(38,target_blank());return
true;}function
tableName(array$Fh){return
h($Fh["Name"]);}function
fieldName(array$l,$xf=0){$U=$l["full_type"];$ib=$l["comment"];return''.h($l["field"]).'';}function
selectLinks(array$Fh,$P=""){$D=$Fh["Name"];echo'
';$ze=array("select"=>lang(39));if(support("table")||support("indexes"))$ze["table"]=lang(40);$ee=false;if(support("table")){$ee=is_view($Fh);if($ee){if(support("view"))$ze["view"]=lang(41);}elseif(function_exists('Adminer\alter_table'))$ze["create"]=lang(42);}if($P!==null)$ze["edit"]=lang(43);foreach($ze
as$y=>$X)echo" $X";echo
doc_link(array(JUSH=>driver()->tableHelp($D,$ee)),"?"),"\n";}function
foreignKeys($R){return
foreign_keys($R);}function
backwardKeys($R,$Eh){return
array();}function
backwardKeysPrint(array$Aa,array$L){}function
selectQuery($I,$wh,$Ec=false){$K="
\n";if(!$Ec&&($Wi=driver()->warnings())){$t="warnings";$K=", ".lang(44)."".script("qsl('a').onclick = partial(toggle, '$t');","")."$K\n$Wi
\n";}return"".h(str_replace("\n"," ",$I))." (".format_time($wh).")".(support("sql")?" ".lang(12)."":"").$K;}function
sqlCommandQuery($I){return
shorten_utf8(trim($I),1000);}function
sqlPrintAfter(){}function
rowDescription($R){return"";}function
rowDescriptions(array$M,array$Wc){return$M;}function
selectLink($X,array$l){}function
selectVal($X,$_,array$l,$Gf){$K=($X===null?"NULL":(preg_match("~char|binary|boolean~",$l["type"])&&!preg_match("~var~",$l["type"])?"$X":(preg_match('~json~',$l["type"])?"$X":$X)));if(is_blob($l)&&!is_utf8($X))$K="".lang(45,strlen($Gf))."";return($_?"$K":$K);}function
editVal($X,array$l){return$X;}function
config(){return
array();}function
tableStructurePrint(array$m,$Fh=null){echo"
\n";}function
tableIndexesPrint(array$w,array$Fh){$Pf=false;foreach($w
as$D=>$v)$Pf|=!!$v["partial"];echo"\n";$Kb=first(driver()->indexAlgorithms($Fh));foreach($w
as$D=>$v){ksort($v["columns"]);$og=array();foreach($v["columns"]as$y=>$X)$og[]="".h($X)."".($v["lengths"][$y]?"(".$v["lengths"][$y].")":"").($v["descs"][$y]?" DESC":"");echo"","| $v[type]".($Kb&&$v['algorithm']!=$Kb?" ($v[algorithm])":"")," | ".implode(", ",$og);if($Pf)echo" | ".($v['partial']?"WHERE ".h($v['partial']):"");echo"\n";}echo" |
\n";}function
selectColumnsPrint(array$N,array$d){print_fieldset("select",lang(51),$N);$s=0;$N[""]=array();foreach($N
as$y=>$X){$X=idx($_GET["columns"],$y,array());$c=select_input(" name='columns[$s][col]'",$d,$X["col"],($y!==""?"selectFieldChange":"selectAddRow"));echo"".(driver()->functions||driver()->grouping?html_select("columns[$s][fun]",array(-1=>"")+array_filter(array(lang(52)=>driver()->functions,lang(53)=>driver()->grouping)),$X["fun"]).on_help("event.target.value && event.target.value.replace(/ |\$/, '(') + ')'",1).script("qsl('select').onchange = function () { helpClose();".($y!==""?"":" qsl('select, input', this.parentNode).onchange();")." };","")."($c)":$c)."
\n";$s++;}echo"\n";}function
selectSearchPrint(array$Z,array$d,array$w){print_fieldset("search",lang(54),$Z);foreach($w
as$s=>$v){if($v["type"]=="FULLTEXT")echo"(".implode(", ",array_map('Adminer\h',$v["columns"])).") AGAINST"," ",script("qsl('input').oninput = selectFieldChange;",""),(JUSH=='sql'?checkbox("boolean[$s]",1,isset($_GET["boolean"][$s]),"BOOL"):''),"
\n";}$Pa="this.parentNode.firstChild.onchange();";foreach(array_merge((array)$_GET["where"],array(array()))as$s=>$X){if(!$X||("$X[col]$X[val]"!=""&&in_array($X["op"],adminer()->operators())))echo"".select_input(" name='where[$s][col]'",$d,$X["col"],($X?"selectFieldChange":"selectAddRow"),"(".lang(55).")"),html_select("where[$s][op]",adminer()->operators(),$X["op"],$Pa),"",script("mixin(qsl('input'), {oninput: function () { $Pa }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});",""),"
\n";}echo"\n";}function
selectOrderPrint(array$xf,array$d,array$w){print_fieldset("sort",lang(56),$xf);$s=0;foreach((array)$_GET["order"]as$y=>$X){if($X!=""){echo"".select_input(" name='order[$s]'",$d,$X,"selectFieldChange"),checkbox("desc[$s]",1,isset($_GET["desc"][$y]),lang(57))."
\n";$s++;}}echo"".select_input(" name='order[$s]'",$d,"","selectAddRow"),checkbox("desc[$s]",1,false,lang(57))."
\n","\n";}function
selectLimitPrint($z){echo"\n";}function
selectLengthPrint($Vh){if($Vh!==null)echo"\n";}function
selectActionPrint(array$w){echo"\n";}function
selectCommandPrint(){return!information_schema(DB);}function
selectImportPrint(){return!information_schema(DB);}function
selectEmailPrint(array$ic,array$d){}function
selectColumnsProcess(array$d,array$w){$N=array();$r=array();foreach((array)$_GET["columns"]as$y=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],driver()->functions)||in_array($X["fun"],driver()->grouping)))){$N[$y]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],driver()->grouping))$r[]=$N[$y];}}return
array($N,$r);}function
selectSearchProcess(array$m,array$w){$K=array();foreach($w
as$s=>$v){if($v["type"]=="FULLTEXT"&&idx($_GET["fulltext"],$s)!="")$K[]="MATCH (".implode(", ",array_map('Adminer\idf_escape',$v["columns"])).") AGAINST (".q($_GET["fulltext"][$s]).(isset($_GET["boolean"][$s])?" IN BOOLEAN MODE":"").")";}foreach((array)$_GET["where"]as$y=>$X){$bb=$X["col"];if("$bb$X[val]"!=""&&in_array($X["op"],adminer()->operators())){$mb=array();foreach(($bb!=""?array($bb=>$m[$bb]):$m)as$D=>$l){$kg="";$lb=" $X[op]";if(preg_match('~IN$~',$X["op"])){$Ed=process_length($X["val"]);$lb
.=" ".($Ed!=""?$Ed:"(NULL)");}elseif($X["op"]=="SQL")$lb=" $X[val]";elseif(preg_match('~^(I?LIKE) %%$~',$X["op"],$B))$lb=" $B[1] ".adminer()->processInput($l,"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$kg="$X[op](".q($X["val"]).", ";$lb=")";}elseif(!preg_match('~NULL$~',$X["op"]))$lb
.=" ".adminer()->processInput($l,$X["val"]);if($bb!=""||(isset($l["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$l["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$l["type"]))&&(!preg_match('~date|timestamp~',$l["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"]))))$mb[]=$kg.driver()->convertSearch(idf_escape($D),$X,$l).$lb;}$K[]=(count($mb)==1?$mb[0]:($mb?"(".implode(" OR ",$mb).")":"1 = 0"));}}return$K;}function
selectOrderProcess(array$m,array$w){$K=array();foreach((array)$_GET["order"]as$y=>$X){if($X!="")$K[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$X)?$X:idf_escape($X)).(isset($_GET["desc"][$y])?" DESC":"");}return$K;}function
selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function
selectLengthProcess(){return(isset($_GET["text_length"])?"$_GET[text_length]":"100");}function
selectEmailProcess(array$Z,array$Wc){return
false;}function
selectQueryBuild(array$N,array$Z,array$r,array$xf,$z,$F){return"";}function
messageQuery($I,$Wh,$Ec=false){restart_session();$td=&get_session("queries");if(!idx($td,$_GET["db"]))$td[$_GET["db"]]=array();if(strlen($I)>1e6)$I=preg_replace('~[\x80-\xFF]+$~','',substr($I,0,1e6))."\n…";$td[$_GET["db"]][]=array($I,time(),$Wh);$uh="sql-".count($td[$_GET["db"]]);$K="".lang(62)." 🗐\n";if(!$Ec&&($Wi=driver()->warnings())){$t="warnings-".count($td[$_GET["db"]]);$K="".lang(44).", $K\n$Wi
\n";}return" ".@date("H:i:s").""." $K".shorten_utf8($I,1e4)."
".($Wh?"
($Wh)":'').(support("sql")?'
'.lang(12).'':'').'
';}function
editRowPrint($R,array$m,$L,$Ai){}function
editFunctions(array$l){$K=($l["null"]?"NULL/":"");$Ai=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$y=>$dd){if(!$y||(!isset($_GET["call"])&&$Ai)){foreach($dd
as$Yf=>$X){if(!$Yf||preg_match("~$Yf~",$l["type"]))$K
.="/$X";}}if($y&&$dd&&!preg_match('~set|bool~',$l["type"])&&!is_blob($l))$K
.="/SQL";}if($l["auto_increment"]&&!$Ai)$K=lang(49);return
explode("/",$K);}function
editInput($R,array$l,$b,$Y){if($l["type"]=="enum")return(isset($_GET["select"])?" ":"").enum_input("radio",$b,$l,$Y,"NULL");return"";}function
editHint($R,array$l,$Y){return"";}function
processInput(array$l,$Y,$q=""){if($q=="SQL")return$Y;$D=$l["field"];$K=q($Y);if(preg_match('~^(now|getdate|uuid)$~',$q))$K="$q()";elseif(preg_match('~^current_(date|timestamp)$~',$q))$K=$q;elseif(preg_match('~^([+-]|\|\|)$~',$q))$K=idf_escape($D)." $q $K";elseif(preg_match('~^[+-] interval$~',$q))$K=idf_escape($D)." $q ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$Y)&&JUSH!="pgsql"?$Y:$K);elseif(preg_match('~^(addtime|subtime|concat)$~',$q))$K="$q(".idf_escape($D).", $K)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$q))$K="$q($K)";return
unconvert_field($l,$K);}function
dumpOutput(){$K=array('text'=>lang(63),'file'=>lang(64));if(function_exists('gzencode'))$K['gz']='gzip';return$K;}function
dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function
dumpDatabase($j){}function
dumpTable($R,$_h,$ee=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($_h)dump_csv(array_keys(fields($R)));}else{if($ee==2){$m=array();foreach(fields($R)as$D=>$l)$m[]=idf_escape($D)." $l[full_type]";$h="CREATE TABLE ".table($R)." (".implode(", ",$m).")";}else$h=create_sql($R,$_POST["auto_increment"],$_h);set_utf8mb4($h);if($_h&&$h){if($_h=="DROP+CREATE"||$ee==1)echo"DROP ".($ee==2?"VIEW":"TABLE")." IF EXISTS ".table($R).";\n";if($ee==1)$h=remove_definer($h);echo"$h;\n\n";}}}function
dumpData($R,$_h,$I){if($_h){$He=(JUSH=="sqlite"?0:1048576);$m=array();$Ad=false;if($_POST["format"]=="sql"){if($_h=="TRUNCATE+INSERT")echo
truncate_sql($R).";\n";$m=fields($R);if(JUSH=="mssql"){foreach($m
as$l){if($l["auto_increment"]){echo"SET IDENTITY_INSERT ".table($R)." ON;\n";$Ad=true;break;}}}}$J=connection()->query($I,1);if($J){$Vd="";$Ka="";$ie=array();$ed=array();$Bh="";$Hc=($R!=''?'fetch_assoc':'fetch_row');$vb=0;while($L=$J->$Hc()){if(!$ie){$Oi=array();foreach($L
as$X){$l=$J->fetch_field();if(idx($m[$l->name],'generated')){$ed[$l->name]=true;continue;}$ie[]=$l->name;$y=idf_escape($l->name);$Oi[]="$y = VALUES($y)";}$Bh=($_h=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Oi):"").";\n";}if($_POST["format"]!="sql"){if($_h=="table"){dump_csv($ie);$_h="INSERT";}dump_csv($L);}else{if(!$Vd)$Vd="INSERT INTO ".table($R)." (".implode(", ",array_map('Adminer\idf_escape',$ie)).") VALUES";foreach($L
as$y=>$X){if($ed[$y]){unset($L[$y]);continue;}$l=$m[$y];$L[$y]=($X!==null?unconvert_field($l,preg_match(number_type(),$l["type"])&&!preg_match('~\[~',$l["full_type"])&&is_numeric($X)?$X:q(($X===false?0:$X))):"NULL");}$Pg=($He?"\n":" ")."(".implode(",\t",$L).")";if(!$Ka)$Ka=$Vd.$Pg;elseif(JUSH=='mssql'?$vb%1000!=0:strlen($Ka)+4+strlen($Pg)+strlen($Bh)<$He)$Ka
.=",$Pg";else{echo$Ka.$Bh;$Ka=$Vd.$Pg;}}$vb++;}if($Ka)echo$Ka.$Bh;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($Ad)echo"SET IDENTITY_INSERT ".table($R)." OFF;\n";}}function
dumpFilename($_d){return
friendly_url($_d!=""?$_d:(SERVER?:"localhost"));}function
dumpHeaders($_d,$Ze=false){$If=$_POST["output"];$Ac=(preg_match('~sql~',$_POST["format"])?"sql":($Ze?"tar":"csv"));header("Content-Type: ".($If=="gz"?"application/x-gzip":($Ac=="tar"?"application/x-tar":($Ac=="sql"||$If!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($If=="gz"){ob_start(function($yh){return
gzencode($yh);},1e6);}return$Ac;}function
dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function
importServerPath(){return"adminer.sql";}function
homepage(){echo''.($_GET["ns"]==""&&support("database")?''.lang(65)."\n":""),(support("scheme")?"".($_GET["ns"]!=""?lang(66):lang(67))."\n":""),($_GET["ns"]!==""?''.lang(68)."\n":""),(support("privileges")?"".lang(69)."\n":"");if($_GET["ns"]!=="")echo(support("routine")?"".lang(70)."\n":""),(support("sequence")?"".lang(71)."\n":""),(support("type")?"".lang(6)."\n":""),(support("event")?"".lang(72)."\n":"");return
true;}function
navigation($We){echo"
\n";switch_lang();if($We=="auth"){$If="";foreach((array)$_SESSION["pwds"]as$Qi=>$gh){foreach($gh
as$O=>$Ki){$D=h(get_setting("vendor-$Qi-$O")?:get_driver($Qi));foreach($Ki
as$V=>$G){if($G!==null){$Hb=$_SESSION["db"][$Qi][$O][$V];foreach(($Hb?array_keys($Hb):array(""))as$j)$If
.="($D) ".h("$V@".($O!=""?adminer()->serverName($O):"").($j!=""?" - $j":""))."\n";}}}}if($If)echo"\n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$T=array();if($_GET["ns"]!==""&&!$We&&DB!=""){connection()->select_db(DB);$T=table_status('',true);}adminer()->syntaxHighlighting($T);adminer()->databasesPrint($We);$ha=array();if(DB==""||!$We){if(support("sql")){$ha[]="".lang(62)."";$ha[]="".lang(73)."";}$ha[]="".lang(74)."";}$Fd=$_GET["ns"]!==""&&!$We&&DB!="";if($Fd&&function_exists('Adminer\alter_table'))$ha[]='".lang(75)."";echo($ha?"\n".implode("\n",$ha)."\n":"");if($Fd){if($T)adminer()->tablesPrint($T);else
echo"
".lang(11)."
\n";}}}function
syntaxHighlighting(array$T){echo
script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.4.2",true);if(support("sql")){echo"\n";}echo
script("syntaxHighlighting('".preg_replace('~^(\d\.?\d).*~s','\1',connection()->server_info)."', '".connection()->flavor."');");}function
databasesPrint($We){$i=adminer()->databases();if(DB&&$i&&!in_array(DB,$i))array_unshift($i,DB);echo"\n";}function
tablesPrint(array$T){echo"".script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($T
as$R=>$Q){$R="$R";$D=adminer()->tableName($Q);if($D!=""&&!$Q["partition"])echo'- ".lang(78)." ",(support("table")||support("indexes")?'$D":"$D")."\n";}echo"
\n";}function
showVariables(){return
show_variables();}function
showStatus(){return
show_status();}function
processList(){return
process_list();}function
killProcess($t){return
kill_process($t);}}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($dg){if($dg===null){$dg=array();$Ea="adminer-plugins";if(is_dir($Ea)){foreach(glob("$Ea/*.php")as$n)$this->includeOnce($n);}$sd=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$Ea.php")){$Gd=$this->includeOnce("$Ea.php");if(is_array($Gd)){foreach($Gd
as$cg)$dg[get_class($cg)]=$cg;}else$this->error
.=lang(79,"$Ea.php",$sd)."
";}foreach(get_declared_classes()as$Xa){if(!$dg[$Xa]&&(preg_match('~^Adminer\w~i',$Xa)||is_subclass_of($Xa,'Adminer\Plugin'))){$Cg=new
\ReflectionClass($Xa);$qb=$Cg->getConstructor();if($qb&&$qb->getNumberOfRequiredParameters())$this->error
.=lang(80,$sd,"$Xa","$Ea.php")."
";else$dg[$Xa]=new$Xa;}}}$this->plugins=$dg;$ja=new
Adminer;$dg[]=$ja;$Cg=new
\ReflectionObject($ja);foreach($Cg->getMethods()as$Ue){foreach($dg
as$cg){$D=$Ue->getName();if(method_exists($cg,$D))$this->hooks[$D][]=$cg;}}}function
includeOnce($n){return
include_once"./$n";}function
__call($D,array$Mf){$ta=array();foreach($Mf
as$y=>$X)$ta[]=&$Mf[$y];$K=null;foreach($this->hooks[$D]as$cg){$Y=call_user_func_array(array($cg,$D),$ta);if($Y!==null){if(!self::$append[$D])return$Y;$K=$Y+(array)$K;}}return$K;}}abstract
class
Plugin{protected$translations=array();function
description(){return$this->lang('');}function
screenshot(){return"";}protected
function
lang($u,$E=null){$ta=func_get_args();$ta[0]=idx($this->translations[LANG],$u)?:$u;return
call_user_func_array('Adminer\lang_format',$ta);}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new
Plugins(null):new
Adminer));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($Zh,$k="",$Ja=array(),$ai=""){page_headers();if(is_ajax()&&$k){page_messages($k);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$bi=$Zh.($ai!=""?": $ai":"");$ci=strip_tags($bi.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo'
',$ci,'
';$zb=adminer()->css();if(is_int(key($zb)))$zb=array_fill_keys($zb,'light');$od=in_array('light',$zb)||in_array('',$zb);$md=in_array('dark',$zb)||in_array('',$zb);$Bb=($od?($md?null:false):($md?:null));$Ne=" media='(prefers-color-scheme: dark)'";if($Bb!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.4.2");if(adminer()->head($Bb))echo"\n","\n";foreach($zb
as$Ei=>$Xe){$b=($Xe=='dark'&&!$Bb?$Ne:($Xe=='light'&&$md?" media='(prefers-color-scheme: light)'":""));echo"\n";}echo"\n\n";$n=get_temp_dir()."/adminer.version";echo
script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."')")."});
document.body.classList.replace('nojs', 'js');
const offlineMessage = '".js_escape(lang(82))."';
const thousandsSeparator = '".js_escape(lang(4))."';"),"\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"\n","".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Ja!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'
'.get_driver(DRIVER).' » ';$_=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$O=adminer()->serverName(SERVER);$O=($O!=""?$O:lang(31));if($Ja===false)echo"$O\n";else{echo"$O » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ja)))echo''.h(DB).' » ';if(is_array($Ja)){if($_GET["ns"]!="")echo''.h($_GET["ns"]).' » ';foreach($Ja
as$y=>$X){$Pb=(is_array($X)?$X[1]:h($X));if($Pb!="")echo"$Pb » ";}}echo"$Zh\n";}}echo"
$bi
\n","
\n";restart_session();page_messages($k);$i=&get_session("dbs");if(DB!=""&&$i&&!in_array(DB,$i,true))$i=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$yb){$qd=array();foreach($yb
as$y=>$X)$qd[]="$y $X";header("Content-Security-Policy: ".implode("; ",$qd));}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$hf;if(!$hf)$hf=base64_encode(rand_string());return$hf;}function
page_messages($k){$Di=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$Te=idx($_SESSION["messages"],$Di);if($Te){echo"
".implode("
\n
",$Te)."
".script("messagesPrint();");unset($_SESSION["messages"][$Di]);}if($k)echo"
$k
\n";if(adminer()->error)echo"
".adminer()->error."
\n";}function
page_footer($We=""){echo"
\n\n\n\n",script("setupSubmitHighlight(document);");}function
int32($bf){while($bf>=2147483648)$bf-=4294967296;while($bf<=-2147483649)$bf+=4294967296;return(int)$bf;}function
long2str(array$W,$Vi){$Pg='';foreach($W
as$X)$Pg
.=pack('V',$X);if($Vi)return
substr($Pg,0,end($W));return$Pg;}function
str2long($Pg,$Vi){$W=array_values(unpack('V*',str_pad($Pg,4*ceil(strlen($Pg)/4),"\0")));if($Vi)$W[]=strlen($Pg);return$W;}function
xxtea_mx($cj,$bj,$Ch,$he){return
int32((($cj>>5&0x7FFFFFF)^$bj<<2)+(($bj>>3&0x1FFFFFFF)^$cj<<4))^int32(($Ch^$bj)+($he^$cj));}function
encrypt_string($xh,$y){if($xh=="")return"";$y=array_values(unpack("V*",pack("H*",md5($y))));$W=str2long($xh,true);$bf=count($W)-1;$cj=$W[$bf];$bj=$W[0];$H=floor(6+52/($bf+1));$Ch=0;while($H-->0){$Ch=int32($Ch+0x9E3779B9);$cc=$Ch>>2&3;for($Jf=0;$Jf<$bf;$Jf++){$bj=$W[$Jf+1];$af=xxtea_mx($cj,$bj,$Ch,$y[$Jf&3^$cc]);$cj=int32($W[$Jf]+$af);$W[$Jf]=$cj;}$bj=$W[0];$af=xxtea_mx($cj,$bj,$Ch,$y[$Jf&3^$cc]);$cj=int32($W[$bf]+$af);$W[$bf]=$cj;}return
long2str($W,false);}function
decrypt_string($xh,$y){if($xh=="")return"";if(!$y)return
false;$y=array_values(unpack("V*",pack("H*",md5($y))));$W=str2long($xh,false);$bf=count($W)-1;$cj=$W[$bf];$bj=$W[0];$H=floor(6+52/($bf+1));$Ch=int32($H*0x9E3779B9);while($Ch){$cc=$Ch>>2&3;for($Jf=$bf;$Jf>0;$Jf--){$cj=$W[$Jf-1];$af=xxtea_mx($cj,$bj,$Ch,$y[$Jf&3^$cc]);$bj=int32($W[$Jf]-$af);$W[$Jf]=$bj;}$cj=$W[$bf];$af=xxtea_mx($cj,$bj,$Ch,$y[$Jf&3^$cc]);$bj=int32($W[0]-$af);$W[0]=$bj;$Ch=int32($Ch-0x9E3779B9);}return
long2str($W,true);}$ag=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($y)=explode(":",$X);$ag[$y]=$X;}}function
add_invalid_login(){$Ca=get_temp_dir()."/adminer.invalid";foreach(glob("$Ca*")?:array($Ca)as$n){$p=file_open_lock($n);if($p)break;}if(!$p)$p=file_open_lock("$Ca-".rand_string());if(!$p)return;$Zd=unserialize(stream_get_contents($p));$Wh=time();if($Zd){foreach($Zd
as$ae=>$X){if($X[0]<$Wh)unset($Zd[$ae]);}}$Yd=&$Zd[adminer()->bruteForceKey()];if(!$Yd)$Yd=array($Wh+30*60,0);$Yd[1]++;file_write_unlock($p,serialize($Zd));}function
check_invalid_login(array&$ag){$Zd=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$n){$p=file_open_lock($n);if($p){$Zd=unserialize(stream_get_contents($p));file_unlock($p);break;}}$Yd=idx($Zd,adminer()->bruteForceKey(),array());$gf=($Yd[1]>29?$Yd[0]-time():0);if($gf>0)auth_error(lang(84,ceil($gf/60)),$ag);}$xa=$_POST["auth"];if($xa){session_regenerate_id();$Qi=$xa["driver"];$O=$xa["server"];$V=$xa["username"];$G=(string)$xa["password"];$j=$xa["db"];set_password($Qi,$O,$V,$G);$_SESSION["db"][$Qi][$O][$V][$j]=true;if($xa["permanent"]){$y=implode("-",array_map('base64_encode',array($Qi,$O,$V,$j)));$pg=adminer()->permanentLogin(true);$ag[$y]="$y:".base64_encode($pg?encrypt_string($G,$pg):"");cookie("adminer_permanent",implode(" ",$ag));}if(count($_POST)==1||DRIVER!=$Qi||SERVER!=$O||$_GET["username"]!==$V||DB!=$j)redirect(auth_url($Qi,$O,$V,$j));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$y)set_session($y,null);unset_permanent($ag);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),lang(85).' '.lang(86));}elseif($ag&&!$_SESSION["pwds"]){session_regenerate_id();$pg=adminer()->permanentLogin();foreach($ag
as$y=>$X){list(,$Wa)=explode(":",$X);list($Qi,$O,$V,$j)=array_map('base64_decode',explode("-",$y));set_password($Qi,$O,$V,decrypt_string(base64_decode($Wa),$pg));$_SESSION["db"][$Qi][$O][$V][$j]=true;}}function
unset_permanent(array&$ag){foreach($ag
as$y=>$X){list($Qi,$O,$V,$j)=array_map('base64_decode',explode("-",$y));if($Qi==DRIVER&&$O==SERVER&&$V==$_GET["username"]&&$j==DB)unset($ag[$y]);}cookie("adminer_permanent",implode(" ",$ag));}function
auth_error($k,array&$ag){$hh=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$hh]||$_GET[$hh])&&!$_SESSION["token"])$k=lang(87);else{restart_session();add_invalid_login();$G=get_password();if($G!==null){if($G===false)$k
.=($k?'
':'').lang(88,target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($ag);}}if(!$_COOKIE[$hh]&&$_GET[$hh]&&ini_bool("session.use_only_cookies"))$k=lang(89);$Mf=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$Mf["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header(lang(36),$k,null);echo"\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($ag);page_header(lang(91),lang(92,implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){list(,$eg)=host_port(SERVER);if(preg_match('~^\s*([-+]?\d+)~',$eg,$B)&&($B[1]<1024||$B[1]>65535))auth_error(lang(93),$ag);check_invalid_login($ag);$xb=adminer()->credentials();$f=Driver::connect($xb[0],$xb[1],$xb[2]);if(is_object($f)){Db::$instance=$f;Driver::$instance=new
Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$_e=null;if(!is_object($f)||($_e=adminer()->login($_GET["username"],get_password()))!==true){$k=(is_string($f)?nl_br(h($f)):(is_string($_e)?$_e:lang(94))).(preg_match('~^ | $~',get_password())?'
'.lang(95):'');auth_error($k,$ag);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header(lang(83),lang(96));page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($xa&&$_POST["token"])$_POST["token"]=get_token();$k='';if($_POST){if(!verify_token()){$Sd="max_input_vars";$Le=ini_get($Sd);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$y){$X=ini_get($y);if($X&&(!$Le||$X<$Le)){$Sd=$y;$Le=$X;}}}$k=(!$_POST["token"]&&$Le?lang(97,"'$Sd'"):lang(96).' '.lang(98));}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$k=lang(99,"'post_max_size'");if(isset($_GET["sql"]))$k
.=' '.lang(100);}function
print_select_result($J,$g=null,array$Af=array(),$z=0){$ze=array();$w=array();$d=array();$Ha=array();$ti=array();$K=array();for($s=0;(!$z||$s<$z)&&($L=$J->fetch_row());$s++){if(!$s){echo"":"".lang(14))."\n";return$K;}function
referencable_primary($Zg){$K=array();foreach(table_status('',true)as$Gh=>$R){if($Gh!=$Zg&&fk_support($R)){foreach(fields($Gh)as$l){if($l["primary"]){if($K[$Gh]){unset($K[$Gh]);break;}$K[$Gh]=$l;}}}}return$K;}function
textarea($D,$Y,$M=10,$fb=80){echo"";}function
select_input($b,array$vf,$Y="",$qf="",$bg=""){$Oh=($vf?"select":"input");return"<$Oh$b".($vf?">