=  java/lang/Object()Vadmin  "zombie/network/ServerWorldDatabaseCommandLineAdminUsernameLjava/lang/String;  doAdminZ  dbSchemaLzombie/network/DBSchema;zombie/network/DBSchema  connLjava/sql/Connection;  (Ljava/sql/Connection;)V !"# $%java/sql/ConnectionprepareStatement0(Ljava/lang/String;)Ljava/sql/PreparedStatement; '() *+se/krka/kahlua/vm/KahluaTableiterator)()Lse/krka/kahlua/vm/KahluaTableIterator; -./ 01%se/krka/kahlua/vm/KahluaTableIteratoradvance()Z -3 45getValue()Ljava/lang/Object;7java/lang/String 9:; <=java/sql/PreparedStatement setString(ILjava/lang/String;)V 9? @A executeUpdate()ICjava/util/ArrayList BF GHmakeConcatWithConstants&(Ljava/lang/String;)Ljava/lang/String;Juserlog 6L MNequals(Ljava/lang/Object;)ZF 9Q RS executeQuery()Ljava/sql/ResultSet; !U VW getMetaData()Ljava/sql/DatabaseMetaData; YZ[ \]java/sql/DatabaseMetaData getColumns^(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;_zombie/network/DBResult ^ bcd e1java/sql/ResultSetnext bg hi getString(I)Ljava/lang/String;kworldm moderatoropasswordq encryptedPwdspwdEncryptTypeu transactionID Bw xNadd ^z {| setColumns(Ljava/util/ArrayList;)V ^~  setTableName(Ljava/lang/String;)V B Asize B get(I)Ljava/lang/Object; b hH'false'false'true'true ^  getValues()Ljava/util/HashMap;  java/util/HashMapput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 9 close keySet()Ljava/util/Set;  * java/util/Set()Ljava/util/Iterator;  1java/util/IteratorhasNext e5 &(Ljava/lang/Object;)Ljava/lang/Object;java/lang/Integer9UPDATE whitelist SET transactionID = ? WHERE username = ? toString()Ljava/lang/String;java/lang/Exception printStackTrace  containsUser(Ljava/lang/String;)Z addUser8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;8SELECT * FROM whitelist WHERE username = ? AND world = ?  zombie/core/Core GameSaveWorldjava/sql/SQLException FSELECT * FROM whitelist WHERE LOWER(username) = LOWER(?) AND world = ?id.UPDATE whitelist SET username = ? WHERE id = ? G  zombie/network/ServerOptionsinstanceLzombie/network/ServerOptions;Open  getBoolean'(Ljava/lang/String;)Ljava/lang/Boolean;  1java/lang/Boolean booleanValueF containsCaseinsensitiveUser$A user with this name already existsFmINSERT INTO whitelist (world, username, password, encryptedPwd, pwdEncryptType) VALUES (?, ?, ?, 'true', '2')7UPDATE whitelist SET displayName = ? WHERE username = ? displayName6DELETE FROM whitelist WHERE world = ? and username = ?F@DELETE FROM userlog WHERE username = ? AND type = ? AND text = ? java/io/File  zombie/ZomboidFileSystemLzombie/ZomboidFileSystem;    getCacheDir    separator    1exists  1mkdirs  zombie/network/GameServer ServerName  G\(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;   ! setReadable(ZZ)Z # $! setExecutable & '! setWritable ) *getPath F -./ 0zombie/debug/DebugLoglog 2 31 createNewFile 5 6getAbsolutePath 89: ;<zombie/util/PZSQLUtils getConnection)(Ljava/lang/String;)Ljava/sql/Connection; !> ?@createStatement()Ljava/sql/Statement; F CDE @Fjava/sql/Statement(Ljava/lang/String;)IH2CREATE UNIQUE INDEX [id] ON [whitelist]([id] ASC)J>CREATE UNIQUE INDEX [username] ON [whitelist]([username] ASC)LUCREATE TABLE [bannedip] ([ip] TEXT NOT NULL,[username] TEXT NULL, [reason] TEXT NULL) CO0failed to create user database, server shut down QRS TUjava/lang/Systemexit(I)VW.failed to open user database, server shut downY whitelist[>ALTER TABLE 'whitelist' ADD 'admin' BOOLEAN NULL DEFAULT false b^BALTER TABLE 'whitelist' ADD 'moderator' BOOLEAN NULL DEFAULT false`bannedb?ALTER TABLE 'whitelist' ADD 'banned' BOOLEAN NULL DEFAULT falsedpriorityfAALTER TABLE 'whitelist' ADD 'priority' BOOLEAN NULL DEFAULT falsehlastConnectionj6ALTER TABLE 'whitelist' ADD 'lastConnection' TEXT NULLlEALTER TABLE 'whitelist' ADD 'encryptedPwd' BOOLEAN NULL DEFAULT falsenCALTER TABLE 'whitelist' ADD 'pwdEncryptType' INTEGER NULL DEFAULT 1 pqr s1zombie/core/znet/SteamUtilsisSteamModeEnabledusteamidw/ALTER TABLE 'whitelist' ADD 'steamid' TEXT NULLyownerid{/ALTER TABLE 'whitelist' ADD 'ownerid' TEXT NULL} accesslevel3ALTER TABLE 'whitelist' ADD 'accesslevel' TEXT NULL8ALTER TABLE 'whitelist' ADD 'transactionID' INTEGER NULL3ALTER TABLE 'whitelist' ADD 'displayName' TEXT NULL^SELECT * FROM sqlite_master WHERE type = 'index' AND sql LIKE '%UNIQUE%' and name = 'username' C R((Ljava/lang/String;)Ljava/sql/ResultSet; Q outLjava/io/PrintStream;zCan't create the username index because some of the username in the database are in double, will drop the double username.  java/io/PrintStreamprintlnDELETE FROM whitelist WHERE whitelist.rowid > (SELECT rowid FROM whitelist dbl WHERE whitelist.rowid <> dbl.rowid AND whitelist.username = dbl.username);bannedip Y  getTables_(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/ResultSet;bannedidECREATE TABLE [bannedid] ([steamid] TEXT NOT NULL, [reason] TEXT NULL)CREATE TABLE [userlog] ([id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,[username] TEXT NULL,[type] TEXT NULL, [text] TEXT NULL, [issuedBy] TEXT NULL, [amount] INTEGER NULL, [lastUpdate] TEXT NULL) lastUpdate0ALTER TABLE 'userlog' ADD 'lastUpdate' TEXT NULL,SELECT * FROM whitelist where admin = 'true'7UPDATE whitelist set accesslevel = 'admin' where id = ?usernameticketsCREATE TABLE [tickets] ([id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [message] TEXT NOT NULL, [author] TEXT NOT NULL,[answeredID] INTEGER,[viewed] BOOLEAN NULL DEFAULT false)*SELECT * FROM whitelist WHERE username = ?  CommandLineAdminPassword 6 1isEmptyjava/util/Scannerjava/io/InputStreamReader Q inLjava/io/InputStream;  (Ljava/io/InputStream;)V  (Ljava/lang/Readable;)V$User 'admin' not found, creating it  F"Enter new administrator password:  nextLineConfirm the password: &Wrong password, confirm the password: yINSERT INTO whitelist (username, password, accesslevel, encryptedPwd, pwdEncryptType) VALUES (?, ?, 'admin', 'true', '2')cINSERT INTO whitelist (username, password, encryptedPwd, pwdEncryptType) VALUES (?, ?, 'true', '2')  Hencrypt  Hzombie/core/secure/PZcrypthash F4UPDATE whitelist SET password = ? WHERE username = ?0admin password changed via -adminpassword optionF ! 6 trim; 6 contains(Ljava/lang/CharSequence;)Z@$,/.'?" 6 Alength  nullChar 6  toLowerCase 6   startsWithF .zombie/network/ServerWorldDatabase$LogonResult   '(Lzombie/network/ServerWorldDatabase;)V  AllowNonAsciiUsername2Lzombie/network/ServerOptions$BooleanServerOption;  410zombie/network/ServerOptions$BooleanServerOption   asciiEncoder!Ljava/nio/charset/CharsetEncoder;   java/nio/charset/CharsetEncoder canEncode  " # bAuthorized%NonAsciiCharacters  ' (dcReason * +isValidUserName-InvalidUsername/ 127.0.0.11#SELECT * FROM bannedip WHERE ip = ?3reason  5 6 bannedReason  8 ` : ; isNullOrEmpty =  ? @AutoCreateUserInWhiteListBUserPasswordRequiredDNFNUPDATE whitelist SET encryptedPwd = 'true' WHERE username = ? and password = ?HEUPDATE whitelist SET password = ? WHERE username = ? AND password = ? bJ KFgetIntM[UPDATE whitelist SET pwdEncryptType = '2', password = ? WHERE username = ? AND password = ?ODuplicateAccountQInvalidUsernamePasswordSY  U   W X accessLevel Z [setAccessLevel  ] u^I ` aFparseInt  c d e fgisNewAccountAllowed(Ljava/lang/String;J)ZiMaxAccountsReached  k lnewUsernUnknownUsername pp qrconvertSteamIDToString(J)Ljava/lang/String;Fu(SELECT * FROM bannedid WHERE steamid = ?x2UPDATE whitelist SET ownerid = ? where steamid = ? z {|MaxAccountsPerUser2Lzombie/network/ServerOptions$IntegerServerOption; ~ 4A0zombie/network/ServerOptions$IntegerServerOptionZSELECT * FROM whitelist WHERE steamid = ? AND ((accessLevel = ?) OR (accessLevel is NULL))java/lang/Throwable   addSuppressed(Ljava/lang/Throwable;)V -  MultiplayerLzombie/debug/DebugLogStream;Query execution failed  zombie/debug/LogSeverityErrorLzombie/debug/LogSeverity;  zombie/debug/DebugLogStreamprintExceptionD(Ljava/lang/Throwable;Ljava/lang/String;Lzombie/debug/LogSeverity;)V,IsNewAccountAllowed: steam-id=%d count=%d/%d  java/lang/LongvalueOf(J)Ljava/lang/Long;  (I)Ljava/lang/Integer;  debuglnK(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)VMD5  java/security/MessageDigest getInstance1(Ljava/lang/String;)Ljava/security/MessageDigest; 6 getBytes()[B  digest([B)[B&java/security/NoSuchAlgorithmExceptionCan't encrypt password java/lang/StringBuilder   i toHexString  append(C)Ljava/lang/StringBuilder; 6 charAt(I)C 6 i substring  -(Ljava/lang/String;)Ljava/lang/StringBuilder; ISELECT * FROM whitelist WHERE username = ? AND password = ? AND world = ?[UPDATE whitelist SET pwdEncryptType = '2', password = ? WHERE username = ? and password = ?FF1UPDATE whitelist SET admin = ? WHERE username = ?FF7UPDATE whitelist SET accesslevel = ? WHERE username = ?F(SELECT * FROM userlog WHERE username = ?zombie/network/UserlogtypetextissuedByamount  ^(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V   dateFormatLjava/text/DateFormat;  java/util/Calendar()Ljava/util/Calendar;  getTime()Ljava/util/Date;  java/text/DateFormatformat$(Ljava/util/Date;)Ljava/lang/String;   "zombie/network/Userlog$UserlogType LuaChecksum$Lzombie/network/Userlog$UserlogType;    DupeItem5SELECT * FROM userlog WHERE username = ? AND type = ? WUPDATE userlog set amount = ?, lastUpdate = ?, text = ? WHERE username = ? AND type = ? 6 i   Kicked   Banned   SuspiciousActivity   UnauthorizedPacket!SSELECT * FROM userlog WHERE username = ? AND type = ? AND text = ? AND issuedBy = ?#kUPDATE userlog set amount = ?, lastUpdate = ? WHERE username = ? AND type = ? AND text = ? AND issuedBy = ?%bINSERT INTO userlog (username, type, text, issuedBy, amount, lastUpdate) VALUES (?, ?, ?, ?, ?, ?)'_INSERT INTO whitelist (world, username, password, encryptedPwd) VALUES (?, ?, 'bogus', 'false'))2UPDATE whitelist SET banned = ? WHERE username = ?+>SELECT steamid FROM whitelist WHERE username = ? AND world = ? - ./ banSteamID9(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;FF33UPDATE whitelist SET steamid = ? WHERE username = ?AXUPDATE whitelist SET pwdEncryptType = '2', password = ? WHERE username = ? and world = ?CKUPDATE whitelist SET lastConnection = ? WHERE username = ? AND password = ? E F  WarningPoint H IJ addUserlog^(Ljava/lang/String;Lzombie/network/Userlog$UserlogType;Ljava/lang/String;Ljava/lang/String;I)VFNBINSERT INTO tickets (author, message, answeredID) VALUES (?, ?, ?) 9P QRsetInt(II)VT3INSERT INTO tickets (author, message) VALUES (?, ?)V=SELECT * FROM tickets WHERE author = ? and answeredID is nullX.SELECT * FROM tickets where answeredID is nullZzombie/network/DBTicket\author^message Y` a((Ljava/lang/String;Ljava/lang/String;I)V Yc dA getTicketID f gh getAnswer(I)Lzombie/network/DBTicket; Yj kl setAnswer(Lzombie/network/DBTicket;)Vn*SELECT * FROM tickets WHERE answeredID = ?p DELETE FROM tickets WHERE id = ?rjava/text/SimpleDateFormattyyyy-MM-dd HH:mm:ss q  x y$Lzombie/network/ServerWorldDatabase;{US-ASCII }~ java/nio/charset/CharsetforName.(Ljava/lang/String;)Ljava/nio/charset/Charset; }  newEncoder#()Ljava/nio/charset/CharsetEncoder; 6 (C)Ljava/lang/String;CodeLineNumberTable getDBSchema()Lzombie/network/DBSchema; StackMapTable4(Ljava/lang/String;Lse/krka/kahlua/vm/KahluaTable;)V ExceptionsgetTableResult)(Ljava/lang/String;)Ljava/util/ArrayList; SignatureD(Ljava/lang/String;)Ljava/util/ArrayList;saveAllTransactionsID(Ljava/util/HashMap;)V=(Ljava/util/HashMap;)VsaveTransactionID((Ljava/lang/String;Ljava/lang/Integer;)VchangeUsernameupdateDisplayName'(Ljava/lang/String;Ljava/lang/String;)VgetDisplayName removeUser removeUserLog9(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Vcreate java/lang/ClassNotFoundException authClienti(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Lzombie/network/ServerWorldDatabase$LogonResult;3(J)Lzombie/network/ServerWorldDatabase$LogonResult; authOwner4(JJ)Lzombie/network/ServerWorldDatabase$LogonResult;[B changePwdJ(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; grantAdmin'(Ljava/lang/String;Z)Ljava/lang/String; getUserlogC(Ljava/lang/String;)Ljava/util/ArrayList;banUserbanIpK(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;setUserSteamID setPasswordupdateLastConnectionDateaddWarningPointK(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String; addTicket getTicketsD(Ljava/lang/String;)Ljava/util/ArrayList; removeTicket SourceFileServerWorldDatabase.java NestMembersBootstrapMethods  G$java/lang/invoke/StringConcatFactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;SELECT * FROM  ORDER BY lastUpdate DESCChanged  user's name into 4User "" is not in the whitelist, use /adduser firstChanged's name  into User  already exist."User  created with the password User  removed from white listdb db.dbuser database ""JCREATE TABLE [whitelist] ([id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,[world] TEXT DEFAULT '' NULL,[username] TEXT NULL,[password] TEXT NULL, [admin] BOOLEAN DEFAULT false NULL, [moderator] BOOLEAN DEFAULT false NULL, [banned] BOOLEAN DEFAULT false NULL, [priority] BOOLEAN DEFAULT false NULL, [lastConnection] TEXT NULL)Command line admin password: "Administrator account '' created.3ERROR: -adminpassword ignored, no '' account in dbUser  is trying to connect.*Steam client  is initiating a connection.'Steam client  borrowed the game from Your new password is Wrong password for user User  is now adminUser  is no longer admin!User  no longer has access levelUser  is now User  is now bannedUser  is now un-bannedUser  not foundUser  SteamID set to $Added a warning point on  reason: User  doesn't exist. InnerClasses LogonResultBooleanServerOptionIntegerServerOption UserlogType %java/lang/invoke/MethodHandles$Lookup java/lang/invoke/MethodHandlesLookup!   y (9** ** !"D**Y**&')R@*+ N,&:6,-268->W- ./0 284?5 9-!Q _BYDM+ENI+K -ON*- :P:*T:+X:BYD:^Y`: a^f:  jKG lK= K3 nK) pK rK tK  vW y +}a6  R 6:  :  K:  K:  :    W , vW^Y`:  y +}},$89:;=+>4??@LAUB^ChDrFGHIJKLMNOPQ RSTU#V0M6X=YFZM[V]]^H B6>  6B69bYbB^a .66 e+MN,J,6:+:* N-8-8->W-M,\_>c d ef g+h7iCjLkSlYm\p_n`odq 9OBE*+ *+W* N-,8-+8->W-N-<?. uvxy'z/{6|<?}@~DnF*ɹ M,+8,˹8,PN-a ,,M,5?6<?2 %.46<?@D69b 6F*ӹ M,+8,˹8,PN-a ,,M,5?6<?2 %.46<?@D69b 6*ɹ N-+8-˹8-P:aFչ:-*׹ N-,8-8->W-+, ++,B &0;AMU^eks s9b+*+*ɹ N-+8-˹8-P:a-+-* N-˹8-+8-,8->W-N-+, GHR )1;AHNZdlt{  <9b; 66n*ɹ N-+8-˹8-P:a2-* N-,8-+8->W--N-ұehB &06BJRY_ehim_9b 66HQ*ɹ M,+8,˹8,PN-a-:,,M,@JAGJ6 %.8>AGJKOA9b 6H:* M,˹8,+8,>W,M,++.& %+./3nB* :+8,8-8>W :ұ7:*     (07:<Az  Y  L++WY  M,W,"W,%W,(+,,b,1W*,47*=N-ABW-GBW-IBW-KBW-MN-N,P* *,47N-V,P*TN-XX:*=:aZBW\-XlX:a]BW\-X_X:aaBW\-XcX:aeBW\-XgX:aiBW\-XpX:akBW\-XrX:amBW\o[-XtX:avBW\-XxX:azBW\-X|X:a~BW\-XtX:aBW\-XX:aBW\:a2IBW$:BWIBW-:aKBW\-:aBW\-I:aBW\-IX:aBW\-XlX:a\-XX:ae\* :P:a=* :չ8>W-:aBW\* :* 8P:a*: YY:ƶ*ɶ: Kɶ:ζ:   K  Kж: **ҹ :*Թ :* 8ָٹ8>W*  M***ָ:* :* 8P:aB*߹ :8* 8>W* f$/2'()"+>,E-L.S/_0f3k4v5689=>C?@ABGINJKLMSTU VW"Y)\8]B^M`Tcddneygjklnqrsuxyz|~'.4DNY`pz$/24=HSakv} *4;IR\j{#2;BQZdmt  ,- /1"2.3<4H5Q6[7b8p9z:;<>@B~*" T8YbC*+++**1+$**j ")(*=9bC"M96:6 <69[* *L+ұGHKIJLB +*{*q*g*]*S*I*?*5*+*!** ***K*& R|S~TUVWXYZ | Q +  Y* :۴+!$&+)!,&oc-.KY*0 :-8P:a(!247,9,۴< ۴>A&!*ӹ :+8˹8P:a`n9pKpCKn:  : *E :  +8  8 >W *G :   8 +8  8 >W P:n9erIXn:  : *L :   8 +8  8 >W P:n9=n,K-!,9N& P&!KRKT|VV$VT V*+VYW_KR_K77 !t \t_\cKb۴<;*-d!h&!j!m& :U{|`_ ac,d2e:f=iDkJlRmUseusv|wxz{|}~ Q\cqz%/7>Gflsz*28DM^ry|= ^9b/e9bp=j C  666 9b / f C  666 9b - 666 $oN-s Y* :*t :-8P:a(!247! :izjwzJ)2;EKZ`gjqw z |  .j 6 9b 6  o:!o:v Y* :*t :8P:  a(! 247!*w :88>W :%tub %3=FPVekru!|"$%&'(+)*,6u 66 9b@ 66 fg ò۴y}6o o:6* :88P:a * : :  : 1^mt{~#V1 2367: <#=1>;?E@NAXB^Dm=GDEFIKO 3 669bN 669B!@ H*9L*LM,YM>+F+3:,0W,dɶW,dͶW,Ӱ FOP Q SWTU'V+Y3Z;\C]L_S`gcxZ~e' 6 16-:,M*Թ :+8,8˹8P:aJ*ֹ :8+8,8>W-+Jijklm%n0o9pCqJrXsbtkutv|wxz{69b*ɹ N-+8-˹8-P:aO-*ڹ N-8-+8->W- ++-+B &06CU]djnu|7N 69b9 69b96$[ ,M*+ *+W*ɹ N-+8-˹8-P:aK-*޹ N-,8-+8->W-,K ++,-+N !)3;EKX`hou~ o9b BYDM* N-+8-P:aE,Y+IvW- :,wz. %/qwz|%%B9bK 6BIJ 6:, , * :+8,8P:  ap6 _`6* :  8 8 -8 +8 ,8 >W ,,, ,* :+8,8-88P:  a{6 _`6*" :  8 8 +8 ,8 -8 8 >W `*$ :+8,8-8888>W :5-6BKUXip~  *->ES`js 6aB>*ɹ N-+8-˹8-P:a6D?*& :˹8+8>W-P:6::-*( N-8-+8->W-of** N-+8-˹8-P:a/t:- *,W - +0+1-+( &/8FQZbiqt y }    "##*%1'7(t9b6 >*2 :+8,8-8>WS+)*4 :+8>W*6 :,8>WJ,-./%0.162=3@4D5R6[7c8j:x;<=?@)%./_5*8 :+8,8>W)*: :+8>W2 CDEF$G,H3I6JDKMLUM\O6%t* N-+8-P:a-+<-*= N-,8-+8->W-N-+,?3g4dgBT UVW'X-Y4[:]G^O_W`^addgbhcle49b2 66=*@ N-,8-+8-˹8->W-N-ұ47* j klm'n.o4r7p8q<swF*B N-8-+8-,8->W-N-ұ=@* w x y(z0{7|=@}A~E @ ;5* * @O*ɹ :+8˹8P:a*+D,G+,K+L" !*4@H H9bap>*M :+8,8O>W2*S :+8,8>W:%.6=@NW`ho@.BYDMN+*U N-+8*W N-P:aJYY[]չI_:,vW*be: i,> &3;Ekr}&B9 bMghKM*m M,O,PN-a%YY-[-]-չI_'I 9b*UR*eM,(*o N-,bO->W-*o N-O->W-.  ")/<DKQ/YO+qYsu Yvwz| ##N *  ~ @