Full Code of rathena/FluxCP for AI

master 98cd4b8fd832 cached
559 files
1.7 MB
547.0k tokens
725 symbols
1 requests
Download .txt
Showing preview only (1,935K chars total). Download the full file or copy to clipboard to get everything.
Repository: rathena/FluxCP
Branch: master
Commit: 98cd4b8fd832
Files: 559
Total size: 1.7 MB

Directory structure:
gitextract_z0fge0vx/

├── .deepsource.toml
├── .editorconfig
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── enhancement_request.yml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pull_request_template.md
│   ├── pull_request_template.md
│   └── workflows/
│       └── codeql.yml
├── .gitignore
├── .htaccess
├── LICENSE
├── README.md
├── addons/
│   └── helloworld/
│       ├── config/
│       │   ├── access.php
│       │   └── addon.php
│       ├── lang/
│       │   ├── en_us.php
│       │   └── ko_kr.php
│       ├── modules/
│       │   └── helloworld/
│       │       └── index.php
│       └── themes/
│           └── default/
│               └── helloworld/
│                   └── index.php
├── config/
│   ├── .htaccess
│   ├── access.php
│   ├── application.php
│   ├── attributes.php
│   ├── cashshopcategories.php
│   ├── castlenames.php
│   ├── elements.php
│   ├── equip_jobs.php
│   ├── equip_location_combinations.php
│   ├── equip_locations.php
│   ├── equip_upper.php
│   ├── error.php
│   ├── feedingtypes.php
│   ├── groups.php
│   ├── homunculus.php
│   ├── item_randoptions.php
│   ├── itemsflags.php
│   ├── itemsubtypes.php
│   ├── itemtypes.php
│   ├── jobs.php
│   ├── jobs_alchemist.php
│   ├── jobs_blacksmith.php
│   ├── jobs_gender_linked.php
│   ├── loginerrors.php
│   ├── monster_ai.php
│   ├── monstermode.php
│   ├── picktypes.php
│   ├── races.php
│   ├── servers.php
│   ├── shopcategories.php
│   ├── sizes.php
│   └── trade_restrictions.php
├── data/
│   ├── captcha/
│   │   ├── fonts/
│   │   │   └── index.html
│   │   └── index.html
│   ├── emblem/
│   │   └── index.html
│   ├── index.html
│   ├── items/
│   │   ├── icons/
│   │   │   └── index.html
│   │   ├── images/
│   │   │   └── index.html
│   │   └── index.html
│   ├── itemshop/
│   │   └── index.html
│   ├── jobs/
│   │   ├── images/
│   │   │   ├── F/
│   │   │   │   └── index.html
│   │   │   ├── M/
│   │   │   │   └── index.html
│   │   │   └── index.html
│   │   └── index.html
│   ├── logs/
│   │   └── index.html
│   ├── monsters/
│   │   └── index.html
│   ├── npc/
│   │   ├── DonationNPC.txt
│   │   ├── PeakNPC.txt
│   │   ├── index.html
│   │   ├── support_cmd.txt
│   │   └── web_commands.txt
│   ├── paypal/
│   │   ├── button.php
│   │   └── index.html
│   ├── schemas/
│   │   ├── charmapdb/
│   │   │   ├── cp_charprefs.20080929191525.sql
│   │   │   ├── cp_charprefs.20081109093448.sql
│   │   │   ├── cp_charprefs.20120816150540.sql
│   │   │   ├── cp_commands.20160608065501.sql
│   │   │   ├── cp_itemdesc.20170210033400.sql
│   │   │   ├── cp_itemshop.20080928225124.sql
│   │   │   ├── cp_itemshop.20081109093448.sql
│   │   │   ├── cp_itemshop.20081128093449.sql
│   │   │   ├── cp_itemshop.20090104190020.sql
│   │   │   ├── cp_onlinepeak.20131120120201.sql
│   │   │   ├── cp_redeemlog.20080928225124.sql
│   │   │   ├── cp_redeemlog.20081001054354.sql
│   │   │   ├── cp_redeemlog.20081109093448.sql
│   │   │   ├── cp_xferlog.20080928225124.sql
│   │   │   ├── cp_xferlog.20081109093448.sql
│   │   │   └── index.html
│   │   ├── index.html
│   │   └── logindb/
│   │       ├── cp_banlog.20131213174201.sql
│   │       ├── cp_cmsnews.20131120145701.sql
│   │       ├── cp_cmspages.20131120161901.sql
│   │       ├── cp_cmssettings.20131120145801.sql
│   │       ├── cp_createlog.20131213174201.sql
│   │       ├── cp_createlog.20170720151901.sql
│   │       ├── cp_createlog.20250614124331.sql
│   │       ├── cp_credits.20131213174201.sql
│   │       ├── cp_emailchange.20131213174201.sql
│   │       ├── cp_emailchange.20250609133400.sql
│   │       ├── cp_ipbanlog.20120816150540.sql
│   │       ├── cp_ipbanlog.20250609133400.sql
│   │       ├── cp_loginlog.20131213174201.sql
│   │       ├── cp_loginlog.20250609133400.sql
│   │       ├── cp_loginprefs.20131213174201.sql
│   │       ├── cp_pwchange.20131213174201.sql
│   │       ├── cp_pwchange.20250609133400.sql
│   │       ├── cp_resetpass.20131213174201.sql
│   │       ├── cp_resetpass.20250609133400.sql
│   │       ├── cp_servicedesk.20131122010001.sql
│   │       ├── cp_servicedesk.20250609133400.sql
│   │       ├── cp_servicedeska.20131122010001.sql
│   │       ├── cp_servicedeska.20250609133400.sql
│   │       ├── cp_servicedeskcat.20131122010001.sql
│   │       ├── cp_servicedesksettings.20131122010001.sql
│   │       ├── cp_trusted.20131213174201.sql
│   │       ├── cp_txnlog.20131213174201.sql
│   │       ├── cp_txnlog.20170217073601.sql
│   │       ├── cp_txnlog.20170221184601.sql
│   │       └── index.html
│   ├── templates/
│   │   ├── changemail.php
│   │   ├── confirm.php
│   │   ├── contactform.php
│   │   ├── index.html
│   │   ├── marketing1.php
│   │   ├── newpass.php
│   │   ├── newticket.php
│   │   ├── resetpass.php
│   │   └── ticketreply.php
│   └── tmp/
│       ├── index.html
│       └── transactions/
│           ├── Refunded/
│           │   └── index.html
│           ├── Reversed/
│           │   └── index.html
│           └── web_accept/
│               ├── Completed/
│               │   └── index.html
│               ├── Denied/
│               │   └── index.html
│               └── Pending/
│                   └── index.html
├── doc/
│   ├── user_lang.md
│   └── user_theme.md
├── error.php
├── index.php
├── lang/
│   ├── en_us.php
│   ├── es_es.php
│   ├── id_id.php
│   └── pt_br.php
├── lib/
│   ├── Flux/
│   │   ├── Addon.php
│   │   ├── Athena.php
│   │   ├── Authorization.php
│   │   ├── BaseServer.php
│   │   ├── Captcha.php
│   │   ├── CharServer.php
│   │   ├── Config.php
│   │   ├── Connection/
│   │   │   ├── Statement.php
│   │   │   └── index.html
│   │   ├── Connection.php
│   │   ├── DataObject.php
│   │   ├── Dispatcher.php
│   │   ├── EmblemExporter.php
│   │   ├── Error.php
│   │   ├── FileLoad.php
│   │   ├── Installer/
│   │   │   ├── CharMapServer.php
│   │   │   ├── MainServer.php
│   │   │   ├── Schema.php
│   │   │   ├── SchemaPermissionError.php
│   │   │   └── index.html
│   │   ├── Installer.php
│   │   ├── ItemExistsError.php
│   │   ├── ItemShop/
│   │   │   ├── Cart.php
│   │   │   └── index.html
│   │   ├── ItemShop.php
│   │   ├── LogFile.php
│   │   ├── LoginAthenaGroup.php
│   │   ├── LoginError.php
│   │   ├── LoginServer.php
│   │   ├── Mailer.php
│   │   ├── MapServer.php
│   │   ├── Paginator.php
│   │   ├── PaymentNotifyRequest.php
│   │   ├── PermissionError.php
│   │   ├── RegisterError.php
│   │   ├── SessionData.php
│   │   ├── Template.php
│   │   ├── TemporaryTable.php
│   │   └── index.html
│   ├── Flux.php
│   ├── functions/
│   │   ├── discordwebhook.php
│   │   ├── getReposVersion.php
│   │   ├── imagecreatefrombmpstring.php
│   │   └── index.html
│   ├── index.html
│   └── phpmailer/
│       ├── LICENSE
│       ├── PHPMailerAutoload.php
│       ├── VERSION
│       ├── class.phpmailer.php
│       ├── class.pop3.php
│       ├── class.smtp.php
│       ├── extras/
│       │   ├── EasyPeasyICS.php
│       │   ├── README.md
│       │   ├── htmlfilter.php
│       │   └── ntlm_sasl_client.php
│       ├── index.html
│       └── language/
│           ├── index.html
│           ├── phpmailer.lang-am.php
│           ├── phpmailer.lang-ar.php
│           ├── phpmailer.lang-az.php
│           ├── phpmailer.lang-be.php
│           ├── phpmailer.lang-bg.php
│           ├── phpmailer.lang-br.php
│           ├── phpmailer.lang-ca.php
│           ├── phpmailer.lang-ch.php
│           ├── phpmailer.lang-cs.php
│           ├── phpmailer.lang-cz.php
│           ├── phpmailer.lang-da.php
│           ├── phpmailer.lang-de.php
│           ├── phpmailer.lang-dk.php
│           ├── phpmailer.lang-el.php
│           ├── phpmailer.lang-eo.php
│           ├── phpmailer.lang-es.php
│           ├── phpmailer.lang-et.php
│           ├── phpmailer.lang-fa.php
│           ├── phpmailer.lang-fi.php
│           ├── phpmailer.lang-fo.php
│           ├── phpmailer.lang-fr.php
│           ├── phpmailer.lang-gl.php
│           ├── phpmailer.lang-he.php
│           ├── phpmailer.lang-hr.php
│           ├── phpmailer.lang-hu.php
│           ├── phpmailer.lang-id.php
│           ├── phpmailer.lang-it.php
│           ├── phpmailer.lang-ja.php
│           ├── phpmailer.lang-ka.php
│           ├── phpmailer.lang-ko.php
│           ├── phpmailer.lang-lt.php
│           ├── phpmailer.lang-lv.php
│           ├── phpmailer.lang-ms.php
│           ├── phpmailer.lang-nb.php
│           ├── phpmailer.lang-nl.php
│           ├── phpmailer.lang-no.php
│           ├── phpmailer.lang-pl.php
│           ├── phpmailer.lang-pt.php
│           ├── phpmailer.lang-pt_br.php
│           ├── phpmailer.lang-ro.php
│           ├── phpmailer.lang-ru.php
│           ├── phpmailer.lang-se.php
│           ├── phpmailer.lang-sk.php
│           ├── phpmailer.lang-sl.php
│           ├── phpmailer.lang-sr.php
│           ├── phpmailer.lang-sv.php
│           ├── phpmailer.lang-tr.php
│           ├── phpmailer.lang-uk.php
│           ├── phpmailer.lang-vi.php
│           ├── phpmailer.lang-zh.php
│           └── phpmailer.lang-zh_cn.php
├── modules/
│   ├── .htaccess
│   ├── account/
│   │   ├── cart.php
│   │   ├── changemail.php
│   │   ├── changepass.php
│   │   ├── changesex.php
│   │   ├── confirm.php
│   │   ├── confirmemail.php
│   │   ├── create.php
│   │   ├── edit.php
│   │   ├── index.php
│   │   ├── login.php
│   │   ├── logout.php
│   │   ├── pagemenu/
│   │   │   └── view.php
│   │   ├── prune.php
│   │   ├── resend.php
│   │   ├── resetpass.php
│   │   ├── resetpw.php
│   │   ├── transfer.php
│   │   ├── view.php
│   │   └── xferlog.php
│   ├── auction/
│   │   └── index.php
│   ├── buyingstore/
│   │   ├── index.php
│   │   └── viewshop.php
│   ├── captcha/
│   │   └── index.php
│   ├── castle/
│   │   └── index.php
│   ├── character/
│   │   ├── changeslot.php
│   │   ├── divorce.php
│   │   ├── index.php
│   │   ├── mapstats.php
│   │   ├── online.php
│   │   ├── pagemenu/
│   │   │   └── view.php
│   │   ├── prefs.php
│   │   ├── resetlook.php
│   │   ├── resetpos.php
│   │   └── view.php
│   ├── cplog/
│   │   ├── ban.php
│   │   ├── changemail.php
│   │   ├── changepass.php
│   │   ├── create.php
│   │   ├── index.php
│   │   ├── ipban.php
│   │   ├── login.php
│   │   ├── paypal.php
│   │   ├── resetpass.php
│   │   └── txnview.php
│   ├── donate/
│   │   ├── complete.php
│   │   ├── history.php
│   │   ├── index.php
│   │   ├── notify.php
│   │   ├── trusted.php
│   │   └── update.php
│   ├── economy/
│   │   └── index.php
│   ├── errors/
│   │   ├── missing_action.php
│   │   └── missing_view.php
│   ├── forum/
│   │   └── index.php
│   ├── guild/
│   │   ├── emblem.php
│   │   ├── export.php
│   │   ├── index.php
│   │   └── view.php
│   ├── history/
│   │   ├── cplogin.php
│   │   ├── emailchange.php
│   │   ├── gamelogin.php
│   │   ├── index.php
│   │   ├── passchange.php
│   │   └── passreset.php
│   ├── install/
│   │   ├── index.php
│   │   └── reinstall.php
│   ├── ipban/
│   │   ├── add.php
│   │   ├── edit.php
│   │   ├── index.php
│   │   ├── remove.php
│   │   └── unban.php
│   ├── item/
│   │   ├── index.php
│   │   ├── iteminfo.php
│   │   ├── pagemenu/
│   │   │   └── view.php
│   │   └── view.php
│   ├── itemshop/
│   │   ├── add.php
│   │   ├── delete.php
│   │   ├── edit.php
│   │   └── imagedel.php
│   ├── logdata/
│   │   ├── branch.php
│   │   ├── cashpoints.php
│   │   ├── char.php
│   │   ├── chat.php
│   │   ├── command.php
│   │   ├── feeding.php
│   │   ├── index.php
│   │   ├── inter.php
│   │   ├── login.php
│   │   ├── mvp.php
│   │   ├── npc.php
│   │   ├── pick.php
│   │   └── zeny.php
│   ├── mail/
│   │   └── index.php
│   ├── main/
│   │   ├── index.php
│   │   ├── page_not_found.php
│   │   └── preprocess.php
│   ├── monster/
│   │   ├── index.php
│   │   └── view.php
│   ├── news/
│   │   ├── add.php
│   │   ├── delete.php
│   │   ├── edit.php
│   │   ├── index.php
│   │   ├── manage.php
│   │   └── view.php
│   ├── pages/
│   │   ├── add.php
│   │   ├── content.php
│   │   ├── delete.php
│   │   ├── edit.php
│   │   └── index.php
│   ├── purchase/
│   │   ├── add.php
│   │   ├── cart.php
│   │   ├── checkout.php
│   │   ├── clear.php
│   │   ├── index.php
│   │   ├── pending.php
│   │   └── remove.php
│   ├── ranking/
│   │   ├── alchemist.php
│   │   ├── blacksmith.php
│   │   ├── character.php
│   │   ├── death.php
│   │   ├── guild.php
│   │   ├── homunculus.php
│   │   ├── mvp.php
│   │   └── zeny.php
│   ├── server/
│   │   ├── info.php
│   │   ├── status-xml.php
│   │   └── status.php
│   ├── service/
│   │   └── tos.php
│   ├── servicedesk/
│   │   ├── catcontrol.php
│   │   ├── create.php
│   │   ├── index.php
│   │   ├── staffindex.php
│   │   ├── staffsettings.php
│   │   ├── staffview.php
│   │   ├── staffviewclosed.php
│   │   └── view.php
│   ├── unauthorized/
│   │   └── index.php
│   ├── vending/
│   │   ├── index.php
│   │   └── viewshop.php
│   ├── webcommands/
│   │   └── index.php
│   └── woe/
│       ├── custom.php
│       └── index.php
├── robots.txt
└── themes/
    ├── bootstrap/
    │   ├── css/
    │   │   ├── flux/
    │   │   │   ├── ie.css
    │   │   │   └── unitip.css
    │   │   ├── flux.css
    │   │   └── sticky-footer-navbar.css
    │   ├── footer.php
    │   ├── header.php
    │   ├── js/
    │   │   └── ie9.js
    │   ├── main/
    │   │   └── navbar.php
    │   └── manifest.php
    ├── default/
    │   ├── account/
    │   │   ├── cart.php
    │   │   ├── changemail.php
    │   │   ├── changepass.php
    │   │   ├── changesex.php
    │   │   ├── confirm.php
    │   │   ├── confirmemail.php
    │   │   ├── create.php
    │   │   ├── edit.php
    │   │   ├── index.php
    │   │   ├── login.php
    │   │   ├── logout.php
    │   │   ├── prune.php
    │   │   ├── resend.php
    │   │   ├── resetpass.php
    │   │   ├── resetpw.php
    │   │   ├── transfer.php
    │   │   ├── view.php
    │   │   └── xferlog.php
    │   ├── auction/
    │   │   └── index.php
    │   ├── buyingstore/
    │   │   ├── index.php
    │   │   └── viewshop.php
    │   ├── captcha/
    │   │   └── index.php
    │   ├── castle/
    │   │   └── index.php
    │   ├── character/
    │   │   ├── changeslot.php
    │   │   ├── divorce.php
    │   │   ├── index.php
    │   │   ├── mapstats.php
    │   │   ├── online.php
    │   │   ├── prefs.php
    │   │   ├── resetlook.php
    │   │   ├── resetpos.php
    │   │   └── view.php
    │   ├── cplog/
    │   │   ├── ban.php
    │   │   ├── changemail.php
    │   │   ├── changepass.php
    │   │   ├── create.php
    │   │   ├── index.php
    │   │   ├── ipban.php
    │   │   ├── login.php
    │   │   ├── paypal.php
    │   │   ├── resetpass.php
    │   │   └── txnview.php
    │   ├── css/
    │   │   ├── flux/
    │   │   │   ├── ie.css
    │   │   │   ├── recaptcha.css
    │   │   │   └── unitip.css
    │   │   └── flux.css
    │   ├── data/
    │   │   └── FluxDefaultTheme.psd
    │   ├── donate/
    │   │   ├── complete.php
    │   │   ├── history.php
    │   │   ├── index.php
    │   │   ├── notify.php
    │   │   ├── trusted.php
    │   │   └── update.php
    │   ├── economy/
    │   │   └── index.php
    │   ├── errors/
    │   │   ├── missing_action.php
    │   │   └── missing_view.php
    │   ├── footer.php
    │   ├── forum/
    │   │   └── index.php
    │   ├── guild/
    │   │   ├── emblem.php
    │   │   ├── export.php
    │   │   ├── index.php
    │   │   └── view.php
    │   ├── header.php
    │   ├── history/
    │   │   ├── cplogin.php
    │   │   ├── emailchange.php
    │   │   ├── gamelogin.php
    │   │   ├── index.php
    │   │   ├── passchange.php
    │   │   └── passreset.php
    │   ├── install/
    │   │   └── reinstall.php
    │   ├── ipban/
    │   │   ├── add.php
    │   │   ├── edit.php
    │   │   ├── index.php
    │   │   ├── remove.php
    │   │   └── unban.php
    │   ├── item/
    │   │   ├── index.php
    │   │   ├── iteminfo.php
    │   │   └── view.php
    │   ├── itemshop/
    │   │   ├── add.php
    │   │   ├── delete.php
    │   │   ├── edit.php
    │   │   └── imagedel.php
    │   ├── js/
    │   │   ├── flux.datefields.js
    │   │   ├── flux.unitip.js
    │   │   ├── flux.unitpngfix.js
    │   │   ├── ie9.js
    │   │   └── jquery-1.8.3.min.js
    │   ├── logdata/
    │   │   ├── branch.php
    │   │   ├── cashpoints.php
    │   │   ├── char.php
    │   │   ├── chat.php
    │   │   ├── command.php
    │   │   ├── feeding.php
    │   │   ├── index.php
    │   │   ├── inter.php
    │   │   ├── login.php
    │   │   ├── mvp.php
    │   │   ├── npc.php
    │   │   ├── pick.php
    │   │   └── zeny.php
    │   ├── mail/
    │   │   └── index.php
    │   ├── main/
    │   │   ├── balance.php
    │   │   ├── index.php
    │   │   ├── loginbox.php
    │   │   ├── page_not_found.php
    │   │   ├── pagemenu.php
    │   │   ├── sidebar.php
    │   │   └── submenu.php
    │   ├── monster/
    │   │   ├── index.php
    │   │   └── view.php
    │   ├── news/
    │   │   ├── add.php
    │   │   ├── delete.php
    │   │   ├── edit.php
    │   │   ├── index.php
    │   │   ├── manage.php
    │   │   └── view.php
    │   ├── pages/
    │   │   ├── add.php
    │   │   ├── content.php
    │   │   ├── delete.php
    │   │   ├── edit.php
    │   │   └── index.php
    │   ├── purchase/
    │   │   ├── add.php
    │   │   ├── cart.php
    │   │   ├── checkout.php
    │   │   ├── clear.php
    │   │   ├── index.php
    │   │   ├── pending.php
    │   │   └── remove.php
    │   ├── ranking/
    │   │   ├── alchemist.php
    │   │   ├── blacksmith.php
    │   │   ├── character.php
    │   │   ├── death.php
    │   │   ├── guild.php
    │   │   ├── homunculus.php
    │   │   ├── mvp.php
    │   │   └── zeny.php
    │   ├── server/
    │   │   ├── info.php
    │   │   ├── status-xml.php
    │   │   └── status.php
    │   ├── service/
    │   │   └── tos.php
    │   ├── servicedesk/
    │   │   ├── catcontrol.php
    │   │   ├── create.php
    │   │   ├── index.php
    │   │   ├── staffindex.php
    │   │   ├── staffsettings.php
    │   │   ├── staffview.php
    │   │   ├── staffviewclosed.php
    │   │   └── view.php
    │   ├── unauthorized/
    │   │   └── index.php
    │   ├── vending/
    │   │   ├── index.php
    │   │   └── viewshop.php
    │   ├── webcommands/
    │   │   └── index.php
    │   └── woe/
    │       ├── custom.php
    │       └── index.php
    └── installer/
        ├── footer.php
        ├── header.php
        └── install/
            └── index.php

================================================
FILE CONTENTS
================================================

================================================
FILE: .deepsource.toml
================================================
version = 1

[[analyzers]]
name = "php"

[[analyzers]]
name = "javascript"

[[analyzers]]
name = "sql"

exclude_files = [
	"lib/phpmailer/**",
]


================================================
FILE: .editorconfig
================================================
# rAthena FluxCP EditorConfig file
# EditorConfig is awesome: https://EditorConfig.org

root = true

[*]
insert_final_newline = true
trim_trailing_whitespace = true

[*.php]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4

[*.json]
indent_style = space
indent_size = 2

[*.yml]
indent_style = space
indent_size = 2


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: Create an Issue that details broken or unexpected behaviour
labels: [Bug Report]
body:
- type: textarea
  attributes:
    label: Environment
    description: |
      examples:
        - **PHP**: 8.1
        - **MySQL**: MariaDB 10
    value: |
        - PHP: 
        - MySQL: 
    render: Markdown
  validations:
    required: true
- type: textarea
  attributes:
    label: Current Behavior
    description: A concise description of what you're experiencing.
  validations:
    required: true
- type: textarea
  attributes:
    label: Expected Behavior
    description: A concise description of what you expected to happen.
  validations:
    required: false
- type: textarea
  attributes:
    label: Steps To Reproduce
    description: Steps to reproduce the behavior.
    placeholder: |
      1. In this environment...
      2. With this config...
      3. Open page '...'
      4. See error...
  validations:
    required: true
- type: textarea
  attributes:
    label: Anything else?
    description: |
      Links? References? Anything that will give us more context about the issue you are encountering!

      Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
  validations:
    required: false


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Forum Support
    url: https://rathena.org/board/forum/21-web-support/
    about: You can obtain support for FluxCP on our forum.
  - name: Discord Support
    url: https://discord.gg/kMeMXWEvSV
    about: Chat with others in our fluxcp-support channel.


================================================
FILE: .github/ISSUE_TEMPLATE/enhancement_request.yml
================================================
name: Enhancement Request
description: Submit your request for changes to existing code to provide more functionality or QoL changes.
title: "Enhancement Request"
labels: [Enhancement Request]
body:
- type: textarea
  attributes:
    label: Provide Details
    description: Give as much information as possible in order to get the discussion going.
  validations:
    required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
================================================
Fixes # .

Changes proposed in this Pull Request:
 * ?
 * ?
 * ?


================================================
FILE: .github/pull_request_template.md
================================================
Fixes # .

Changes proposed in this Pull Request:
 * ?
 * ?
 * ?


================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
  schedule:
    - cron: "36 3 * * 3"

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ javascript ]

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Initialize CodeQL
        uses: github/codeql-action/init@v2
        with:
          languages: ${{ matrix.language }}
          queries: +security-and-quality

      - name: Autobuild
        uses: github/codeql-action/autobuild@v2

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v2
        with:
          category: "/language:${{ matrix.language }}"


================================================
FILE: .gitignore
================================================
# Images
/data/items/icons/*.png
/data/items/images/*.png

/data/jobs/images/F/*.gif
/data/jobs/images/M/*.gif

/data/monsters/*.png
/data/monsters/*.gif

# Logs
/data/logs/errors
/data/logs/mail
/data/logs/mysql
/data/logs/schemas
/data/logs/transactions

# Caches
/data/tmp/*.php
/data/tmp/*.cache
/data/tmp/emblems

# Non-Default Themes
/themes/*
!/themes/default
!/themes/bootstrap
!/themes/installer

# Import Configs
/config/import


================================================
FILE: .htaccess
================================================
#RewriteEngine On
#RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|flv)$ index.php [QSA]


================================================
FILE: LICENSE
================================================
		   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions. 

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version. 

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.


================================================
FILE: README.md
================================================
FluxCP
======
[![DeepSource](https://app.deepsource.com/gh/rathena/FluxCP.svg/?label=active+issues&show_trend=true&token=nhkIfid6qRIZxl2INWaaV4Qb)](https://app.deepsource.com/gh/rathena/FluxCP/?ref=repository-badge)
[![Open Issues](https://img.shields.io/github/issues/rathena/FluxCP.svg?logo=github&logoWidth=18&color=yellow)](https://lgtm.com/projects/g/rathena/FluxCP/alerts/)
[![Open PRs](https://img.shields.io/github/issues-pr/rathena/FluxCP.svg?logo=github&logoWidth=18&color=blue)](https://lgtm.com/projects/g/rathena/FluxCP/alerts/)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/4d1c0a43c0864764b3d3dc5ed2d93192)](https://www.codacy.com/gh/rathena/FluxCP/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=rathena/FluxCP&amp;utm_campaign=Badge_Grade)

Flux Control Panel (FluxCP) for rAthena servers.

Requirements
---------
* PHP 7.3 or newer
* PDO and PDO-MYSQL extensions for PHP (including PHP_MYSQL support)
* MySQL 5 or newer
* Optional: GD2 (for guild emblems and registration CAPTCHA)
* Optional: Tidy (for cleaner HTML output)
* Optional: mod_rewrite support for UseCleanUrls feature
* Optional: [Item images](http://rathena.org/board/files/file/2509-item-images/)


What's New?
---------
* The description files are kept upto-date with each new commit from rAthena.
* Pre-integrated themes:
	- default
	- Bootstrap

* Built-In:
	- News and Pages CMS with integrated TinyMCE
	- Service Desk (ITIL Incident Management style support ticket system)
	- Additional Logs
	- More Ranking Lists
    - Discord Integration
    - Google ReCaptcha
    - Remote AtCommand functionality


How To ... ?
---------
We have a small doc library that covers:
* Basic User Documentation
    - Installation
    - [Themes](https://github.com/rathena/FluxCP/blob/master/doc/user_theme.md)
    - [Languages](https://github.com/rathena/FluxCP/blob/master/doc/user_lang.md)
    - Installing Addons
    - Updating FluxCP

* Developer Documentation
    - Creating an Addon
    - Providing Addon updates
    - Creating a custom Theme


Join the Discussion
---------
We have a discord server separate from rAthena just for FluxCP stuff!
The channels there can be used to obtain help, discuss testing, view anonymous feedback log, Github commits, etc.
https://discord.gg/kMeMXWEvSV


Extra Credits
---------
Original FluxCP created by Paradox924X and Byteflux with additional contributions from Xantara.
Some works from other users have been integrated into this project.


================================================
FILE: addons/helloworld/config/access.php
================================================
<?php
return array(
	'modules' => array(
		'helloworld' => array(
			'index' => AccountLevel::ADMIN
		)
	),
	'features' => array(
		// None.
	)
)
?>


================================================
FILE: addons/helloworld/config/addon.php
================================================
<?php
return array(
	'MenuItems' => array(
		//'Hello World' => array('module' => 'helloworld')
	)
)
?>


================================================
FILE: addons/helloworld/lang/en_us.php
================================================
<?php
return array(
	'HelloWorld'       => 'Hello, World!',
	'HelloInfoText'    => 'This is a “Hello World” sample from an add-on!',
	'HelloVersionText' => 'Your Flux Control Panel version is %s'
);
?>


================================================
FILE: addons/helloworld/lang/ko_kr.php
================================================
<?php
return array(
	'HelloWorld'       => '안녕하세요!',
	'HelloInfoText'    => '현제보고계시는건 샘플 애드온 프로그램입니다!',
	'HelloVersionText' => '지금 사용하고계시는 플럭스 버젼은 %s입니다.'
);
?>


================================================
FILE: addons/helloworld/modules/helloworld/index.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;

$fluxVersion  = Flux::VERSION;
$fluxVersion .= Flux::REPOSVERSION ? '.'.Flux::REPOSVERSION : '';
?>


================================================
FILE: addons/helloworld/themes/default/helloworld/index.php
================================================
<?php if (!defined('FLUX_ROOT')) exit; ?>
<h2><?php echo Flux::message('HelloWorld') ?></h2>
<p><?php echo Flux::message('HelloInfoText') ?></p>
<p><?php printf(Flux::message('HelloVersionText'), $fluxVersion) ?></p>


================================================
FILE: config/.htaccess
================================================
Order deny,allow
Deny from all


================================================
FILE: config/access.php
================================================
<?php
// This file should control all access to specified modules and actions.
return array(
	// Module/action permissions.
	// These are handled during runtime by Flux.
	// '*' is a default that is checked for any action that has not been
	// specified an access level.
	'modules' => array(
		'main'      => array(
			'*'        => AccountLevel::ANYONE
		),
		'donate'    => array(
			'index'    => AccountLevel::ANYONE,
			'notify'   => AccountLevel::ANYONE,
			'update'   => AccountLevel::ANYONE,
			'complete' => AccountLevel::ANYONE,
			'history'  => AccountLevel::NORMAL,
			'trusted'  => AccountLevel::NORMAL
		),
		'purchase'  => array(
			'index'    => AccountLevel::ANYONE,
			'add'      => AccountLevel::ANYONE,
			'clear'    => AccountLevel::NORMAL,
			'cart'     => AccountLevel::NORMAL,
			'checkout' => AccountLevel::NORMAL,
			'remove'   => AccountLevel::NORMAL,
			'pending'  => AccountLevel::NORMAL
		),
		'itemshop'  => array(
			'add'      => AccountLevel::ADMIN,
			'edit'     => AccountLevel::ADMIN,
			'delete'   => AccountLevel::ADMIN,
			'imagedel' => AccountLevel::ADMIN
		),
		'account'   => array(
			'index'    => AccountLevel::LOWGM,
			'view'     => AccountLevel::NORMAL,
			'create'   => AccountLevel::UNAUTH,
			'login'    => AccountLevel::UNAUTH,
			'logout'   => AccountLevel::NORMAL,
			'transfer' => AccountLevel::NORMAL,
			'xferlog'  => AccountLevel::NORMAL,
			'cart'     => AccountLevel::NORMAL,
			'changepass' => AccountLevel::NORMAL,
			'edit'       => AccountLevel::ADMIN,
			'changesex'  => AccountLevel::NORMAL,
			'confirm'    => AccountLevel::UNAUTH,
			'resend'     => AccountLevel::UNAUTH,
			'resetpass'  => AccountLevel::UNAUTH,
			'resetpw'    => AccountLevel::UNAUTH,
			'changemail' => AccountLevel::NORMAL,
			'confirmemail' => AccountLevel::NORMAL,
			'prune'        => AccountLevel::ANYONE
		),
		'character'	=> array(
			'index'			=> AccountLevel::LOWGM,
			'view'			=> AccountLevel::NORMAL,
			'online'		=> AccountLevel::ANYONE,
			'prefs'			=> AccountLevel::NORMAL,
			'changeslot'	=> AccountLevel::NORMAL,
			'resetlook'		=> AccountLevel::NORMAL,
			'resetpos'		=> AccountLevel::NORMAL,
			'mapstats'		=> AccountLevel::ANYONE,
			'divorce'		=> AccountLevel::NORMAL
		),
		'guild'		=> array(
			'emblem'		=> AccountLevel::ANYONE,
			'index'			=> AccountLevel::LOWGM,
			'export'		=> AccountLevel::ADMIN,
			'view'			=> AccountLevel::NORMAL
		),
		'castle'	=> array(
			'index'			=> AccountLevel::ANYONE
		),
		'economy'	=> array(
			'index'			=> AccountLevel::NORMAL
		),
		'auction'	=> array(
			'index'			=> AccountLevel::LOWGM
		),
		'ranking'	=> array(
			'character'		=> AccountLevel::ANYONE,
			'guild'			=> AccountLevel::ANYONE,
			'zeny'			=> AccountLevel::ANYONE,
			'death'			=> AccountLevel::ANYONE,
			'homun'			=> AccountLevel::ANYONE,
			'swordman'		=> AccountLevel::ANYONE,
			'bowman'		=> AccountLevel::ANYONE,
			'spearman'		=> AccountLevel::ANYONE,
			'mvp'       	=> AccountLevel::ANYONE,
		),
		'item'		=> array(
			'index'			=> AccountLevel::ANYONE,
			'view'			=> AccountLevel::ANYONE,
            'iteminfo'		=> AccountLevel::ADMIN
		),
		'monster'	=> array(
			'index'			=> AccountLevel::ANYONE,
			'view'			=> AccountLevel::ANYONE
		),
		'server'	=> array(
			'status'		=> AccountLevel::ANYONE,
			'status-xml'	=> AccountLevel::ANYONE,
			'info'			=> AccountLevel::ANYONE
		),
		'logdata'	=> array(
			'index'			=> AccountLevel::ADMIN,
			'char'			=> AccountLevel::ADMIN,
			'cashpoints'	=> AccountLevel::ADMIN,
			'feeding'		=> AccountLevel::ADMIN,
			'inter'			=> AccountLevel::ADMIN,
			'command'		=> AccountLevel::ADMIN,
			'branch'		=> AccountLevel::ADMIN,
			'chat'			=> AccountLevel::ADMIN,
			'login'			=> AccountLevel::ADMIN,
			'mvp'			=> AccountLevel::ADMIN,
			'npc'			=> AccountLevel::ADMIN,
			'pick'			=> AccountLevel::ADMIN,
			'zeny'			=> AccountLevel::ADMIN
		),
		'cplog'		=> array(
			'index'			=> AccountLevel::ADMIN,
			'create'		=> AccountLevel::ADMIN,
			'paypal'		=> AccountLevel::ADMIN,
			'login'			=> AccountLevel::ADMIN,
			'resetpass'		=> AccountLevel::ADMIN,
			'changepass'	=> AccountLevel::ADMIN,
			'changemail'	=> AccountLevel::ADMIN,
			'ban'			=> AccountLevel::ADMIN,
			'ipban'			=> AccountLevel::ADMIN,
			'txnview'		=> AccountLevel::ADMIN			
		),
		'ipban'		=> array(
			'index'			=> AccountLevel::ADMIN,
			'add'			=> AccountLevel::ADMIN,
			'unban'			=> AccountLevel::ADMIN,
			'edit'			=> AccountLevel::ADMIN,
			'remove'		=> AccountLevel::ADMIN
		),
		'service'	=> array(
			'tos'			=> AccountLevel::ANYONE
		),
		'captcha'	=> array(
			'index'			=> AccountLevel::ANYONE
		),
		'install'	=> array(
			'index'			=> AccountLevel::ANYONE,
			'reinstall'		=> AccountLevel::ADMIN
		),
		'test'		=> array(
			'*'				=> AccountLevel::ANYONE
		),
		'woe'		=> array(
			'index'			=> AccountLevel::ANYONE
		),
		'mail'		=> array(
			'index'			=> AccountLevel::ADMIN
		),
		'history'	=> array(
			'index'			=> AccountLevel::NORMAL,
			'cplogin'		=> AccountLevel::NORMAL,
			'gamelogin'		=> AccountLevel::NORMAL,
			'emailchange'	=> AccountLevel::NORMAL,
			'passchange'	=> AccountLevel::NORMAL,
			'passreset'		=> AccountLevel::NORMAL
		),
		'pages'		=> array(
			'index' 		=> AccountLevel::ADMIN,
			'add' 			=> AccountLevel::ADMIN,
			'delete' 		=> AccountLevel::ADMIN,
			'edit' 			=> AccountLevel::ADMIN,
			'content' 		=> AccountLevel::ANYONE,
		),
		'news'		=> array(
			'index' 		=>  AccountLevel::ANYONE,
			'view' 			=>  AccountLevel::ANYONE,
			'manage'		=>  AccountLevel::ADMIN,
			'add' 			=>  AccountLevel::ADMIN,
			'edit' 			=>  AccountLevel::ADMIN,
			'delete' 		=> AccountLevel::ADMIN,
		),
		'servicedesk'=> array(
			'index'			=> AccountLevel::NORMAL,
			'create'		=> AccountLevel::NORMAL,
			'view'			=> AccountLevel::NORMAL,
			'staffindex'	=> AccountLevel::LOWGM,
			'staffview'		=> AccountLevel::LOWGM,
			'staffviewclosed'=> AccountLevel::LOWGM,
			'staffsettings'	=> AccountLevel::LOWGM,
			'catcontrol'	=> AccountLevel::HIGHGM
		),
		'vending'		=> array(
			'index'			=> AccountLevel::ANYONE,
			'viewshop'		=> AccountLevel::ANYONE,
		),	
		'webcommands'	=> array(
			'index'			=> AccountLevel::ADMIN,
		),
	),
	// General feature permissions, handled by the modules themselves.
	'features' => array(
		'ViewAccount'		=> AccountLevel::HIGHGM, // View another person's account details.
		'ViewAccountBanLog'	=> AccountLevel::HIGHGM, // View another person's account ban log.
		'DeleteAccount'		=> AccountLevel::ADMIN,  // (not yet implemented)
		'DeleteCharacter'	=> AccountLevel::ADMIN,  // (not yet implemented)
		'SeeAccountPassword'	=> AccountLevel::NOONE,  // If not using MD5, view another person's password in list.
		'TempBanAccount'	=> AccountLevel::LOWGM,  // Has ability to temporarily ban an account.
		'TempUnbanAccount'	=> AccountLevel::LOWGM,  // Has ability to remove a temporary ban on an account.
		'PermBanAccount'	=> AccountLevel::HIGHGM, // Has ability to permanently ban an account.
		'PermUnbanAccount'	=> AccountLevel::HIGHGM, // Has ability to remove a permanent ban on an account.
		'SearchMD5Passwords'	=> AccountLevel::NOONE,  // Ability to search MD5'd passwords in list.
		'ViewCharacter'		=> AccountLevel::HIGHGM, // View another person's character details.
		'DivorceCharacter'	=> AccountLevel::LOWGM,  // Divorce another character.
		'AddShopItem'		=> AccountLevel::ADMIN,  // Ability to add an item to the shop.
		'EditShopItem'		=> AccountLevel::ADMIN,  // Ability to modify a shop item's details.
		'DeleteShopItem'     => AccountLevel::ADMIN,  // Ability to remove an item for sale on the shop.
		'ViewGuild'          => AccountLevel::ADMIN,  // Ability to view another guild's details.
		'SearchWhosOnline'   => AccountLevel::ANYONE, // Ability to search the "Who's Online" page.
		'ViewOnlinePosition' => AccountLevel::LOWGM,  // Ability to see a character's current map on "Who's Online" page.
		'EditAccountGroupID' => AccountLevel::ADMIN,  // Ability to edit another person's account group ID.
		'EditAccountBalance' => AccountLevel::ADMIN,  // Ability to edit another person's account balance.
		'ModifyAccountPrefs' => AccountLevel::ADMIN,  // Ability to modify another person's account preferences.
		'ModifyCharPrefs'    => AccountLevel::ADMIN,  // Ability to modify another person's character preferences.
		'IgnoreHiddenPref'   => AccountLevel::LOWGM,  // Ability to see users on "Who's Online" page, hidden or not.
		'IgnoreHiddenPref2'  => AccountLevel::LOWGM,  // Ability to see users on "Who's Online" page, hidden by app config or not.
		'SeeHiddenMapStats'  => AccountLevel::LOWGM,  // Ability to see hidden map statistics.
		'ChangeSlot'         => AccountLevel::LOWGM,  // Minimum group level required to change another character's slot.
		'ModifyIpBan'        => AccountLevel::ADMIN,  // Minimum group level required to modify an existing IP ban.
		'RemoveIpBan'        => AccountLevel::ADMIN,  // Minimum group level required to remove an existing IP ban.
		'HideFromZenyRank'   => AccountLevel::NORMAL, // Ability to set "Hide from zeny ranking" pref.
		'SeeItemDbScripts'   => AccountLevel::ANYONE, // Ability to see item_db scripts in view page.
		'SeeItemDb2Scripts'  => AccountLevel::ADMIN,  // Ability to see item_db2 scripts in view page.
		'ViewRawTxnLogData'  => AccountLevel::ADMIN,  // Minimum group level required to view Raw Transaction Log in txnview page.
		'ResetLook'          => AccountLevel::LOWGM,  // Minimum group level required to reset another character's look.
		'ResetPosition'      => AccountLevel::LOWGM,  // Minimum group level required to reset another character's position.
		'ViewWoeDisallowed'  => AccountLevel::LOWGM,  // Minimum group level required to bypass WoE-disabled page security check.
		'SeeCpLoginLogPass'  => AccountLevel::NOONE,  // Minimum group level required to see password in CP login log (also requires CpLoginLogShowPassword in application.php)
		'SearchCpLoginLogPw' => AccountLevel::NOONE,  // Minimum group level required to search through passwords in the CP login log.
		'SeeCpResetPass'     => AccountLevel::NOONE,  // Minimum group level required to see passwords in CP log's "password resets" page.
		'SearchCpResetPass'  => AccountLevel::NOONE,  // Minimum group level required to search passwords in CP log's "password resets" page.
		'SeeCpChangePass'    => AccountLevel::NOONE,  // Minimum group level required to see passwords in CP log's "password changes" page.
		'SearchCpChangePass' => AccountLevel::NOONE,  // Minimum group level required to search passwords in CP log's "password changes" page.
		'SeeAccountID'       => AccountLevel::LOWGM,  // Minimum group level required to see Account ID on account view and character view pages.
		'SeeUnknownItems'    => AccountLevel::LOWGM,  // Minimum group level required to see unidentified items as identified.
		'AvoidSexChangeCost' => AccountLevel::LOWGM,  // Avoid paying cost (if any) for sex changes.
		
		'EditHigherPower'    => AccountLevel::NOONE,
		'BanHigherPower'     => AccountLevel::NOONE
	)
);
?>


================================================
FILE: config/application.php
================================================
<?php
// This is the application configuration file. All values have been set to
// the default, and should be changed as needed.
return array(
	'ServerAddress'				=> 'localhost',				// This value is the hostname:port under which Flux runs. (e.g., example.com or example.com:80)
	'BaseURI'					=> 'fluxcp',						// The base URI is the base web root on which your application lies.
	'ForceHTTPS'				=> true,					// By default use HTTPS, you should only use HTTP, if you have no certificate available (Note: You may want to visit https://letsencrypt.org)
	'InstallerPassword'			=> 'secretpassword',		// Installer/updater password.
	'RequireOwnership'			=> true,					// Require the executing user to be owner of the FLUX_ROOT/data/ directory tree? (Better for security)
															// WARNING: This will be mostly IGNORED on non-POSIX-compliant OSes (e.g. Windows).
	'DefaultLoginGroup'			=> null,
	'DefaultCharMapServer'		=> null,
	'DefaultLanguage'			=> 'en_us',					// Specify the default control panel language (see FLUX_ROOT/lang/ directory for available languages.)
	'SiteTitle'					=> 'Flux Control Panel',	// This value is only used if the theme decides to use it.
	'ThemeName'					=> array('default', 'bootstrap'), // Names of the themes you would like list for use in the footer. Themes are in FLUX_ROOT/themes.
	'ScriptTimeLimit'			=> 0,						// Script execution time limit. Specifies (in seconds) how long a page should run before timing out. (0 means forever)
	'MissingEmblemBMP'			=> 'empty.bmp',				//
	'ItemIconNameFormat'		=> '%d.png',				// The filename format for item icons (defaults to {itemid}.png).
	'ItemImageNameFormat'		=> '%d.png',				// The filename format for item images (defaults to {itemid}.png).
	'MonsterImageNameFormat'	=> '%d.gif',				// The filename format for monster images (defaults to {monsterid}.gif).
	'JobImageNameFormat'		=> '%d.gif',				// The filename format for job images (defaults to {jobid}.gif).
	'DivinePrideIntegration'	=> true,					// Dowload monsters and items images from https://www.divine-pride.net if it's not exist.
	'ForceEmptyEmblem'			=> false,					// Forcefully display empty guild emblems, helpful when you don't have GD2 installed.
	'EmblemCacheInterval'		=> 12,						// Hourly interval to re-cache guild emblems (set to 0 to disable emblem cache).
	'EmblemUseWebservice'		=> true,					// Load emblems from WebService?
	'SessionCookieExpire'		=> 48,						// Duration in hours.
	'AdminMenuGroupLevel'		=> AccountLevel::LOWGM,		// The starting group ID for which module actions are moved into the admin menu for display.
	'DateDefaultTimezone'		=> 'UTC',					// The default timezone, consult the PHP manual for valid timezones: http://php.net/timezones (null for defaut system TZ)
	'DateFormat'				=> 'Y-m-d',					// Default DATE format to be displayed in pages.
	'DateTimeFormat'			=> 'Y-m-d H:i:s',			// Default DATETIME format to be displayed in pages.
	'ShowSinglePage'			=> true,					// Whether or not to show the page numbers even if there's only one page.
	'ResultsPerPage'			=> 20,						// The number of results to display in a paged set, per page.
	'PagesToShow'				=> 10,						// The number of page numbers to display at once.
	'PageJumpMinimumPages'		=> 1,						// Minimum number of required pages before page jump box is shown. (0 to always show!)
	'ShowPageJump'				=> true,					// Whether or not to show the "Page Jump" box.
	'SingleMatchRedirect'		=> true,					// Whether or not to redirect to view action from index page if only one match is returned (and action is allowed).
	'SingleMatchRedirectItem'	=> false,					// Same as above, for item module.
	'SingleMatchRedirectMobs'	=> false,					// Same as above, for monster module.
	'UsernameAllowedChars'		=> 'a-zA-Z0-9_',			// PCRE Format Pattern. default: 'a-zA-Z0-9_' (alphanumeric and underscore)
															// WARNING: This string isn't escaped so be careful which chars you use!
															// PCRE Pattern Ref: http://php.net/manual/en/pcre.pattern.php
	'MinUsernameLength'			=> 4,						// Minimum username length.
	'MaxUsernameLength'			=> 23,						// Maximum username length.
	'MinPasswordLength'			=> 8,						// Minimum password length.
	'MaxPasswordLength'			=> 31,						// Maximum password length.
	'PasswordMinUpper'			=> 1,						// Number of upper-case letters to require in passwords.
	'PasswordMinLower'			=> 1,						// Number of lower-case letters to require in passwords.
	'PasswordMinNumber'			=> 1,						// Number of numbers to require in passwords.
	'PasswordMinSymbol'			=> 0,						// Number of symbols to require in passwords.
	'GMMinPasswordLength'		=> 8,						// Minimum password length for GM accounts.
	'GMPasswordMinUpper'		=> 1,						// Number of upper-case letters to require in passwords for GM accounts.
	'GMPasswordMinLower'		=> 1,						// Number of lower-case letters to require in passwords for GM accounts.
	'GMPasswordMinNumber'		=> 1,						// Number of numbers to require in passwords for GM accounts.
	'GMPasswordMinSymbol'		=> 1,						// Number of symbols to require in passwords for GM accounts.
	'RandomPasswordLength'		=> 16,						// This is the length of the random password generated by the "Reset Password" feature. (NOTE: Hardcoded minimum value of 8)
	'AllowUserInPassword'		=> false,					// Whether or not to allow the password to contain the username. (NOTE: A case-insensitive search is performed)
	'AllowDuplicateEmails'		=> false,					// Whether or not to allow duplicate e-mails to be used in registration. (See Mailer config options)
	'RequireEmailConfirm'		=> false,					// Require e-mail confirmation during registration.
	'RequireChangeConfirm'		=> false,					// Require confirmation when changing e-mail addresses.
	'EmailConfirmExpire'		=> 48,						// E-mail confirmations expire hours. Unconfirmed accounts will expire after this period of time.
	'PincodeEnabled'			=> true,					// Whether or not the pincode system is enabled in your server. (Check your char_athena.conf file. Enabled by default.)
	'MailerFromAddress'			=> 'noreply@localhost',		// The e-mail address displayed in the From field.
	'MailerFromName'			=> 'MailerName',			// The name displayed with the From e-mail address.
	'MailerUseSMTP'				=> false,					// Whether or not to use a separate SMTP server for sending mail.
	'MailerSMTPUseSSL'			=> false,					// Whether or not mailer should connect using SSL (yes for GMail).
	'MailerSMTPUseTLS'			=> false,					// Same as above SSL setting, but for TLS.  This setting will override the SSL setting.
	'MailerSMTPPort'			=> null,					// When MailerUseSMTP is true: SMTP server port (mailer will default to 25).
	'MailerSMTPHosts'			=> null,					// When MailerUseSMTP is true: A string host or array of hosts (e.g., 'host1' or array('host1', 'backuphost')).
	'MailerSMTPUsername'		=> null,					// When MailerUseSMTP is true: Authorized username for SMTP server.
	'MailerSMTPPassword'		=> null,					// When MailerUseSMTP is true: Authorized password for SMTP server (for above user).
	'ServerStatusCache'			=> 2,						// Store a cached server status and refresh every X minutes.  Default: 2 minutes (value is measured in minutes).
	'ServerStatusTimeout'		=> 2,						// For each server, spend X amount of seconds to determine whether it's up or not.
	'SessionKey'				=> 'fluxSessionData',		// Shouldn't be changed, just specifies the session key to be used for session data.
	'DefaultModule'				=> 'main',					// This is the module to execute when none has been specified.
	'DefaultAction'				=> 'index',					// This is the default action for any module, probably should leave this alone. (Deprecated)
	'GzipCompressOutput'		=> false,					// Whether or not to compress output using zlib.
	'GzipCompressionLevel'		=> 9,						// zlib compression level. (1~9)
	'OutputCleanHTML'			=> true,					// Use this if you have Tidy installed to clean your HTML output when serving pages.
	'ShowCopyright'				=> true,					// Whether or not to show the copyright footer.
	'ShowRenderDetails'			=> true,					// Shows the "page rendered in X seconds" and "number of queries executed: X" in the default theme.
	'UseCleanUrls'				=> false,					// Set to true if you're running Apache and it supports mod_rewrite and .htaccess files.
	'DebugMode'					=> false,					// Set to false to minimize technical details from being output by Flux. WARNING: DO NOT USE THIS OPTION ON A PUBLICALLY-ACCESSIBLE CP.
	'UseCaptcha'				=> false,					// Use CAPTCHA image for account registration to prevent automated account creations. (Requires GD2/FreeType2)
	'UseLoginCaptcha'			=> false,					// Use CAPTCHA image for account logins. (Requires GD2/FreeType2)
	'EnableReCaptcha'			=> false,					// Enables the use of reCAPTCHA instead of Flux's native GD2 library (http://www.google.com/recaptcha)
	'ReCaptchaPublicKey'		=> '...',					// This is your reCAPTCHA public key [REQUIRED FOR RECAPTCHA] (sign up at http://www.google.com/recaptcha)
	'ReCaptchaPrivateKey'		=> '...',					// This is your reCAPTCHA private key [REQUIRED FOR RECAPTCHA] (sign up at http://www.google.com/recaptcha)
	'ReCaptchaTheme'			=> 'light',					// ReCaptcha theme to use (Value: dark or light) (see: https://developers.google.com/recaptcha/docs/display#render_param)
	'DisplaySinglePages'		=> true,					// Whether or not to display paging for single page results.
	'ForwardYears'				=> 15,						// (Visual) The number of years to display ahead of the current year in date inputs.
	'BackwardYears'				=> 60,						// (Visual) The number of years to display behind the current year in date inputs.
	'ColumnSortAscending'		=> ' ▲',					// (Visual) Text displayed for ascending sorted column names.
	'ColumnSortDescending'		=> ' ▼',					// (Visual) Text displayed for descending sorted column names.
	'DisplayCashPoints'			=> false,					// Whether or not to display "Cash Points" instead of the player's "Credits" in the control panel.
	'CreditExchangeRate'		=> 1.0,						// The rate at which credits are exchanged for dollars.
	'MinDonationAmount'			=> 2.0,						// Minimum donation amount. (NOTE: Actual donations made that are less than this account won't be exchanged)
	'DonationCurrency'			=> 'USD',					// Preferred donation currency. Only donations made in this currency will be processed for credit deposits.
	'MoneyDecimalPlaces'		=> 2,						// (Visual) Number of decimal places to display in amount.
	'MoneyThousandsSymbol'		=> ',',						// (Visual) Thousandths place separator (a period in European currencies).
	'MoneyDecimalSymbol'		=> '.',						// (Visual) Decimal separator (a comma in European currencies).
	'AcceptDonations'			=> true,					// Whether or not to accept donations.
	'PayPalIpnUrl'				=> 'www.paypal.com',		// The ipnpb.paypal.com and ipnpb.sandbox.paypal.com endpoints only accept HTTPS connections. If you currently use www.paypal.com, you should move to ipnpb.paypal.com when you update your code to use HTTPS.
	'PayPalBusinessEmail'		=> 'admin@localhost',		// Enter the e-mail under which you have registered your business account.
	'PayPalReceiverEmails'		=> array(					// These are the receiver e-mail addresses who are allowed to receive payment.
		//'admin2@localhost',								// -- This array may be empty if you only use one e-mail
		//'admin3@localhost'								// -- because your Business Email is also checked.
	),
	'PaypalHackNotify'          => true,                    // Send email notification if hack attempt detected (Notification will be send for each address in list PayPalBusinessEmail and PayPalReceiverEmails)
	'PayPalAllowedHosts'        => array(					// PayPal IP list https://www.paypal.com/fm/smarthelp/article/what-are-the-ip-addresses-for-live-paypal-servers-ts1056
		'ipn.sandbox.paypal.com',
		'notify.paypal.com',
		'66.211.170.66',
		'173.0.81.1',
		'173.0.81.0/24',
		'173.0.81.33',
		'173.0.81.65',
		'173.0.81.140',
		'64.4.240.0/21',
		'64.4.248.0/22',
		'6.211.168.0/22',
		'173.0.80.0/20',
		'91.243.72.0/23'
	),
	'GStorageLeaderOnly'		=> false,					// Only allow guild leader to view guild storage rather than all members?
	'DivorceKeepChild'			=> false,					// Keep child after divorce?
	'DivorceKeepRings'			=> false,					// Keep wedding rings after divorce?
	'IpWhitelistPattern'		=>							// PCRE Format Pattern. It's recommended you add your gameserver, webserver and server owner's IPs here.
		'(127\.0\.0\.1|0(\.[0\*]){3})',						// WARNING: This string isn't escaped so be careful which chars you use!
															// By default, whitelists 127.0.0.1 (localhost) and 0.0.0.0 (all interfaces; whitelists all wildcard bans that can achive this too)
	'AllowIpBanLogin'			=> false,					// Allow logging into account from banned IP.
	'AllowTempBanLogin'			=> false,					// Allow logging in of temporarily banned accounts.
	'AllowPermBanLogin'			=> false,					// Allow logging in of permanently banned accounts.
	'AutoRemoveTempBans'		=> true,					// Automatically remove expired temporary bans on certain pages.
	'ItemShopMaxCost'			=> 99,						// Max price an item can be sold for.
	'ItemShopMaxQuantity'		=> 99,						// Max quantity the item may be sold at once for.
	'ItemShopItemPerPage'		=> 5,						// The number of items to display per page in the "Item Shop" page.
    'ShowItemDesc'              => false,                   // Displays generated item descs from parsed itemInfo.lua
	'HideFromWhosOnline'		=> AccountLevel::LOWGM,		// Levels greater than or equal to this will be hidden from the "Who's Online" page.
	'HideFromMapStats'			=> AccountLevel::LOWGM,		// Levels greater than or equal to this will be hidden from the "Map Stats" page.
	'EnableGMPassSecurity'		=> AccountLevel::LOWGM,		// Levels greater than or equal to this will be required to use passwords that meet the earlier GM Password settings.
	'ChargeGenderChange'		=> 0,						// You can specify this as the number of credits to charge for gender change.  Can be 0 for free change.
	'BanPaymentStatuses'		=> array(					// Payment statuses that will automatically ban the account owner if received.
		'Cancelled_Reversal',								// -- 'Cancelled_Reversal'
		'Reversed',											// -- 'Reversed'
	),

	'HoldUntrustedAccount'		=> 0,						// This is the time in hours to hold a donation crediting process for, if the account
															// isn't a trusted account. Specify 0 or false to disable this feature.

	'AutoUnholdAccount'			=> false,					// Enable this to auto-unhold an account and credit it if the transaction is still
															// valid.  This only applies if you are using the HoldUnstrustedAccount feature.
															// If you want to run a cron job instead, you can make a request to the '/donate/update'
															// module/action with the InstallerPassword as the password to run the update task.
															// With clean URLs: http://<server>/<baseURI>/donate/update?password=<InstallerPassword>
															// Without clean URLs: http://<server>/<baseURI>?module=donate&action=update&password=<InstallerPassword>
															// NOTE: This option is HIGHLY inefficient, it's recommended to run a cron job instead.

	'AutoPruneAccounts'			=> false,					// Enable this to automatically prune expired accounts. Enabling this is a performance
															// performance killer. See 'AutoUnholdAccount' for running this task as a cron job,
															// the module is 'account' and the action is 'prune'.
															// With clean URLs: http://<server>/<baseURI>/account/prune?password=<InstallerPassword>
															// Without clean URLs: http://<server>/<baseURI>?module=account&action=prune&password=<InstallerPassword>

	'ShopImageExtensions'		=> array(					// These are the image extensions allowed for uploading in the item shop.
		'png', 'jpg', 'gif', 'bmp', 'jpeg'
	),
	'NoResetPassGroupLevel'		=> AccountLevel::LOWGM,		// Minimum group level of account to prevent password reset using control panel.

	'CharRankingLimit'			=> 20,						//
	'GuildRankingLimit'			=> 20,						//
	'ZenyRankingLimit'			=> 20,						//
	'DeathRankingLimit'			=> 20,						//
	'AlchemistRankingLimit'		=> 20,						//
	'BlacksmithRankingLimit'	=> 20,						//
	'HomunRankingLimit'			=> 20,						//
	'MVPRankingLimit'			=> 20,						//

	'RankingHideGroupLevel'		=> AccountLevel::LOWGM,		//
	'InfoHideZenyGroupLevel'	=> AccountLevel::LOWGM,		// Minimum group level of account to hide zeny from in server information page.

	'CharRankingThreshold'		=> 0,						// Number of days the character must have logged in within to be listed in character ranking. (0 = disabled)
	'ZenyRankingThreshold'		=> 0,						// Number of days the character must have logged in within to be listed in zeny ranking. (0 = disabled)
	'DeathRankingThreshold'		=> 0,						// Number of days the character must have logged in within to be listed in death ranking. (0 = disabled)
	'AlchemistRankingThreshold'	=> 0,						// Number of days the character must have logged in within to be listed in death ranking. (0 = disabled)
	'HomunRankingThreshold'		=> 0,						// Number of days the character must have logged in within to be listed in homunculus ranking. (0 = disabled)

	'HideTempBannedCharRank'	=> false,					// Hide temporarily banned characters from ranking.
	'HidePermBannedCharRank'	=> true,					// Hide permanently banned characters from ranking.

	'HideTempBannedZenyRank'	=> false,					// Hide temporarily banned characters from ranking.
	'HidePermBannedZenyRank'	=> true,					// Hide permanently banned characters from ranking.

	'HideTempBannedDeathRank'	=> false,					// Hide temporarily banned characters from ranking.
	'HidePermBannedDeathRank'	=> true,					// Hide permanently banned characters from ranking.

	'HideTempBannedAlcheRank'	=> false,					// Hide temporarily banned characters from ranking.
	'HidePermBannedAlcheRank'	=> true,					// Hide permanently banned characters from ranking.

	'HideTempBannedSmithRank'	=> false,					// Hide temporarily banned characters from ranking.
	'HidePermBannedSmithRank'	=> true,					// Hide permanently banned characters from ranking.

	'HideTempBannedStats'		=> false,					// Hide temporarily banned accounts from statistics.
	'HidePermBannedStats'		=> true,					// Hide permanently banned accounts from statistics.

	'HideTempBannedHomunRank'	=> false,					// Hide temporarily banned characters from ranking.
	'HidePermBannedHomunRank'	=> true,					// Hide permanently banned characters from ranking.

	'SortJobsByAmount'			=> false,					// Sort job class information on statistics page by descending quantity (false = Sort by Job ID).

	'CpLoginLogShowPassword'	=> false,					// Show password in CP login log (also see access.php's SeeCpLoginLogPass).

	'CpResetLogShowPassword'	=> false,					// Show password in CP "password resets" log (also see access.php's SeeCpResetPass).

	'CpChangeLogShowPassword'	=> false,					// Show password in CP "password changes" log (also see access.php's SeeCpChangePass).

	'AdminMenuNewStyle'			=> true,					// Use new-style admin menu;  Applies to 'default' theme.
	'EnablePeakDisplay'			=> true,					// Display Peak User count on Server Status page.


// News Options
	'CMSNewsOnHomepage'			=> true,					// Display News on Home Page instead of "You've Just Installed FluxCP" message?
	'CMSNewsType'				=> 1,						// Type = source of news feed:
															//	1 = Built-in news page
															//	2 = RSS Import

	'CMSNewsRSS'				=> 'https://rathena.org/board/rss/1-latest-community-announcements.xml/',		// Use if CMSNewsType = 2
	'CMSNewsLimit'				=> 4,						// Number of news items to display
	'CMSDisplayModifiedBy'		=> false,					// If a news item has been modified, display modified date under news item?

// Service Desk
	'StaffReplyColour'			=> 'brown',
	'FontResolvedColour'		=> 'green',
	'FontPendingColour'			=> 'orange',
	'FontClosedColour'			=> 'darkgrey',
	'SDEnableCreditRewards'		=> true,					// Show option in Service Desk to reward player X credits for reporting bugs/abuse/etc.
	'SDCreditReward'			=> 10,						// Number of credits to award account.

// Discord Webhooks
	'DiscordUseWebhook'			=> false,
	'DiscordWebhookURL'			=> 'enter_webhook_url_from_discord_here',
    'DiscordSendOnRegister'     => true, // Sends a channel message when someone registers
    'DiscordSendOnNewTicket'    => true, // Sends a channel message when someone submits a new ticket to the Service Desk
    'DiscordSendOnWebCommand'   => true, // Sends a channel message when someone uses the Web Command feature in FluxCP
    'DiscordSendOnMarketing'    => true, // Sends a channel message when someone uses the Send Email feature in FluxCP
	'DiscordSendOnErrorException' => true, // Sends a channel message when an exception is thrown

	'TinyMCEKey'				=> 'no-key',				// Register for a key at https://www.tiny.cloud/my-account/dashboard/

	// These are the main menu items that should be displayed by themes.
	// They route to modules and actions.  Whether they are displayed or
	// not at any given time depends on the user's account group level and/or
	// their login status.
	'MenuItems'		=> array(
		'MainMenuLabel'		=> array(
			'HomeLabel'			=> array('module' => 'main'),
			//'ForumLabel'		=> array('exturl' => 'http://www.fluxro.com/community'),	// External forum link
			//'ForumLabel'		=> array('module' => 'forums'), 						// Built-in forum link
			'NewsLabel'			=> array('module' => 'news'),
			// Sample items for pages function.
			'DownloadsLabel'		=> array('module' => 'pages','action'=>'content','param'=>array('path'=>'downloads')),
			'RulesLabel'			=> array('module' => 'pages','action'=>'content','param'=>array('path'=>'rules')),
			// End sample items for pages function.
		),
		'AccountLabel'		=> array(
			'AccountCreateHeading'		=> array('module' => 'account', 'action' => 'create'),
			'LoginTitle'			=> array('module' => 'account', 'action' => 'login'),
			'MyAccountLabel'	=> array('module' => 'account', 'action' => 'view'),
			'HistoryLabel'		=> array('module' => 'history'),
			'ServiceDeskLabel'	=> array('module' => 'servicedesk'),
			'LogoutTitle'		=> array('module' => 'account', 'action' => 'logout'),
		),
		'DonationsLabel'		=> array(
			'PurchaseLabel'		=> array('module' => 'purchase'),
			'DonateLabel'		=> array('module' => 'donate'),
		),
		'InformationLabel'	=> array(
			'ServerInfoLabel'	=> array('module' => 'server', 'action' => 'info'),
			'ServerStatusLabel'	=> array('module' => 'server', 'action' => 'status'),
			'WoeHoursLabel'		=> array('module' => 'woe'),
			'CastlesLabel'		=> array('module' => 'castle'),
			'WhosOnlineLabel'	=> array('module' => 'character', 'action' => 'online'),
			'MapStaticsLabel'=> array('module' => 'character', 'action' => 'mapstats'),
			'RankingInfoLabel'	=> array('module' => 'ranking', 'action' => 'character'),
			'VendingInfoLabel'	=> array('module' => 'vending'),
			'BuyingstoreInfoLabel'	=> array('module' => 'buyingstore'),
		),
		'DatabaseLabel'		=> array(
			'ItemDatabaseLabel'	=> array('module' => 'item'),
			'MobDatabaseLabel'	=> array('module' => 'monster'),
		),
		'SocialLabel'		=> array(
			'JoinUsInFacebookLabel'	=> array('exturl' => 'https://www.facebook.com/<change_me>'),
			'RateUsOnRMSLabel'		=> array('exturl' => '<link_to_RMS>'),
		),
		'Service Desk'	=> array(
			'ServiceDeskLabel'	=> array('module' => 'servicedesk', 'action' => 'staffindex'),
		),
		'Misc. Stuff'	=> array(
			'AccountLabel'		=> array('module' => 'account'),
			'CharacterLabel'	=> array('module' => 'character'),
			'CPLogsLabel'		=> array('module' => 'cplog'),
			'PagesLabel'		=> array('module' => 'pages'),
			'NewsLabel'			=> array('module' => 'news', 'action' => 'manage'),
			'GuildsLabel'		=> array('module' => 'guild'),
			'IPBanListLabel'	=> array('module' => 'ipban'),
			'rALogsLabel'		=> array('module' => 'logdata'),
			'ReInstallLabel'	=> array('module' => 'install', 'action' => 'reinstall'),
			'SendMailLabel'		=> array('module' => 'mail'),
			'WCTitleLabel'		=> array('module' => 'webcommands'),
			//'Auction'		=> array('module' => 'auction'),
			//'Economy'		=> array('module' => 'economy')
		)
	),

	// Sub-menu items that are displayed for any action belonging to a
	// particular module. The format it simple.
	'SubMenuItems'	=> array(
		'history'		=> array(
			'gamelogin'		=> 'Game Logins',
			'cplogin'		=> 'CP Logins',
			'emailchange'	=> 'E-Mail Changes',
			'passchange'	=> 'Password Changes',
			'passreset'		=> 'Password Resets'
		),
		'account'		=> array(
			'index'			=> 'List Accounts',
			'view'			=> 'View Account',
			'changepass'	=> 'Change Password',
			'changemail'	=> 'Change E-mail',
			'changesex'		=> 'Change Gender',
			'transfer'		=> 'Transfer Credits',
			'xferlog'		=> 'Credit Transfer History',
			'cart'			=> 'Go to Shopping Cart',
			'login'			=> 'Login',
			'create'		=> 'Register',
			'resetpass'		=> 'Reset Password',
			'resend'		=> 'Resend E-mail Confirmation'
		),
		'guild'			=> array(
			'index'			=> 'List Guilds',
			'export'		=> 'Export Guild Emblems'
		),
		'server'		=> array(
			'status'		=> 'View Status',
			'status-xml'	=> 'View Status as XML'
		),
		'logdata'		=> array(
			'branch'		=> 'Branches',
			'char'			=> 'Characters',
			'cashpoints'	=> 'CashPoints',
			'chat'			=> 'Chat Messages',
			'command'		=> 'Commands',
			'feeding'		=> 'Feeding',
			'inter'			=> 'Interactions',
			'pick'			=> 'Item Picks',
			'login'			=> 'Logins',
			'mvp'			=> 'MVP',
			'npc'			=> 'NPC',
			'zeny'			=> 'Zeny'
		),
		'cplog'			=> array(
			'paypal'		=> 'PayPal Transactions',
			'create'		=> 'Account Registrations',
			'login'			=> 'Logins',
			'resetpass'		=> 'Password Resets',
			'changepass'	=> 'Password Changes',
			'changemail'	=> 'E-mail Changes',
			'ban'			=> 'Account Bans',
			'ipban'			=> 'IP Bans'
		),
		'purchase'		=> array(
			'index'			=> 'Shop',
			'cart'			=> 'Go to Cart',
			'checkout'		=> 'Checkout',
			'clear'			=> 'Empty Cart',
			'pending'		=> 'Pending Redemption'
		),
		'donate'		=> array(
			'index'			=> 'Make a Donation',
			'history'		=> 'Donation History',
			'trusted'		=> 'Trusted PayPal E-mails'
		),
		'ipban'			=> array(
			'index'			=> 'IP Ban List',
			'add'			=> 'Add IP Ban'
		),
		'ranking'		=> array(
			'character'		=> 'Characters',
			'death'			=> 'Deaths',
			'alchemist'		=> 'Alchemists',
			'blacksmith'	=> 'Blacksmiths',
			'homunculus'	=> 'Homunculus',
			'mvp'			=> 'MVPs',
			'guild'			=> 'Guilds',
			'zeny'			=> 'Zeny'
		),
		'item'			=> array(
			'index'			=> 'List Items',
			'iteminfo'		=> 'Add Item Info',
		),
		'pages'			=> array(
			'index'			=> 'Manage Pages',
			'add'			=> 'Add New Page',
		),
		'news'			=> array(
			'index'			=> 'Latest News',
			'manage'			=> 'Manage',
			'add'			=> 'Add News',
		),
		'servicedesk'	=> array(
			'staffindex'	=> 'View Active',
			'staffviewclosed'=> 'View Closed',
			'staffsettings'	=> 'Staff Settings',
			'catcontrol'	=> 'Category Control',
		),
		'vending'			=> array(
			'index'			=> 'Vendors',
		),
		'buyingstore'		=> array(
			'index'			=> 'Buyers',
		),
	),

	'AllowMD5PasswordSearch'		=> false,
	'ReallyAllowMD5PasswordSearch'	=> false, // Are you POSITIVELY sure?

	// Specifies which modules and actions should be ignored by Tidy
	// (enabled/disabled by the OutputCleanHTML option).
	'TidyIgnore'	=> array(
		array('module' => 'captcha'),
		array('module' => 'guild', 'action' => 'emblem')
	),

	// Job classes, loaded from another file to avoid cluttering this one.
	// There isn't normally a need to modify this file, unless it's been
	// modified in an update. (In English: DON'T TOUCH THIS.)
	'JobClasses'					=> include('jobs.php'),

	// Alchemist job classes, mostly used for alchemist rankings.
	// Should be left alone unless new alchemist-related job classes are introduced.
	'AlchemistJobClasses'			=> include('jobs_alchemist.php'),

	// Blacksmith job classes, mostly used for blacksmith rankings.
	// Should be left alone unless new blacksmith-related job classes are introduced.
	'BlacksmithJobClasses'			=> include('jobs_blacksmith.php'),

	// Gender-linked Job class IDs and their corresponding names.
	// Should be left alone unless new gender-specific job classes are introduced.
	'GenderLinkedJobClasses'		=> include('jobs_gender_linked.php'),

	// Homunculus class IDs and their corresponding names.
	// Best not to mess with this either.
	'HomunClasses'					=> include('homunculus.php'),

	// Item Types with their corresponding names.
	// Shouldn't touch this either.
	'ItemTypes'						=> include('itemtypes.php'),

	// Item SubTypes with their corresponding names.
	// Shouldn't touch this either.
	'ItemSubTypes'					=> include('itemsubtypes.php'),

	// Common Equip Location Combinations with their corresponding names.
	// Shouldn't touch this unless you've added custom combinations.
	'EquipLocationCombinations'		=> include('equip_location_combinations.php'),

	// Error Code -> Error Type mapping.
	// Shouldn't need touching, however modifying loginerrors.php should be relatively safe.
	'LoginErrors'					=> include('loginerrors.php'),

	// rA equip jobs mapping.
	'EquipJobs'						=> include('equip_jobs.php'),

	// rA equip locations mapping.
	'EquipLocations'				=> include('equip_locations.php'),

	// rA equip upper mapping.
	'EquipUpper'					=> include('equip_upper.php'),

	// rA monster sizes mapping.
	'MonsterSizes'					=> include('sizes.php'),

	// rA monster races mapping.
	'MonsterRaces'					=> include('races.php'),

	// rA elements mapping.
	'Elements'						=> include('elements.php'),

	// rA attributes mapping.
	'Attributes'					=> include('attributes.php'),

	// rA monster modes mapping.
	'MonsterModes'					=> include('monstermode.php'),
	'MonsterAI'						=> include('monster_ai.php'),

	// Item shop categories.
	'ShopCategories'				=> include('shopcategories.php'),

	// Item pick and zeny log types.
	'PickTypes'						=> include('picktypes.php'),

	// Type of feeding
	'FeedingTypes'					=> include('feedingtypes.php'),

	// Castle names.
	'CastleNames'					=> include('castlenames.php'),

	// Trade restrictions.
	'TradeRestriction'				=> include('trade_restrictions.php'),

	// Item flags.
	'ItemFlags'						=> include('itemsflags.php'),

	// Item random options.
	'RandomOptions'					=> include('item_randoptions.php'),

	// DON'T TOUCH. THIS IS FOR DEVELOPERS.
	'FluxTables'		=> array(
		'CreditsTable'			=> 'cp_credits',
		'CreditTransferTable'	=> 'cp_xferlog',
		'ItemShopTable'			=> 'cp_itemshop',
		'TransactionTable'		=> 'cp_txnlog',
		'RedemptionTable'		=> 'cp_redeemlog',
		'AccountCreateTable'	=> 'cp_createlog',
		'AccountBanTable'		=> 'cp_banlog',
		'IpBanTable'			=> 'cp_ipbanlog',
		'DonationTrustTable'	=> 'cp_trusted',
		'AccountPrefsTable'		=> 'cp_loginprefs',
		'CharacterPrefsTable'	=> 'cp_charprefs',
		'ResetPasswordTable'	=> 'cp_resetpass',
		'ChangeEmailTable'		=> 'cp_emailchange',
		'LoginLogTable'			=> 'cp_loginlog',
		'ChangePasswordTable'	=> 'cp_pwchange',
		'OnlinePeakTable'		=> 'cp_onlinepeak',
		'CMSNewsTable'			=> 'cp_cmsnews',
		'CMSPagesTable'			=> 'cp_cmspages',
		'CMSSettingsTable'		=> 'cp_cmssettings',
		'ServiceDeskTable'		=> 'cp_servicedesk',
		'ServiceDeskATable'		=> 'cp_servicedeska',
		'ServiceDeskCatTable'	=> 'cp_servicedeskcat',
		'ServiceDeskSettingsTable'	=> 'cp_servicedesksettings',
		'WebCommandsTable'		=> 'cp_commands',
        'ItemDescTable'     	=> 'cp_itemdesc',
	)
);
?>


================================================
FILE: config/attributes.php
================================================
<?php
// rA attributes.
return array(
	1 => 'Ice',
	2 => 'Earth',
	3 => 'Fire',
	4 => 'Wind',
);
?>


================================================
FILE: config/cashshopcategories.php
================================================
<?php
// These are categories for the cash shop. Pay close attention to the numbers,
// as these numbers are stored in the database when you add an item to a specific
// category, so it knows which category the item belongs to.

// Keep in mind that different texture files will display different categories in-game.
// These are the same used in rAthena's db files.
return array(
	0 => 'New',
	1 => 'Hot',
	2 => 'Limited',
	3 => 'Rental',
	4 => 'Gear',
	5 => 'Buff',
	6 => 'Heal',
	7 => 'Other',
	8 => 'Sale'
);
?>


================================================
FILE: config/castlenames.php
================================================
<?php
// Commenting out a castle's entry will remove it from the castles page
// and exclude it from being a factor in the guild ranking.
return array(
	// iRO Names
	 0 => 'Neuschwanstein',
	 1 => 'Hohenschwangau',
	 2 => 'Nuenberg',
	 3 => 'Wuerzburg',
	 4 => 'Rothenburg',
	 5 => 'Repherion',
	 6 => 'Eeyolbriggar',
	 7 => 'Yesnelph',
	 8 => 'Bergel',
	 9 => 'Mersetzdeitz',
	10 => 'Bright Arbor',
	11 => 'Scarlet Palace',
	12 => 'Holy Shadow',
	13 => 'Sacred Altar',
	14 => 'Bamboo Grove Hill',
	15 => 'Kriemhild',
	16 => 'Swanhild',
	17 => 'Fadhgridh',
	18 => 'Skoegul',
	19 => 'Gondul',
	20 => 'Novice Aldebaran',
	21 => 'Novice Geffen',
	22 => 'Novice Payon',
	23 => 'Novice Prontera',
	24 => 'Himinn',
	25 => 'Andlangr',
	26 => 'Viblainn',
	27 => 'Hljod',
	28 => 'Skidbladnir',
	29 => 'Mardol',
	30 => 'Cyr',
	31 => 'Horn',
	32 => 'Gefn',
	33 => 'Bandis',
	34 => 'Leilah',
	35 => 'Pavianne',
	36 => 'Jasmine',
	37 => 'Roxie',
	38 => 'Curly Sue',
	39 => 'Gaebolg',
	40 => 'Richard',
	41 => 'Wigner',
	42 => 'Heine',
	43 => 'Nerious'
	// kRO Names
	/**
	 * 0 => 'Noisyubantian',
	 * 1 => 'Hohensyubangawoo',
	 * 2 => 'Nyirenverk',
	 * 3 => 'Byirtsburi',
	 * 4 => 'Rotenburk',
	 * 5 => 'Reprion',
	 * 6 => 'Yolbriger',
	 * 7 => 'Isinlife',
	 * 8 => 'Berigel',
	 * 9 => 'Melsedetsu',
	 *10 => 'Mingting',
	 *11 => 'Tiantan',
	 *12 => 'Fuying',
	 *13 => 'Honglou',
	 *14 => 'Zhulinxian',
	 *15 => 'Creamhilt',
	 *16 => 'Sbanhealt',
	 *17 => 'Lazrigees',
	 *18 => 'Squagul',
	 *19 => 'Guindull',
	 *20 => 'Novice Aldebaran',
	 *21 => 'Novice Geffen',
	 *22 => 'Novice Payon',
	 *23 => 'Novice Prontera',
	 *24 => 'Himinn',
	 *25 => 'Andlangr',
	 *26 => 'Viblainn',
	 *27 => 'Hljod',
	 *28 => 'Skidbladnir',
	 *29 => 'Mardol',
	 *30 => 'Cyr',
	 *31 => 'Horn',
	 *32 => 'Gefn',
	 *33 => 'Bandis',
	 *34 => 'Kafragarten 1',
	 *35 => 'Kafragarten 2',
	 *36 => 'Kafragarten 3',
	 *37 => 'Kafragarten 4',
	 *38 => 'Kafragarten 5',
	 *39 => 'Gloria 1',
	 *40 => 'Gloria 2',
	 *41 => 'Gloria 3',
	 *42 => 'Gloria 4',
	 *43 => 'Gloria 5'
	 */
)
?>


================================================
FILE: config/elements.php
================================================
<?php
// rA elements.
return array(
	'Neutral' => 'Neutral',
	'Water' => 'Water',
	'Earth' => 'Earth',
	'Fire' => 'Fire',
	'Wind' => 'Wind',
	'Poison' => 'Poison',
	'Holy' => 'Holy',
	'Dark' => 'Dark',
	'Ghost' => 'Ghost',
	'Undead' => 'Undead'
);
?>


================================================
FILE: config/equip_jobs.php
================================================
<?php
return array(
	0	=>	// Default job list
	array(
		'job_all' => 'All jobs',
		'job_novice' => 'Novice',
		'job_supernovice' => 'Super novice',
		'job_swordman' => 'Swordman',
		'job_mage' => 'Mage',
		'job_archer' => 'Archer',
		'job_acolyte' => 'Acolyte',
		'job_merchant' => 'Merchant',
		'job_thief' => 'Thief',
		'job_knight' => 'Knight',
		'job_priest' => 'Priest',
		'job_wizard' => 'Wizard',
		'job_blacksmith' => 'Blacksmith',
		'job_hunter' => 'Hunter',
		'job_assassin' => 'Assassin',
		'job_crusader' => 'Crusader',
		'job_monk' => 'Monk',
		'job_sage' => 'Sage',
		'job_rogue' => 'Rogue',
		'job_alchemist' => 'Alchemist',
		'job_barddancer' => 'Bard / Dancer',
		'job_taekwon' => 'Taekwon',
		'job_stargladiator' => 'Star Gladiator',
		'job_soullinker' => 'Soul Linker',
		'job_gunslinger' => 'Gunslinger',
		'job_ninja' => 'Ninja',
	),
	1	=>	// Renewal job list
	array(
		'job_kagerouoboro' => 'Kagerou / Oboro',
		'job_rebellion' => 'Rebellion',
		'job_summoner' => 'Summoner'
	)
)
?>


================================================
FILE: config/equip_location_combinations.php
================================================
<?php
return array(
	'location_left_hand/location_right_hand'	=> 'Two-Handed',
	'location_head_low/location_head_mid/location_head_top'		=> 'Upper/Mid/Lower Headgear',
	'location_head_mid/location_head_top'		=> 'Upper/Mid Headgear',
	'location_head_top/location_head_low'		=> 'Upper/Lower Headgear',
	'location_head_low/location_head_mid'		=> 'Mid/Lower Headgear',
	'location_head_low/location_head_top'		=> 'Upper/Lower Headgear',
	'location_costume_head_mid/location_costume_head_top'		=> 'Costume Upper/Mid Headgear',
	'location_costume_head_low/location_costume_head_top'		=> 'Costume Upper/Lower Headgear',
	'location_costume_head_low/location_costume_head_mid'		=> 'Costume Mid/Lower Headgear',
	'location_costume_head_low/location_costume_head_mid/location_costume_head_top'	=> 'Costume Upper/Mid/Lower Headgear',
	'location_left_accessory/location_right_accessory'	=> 'Accessory Left/Right',
	'location_armor/location_garment/location_head_low/location_head_mid/location_head_top/location_left_accessory/location_left_hand/location_right_accessory/location_right_hand/location_shoes'	=> 'All equip',
)
?>


================================================
FILE: config/equip_locations.php
================================================
<?php
return array(
	'location_head_low'					=> 'Lower Headgear',
	'location_right_hand'				=> 'Main Hand',
	'location_garment'					=> 'Garment',
	'location_right_accessory'			=> 'Accessory Right',
	'location_armor'					=> 'Armor',
	'location_left_hand'				=> 'Off Hand',
	'location_shoes'					=> 'Footgear',
	'location_left_accessory'			=> 'Accessory Left',
	'location_head_top'					=> 'Upper Headgear',
	'location_head_mid'					=> 'Middle Headgear',
	'location_costume_head_top'			=> 'Costume Top Headgear',
	'location_costume_head_mid'			=> 'Costume Mid Headgear',
	'location_costume_head_low'			=> 'Costume Low Headgear',
	'location_costume_garment'			=> 'Costume Garment',
	'location_ammo'						=> 'Ammo',
	'location_shadow_armor'				=> 'Shadow Armor',
	'location_shadow_weapon'			=> 'Shadow Weapon',
	'location_shadow_shield'			=> 'Shadow Shield',
	'location_shadow_shoes'				=> 'Shadow Shoes',
	'location_shadow_right_accessory'	=> 'Shadow Accessory Right (Earring)',
	'location_shadow_left_accessory'	=> 'Shadow Accessory Left (Pendant)',
)
?>


================================================
FILE: config/equip_upper.php
================================================
<?php
return array(
	0	=>	// Default class list
	array(
		'class_all' => 'All classes',
		'class_normal' => 'Normal',
		'class_upper' => 'Upper',
		'class_baby' => 'Baby'
	),
	1	=>	// Renewal class list
	array(
		'class_third' => 'Third',
		'class_third_upper' => 'Third Upper',
		'class_third_baby' => 'Third Baby'
	)
)
?>


================================================
FILE: config/error.php
================================================
<?php
// Configuration information for critical error handling.
// Critical errors are exposed due to an exception in the program.

// Setting $showExceptions to true will cause not only exceptions to be displayed
// but also the backtrace, which can result in security issues such as exposing
// your MySQL user and password when unable to connect. Please keep it at false
// in a production environment.

$adminEmail      = 'admin@localhost'; // Administrator e-mail address.
$errorFile       = 'error.php';       // Error file to render.
$showExceptions  = true;              // Whether or not to show exceptions (only applies to error.php)
?>


================================================
FILE: config/feedingtypes.php
================================================
<?php
return array(
    'P' => 'Pet',
    'H' => 'Homunculus',
    'O' => 'Other',
);


================================================
FILE: config/groups.php
================================================
<?php
final class AccountLevel {
/*	Corresponds to the different 'level' attribrutes */
	const ANYONE =   -2;
	const UNAUTH =   -1;
	const NORMAL =    0;
	const LOWGM  =    1;
	const HIGHGM =    2;
	const ADMIN  =   99;
	const NOONE  = 9999;
	
	private static $groups = array(
/**
 *	Syntax:
 * 		<group_id> => array(
 *			'name'  => "<group name>",
 *			'level' => "<group level>",
 * 		),
 */
		0 => array(
			'name'  => "Player",
			'level' => AccountLevel::NORMAL
		),
		1 => array(
			'name'  => "Super Player",
			'level' => AccountLevel::NORMAL
		),
		2 => array(
			'name'  => "Support",
			'level' => AccountLevel::LOWGM
		),
		3 => array(
			'name'  => "Script Manager",
			'level' => AccountLevel::LOWGM
		),
		4 => array(
			'name'  => "Event Manager",
			'level' => AccountLevel::LOWGM
		),
		5 => array(
			'name'  => "VIP",
			'level' => AccountLevel::NORMAL
		),
		10 => array(
			'name'  => "Law Enforcement",
			'level' => AccountLevel::HIGHGM
		),
		99 => array(
			'name'  => "Admin",
			'level' => AccountLevel::ADMIN
		)
	);

	// DON'T TOUCH ANYTHING BELOW. THIS IS FOR DEVELOPERS.
	
	/**
	 * Get array of all groups.
	 *
	 * @return array
	 * @access public
	 */
   public static function getArray() {
        return self::$groups;
    }
	
	/**
	 * Get array of group IDs that satisfy the operation 
	 * condition that compares the group level.
	 *
	 * @param int $compare
	 * @param string $op
	 * @return array
	 * @access public
	 */
    public static function getGroupID($compare, $op) {
		$group_id = array();
		foreach(self::$groups as $id => $group) {
			if( ($op == '<' && $group['level'] < $compare) || ($op == '>' && $group['level'] > $compare) ||
				($op == '<=' && $group['level'] <= $compare) || ($op == '>=' && $group['level'] >= $compare)) {
				array_push($group_id, $id);
			}
		}
        return $group_id;
    }
	
	/**
	 * Get the level associated with the group ID.
	 *
	 * @param int $group_id
	 * @return int
	 * @access public
	 */
    public static function getGroupLevel($group_id) {
		if(isset(self::$groups[$group_id]['level'])) {
			return self::$groups[$group_id]['level'];
		}
		else {
			return AccountLevel::NORMAL;
		}
    }
	
	/**
	 * Get the name associated with the group ID.
	 *
	 * @param int $group_id
	 * @return string
	 * @access public
	 */
    public static function getGroupName($group_id) {
		if(isset(self::$groups[$group_id]['name'])) {
			return self::$groups[$group_id]['name'];
		}
		else {
			return "N/A";
		}
    }
}
?>


================================================
FILE: config/homunculus.php
================================================
<?php
return array(
	// Lif
	6001 => 'Lif',
	6009 => 'Lif',
	6005 => 'Lif',
	6013 => 'Lif',
	
	// Amistr
	6002 => 'Amistr',
	6010 => 'Amistr',
	6006 => 'Amistr',
	6014 => 'Amistr',
	
	// Filir
	6003 => 'Filir',
	6011 => 'Filir',
	6007 => 'Filir',
	6015 => 'Filir',
	
	// Vanilmirth
	6004 => 'Vanilmirth',
	6012 => 'Vanilmirth',
	6008 => 'Vanilmirth',
	6016 => 'Vanilmirth',
	
	// Homunculus S
	6048 => 'Eira',
	6049 => 'Bayeri',
	6050 => 'Sera',
	6051 => 'Dieter',
	6052 => 'Elanor'
);
?>


================================================
FILE: config/item_randoptions.php
================================================
<?php
return array(
	1	=>	'MaxHP +%s',
	2	=>	'MaxSP +%s',
	3	=>	'STR +%s',
	4	=>	'AGI +%s',
	5	=>	'VIT +%s',
	6	=>	'INT +%s',
	7	=>	'DEX +%s',
	8	=>	'LUK +%s',
	9	=>	'MaxHP +%s%%',
	10	=>	'MaxSP +%s%%',
	11	=>	'HP regen +%s%%',
	12	=>	'SP regen +%s%%',
	13	=>	'ATK +%s%%',
	14	=>	'MATK +%s%%',
	15	=>	'ASPD +%s',
	16	=>	'Delay after attack -%s%%',
	17	=>	'ATK +%s',
	18	=>	'HIT +%s',
	19	=>	'MATK +%s',
	20	=>	'DEF +%s',
	21	=>	'MDEF +%s',
	22	=>	'FLEE +%s',
	23	=>	'Perfect dodge +%s',
	24	=>	'CRIT +%s',
	25	=>	'Neutral elemental resistance +%s%%',
	26	=>	'Water elemental resistance +%s%%',
	27	=>	'Earth elemental resistance +%s%%',
	28	=>	'Fire elemental resistance +%s%%',
	29	=>	'Wind elemental resistance +%s%%',
	30	=>	'Poison elemental resistance +%s%%',
	31	=>	'Holy elemental resistance +%s%%',
	32	=>	'Shadow elemental resistance +%s%%',
	33	=>	'Ghost elemental resistance +%s%%',
	34	=>	'Undead elemental resistance +%s%%',
	35	=>	'All elementals resistance +%s%%',
	36	=>	'Neutral monster resistance +%s%%',
	37	=>	'ATK +%s%% against Neutral monster',
	38	=>	'Water monster resistance +%s%%',
	39	=>	'ATK +%s%% against Water monster',
	40	=>	'Earth monster resistance +%s%%',
	41	=>	'ATK +%s%% against Earth monster',
	42	=>	'Fire monster resistance +%s%%',
	43	=>	'ATK +%s%% against Fire monster',
	44	=>	'Wind monster resistance +%s%%',
	45	=>	'ATK +%s%% against Wind monster',
	46	=>	'Poison monster resistance +%s%%',
	47	=>	'ATK +%s%% against Poison monster',
	48	=>	'Holy monster resistance +%s%%',
	49	=>	'ATK +%s%% against Holy monster',
	50	=>	'Shadow monster resistance +%s%%',
	51	=>	'ATK +%s%% against Shadow monster',
	52	=>	'Ghost monster resistance +%s%%',
	53	=>	'ATK +%s%% against Ghost monster',
	54	=>	'Undead monster resistance +%s%%',
	55	=>	'ATK +%s%% against Undead monster',
	56	=>	'Neutral monster magic resistance +%s%%',
	57	=>	'MATK +%s%% against Neutral monster',
	58	=>	'Water monster magic resistance +%s%%',
	59	=>	'MATK +%s%% against Water monster',
	60	=>	'Earth monster magic resistance +%s%%',
	61	=>	'MATK +%s%% against  Earth monster',
	62	=>	'Fire monster magic resistance +%s%%',
	63	=>	'MATK +%s%% against Fire monster',
	64	=>	'Wind monster magic resistance +%s%%',
	65	=>	'MATK +%s%% against Wind monster',
	66	=>	'Poison monster magic resistance +%s%%',
	67	=>	'MATK +%s%% against Poison monster',
	68	=>	'Holy monster magic resistance +%s%%',
	69	=>	'MATK +%s%% against Holy monster',
	70	=>	'Shadow monster magic resistance +%s%%',
	71	=>	'MATK +%s%% against Shadow monster',
	72	=>	'Ghost monster magic resistance +%s%%',
	73	=>	'MATK +%s%% against Ghost monster',
	74	=>	'Undead monster magic resistance +%s%%',
	75	=>	'MATK +%s%% against Undead monster',
	76	=>	'Armor element: Neutral',
	77	=>	'Armor element: Water',
	78	=>	'Armor element: Earth',
	79	=>	'Armor element: Fire',
	80	=>	'Armor element: Wind',
	81	=>	'Armor element: Poison',
	82	=>	'Armor element: Holy',
	83	=>	'Armor element: Shadow',
	84	=>	'Armor element: Ghost',
	85	=>	'Armor element: Undead',
	//86	=>	'',
	87	=>	'Formless monster resistance +%s%%',
	88	=>	'Undead monster resistance +%s%%',
	89	=>	'Brute monster resistance +%s%%',
	90	=>	'Plant monster resistance +%s%%',
	91	=>	'Insect monster resistance +%s%%',
	92	=>	'Fish monster resistance +%s%%',
	93	=>	'Demon monster resistance +%s%%',
	94	=>	'Demihuman monster resistance +%s%%',
	95	=>	'Angel monster resistance +%s%%',
	96	=>	'Dragon monster resistance +%s%%',
	97	=>	'ATK +%s%% against Formless monster',
	98	=>	'ATK +%s%% against Undead monster',
	99	=>	'ATK +%s%% against Brute monster',
	100	=>	'ATK +%s%% against Plant monster',
	101	=>	'ATK +%s%% against Insect monster',
	102	=>	'ATK +%s%% against Fish monster',
	103	=>	'ATK +%s%% against Demon monster',
	104	=>	'ATK +%s%% against Demihuman monster',
	105	=>	'ATK +%s%% against Angel monster',
	106	=>	'ATK +%s%% against Dragon monster',
	107	=>	'MATK +%s%% against Formless monster',
	108	=>	'MATK +%s%% against Undead monster',
	109	=>	'MATK +%s%% against Brute monster',
	110	=>	'MATK +%s%% against Plant monster',
	111	=>	'MATK +%s%% against Insect monster',
	112	=>	'MATK +%s%% against Fish monster',
	113	=>	'MATK +%s%% against Devil monster',
	114	=>	'MATK +%s%% against Demihuman monster',
	115	=>	'MATK +%s%% against Angel monster',
	116	=>	'MATK +%s%% against Dragon monster',
	117	=>	'CRIT +%s against Formless monster',
	118	=>	'CRIT +%s against Undead monster',
	119	=>	'CRIT +%s against Brute monster',
	120	=>	'CRIT +%s against Plant monster',
	121	=>	'CRIT +%s against Insect monster',
	122	=>	'CRIT +%s against Fish monster',
	123	=>	'CRIT +%s against Demon monster',
	124	=>	'CRIT +%s against Demihuman monster',
	125	=>	'CRIT +%s against Angel monster',
	126	=>	'CRIT +%s against Dragon monster',
	127	=>	'Pierces %s%% DEF of Formless monster',
	128	=>	'Pierces %s%% DEF of Undead monster',
	129	=>	'Pierces %s%% DEF of Brute monster',
	130	=>	'Pierces %s%% DEF of Plant monster',
	131	=>	'Pierces %s%% DEF of Insect monster',
	132	=>	'Pierces %s%% DEF of Fish monster',
	133	=>	'Pierces %s%% DEF of Demon monster',
	134	=>	'Pierces %s%% DEF of Demihuman monster',
	135	=>	'Pierces %s%% DEF of Angel monster',
	136	=>	'Pierces %s%% DEF of Dragon monster',
	137	=>	'Pierces %s%% MDEF of Formless monster',
	138	=>	'Pierces %s%% MDEF of Undead monster',
	139	=>	'Pierces %s%% MDEF of Brute monster',
	140	=>	'Pierces %s%% MDEF of Plant monster',
	141	=>	'Pierces %s%% MDEF of Insect monster',
	142	=>	'Pierces %s%% MDEF of Fish monster',
	143	=>	'Pierces %s%% MDEF of Demon monster',
	144	=>	'Pierces %s%% MDEF of Demihuman monster',
	145	=>	'Pierces %s%% MDEF of Angel monster',
	146	=>	'Pierces %s%% MDEF of Dragon monster',
	147	=>	'ATK +%s%% against Normal monster',
	148	=>	'ATK +%s%% against Boss monster',
	149	=>	'Normal monster resistance +%s%%',
	150	=>	'Boss monster resistance +%s%%',
	151	=>	'MATK +%s%% against Normal monster',
	152	=>	'MATK +%s%% against Boss monster',
	153	=>	'Pierces %s%% DEF of Normal monster',
	154	=>	'Pierces %s%% DEF of Boss monster',
	155	=>	'Pierces %s%% MDEF of Normal monster',
	156	=>	'Pierces %s%% MDEF of Boss monster',
	157	=>	'ATK +%s%% against Small size monster',
	158	=>	'ATK +%s%% against Medium size monster',
	159	=>	'ATK +%s%% against Large size monster',
	160	=>	'Small monster resistance +%s%%',
	161	=>	'Medium monster resistance +%s%%',
	162	=>	'Large monster resistance +%s%%',
	163	=>	'Nullify weapon\'s damage size penalty',
	164	=>	'Critical attack +%s%%',
	165	=>	'Critical damage -%s%%',
	166	=>	'Long range physical attack +%s%%',
	167	=>	'Long range physical damage -%s%%',
	168	=>	'Healing skills +%s%%',
	169	=>	'Restoration gained from Healing skills +%s%%',
	170	=>	'Variable cast time -%s%%',
	171	=>	'After cast delay -%s%%',
	172	=>	'Reduces SP cost by %s%%',
	//173	=>	'',
	//174	=>	'',
	175	=>	'Weapon element: Neutral',
	176	=>	'Weapon element: Water',
	177	=>	'Weapon element: Earth',
	178	=>	'Weapon element: Fire',
	179	=>	'Weapon element: Wind',
	180	=>	'Weapon element: Poison',
	181	=>	'Weapon element: Holy',
	182	=>	'Weapon element: Shadow',
	183	=>	'Weapon element: Ghost',
	184	=>	'Weapon element: Undead',
	185	=>	'Indestructible in battle',
	186	=>	'Indestructible in battle',
	187	=>	'MATK against Small size monster +%s%%',
	188	=>	'MATK against Medium size monster +%s%%',
	189	=>	'MATK against Large size monster +%s%%',
	190	=>	'Small monster magic resistance +%s%%',
	191	=>	'Medium monster magic resistance +%s%%',
	192	=>	'Large monster magic resistance +%s%%',
	193	=>	'Elemental attacks resistance +%s%%',
	194	=>	'Formless monster resistance +%s%%',
	195	=>	'Undead monster resistance +%s%%',
	196	=>	'Brute monster resistance +%s%%',
	197	=>	'Plant monster resistance +%s%%',
	198	=>	'Insect monster resistance +%s%%',
	199	=>	'Fish monster resistance +%s%%',
	200	=>	'Demon monster resistance +%s%%',
	201	=>	'Demihuman monster resistance +%s%%',
	202	=>	'Angel monster resistance +%s%%',
	203	=>	'Dragon monster resistance +%s%%',
	204	=>	'Long range physical attack +%s%%',
	205	=>	'Long range physical damage -%s%%',
	206	=>	'Demi-Human players resistance + %s%%',
	207	=>	'Doram players resistance +%s%%',
	208	=>	'ATK against Demi-Human players +%s%%',
	209	=>	'ATK against Doram players +%s%%',
	210	=>	'MATK against Demi-Human players +%s%%',
	211	=>	'MATK against Doram players +%s%%',
	212	=>	'Critical +%s for Demi-Human players',
	213	=>	'Critical +%s for Doram players',
	214	=>	'Pierces %s%% DEF of Demi-Human players',
	215	=>	'Pierces %s%% DEF of Doram players',
	216	=>	'Pierces %s%% MDEF of Demi-Human players',
	217	=>	'Pierces %s%% MDEF of Doram players',
	218	=>	'Recieved reflected damage -%s%%',
	219	=>	'Melee physical damage +%s%%',
	220	=>	'Melee physical damage -%s%%',
	)
?>


================================================
FILE: config/itemsflags.php
================================================
<?php
return array(
	'flag_buyingstore'	=> 'Item is available to Buying Stores',
	'flag_deadbranch'	=> 'Item is a Dead Branch type',
	'flag_container'	=> 'Item is part of a Container',
	'flag_uniqueid'		=> 'Item is a unique stack',
	'flag_bindonequip'	=> 'Item is bound to the character upon equipping',
	'flag_dropannounce'	=> 'Item has a special announcement to self on drop',
	'flag_noconsume'	=> 'Item is consumed on use',
)
?>


================================================
FILE: config/itemsubtypes.php
================================================
<?php
return array(
	'weapon' => array(
		'1haxe'			=> 'One-Handed Axe',
		'1hspear'		=> 'One-Handed Spear',
		'1hsword'		=> 'One-Handed Sword',
		'2haxe'			=> 'Two-Handed Axe',
		'2hspear'		=> 'Two-Handed Spear',
		'2hstaff'		=> 'Two-Handed Staff',
		'2hsword'		=> 'Two-Handed Sword',
		'book'			=> 'Book',
		'bow'			=> 'Bow',
		'dagger'		=> 'Dagger',
		'gatling'		=> 'Gatling Gun',
		'grenade'		=> 'Grenade Launcher',
		'huuma'			=> 'Fuuma Shuriken',
		'katar'			=> 'Katar',
		'knuckle'		=> 'Knuckle',
		'mace'			=> 'Mace',
		'musical'		=> 'Musical Instrument',
		'revolver'		=> 'Revolver',
		'rifle'			=> 'Rifle',
		'shotgun'		=> 'Shotgun',
		'staff'			=> 'Staff',
		'whip'			=> 'Whip'
	),
	'ammo' => array(
		'arrow'			=> 'Arrow',
		'bullet'		=> 'Bullet',
		'dagger'		=> 'Throwing Dagger',
		'cannonball'	=> 'Cannonball',
		'grenade'		=> 'Grenade',
		'kunai'			=> 'Kunai',
		'shell'			=> 'Shell',
		'shuriken'		=> 'Shuriken',
		'throwweapon'	=> 'Throwable Item (Sling Item)'
	),
	'card' => array(
		'normal'			=> 'Card',
		'enchant'			=> 'Enchant'
	)
)
?>

================================================
FILE: config/itemtypes.php
================================================
<?php
return array(
	'ammo'			=> 'Ammo',
	'armor'			=> 'Armor',
	'card'			=> 'Card',
	'cash'			=> 'Cash Shop Reward',
	'delayconsume'	=> 'Delay Consume',
	'etc'			=> 'Etc',
	'healing'		=> 'Healing',
	'petarmor'		=> 'Pet Armor',
	'petegg'		=> 'Pet Egg',
	'shadowgear'	=> 'Shadow Equipment',
	'usable'		=> 'Usable',
	'weapon'		=> 'Weapon'
)
?>


================================================
FILE: config/jobs.php
================================================
<?php
return array(
	0    => 'Novice',
	1    => 'Swordsman',
	2    => 'Mage',
	3    => 'Archer',
	4    => 'Acolyte',
	5    => 'Merchant',
	6    => 'Thief',
	7    => 'Knight',
	8    => 'Priest',
	9    => 'Wizard',
	10   => 'Blacksmith',
	11   => 'Hunter',
	12   => 'Assassin',
	//13   => 'Knight (Mounted)',
	14   => 'Crusader',
	15   => 'Monk',
	16   => 'Sage',
	17   => 'Rogue',
	18   => 'Alchemist',
	19   => 'Bard',
	20   => 'Dancer',
	//21   => 'Crusader (Mounted)',
	22   => 'Wedding',
	23   => 'Super Novice',
	24   => 'Gunslinger',
	25   => 'Ninja',
	26   => 'Xmas',
	27   => 'Summer',
	28   => 'Hanbok',
	29   => 'Oktoberfest',

	4001 => 'High Novice',
	4002 => 'High Swordsman',
	4003 => 'High Mage',
	4004 => 'High Archer',
	4005 => 'High Acolyte',
	4006 => 'High Merchant',
	4007 => 'High Thief',
	4008 => 'Lord Knight',
	4009 => 'High Priest',
	4010 => 'High Wizard',
	4011 => 'Whitesmith',
	4012 => 'Sniper',
	4013 => 'Assassin Cross',
	//4014 => 'Lord Knight (Mounted)',
	4015 => 'Paladin',
	4016 => 'Champion',
	4017 => 'Professor',
	4018 => 'Stalker',
	4019 => 'Creator',
	4020 => 'Clown',
	4021 => 'Gypsy',
	//4022 => 'Paladin (Mounted)',

	4023 => 'Baby',
	4024 => 'Baby Swordsman',
	4025 => 'Baby Mage',
	4026 => 'Baby Archer',
	4027 => 'Baby Acolyte',
	4028 => 'Baby Merchant',
	4029 => 'Baby Thief',
	4030 => 'Baby Knight',
	4031 => 'Baby Priest',
	4032 => 'Baby Wizard',
	4033 => 'Baby Blacksmith',
	4034 => 'Baby Hunter',
	4035 => 'Baby Assassin',
	//4036 => 'Baby Knight (Mounted)',
	4037 => 'Baby Crusader',
	4038 => 'Baby Monk',
	4039 => 'Baby Sage',
	4040 => 'Baby Rogue',
	4041 => 'Baby Alchemist',
	4042 => 'Baby Bard',
	4043 => 'Baby Dancer',
	//4044 => 'Baby Crusader (Mounted)',
	4045 => 'Super Baby',
    
	4046 => 'Taekwon',
	4047 => 'Star Gladiator',
	//4048 => 'Star Gladiator (Flying)',
	4049 => 'Soul Linker',

	4050 => 'Jiang Shi',
	4051 => 'Death Knight',
	4052 => 'Dark Collector',

	4054 => 'Rune Knight',
	4055 => 'Warlock',
	4056 => 'Ranger',
	4057 => 'Arch Bishop',
	4058 => 'Mechanic',
	4059 => 'Guillotine Cross',
	4060 => 'Rune Knight+',
	4061 => 'Warlock+',
	4062 => 'Ranger+',
	4063 => 'Arch Bishop+',
	4064 => 'Mechanic+',
	4065 => 'Guillotine Cross+',
	4066 => 'Royal Guard',
	4067 => 'Sorcerer',
	4068 => 'Minstrel',
	4069 => 'Wanderer',
	4070 => 'Sura',
	4071 => 'Genetic',
	4072 => 'Shadow Chaser',
	4073 => 'Royal Guard+',
	4074 => 'Sorcerer+',
	4075 => 'Minstrel+',
	4076 => 'Wanderer+',
	4077 => 'Sura+',
	4078 => 'Genetic+',
	4079 => 'Shadow Chaser+',

	//4080 => 'Rune Knight (Mounted)',
	//4081 => 'Rune Knight+ (Mounted)',
	//4082 => 'Royal Guard (Mounted)',
	//4083 => 'Royal Guard+ (Mounted)',
	//4084 => 'Ranger (Mounted)',
	//4085 => 'Ranger+ (Mounted)',
	//4086 => 'Mechanic (Magic Gear)',
	//4087 => 'Mechanic+ (Magic Gear)',

	4096 => 'Baby Rune Knight',
	4097 => 'Baby Warlock',
	4098 => 'Baby Ranger',
	4099 => 'Baby Arch Bishop',
	4100 => 'Baby Mechanic',
	4101 => 'Baby Guillotine Cross',
	4102 => 'Baby Royal Guard',
	4103 => 'Baby Sorcerer',
	4104 => 'Baby Minstrel',
	4105 => 'Baby Wanderer',
	4106 => 'Baby Sura',
	4107 => 'Baby Genetic',
	4108 => 'Baby Shadow Chaser',
	
	//4109 => 'Baby Rune Knight (Mounted)',
	//4110 => 'Baby Royal Guard (Mounted)',
	//4111 => 'Baby Ranger (Mounted)',
	//4112 => 'Baby Mechanic (Magic Gear)',
	
	4190 => 'Expanded Super Novice',
	4191 => 'Expanded Super Baby',
	
	4211 => 'Kagerou',
	4212 => 'Oboro',
	
	4215 => 'Rebellion',
	4218 => 'Summoner',

	4220 => 'Baby Summoner',
	4222 => 'Baby Ninja',
	4223 => 'Baby Kagero',
	4224 => 'Baby Oboro',
	4225 => 'Baby Taekwon',
	4226 => 'Baby Star Gladiator',
	4227 => 'Baby Soul Linker',
	4228 => 'Baby Gunslinger',
	4229 => 'Baby Rebellion',
	//4238 => 'Baby Star Gladiator (Union)',
	
	//4238 => 'Baby Star Glad (Union)',
	4239 => 'Star Emperor',
	4240 => 'Soul Reaper',
	4241 => 'Baby Star Emperor',
	4242 => 'Baby Soul Reaper',

	4252 => 'Dragon Knight',
	4253 => 'Meister',
	4254 => 'Shadow Cross',
	4255 => 'Arch Mage',
	4256 => 'Cardinal',
	4257 => 'WindHawk',
	4258 => 'Imperial Guard',
	4259 => 'Biolo',
	4260 => 'Abyss Chaser',
	4261 => 'Elemental Master',
	4262 => 'Inquisitor',
	4263 => 'Troubadour',
	4264 => 'Trouvere',

	//4278 => 'Windhawk (Mounted)',
	//4279 => 'Meister (Mounted)',
	//4280 => 'Dragon Knight (Mounted)',
	//4281 => 'Imperial Guard (Mounted)',

	4302 => 'Sky Emperor',
	4303 => 'Soul Ascetic',
	4304 => 'Shinkiro',
	4305 => 'Shiranui',
	4306 => 'Night Watch',
	4307 => 'Hyper Novice',
	4308 => 'Spirit Handler',
    
	//4316 => 'Sky Emperor (Mounted)',
    
)
?>


================================================
FILE: config/jobs_alchemist.php
================================================
<?php
return array(
	18   => 'Alchemist',
	4019 => 'Creator',
	4041 => 'Baby Alchemist',
	4071 => 'Genetic',
	4078 => 'Genetic+',
	4107 => 'Baby Genetic',
	4259 => 'Biolo'
)
?>


================================================
FILE: config/jobs_blacksmith.php
================================================
<?php
return array(
	10   => 'Blacksmith',
	4011 => 'Whitesmith',
	4033 => 'Baby Blacksmith',
	4058 => 'Mechanic',
	4064 => 'Mechanic+',
	4100 => 'Baby Mechanic',
	4253 => 'Meister'
)
?>


================================================
FILE: config/jobs_gender_linked.php
================================================
<?php
return array(
	19   => 'Bard',
	20   => 'Dancer',
	4020 => 'Clown',
	4021 => 'Gypsy',
	4042 => 'Baby Bard',
	4043 => 'Baby Dancer',
	4068 => 'Minstrel',
	4069 => 'Wanderer',
	4075 => 'Minstrel+',
	4076 => 'Wanderer+',
	4104 => 'Baby Minstrel',
	4105 => 'Baby Wanderer',
	4211 => 'Kagerou',
	4212 => 'Oboro',
	4223 => 'Baby Kagerou',
	4224 => 'Baby Oboro',
	4263 => 'Troubadour',
	4264 => 'Trouvere'
)
?>


================================================
FILE: config/loginerrors.php
================================================
<?php
return array(
	0 => 'Unexpected Error',
	1 => 'Invalid Server',
	2 => 'Invalid Credentials',
	3 => 'Temporarily Banned',
	4 => 'Permanently Banned',
	5 => 'IP Banned',
	6 => 'Invalid Security Code',
	7 => 'Pending Confirmation'
)
?>


================================================
FILE: config/monster_ai.php
================================================
<?php
return array(
	'01'			=> array('mode_canattack', 'mode_canmove'),
	'02'			=> array('mode_canattack', 'mode_looter', 'mode_canmove'),
	'03'			=> array('mode_changetargetmelee', 'mode_canattack', 'mode_assist', 'mode_canmove'),
	'04'			=> array('mode_changetargetchase', 'mode_changetargetmelee', 'mode_angry', 'mode_canattack', 'mode_aggressive', 'mode_canmove'),
	'05'			=> array('mode_changetargetchase', 'mode_canattack', 'mode_aggressive', 'mode_canmove'),
	'06'			=> array(),
	'07'			=> array('mode_changetargetmelee', 'mode_canattack', 'mode_assist', 'mode_looter', 'mode_canmove'),
	'08'			=> array('mode_targetweak', 'mode_changetargetchase', 'mode_changetargetmelee', 'mode_canattack', 'mode_aggressive', 'mode_canmove'),
	'09'			=> array('mode_changetargetchase', 'mode_changetargetmelee', 'mode_canattack', 'mode_castsensoridle', 'mode_aggressive', 'mode_canmove'),
	'10'			=> array('mode_canattack', 'mode_aggressive'),
	'11'			=> array('mode_canattack', 'mode_aggressive'),
	'12'			=> array('mode_changetargetchase', 'mode_canattack', 'mode_aggressive', 'mode_canmove'),
	'13'			=> array('mode_changetargetchase', 'mode_changetargetmelee', 'mode_canattack', 'mode_assist', 'mode_aggressive', 'mode_canmove'),
	//14			=> array(),
	//15			=> array(),
	//16			=> array(),
	'17'			=> array('mode_canattack', 'mode_castsensoridle', 'mode_canmove'),
	//18			=> array(),
	'19'			=> array('mode_changetargetchase', 'mode_changetargetmelee', 'mode_canattack', 'mode_castsensoridle', 'mode_aggressive', 'mode_canmove'),
	'20'			=> array('mode_changetargetchase', 'mode_changetargetmelee', 'mode_castsensorchase', 'mode_canattack', 'mode_castsensoridle', 'mode_aggressive', 'mode_canmove'),
	'21'			=> array('mode_changetargetchase', 'mode_changetargetmelee', 'mode_changechase', 'mode_castsensorchase', 'mode_canattack', 'mode_castsensoridle', 'mode_aggressive', 'mode_canmove'),
	//22			=> array(),
	//23			=> array(),
	'24'			=> array('mode_canattack', 'mode_norandomwalk', 'mode_canmove'),
	'25'			=> array('mode_canmove'),
	'26'			=> array('mode_randomtarget', 'mode_changetargetchase', 'mode_changetargetmelee', 'mode_changechase', 'mode_castsensorchase', 'mode_canattack', 'mode_castsensoridle', 'mode_aggressive', 'mode_canmove'),
	'27'			=> array('mode_randomtarget', 'mode_canattack', 'mode_aggressive'),
)
?>


================================================
FILE: config/monstermode.php
================================================
<?php
return array(
	'mode_aggressive'			=> 'Aggressive',
	'mode_angry'				=> 'Angry',
	'mode_assist'				=> 'Assist',
	'mode_canattack'			=> 'Can Attack',
	'mode_canmove'				=> 'Can Move',
	'mode_castsensorchase'		=> 'Cast Sensor Chase',
	'mode_castsensoridle'		=> 'Cast Sensor Idle',
	'mode_changechase'			=> 'Change Chase',
	'mode_changetargetchase'	=> 'Change Target Chase',
	'mode_changetargetmelee'	=> 'Change Target Melee',
	'mode_detector'				=> 'Detector',
	'mode_fixeditemdrop'		=> 'Fixed Item Drop',
	'mode_ignoremagic'			=> 'Ignore Magic', 
	'mode_ignoremelee'			=> 'Ignore Melee',
	'mode_ignoremisc'			=> 'Ignore Misc',
	'mode_ignoreranged'			=> 'Ignore Ranged',
	'mode_knockbackimmune'		=> 'Knockback Immune',
	'mode_looter'				=> 'Looter',
	'mode_mvp'					=> 'MVP',
	'mode_norandomwalk'			=> 'Plant',
	'mode_randomtarget'			=> 'Random Target',
	'mode_skillimmune'			=> 'Skill Immune',
	'mode_statusimmune'			=> 'Status Immune',
	'mode_targetweak'			=> 'Target Weak',
	'mode_teleportblock'		=> 'Teleport Block',
)
?>


================================================
FILE: config/picktypes.php
================================================
<?php
return array(
	'A' => 'Admin',
	'B' => 'Buy Store',
	'C' => 'Consumed',
	'D' => 'Stolen/Ganked',
	'E' => 'Mailed',
	'F' => 'Bound Retrieval',
	'G' => 'Guild Storage',
	//'H' => '',
	'I' => 'Auctioned',
	//'J' => '',
	'K' => 'Bank',
	'L' => 'Looted',
	'M' => 'Monster',
	'N' => 'NPC (Script)',
	'O' => 'Produced',
	'P' => 'Player',
	'Q' => 'Quest',
	'R' => 'Storage',
	'S' => 'NPC (Shop)',
	'T' => 'Traded',
	'U' => 'MVP',
	'V' => 'Vended',
	//'W' => '',
	'X' => 'Other',
	'Y' => 'Lottery',
	'Z' => 'Merged',
	'$' => 'Cash',
);
?>


================================================
FILE: config/races.php
================================================
<?php
// rA monster races.
return array(
	 'Formless'		=> 'Formless',
	 'Undead'		=> 'Undead',
	 'Brute'		=> 'Brute',
	 'Plant'		=> 'Plant',
	 'Insect'		=> 'Insect',
	 'Fish'			=> 'Fish',
	 'Demon'		=> 'Demon',
	 'Demihuman'	=> 'Demi-Human',
	 'Angel'		=> 'Angel',
	 'Dragon'		=> 'Dragon'
)
?>


================================================
FILE: config/servers.php
================================================
<?php
return array(
	// Example server configuration. You may have more arrays like this one to
	// specify multiple server groups (however they should share the same login
	// server whilst they are allowed to have multiple char/map pairs).
	array(
		'ServerName'     => 'FluxRO',
		// Global database configuration (excludes logs database configuration).
		'DbConfig'       => array(
			//'Socket'     => '/tmp/mysql.sock',
			//'Port'       => 3306,
			//'Encoding'   => 'utf8', // Connection encoding -- use whatever here your MySQL tables collation is.
			'Convert'    => 'utf8',
				// -- 'Convert' option only works when 'Encoding' option is specified and iconv (http://php.net/iconv) is available.
				// -- It specifies the encoding to convert your MySQL data to on the website (most likely needs to be utf8)
			'Hostname'   => '127.0.0.1',
			'Username'   => 'ragnarok',
			'Password'   => 'ragnarok',
			'Database'   => 'ragnarok',
			'Persistent' => true,
			'Timezone'   => null // Example: '+0:00' is UTC.
			// The possible values of 'Timezone' is as documented from the MySQL website:
			// "The value can be given as a string indicating an offset from UTC, such as '+10:00' or '-6:00'."
			// "The value can be given as a named time zone, such as 'Europe/Helsinki', 'US/Eastern', or 'MET'." (see below continuation!)
			// **"Named time zones can be used only if the time zone information tables in the mysql database have been created and populated."
		),
		// This is kept separate because many people choose to have their logs
		// database accessible under different credentials, and often on a
		// different server entirely to ensure the reliability of the log data.
		'LogsDbConfig'   => array(
			//'Socket'     => '/tmp/mysql.sock',
			//'Port'       => 3306,
			//'Encoding'   => null, // Connection encoding -- use whatever here your MySQL tables collation is.
			'Convert'    => 'utf8',
				// -- 'Convert' option only works when 'Encoding' option is specified and iconv (http://php.net/iconv) is available.
				// -- It specifies the encoding to convert your MySQL data to on the website (most likely needs to be utf8)
			'Hostname'   => '127.0.0.1',
			'Username'   => 'ragnarok',
			'Password'   => 'ragnarok',
			'Database'   => 'ragnarok',
			'Persistent' => true,
			'Timezone'   => null // Possible values is as described in the comment in DbConfig.
		),
		// Web server configuration.
		'WebDbConfig'    => array(
			'Hostname'   => '127.0.0.1',
			'Username'   => 'ragnarok',
			'Password'   => 'ragnarok',
			'Database'   => 'ragnarok',
			'Persistent' => true
		),
		// Login server configuration.
		'LoginServer'    => array(
			'Address'  => '127.0.0.1',
			'Port'     => 6900,
			'UseMD5'   => false,
			'NoCase'   => true, // rA account case-sensitivity; Default: Case-INsensitive (true).
			'GroupID'  => 0,    // Default account group ID during registration.
			//'Database' => 'ragnarok'
		),
		'CharMapServers' => array(
			array(
				'ServerName'      => 'FluxRO',
				'Renewal'         => true,
				'MaxCharSlots'    => 9,
				'DateTimezone'    => null, // Specifies game server's timezone for this char/map pair. (See: http://php.net/timezones)
				//'ResetDenyMaps'   => 'sec_pri', // Defaults to 'sec_pri'. This value can be an array of map names.
				//'Database'        => 'ragnarok', // Defaults to DbConfig.Database
				'ExpRates' => array(
					'Base'        => 100, // Rate at which (base) exp is given
					'Job'         => 100, // Rate at which job exp is given
					'Mvp'         => 100  // MVP bonus exp rate
				),
				'DropRates' => array(
					// If drop rate was below this amount and bonus is applied to it, the bonus can't make it exceed this amount.
					'DropRateCap' => 9000,
					// The rate the common items (in the ETC tab, besides card) are dropped
					'Common'      => 100,
					'CommonBoss'  => 100,
					'CommonMVP'   => 100,
					'CommonMin'   => 1,
					'CommonMax'   => 10000,
					// The rate healing items (that restore HP or SP) are dropped
					'Heal'        => 100,
					'HealBoss'    => 100,
					'HealMVP'     => 100,
					'HealMin'     => 1,
					'HealMax'     => 10000,
					// The rate usable items (in the item tab other then healing items) are dropped
					'Useable'     => 100,
					'UseableBoss' => 100,
					'UseableMVP'  => 100,
					'UseableMin'  => 1,
					'UseableMax'  => 10000,
					// The rate at which equipment is dropped
					'Equip'       => 100,
					'EquipBoss'   => 100,
					'EquipMVP'    => 100,
					'EquipMin'    => 1,
					'EquipMax'    => 10000,
					// The rate at which cards are dropped
					'Card'        => 100,
					'CardBoss'    => 100,
					'CardMVP'     => 100,
					'CardMin'     => 1,
					'CardMax'     => 10000,
					// The rate adjustment for the MVP items that the MVP gets directly in their inventory
					'MvpItem'     => 100,
					'MvpItemMin'  => 1,
					'MvpItemMax'  => 10000,
					// 0 - official order (Show message "Note: Only one MVP drop will be rewarded.") , 2 - all items
					'MvpItemMode' => 0,
				),
				'CharServer'      => array(
					'Address'     => '127.0.0.1',
					'Port'        => 6121
				),
				'MapServer'       => array(
					'Address'     => '127.0.0.1',
					'Port'        => 5121
				),
				// -- WoE days and times --
				// First parameter: Starding day 0=Sunday / 1=Monday / 2=Tuesday / 3=Wednesday / 4=Thursday / 5=Friday / 6=Saturday
				// Second parameter: Starting hour in 24-hr format.
				// Third paramter: Ending day (possible value is same as starting day).
				// Fourth (final) parameter: Ending hour in 24-hr format.
				// ** (Note, invalid times are ignored silently.)
				'WoeDayTimes'   => array(
					//array(0, '12:00', 0, '14:00'), // Example: Starts Sunday 12:00 PM and ends Sunday 2:00 PM
					//array(3, '14:00', 3, '15:00')  // Example: Starts Wednesday 2:00 PM and ends Wednesday 3:00 PM
				),
				// Modules and/or actions to disallow access to during WoE.
				'WoeDisallow'   => array(
					array('module' => 'character', 'action' => 'online'),  // Disallow access to "Who's Online" page during WoE.
					array('module' => 'character', 'action' => 'mapstats') // Disallow access to "Map Statistics" page during WoE.
				)
			)
		)
	)
);
?>


================================================
FILE: config/shopcategories.php
================================================
<?php
// These are categories for the item shop. Pay close attention to the numbers,
// as these numbers are stored in the database when you add an item to a specific
// category, so it knows which category the item belongs to.
// You may add/remove categories from here as you see fit.
return array(
	0 => 'Headgears',      // Headgears category, most likely doesn't include wings.
	1 => 'Wings',          // Wings category, though most of the time wings are headgear, this is more dedicated.
	2 => 'Armors',         // Armors category, most likely doesn't include headgears.
	3 => 'Weapons',        // Weapons category.
	4 => 'Healing Items',  // Good category to place healing items under, e.g., Yggdrasil Berries and the like.
	5 => 'Pets',           // Some people may choose to sell pet eggs or pet-related items under here.
	6 => 'Miscellaneous',  // Anything you can't really categorize, you can put under this category.
	7 => 'Cards'           // Cards category.
);
?>


================================================
FILE: config/sizes.php
================================================
<?php
// rA monster sizes.
return array(
	 'Small' => 'Small',
	 'Medium' => 'Medium',
	 'Large' => 'Large'
)
?>


================================================
FILE: config/trade_restrictions.php
================================================
<?php
return array(
	'trade_nodrop'			=> 'Can\'t be dropped',
	'trade_notrade'			=> 'Can\'t be traded with player',
	'trade_tradepartner'	=> 'Can\'t be traded with partner',
	'trade_nosell'			=> 'Can\'t be sold to NPC',
	'trade_nocart'			=> 'Can\'t be put in Cart',
	'trade_nostorage'		=> 'Can\'t be put in Storage',
	'trade_noguildstorage'	=> 'Can\'t be put in Guild Storage',
	'trade_nomail'			=> 'Can\'t be attached in Mail',
	'trade_noauction'		=> 'Can\'t be auctioned'
)
?>


================================================
FILE: data/captcha/fonts/index.html
================================================


================================================
FILE: data/captcha/index.html
================================================


================================================
FILE: data/emblem/index.html
================================================


================================================
FILE: data/index.html
================================================


================================================
FILE: data/items/icons/index.html
================================================


================================================
FILE: data/items/images/index.html
================================================


================================================
FILE: data/items/index.html
================================================


================================================
FILE: data/itemshop/index.html
================================================


================================================
FILE: data/jobs/images/F/index.html
================================================


================================================
FILE: data/jobs/images/M/index.html
================================================


================================================
FILE: data/jobs/images/index.html
================================================


================================================
FILE: data/jobs/index.html
================================================


================================================
FILE: data/logs/index.html
================================================


================================================
FILE: data/monsters/index.html
================================================


================================================
FILE: data/npc/DonationNPC.txt
================================================
map,x,y,d	script	Donor Rewards Redeemer	987,{
	// ----------------- NPC Settings -----------------
	// --- SET THESE BEFORE LOADING THE SCRIPT! ---
	
	// Server Name
	set .serverName$,"FluxRO";
	
	// NPC Name to display during chat.
	// Default: "[Donor Rewards Redeemer]"
	set .npcName$,"[Donor Rewards Redeemer]";
	
	// DO NOT CHANGE THIS!
	// Default: "cp_redeemlog"
	set .redeemTable$,"cp_redeemlog";
	
	// Display Credits to FluxCP Creators?
	// Help promote our product if its useful.
	// 0 = Disable. 1 = Enable.
	// Default: 1
	set .showCredits,1;
	
	// Max number of unique items to redeem at a time.
	// DO NOT RAISE THIS VALUE ABOVE 128 WITHOUT
	// MAKING THE NECESSARY SCRIPT ENGINE MODS
	// FOR SCRIPT ARRAY SIZING! DANGEROUS!
	// Default: 128
	set .numRedemptionsSimul,128; 
	// --------------- End NPC Settings ---------------

	// ----------------- Begin Script -----------------
	mes .npcName$;
	mes "Well hello there " + (Sex ? "good sir!" : "young madam!");
	mes "How may I be of assistance to you on this fine day?";
	next;
	prompt("I wish to redeem items:Who might you be?:I am merely perusing the area");
	mes .npcName$;
	switch(@menu) {
		case 1:
			query_sql "SELECT `id`, `nameid`, `quantity` FROM `" + escape_sql(.redeemTable$) + "` WHERE `account_id` = " + getcharid(3) + " AND `redeemed` = 0 LIMIT " + .numRedemptionsSimul,.@id,.@nameid,.@quantity;
			if (getarraysize(.@id) > 0) {
				mes "Items Pending Redemption: " + getarraysize(.@id);
				for (set .@i,0; .@i < getarraysize(.@id); set .@i,.@i+1)
					if (checkweight(.@nameid[.@i],.@quantity[.@i]) == 0) {
						mes "I'm terribly sorry, but you are carrying too much to accept " + (.@i ? "any more of " : " ") + "your rewards at this time.";
						mes "Please come back with fewer items.";
					} else {
						query_sql "UPDATE `" + escape_sql(.redeemTable$) + "` SET `char_id` = " + getcharid(0) + ", `redeemed` = 1, `redemption_date` = NOW() WHERE `id` = " + .@id[.@i];
						getitem .@nameid[.@i],.@quantity[.@i];
						mes .@quantity[.@i] + "x " + getitemname(.@nameid[.@i]);
					}
				if (.@i == getarraysize(.@id)) {
					mes "Thank you for your patronage " + (Sex ? "fine sir." : "ma'am.");
					mes "Please enjoy your stay on " + .serverName$ + "!";
				}
				if (.showCredits)
					callfunc "F_FluxCredits";
			} else {
				mes "My records indicate that there are no rewards awaiting to be redeemed.";
				mes "My deepest apologies for the misunderstanding.";
			}
		break;
		case 2:
			mes "I am here to allow for the redemption of rewards for donations to " + .serverName$ + ".";
			mes "Donations may be made to the server via the control panel.";
		break;
		default:
			mes "Very well then.";
			mes "Good day to you.";
		break;
	}
	close;
	// ------------------ End Script ------------------
}

// ------------ Credits to FluxCP Creators ------------
// - Please do not modify or delete this function or  -
// - its contents. To disable the credits from being  -
// - shown, set .showCredits to 0 in the NPC Settings -
// - at the top of this file.                         -
// ----------------------------------------------------

function	script	F_FluxCredits	{
	mes "-----------------------------------";
	mes "Powered by Flux Control Panel.";
	mes "Copyright � 2008-2012 Matthew Harris and Nikunj Mehta.";
	mes "http://fluxcp.googlecode.com/";
	return;
}


================================================
FILE: data/npc/PeakNPC.txt
================================================
-	script	Highest Peak	-1,{

OnPCLoginEvent:

// Assign current number of online players
sleep 1000;
.onlineusers = getusers(1);

// Today's date
.date$ = gettime(DT_YEAR)+"-"+gettime(DT_MONTH)+"-"+gettime(DT_DAYOFMONTH);

// Query for the highest peak in the database
query_sql("SELECT `users` FROM `" + .sqltable$ + "` ORDER BY `users` LIMIT 1",.@countusers);

if(getarraysize(.@countusers) == 0) {
	// There doesn't seem to be a row in our table, so lets create one
	query_sql("INSERT INTO `" + .sqltable$ + "` (`users`, `date`) VALUES (" + .onlineusers + ", '" + .date$ + "')");
} else {
	if(.onlineusers > .@countusers[0]) {
		// This is where we check if we want to announce a new peak
		if(.displaypeakannounce == 1){
			announce "We have reached a new player peak! We now have "+.onlineusers+" online!",bc_all;
		}
		// Now lets update the table with our new player peak
		query_sql("UPDATE `" + .sqltable$ + "` SET `users` = '" + .onlineusers + "', `date` = '" + .date$ + "'");
	}
}
end;

OnInit:
// CONFIGS
	// We need an SQL table name first
	.sqltable$ = "cp_onlinepeak";
	
	// Would you like an announcement when you reach a higher peak?
	// 1 = Yes
	// 0 = No
	.displaypeakannounce = 1;

// END CONFIGS

}


================================================
FILE: data/npc/index.html
================================================


================================================
FILE: data/npc/support_cmd.txt
================================================
//===== rAthena Script =======================================
//= @support
//===== By: ==================================================
//= Akkarin
//===== Current Version: =====================================
//= 1.00.01
//===== Description: ========================================= 
//= Script control over @support
//============================================================

-	script	atcmd_support	-1,{
OnInit:
	bindatcmd("support","atcmd_support::Onsupport");
	end;

Onsupport:
	query_sql "SELECT `cat_id`, `name` FROM `cp_servicedeskcat` WHERE `display` = 1 ORDER BY `name`", @cat_id, @cat_name$;
	mes "Please select one of the following categories";
	set @j,0;
	for(set @i, 0; @i < getarraysize(@cat_id); set @i, @i + 1){	set @menulist$[@j],@cat_name$[@i]; set @menureference[@j],@i; set @j,@j+1; }
	menu @menulist$[0],-,@menulist$[1],-,@menulist$[2],-,@menulist$[3],-,@menulist$[4],-,@menulist$[5],-,@menulist$[6],-,@menulist$[7],-,@menulist$[8],-,@menulist$[9],-,@menulist$[10],-,@menulist$[11],-,@menulist$[12],-,@menulist$[13],-,@menulist$[14],-,@menulist$[15],-,@menulist$[16],-,@menulist$[17],-,@menulist$[18],-,@menulist$[19],-,@menulist$[20],-,@menulist$[21],-,@menulist$[22],-,@menulist$[23],-,@menulist$[24],-,@menulist$[25],-,@menulist$[26],-,@menulist$[27],-,@menulist$[28],-,@menulist$[29],-,@menulist$[30],-;
	next;
	mes "Next, please type in a subject line";
	input @subject$;
	next;
	mes "Please tell us what the problem is. You must make sure that you keep this brief so all the text fits into the box!";
	input @body$;
	next;
	mes "This is what we have so far.", "Click 'Next' to view each entry, then submit your ticket.";
	next;
	mes "^FF0000Category^000000", "You selected "+@cat_name$[@menureference[@menu-1]]; next;
	mes "^FF0000Subject^000000", @subject$; next;
	mes "^FF0000Body^000000", @body$; next;
	mes "If this is all correct, your ticket will be created.", "Continue?";
	if(select("Yes:No")==1) {
		query_sql "SELECT `email`, `last_ip` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'", @player_email$, @player_lastip$;
		query_sql("INSERT INTO `cp_servicedesk` (`account_id`, `category`, `char_id`, `timestamp`, `sslink`, `chatlink`, `videolink`, `subject`, `text`, `ip`, `curemail`) VALUES ('"+getcharid(3)+"', '"+@cat_id[@menureference[@menu-1]]+"', '"+getcharid(0)+"', NOW(), '0', '0', '0', '"+@subject$+"', '"+@body$+"', '"+@player_lastip$+"', '"+@player_email$+"')");
		mes "Ticket created.";
		close;
	} else {
		mes "Submission terminated.";
		close;
		end;
	}
	end;
}

================================================
FILE: data/npc/web_commands.txt
================================================
//===== rAthena Script =======================================
//= Web Commander
//===== By: ==================================================
//= Akkarin, rAthena FluxCP
//===== Description: =========================================
//= Simple script to check sql table for commands to process.
//= Data is input via FluxCP module and checked for unexecuted
//= commands every 2 seconds.
//===== Additional Comments: =================================
//= 1.0 First Version.
//= 1.1 Fixed code to prevent single-run senarios.
//============================================================

-	script	Commands	-1,{
OnInit:
start:
	initnpctimer;
	end;

OnTimer2000:
	.@nb2 = query_sql("SELECT COUNT(*) FROM cp_commands WHERE done=0",.@count);
	if(.@count != 0) {
		.@nb = query_sql("SELECT command,id,account_id FROM cp_commands WHERE done=0 ORDER BY id LIMIT 1",.@command$,.@id,.@account_id);
		if(compare(.@command$,"@")) {
			attachrid(.@account_id[0]);
			atcommand .@command$[0];
		} else charcommand .@command$[0];
		query_sql("UPDATE cp_commands SET done='1' WHERE command='"+.@command$[0]+"' AND id='"+.@id[0]+"'");
		.@nb = 0; .@nb2 = 0; .@count = 0; .@command$ = 0; .@id = 0; .@account_id = 0;
	}
	stopnpctimer;
	goto start;
}


================================================
FILE: data/paypal/button.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;

if (empty($amount)) {
	return false;
}

$session            = Flux::$sessionData;
$customDataArray    = array('server_name' => $session->loginAthenaGroup->serverName, 'account_id' => $session->account->account_id);
$customDataEscaped  = htmlspecialchars(base64_encode(serialize($customDataArray)));
$businessEmail      = htmlspecialchars(Flux::config('PayPalBusinessEmail'));
$donationCurrency   = htmlspecialchars(Flux::config('DonationCurrency'));
$creditExchangeRate = Flux::config('CreditExchangeRate');
$donationCredits    = floor($amount / $creditExchangeRate);
$itemName           = htmlspecialchars(sprintf('Donation Credits: %s CREDIT(s)', number_format($donationCredits)));
?>
<form action="https://<?php echo Flux::config('PayPalIpnUrl') ?>/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations" />
<input type="hidden" name="notify_url" value="<?php echo $this->url('donate', 'notify', array('_host' => true)) ?>" />
<input type="hidden" name="return" value="<?php echo $this->url('main', 'index', array('_host' => true)) ?>" />
<input type="hidden" name="custom" value="<?php echo $customDataEscaped ?>" />
<input type="hidden" name="business" value="<?php echo $businessEmail ?>" />
<input type="hidden" name="item_name" value="<?php echo $itemName ?>" />
<input type="hidden" name="amount" value="<?php echo (float)$amount ?>" />
<input type="hidden" name="no_shipping" value="0" />
<input type="hidden" name="no_note" value="1" />
<input type="hidden" name="currency_code" value="<?php echo $donationCurrency ?>" />
<input type="hidden" name="tax" value="0" />
<input type="hidden" name="lc" value="US" />
<input type="hidden" name="bn" value="PP-DonationsBF" />
<p style="text-align: center"><input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif"
	name="submit" alt="PayPal - The safer, easier way to pay online!" /></p>
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" />
</form>


================================================
FILE: data/paypal/index.html
================================================


================================================
FILE: data/schemas/charmapdb/cp_charprefs.20080929191525.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_charprefs` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `account_id` int(11) unsigned NOT NULL,
  `char_id` int(11) unsigned NOT NULL,
  `name` varchar(80) NOT NULL,
  `value` varchar(255) default NULL,
  `create_date` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM COMMENT='Character preferences.';


================================================
FILE: data/schemas/charmapdb/cp_charprefs.20081109093448.sql
================================================
ALTER TABLE  `cp_charprefs` ADD INDEX (  `account_id` ,  `char_id` ) ;


================================================
FILE: data/schemas/charmapdb/cp_charprefs.20120816150540.sql
================================================
ALTER TABLE `cp_charprefs` ADD INDEX (`char_id`);


================================================
FILE: data/schemas/charmapdb/cp_commands.20160608065501.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_commands` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `command` varchar(128) NOT NULL DEFAULT '0',
  `issuer` varchar(32) NOT NULL DEFAULT '0',
  `account_id` int(12) NOT NULL DEFAULT '0',
  `done` int(1) NOT NULL DEFAULT '0',
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/charmapdb/cp_itemdesc.20170210033400.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_itemdesc` (
  `itemid` int(10) unsigned NOT NULL auto_increment,
  `itemdesc` text NOT NULL,
  PRIMARY KEY  (`itemid`)
) ENGINE=MyISAM COMMENT='Stored item descriptions from parsed itemInfo.';


================================================
FILE: data/schemas/charmapdb/cp_itemshop.20080928225124.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_itemshop` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `nameid` int(11) unsigned NOT NULL default '0',
  `quantity` int(11) unsigned NOT NULL default '0',
  `cost` int(11) unsigned NOT NULL,
  `info` text,
  `create_date` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM COMMENT='Item shop';


================================================
FILE: data/schemas/charmapdb/cp_itemshop.20081109093448.sql
================================================
DROP PROCEDURE IF EXISTS cp_itemshop_20081109093448;
CREATE PROCEDURE cp_itemshop_20081109093448() BEGIN
    DECLARE CONTINUE HANDLER FOR 1060 BEGIN END;
    ALTER TABLE `cp_itemshop` ADD `use_existing` TINYINT NOT NULL DEFAULT '0' AFTER `info`;
END;
CALL cp_itemshop_20081109093448();
DROP PROCEDURE cp_itemshop_20081109093448;


================================================
FILE: data/schemas/charmapdb/cp_itemshop.20081128093449.sql
================================================
ALTER TABLE  `cp_itemshop` ADD INDEX (  `nameid` ) ;


================================================
FILE: data/schemas/charmapdb/cp_itemshop.20090104190020.sql
================================================
DROP PROCEDURE IF EXISTS cp_itemshop_20090104190020;
CREATE PROCEDURE cp_itemshop_20090104190020() BEGIN
    DECLARE CONTINUE HANDLER FOR 1060 BEGIN END;
    ALTER TABLE `cp_itemshop` ADD `category` INT(11) NULL AFTER `nameid`;
END;
CALL cp_itemshop_20090104190020();
DROP PROCEDURE cp_itemshop_20090104190020;


================================================
FILE: data/schemas/charmapdb/cp_onlinepeak.20131120120201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_onlinepeak` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `users` int(10) unsigned NOT NULL DEFAULT '0',
  `date` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE = MYISAM;


================================================
FILE: data/schemas/charmapdb/cp_redeemlog.20080928225124.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_redeemlog` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `nameid` int(11) unsigned NOT NULL default '0',
  `quantity` int(11) unsigned NOT NULL default '0',
  `cost` int(11) unsigned NOT NULL,
  `account_id` int(11) unsigned NOT NULL,
  `char_id` int(11) unsigned default NULL,
  `redeemed` tinyint(1) unsigned NOT NULL,
  `redemption_date` datetime default NULL,
  `purchase_date` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM COMMENT='Log of redeemed donation items.';


================================================
FILE: data/schemas/charmapdb/cp_redeemlog.20081001054354.sql
================================================
DROP PROCEDURE IF EXISTS cp_redeemlog_20081001054354;
CREATE PROCEDURE cp_redeemlog_20081001054354() BEGIN
    DECLARE CONTINUE HANDLER FOR 1060 BEGIN END;
ALTER TABLE `cp_redeemlog`
	ADD `credits_before` INT( 10 ) NOT NULL ,
	ADD `credits_after` INT( 10 ) NOT NULL;END;
CALL cp_redeemlog_20081001054354();
DROP PROCEDURE cp_redeemlog_20081001054354;


================================================
FILE: data/schemas/charmapdb/cp_redeemlog.20081109093448.sql
================================================
ALTER TABLE  `cp_redeemlog` ADD INDEX (  `nameid` ,  `account_id` ,  `char_id` ) ;


================================================
FILE: data/schemas/charmapdb/cp_xferlog.20080928225124.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_xferlog` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `from_account_id` int(10) unsigned NOT NULL,
  `target_account_id` int(10) unsigned NOT NULL,
  `target_char_id` int(11) unsigned NOT NULL,
  `amount` int(10) unsigned NOT NULL,
  `for_free` tinyint(1) unsigned NOT NULL default '0',
  `transfer_date` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM COMMENT='Credit transfer log.';


================================================
FILE: data/schemas/charmapdb/cp_xferlog.20081109093448.sql
================================================
ALTER TABLE  `cp_xferlog` ADD INDEX (  `from_account_id` ,  `target_account_id` ,  `target_char_id` ) ;


================================================
FILE: data/schemas/charmapdb/index.html
================================================


================================================
FILE: data/schemas/index.html
================================================


================================================
FILE: data/schemas/logindb/cp_banlog.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_banlog` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `account_id` int(11) unsigned NOT NULL,
  `banned_by` int(11) unsigned DEFAULT NULL,
  `ban_type` tinyint(1) NOT NULL,
  `ban_until` datetime NOT NULL,
  `ban_date` datetime NOT NULL,
  `ban_reason` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`,`banned_by`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_cmsnews.20131120145701.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_cmsnews` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `body` text NOT NULL,
  `link` varchar(100) NOT NULL,
  `author` varchar(100) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE = MYISAM;


================================================
FILE: data/schemas/logindb/cp_cmspages.20131120161901.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_cmspages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(100) NOT NULL,
  `title` varchar(100) NOT NULL,
  `body` text NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `cp_cmspages` (`id`, `path`, `title`, `body`, `modified`) VALUES
(1, 'rules', 'Rules', 'This is a rules page.', '2013-11-20 00:00:00'),
(2, 'downloads', 'Downloads', 'This is a download page.', '2017-07-20 00:00:00');


================================================
FILE: data/schemas/logindb/cp_cmssettings.20131120145801.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_cmssettings` (
  `name` varchar(128) NOT NULL,
  `value` varchar(128) NOT NULL,
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


================================================
FILE: data/schemas/logindb/cp_createlog.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_createlog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `account_id` int(11) unsigned NOT NULL,
  `userid` varchar(23) NOT NULL,
  `user_pass` varchar(32) NOT NULL,
  `sex` enum('M','F','S') NOT NULL DEFAULT 'M',
  `email` varchar(39) NOT NULL,
  `reg_date` datetime NOT NULL,
  `reg_ip` varchar(100) NOT NULL,
  `delete_date` datetime DEFAULT NULL,
  `confirmed` tinyint(1) NOT NULL DEFAULT '1',
  `confirm_code` varchar(32) DEFAULT NULL,
  `confirm_expire` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`userid`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_createlog.20170720151901.sql
================================================
ALTER TABLE `cp_createlog` CHANGE `reg_date` `reg_date` DATETIME NOT NULL;


================================================
FILE: data/schemas/logindb/cp_createlog.20250614124331.sql
================================================
ALTER TABLE cp_createlog MODIFY COLUMN reg_ip VARCHAR(39) NOT NULL;


================================================
FILE: data/schemas/logindb/cp_credits.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_credits` (
  `account_id` int(11) unsigned NOT NULL,
  `balance` int(11) unsigned NOT NULL DEFAULT '0',
  `last_donation_date` datetime DEFAULT NULL,
  `last_donation_amount` float unsigned DEFAULT NULL,
  PRIMARY KEY (`account_id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Donation credits balance for a given account.';


================================================
FILE: data/schemas/logindb/cp_emailchange.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_emailchange` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(32) NOT NULL,
  `account_id` int(10) NOT NULL,
  `old_email` varchar(39) NOT NULL,
  `new_email` varchar(39) NOT NULL,
  `request_date` datetime NOT NULL,
  `request_ip` varchar(15) NOT NULL,
  `change_date` datetime DEFAULT NULL,
  `change_ip` varchar(15) DEFAULT NULL,
  `change_done` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_emailchange.20250609133400.sql
================================================
ALTER TABLE cp_emailchange
MODIFY COLUMN request_ip VARCHAR(39) NOT NULL,
MODIFY COLUMN change_ip VARCHAR(39) DEFAULT NULL;


================================================
FILE: data/schemas/logindb/cp_ipbanlog.20120816150540.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_ipbanlog` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `ip_address` varchar(15) NOT NULL,
  `banned_by` int(11) unsigned default NULL,
  `ban_type` tinyint(1) NOT NULL,
  `ban_until` datetime NOT NULL,
  `ban_date` datetime NOT NULL,
  `ban_reason` text NOT NULL,
  PRIMARY KEY  (`id`),
  INDEX (`ip_address`),
  INDEX (`banned_by`)
) ENGINE=MyISAM ;


================================================
FILE: data/schemas/logindb/cp_ipbanlog.20250609133400.sql
================================================
ALTER TABLE cp_ipbanlog MODIFY COLUMN ip_address VARCHAR(39) NOT NULL;


================================================
FILE: data/schemas/logindb/cp_loginlog.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_loginlog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(10) DEFAULT NULL,
  `username` varchar(23) NOT NULL,
  `password` varchar(32) NOT NULL,
  `ip` varchar(15) NOT NULL,
  `login_date` datetime NOT NULL,
  `error_code` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_loginlog.20250609133400.sql
================================================
ALTER TABLE cp_loginlog MODIFY COLUMN ip VARCHAR(39) NOT NULL;


================================================
FILE: data/schemas/logindb/cp_loginprefs.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_loginprefs` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `account_id` int(11) unsigned NOT NULL,
  `name` varchar(80) NOT NULL,
  `value` varchar(255) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Account preferences' AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_pwchange.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_pwchange` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(10) NOT NULL,
  `old_password` varchar(32) NOT NULL,
  `new_password` varchar(32) DEFAULT NULL,
  `change_date` datetime NOT NULL,
  `change_ip` varchar(15) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_pwchange.20250609133400.sql
================================================
ALTER TABLE cp_pwchange MODIFY COLUMN change_ip VARCHAR(39) NOT NULL;


================================================
FILE: data/schemas/logindb/cp_resetpass.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_resetpass` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(32) NOT NULL,
  `account_id` int(10) NOT NULL,
  `old_password` varchar(32) NOT NULL,
  `new_password` varchar(32) DEFAULT NULL,
  `request_date` datetime NOT NULL,
  `request_ip` varchar(15) NOT NULL,
  `reset_date` datetime DEFAULT NULL,
  `reset_ip` varchar(15) DEFAULT NULL,
  `reset_done` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_resetpass.20250609133400.sql
================================================
ALTER TABLE cp_resetpass
MODIFY COLUMN request_ip VARCHAR(39) NOT NULL,
MODIFY COLUMN reset_ip VARCHAR(39) DEFAULT NULL;


================================================
FILE: data/schemas/logindb/cp_servicedesk.20131122010001.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_servicedesk` (
  `ticket_id` int(6) NOT NULL AUTO_INCREMENT,
  `account_id` int(7) NOT NULL,
  `category` int(6) NOT NULL,
  `status` varchar(12) NOT NULL DEFAULT 'Pending',
  `char_id` text NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `sslink` text NOT NULL,
  `chatlink` text NOT NULL,
  `videolink` text NOT NULL,
  `subject` varchar(64) NOT NULL DEFAULT '0',
  `text` text NOT NULL,
  `ip` varchar(15) NOT NULL DEFAULT '0',
  `team` int(1) NOT NULL DEFAULT '1',
  `curemail` text NOT NULL,
  `lastreply` varchar(24) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ticket_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1000 ;


================================================
FILE: data/schemas/logindb/cp_servicedesk.20250609133400.sql
================================================
ALTER TABLE cp_servicedesk MODIFY COLUMN ip VARCHAR(39) NOT NULL DEFAULT '0';


================================================
FILE: data/schemas/logindb/cp_servicedeska.20131122010001.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_servicedeska` (
  `action_id` int(6) NOT NULL AUTO_INCREMENT,
  `ticket_id` int(6) NOT NULL,
  `author` varchar(32) NOT NULL,
  `text` text NOT NULL,
  `action` text NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ip` varchar(15) NOT NULL DEFAULT '0',
  `isstaff` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`action_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_servicedeska.20250609133400.sql
================================================
ALTER TABLE cp_servicedeska MODIFY COLUMN ip VARCHAR(39) NOT NULL DEFAULT '0';


================================================
FILE: data/schemas/logindb/cp_servicedeskcat.20131122010001.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_servicedeskcat` (
  `cat_id` int(3) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `display` int(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `cp_servicedeskcat` (`cat_id`, `name`, `display`) VALUES
(1, 'Technical Support', 1),
(2, 'General Support', 1),
(3, 'Report an Abuse', 1);


================================================
FILE: data/schemas/logindb/cp_servicedesksettings.20131122010001.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_servicedesksettings` (
  `account_id` int(7) NOT NULL,
  `account_name` varchar(32) NOT NULL,
  `prefered_name` varchar(32) NOT NULL,
  `team` int(1) NOT NULL,
  `emailalerts` int(1) NOT NULL DEFAULT '0',
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


================================================
FILE: data/schemas/logindb/cp_trusted.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_trusted` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `account_id` int(11) unsigned NOT NULL,
  `email` varchar(255) NOT NULL,
  `create_date` datetime NOT NULL,
  `delete_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_txnlog.20131213174201.sql
================================================
CREATE TABLE IF NOT EXISTS `cp_txnlog` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `account_id` int(11) unsigned DEFAULT '0',
  `server_name` varchar(255) DEFAULT NULL,
  `credits` int(11) DEFAULT '0',
  `receiver_email` varchar(60) DEFAULT NULL,
  `item_name` varchar(100) DEFAULT NULL,
  `item_number` varchar(10) DEFAULT NULL,
  `quantity` varchar(6) DEFAULT NULL,
  `payment_status` varchar(20) DEFAULT NULL,
  `pending_reason` varchar(20) DEFAULT NULL,
  `payment_date` varchar(40) DEFAULT NULL,
  `mc_gross` varchar(20) DEFAULT NULL,
  `mc_fee` varchar(20) DEFAULT NULL,
  `tax` varchar(20) DEFAULT NULL,
  `mc_currency` varchar(3) DEFAULT NULL,
  `parent_txn_id` varchar(20) DEFAULT NULL,
  `txn_id` varchar(20) DEFAULT NULL,
  `txn_type` varchar(20) DEFAULT NULL,
  `first_name` varchar(30) DEFAULT NULL,
  `last_name` varchar(40) DEFAULT NULL,
  `address_street` varchar(50) DEFAULT NULL,
  `address_city` varchar(30) DEFAULT NULL,
  `address_state` varchar(30) DEFAULT NULL,
  `address_zip` varchar(20) DEFAULT NULL,
  `address_country` varchar(30) DEFAULT NULL,
  `address_status` varchar(10) DEFAULT NULL,
  `payer_email` varchar(60) DEFAULT NULL,
  `payer_status` varchar(10) DEFAULT NULL,
  `payment_type` varchar(10) DEFAULT NULL,
  `notify_version` varchar(10) DEFAULT NULL,
  `verify_sign` varchar(255) DEFAULT NULL,
  `referrer_id` varchar(10) DEFAULT NULL,
  `process_date` datetime DEFAULT NULL,
  `hold_until` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `account_id` (`account_id`),
  KEY `parent_txn_id` (`parent_txn_id`),
  KEY `txn_id` (`txn_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='All PayPal transactions that go through the IPN handler.' AUTO_INCREMENT=1 ;


================================================
FILE: data/schemas/logindb/cp_txnlog.20170217073601.sql
================================================
ALTER TABLE `cp_txnlog` CHANGE `referrer_id` `referrer_id` VARCHAR(13) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;


================================================
FILE: data/schemas/logindb/cp_txnlog.20170221184601.sql
================================================
ALTER TABLE `cp_txnlog` CHANGE `address_status` `address_status` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL;


================================================
FILE: data/schemas/logindb/index.html
================================================


================================================
FILE: data/templates/changemail.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
$siteTitle  = Flux::config('SiteTitle');
$emailTitle = sprintf('%s: Change E-mail', $siteTitle);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>You have received this e-mail because someone has filled in the "change e-mail" form after logging into your account.
			If you are the one who requested this action, then please click the below link to proceed with the e-mail change.</p>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">Account:&nbsp;&nbsp;</td>
					<th align="left">{AccountUsername}</th>
				</tr>
				<tr>
					<td align="right">Old E-mail:&nbsp;&nbsp;</td>
					<th align="left">{OldEmail}</th>
				</tr>
				<tr>
					<td align="right">New E-mail:&nbsp;&nbsp;</td>
					<th align="left">{NewEmail}</th>
				</tr>
				<tr>
					<td align="right">Change E-mail:&nbsp;&nbsp;</td>
					<th align="left"><a href="{ChangeLink}" title="Change e-mail for this account.">{ChangeLink}</a></th>
				</tr>
			</table>
		</p>
		
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/templates/confirm.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
$siteTitle  = Flux::config('SiteTitle');
$emailTitle = sprintf('%s Account Confirmation', $siteTitle);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>You have received this e-mail because you or someone else has created an account
			with <strong><?php echo htmlspecialchars($siteTitle) ?></strong> using this
			e-mail address. Point your browser to the below link to activate the account.</p>
		
		<?php if ($expire=Flux::config('EmailConfirmExpire')): ?>
		<p>All unconfirmed accounts will be deleted from our system within <?php echo (int)$expire ?> hour(s) of registration.</p>
		<?php endif ?>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">Account:&nbsp;&nbsp;</td>
					<th align="left">{AccountUsername}</th>
				</tr>
				<tr>
					<td align="right">Confirm:&nbsp;&nbsp;</td>
					<th align="left"><a href="{ConfirmationLink}" title="Activate this account.">{ConfirmationLink}</a></th>
				</tr>
			</table>
		</p>
		
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/templates/contactform.php
================================================
<?php
/* Contact Form Addon
 * Created and maintained by Akkarin
 * Current Version: 1.00.01
 */
 
if (!defined('FLUX_ROOT')) exit;
$emailTitle = sprintf('Contact Form Submission');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>A member of our site has submitted a question/query.</p>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">AccountID:&nbsp;&nbsp;</td>
					<th align="left">{AccountID}</th>
				</tr>
				<tr>
					<td align="right">Name:&nbsp;&nbsp;</td>
					<th align="left">{Name}</th>
				</tr>
				<tr>
					<td align="right">Email:&nbsp;&nbsp;</td>
					<th align="left">{Email}</th>
				</tr>
				<tr>
					<td align="right">Subject:&nbsp;&nbsp;</td>
					<th align="left">{Subject}</th>
				</tr>
				<tr>
					<td align="right">Body:&nbsp;&nbsp;</td>
					<th align="left">{Body}</th>
				</tr>
				<tr>
					<td align="right">IP:&nbsp;&nbsp;</td>
					<th align="left">{IP}</th>
				</tr>
			</table>
		</p>
		<br />
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/templates/index.html
================================================


================================================
FILE: data/templates/marketing1.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>{emailtitle}</title>
		<meta name="description" content="" /> 
	</head>
	<body>
		
		<h2>New to Server</h2>
		<p>
			<ul>
				<li><a href="#">Alliance System</a></li>
				<li><a href="#">Achievement System</a></li>
				<li><a href="#">Floating Rates</a></li>
				<li><a href="#">Gathering System</a></li>
				<li><a href="#">Housing / Accomodation</a></li>
				<li><a href="#">Hero's Initiative</a></li>
			</ul>
		</p>


		<h2>{emailtitle}</h2>
        <p>Greetings Adventurer!<br /><br />
		We're pleased to announce that Server is back online with brand new updates and content to ... <br /><br />

		<em>The FluxCP Team</em>
		</p>





		<h2>Email Jargen</h2>
		<p>This email was sent by FluxCP to {username} ({email}) because you have a player account with us. We will <strong>never</strong> give your details to anyone, not even a real marketing company - so we sent this email directly to you from our website!<br /><br />

		You can unsubscribe from receiving these emails by changing your preferences on <a href="#">our website</a>.
		</p>



		<h2>Useful Links</h2>
		<p><a href="#">Website Home</a> || <a href="#">Forums</a> || <a href="#">Service Desk</a> || <a href="#">Wiki</a></p>
	</body>
</html>


================================================
FILE: data/templates/newpass.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
$siteTitle  = Flux::config('SiteTitle');
$emailTitle = sprintf('%s: Password Has Been Reset', $siteTitle);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>Here are the details outlining your new password.</p>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">Account:&nbsp;&nbsp;</td>
					<th align="left">{AccountUsername}</th>
				</tr>
				<tr>
					<td align="right">New Password:&nbsp;&nbsp;</td>
					<th align="left">{NewPassword}</th>
				</tr>
			</table>
		</p>
		
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/templates/newticket.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
$emailTitle = sprintf('New Ticket Created');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>You have received this e-mail because you have enabled email alerts for new tickets.</p>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">Category:&nbsp;&nbsp;</td>
					<th align="left">{Category}</th>
				</tr>
				<tr>
					<td align="right">Subject:&nbsp;&nbsp;</td>
					<th align="left">{Subject}</th>
				</tr>
				<tr>
					<td align="right">Ticket Body:&nbsp;&nbsp;</td>
					<th align="left">{Text}</th>
				</tr>
			</table>
		</p>
		<br />
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/templates/resetpass.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
$siteTitle  = Flux::config('SiteTitle');
$emailTitle = sprintf('%s: Reset Password', $siteTitle);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>You have received this e-mail because you or someone else has filled in our "reset password" form,
			requesting to reset the password of your account on our server.</p>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">Account:&nbsp;&nbsp;</td>
					<th align="left">{AccountUsername}</th>
				</tr>
				<tr>
					<td align="right">Reset Link:&nbsp;&nbsp;</td>
					<th align="left"><a href="{ResetLink}" title="Reset password for this account.">{ResetLink}</a></th>
				</tr>
			</table>
		</p>
		
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/templates/ticketreply.php
================================================
<?php
if (!defined('FLUX_ROOT')) exit;
$siteTitle  = Flux::config('SiteTitle');
$emailTitle = sprintf('%s: Ticket Reply', $siteTitle);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php echo htmlspecialchars($emailTitle) ?></title>
		<style type="text/css" media="screen">
			body, table {
				font-family: sans-serif;
				font-size: 10pt;
			}
		</style>
	</head>
	<body>
		<h2><?php echo htmlspecialchars($emailTitle) ?></h2>
		
		<p>You have received this e-mail because a member of the support team has replied to your ticket on the Service Desk.</p>
		
		<p>
			<table style="margin-left: 18px">
				<tr>
					<td align="right">Ticket ID:&nbsp;&nbsp;</td>
					<th align="left">{TicketID}</th>
				</tr>
				<tr>
					<td align="right">Updated By:&nbsp;&nbsp;</td>
					<th align="left">{Staff}</th>
				</tr>
			</table>
		</p>
		<br />
		<p><em><strong>Note:</strong> This is an automated e-mail, please do not reply to this address.</em></p>
	</body>
</html>


================================================
FILE: data/tmp/index.html
================================================


================================================
FILE: data/tmp/transactions/Refunded/index.html
================================================


================================================
FILE: data/tmp/transactions/Reversed/index.html
================================================


================================================
FILE: data/tmp/transactions/web_accept/Completed/index.html
================================================


================================================
FILE: data/tmp/transactions/web_accept/Denied/index.html
================================================


================================================
FILE: data/tmp/transactions/web_accept/Pending/index.html
================================================


================================================
FILE: doc/user_lang.md
================================================
Language Files
======

How do they work?
---------
The **lang/** directory contains translations for use with FluxCP. The language used is controlled by the 'DefaultLanguage' setting in config/application.php.

Simply put, `'DefaultLanguage' => 'en_us'` will load the American English language file and use the contained strings wherever `Flux::message()` is used within theme files. There are a few others within the `lang/` directory, but unfortunately they aren't maintained.


How do we use them?
---------
For example, in a theme file that is displaying whether a players' character is male or female, you would see `<?php echo Flux::message('GenderTypeMale') ?>` or `<?php echo Flux::message('GenderTypeFemale') ?>`.

The menus that are defined in `config/application.php` are set to automatically use the language files. For example, lets look at this specific menu:

```
'MenuItems'		=> array(
		'MainMenuLabel'		=> array(
			'HomeLabel'			=> array('module' => 'main'),
			'NewsLabel'			=> array('module' => 'news'),
		),
),
```

When the page is rendered, you will see that these strings are replaced with their counterparts from the language file.
'MainMenuLabel' becomes 'Main Menu', 'HomeLabel' becomes 'Home', 'NewsLabel' becomes 'News'.


Common Misuse
---------
Many people still think that the 'Label' portion of these strings should be removed within the config file as it's outputting 'HomeLabel' to the page instead of 'Home'. **This is incorrect.** This simply means that the theme you're using was built earlier than August 2014 and you shouldn't be using it.


================================================
FILE: doc/user_theme.md
================================================
Using a Custom Theme
======

How does it work?
---------
The Theme System in FluxCP is based on an "inheritance structure". In simple terms, this means you only need to add files to your new theme folder that you want to change.

It all works similar to the config import system in rAthena. The default theme is read first, then if there are any files matching the required view in the custom theme, then it gets loaded instead. This means that that **you don't need to copy/paste the default theme every time you create a new custom theme**.

The manifest.php file controls inheritance with `'inherit'     => 'default',`.

How should my theme look?
---------
This is an example directory structure for a custom theme in a fresh install of FluxCP:
```
.
├── addons
├── config
├── data
├── doc
├── lang
├── lib
├── modules
├── themes
|   ├── bootstrap
|   └── cust_theme1
|       └── css
|           ├── flux.css
|           └── customstyle.css
|       └── img
|           ├── bg.jpg
|           └── logo.png
|       └── js
|           ├── flux.unitip.js
|           └── ie9.js
|       └── main
|           ├── index.php
|           └── sidebar.php
|       ├── footer.php
|       ├── header.php
|       └── manifest.php
|   ├── default
|   └── installer
├── .gitignore
├── .htaccess
├── LICENSE
├── README.md
├── error.php
└── index.php
```

As you can see, there are only a few files in the **cust_theme1** folder.


How do I make it display on my website?
---------
To enable your theme, simply add it to the theme array in /config/application.php:
```'ThemeName'					=> array('default', 'bootstrap', 'cust_theme1'),```

If you want your new theme to always display and remove the theme selection box in the footer, remove the other themes from this array so it looks like:
```'ThemeName'					=> array('cust_theme1'),```


How do I know if a theme I downloaded will work?
---------
As a general rule of thumb, if your new theme has a `manifest.php` file in the theme folder, it will work with current versions of FluxCP just fine.

If it doesn't have `manifest.php`, you will need to create one. This will make the new theme able to load, but you will still have problems.

In the past, even after this theme system was introduced, theme designers have still opted to create themes reliant on old versions of FluxCP. They are lazy. Use at your own risk.


================================================
FILE: error.php
================================================
<?php if (defined('__ERROR__') && $showExceptions): ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>rA's Flux Control Panel: Critical Error</title>
		<style type="text/css" media="screen">
			body {
				margin: 10px;
				padding: 0;
				font-family: "Lucida Grande", "Lucida Sans", sans-serif;
			}
			
			p {
				font-size: 85%;
			}
			
			pre {
				font-family: Monaco, "Lucida Console", monospace;
			}
			
			.heading {
				font-family: "Gill Sans", "Gill Sans MT", "Lucida Grande", "Lucida Sans", sans-serif;
				font-weight: normal;
				border-bottom: 1px solid #ddd;
			}
			
			.backtrace {
				font-size: 85%;
				border-spacing: 0;
				border-collapse: collapse;
				background-color: #fefefe;
			}
			
			.backtrace th, .backtrace td {
				padding: 5px;
				border: 1px solid #ccc;
			}
			
			.backtrace th {
				background-color: #eee;
			}
		</style>
	</head>
	
	<body>
		<h2 class="heading">Critical Error</h2>
		
		<p>An error was encountered during the lifetime of the application.</p>
		<p>This could be due to a variety of problems, such as a bug in the application.</p>
		<p><strong>However, normally it is caused by <em>misconfiguration</em>.</strong></p>
		
		<h2 class="heading">Exception Details</h2>
		<p>Error: <strong><?php echo get_class($e) ?></strong></p>
		<p>Message: <em><?php echo nl2br(htmlspecialchars($e->getMessage())) ?></em></p>
		<p>File: <?php echo $e->getFile() ?>:<?php echo $e->getLine() ?></p>
		
		<?php if (count($e->getTrace())): ?>
		<!-- Exception Backtrace -->
		<table class="backtrace">
			<tr>
				<th>File</th>
				<th>Line</th>
				<th>Function/Method</th>
			</tr>
			<?php foreach ($e->getTrace() as $trace): ?>
			<tr>
				<td><?php echo $trace['file'] ?></td>
				<td><?php echo $trace['line'] ?></td>
				<td><?php echo isset($trace['class']) ? "$trace[class]::$trace[function]" : $trace['function'] ?>()</td>
			</tr>
			<?php endforeach ?>
		</table>
		
		<h2 class="heading">Exception Trace As String</h2>
		<pre><?php echo htmlspecialchars(preg_replace('/PDO->__construct\\((.+?)\\)/', 'PDO->__construct(*hidden*)', $e->getTraceAsString())) ?></pre>
		<?php endif ?>
	</body>
</html>
<?php else: ?>
<h2>Error</h2>
<p>An error occurred while trying to process your request.</p>
<p>Please try contacting an administrator: <a href="mailto:<?php echo htmlspecialchars($adminEmail) ?>"><?php echo htmlspecialchars($adminEmail) ?></a></p>
<?php endif ?>


================================================
FILE: index.php
================================================
<?php

if( version_compare( PHP_VERSION, '7.3.0', '<' ) ){
	exit(
		sprintf(
			'FluxCP requires PHP 7.3.0 or higher. You are using PHP %s.',
			PHP_VERSION
		)
	);
}

// Time started.
define('__START__', microtime(true));

define('FLUX_ROOT',			str_replace('\\', '/', dirname(__FILE__)));
define('FLUX_DATA_DIR',		'data');
define('FLUX_CONFIG_DIR',	'config');
define('FLUX_LIB_DIR',		'lib');
define('FLUX_MODULE_DIR',	'modules');
define('FLUX_THEME_DIR',	'themes');
define('FLUX_ADDON_DIR',	'addons');
define('FLUX_LANG_DIR',		'lang');

// Clean GPC arrays in the event magic_quotes_gpc is enabled.
if (ini_get('magic_quotes_gpc')) {
	$gpc = array(&$_GET, &$_POST, &$_REQUEST, &$_COOKIE);
	foreach ($gpc as &$arr) {
		foreach ($arr as $key => $value) {
			if (is_string($value)) {
				$arr[$key] = stripslashes($value);
			}
		}
	}
}

set_include_path(FLUX_LIB_DIR.PATH_SEPARATOR.get_include_path());

// Default account group IDs.
require_once FLUX_CONFIG_DIR.'/groups.php';

// Some necessary Flux core libraries.
require_once 'Flux.php';
require_once 'Flux/Dispatcher.php';
require_once 'Flux/SessionData.php';
require_once 'Flux/DataObject.php';
require_once 'Flux/Authorization.php';
require_once 'Flux/Installer.php';
require_once 'Flux/PermissionError.php';

// Vendor libraries.

try {
	// Initialize Flux.
	Flux::initialize(array(
		'appConfigFile'           => FLUX_CONFIG_DIR.'/application.php',
		'serversConfigFile'       => FLUX_CONFIG_DIR.'/servers.php',
		'appConfigFileImport'     => FLUX_CONFIG_DIR.'/import/application.php',
		'serversConfigFileImport' => FLUX_CONFIG_DIR.'/import/servers.php',
	));

	// Set time limit.
	set_time_limit((int)Flux::config('ScriptTimeLimit'));

	// Set default timezone for entire app.
	$timezone = Flux::config('DateDefaultTimezone');
	if ($timezone && !@date_default_timezone_set($timezone)) {
		throw new Flux_Error("'$timezone' is not a valid timezone.  Consult http://php.net/timezones for a list of valid timezones.");
	}

	// Create some basic directories.
	$directories = array(
		FLUX_DATA_DIR.'/logs/schemas',
		FLUX_DATA_DIR.'/logs/schemas/logindb',
		FLUX_DATA_DIR.'/logs/schemas/charmapdb',
		FLUX_DATA_DIR.'/logs/transactions',
		FLUX_DATA_DIR.'/logs/mail',
		FLUX_DATA_DIR.'/logs/mysql',
		FLUX_DATA_DIR.'/logs/mysql/errors',
		FLUX_DATA_DIR.'/logs/errors',
		FLUX_DATA_DIR.'/logs/errors/exceptions',
		FLUX_DATA_DIR.'/logs/errors/mail',
	);

	// Schema log directories.
	foreach (Flux::$loginAthenaGroupRegistry as $serverName => $loginAthenaGroup) {
		$directories[] = FLUX_DATA_DIR."/logs/schemas/logindb/$serverName";
		$directories[] = FLUX_DATA_DIR."/logs/schemas/charmapdb/$serverName";

		foreach ($loginAthenaGroup->athenaServers as $athenaServer)
			$directories[] = FLUX_DATA_DIR."/logs/schemas/charmapdb/$serverName/{$athenaServer->serverName}";
	}

	foreach ($directories as $directory) {
		if (is_writable(dirname($directory)) && !is_dir($directory)) {
			if (Flux::config('RequireOwnership'))
				mkdir($directory, 0700);
			else
				mkdir($directory, 0777);
		}
	}

	if (Flux::config('RequireOwnership') && function_exists('posix_getuid'))
		$uid = posix_getuid();

	$directories = array(
		FLUX_DATA_DIR.'/logs'		=> 'log storage',
		FLUX_DATA_DIR.'/itemshop'	=> 'item shop image',
		FLUX_DATA_DIR.'/tmp'		=> 'temporary'
	);

	foreach ($directories as $directory => $directoryFunction) {
		$directory = realpath($directory);
		if (!is_dir($directory))
			mkdir($directory, 0600);
		if (!is_writable($directory) && is_dir($directory))
			throw new Flux_PermissionError("The $directoryFunction directory '$directory' is not writable.  Remedy with `chmod 0600 $directory`");
		if (Flux::config('RequireOwnership') && function_exists('posix_getuid') && fileowner($directory) != $uid)
			throw new Flux_PermissionError("The $directoryFunction directory '$directory' is not owned by the executing user.  Remedy with `chown -R ".posix_geteuid().":".posix_geteuid()." $directory`");
	}

	if (ini_get('session.use_trans_sid'))
		throw new Flux_Error("The 'session.use_trans_sid' php.ini configuration must be turned off for Flux to work.");

	// Installer library.
	$installer = Flux_Installer::getInstance();
	if ($hasUpdates=$installer->updateNeeded())
		Flux::config('ThemeName', array('installer'));

	$sessionKey = Flux::config('SessionKey');
	$sessionExpireDuration = Flux::config('SessionCookieExpire') * 60 * 60;

	$cookie_options = array(
		// Session timeout
		'lifetime' => $sessionExpireDuration,
		// Flux URL
		'path' => Flux::config( 'BaseURI' ),
		// Domain name for the cookie
		'domain' => preg_replace( '/:\d+$/', '', Flux::config( 'ServerAddress' ) ), // Remove port number if present (e.g. "example.com:80")
		// Only transfer the cookie via HTTPS
		'secure' => Flux::config( 'ForceHTTPS' ),
		// Only include the cookie in HTTP requests, making it inaccessible by Javascript
		'httponly' => true,
		// Only send the cookie to the domain+path defined above
		'samesite' => 'Strict'
	);
	
	if( !session_set_cookie_params( $cookie_options ) ){
		throw new Flux_Error( "Unable to configure the session cookie correctly" );
	}
	ini_set('session.gc_maxlifetime', $sessionExpireDuration);
	ini_set('session.name', $sessionKey);
	@session_start();

	if (empty($_SESSION[$sessionKey]) || !is_array($_SESSION[$sessionKey])) {
		$_SESSION[$sessionKey] = array();
	}

	// Initialize session data.
	Flux::$sessionData = new Flux_SessionData($_SESSION[$sessionKey], $hasUpdates);

	// Initialize authorization component.
	$accessConfig = Flux::parseConfigFile(FLUX_CONFIG_DIR.'/access.php');

	// Merge with add-on configs.
	foreach (Flux::$addons as $addon) {
		$accessConfig->merge($addon->accessConfig);
	}

	$accessConfig->set('unauthorized.index', AccountLevel::ANYONE);
	$authComponent = Flux_Authorization::getInstance($accessConfig, Flux::$sessionData);

	if (Flux::config('DebugMode')) {
		error_reporting(E_ALL);
		ini_set('display_errors', 1);
	}

	// Dispatch requests->modules->actions->views.
	$dispatcher = Flux_Dispatcher::getInstance();
	$dispatcher->setDefaultModule(Flux::config('DefaultModule'));
	$dispatcher->dispatch(array(
		'basePath'					=> Flux::config('BaseURI'),
		'useCleanUrls'				=> Flux::config('UseCleanUrls'),
		'modulePath'				=> FLUX_MODULE_DIR,
		'themePath'					=> FLUX_THEME_DIR,
		'themeName'                 => Flux::$sessionData->theme,
		'missingActionModuleAction'	=> Flux::config('DebugMode') ? array('errors', 'missing_action') : array('main', 'page_not_found'),
		'missingViewModuleAction'	=> Flux::config('DebugMode') ? array('errors', 'missing_view')   : array('main', 'page_not_found')
	));
}
catch (Exception $e) {
	$exceptionDir = FLUX_DATA_DIR.'/logs/errors/exceptions';
	if (is_writable($exceptionDir)) {
		require_once 'Flux/LogFile.php';
		$today = date('Ymd');
		$eLog  = new Flux_LogFile("$exceptionDir/$today.log");

		// Log exception.
		$eLog->puts('(%s) Exception %s: %s', get_class($e), get_class($e), $e->getMessage());
		foreach (explode("\n", $e->getTraceAsString()) as $traceLine) {
			$eLog->puts('(%s) **TRACE** %s', get_class($e), $traceLine);
		}
	}

	if(Flux::config('DiscordUseWebhook')) {
		if(Flux::config('DiscordSendOnErrorException')) {
			sendtodiscord(Flux::config('DiscordWebhookURL'), '```ansi
ERROR
Error: '. get_class($e) .'
Exception: '. $e->getMessage() .'
File: '. $e->getFile() .':'. $e->getLine() .'```');
		}
	}

	require_once FLUX_CONFIG_DIR.'/error.php';
	define('__ERROR__', 1);
	include $errorFile;
}
?>


================================================
FILE: lang/en_us.php
================================================
<?php
return array(
	// Generic/Misc.
	'Language'                => 'English',
	'YesLabel'                => 'Yes',
	'NoLabel'                 => 'No',
	'NoteLabel'               => 'Note',
	'GenderTypeMale'          => 'Male',
	'GenderTypeFemale'        => 'Female',
	'GenderTypeServer'        => 'Server',
	'RefreshSecurityCode'     => 'Refresh Security Code',
	'NoneLabel'               => 'None',
	'NeverLabel'              => 'Never',
	'NotApplicableLabel'      => 'Not Applicable',
	'UnknownLabel'            => 'Unknown',
	'IsEqualToLabel'          => 'is equal to',
	'IsGreaterThanLabel'      => 'is greater than',
	'IsLessThanLabel'         => 'is less than',
	'AllLabel'                => 'All',
	'SearchLabel'             => 'Search…',
	'GoBackLabel'             => 'Go back to previous page…',
	'SearchButton'            => 'Search',
	'ResetButton'             => 'Reset',
	'FilterButton'            => 'Filter',
	'NotAcceptingDonations'   => "We're sorry, but we are currently not accepting any donations.  We apologize for the inconvenience.",
	//'NotAcceptingDonations'   => "We're sorry, but our donation system is currently undergoing maintenance, please try again later.",
	'FoundSearchResults'      => 'Found a total of %d record(s) across %d page(s).  Displaying result(s) %d-%d.',
	'LoginToDonate'           => 'Please log-in to make a donation.',
	'UnknownCharacter'        => 'No such character found.',
	'AccountIdLabel'          => 'Account ID',
	'AccountGroupIDLabel'     => 'Group ID',
	'AccountStateLabel'       => 'State',
	'CreditBalanceLabel'      => 'Credit Balance',
	'UsernameLabel'           => 'Username',
	'PasswordLabel'           => 'Password',
	'EmailAddressLabel'       => 'E-mail',
	'GenderLabel'             => 'Gender',
	'LoginCountLabel'         => 'Login Count',
	'LastLoginDateLabel'      => 'Last Login Date',
	'LastUsedIpLabel'         => 'Last Used IP',
	'AccountStateNormal'      => 'Normal',
	'AccountStatePending'     => 'Pending',
	'AccountStatePermBanned'  => 'Permanently Banned',
	'AccountStateTempBanLbl'  => 'Temporarily Banned',
	'AccountStateTempBanned'  => 'Temp. Banned (unban: %s)',
	'OnlineLabel'             => 'Online',
	'OfflineLabel'            => 'Offline',
	'ItemIdLabel'             => 'Item ID',
	'ItemNameLabel'           => 'Item Name',
	'ItemAmountLabel'         => 'Amount',
	'ItemIdentifyLabel'       => 'Identified',
	'ItemRefineLabel'         => 'Refine',
	'ItemBrokenLabel'         => 'Broken',
	'ItemCard0Label'          => 'Slot 1',
	'ItemCard1Label'          => 'Slot 2',
	'ItemCard2Label'          => 'Slot 3',
	'ItemCard3Label'          => 'Slot 4',
 	'ItemRandOptionsLabel'    => 'Random options',

    //SIDEBAR
    //FluxCP Menu Items
    //Categories
    'MainMenuLabel'           => 'Main Menu',
    'ForumLabel'              => 'Forum',
    'AccountLabel'            => 'Account',
    'CharacterLabel'          => 'Character',
    'ServiceDeskLabel'        => 'Service Desk',
    'CPLogsLabel'             => 'CP Logs',
    'FluxAdminLabel'          => 'Flux Admin',
    'PagesLabel'              => 'Pages',
    'IPBanListLabel'          => 'IP Ban List',
    'GuildsLabel'             => 'Guilds',
    'rALogsLabel'             => 'rA Logs',
    'SendMailLabel'           => 'Send Mail',
    'ReInstallLabel'          => 'Re-Install',
    'TaskListLabel'           => 'Task List',
    'DonationsLabel'          => 'Donations',
    'InformationLabel'        => 'Information',
    'DatabaseLabel'           => 'Database',
    'SocialLabel'             => 'Social',
    //SubMenus
    'HomeLabel'               => 'Home',
    'NewsLabel'               => 'News',
    'DownloadsLabel'          => 'Downloads',
    'RulesLabel'              => 'Rules',
    'ContactUsLabel'          => 'Contact Us',
    'MyAccountLabel'          => 'My Account',
    'HistoryLabel'            => 'History',
    'PurchaseLabel'           => 'Purchase',
    'DonateLabel'             => 'Donate',
    'ServerInfoLabel'         => 'Server Info',
    'ServerStatusLabel'       => 'Server Status',
    'WoeHoursLabel'           => 'WOE Hours',
    'CastlesLabel'            => 'Castles',
    'WhosOnlineLabel'         => "Who's Online",
    'MapStaticsLabel'         => 'Map Statics',
    'RankingInfoLabel'        => 'Ranking Info',
    'VendingInfoLabel'        => 'Vending Info',
    'BuyingstoreInfoLabel'    => 'Buyingstore Info',
    'ItemDatabaseLabel'       => 'Item Database',
    'MobDatabaseLabel'        => 'Mob Database',
    'JoinUsInFacebookLabel'   => 'Join us on Facebook!',
    'RateUsOnRMSLabel'        => 'Rate us on RMS!',

	// Module: account
	// - account/changemail
	'EmailChangeTitle'        => 'Change E-mail',
	'EnterEmailAddress'       => 'Please enter an e-mail address.',
	'EmailCannotBeSame'       => 'Your new e-mail cannot be the same as your current.',
	'EmailInvalid'            => 'Invalid e-mail address.',
	'EmailAlreadyRegistered'  => "The e-mail address you've entered is already registered to another account.",
	'EmailChangeSent'         => 'An e-mail has been sent to your new address with a link that will confirm the change.',
	'EmailAddressChanged'     => 'Your e-mail address has been changed!',
	'EmailChangeFailed'       => 'Failed to change e-mail address.  Please try again later.',
	'EmailChangeHeading'      => 'Change E-mail',
	'EmailChangeInfo'         => 'If you would like to change the e-mail address registered under your account, you can fill out the below form.',
	'EmailChangeInfo2'        => 'After submitting the form, you will be required to confirm your new e-mail address (an e-mail will be sent to the new address with a link).',
	'EmailChangeLabel'        => 'New E-mail Address',
	'EmailChangeInputNote'    => 'Must be a valid e-mail address!',
	'EmailChangeButton'       => 'Change E-mail Address',
	// - account/changepass
	'PasswordChangeTitle'     => 'Change Password',
	'NeedCurrentPassword'     => 'Please enter your current password.',
	'NeedNewPassword'         => 'Please enter your new password.',
	'OldPasswordInvalid'      => "The password you provided doesn't match the one we have on record.",
	'ConfirmNewPassword'      => 'Please confirm your new password.',
	'NewPasswordHasUsername'  => 'Your new password must not contain your username.',
	'NewPasswordInvalid'      => 'Your new password contains invalid characters.',
	'NewPasswordSameAsOld'    => 'New password cannot be the same as your current password.',
	'NewPasswordNeedUpper'    => 'Your new password must contain at least %d uppercase letter(s).',
	'NewPasswordNeedLower'    => 'Your new password must contain at least %d lowercase letter(s).',
	'NewPasswordNeedNumber'   => 'Your new password must contain at least %d number(s).',
	'NewPasswordNeedSymbol'   => 'Your new password must contain at least %d symbol(s).',
	'PasswordHasBeenChanged'  => 'Your password has been changed, please log-in again.',
	'FailedToChangePassword'  => 'Failed to change your password.  Please contact an admin.',
	'PasswordChangeHeading'   => 'Change Your Password',
	'PasswordChangeInfo'      => 'Please enter your current password, then enter the new password you would like to use and re-enter it to confirm.',
	'CurrentPasswordLabel'    => 'Current Password',
	'NewPasswordLabel'        => 'New Password',
	'NewPasswordConfirmLabel' => 'Re-enter New Password',
	'PasswordChangeNote'      => 'Please be sure to enter the correct information.',
	'PasswordChangeNote2'     => 'After changing your password, you will be logged out.',
	'PasswordChangeButton'    => 'Change Password',
	// - account/changesex
	'GenderChangeTitle'       => 'Change Gender',
	'GenderChangeBadChars'    => 'You cannot change your gender if any of your characters is a: %s',
	'GenderChanged'           => 'Your gender has been changed and %d credit(s) have been deducted from your account.',
	'GenderChangedForFree'    => 'Your gender has been changed.',
	'GenderChangeHeading'     => 'Change Your Gender',
	'GenderChangeCost'        => 'Gender changes cost %s credit(s).',
	'GenderChangeBalance'     => 'Your current balance is %s credit(s).',
	'GenderChangeNoFunds'     => 'You do not have enough credits to perform a gender change at this time.',
	'GenderChangeNoCost'      => 'For you, gender changes are free.',
	'GenderChangeCharInfo'    => 'You cannot change gender if you have the follow character jobs: %s',
	'GenderChangeSubHeading'  => 'Please make sure you want to really change!',
	'GenderChangeFormText'    => 'Would you like to change your gender to %s?',
	'GenderChangeConfirm'     => 'Are you absolutely sure you want to change your gender?',
	'GenderChangeButton'      => 'Yes, do it please.',
	// - account/confirm
	'AccountConfirmTitle'     => 'Confirm Account',
	'AccountConfirmUnban'     => 'Account has been confirmed and activated.',
	'AccountConfirmMessage'   => 'Your account has been confirmed and activated, you may now log-in.',
	// - account/confirmemail
	'EmailConfirmTitle'       => 'Confirm E-mail',
	'EmailConfirmFailed'      => 'There has been a technical difficulty while updating your e-mail address, please contact an admin.',
	'EmailConfirmChanged'     => 'Your e-mail address has been changed!',
	// - account/create
	'AccountCreateTitle'      => 'Create an Account',
	'AccountConfirmBan'       => 'Awaiting account activation: %s',
	'AccountCreateEmailSent'  => 'An e-mail has been sent containing account activation details, please check your e-mail and activate your account to log-in.',
	'AccountCreateFailed'     => 'Your account has been created, but unfortunately we failed to send an e-mail due to technical difficulties. Please contact a staff member and request for assistance.',
	'AccountCreated'          => 'Congratulations, you have been registered successfully and automatically logged in.',
	'AccountCreateHeading'    => 'Register',
	'AccountCreateTerms'      => 'Terms of Service',
	'AccountCreateInfo'       => 'Please read our %s (ToS) before registering for an account, to ensure that you understand the rules of holding an account with our private Ragnarok Online game server.',
	'AccountCreateInfo2'      => 'By clicking "Create My Account", you agree to be bound by our %s.',
	'AccountCreateGenderInfo' => "The gender you choose here will affect your in-game character's gender!",
	'AccountServerLabel'      => 'Server',
	'AccountUsernameLabel'    => 'Your Username',
	'AccountPasswordLabel'    => 'Your Password',
	'AccountPassConfirmLabel' => 'Confirm Password',
	'AccountEmailLabel'       => 'E-mail Address',
    'AccountEmailLabel2'      => 'Confirm E-mail Address',
	'AccountGenderLabel'      => 'Gender',
	'AccountBirthdateLabel'   => 'Birthdate',
	'AccountSecurityLabel'    => 'Security Code',
	'AccountCreateButton'     => 'Create My Account',
	'AccountInvalidChars'     => "A username can only contain these characters: '%s'",
    'AccountRecaptchaKey'     => 'You need Recaptcha keys, see more in config/applications.php (ReCaptchaPublicKey/ReCaptchaPrivateKey)',
	'InvalidLoginServer'      => 'Invalid login server selected, please try again with a valid server.',
	'InvalidLoginCredentials' => 'Invalid login credentials, please verify that you typed the correct info and try again.',
	'UnexpectedLoginError'    => 'Unexpected error occurred, please try again or report to an admin.',
	'CriticalLoginError'      => 'Something bad happened.  Report to an administrator ASAP.',
	'UsernameAlreadyTaken'    => "The username you've chosen has already been taken by another user.",
	'UsernameTooShort'        => sprintf('Your username should be around %d to %d characters long.', Flux::config('MinUsernameLength'), Flux::config('MaxUsernameLength')),
	'UsernameTooLong'         => sprintf('Your username should be around %d to %d characters long.', Flux::config('MinUsernameLength'), Flux::config('MaxUsernameLength')),
	'PasswordContainsUser'    => 'Your password cannot contain your username.',
	'PasswordHasUsername'     => 'Your password must not contain your username.',
	'PasswordTooShort'        => 'Your password should be around %d to %d characters long.',
	'PasswordTooLong'         => 'Your password should be around %d to %d characters long.',
	'PasswordsDoNotMatch'     => "Your passwords do not match, please make sure that you've typed them both correctly.",
	'PasswordNeedUpper'       => 'Your password must contain at least %d uppercase letter(s).',
	'PasswordNeedLower'       => 'Your password must contain at least %d lowercase letter(s).',
	'PasswordNeedNumber'      => 'Your password must contain at least %d number(s).',
	'PasswordNeedSymbol'      => 'Your password must contain at least %d symbol(s).',
	'EmailAddressInUse'       => "The e-mail address you've entered is already registered to another account.  Please use a different e-mail address.",
	'InvalidEmailAddress'     => "The e-mail address you've entered is not in a valid e-mail address format.",
    'InvalidEmailconf'        => "E-mail addresses do not match.",
	'InvalidGender'           => 'Gender should be "M" or "F"',
	'InvalidServer'           => "The server you've selected does not exist.",
	'InvalidSecurityCode'     => 'Please enter the security code correctly.',
	'InvalidPassword'         => 'Your password contains invalid characters.',
	'InvalidBirthdate'        => 'Invalid birthdate input.',
	'CriticalRegisterError'   => 'Something bad happened.  Report to an administrator ASAP.',
	// - account/edit
	'AccountEditTitle'        => 'Modify Account',
	'AccountEditTitle2'       => 'Modifying My Account',
	'AccountEditTitle3'       => 'Modifiying Account (%s)',
	'CannotModifyOwnGroupID'  => 'You cannot modify your own account group ID.',
	'CannotModifyAnyGroupID'  => 'You cannot modify account group IDs.',
	'CannotModifyGroupIDHigh' => 'You cannot set an account group ID to be higher than your own.',
	'InvalidGroupID'          => 'Invalid group ID.',
	'CannotModifyBalance'     => 'You cannot modify account balances.',
	'InvalidLastLoginDate'    => 'Invalid last login date.',
	'InvalidVIPTime'          => 'Invalid VIP Time.',
	'AccountModified'         => 'Account has been modified.',
	'AccountEditHeading'      => 'Modify Account',
	'AccountEditButton'       => 'Modify Account',
	'AccountEditNotFound'     => 'No such account.',
	'VIPTimeDateLabel'        => 'VIP Until',
	// - account/index
	'AccountIndexTitle'       => 'List Accounts',
	'AccountIndexHeading'     => 'Accounts',
	'LoginBetweenLabel'       => 'Login Between',
	'BirthdateBetweenLabel'   => 'Birthdate Between',
	'AccountIndexNotFound'    => 'No such account.',
	// - account/login
	'LoginTitle'              => 'Log In',
	'LoginHeading'            => 'Log In',
	'LoginButton'             => 'Log In',
	'LoginPageMakeAccount'    => 'Don\'t have an account? <a href="%s">Create one!</a>',
	'TemporarilyBanned'       => 'Your account is temporarily banned.',
	'PermanentlyBanned'       => 'Your account is permanently banned.',
	'IpBanned'                => 'The IP address you are behind is banned.',
	'PendingConfirmation'     => 'Your account is pending e-mail confirmation.',
	// - account/logout
	'LogoutTitle'             => 'Logout',
	'LogoutHeading'           => 'Logout',
	'LogoutInfo'              => 'You are now logged out.',
	'LogoutInfo2'             => 'Please wait a moment while you are <a href="%s">redirected</a>…',
	// - account/resend
	'ResendTitle'             => 'Resend Confirmation E-mail',
	'ResendEnterUsername'     => 'Please enter your account username.',
	'ResendEnterEmail'        => 'Please enter your e-mail address.',
	'ResendFailed'            => 'Failed to resend confirmation code.',
	'ResendEmailSent'         => 'Your confirmation code has been resent, please check your e-mail and proceed to activate your account.',
	'ResendHeading'           => 'Resend Confirmation E-mail',
	'ResendInfo'              => 'Please enter your account name and e-mail address you used during the registration of the account to have us resend your confirmation e-mail.',
	'ResendServerLabel'       => 'Registered Server',
	'ResendAccountLabel'      => 'Account Username',
	'ResendEmailLabel'        => 'E-mail Address',
	'ResendServerInfo'        => 'This is the server the account was registered on.',
	'ResendAccountInfo'       => 'This is the account name you registered.',
	'ResendEmailInfo'         => 'This is the e-mail address you used during the registration of the above account.',
	'ResendButton'            => 'Resend Confirmation E-mail',
	// - account/resetpass
	'ResetPassTitle'          => 'Reset Password',
	'ResetPassEnterAccount'   => 'Please enter your account username.',
	'ResetPassEnterEmail'     => 'Please enter your e-mail address.',
	'ResetPassDisallowed'     => 'Password recovery cannot be used for this account.',
	'ResetPassFailed'         => 'Failed to send reset password e-mail.',
	'ResetPassEmailSent'      => 'An e-mail has been sent with details on how to reset your password.',
	'ResetPassInfo'           => 'If you lost your password, you can re-set it by entering the e-mail address you used to register your account.',
	'ResetPassInfo2'          => 'An e-mail will then be sent to the specified address with a link allowing you to reset your password, therefore a valid e-mail address is required.',
	'ResetPassServerLabel'    => 'Registered Server',
	'ResetPassAccountLabel'   => 'Account Username',
	'ResetPassEmailLabel'     => 'E-mail Address',
	'ResetPassServerInfo'     => 'This is the server the account was registered on.',
	'ResetPassAccountInfo'    => 'This is the account name you registered.',
	'ResetPassEmailInfo'      => 'This is the e-mail address you used during the registration of the above account.',
	'ResetPassButton'         => 'Send Reset Password E-mail',
	// - account/resetpw
	'ResetPwTitle'            => 'Reset Password',
	'ResetPwFailed'           => 'Failed to re-set password, please try again later.',
	'ResetPwDone'             => 'Your password has been reset and an e-mail containing your new password has been sent to you.',
	'ResetPwDone2'            => 'Your password has been reset, but we failed to deliver the e-mail containing your new password.  Please reset again to resolve this issue.',
	// - account/transfer
	'TransferTitle'           => 'Transfer Donation Credits',
	'TransferGreaterThanOne'  => 'You can only transfer credits in amounts greater than 1.',
	'TransferEnterCharName'   => 'You must input the character name of who will receive the credits.',
	'TransferNoCharExists'    => "Character '%s' does not exist. Please make sure you typed it correctly.",
	'TransferNoBalance'       => 'You do not have a sufficient balance to make the transfer.',
	'TransferUnexpectedError' => 'Unexpected error occurred.',
	'TransferSuccessful'      => 'Credits have been transferred!',
	'TransferHeading'         => 'Transfer Donation Credits',
	'TransferSubHeading'      => 'Credits will be transferred to a character on the %s server.',
	'TransferInfo'            => 'You currently have %s credit(s).',
	'TransferInfo2'           => 'Enter the amount you would like to transfer and the character name belonging to the account you would like your credits transferred to.',
	'TransferAmountLabel'     => 'Amount of Credits',
	'TransferCharNameLabel'   => 'Character Name',
	'TransferAmountInfo'      => 'This is the amount of credits you would like to send.',
	'TransferCharNameInfo'    => 'This is the character name of who will be receiving the credits.',
	'TransferConfirm'         => 'Are you sure you want to do this?',
	'TransferButton'          => 'Transfer',
	'TransferNoCredits'       => 'You have no credits available in your account.',
	// - account/view
	'VIPStateLabel'           => 'VIP Status',
	// * account/view submenus
	'ModifyAccountLink'       => 'Modify Account',
	'AccountViewTitle'        => 'View Account',
	'AccountViewTitle2'       => 'Viewing Account (%s)',
	'AccountViewTitle3'       => 'Viewing My Account',
	'AccountTempBanFailed'    => 'Failed to temporarily ban account.',
	'AccountPermBanFailed'    => 'Failed to permanently ban account.',
	'AccountTempBanUnauth'    => 'You are unauthorized to place temporary bans on this account.',
	'AccountPermBanUnauth'    => 'You are unauthorized to place permanent bans on this account.',
	'AccountLiftTempBan'      => 'Account has been unbanned.',
	'AccountLiftPermBan'      => 'Account has been unbanned.',
	'AccountLiftBanUnauth'    => "You are unauthorized to remove this account's ban status.",
	'AccountViewHeading'      => 'Viewing Account',
	'AccountViewDonateLink'   => '(Donate!)',
	'AccountViewTempBanLabel' => 'Temporary Ban',
	'AccountViewPermBanLabel' => 'Permanent Ban',
	'AccountViewUnbanLabel'   => 'Remove Ban',
	'AccountBanReasonLabel'   => 'Reason:',
	'AccountBanUntilLabel'    => 'Ban Until:',
	'AccountTempBanButton'    => 'Ban Account',
	'AccountPermBanButton'    => 'Permanently Ban Account',
	'AccountTempUnbanButton'  => 'Remove Temporary Ban',
	'AccountPermUnbanButton'  => 'Remove Permanent Ban',
	'AccountBanConfirm'       => 'Are you sure?',
	'AccountBanLogSubHeading' => 'Ban Log for %s (recent to oldest)',
	'BanLogBanTypeLabel'      => 'Ban Type',
	'BanLogBanDateLabel'      => 'Ban Date',
	'BanLogBanReasonLabel'    => 'Ban Reason',
	'BanLogBannedByLabel'     => 'Banned By',
	'BanLogBannedByCP'        => 'Control Panel',
	'BanTypeUnbanned'         => 'Unbanned',
	'BanTypePermBanned'       => 'Permanently Banned',
	'BanTypeTempBanned'       => 'Temporarily Banned',
	'AccountViewCharSubHead'  => 'Characters on %s',
	'AccountViewSlotLabel'    => 'Slot',
	'AccountViewCharLabel'    => 'Character Name',
	'AccountViewClassLabel'   => 'Job Class',
	'AccountViewLvlLabel'     => 'Base Level',
	'AccountViewJlvlLabel'    => 'Job Level',
	'AccountViewZenyLabel'    => 'Zeny',
	'AccountViewGuildLabel'   => 'Guild',
	'AccountViewStatusLabel'  => 'Status',
	'AccountViewPrefsLabel'   => 'Preferences',
	'CharModifyPrefsLink'     => 'Modify Preferences',
	'AccountViewNoChars'      => 'This account has no characters on %s.',
	'AccountViewStorage'      => 'Storage Items of %s',
	'AccountViewStorageCount' => '%s has %s storage item(s).',
	'AccountViewNoStorage'    => 'There are no storage items on this account.',
	'AccountViewNotFound'     => "Records indicate that the account you're trying to view does not exist.",
	// - account/xferlog
	'XferLogTitle'            => 'Credit Transfer History',
	'XferLogHeading'          => 'Credit Transfer History',
	'XferLogReceivedSubHead'  => 'Transfers: Received',
	'XferLogSentSubHead'      => 'Transfers: Sent',
	'XferLogCreditsLabel'     => 'Credits',
	'XferLogFromLabel'        => 'From E-mail',
	'XferLogDateLabel'        => 'Transfer Date',
	'XferLogCharNameLabel'    => 'To Character',
	'XferLogNotReceived'      => 'You have not received any credit transfers.',
	'XferLogNotSent'          => 'You have not sent any credit transfers.',

	// Module: character
	// - character/changeslot
	// - character/index
	// - character/mapstats
	// - character/online
	// - character/prefs
	// - character/resetlook
	'CantResetLookWhenOnline' => 'Cannot reset look while %s is online.',
	'ResetLookSuccessful'     => "%s's look has been reset!",
	'ResetLookFailed'         => "Failed to reset %s's look.",
	// - character/resetpos
	'CantResetPosWhenOnline'  => 'Cannot reset position while %s is online.',
	'CantResetFromCurrentMap' => "You cannot reset %s's position from the current map.",
	'ResetPositionSuccessful' => "%s's position has been reset!",
	'ResetPositionFailed'     => "Failed to reset %s's position.",
	// - character/view
	// - character/divorce
	'DivorceTitle'            => 'Divorce',
	'DivorceHeading'          => 'Divorce',
	'DivorceNotMarried'       => '%s is not married.',
	'DivorceInvalidPartner'   => 'Invalid partner ID.',
	'DivorceInvalidChild'     => 'Invalid child ID.',
	'DivorceMustBeOffline'    => 'Both %s and his/her partner must be off-line.',
	'DivorceMustBeOffline2'   => '%s, his/her partner and their child must be off-line.',
	'DivorceText1'            => "Are you sure you want to divorce %s and his/her partner?",
	'DivorceText2'            => 'If %s has a child, the child will also be orphaned.',
	'DivorceText3'            => 'Wedding rings will also be deleted.',
	'DivorceButton'           => 'Yes, do it please.',
	'DivorceSuccessful'       => '%s has been divorced!',

	// Module: cplog
	// - cplog/index.php
	// - cplog/login.php
	// - cplog/paypal.php
	// - cplog/resetpass.php
	// - cplog/txnview.php

	// Module: donate
	// - donate/complete
	// - donate/history
	// - donate/index
	// - donate/trusted

	// Module: errors
	// - errors/missing_action
	'MissingActionTitle'      => 'Missing Action',
	'MissingActionHeading'    => 'Missing Action!',
	'MissingActionModLabel'   => 'Module:',
	'MissingActionActLabel'   => 'Action:',
	'MissingActionReqLabel'   => 'Request URI:',
	'MissingActionLocLabel'   => 'File system location:',
	// - errors/missing_view
	'MissingViewTitle'        => 'Missing View',
	'MissingViewHeading'      => 'Missing View!',
	'MissingViewModLabel'     => 'Module:',
	'MissingViewActLabel'     => 'Action:',
	'MissingViewReqLabel'     => 'Request URI:',
	'MissingViewLocLabel'     => 'File system location:',

	// Module: guild
	// - guild/export
	// - guild/index
	// - guild/view

	// Module: history
	// - history/cplogin
	'HistoryCpLoginTitle'     => 'Control Panel Logins',
	'HistoryCpLoginHeading'   => 'Control Panel Logins',
	'HistoryLoginDateLabel'   => 'Login Date/Time',
	'HistoryIpAddrLabel'      => 'IP Address',
	'HistoryErrorCodeLabel'   => 'Error Code',
	'HistoryNoCpLogins'       => 'No control panel login attempts found.',
	// -history/emailchange
	'HistoryEmailTitle'       => 'E-Mail Changes',
	'HistoryEmailHeading'     => 'E-Mail Changes',
	'HistoryEmailRequestDate' => 'Request Date/Time',
	'HistoryEmailRequestIp'   => 'Request IP',
	'HistoryEmailOldAddress'  => 'Old E-Mail',
	'HistoryEmailNewAddress'  => 'New E-Mail',
	'HistoryEmailChangeDate'  => 'Change Date',
	'HistoryEmailChangeIp'    => 'Change IP',
	'HistoryNoEmailChanges'   => 'No e-mail change attempts found.',
	// - history/gamelogin
	'HistoryGameLoginTitle'   => 'Game Logins',
	'HistoryGameLoginHeading' => 'Game Logins',
	'HistoryRepsCodeLabel'    => 'Response Code',
	'HistoryLogMessageLabel'  => 'Log Message',
	'HistoryNoGameLogins'     => 'No in-game login attempts found.',
	// - history/index
	'HistoryIndexTitle'       => 'My Account History',
	'HistoryIndexHeading'     => 'My Account History',
	'HistoryIndexInfo'        => 'Here you can view past account activity of your account.',
	'HistoryIndexInfo2'       => 'Please select an action from the menu.',
	// - history/passchange
	'HistoryPassChangeTitle'      => 'Password Changes',
	'HistoryPassChangeHeading'    => 'Password Changes',
	'HistoryPassChangeChangeDate' => 'Change Date',
	'HistoryPassChangeChangeIp'   => 'Change IP',
	'HistoryNoPassChanges'        => 'No password changes found.',
	// -history/passreset
	'HistoryPassResetTitle'       => 'Password Resets',
	'HistoryPassResetHeading'     => 'Password Resets',
	'HistoryPassResetRequestDate' => 'Request Date/Time',
	'HistoryPassResetRequestIp'   => 'Request IP',
	'HistoryPassResetResetDate'   => 'Reset Date',
	'HistoryPassResetResetIp'     => 'Reset IP',
	'HistoryNoPassResets'         => 'No password reset attempts found.',

	// Module: ipban
	// - ipban/add
	'IpbanAddTitle'           => 'Add IP Ban',
	'IpbanEnterIpPattern'     => 'Please input an IP address or pattern.',
	'IpbanInvalidPattern'     => 'Invalid IP address or pattern.',
	'IpbanWhitelistedPattern' => 'This pattern is whitelisted and cannot be blocked.',
	'IpbanEnterReason'        => 'Please enter a reason for the IP ban.',
	'IpbanSelectUnbanDate'    => 'Unban date is required.',
	'IpbanFutureDate'         => 'Unban date must be specified to a future date.',
	'IpbanAlreadyBanned'      => 'A matching IP (%s) has already been banned.',
	'IpbanPatternBanned'      => "The IP address/pattern '%s' has been banned.",
	'IpbanAddFailed'          => 'Failed to add IP ban.',
	'IpbanAddHeading'         => 'Add IP Ban',
	'IpbanIpAddressLabel'     => 'IP Address',
	'IpbanReasonLabel'        => 'Ban Reason',
	'IpbanUnbanDateLabel'     => 'Unban Date',
	'IpbanIpAddressInfo'      => 'You may specify a pattern such as 218.139.*.*',
	'IpbanAddButton'          => 'Add IP Ban',
	// - ipban/edit
	'IpbanEditTitle'          => 'Modify IP Ban',
	'IpbanEnterEditReason'    => 'Please enter a reason for the IP ban modification.',
	'IpbanEditFailed'         => 'Failed to modify IP ban.',
	'IpbanEditHeading'        => 'Modify IP Ban',
	'IpbanEditReasonLabel'    => 'Edit Reason',
	'IpbanEditButton'         => 'Modify IP Ban',
	// - ipban/index
	'IpbanListTitle'          => 'IP Ban List',
	'IpbanListHeading'        => 'IP Ban List',
	'IpbanBannedIpLabel'      => 'Banned IP',
	'IpbanBanDateLabel'       => 'Ban Date',
	'IpbanBanReasonLabel'     => 'Ban Reason',
	'IpbanBanExpireLabel'     => 'Ban Expiration Date',
	'IpbanModifyLink'         => 'Modify',
	'IpbanRemoveLink'         => 'Remove',
	'IpbanUnbanButton'        => 'Unban Selected',
	'IpbanListNoBans'         => 'There are currently no IP bans.',
	// - ipban/remove
	'IpbanRemoveTitle'        => 'Remove IP Ban',
	'IpbanEnterRemoveReason'  => 'Please enter a reason for the IP ban removal.',
	'IpbanNotBanned'          => 'No matching IP (%s) is currently banned.',
	'IpbanPatternUnbanned'    => "The IP address/pattern '%s' has been unbanned.",
	'IpbanRemoveFailed'       => 'Failed to remove IP ban.',
	'IpbanRemoveHeading'      => 'Remove IP Ban',
	'IpbanRemoveReasonLabel'  => 'Unban Reason',
	'IpbanRemoveButton'       => 'Remove IP Ban',
	// - ipban/unban
	'IpbanNothingToUnban'     => 'Nothing to unban.',
	'IpbanEnterUnbanReason'   => 'Please enter a reason for lifting the IP ban(s).',
	'IpbanUnbanned'           => 'Lifted selected IP ban(s)!',
	'IpbanUnbanFailed'        => 'Failed to lift %d of the specified IP unban(s)!',

	// Module: item
	// - item/add
	// - item/copy
	// - item/edit
	// - item/index
	// - item/view

	// Module: itemshop
	// - itemshop/add
	// - itemshop/delete
	// - itemshop/edit
	// - itemshop/imagedel

	// Module: logdata
	// - logdata/chat
	// - logdata/cashpoints
	'CashLogTitle'            => 'List CashPoints Log',
	'CashLogHeading'          => 'CashPoint Log',
	'CashLogNotFound'         => 'No cash logs found.',
	'CashLogDateLabel'        => 'Date/Time',
	'CashLogCharacterLabel'   => 'Character',
	'CashLogTypeLabel'        => 'Type',
	'CashLogCashTypeLabel'    => 'Cash Type',
	'CashLogAmountLabel'      => 'Amount',
	'CashLogMapLabel'         => 'Map',
	// - logdata/command
	'CommandLogTitle'         => 'List Commands',
	'CommandLogHeading'       => 'Commands',
	'CommandLogNotFound'      => 'No commands found.',
	'CommandLogDateLabel'     => 'Date/Time',
	'CommandLogAccountIdLabel'=> 'Account ID',
	'CommandLogCharIdLabel'   => 'Character ID',
	'CommandLogCharNameLabel' => 'Character Name',
	'CommandLogCommandLabel'  => 'Command',
	'CommandLogMapLabel'      => 'Map',
	// - logdata/index
	// - logdata/login
	// - logdata/pick
	'PickLogTitle'            => 'List Item Picks',
	'PickLogHeading'          => 'Item Picks',
	'PickLogNotFound'         => 'No item picks found.',
	'PickLogDateLabel'        => 'Date/Time',
	'PickLogCharacterLabel'   => 'Character',
	'PickLogTypeLabel'        => 'Type',
	'PickLogItemLabel'        => 'Item Name',
	'PickLogAmountLabel'      => 'Amount',
	'PickLogRefineLabel'      => 'Refine',
	'PickLogCard0Label'       => 'Slot 1',
	'PickLogCard1Label'       => 'Slot 2',
	'PickLogCard2Label'       => 'Slot 3',
	'PickLogCard3Label'       => 'Slot 4',
	'PickLogMapLabel'         => 'Map',
	//	- logdata/branch
	'BranchLogTitle'            => 'List Branch Log',
	'BranchLogHeading'          => 'Branch Log',
	'BranchLogNotFound'         => 'No branch logs found.',
	'BranchLogIDLabel'          => 'Branch Log ID',
	'BranchLogDateLabel'        => 'Date / Time',
	'BranchLogAccountIDLabel'   => 'Account ID',
	'BranchLogCharIDLabel'      => 'Char ID',
	'BranchLogCharNameLabel'    => 'Char Name',
	'BranchLogMapLabel'         => 'Map',
	// - logdata/char
	'CharLogTitle'            => 'List Character Log',
	'CharLogHeading'          => 'Character Log',
	'CharLogNotFound'         => 'No character logs found.',
	'CharLogDateLabel'        => 'Date / Time',
	'CharLogMsgLabel'         => 'Action',
	'CharLogAccountIDLabel'   => 'Account ID',
	'CharLogCharNumLabel'     => 'Character slot',
	'CharLogCharNameLabel'    => 'Character Name',
	//	- logdata/inter
	'InterLogTitle'            => 'List of Interactions Log',
	'InterLogHeading'          => 'Interactions Log',
	'InterLogNotFound'         => 'No Interactions logs found.',
	'InterLogDateLabel'        => 'Date / Time',
	'InterLogLabel'            => 'Interactions Log',
	//	- logdata/mvp
	'MVPLogTitle'            => 'List MVP Log',
	'MVPLogHeading'          => 'MVP Log',
	'MVPLogNotFound'         => 'No MVP logs found.',
	'MVPLogIDLabel'          => 'MVP Log ID',
	'MVPLogDateLabel'        => 'Date / Time',
	'MVPLogCharacterLabel'   => 'Character ID',
	'MVPLogMonsterLabel'     => 'MVP Monster',
	'MVPLogPrizeLabel'       => 'MVP Prize',
	'MVPLogExpLabel'         => 'MVP Experience',
	'MVPLogMapLabel'         => 'Map',
	//	- logdata/npc
	'NPCLogTitle'            => 'List NPC Log',
	'NPCLogHeading'          => 'NPC Log',
	'NPCLogNotFound'         => 'No npc logs found.',
	'NPCLogIDLabel'          => 'NPC ID',
	'NPCLogDateLabel'        => 'Date / Time',
	'NPCLogAccountIDLabel'   => 'Account ID',
	'NPCLogCharIDLabel'      => 'Character ID',
	'NPCLogCharNameLabel'    => 'Character Name',
	'NPCLogMapLabel'         => 'Map',
	'NPCLogMsgLabel'         => 'Message',
	// - logdata/zeny
	'ZenyLogTitle'            => 'List Zeny Log',
	'ZenyLogHeading'          => 'Zeny Log',
	'ZenyLogNotFound'         => 'No zeny logs found.',
	'ZenyLogDateLabel'        => 'Date/Time',
	'ZenyLogCharacterLabel'   => 'Character',
	'ZenyLogSourceLabel'      => 'Source',
	'ZenyLogTypeLabel'        => 'Type',
	'ZenyLogAmountLabel'      => 'Amount',
	'ZenyLogMapLabel'         => 'Map',
	// - logdata/feeding
	'FeedingLogTitle' => 'Feeding Log',

	// Module: mail
	// - mail/index
	'MailerTitle'             => 'Form Mailer',
	'MailerHeading'           => 'Form Mailer',
	'MailerEnterToAddress'    => 'Please enter a "to" address.',
	'MailerEnterSubject'      => 'Please enter a subject.',
	'MailerEnterBodyText'     => 'Please enter some body text.',
	'MailerEmailHasBeenSent'  => 'Your e-mail has been successfully sent.',
	'MailerFailedToSend'      => 'The mailer system failed to send the e-mail.  This could be a misconfiguration.',
	'MailerInfo'              => 'You may use the below mail form to send an e-mail using the control panel.',
	'MailerFromLabel'         => 'From',
	'MailerToLabel'           => 'Where are we sending this?',
	'MailerSubjectLabel'      => 'Subject',
	'MailerBodyLabel'         => 'Body',
	'MailerSelectTemplateLabel'   => 'Select Template',

	// Module: main
	// - main/index
	'MainPageHeading'         => 'Flux Control Panel',
	'MainPageInfo'            => "If you are seeing this page, it's likely that you've successfully installed Flux.",
	'MainPageInfo2'           => "Would you like to change this page? Well, here's how you can:",
	'MainPageStep1'           => 'Open "%s" in your text editor.',
	'MainPageStep2'           => 'Edit the file from your editor and save your changes.',
	'MainPageThanks'          => 'Thanks for using Flux!',
	'MainPageWelcome'         => 'Welcome to %s!',
	// - main/pagenotfound
	'PageNotFoundTitle'       => '404 Page Not Found',
	'Pag
Download .txt
gitextract_z0fge0vx/

├── .deepsource.toml
├── .editorconfig
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── enhancement_request.yml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── pull_request_template.md
│   ├── pull_request_template.md
│   └── workflows/
│       └── codeql.yml
├── .gitignore
├── .htaccess
├── LICENSE
├── README.md
├── addons/
│   └── helloworld/
│       ├── config/
│       │   ├── access.php
│       │   └── addon.php
│       ├── lang/
│       │   ├── en_us.php
│       │   └── ko_kr.php
│       ├── modules/
│       │   └── helloworld/
│       │       └── index.php
│       └── themes/
│           └── default/
│               └── helloworld/
│                   └── index.php
├── config/
│   ├── .htaccess
│   ├── access.php
│   ├── application.php
│   ├── attributes.php
│   ├── cashshopcategories.php
│   ├── castlenames.php
│   ├── elements.php
│   ├── equip_jobs.php
│   ├── equip_location_combinations.php
│   ├── equip_locations.php
│   ├── equip_upper.php
│   ├── error.php
│   ├── feedingtypes.php
│   ├── groups.php
│   ├── homunculus.php
│   ├── item_randoptions.php
│   ├── itemsflags.php
│   ├── itemsubtypes.php
│   ├── itemtypes.php
│   ├── jobs.php
│   ├── jobs_alchemist.php
│   ├── jobs_blacksmith.php
│   ├── jobs_gender_linked.php
│   ├── loginerrors.php
│   ├── monster_ai.php
│   ├── monstermode.php
│   ├── picktypes.php
│   ├── races.php
│   ├── servers.php
│   ├── shopcategories.php
│   ├── sizes.php
│   └── trade_restrictions.php
├── data/
│   ├── captcha/
│   │   ├── fonts/
│   │   │   └── index.html
│   │   └── index.html
│   ├── emblem/
│   │   └── index.html
│   ├── index.html
│   ├── items/
│   │   ├── icons/
│   │   │   └── index.html
│   │   ├── images/
│   │   │   └── index.html
│   │   └── index.html
│   ├── itemshop/
│   │   └── index.html
│   ├── jobs/
│   │   ├── images/
│   │   │   ├── F/
│   │   │   │   └── index.html
│   │   │   ├── M/
│   │   │   │   └── index.html
│   │   │   └── index.html
│   │   └── index.html
│   ├── logs/
│   │   └── index.html
│   ├── monsters/
│   │   └── index.html
│   ├── npc/
│   │   ├── DonationNPC.txt
│   │   ├── PeakNPC.txt
│   │   ├── index.html
│   │   ├── support_cmd.txt
│   │   └── web_commands.txt
│   ├── paypal/
│   │   ├── button.php
│   │   └── index.html
│   ├── schemas/
│   │   ├── charmapdb/
│   │   │   ├── cp_charprefs.20080929191525.sql
│   │   │   ├── cp_charprefs.20081109093448.sql
│   │   │   ├── cp_charprefs.20120816150540.sql
│   │   │   ├── cp_commands.20160608065501.sql
│   │   │   ├── cp_itemdesc.20170210033400.sql
│   │   │   ├── cp_itemshop.20080928225124.sql
│   │   │   ├── cp_itemshop.20081109093448.sql
│   │   │   ├── cp_itemshop.20081128093449.sql
│   │   │   ├── cp_itemshop.20090104190020.sql
│   │   │   ├── cp_onlinepeak.20131120120201.sql
│   │   │   ├── cp_redeemlog.20080928225124.sql
│   │   │   ├── cp_redeemlog.20081001054354.sql
│   │   │   ├── cp_redeemlog.20081109093448.sql
│   │   │   ├── cp_xferlog.20080928225124.sql
│   │   │   ├── cp_xferlog.20081109093448.sql
│   │   │   └── index.html
│   │   ├── index.html
│   │   └── logindb/
│   │       ├── cp_banlog.20131213174201.sql
│   │       ├── cp_cmsnews.20131120145701.sql
│   │       ├── cp_cmspages.20131120161901.sql
│   │       ├── cp_cmssettings.20131120145801.sql
│   │       ├── cp_createlog.20131213174201.sql
│   │       ├── cp_createlog.20170720151901.sql
│   │       ├── cp_createlog.20250614124331.sql
│   │       ├── cp_credits.20131213174201.sql
│   │       ├── cp_emailchange.20131213174201.sql
│   │       ├── cp_emailchange.20250609133400.sql
│   │       ├── cp_ipbanlog.20120816150540.sql
│   │       ├── cp_ipbanlog.20250609133400.sql
│   │       ├── cp_loginlog.20131213174201.sql
│   │       ├── cp_loginlog.20250609133400.sql
│   │       ├── cp_loginprefs.20131213174201.sql
│   │       ├── cp_pwchange.20131213174201.sql
│   │       ├── cp_pwchange.20250609133400.sql
│   │       ├── cp_resetpass.20131213174201.sql
│   │       ├── cp_resetpass.20250609133400.sql
│   │       ├── cp_servicedesk.20131122010001.sql
│   │       ├── cp_servicedesk.20250609133400.sql
│   │       ├── cp_servicedeska.20131122010001.sql
│   │       ├── cp_servicedeska.20250609133400.sql
│   │       ├── cp_servicedeskcat.20131122010001.sql
│   │       ├── cp_servicedesksettings.20131122010001.sql
│   │       ├── cp_trusted.20131213174201.sql
│   │       ├── cp_txnlog.20131213174201.sql
│   │       ├── cp_txnlog.20170217073601.sql
│   │       ├── cp_txnlog.20170221184601.sql
│   │       └── index.html
│   ├── templates/
│   │   ├── changemail.php
│   │   ├── confirm.php
│   │   ├── contactform.php
│   │   ├── index.html
│   │   ├── marketing1.php
│   │   ├── newpass.php
│   │   ├── newticket.php
│   │   ├── resetpass.php
│   │   └── ticketreply.php
│   └── tmp/
│       ├── index.html
│       └── transactions/
│           ├── Refunded/
│           │   └── index.html
│           ├── Reversed/
│           │   └── index.html
│           └── web_accept/
│               ├── Completed/
│               │   └── index.html
│               ├── Denied/
│               │   └── index.html
│               └── Pending/
│                   └── index.html
├── doc/
│   ├── user_lang.md
│   └── user_theme.md
├── error.php
├── index.php
├── lang/
│   ├── en_us.php
│   ├── es_es.php
│   ├── id_id.php
│   └── pt_br.php
├── lib/
│   ├── Flux/
│   │   ├── Addon.php
│   │   ├── Athena.php
│   │   ├── Authorization.php
│   │   ├── BaseServer.php
│   │   ├── Captcha.php
│   │   ├── CharServer.php
│   │   ├── Config.php
│   │   ├── Connection/
│   │   │   ├── Statement.php
│   │   │   └── index.html
│   │   ├── Connection.php
│   │   ├── DataObject.php
│   │   ├── Dispatcher.php
│   │   ├── EmblemExporter.php
│   │   ├── Error.php
│   │   ├── FileLoad.php
│   │   ├── Installer/
│   │   │   ├── CharMapServer.php
│   │   │   ├── MainServer.php
│   │   │   ├── Schema.php
│   │   │   ├── SchemaPermissionError.php
│   │   │   └── index.html
│   │   ├── Installer.php
│   │   ├── ItemExistsError.php
│   │   ├── ItemShop/
│   │   │   ├── Cart.php
│   │   │   └── index.html
│   │   ├── ItemShop.php
│   │   ├── LogFile.php
│   │   ├── LoginAthenaGroup.php
│   │   ├── LoginError.php
│   │   ├── LoginServer.php
│   │   ├── Mailer.php
│   │   ├── MapServer.php
│   │   ├── Paginator.php
│   │   ├── PaymentNotifyRequest.php
│   │   ├── PermissionError.php
│   │   ├── RegisterError.php
│   │   ├── SessionData.php
│   │   ├── Template.php
│   │   ├── TemporaryTable.php
│   │   └── index.html
│   ├── Flux.php
│   ├── functions/
│   │   ├── discordwebhook.php
│   │   ├── getReposVersion.php
│   │   ├── imagecreatefrombmpstring.php
│   │   └── index.html
│   ├── index.html
│   └── phpmailer/
│       ├── LICENSE
│       ├── PHPMailerAutoload.php
│       ├── VERSION
│       ├── class.phpmailer.php
│       ├── class.pop3.php
│       ├── class.smtp.php
│       ├── extras/
│       │   ├── EasyPeasyICS.php
│       │   ├── README.md
│       │   ├── htmlfilter.php
│       │   └── ntlm_sasl_client.php
│       ├── index.html
│       └── language/
│           ├── index.html
│           ├── phpmailer.lang-am.php
│           ├── phpmailer.lang-ar.php
│           ├── phpmailer.lang-az.php
│           ├── phpmailer.lang-be.php
│           ├── phpmailer.lang-bg.php
│           ├── phpmailer.lang-br.php
│           ├── phpmailer.lang-ca.php
│           ├── phpmailer.lang-ch.php
│           ├── phpmailer.lang-cs.php
│           ├── phpmailer.lang-cz.php
│           ├── phpmailer.lang-da.php
│           ├── phpmailer.lang-de.php
│           ├── phpmailer.lang-dk.php
│           ├── phpmailer.lang-el.php
│           ├── phpmailer.lang-eo.php
│           ├── phpmailer.lang-es.php
│           ├── phpmailer.lang-et.php
│           ├── phpmailer.lang-fa.php
│           ├── phpmailer.lang-fi.php
│           ├── phpmailer.lang-fo.php
│           ├── phpmailer.lang-fr.php
│           ├── phpmailer.lang-gl.php
│           ├── phpmailer.lang-he.php
│           ├── phpmailer.lang-hr.php
│           ├── phpmailer.lang-hu.php
│           ├── phpmailer.lang-id.php
│           ├── phpmailer.lang-it.php
│           ├── phpmailer.lang-ja.php
│           ├── phpmailer.lang-ka.php
│           ├── phpmailer.lang-ko.php
│           ├── phpmailer.lang-lt.php
│           ├── phpmailer.lang-lv.php
│           ├── phpmailer.lang-ms.php
│           ├── phpmailer.lang-nb.php
│           ├── phpmailer.lang-nl.php
│           ├── phpmailer.lang-no.php
│           ├── phpmailer.lang-pl.php
│           ├── phpmailer.lang-pt.php
│           ├── phpmailer.lang-pt_br.php
│           ├── phpmailer.lang-ro.php
│           ├── phpmailer.lang-ru.php
│           ├── phpmailer.lang-se.php
│           ├── phpmailer.lang-sk.php
│           ├── phpmailer.lang-sl.php
│           ├── phpmailer.lang-sr.php
│           ├── phpmailer.lang-sv.php
│           ├── phpmailer.lang-tr.php
│           ├── phpmailer.lang-uk.php
│           ├── phpmailer.lang-vi.php
│           ├── phpmailer.lang-zh.php
│           └── phpmailer.lang-zh_cn.php
├── modules/
│   ├── .htaccess
│   ├── account/
│   │   ├── cart.php
│   │   ├── changemail.php
│   │   ├── changepass.php
│   │   ├── changesex.php
│   │   ├── confirm.php
│   │   ├── confirmemail.php
│   │   ├── create.php
│   │   ├── edit.php
│   │   ├── index.php
│   │   ├── login.php
│   │   ├── logout.php
│   │   ├── pagemenu/
│   │   │   └── view.php
│   │   ├── prune.php
│   │   ├── resend.php
│   │   ├── resetpass.php
│   │   ├── resetpw.php
│   │   ├── transfer.php
│   │   ├── view.php
│   │   └── xferlog.php
│   ├── auction/
│   │   └── index.php
│   ├── buyingstore/
│   │   ├── index.php
│   │   └── viewshop.php
│   ├── captcha/
│   │   └── index.php
│   ├── castle/
│   │   └── index.php
│   ├── character/
│   │   ├── changeslot.php
│   │   ├── divorce.php
│   │   ├── index.php
│   │   ├── mapstats.php
│   │   ├── online.php
│   │   ├── pagemenu/
│   │   │   └── view.php
│   │   ├── prefs.php
│   │   ├── resetlook.php
│   │   ├── resetpos.php
│   │   └── view.php
│   ├── cplog/
│   │   ├── ban.php
│   │   ├── changemail.php
│   │   ├── changepass.php
│   │   ├── create.php
│   │   ├── index.php
│   │   ├── ipban.php
│   │   ├── login.php
│   │   ├── paypal.php
│   │   ├── resetpass.php
│   │   └── txnview.php
│   ├── donate/
│   │   ├── complete.php
│   │   ├── history.php
│   │   ├── index.php
│   │   ├── notify.php
│   │   ├── trusted.php
│   │   └── update.php
│   ├── economy/
│   │   └── index.php
│   ├── errors/
│   │   ├── missing_action.php
│   │   └── missing_view.php
│   ├── forum/
│   │   └── index.php
│   ├── guild/
│   │   ├── emblem.php
│   │   ├── export.php
│   │   ├── index.php
│   │   └── view.php
│   ├── history/
│   │   ├── cplogin.php
│   │   ├── emailchange.php
│   │   ├── gamelogin.php
│   │   ├── index.php
│   │   ├── passchange.php
│   │   └── passreset.php
│   ├── install/
│   │   ├── index.php
│   │   └── reinstall.php
│   ├── ipban/
│   │   ├── add.php
│   │   ├── edit.php
│   │   ├── index.php
│   │   ├── remove.php
│   │   └── unban.php
│   ├── item/
│   │   ├── index.php
│   │   ├── iteminfo.php
│   │   ├── pagemenu/
│   │   │   └── view.php
│   │   └── view.php
│   ├── itemshop/
│   │   ├── add.php
│   │   ├── delete.php
│   │   ├── edit.php
│   │   └── imagedel.php
│   ├── logdata/
│   │   ├── branch.php
│   │   ├── cashpoints.php
│   │   ├── char.php
│   │   ├── chat.php
│   │   ├── command.php
│   │   ├── feeding.php
│   │   ├── index.php
│   │   ├── inter.php
│   │   ├── login.php
│   │   ├── mvp.php
│   │   ├── npc.php
│   │   ├── pick.php
│   │   └── zeny.php
│   ├── mail/
│   │   └── index.php
│   ├── main/
│   │   ├── index.php
│   │   ├── page_not_found.php
│   │   └── preprocess.php
│   ├── monster/
│   │   ├── index.php
│   │   └── view.php
│   ├── news/
│   │   ├── add.php
│   │   ├── delete.php
│   │   ├── edit.php
│   │   ├── index.php
│   │   ├── manage.php
│   │   └── view.php
│   ├── pages/
│   │   ├── add.php
│   │   ├── content.php
│   │   ├── delete.php
│   │   ├── edit.php
│   │   └── index.php
│   ├── purchase/
│   │   ├── add.php
│   │   ├── cart.php
│   │   ├── checkout.php
│   │   ├── clear.php
│   │   ├── index.php
│   │   ├── pending.php
│   │   └── remove.php
│   ├── ranking/
│   │   ├── alchemist.php
│   │   ├── blacksmith.php
│   │   ├── character.php
│   │   ├── death.php
│   │   ├── guild.php
│   │   ├── homunculus.php
│   │   ├── mvp.php
│   │   └── zeny.php
│   ├── server/
│   │   ├── info.php
│   │   ├── status-xml.php
│   │   └── status.php
│   ├── service/
│   │   └── tos.php
│   ├── servicedesk/
│   │   ├── catcontrol.php
│   │   ├── create.php
│   │   ├── index.php
│   │   ├── staffindex.php
│   │   ├── staffsettings.php
│   │   ├── staffview.php
│   │   ├── staffviewclosed.php
│   │   └── view.php
│   ├── unauthorized/
│   │   └── index.php
│   ├── vending/
│   │   ├── index.php
│   │   └── viewshop.php
│   ├── webcommands/
│   │   └── index.php
│   └── woe/
│       ├── custom.php
│       └── index.php
├── robots.txt
└── themes/
    ├── bootstrap/
    │   ├── css/
    │   │   ├── flux/
    │   │   │   ├── ie.css
    │   │   │   └── unitip.css
    │   │   ├── flux.css
    │   │   └── sticky-footer-navbar.css
    │   ├── footer.php
    │   ├── header.php
    │   ├── js/
    │   │   └── ie9.js
    │   ├── main/
    │   │   └── navbar.php
    │   └── manifest.php
    ├── default/
    │   ├── account/
    │   │   ├── cart.php
    │   │   ├── changemail.php
    │   │   ├── changepass.php
    │   │   ├── changesex.php
    │   │   ├── confirm.php
    │   │   ├── confirmemail.php
    │   │   ├── create.php
    │   │   ├── edit.php
    │   │   ├── index.php
    │   │   ├── login.php
    │   │   ├── logout.php
    │   │   ├── prune.php
    │   │   ├── resend.php
    │   │   ├── resetpass.php
    │   │   ├── resetpw.php
    │   │   ├── transfer.php
    │   │   ├── view.php
    │   │   └── xferlog.php
    │   ├── auction/
    │   │   └── index.php
    │   ├── buyingstore/
    │   │   ├── index.php
    │   │   └── viewshop.php
    │   ├── captcha/
    │   │   └── index.php
    │   ├── castle/
    │   │   └── index.php
    │   ├── character/
    │   │   ├── changeslot.php
    │   │   ├── divorce.php
    │   │   ├── index.php
    │   │   ├── mapstats.php
    │   │   ├── online.php
    │   │   ├── prefs.php
    │   │   ├── resetlook.php
    │   │   ├── resetpos.php
    │   │   └── view.php
    │   ├── cplog/
    │   │   ├── ban.php
    │   │   ├── changemail.php
    │   │   ├── changepass.php
    │   │   ├── create.php
    │   │   ├── index.php
    │   │   ├── ipban.php
    │   │   ├── login.php
    │   │   ├── paypal.php
    │   │   ├── resetpass.php
    │   │   └── txnview.php
    │   ├── css/
    │   │   ├── flux/
    │   │   │   ├── ie.css
    │   │   │   ├── recaptcha.css
    │   │   │   └── unitip.css
    │   │   └── flux.css
    │   ├── data/
    │   │   └── FluxDefaultTheme.psd
    │   ├── donate/
    │   │   ├── complete.php
    │   │   ├── history.php
    │   │   ├── index.php
    │   │   ├── notify.php
    │   │   ├── trusted.php
    │   │   └── update.php
    │   ├── economy/
    │   │   └── index.php
    │   ├── errors/
    │   │   ├── missing_action.php
    │   │   └── missing_view.php
    │   ├── footer.php
    │   ├── forum/
    │   │   └── index.php
    │   ├── guild/
    │   │   ├── emblem.php
    │   │   ├── export.php
    │   │   ├── index.php
    │   │   └── view.php
    │   ├── header.php
    │   ├── history/
    │   │   ├── cplogin.php
    │   │   ├── emailchange.php
    │   │   ├── gamelogin.php
    │   │   ├── index.php
    │   │   ├── passchange.php
    │   │   └── passreset.php
    │   ├── install/
    │   │   └── reinstall.php
    │   ├── ipban/
    │   │   ├── add.php
    │   │   ├── edit.php
    │   │   ├── index.php
    │   │   ├── remove.php
    │   │   └── unban.php
    │   ├── item/
    │   │   ├── index.php
    │   │   ├── iteminfo.php
    │   │   └── view.php
    │   ├── itemshop/
    │   │   ├── add.php
    │   │   ├── delete.php
    │   │   ├── edit.php
    │   │   └── imagedel.php
    │   ├── js/
    │   │   ├── flux.datefields.js
    │   │   ├── flux.unitip.js
    │   │   ├── flux.unitpngfix.js
    │   │   ├── ie9.js
    │   │   └── jquery-1.8.3.min.js
    │   ├── logdata/
    │   │   ├── branch.php
    │   │   ├── cashpoints.php
    │   │   ├── char.php
    │   │   ├── chat.php
    │   │   ├── command.php
    │   │   ├── feeding.php
    │   │   ├── index.php
    │   │   ├── inter.php
    │   │   ├── login.php
    │   │   ├── mvp.php
    │   │   ├── npc.php
    │   │   ├── pick.php
    │   │   └── zeny.php
    │   ├── mail/
    │   │   └── index.php
    │   ├── main/
    │   │   ├── balance.php
    │   │   ├── index.php
    │   │   ├── loginbox.php
    │   │   ├── page_not_found.php
    │   │   ├── pagemenu.php
    │   │   ├── sidebar.php
    │   │   └── submenu.php
    │   ├── monster/
    │   │   ├── index.php
    │   │   └── view.php
    │   ├── news/
    │   │   ├── add.php
    │   │   ├── delete.php
    │   │   ├── edit.php
    │   │   ├── index.php
    │   │   ├── manage.php
    │   │   └── view.php
    │   ├── pages/
    │   │   ├── add.php
    │   │   ├── content.php
    │   │   ├── delete.php
    │   │   ├── edit.php
    │   │   └── index.php
    │   ├── purchase/
    │   │   ├── add.php
    │   │   ├── cart.php
    │   │   ├── checkout.php
    │   │   ├── clear.php
    │   │   ├── index.php
    │   │   ├── pending.php
    │   │   └── remove.php
    │   ├── ranking/
    │   │   ├── alchemist.php
    │   │   ├── blacksmith.php
    │   │   ├── character.php
    │   │   ├── death.php
    │   │   ├── guild.php
    │   │   ├── homunculus.php
    │   │   ├── mvp.php
    │   │   └── zeny.php
    │   ├── server/
    │   │   ├── info.php
    │   │   ├── status-xml.php
    │   │   └── status.php
    │   ├── service/
    │   │   └── tos.php
    │   ├── servicedesk/
    │   │   ├── catcontrol.php
    │   │   ├── create.php
    │   │   ├── index.php
    │   │   ├── staffindex.php
    │   │   ├── staffsettings.php
    │   │   ├── staffview.php
    │   │   ├── staffviewclosed.php
    │   │   └── view.php
    │   ├── unauthorized/
    │   │   └── index.php
    │   ├── vending/
    │   │   ├── index.php
    │   │   └── viewshop.php
    │   ├── webcommands/
    │   │   └── index.php
    │   └── woe/
    │       ├── custom.php
    │       └── index.php
    └── installer/
        ├── footer.php
        ├── header.php
        └── install/
            └── index.php
Download .txt
SYMBOL INDEX (725 symbols across 78 files)

FILE: config/groups.php
  class AccountLevel (line 2) | final class AccountLevel {
    method getArray (line 62) | public static function getArray() {
    method getGroupID (line 75) | public static function getGroupID($compare, $op) {
    method getGroupLevel (line 93) | public static function getGroupLevel($group_id) {
    method getGroupName (line 109) | public static function getGroupName($group_id) {

FILE: data/schemas/charmapdb/cp_charprefs.20080929191525.sql
  type `cp_charprefs` (line 1) | CREATE TABLE IF NOT EXISTS `cp_charprefs` (

FILE: data/schemas/charmapdb/cp_commands.20160608065501.sql
  type `cp_commands` (line 1) | CREATE TABLE IF NOT EXISTS `cp_commands` (

FILE: data/schemas/charmapdb/cp_itemdesc.20170210033400.sql
  type `cp_itemdesc` (line 1) | CREATE TABLE IF NOT EXISTS `cp_itemdesc` (

FILE: data/schemas/charmapdb/cp_itemshop.20080928225124.sql
  type `cp_itemshop` (line 1) | CREATE TABLE IF NOT EXISTS `cp_itemshop` (

FILE: data/schemas/charmapdb/cp_onlinepeak.20131120120201.sql
  type `cp_onlinepeak` (line 1) | CREATE TABLE IF NOT EXISTS `cp_onlinepeak` (

FILE: data/schemas/charmapdb/cp_redeemlog.20080928225124.sql
  type `cp_redeemlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_redeemlog` (

FILE: data/schemas/charmapdb/cp_xferlog.20080928225124.sql
  type `cp_xferlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_xferlog` (

FILE: data/schemas/logindb/cp_banlog.20131213174201.sql
  type `cp_banlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_banlog` (

FILE: data/schemas/logindb/cp_cmsnews.20131120145701.sql
  type `cp_cmsnews` (line 1) | CREATE TABLE IF NOT EXISTS `cp_cmsnews` (

FILE: data/schemas/logindb/cp_cmspages.20131120161901.sql
  type `cp_cmspages` (line 1) | CREATE TABLE IF NOT EXISTS `cp_cmspages` (

FILE: data/schemas/logindb/cp_cmssettings.20131120145801.sql
  type `cp_cmssettings` (line 1) | CREATE TABLE IF NOT EXISTS `cp_cmssettings` (

FILE: data/schemas/logindb/cp_createlog.20131213174201.sql
  type `cp_createlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_createlog` (

FILE: data/schemas/logindb/cp_credits.20131213174201.sql
  type `cp_credits` (line 1) | CREATE TABLE IF NOT EXISTS `cp_credits` (

FILE: data/schemas/logindb/cp_emailchange.20131213174201.sql
  type `cp_emailchange` (line 1) | CREATE TABLE IF NOT EXISTS `cp_emailchange` (

FILE: data/schemas/logindb/cp_ipbanlog.20120816150540.sql
  type `cp_ipbanlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_ipbanlog` (

FILE: data/schemas/logindb/cp_loginlog.20131213174201.sql
  type `cp_loginlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_loginlog` (

FILE: data/schemas/logindb/cp_loginprefs.20131213174201.sql
  type `cp_loginprefs` (line 1) | CREATE TABLE IF NOT EXISTS `cp_loginprefs` (

FILE: data/schemas/logindb/cp_pwchange.20131213174201.sql
  type `cp_pwchange` (line 1) | CREATE TABLE IF NOT EXISTS `cp_pwchange` (

FILE: data/schemas/logindb/cp_resetpass.20131213174201.sql
  type `cp_resetpass` (line 1) | CREATE TABLE IF NOT EXISTS `cp_resetpass` (

FILE: data/schemas/logindb/cp_servicedesk.20131122010001.sql
  type `cp_servicedesk` (line 1) | CREATE TABLE IF NOT EXISTS `cp_servicedesk` (

FILE: data/schemas/logindb/cp_servicedeska.20131122010001.sql
  type `cp_servicedeska` (line 1) | CREATE TABLE IF NOT EXISTS `cp_servicedeska` (

FILE: data/schemas/logindb/cp_servicedeskcat.20131122010001.sql
  type `cp_servicedeskcat` (line 1) | CREATE TABLE IF NOT EXISTS `cp_servicedeskcat` (

FILE: data/schemas/logindb/cp_servicedesksettings.20131122010001.sql
  type `cp_servicedesksettings` (line 1) | CREATE TABLE IF NOT EXISTS `cp_servicedesksettings` (

FILE: data/schemas/logindb/cp_trusted.20131213174201.sql
  type `cp_trusted` (line 1) | CREATE TABLE IF NOT EXISTS `cp_trusted` (

FILE: data/schemas/logindb/cp_txnlog.20131213174201.sql
  type `cp_txnlog` (line 1) | CREATE TABLE IF NOT EXISTS `cp_txnlog` (

FILE: lib/Flux.php
  class Flux (line 22) | class Flux {
    method initialize (line 108) | public static function initialize($options = array())
    method initializeServerObjects (line 152) | public static function initializeServerObjects()
    method initializeAddons (line 182) | public static function initializeAddons()
    method config (line 209) | public static function config($key, $value = null, $options = array())
    method message (line 227) | public static function message($key, $value = null, $options = array())
    method raise (line 245) | public static function raise($message)
    method parseConfig (line 256) | public static function parseConfig(array $configArr)
    method parseConfigFile (line 268) | public static function parseConfigFile($filename, $cache=true)
    method parseAppConfigFile (line 308) | public static function parseAppConfigFile($filename, $import = false)
    method parseServersConfigFile (line 353) | public static function parseServersConfigFile($filename, $import = false)
    method parseMessagesConfigFile (line 496) | public static function parseMessagesConfigFile($filename)
    method parseLanguageConfigFile (line 510) | public static function parseLanguageConfigFile($addonName=null)
    method themeExists (line 549) | public static function themeExists($themeName)
    method registerServerGroup (line 562) | private static function registerServerGroup($serverName, Flux_LoginAth...
    method registerAthenaServer (line 577) | private static function registerAthenaServer($serverName, $athenaServe...
    method getServerGroupByName (line 594) | public static function getServerGroupByName($serverName)
    method getAthenaServerByName (line 614) | public static function getAthenaServerByName($serverName, $athenaServe...
    method hashPassword (line 634) | public static function hashPassword($password)
    method getJobClass (line 647) | public static function getJobClass($id)
    method getJobID (line 667) | public static function getJobID($class)
    method getHomunClass (line 685) | public static function getHomunClass($id)
    method getItemType (line 704) | public static function getItemType($id1)
    method getItemSubType (line 718) | public static function getItemSubType($id1, $id2)
    method getRandOption (line 734) | public static function getRandOption($id1)
    method getEquipLocationCombination (line 754) | public static function getEquipLocationCombination()
    method processHeldCredits (line 763) | public static function processHeldCredits()
    method pruneUnconfirmedAccounts (line 835) | public static function pruneUnconfirmedAccounts()
    method getEquipLocationList (line 854) | public static function getEquipLocationList()
    method getEquipUpperList (line 864) | public static function getEquipUpperList($isRenewal = 1)
    method getEquipJobsList (line 877) | public static function getEquipJobsList($isRenewal = 1)
    method getTradeRestrictionList (line 890) | public static function getTradeRestrictionList()
    method getItemFlagList (line 899) | public static function getItemFlagList()
    method isStackableItemType (line 910) | public static function isStackableItemType($type)
    method equipUpperToArray (line 922) | public static function equipUpperToArray($bitmask, $isRenewal = 1)
    method equipJobsToArray (line 942) | public static function equipJobsToArray($bitmask)
    method monsterModeToArray (line 959) | public static function monsterModeToArray($bitmask)
    method elementName (line 974) | public static function elementName($ele)
    method monsterRaceName (line 983) | public static function monsterRaceName($race)
    method monsterSizeName (line 992) | public static function monsterSizeName($size)
    method getAvailableLanguages (line 998) | public static function getAvailableLanguages()

FILE: lib/Flux/Addon.php
  class Flux_Addon (line 4) | class Flux_Addon {
    method __construct (line 14) | public function __construct($name, $addonDir = null)
    method respondsTo (line 43) | public function respondsTo($module, $action = null)
    method getView (line 54) | public function getView(Flux_Template $template, $module, $action)

FILE: lib/Flux/Athena.php
  class Flux_Athena (line 11) | class Flux_Athena {
    method __construct (line 174) | public function __construct(Flux_Config $charMapConfig, Flux_LoginServ...
    method setConnection (line 256) | public function setConnection(Flux_Connection $connection)
    method setCart (line 271) | public function setCart(Flux_ItemShop_Cart $cart)
    method __toString (line 283) | public function __toString()
    method transferCredits (line 295) | public function transferCredits($fromAccountID, $targetCharName, $cred...
    method setLoginAthenaGroup (line 380) | public function setLoginAthenaGroup(Flux_LoginAthenaGroup $loginAthena...
    method charExists (line 392) | public function charExists($charID)
    method charBelongsToAccount (line 413) | public function charBelongsToAccount($charID, $accountID)
    method charIsOnline (line 433) | public function charIsOnline($charID)
    method accountHasOnlineChars (line 453) | public function accountHasOnlineChars($accountID)
    method getCharacter (line 473) | public function getCharacter($charID)
    method getPrefs (line 494) | public function getPrefs($charID, array $prefs = array())
    method setPrefs (line 541) | public function setPrefs($charID, array $prefsArray)
    method getPref (line 609) | public function getPref($charID, $pref)
    method setPref (line 628) | public function setPref($charID, $pref, $value)
    method resetLook (line 639) | public function resetLook($charID)
    method resetPosition (line 684) | public function resetPosition($charID)
    method getServerTime (line 729) | public function getServerTime($format = 'U')
    method isWoe (line 743) | public function isWoe()

FILE: lib/Flux/Authorization.php
  class Flux_Authorization (line 9) | class Flux_Authorization {
    method __construct (line 41) | private function __construct(Flux_Config $accessConfig, Flux_SessionDa...
    method getInstance (line 55) | public static function getInstance($accessConfig = null, $sessionData ...
    method actionAllowed (line 72) | public function actionAllowed($moduleName, $actionName = 'index')
    method featureAllowed (line 111) | public function featureAllowed($featureName)
    method __get (line 135) | public function __get($prop)
    method config (line 156) | public function config($key, $value = null, $options = array())

FILE: lib/Flux/BaseServer.php
  class Flux_BaseServer (line 6) | class Flux_BaseServer {
    method __construct (line 22) | public function __construct(Flux_Config $config)
    method isUp (line 34) | public function isUp()

FILE: lib/Flux/Captcha.php
  class Flux_Captcha (line 5) | class Flux_Captcha {
    method __construct (line 33) | public function __construct($options = array())
    method generateCode (line 65) | protected function generateCode()
    method generateImage (line 83) | protected function generateImage()
    method display (line 117) | public function display()
    method __destruct (line 124) | public function __destruct()

FILE: lib/Flux/CharServer.php
  class Flux_CharServer (line 7) | class Flux_CharServer extends Flux_BaseServer {

FILE: lib/Flux/Config.php
  class Flux_Config (line 10) | class Flux_Config {
    method __construct (line 64) | public function __construct(array &$configArr)
    method toArray (line 76) | public function &toArray()
    method getChildrenConfigs (line 88) | public function &getChildrenConfigs()
    method get (line 111) | public function get($key, $configObjectIfArray = true)
    method set (line 166) | public function set($key, $value, $options = array())
    method raise (line 203) | public function raise($message)
    method __call (line 216) | public function __call($method, $args = array())
    method merge (line 238) | public function merge(Flux_Config $config, $recursive = true, $distinc...
    method array_merge_recursive_distinct (line 277) | public function array_merge_recursive_distinct(array $base, array $imp...

FILE: lib/Flux/Connection.php
  class Flux_Connection (line 12) | class Flux_Connection {
    method __construct (line 61) | public function __construct(Flux_Config $dbConfig, Flux_Config $logsDb...
    method connect (line 75) | private function connect(Flux_Config $dbConfig)
    method getConnection (line 106) | private function getConnection()
    method getLogsConnection (line 131) | private function getLogsConnection()
    method getWebConnection (line 156) | private function getWebConnection()
    method useDatabase (line 182) | public function useDatabase($dbName)
    method getStatement (line 198) | public function getStatement($statement, $options = array())
    method getStatementForLogs (line 218) | public function getStatementForLogs($statement, $options = array())
    method getStatementForWeb (line 238) | public function getStatementForWeb($statement, $options = array())
    method reconnectAs (line 255) | public function reconnectAs($username, $password)
    method isCaseSensitive (line 271) | public function isCaseSensitive($database, $table, $column, $useLogsCo...

FILE: lib/Flux/Connection/Statement.php
  class Flux_Connection_Statement (line 5) | class Flux_Connection_Statement {
    method __construct (line 9) | public function __construct(PDOStatement $stmt)
    method getParamType (line 18) | private function getParamType($param)
    method execute (line 31) | public function execute(array $inputParameters = array(), $bind_param ...
    method __call (line 65) | public function __call($method, $args)

FILE: lib/Flux/DataObject.php
  class Flux_DataObject (line 8) | class Flux_DataObject {
    method __construct (line 39) | public function __construct(array $data = null, $defaults = array())
    method __set (line 70) | public function __set($prop, $value)
    method __get (line 76) | public function __get($prop)

FILE: lib/Flux/Dispatcher.php
  class Flux_Dispatcher (line 12) | class Flux_Dispatcher {
    method __construct (line 42) | private function __construct()
    method getInstance (line 54) | public static function getInstance()
    method dispatch (line 68) | public function dispatch($options = array())
    method setDefaultModule (line 181) | public function setDefaultModule($module)
    method setDefaultAction (line 195) | public function setDefaultAction($action)
    method loginRequired (line 209) | public function loginRequired($baseURI, $message = null, $loginModule ...

FILE: lib/Flux/EmblemExporter.php
  class Flux_EmblemExporter (line 7) | class Flux_EmblemExporter {
    method __construct (line 21) | public function __construct(Flux_LoginAthenaGroup $loginAthenaGroup)
    method addAthenaServer (line 29) | public function addAthenaServer(Flux_Athena $athenaServer)
    method exportArchive (line 42) | public function exportArchive()
    method sanitizePathName (line 97) | private function sanitizePathName($pathName)

FILE: lib/Flux/Error.php
  class Flux_Error (line 6) | class Flux_Error extends Exception {

FILE: lib/Flux/FileLoad.php
  class FileLoad (line 4) | class FileLoad{
    method load (line 17) | public function load($file, $path){
    method delete (line 30) | public function delete(){

FILE: lib/Flux/Installer.php
  class Flux_Installer (line 7) | class Flux_Installer {
    method __construct (line 21) | private function __construct()
    method getInstance (line 31) | public static function getInstance()
    method updateNeeded (line 42) | public function updateNeeded()
    method updateAll (line 64) | public function updateAll()

FILE: lib/Flux/Installer/CharMapServer.php
  class Flux_Installer_CharMapServer (line 7) | class Flux_Installer_CharMapServer {
    method __construct (line 26) | public function __construct(Flux_Installer_MainServer $mainServer, Flu...

FILE: lib/Flux/Installer/MainServer.php
  class Flux_Installer_MainServer (line 8) | class Flux_Installer_MainServer {
    method __construct (line 27) | public function __construct(Flux_LoginAthenaGroup $loginAthenaGroup)
    method updateAll (line 42) | public function updateAll()

FILE: lib/Flux/Installer/Schema.php
  class Flux_Installer_Schema (line 7) | class Flux_Installer_Schema {
    method __construct (line 61) | private function __construct(array $dataArray)
    method determineInstalledVersions (line 78) | protected function determineInstalledVersions()
    method install (line 93) | public function install($version)
    method update (line 150) | public function update()
    method versionInstalled (line 168) | public function versionInstalled($version)
    method isLatest (line 177) | public function isLatest()
    method getSchemas (line 185) | public static function getSchemas(Flux_Installer_MainServer $mainServe...

FILE: lib/Flux/Installer/SchemaPermissionError.php
  class Flux_Installer_SchemaPermissionError (line 4) | class Flux_Installer_SchemaPermissionError extends Flux_Error {
    method __construct (line 11) | public function __construct($message, $schemaFile, $databaseName, $mai...
    method isLoginDbSchema (line 22) | public function isLoginDbSchema()
    method isCharMapDbSchema (line 27) | public function isCharMapDbSchema()

FILE: lib/Flux/ItemExistsError.php
  class Flux_ItemExistsError (line 4) | class Flux_ItemExistsError extends Flux_Error {

FILE: lib/Flux/ItemShop.php
  class Flux_ItemShop (line 5) | class Flux_ItemShop {
    method __construct (line 12) | public function __construct(Flux_Athena $server)
    method add (line 20) | public function add($itemID, $categoryID, $cost, $quantity, $info, $us...
    method edit (line 41) | public function edit($shopItemID, $categoryID = null, $cost = null, $q...
    method delete (line 115) | public function delete($shopItemID)
    method buy (line 128) | public function buy(Flux_DataObject $account, $shopItemID)
    method getItem (line 136) | public function getItem($shopItemID)
    method getItems (line 164) | public function getItems($paginator, $categoryID = null)
    method deleteShopItemImage (line 198) | public function deleteShopItemImage($shopItemID)
    method uploadShopItemImage (line 215) | public function uploadShopItemImage($shopItemID, Flux_Config $file)

FILE: lib/Flux/ItemShop/Cart.php
  class Flux_ItemShop_Cart (line 4) | class Flux_ItemShop_Cart {
    method setAccount (line 15) | public function setAccount(Flux_DataObject $account)
    method requiresAccount (line 21) | public function requiresAccount()
    method add (line 28) | public function add(Flux_DataObject $item)
    method delete (line 34) | public function delete(Flux_DataObject $item, $deleteAll = false)
    method deleteAll (line 57) | public function deleteAll(Flux_DataObject $item)
    method clear (line 62) | public function clear()
    method buy (line 69) | public function buy(Flux_ItemShop $fromShop)
    method getCartItems (line 91) | public function getCartItems()
    method getCartItemNames (line 96) | public function getCartItemNames()
    method getTotal (line 105) | public function getTotal()
    method hasFunds (line 114) | public function hasFunds()
    method isEmpty (line 131) | public function isEmpty()
    method deleteByItemNum (line 137) | public function deleteByItemNum($num)

FILE: lib/Flux/LogFile.php
  class Flux_LogFile (line 5) | class Flux_LogFile {
    method __construct (line 37) | public function __construct($filename, $mode = 'a')
    method __destruct (line 56) | public function __destruct()
    method puts (line 70) | public function puts()

FILE: lib/Flux/LoginAthenaGroup.php
  class Flux_LoginAthenaGroup (line 6) | class Flux_LoginAthenaGroup {
    method __construct (line 68) | public function __construct($serverName, Flux_Connection $connection, ...
    method addAthenaServer (line 92) | public function addAthenaServer(Flux_Athena $athenaServer)
    method isAuth (line 113) | public function isAuth($username, $password)

FILE: lib/Flux/LoginError.php
  class Flux_LoginError (line 4) | class Flux_LoginError extends Flux_Error {

FILE: lib/Flux/LoginServer.php
  class Flux_LoginServer (line 8) | class Flux_LoginServer extends Flux_BaseServer {
    method __construct (line 46) | public function __construct(Flux_Config $config)
    method setConnection (line 59) | public function setConnection(Flux_Connection $connection)
    method isAuth (line 76) | public function isAuth($username, $password)
    method register (line 110) | public function register($username, $password, $confirmPassword, $emai...
    method temporarilyBan (line 232) | public function temporarilyBan($bannedBy, $banReason, $accountID, $until)
    method permanentlyBan (line 254) | public function permanentlyBan($bannedBy, $banReason, $accountID)
    method unban (line 275) | public function unban($unbannedBy, $unbanReason, $accountID)
    method getBanInfo (line 301) | public function getBanInfo($accountID)
    method addIpBan (line 324) | public function addIpBan($bannedBy, $banReason, $unbanTime, $ipAddress)
    method removeIpBan (line 346) | public function removeIpBan($unbannedBy, $unbanReason, $ipAddress)
    method hasCreditsRecord (line 367) | public function hasCreditsRecord($accountID)
    method depositCredits (line 387) | public function depositCredits($targetAccountID, $credits, $donationAm...
    method getPrefs (line 441) | public function getPrefs($accountID, array $prefs = array())
    method setPrefs (line 484) | public function setPrefs($accountID, array $prefsArray)
    method getPref (line 548) | public function getPref($accountID, $pref)
    method setPref (line 562) | public function setPref($accountID, $pref, $value)
    method isIpBanned (line 570) | public function isIpBanned($ip = null)

FILE: lib/Flux/Mailer.php
  class Flux_Mailer (line 5) | class Flux_Mailer {
    method __construct (line 10) | public function __construct()
    method send (line 57) | public function send($recipient, $subject, $template, array $templateV...

FILE: lib/Flux/MapServer.php
  class Flux_MapServer (line 7) | class Flux_MapServer extends Flux_BaseServer {

FILE: lib/Flux/Paginator.php
  class Flux_Paginator (line 5) | class Flux_Paginator {
    method __construct (line 102) | public function __construct($total, $requestURI = null, array $options...
    method calculatePages (line 148) | private function calculatePages()
    method getSQL (line 161) | public function getSQL($sql)
    method getHTML (line 217) | public function getHTML()
    method getPageURI (line 290) | protected function getPageURI($pageNumber)
    method setSortableColumns (line 325) | public function setSortableColumns($columns)
    method sortableColumn (line 357) | public function sortableColumn($column, $name = null)
    method infoText (line 419) | public function infoText()

FILE: lib/Flux/PaymentNotifyRequest.php
  class Flux_PaymentNotifyRequest (line 9) | class Flux_PaymentNotifyRequest {
    method __construct (line 80) | public function __construct(array $ipnPostVars)
    method logPayPal (line 99) | protected function logPayPal()
    method fetchIP (line 112) | protected function fetchIP()
    method process (line 133) | public function process()
    method ipnVarsToQueryString (line 374) | private function ipnVarsToQueryString()
    method verify (line 394) | private function verify()
    method verifyiprange (line 449) | private function verifyiprange($received_from)
    method saveDetailsToFile (line 481) | private function saveDetailsToFile()
    method logToPayPalTable (line 517) | private function logToPayPalTable(Flux_LoginAthenaGroup $servGroup, $a...

FILE: lib/Flux/PermissionError.php
  class Flux_PermissionError (line 4) | class Flux_PermissionError extends Flux_Error {

FILE: lib/Flux/RegisterError.php
  class Flux_RegisterError (line 4) | class Flux_RegisterError extends Flux_Error {

FILE: lib/Flux/SessionData.php
  class Flux_SessionData (line 9) | class Flux_SessionData {
    method __construct (line 57) | public function __construct(array &$sessionData, $logout = false)
    method initialize (line 75) | private function initialize($force = false)
    method logout (line 170) | public function logout()
    method __call (line 177) | public function __call($method, $args)
    method __get (line 194) | public function &__get($prop)
    method setData (line 211) | public function setData(array $keys, $value)
    method addDataFilter (line 228) | public function addDataFilter($key, $callback)
    method isLoggedIn (line 241) | public function isLoggedIn()
    method checkSecurityCode (line 252) | public function checkSecurityCode($securityCode, $recaptcha = false) {
    method login (line 280) | public function login($server, $username, $password, $securityCode = n...
    method getAccount (line 357) | private function getAccount(Flux_LoginAthenaGroup $loginAthenaGroup, $...
    method getAthenaServerNames (line 381) | public function getAthenaServerNames()
    method getAthenaServer (line 401) | public function getAthenaServer($name = null)
    method getMessage (line 421) | public function getMessage()

FILE: lib/Flux/Template.php
  class Flux_Template (line 16) | class Flux_Template {
    method __construct (line 214) | public function __construct(Flux_Config $config)
    method setDefaultData (line 258) | public function setDefaultData(array &$data)
    method render (line 271) | public function render(array $dataArr = array())
    method getMenuItems (line 421) | public function getMenuItems($adminMenus = false)
    method getAdminMenuItems (line 484) | public function getAdminMenuItems()
    method getSubMenuItems (line 495) | public function getSubMenuItems($moduleName = null)
    method getServerNames (line 520) | public function getServerNames()
    method hasManyServers (line 530) | public function hasManyServers()
    method path (line 543) | public function path($path, $included = false)
    method themePath (line 563) | public function themePath($path, $included = false)
    method url (line 615) | public function url($moduleName, $actionName = null, $params = array())
    method formatCurrency (line 686) | public function formatCurrency($number)
    method formatDate (line 705) | public function formatDate($date = null)
    method formatDateTime (line 718) | public function formatDateTime($dateTime = null)
    method dateField (line 733) | public function dateField($name, $value = null, $fowardYears = null, $...
    method dateTimeField (line 795) | public function dateTimeField($name, $value = null)
    method serverUpDown (line 850) | public function serverUpDown($bool)
    method redirect (line 862) | public function redirect($location = null)
    method entireUrl (line 878) | public function entireUrl($withRequest = true)
    method getPaginator (line 903) | public function getPaginator($total, array $options = array())
    method linkToAccount (line 917) | public function linkToAccount($accountID, $text)
    method linkToAccountSearch (line 936) | public function linkToAccountSearch($params, $text)
    method linkToCharacter (line 955) | public function linkToCharacter($charID, $text, $server = null)
    method deny (line 975) | public function deny()
    method genderText (line 988) | public function genderText($gender)
    method accountStateText (line 1013) | public function accountStateText($state)
    method jobClassText (line 1045) | public function jobClassText($id)
    method moduleActionFormInputs (line 1059) | public function moduleActionFormInputs($moduleName, $actionName = null)
    method homunClassText (line 1080) | public function homunClassText($id)
    method itemTypeText (line 1091) | public function itemTypeText($id)
    method itemSubTypeText (line 1096) | public function itemSubTypeText($id1, $id2)
    method itemRandOption (line 1104) | public function itemRandOption($id, $value)
    method itemFieldExplode (line 1120) | public function itemFieldExplode($object, $field, $delimiter, $inputs)
    method equipLocationCombinationText (line 1136) | public function equipLocationCombinationText($id)
    method emblem (line 1145) | public function emblem($guildID, $serverName = null, $athenaServerName...
    method loginRequired (line 1162) | public function loginRequired($message = null)
    method linkToItem (line 1176) | public function linkToItem($itemID, $text, $server = null)
    method displayScript (line 1195) | public function displayScript($scriptText)
    method banTypeText (line 1214) | public function banTypeText($banType)
    method equippableJobs (line 1234) | public function equippableJobs($equipJob)
    method GetJobsList (line 1250) | public function GetJobsList($isRenewal)
    method GetClassList (line 1260) | public function GetClassList($isRenewal)
    method tradeRestrictions (line 1270) | public function tradeRestrictions($list)
    method itemsFlags (line 1285) | public function itemsFlags($list)
    method linkToMonster (line 1305) | public function linkToMonster($monsterID, $text, $server = null)
    method equipLocations (line 1324) | public function equipLocations($equipLoc)
    method equipUpper (line 1346) | public function equipUpper($equipUpper, $isRenewal = 1)
    method linkToGuild (line 1367) | public function linkToGuild($guild_id, $text, $server = null)
    method donateButton (line 1386) | public function donateButton($amount)
    method shopItemImage (line 1397) | public function shopItemImage($shopItemID, $serverName = null, $athena...
    method iconImage (line 1435) | public function iconImage($itemID)
    method itemImage (line 1453) | public function itemImage($itemID)
    method monsterImage (line 1471) | public function monsterImage($monsterID)
    method jobImage (line 1489) | public function jobImage($gender, $jobID)
    method monsterMode (line 1499) | public function monsterMode($modes, $ai)
    method getName (line 1521) | public function getName()
    method cap_value (line 1530) | public function cap_value($amount, $min, $max)

FILE: lib/Flux/TemporaryTable.php
  class Flux_TemporaryTable (line 15) | class Flux_TemporaryTable {
    method __construct (line 58) | public function __construct(Flux_Connection $connection, $tableName, a...
    method create (line 95) | private function create($firstTable)
    method import (line 192) | private function import($table, $overwrite = true)
    method findVarcharLength (line 208) | private function findVarcharLength()
    method raise (line 227) | private static function raise($message = '')
    method drop (line 239) | public function drop()
    method __destruct (line 247) | public function __destruct()

FILE: lib/functions/discordwebhook.php
  function sendtodiscord (line 7) | function    sendtodiscord($url, $message) {

FILE: lib/functions/getReposVersion.php
  function getReposVersion (line 7) | function getReposVersion()
  function git_hash (line 24) | function git_hash() {

FILE: lib/functions/imagecreatefrombmpstring.php
  function imagecreatefrombmpstring (line 8) | function imagecreatefrombmpstring($im) {

FILE: lib/phpmailer/PHPMailerAutoload.php
  function PHPMailerAutoload (line 24) | function PHPMailerAutoload($classname)

FILE: lib/phpmailer/class.phpmailer.php
  class PHPMailer (line 28) | class PHPMailer
    method __construct (line 657) | public function __construct($exceptions = null)
    method __destruct (line 669) | public function __destruct()
    method mailPassthru (line 688) | private function mailPassthru($to, $subject, $body, $header, $params)
    method edebug (line 713) | protected function edebug($str)
    method isHTML (line 754) | public function isHTML($isHtml = true)
    method isSMTP (line 767) | public function isSMTP()
    method isMail (line 776) | public function isMail()
    method isSendmail (line 785) | public function isSendmail()
    method isQmail (line 801) | public function isQmail()
    method addAddress (line 819) | public function addAddress($address, $name = '')
    method addCC (line 831) | public function addCC($address, $name = '')
    method addBCC (line 843) | public function addBCC($address, $name = '')
    method addReplyTo (line 854) | public function addReplyTo($address, $name = '')
    method addOrEnqueueAnAddress (line 871) | protected function addOrEnqueueAnAddress($kind, $address, $name)
    method addAnAddress (line 915) | protected function addAnAddress($kind, $address, $name = '')
    method parseAddresses (line 960) | public function parseAddresses($addrstr, $useimap = true)
    method setFrom (line 1013) | public function setFrom($address, $name = '', $auto = true)
    method getLastMessageID (line 1046) | public function getLastMessageID()
    method validateAddress (line 1070) | public static function validateAddress($address, $patternselect = null)
    method idnSupported (line 1166) | public function idnSupported()
    method punyencodeAddress (line 1183) | public function punyencodeAddress($address)
    method send (line 1209) | public function send()
    method preSend (line 1231) | public function preSend()
    method postSend (line 1328) | public function postSend()
    method sendmailSend (line 1367) | protected function sendmailSend($header, $body)
    method isShellSafe (line 1441) | protected static function isShellSafe($string)
    method mailSend (line 1475) | protected function mailSend($header, $body)
    method getSMTPInstance (line 1519) | public function getSMTPInstance()
    method smtpSend (line 1539) | protected function smtpSend($header, $body)
    method smtpConnect (line 1602) | public function smtpConnect($options = null)
    method smtpClose (line 1724) | public function smtpClose()
    method setLanguage (line 1743) | public function setLanguage($langcode = 'en', $lang_path = '')
    method getTranslations (line 1810) | public function getTranslations()
    method addrAppend (line 1825) | public function addrAppend($type, $addr)
    method addrFormat (line 1841) | public function addrFormat($addr)
    method wrapText (line 1863) | public function wrapText($message, $length, $qp_mode = false)
    method utf8CharBoundary (line 1962) | public function utf8CharBoundary($encodedText, $maxLength)
    method setWordWrap (line 2007) | public function setWordWrap()
    method createHeader (line 2031) | public function createHeader()
    method getMailMIME (line 2126) | public function getMailMIME()
    method getSentMIMEMessage (line 2181) | public function getSentMIMEMessage()
    method generateId (line 2190) | protected function generateId() {
    method createBody (line 2201) | public function createBody()
    method getBoundary (line 2415) | protected function getBoundary($boundary, $charSet, $contentType, $enc...
    method endBoundary (line 2445) | protected function endBoundary($boundary)
    method setMessageType (line 2456) | protected function setMessageType()
    method headerLine (line 2482) | public function headerLine($name, $value)
    method textLine (line 2493) | public function textLine($value)
    method addAttachment (line 2510) | public function addAttachment($path, $name = '', $encoding = 'base64',...
    method getAttachments (line 2553) | public function getAttachments()
    method attachAll (line 2566) | protected function attachAll($disposition_type, $boundary)
    method encodeFile (line 2691) | protected function encodeFile($path, $encoding = 'base64')
    method encodeString (line 2732) | public function encodeString($str, $encoding = 'base64')
    method encodeHeader (line 2768) | public function encodeHeader($str, $position = 'text')
    method hasMultiBytes (line 2832) | public function hasMultiBytes($str)
    method has8bitChars (line 2846) | public function has8bitChars($text)
    method base64EncodeWrapMB (line 2861) | public function base64EncodeWrapMB($str, $linebreak = null)
    method encodeQP (line 2903) | public function encodeQP($string, $line_max = 76)
    method encodeQPphp (line 2928) | public function encodeQPphp(
    method encodeQ (line 2944) | public function encodeQ($str, $position = 'text')
    method addStringAttachment (line 2995) | public function addStringAttachment(
    method addEmbeddedImage (line 3036) | public function addEmbeddedImage($path, $cid, $name = '', $encoding = ...
    method addStringEmbeddedImage (line 3081) | public function addStringEmbeddedImage(
    method inlineImageExists (line 3113) | public function inlineImageExists()
    method attachmentExists (line 3127) | public function attachmentExists()
    method alternativeExists (line 3141) | public function alternativeExists()
    method clearQueuedAddresses (line 3152) | public function clearQueuedAddresses($kind)
    method clearAddresses (line 3166) | public function clearAddresses()
    method clearCCs (line 3179) | public function clearCCs()
    method clearBCCs (line 3192) | public function clearBCCs()
    method clearReplyTos (line 3205) | public function clearReplyTos()
    method clearAllRecipients (line 3215) | public function clearAllRecipients()
    method clearAttachments (line 3228) | public function clearAttachments()
    method clearCustomHeaders (line 3237) | public function clearCustomHeaders()
    method setError (line 3248) | protected function setError($msg)
    method rfcDate (line 3275) | public static function rfcDate()
    method serverHostname (line 3289) | protected function serverHostname()
    method lang (line 3310) | protected function lang($key)
    method isError (line 3335) | public function isError()
    method fixEOL (line 3347) | public function fixEOL($str)
    method addCustomHeader (line 3367) | public function addCustomHeader($name, $value = null)
    method getCustomHeaders (line 3381) | public function getCustomHeaders()
    method msgHTML (line 3402) | public function msgHTML($message, $basedir = '', $advanced = false)
    method html2text (line 3496) | public function html2text($html, $advanced = false)
    method _mime_types (line 3515) | public static function _mime_types($ext = '')
    method filenameToType (line 3630) | public static function filenameToType($filename)
    method mb_pathinfo (line 3652) | public static function mb_pathinfo($path, $options = null)
    method set (line 3702) | public function set($name, $value = '')
    method secureHeader (line 3719) | public function secureHeader($str)
    method normalizeBreaks (line 3734) | public static function normalizeBreaks($text, $breaktype = "\r\n")
    method sign (line 3747) | public function sign($cert_filename, $key_filename, $key_pass, $extrac...
    method DKIM_QP (line 3761) | public function DKIM_QP($txt)
    method DKIM_Sign (line 3782) | public function DKIM_Sign($signHeader)
    method DKIM_HeaderC (line 3828) | public function DKIM_HeaderC($signHeader)
    method DKIM_BodyC (line 3848) | public function DKIM_BodyC($body)
    method DKIM_Add (line 3871) | public function DKIM_Add($headers_line, $subject, $body)
    method hasLineLongerThanMax (line 3949) | public static function hasLineLongerThanMax($str)
    method getToAddresses (line 3961) | public function getToAddresses()
    method getCcAddresses (line 3972) | public function getCcAddresses()
    method getBccAddresses (line 3983) | public function getBccAddresses()
    method getReplyToAddresses (line 3994) | public function getReplyToAddresses()
    method getAllRecipientAddresses (line 4005) | public function getAllRecipientAddresses()
    method doCallback (line 4020) | protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body...
  class phpmailerException (line 4033) | class phpmailerException extends Exception
    method errorMessage (line 4039) | public function errorMessage()

FILE: lib/phpmailer/class.pop3.php
  class POP3 (line 30) | class POP3
    method popBeforeSmtp (line 140) | public static function popBeforeSmtp(
    method authorise (line 165) | public function authorise($host, $port = false, $timeout = false, $use...
    method connect (line 207) | public function connect($host, $port = false, $tval = 30)
    method login (line 266) | public function login($username = '', $password = '')
    method disconnect (line 296) | public function disconnect()
    method getResponse (line 315) | protected function getResponse($size = 128)
    method sendString (line 330) | protected function sendString($string)
    method checkResponse (line 348) | protected function checkResponse($string)
    method setError (line 368) | protected function setError($error)
    method getErrors (line 384) | public function getErrors()
    method catchWarning (line 397) | protected function catchWarning($errno, $errstr, $errfile, $errline)

FILE: lib/phpmailer/class.smtp.php
  class SMTP (line 27) | class SMTP
    method edebug (line 218) | protected function edebug($str, $level = 0)
    method connect (line 262) | public function connect($host, $port = null, $timeout = 30, $options =...
    method startTLS (line 353) | public function startTLS()
    method authenticate (line 392) | public function authenticate(
    method hmac (line 561) | protected function hmac($data, $key)
    method connected (line 593) | public function connected()
    method close (line 618) | public function close()
    method data (line 643) | public function data($msg_data)
    method hello (line 733) | public function hello($host = '')
    method sendHello (line 748) | protected function sendHello($hello, $host)
    method parseHelloFields (line 766) | protected function parseHelloFields($type)
    method mail (line 813) | public function mail($from)
    method quit (line 831) | public function quit($close_on_error = true)
    method recipient (line 851) | public function recipient($address)
    method reset (line 867) | public function reset()
    method sendCommand (line 880) | protected function sendCommand($command, $commandstring, $expect)
    method sendAndMail (line 946) | public function sendAndMail($from)
    method verify (line 957) | public function verify($name)
    method noop (line 968) | public function noop()
    method turn (line 982) | public function turn()
    method client_send (line 995) | public function client_send($data)
    method getError (line 1009) | public function getError()
    method getServerExtList (line 1019) | public function getServerExtList()
    method getServerExt (line 1043) | public function getServerExt($name)
    method getLastReply (line 1070) | public function getLastReply()
    method get_lines (line 1084) | protected function get_lines()
    method setVerp (line 1133) | public function setVerp($enabled = false)
    method getVerp (line 1142) | public function getVerp()
    method setError (line 1154) | protected function setError($message, $detail = '', $smtp_code = '', $...
    method setDebugOutput (line 1168) | public function setDebugOutput($method = 'echo')
    method getDebugOutput (line 1177) | public function getDebugOutput()
    method setDebugLevel (line 1186) | public function setDebugLevel($level = 0)
    method getDebugLevel (line 1195) | public function getDebugLevel()
    method setTimeout (line 1204) | public function setTimeout($timeout = 0)
    method getTimeout (line 1213) | public function getTimeout()
    method errorHandler (line 1225) | protected function errorHandler($errno, $errmsg, $errfile = '', $errli...
    method recordLastTransactionID (line 1247) | protected function recordLastTransactionID()
    method getLastTransactionID (line 1272) | public function getLastTransactionID()

FILE: lib/phpmailer/extras/EasyPeasyICS.php
  class EasyPeasyICS (line 20) | class EasyPeasyICS
    method __construct (line 37) | public function __construct($calendarName = "")
    method addEvent (line 52) | public function addEvent($start, $end, $summary = '', $description = '...
    method getEvents (line 72) | public function getEvents()
    method clearEvents (line 80) | public function clearEvents()
    method getName (line 89) | public function getName()
    method setName (line 98) | public function setName($name)
    method render (line 108) | public function render($output = true)

FILE: lib/phpmailer/extras/htmlfilter.php
  function tln_tagprint (line 41) | function tln_tagprint($tagname, $attary, $tagtype)
  function tln_casenormalize (line 69) | function tln_casenormalize(&$val)
  function tln_skipspace (line 84) | function tln_skipspace($body, $offset)
  function tln_findnxstr (line 105) | function tln_findnxstr($body, $offset, $needle)
  function tln_findnxreg (line 127) | function tln_findnxreg($body, $offset, $reg)
  function tln_defang (line 465) | function tln_defang(&$attvalue)
  function tln_unspace (line 491) | function tln_unspace(&$attvalue)
  function tln_fixurl (line 598) | function tln_fixurl($attname, &$attvalue, $trans_image_path, $block_exte...
  function tln_sanitize (line 842) | function tln_sanitize(
  function HTMLFilter (line 1013) | function HTMLFilter($body, $trans_image_path, $block_external_images = f...

FILE: lib/phpmailer/extras/ntlm_sasl_client.php
  class ntlm_sasl_client_class (line 16) | class ntlm_sasl_client_class
    method initialize (line 21) | public function initialize(&$client)
    method ASCIIToUnicode (line 37) | public function ASCIIToUnicode($ascii)
    method typeMsg1 (line 45) | public function typeMsg1($domain, $workstation)
    method NTLMResponse (line 66) | public function NTLMResponse($challenge, $password)
    method typeMsg3 (line 88) | public function typeMsg3($ntlm_response, $user, $domain, $workstation)
    method start (line 138) | public function start(&$client, &$message, &$interactions)
    method step (line 159) | public function step(&$client, $response, &$message, &$interactions)

FILE: modules/guild/emblem.php
  function flux_get_default_bmp_data (line 4) | function flux_get_default_bmp_data()
  function flux_display_empty_emblem (line 12) | function flux_display_empty_emblem()

FILE: modules/item/view.php
  function __tmpSortDrops (line 130) | function __tmpSortDrops($arr1, $arr2)

FILE: themes/bootstrap/js/ie9.js
  function bk (line 6) | function bk(c,a){if(cz.test(c))c=(a||"")+c;return c}
  function by (line 6) | function by(c,a){c=bk(c,a);return c.slice(0,c.lastIndexOf("/")+1)}
  function cB (line 6) | function cB(c,a){try{c=bk(c,a);if(!bl[c]){V.open("GET",c,false);V.send()...
  function F (line 6) | function F(){}
  function a (line 6) | function a(){if(!bm)c.apply(this,arguments)}
  function cN (line 6) | function cN(c,a){return a||"(?:"}
  function O (line 6) | function O(i,g){if(i&&g){var f=(typeof g=="function"?Function:Object).pr...
  function bX (line 6) | function bX(i,g,f){var d=i[g];i[g]=function(){var c=this.base;this.base=...
  function cO (line 6) | function cO(f,d){if(!d)d=f;var c={};for(var a in f)c[a]=d[a];return c}
  function H (line 6) | function H(g){var f=arguments,d=new RegExp("%([1-"+arguments.length+"])"...
  function bo (line 6) | function bo(c,a){return String(c).match(a)||[]}
  function bY (line 6) | function bY(a){return String(a).replace(cE,"\\$1")}
  function bZ (line 6) | function bZ(a){return String(a).replace(cC,"").replace(cD,"")}
  function bT (line 6) | function bT(a){return function(){return a}}
  function cQ (line 6) | function cQ(a){return cc.parse(a).replace(bz,"$1")}
  function bd (line 6) | function bd(a){return a.replace(cb,cR)}
  function cd (line 6) | function cd(c){var a=W.length;W[a]=c.slice(1,-1).replace(bz,"$1").replac...
  function cR (line 6) | function cR(d,c){var a=W[c];if(a==null)return d;return"'"+W[c]+"'"}
  function bp (line 6) | function bp(a){return a.indexOf("'")===0?W[a.slice(1,-1)]:a}
  function ce (line 6) | function ce(a){return cS.parse(a)}
  function bA (line 6) | function bA(a){cT(a);y(N,"onresize",a)}
  function y (line 6) | function y(d,c,a){d.attachEvent(c,a);cf.push(arguments)}
  function cU (line 6) | function cU(d,c,a){try{d.detachEvent(c,a)}catch(ex){}}
  function be (line 6) | function be(d,c,a){if(!d.elements)d.elements={};if(a)d.elements[c.unique...
  function cT (line 6) | function cT(a){bC.push(a)}
  function bq (line 6) | function bq(a){return a.currentStyle["ie7-position"]=="fixed"}
  function bD (line 6) | function bD(c,a){return c.currentStyle[bB+a]||c.currentStyle[a]}
  function Y (line 6) | function Y(d,c,a){if(d.currentStyle[bB+c]==null){d.runtimeStyle[bB+c]=d....
  function cj (line 6) | function cj(c){var a=p.createElement(c||"object");a.style.cssText="posit...
  function z (line 6) | function z(k,l,m,j){var i="";if(!j){m=q(k.media);j=0}if(m==="none"){k.di...
  function A (line 6) | function A(c,a){s.value=a;return c.replace(v,s)}
  function s (line 6) | function s(d,c,a){c=q(c);switch(c){case"screen":case"print":if(c!==s.val...
  function q (line 6) | function q(d){if(!d)return"all";var c=d.toLowerCase().split(/\s*,\s*/);d...
  function n (line 6) | function n(f,d){var c=f._2||f.href,a=bk(c,d);if(L[a])return"";L[a]=f.dis...
  function o (line 6) | function o(c,a){return c.replace(ba,"$1"+a.slice(0,a.lastIndexOf("/")+1)...
  function Z (line 6) | function Z(a){if(a!=x&&a.currentStyle.position!=="absolute"){S(a,"margin...
  function S (line 6) | function S(g,f){if(!g.runtimeStyle[f]){var d=g.parentElement;var c=f==="...
  function ba (line 6) | function ba(c,a){return a==="auto"?0:C(c,a)}
  function A (line 6) | function A(c,a){if(!c.runtimeStyle.fixedWidth){if(!a)a=c.currentStyle.wi...
  function s (line 6) | function s(c){if(!bq(c)){var a=c.offsetParent;while(a&&!a.currentStyle.h...
  function q (line 6) | function q(c,a){if(X.test(a))return parseInt(parseFloat(a)/100*s(c));ret...
  function o (line 6) | function o(a){return a.offsetWidth-a.clientWidth}
  function k (line 6) | function k(c,a){return q(c,c.currentStyle[a+"Left"])+q(c,c.currentStyle[...
  function l (line 6) | function l(d){if(d==p.body){var c=d.clientWidth}else{var a=d.getBounding...
  function m (line 6) | function m(a){if(be(m,a,/^(fixed|absolute)$/.test(a.currentStyle.positio...
  function j (line 6) | function j(d){var c=q(d,d.runtimeStyle._3||d.currentStyle.left),a=s(d)-q...
  function cq (line 6) | function cq(c){if(bh.test(c.src)){var a=new Image(c.width,c.height);a.on...
  function cr (line 6) | function cr(i,g){var f=i.runtimeStyle,d=i.offsetHeight,c=new Image;c.onl...
  function bs (line 6) | function bs(f,d,c){var a=f.filters[bH];if(a){a.src=c||f.src;a.enabled=tr...
  function db (line 6) | function db(a){a.src=a.pngSrc;a.filters[bH].enabled=false}
  function w (line 6) | function w(){if(B.currentStyle.backgroundAttachment!=="fixed"){if(B.curr...
  function A (line 6) | function A(a){return a?bq(a)||A(a.parentElement):false}
  function s (line 6) | function s(d,c,a){setTimeout("document.all."+d.uniqueID+".runtimeStyle.s...
  function q (line 6) | function q(a){if(be(q,a,a.currentStyle.backgroundAttachment==="fixed"&&!...
  function n (line 6) | function n(c){r.src=c.currentStyle.backgroundImage.slice(5,-2);var a=c.c...
  function o (line 6) | function o(a){if(be(o,a,bq(a))){Y(a,"position","absolute");Y(a,"left",a....
  function k (line 6) | function k(d,c){p.body.getBoundingClientRect();j.positionTop(d,c);j.posi...
  function l (line 6) | function l(){var c=q.elements;for(var a in c)n(c[a]);c=o.elements;for(a ...
  function dc (line 6) | function dc(){var s="xx-small,x-small,small,medium,large,x-large,xx-larg...
  function da (line 6) | function da(a){return a.replace(new RegExp("([{;\\s])("+bF.join("|")+")\...
  function dg (line 6) | function dg(c,a){return a.toUpperCase()}
  function dp (line 6) | function dp(f,d,c){f=bZ(f);if(!d)d=p;var a=d;bw=o0.test(f);if(bw){d=d.pa...
  function dw (line 6) | function dw(a){a=dv.parse(a.replace(du,"\\x$1")).replace(bz,"$1").replac...
  function dJ (line 6) | function dJ(a){return a.replace(cb,dx)}
  function dx (line 6) | function dx(c,a){return W[a]}
  function bS (line 6) | function bS(a){return Array((a.replace(dz,"").match(dy)||"").length+1).j...
  function S (line 6) | function S(c){var a="";if(Z.test(c))a+=",R=d.documentElement";if(v.test(...
  function bv (line 6) | function bv(){throw new SyntaxError("Invalid selector.");}

FILE: themes/default/js/flux.datefields.js
  function processDateFields (line 1) | function processDateFields(){
  function processDateInit (line 25) | function processDateInit(dateCheckBox, dateSelects, dateSelects2){
  function processDateBoxes (line 36) | function processDateBoxes(dateCheckBox, dateSelects, dateSelects2){
  function dateEnable (line 42) | function dateEnable(sel){
  function dateDisable (line 46) | function dateDisable(sel){

FILE: themes/default/js/ie9.js
  function bk (line 6) | function bk(c,a){if(cz.test(c))c=(a||"")+c;return c}
  function by (line 6) | function by(c,a){c=bk(c,a);return c.slice(0,c.lastIndexOf("/")+1)}
  function cB (line 6) | function cB(c,a){try{c=bk(c,a);if(!bl[c]){V.open("GET",c,false);V.send()...
  function F (line 6) | function F(){}
  function a (line 6) | function a(){if(!bm)c.apply(this,arguments)}
  function cN (line 6) | function cN(c,a){return a||"(?:"}
  function O (line 6) | function O(i,g){if(i&&g){var f=(typeof g=="function"?Function:Object).pr...
  function bX (line 6) | function bX(i,g,f){var d=i[g];i[g]=function(){var c=this.base;this.base=...
  function cO (line 6) | function cO(f,d){if(!d)d=f;var c={};for(var a in f)c[a]=d[a];return c}
  function H (line 6) | function H(g){var f=arguments,d=new RegExp("%([1-"+arguments.length+"])"...
  function bo (line 6) | function bo(c,a){return String(c).match(a)||[]}
  function bY (line 6) | function bY(a){return String(a).replace(cE,"\\$1")}
  function bZ (line 6) | function bZ(a){return String(a).replace(cC,"").replace(cD,"")}
  function bT (line 6) | function bT(a){return function(){return a}}
  function cQ (line 6) | function cQ(a){return cc.parse(a).replace(bz,"$1")}
  function bd (line 6) | function bd(a){return a.replace(cb,cR)}
  function cd (line 6) | function cd(c){var a=W.length;W[a]=c.slice(1,-1).replace(bz,"$1").replac...
  function cR (line 6) | function cR(d,c){var a=W[c];if(a==null)return d;return"'"+W[c]+"'"}
  function bp (line 6) | function bp(a){return a.indexOf("'")===0?W[a.slice(1,-1)]:a}
  function ce (line 6) | function ce(a){return cS.parse(a)}
  function bA (line 6) | function bA(a){cT(a);y(N,"onresize",a)}
  function y (line 6) | function y(d,c,a){d.attachEvent(c,a);cf.push(arguments)}
  function cU (line 6) | function cU(d,c,a){try{d.detachEvent(c,a)}catch(ex){}}
  function be (line 6) | function be(d,c,a){if(!d.elements)d.elements={};if(a)d.elements[c.unique...
  function cT (line 6) | function cT(a){bC.push(a)}
  function bq (line 6) | function bq(a){return a.currentStyle["ie7-position"]=="fixed"}
  function bD (line 6) | function bD(c,a){return c.currentStyle[bB+a]||c.currentStyle[a]}
  function Y (line 6) | function Y(d,c,a){if(d.currentStyle[bB+c]==null){d.runtimeStyle[bB+c]=d....
  function cj (line 6) | function cj(c){var a=p.createElement(c||"object");a.style.cssText="posit...
  function z (line 6) | function z(k,l,m,j){var i="";if(!j){m=q(k.media);j=0}if(m==="none"){k.di...
  function A (line 6) | function A(c,a){s.value=a;return c.replace(v,s)}
  function s (line 6) | function s(d,c,a){c=q(c);switch(c){case"screen":case"print":if(c!==s.val...
  function q (line 6) | function q(d){if(!d)return"all";var c=d.toLowerCase().split(/\s*,\s*/);d...
  function n (line 6) | function n(f,d){var c=f._2||f.href,a=bk(c,d);if(L[a])return"";L[a]=f.dis...
  function o (line 6) | function o(c,a){return c.replace(ba,"$1"+a.slice(0,a.lastIndexOf("/")+1)...
  function Z (line 6) | function Z(a){if(a!=x&&a.currentStyle.position!=="absolute"){S(a,"margin...
  function S (line 6) | function S(g,f){if(!g.runtimeStyle[f]){var d=g.parentElement;var c=f==="...
  function ba (line 6) | function ba(c,a){return a==="auto"?0:C(c,a)}
  function A (line 6) | function A(c,a){if(!c.runtimeStyle.fixedWidth){if(!a)a=c.currentStyle.wi...
  function s (line 6) | function s(c){if(!bq(c)){var a=c.offsetParent;while(a&&!a.currentStyle.h...
  function q (line 6) | function q(c,a){if(X.test(a))return parseInt(parseFloat(a)/100*s(c));ret...
  function o (line 6) | function o(a){return a.offsetWidth-a.clientWidth}
  function k (line 6) | function k(c,a){return q(c,c.currentStyle[a+"Left"])+q(c,c.currentStyle[...
  function l (line 6) | function l(d){if(d==p.body){var c=d.clientWidth}else{var a=d.getBounding...
  function m (line 6) | function m(a){if(be(m,a,/^(fixed|absolute)$/.test(a.currentStyle.positio...
  function j (line 6) | function j(d){var c=q(d,d.runtimeStyle._3||d.currentStyle.left),a=s(d)-q...
  function cq (line 6) | function cq(c){if(bh.test(c.src)){var a=new Image(c.width,c.height);a.on...
  function cr (line 6) | function cr(i,g){var f=i.runtimeStyle,d=i.offsetHeight,c=new Image;c.onl...
  function bs (line 6) | function bs(f,d,c){var a=f.filters[bH];if(a){a.src=c||f.src;a.enabled=tr...
  function db (line 6) | function db(a){a.src=a.pngSrc;a.filters[bH].enabled=false}
  function w (line 6) | function w(){if(B.currentStyle.backgroundAttachment!=="fixed"){if(B.curr...
  function A (line 6) | function A(a){return a?bq(a)||A(a.parentElement):false}
  function s (line 6) | function s(d,c,a){setTimeout("document.all."+d.uniqueID+".runtimeStyle.s...
  function q (line 6) | function q(a){if(be(q,a,a.currentStyle.backgroundAttachment==="fixed"&&!...
  function n (line 6) | function n(c){r.src=c.currentStyle.backgroundImage.slice(5,-2);var a=c.c...
  function o (line 6) | function o(a){if(be(o,a,bq(a))){Y(a,"position","absolute");Y(a,"left",a....
  function k (line 6) | function k(d,c){p.body.getBoundingClientRect();j.positionTop(d,c);j.posi...
  function l (line 6) | function l(){var c=q.elements;for(var a in c)n(c[a]);c=o.elements;for(a ...
  function dc (line 6) | function dc(){var s="xx-small,x-small,small,medium,large,x-large,xx-larg...
  function da (line 6) | function da(a){return a.replace(new RegExp("([{;\\s])("+bF.join("|")+")\...
  function dg (line 6) | function dg(c,a){return a.toUpperCase()}
  function dp (line 6) | function dp(f,d,c){f=bZ(f);if(!d)d=p;var a=d;bw=o0.test(f);if(bw){d=d.pa...
  function dw (line 6) | function dw(a){a=dv.parse(a.replace(du,"\\x$1")).replace(bz,"$1").replac...
  function dJ (line 6) | function dJ(a){return a.replace(cb,dx)}
  function dx (line 6) | function dx(c,a){return W[a]}
  function bS (line 6) | function bS(a){return Array((a.replace(dz,"").match(dy)||"").length+1).j...
  function S (line 6) | function S(c){var a="";if(Z.test(c))a+=",R=d.documentElement";if(v.test(...
  function bv (line 6) | function bv(){throw new SyntaxError("Invalid selector.");}

FILE: themes/default/js/jquery-1.8.3.min.js
  function _ (line 2) | function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=...
  function H (line 2) | function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-...
  function B (line 2) | function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))con...
  function et (line 2) | function et(){return!1}
  function tt (line 2) | function tt(){return!0}
  function ut (line 2) | function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}
  function at (line 2) | function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}
  function ft (line 2) | function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,...
  function lt (line 2) | function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.cre...
  function Lt (line 2) | function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ow...
  function At (line 2) | function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._...
  function Ot (line 2) | function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.cle...
  function Mt (line 2) | function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getEl...
  function _t (line 2) | function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}
  function Qt (line 2) | function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.sl...
  function Gt (line 2) | function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(...
  function Yt (line 2) | function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n....
  function Zt (line 2) | function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[...
  function en (line 2) | function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,...
  function tn (line 2) | function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s...
  function nn (line 2) | function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body)...
  function fn (line 2) | function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn....
  function Cn (line 2) | function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var ...
  function kn (line 2) | function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s...
  function Ln (line 2) | function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r...
  function An (line 2) | function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFi...
  function On (line 2) | function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dat...
  function Fn (line 2) | function Fn(){try{return new e.XMLHttpRequest}catch(t){}}
  function In (line 2) | function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function $n (line 2) | function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}
  function Jn (line 2) | function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]...
  function Kn (line 2) | function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(funct...
  function Qn (line 2) | function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n...
  function Gn (line 2) | function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e....
  function Yn (line 2) | function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}
  function Zn (line 2) | function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],...
  function tr (line 2) | function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.pa...
  function nt (line 2) | function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||type...
  function rt (line 2) | function rt(e){return function(t){var n=t.nodeName.toLowerCase();return ...
  function it (line 2) | function it(e){return function(t){var n=t.nodeName.toLowerCase();return(...
  function st (line 2) | function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=...
  function ot (line 2) | function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r==...
  function ut (line 2) | function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice...
  function at (line 2) | function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t....
  function ft (line 2) | function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i-...
  function lt (line 2) | function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)...
  function ct (line 2) | function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)...
  function ht (line 2) | function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relat...
  function pt (line 2) | function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var...
  function dt (line 2) | function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}
  function vt (line 2) | function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length=...
  function mt (line 2) | function mt(){}
  function e (line 2) | function e(t,n){return new e.fn.init(t,n)}
  function T (line 2) | function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeou...
Condensed preview — 559 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,994K chars).
[
  {
    "path": ".deepsource.toml",
    "chars": 145,
    "preview": "version = 1\n\n[[analyzers]]\nname = \"php\"\n\n[[analyzers]]\nname = \"javascript\"\n\n[[analyzers]]\nname = \"sql\"\n\nexclude_files = "
  },
  {
    "path": ".editorconfig",
    "chars": 337,
    "preview": "# rAthena FluxCP EditorConfig file\n# EditorConfig is awesome: https://EditorConfig.org\n\nroot = true\n\n[*]\ninsert_final_ne"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1289,
    "preview": "name: Bug Report\ndescription: Create an Issue that details broken or unexpected behaviour\nlabels: [Bug Report]\nbody:\n- t"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 307,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Forum Support\n    url: https://rathena.org/board/forum/21-web-suppo"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/enhancement_request.yml",
    "chars": 383,
    "preview": "name: Enhancement Request\ndescription: Submit your request for changes to existing code to provide more functionality or"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
    "chars": 65,
    "preview": "Fixes # .\n\nChanges proposed in this Pull Request:\n * ?\n * ?\n * ?\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 65,
    "preview": "Fixes # .\n\nChanges proposed in this Pull Request:\n * ?\n * ?\n * ?\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "chars": 841,
    "preview": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  schedule:\n    - cron"
  },
  {
    "path": ".gitignore",
    "chars": 438,
    "preview": "# Images\n/data/items/icons/*.png\n/data/items/images/*.png\n\n/data/jobs/images/F/*.gif\n/data/jobs/images/M/*.gif\n\n/data/mo"
  },
  {
    "path": ".htaccess",
    "chars": 177,
    "preview": "#RewriteEngine On\n#RewriteBase /\n#RewriteCond %{REQUEST_FILENAME} !-f\n#RewriteCond %{REQUEST_FILENAME} !-d\n#RewriteRule "
  },
  {
    "path": "LICENSE",
    "chars": 7639,
    "preview": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software"
  },
  {
    "path": "README.md",
    "chars": 2493,
    "preview": "FluxCP\n======\n[![DeepSource](https://app.deepsource.com/gh/rathena/FluxCP.svg/?label=active+issues&show_trend=true&token"
  },
  {
    "path": "addons/helloworld/config/access.php",
    "chars": 149,
    "preview": "<?php\nreturn array(\n\t'modules' => array(\n\t\t'helloworld' => array(\n\t\t\t'index' => AccountLevel::ADMIN\n\t\t)\n\t),\n\t'features' "
  },
  {
    "path": "addons/helloworld/config/addon.php",
    "chars": 104,
    "preview": "<?php\nreturn array(\n\t'MenuItems' => array(\n\t\t//'Hello World' => array('module' => 'helloworld')\n\t)\n)\n?>\n"
  },
  {
    "path": "addons/helloworld/lang/en_us.php",
    "chars": 202,
    "preview": "<?php\nreturn array(\n\t'HelloWorld'       => 'Hello, World!',\n\t'HelloInfoText'    => 'This is a “Hello World” sample from "
  },
  {
    "path": "addons/helloworld/lang/ko_kr.php",
    "chars": 161,
    "preview": "<?php\nreturn array(\n\t'HelloWorld'       => '안녕하세요!',\n\t'HelloInfoText'    => '현제보고계시는건 샘플 애드온 프로그램입니다!',\n\t'HelloVersionTe"
  },
  {
    "path": "addons/helloworld/modules/helloworld/index.php",
    "chars": 140,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n\n$fluxVersion  = Flux::VERSION;\n$fluxVersion .= Flux::REPOSVERSION ? '.'.Flux::RE"
  },
  {
    "path": "addons/helloworld/themes/default/helloworld/index.php",
    "chars": 217,
    "preview": "<?php if (!defined('FLUX_ROOT')) exit; ?>\n<h2><?php echo Flux::message('HelloWorld') ?></h2>\n<p><?php echo Flux::message"
  },
  {
    "path": "config/.htaccess",
    "chars": 31,
    "preview": "Order deny,allow\nDeny from all\n"
  },
  {
    "path": "config/access.php",
    "chars": 11032,
    "preview": "<?php\n// This file should control all access to specified modules and actions.\nreturn array(\n\t// Module/action permissio"
  },
  {
    "path": "config/application.php",
    "chars": 31271,
    "preview": "<?php\n// This is the application configuration file. All values have been set to\n// the default, and should be changed a"
  },
  {
    "path": "config/attributes.php",
    "chars": 100,
    "preview": "<?php\n// rA attributes.\nreturn array(\n\t1 => 'Ice',\n\t2 => 'Earth',\n\t3 => 'Fire',\n\t4 => 'Wind',\n);\n?>\n"
  },
  {
    "path": "config/cashshopcategories.php",
    "chars": 516,
    "preview": "<?php\n// These are categories for the cash shop. Pay close attention to the numbers,\n// as these numbers are stored in t"
  },
  {
    "path": "config/castlenames.php",
    "chars": 2041,
    "preview": "<?php\n// Commenting out a castle's entry will remove it from the castles page\n// and exclude it from being a factor in t"
  },
  {
    "path": "config/elements.php",
    "chars": 251,
    "preview": "<?php\n// rA elements.\nreturn array(\n\t'Neutral' => 'Neutral',\n\t'Water' => 'Water',\n\t'Earth' => 'Earth',\n\t'Fire' => 'Fire'"
  },
  {
    "path": "config/equip_jobs.php",
    "chars": 1005,
    "preview": "<?php\nreturn array(\n\t0\t=>\t// Default job list\n\tarray(\n\t\t'job_all' => 'All jobs',\n\t\t'job_novice' => 'Novice',\n\t\t'job_supe"
  },
  {
    "path": "config/equip_location_combinations.php",
    "chars": 1113,
    "preview": "<?php\nreturn array(\n\t'location_left_hand/location_right_hand'\t=> 'Two-Handed',\n\t'location_head_low/location_head_mid/loc"
  },
  {
    "path": "config/equip_locations.php",
    "chars": 1052,
    "preview": "<?php\nreturn array(\n\t'location_head_low'\t\t\t\t\t=> 'Lower Headgear',\n\t'location_right_hand'\t\t\t\t=> 'Main Hand',\n\t'location_g"
  },
  {
    "path": "config/equip_upper.php",
    "chars": 324,
    "preview": "<?php\nreturn array(\n\t0\t=>\t// Default class list\n\tarray(\n\t\t'class_all' => 'All classes',\n\t\t'class_normal' => 'Normal',\n\t\t"
  },
  {
    "path": "config/error.php",
    "chars": 647,
    "preview": "<?php\n// Configuration information for critical error handling.\n// Critical errors are exposed due to an exception in th"
  },
  {
    "path": "config/feedingtypes.php",
    "chars": 86,
    "preview": "<?php\nreturn array(\n    'P' => 'Pet',\n    'H' => 'Homunculus',\n    'O' => 'Other',\n);\n"
  },
  {
    "path": "config/groups.php",
    "chars": 2497,
    "preview": "<?php\nfinal class AccountLevel {\n/*\tCorresponds to the different 'level' attribrutes */\n\tconst ANYONE =   -2;\n\tconst UNA"
  },
  {
    "path": "config/homunculus.php",
    "chars": 489,
    "preview": "<?php\nreturn array(\n\t// Lif\n\t6001 => 'Lif',\n\t6009 => 'Lif',\n\t6005 => 'Lif',\n\t6013 => 'Lif',\n\t\n\t// Amistr\n\t6002 => 'Amist"
  },
  {
    "path": "config/item_randoptions.php",
    "chars": 8783,
    "preview": "<?php\nreturn array(\n\t1\t=>\t'MaxHP +%s',\n\t2\t=>\t'MaxSP +%s',\n\t3\t=>\t'STR +%s',\n\t4\t=>\t'AGI +%s',\n\t5\t=>\t'VIT +%s',\n\t6\t=>\t'INT "
  },
  {
    "path": "config/itemsflags.php",
    "chars": 432,
    "preview": "<?php\nreturn array(\n\t'flag_buyingstore'\t=> 'Item is available to Buying Stores',\n\t'flag_deadbranch'\t=> 'Item is a Dead B"
  },
  {
    "path": "config/itemsubtypes.php",
    "chars": 1059,
    "preview": "<?php\nreturn array(\n\t'weapon' => array(\n\t\t'1haxe'\t\t\t=> 'One-Handed Axe',\n\t\t'1hspear'\t\t=> 'One-Handed Spear',\n\t\t'1hsword'"
  },
  {
    "path": "config/itemtypes.php",
    "chars": 342,
    "preview": "<?php\nreturn array(\n\t'ammo'\t\t\t=> 'Ammo',\n\t'armor'\t\t\t=> 'Armor',\n\t'card'\t\t\t=> 'Card',\n\t'cash'\t\t\t=> 'Cash Shop Reward',\n\t'"
  },
  {
    "path": "config/jobs.php",
    "chars": 4552,
    "preview": "<?php\nreturn array(\n\t0    => 'Novice',\n\t1    => 'Swordsman',\n\t2    => 'Mage',\n\t3    => 'Archer',\n\t4    => 'Acolyte',\n\t5 "
  },
  {
    "path": "config/jobs_alchemist.php",
    "chars": 177,
    "preview": "<?php\nreturn array(\n\t18   => 'Alchemist',\n\t4019 => 'Creator',\n\t4041 => 'Baby Alchemist',\n\t4071 => 'Genetic',\n\t4078 => 'G"
  },
  {
    "path": "config/jobs_blacksmith.php",
    "chars": 187,
    "preview": "<?php\nreturn array(\n\t10   => 'Blacksmith',\n\t4011 => 'Whitesmith',\n\t4033 => 'Baby Blacksmith',\n\t4058 => 'Mechanic',\n\t4064"
  },
  {
    "path": "config/jobs_gender_linked.php",
    "chars": 410,
    "preview": "<?php\nreturn array(\n\t19   => 'Bard',\n\t20   => 'Dancer',\n\t4020 => 'Clown',\n\t4021 => 'Gypsy',\n\t4042 => 'Baby Bard',\n\t4043 "
  },
  {
    "path": "config/loginerrors.php",
    "chars": 239,
    "preview": "<?php\nreturn array(\n\t0 => 'Unexpected Error',\n\t1 => 'Invalid Server',\n\t2 => 'Invalid Credentials',\n\t3 => 'Temporarily Ba"
  },
  {
    "path": "config/monster_ai.php",
    "chars": 2327,
    "preview": "<?php\nreturn array(\n\t'01'\t\t\t=> array('mode_canattack', 'mode_canmove'),\n\t'02'\t\t\t=> array('mode_canattack', 'mode_looter'"
  },
  {
    "path": "config/monstermode.php",
    "chars": 1030,
    "preview": "<?php\nreturn array(\n\t'mode_aggressive'\t\t\t=> 'Aggressive',\n\t'mode_angry'\t\t\t\t=> 'Angry',\n\t'mode_assist'\t\t\t\t=> 'Assist',\n\t'"
  },
  {
    "path": "config/picktypes.php",
    "chars": 536,
    "preview": "<?php\nreturn array(\n\t'A' => 'Admin',\n\t'B' => 'Buy Store',\n\t'C' => 'Consumed',\n\t'D' => 'Stolen/Ganked',\n\t'E' => 'Mailed',"
  },
  {
    "path": "config/races.php",
    "chars": 294,
    "preview": "<?php\n// rA monster races.\nreturn array(\n\t 'Formless'\t\t=> 'Formless',\n\t 'Undead'\t\t=> 'Undead',\n\t 'Brute'\t\t=> 'Brute',\n\t "
  },
  {
    "path": "config/servers.php",
    "chars": 6236,
    "preview": "<?php\nreturn array(\n\t// Example server configuration. You may have more arrays like this one to\n\t// specify multiple ser"
  },
  {
    "path": "config/shopcategories.php",
    "chars": 978,
    "preview": "<?php\n// These are categories for the item shop. Pay close attention to the numbers,\n// as these numbers are stored in t"
  },
  {
    "path": "config/sizes.php",
    "chars": 113,
    "preview": "<?php\n// rA monster sizes.\nreturn array(\n\t 'Small' => 'Small',\n\t 'Medium' => 'Medium',\n\t 'Large' => 'Large'\n)\n?>\n"
  },
  {
    "path": "config/trade_restrictions.php",
    "chars": 479,
    "preview": "<?php\nreturn array(\n\t'trade_nodrop'\t\t\t=> 'Can\\'t be dropped',\n\t'trade_notrade'\t\t\t=> 'Can\\'t be traded with player',\n\t'tr"
  },
  {
    "path": "data/captcha/fonts/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/captcha/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/emblem/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/items/icons/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/items/images/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/items/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/itemshop/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/jobs/images/F/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/jobs/images/M/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/jobs/images/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/jobs/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/logs/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/monsters/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/npc/DonationNPC.txt",
    "chars": 3358,
    "preview": "map,x,y,d\tscript\tDonor Rewards Redeemer\t987,{\n\t// ----------------- NPC Settings -----------------\n\t// --- SET THESE BEF"
  },
  {
    "path": "data/npc/PeakNPC.txt",
    "chars": 1219,
    "preview": "-\tscript\tHighest Peak\t-1,{\n\nOnPCLoginEvent:\n\n// Assign current number of online players\nsleep 1000;\n.onlineusers = getus"
  },
  {
    "path": "data/npc/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/npc/support_cmd.txt",
    "chars": 2526,
    "preview": "//===== rAthena Script =======================================\n//= @support\n//===== By: ================================"
  },
  {
    "path": "data/npc/web_commands.txt",
    "chars": 1235,
    "preview": "//===== rAthena Script =======================================\n//= Web Commander\n//===== By: ==========================="
  },
  {
    "path": "data/paypal/button.php",
    "chars": 2035,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n\nif (empty($amount)) {\n\treturn false;\n}\n\n$session            = Flux::$sessionData"
  },
  {
    "path": "data/paypal/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/schemas/charmapdb/cp_charprefs.20080929191525.sql",
    "chars": 353,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_charprefs` (\n  `id` int(10) unsigned NOT NULL auto_increment,\n  `account_id` int(11) unsi"
  },
  {
    "path": "data/schemas/charmapdb/cp_charprefs.20081109093448.sql",
    "chars": 71,
    "preview": "ALTER TABLE  `cp_charprefs` ADD INDEX (  `account_id` ,  `char_id` ) ;\n"
  },
  {
    "path": "data/schemas/charmapdb/cp_charprefs.20120816150540.sql",
    "chars": 50,
    "preview": "ALTER TABLE `cp_charprefs` ADD INDEX (`char_id`);\n"
  },
  {
    "path": "data/schemas/charmapdb/cp_commands.20160608065501.sql",
    "chars": 397,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_commands` (\n  `id` int(6) NOT NULL AUTO_INCREMENT,\n  `command` varchar(128) NOT NULL DEFA"
  },
  {
    "path": "data/schemas/charmapdb/cp_itemdesc.20170210033400.sql",
    "chars": 224,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_itemdesc` (\n  `itemid` int(10) unsigned NOT NULL auto_increment,\n  `itemdesc` text NOT NU"
  },
  {
    "path": "data/schemas/charmapdb/cp_itemshop.20080928225124.sql",
    "chars": 339,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_itemshop` (\n  `id` int(11) unsigned NOT NULL auto_increment,\n  `nameid` int(11) unsigned "
  },
  {
    "path": "data/schemas/charmapdb/cp_itemshop.20081109093448.sql",
    "chars": 329,
    "preview": "DROP PROCEDURE IF EXISTS cp_itemshop_20081109093448;\nCREATE PROCEDURE cp_itemshop_20081109093448() BEGIN\n    DECLARE CON"
  },
  {
    "path": "data/schemas/charmapdb/cp_itemshop.20081128093449.sql",
    "chars": 53,
    "preview": "ALTER TABLE  `cp_itemshop` ADD INDEX (  `nameid` ) ;\n"
  },
  {
    "path": "data/schemas/charmapdb/cp_itemshop.20090104190020.sql",
    "chars": 311,
    "preview": "DROP PROCEDURE IF EXISTS cp_itemshop_20090104190020;\nCREATE PROCEDURE cp_itemshop_20090104190020() BEGIN\n    DECLARE CON"
  },
  {
    "path": "data/schemas/charmapdb/cp_onlinepeak.20131120120201.sql",
    "chars": 207,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_onlinepeak` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `users` int(10) unsigned"
  },
  {
    "path": "data/schemas/charmapdb/cp_redeemlog.20080928225124.sql",
    "chars": 520,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_redeemlog` (\n  `id` int(11) unsigned NOT NULL auto_increment,\n  `nameid` int(11) unsigned"
  },
  {
    "path": "data/schemas/charmapdb/cp_redeemlog.20081001054354.sql",
    "chars": 351,
    "preview": "DROP PROCEDURE IF EXISTS cp_redeemlog_20081001054354;\nCREATE PROCEDURE cp_redeemlog_20081001054354() BEGIN\n    DECLARE C"
  },
  {
    "path": "data/schemas/charmapdb/cp_redeemlog.20081109093448.sql",
    "chars": 83,
    "preview": "ALTER TABLE  `cp_redeemlog` ADD INDEX (  `nameid` ,  `account_id` ,  `char_id` ) ;\n"
  },
  {
    "path": "data/schemas/charmapdb/cp_xferlog.20080928225124.sql",
    "chars": 433,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_xferlog` (\n  `id` int(10) unsigned NOT NULL auto_increment,\n  `from_account_id` int(10) u"
  },
  {
    "path": "data/schemas/charmapdb/cp_xferlog.20081109093448.sql",
    "chars": 104,
    "preview": "ALTER TABLE  `cp_xferlog` ADD INDEX (  `from_account_id` ,  `target_account_id` ,  `target_char_id` ) ;\n"
  },
  {
    "path": "data/schemas/charmapdb/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/schemas/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/schemas/logindb/cp_banlog.20131213174201.sql",
    "chars": 432,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_banlog` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `account_id` int(11) unsigne"
  },
  {
    "path": "data/schemas/logindb/cp_cmsnews.20131120145701.sql",
    "chars": 308,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_cmsnews` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `title` varchar(100) NOT NULL,\n  `bo"
  },
  {
    "path": "data/schemas/logindb/cp_cmspages.20131120161901.sql",
    "chars": 515,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_cmspages` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `path` varchar(100) NOT NULL,\n  `ti"
  },
  {
    "path": "data/schemas/logindb/cp_cmssettings.20131120145801.sql",
    "chars": 180,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_cmssettings` (\n  `name` varchar(128) NOT NULL,\n  `value` varchar(128) NOT NULL,\n  UNIQUE "
  },
  {
    "path": "data/schemas/logindb/cp_createlog.20131213174201.sql",
    "chars": 660,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_createlog` (\n  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n  `account_id` int(11) unsi"
  },
  {
    "path": "data/schemas/logindb/cp_createlog.20170720151901.sql",
    "chars": 75,
    "preview": "ALTER TABLE `cp_createlog` CHANGE `reg_date` `reg_date` DATETIME NOT NULL;\n"
  },
  {
    "path": "data/schemas/logindb/cp_createlog.20250614124331.sql",
    "chars": 68,
    "preview": "ALTER TABLE cp_createlog MODIFY COLUMN reg_ip VARCHAR(39) NOT NULL;\n"
  },
  {
    "path": "data/schemas/logindb/cp_credits.20131213174201.sql",
    "chars": 395,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_credits` (\n  `account_id` int(11) unsigned NOT NULL,\n  `balance` int(11) unsigned NOT NUL"
  },
  {
    "path": "data/schemas/logindb/cp_emailchange.20131213174201.sql",
    "chars": 537,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_emailchange` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `code` varchar(32) NOT NULL,\n  `"
  },
  {
    "path": "data/schemas/logindb/cp_emailchange.20250609133400.sql",
    "chars": 124,
    "preview": "ALTER TABLE cp_emailchange\nMODIFY COLUMN request_ip VARCHAR(39) NOT NULL,\nMODIFY COLUMN change_ip VARCHAR(39) DEFAULT NU"
  },
  {
    "path": "data/schemas/logindb/cp_ipbanlog.20120816150540.sql",
    "chars": 390,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_ipbanlog` (\n  `id` int(10) unsigned NOT NULL auto_increment,\n  `ip_address` varchar(15) N"
  },
  {
    "path": "data/schemas/logindb/cp_ipbanlog.20250609133400.sql",
    "chars": 71,
    "preview": "ALTER TABLE cp_ipbanlog MODIFY COLUMN ip_address VARCHAR(39) NOT NULL;\n"
  },
  {
    "path": "data/schemas/logindb/cp_loginlog.20131213174201.sql",
    "chars": 408,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_loginlog` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `account_id` int(10) DEFAULT NULL,\n"
  },
  {
    "path": "data/schemas/logindb/cp_loginlog.20250609133400.sql",
    "chars": 63,
    "preview": "ALTER TABLE cp_loginlog MODIFY COLUMN ip VARCHAR(39) NOT NULL;\n"
  },
  {
    "path": "data/schemas/logindb/cp_loginprefs.20131213174201.sql",
    "chars": 387,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_loginprefs` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `account_id` int(11) uns"
  },
  {
    "path": "data/schemas/logindb/cp_pwchange.20131213174201.sql",
    "chars": 383,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_pwchange` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `account_id` int(10) NOT NULL,\n  `o"
  },
  {
    "path": "data/schemas/logindb/cp_pwchange.20250609133400.sql",
    "chars": 70,
    "preview": "ALTER TABLE cp_pwchange MODIFY COLUMN change_ip VARCHAR(39) NOT NULL;\n"
  },
  {
    "path": "data/schemas/logindb/cp_resetpass.20131213174201.sql",
    "chars": 542,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_resetpass` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `code` varchar(32) NOT NULL,\n  `ac"
  },
  {
    "path": "data/schemas/logindb/cp_resetpass.20250609133400.sql",
    "chars": 121,
    "preview": "ALTER TABLE cp_resetpass\nMODIFY COLUMN request_ip VARCHAR(39) NOT NULL,\nMODIFY COLUMN reset_ip VARCHAR(39) DEFAULT NULL;"
  },
  {
    "path": "data/schemas/logindb/cp_servicedesk.20131122010001.sql",
    "chars": 690,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_servicedesk` (\n  `ticket_id` int(6) NOT NULL AUTO_INCREMENT,\n  `account_id` int(7) NOT NU"
  },
  {
    "path": "data/schemas/logindb/cp_servicedesk.20250609133400.sql",
    "chars": 78,
    "preview": "ALTER TABLE cp_servicedesk MODIFY COLUMN ip VARCHAR(39) NOT NULL DEFAULT '0';\n"
  },
  {
    "path": "data/schemas/logindb/cp_servicedeska.20131122010001.sql",
    "chars": 464,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_servicedeska` (\n  `action_id` int(6) NOT NULL AUTO_INCREMENT,\n  `ticket_id` int(6) NOT NU"
  },
  {
    "path": "data/schemas/logindb/cp_servicedeska.20250609133400.sql",
    "chars": 79,
    "preview": "ALTER TABLE cp_servicedeska MODIFY COLUMN ip VARCHAR(39) NOT NULL DEFAULT '0';\n"
  },
  {
    "path": "data/schemas/logindb/cp_servicedeskcat.20131122010001.sql",
    "chars": 401,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_servicedeskcat` (\n  `cat_id` int(3) NOT NULL AUTO_INCREMENT,\n  `name` varchar(32) NOT NUL"
  },
  {
    "path": "data/schemas/logindb/cp_servicedesksettings.20131122010001.sql",
    "chars": 393,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_servicedesksettings` (\n  `account_id` int(7) NOT NULL,\n  `account_name` varchar(32) NOT N"
  },
  {
    "path": "data/schemas/logindb/cp_trusted.20131213174201.sql",
    "chars": 354,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_trusted` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `account_id` int(11) unsign"
  },
  {
    "path": "data/schemas/logindb/cp_txnlog.20131213174201.sql",
    "chars": 1712,
    "preview": "CREATE TABLE IF NOT EXISTS `cp_txnlog` (\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n  `account_id` int(11) unsigne"
  },
  {
    "path": "data/schemas/logindb/cp_txnlog.20170217073601.sql",
    "chars": 137,
    "preview": "ALTER TABLE `cp_txnlog` CHANGE `referrer_id` `referrer_id` VARCHAR(13) CHARACTER SET latin1 COLLATE latin1_swedish_ci NU"
  },
  {
    "path": "data/schemas/logindb/cp_txnlog.20170221184601.sql",
    "chars": 143,
    "preview": "ALTER TABLE `cp_txnlog` CHANGE `address_status` `address_status` VARCHAR(11) CHARACTER SET latin1 COLLATE latin1_swedish"
  },
  {
    "path": "data/schemas/logindb/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/templates/changemail.php",
    "chars": 1557,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n$siteTitle  = Flux::config('SiteTitle');\n$emailTitle = sprintf('%s: Change E-mail"
  },
  {
    "path": "data/templates/confirm.php",
    "chars": 1553,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n$siteTitle  = Flux::config('SiteTitle');\n$emailTitle = sprintf('%s Account Confir"
  },
  {
    "path": "data/templates/contactform.php",
    "chars": 1523,
    "preview": "<?php\n/* Contact Form Addon\n * Created and maintained by Akkarin\n * Current Version: 1.00.01\n */\n \nif (!defined('FLUX_RO"
  },
  {
    "path": "data/templates/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/templates/marketing1.php",
    "chars": 1323,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n?>\n<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\" />\n\t\t<title>{emailtitle"
  },
  {
    "path": "data/templates/newpass.php",
    "chars": 1097,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n$siteTitle  = Flux::config('SiteTitle');\n$emailTitle = sprintf('%s: Password Has "
  },
  {
    "path": "data/templates/newticket.php",
    "chars": 1167,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n$emailTitle = sprintf('New Ticket Created');\n?>\n<!DOCTYPE html PUBLIC \"-//W3C//DT"
  },
  {
    "path": "data/templates/resetpass.php",
    "chars": 1267,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n$siteTitle  = Flux::config('SiteTitle');\n$emailTitle = sprintf('%s: Reset Passwor"
  },
  {
    "path": "data/templates/ticketreply.php",
    "chars": 1144,
    "preview": "<?php\nif (!defined('FLUX_ROOT')) exit;\n$siteTitle  = Flux::config('SiteTitle');\n$emailTitle = sprintf('%s: Ticket Reply'"
  },
  {
    "path": "data/tmp/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/tmp/transactions/Refunded/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/tmp/transactions/Reversed/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/tmp/transactions/web_accept/Completed/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/tmp/transactions/web_accept/Denied/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/tmp/transactions/web_accept/Pending/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "doc/user_lang.md",
    "chars": 1581,
    "preview": "Language Files\n======\n\nHow do they work?\n---------\nThe **lang/** directory contains translations for use with FluxCP. Th"
  },
  {
    "path": "doc/user_theme.md",
    "chars": 2355,
    "preview": "Using a Custom Theme\n======\n\nHow does it work?\n---------\nThe Theme System in FluxCP is based on an \"inheritance structur"
  },
  {
    "path": "error.php",
    "chars": 2587,
    "preview": "<?php if (defined('__ERROR__') && $showExceptions): ?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\t\""
  },
  {
    "path": "index.php",
    "chars": 7492,
    "preview": "<?php\n\nif( version_compare( PHP_VERSION, '7.3.0', '<' ) ){\n\texit(\n\t\tsprintf(\n\t\t\t'FluxCP requires PHP 7.3.0 or higher. Yo"
  },
  {
    "path": "lang/en_us.php",
    "chars": 43476,
    "preview": "<?php\nreturn array(\n\t// Generic/Misc.\n\t'Language'                => 'English',\n\t'YesLabel'                => 'Yes',\n\t'No"
  },
  {
    "path": "lang/es_es.php",
    "chars": 48445,
    "preview": "<?php\n// Translation by: jaBote\n// Revised by: -\n// Translator Notes:\n// This is a Spanish/Spain translation. However, m"
  },
  {
    "path": "lang/id_id.php",
    "chars": 41117,
    "preview": "<?php\n// rAthena FluxCP Language Library\n//\n// Mempersembahkan, dukungan Bahasa Indonesia (id_id.php)\n//\n// Oleh:\n// Cyd"
  },
  {
    "path": "lang/pt_br.php",
    "chars": 48037,
    "preview": "<?php\nreturn array(\n\t// Generic/Misc.\n\t'Language'                => 'Portuguese',\n\t'YesLabel'                => 'Sim',\n\t"
  },
  {
    "path": "lib/Flux/Addon.php",
    "chars": 1817,
    "preview": "<?php\nrequire_once 'Flux/Config.php';\n\nclass Flux_Addon {\n\tpublic $name;\n\tpublic $addonDir;\n\tpublic $configDir;\n\tpublic "
  },
  {
    "path": "lib/Flux/Athena.php",
    "chars": 18652,
    "preview": "<?php\nrequire_once 'Flux/Config.php';\n\n/**\n * The Athena class is used for all database interactions with each rA server"
  },
  {
    "path": "lib/Flux/Authorization.php",
    "chars": 3899,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\n/**\n * The authorization component allows you to find out whether or not the\n * th"
  },
  {
    "path": "lib/Flux/BaseServer.php",
    "chars": 1179,
    "preview": "<?php\n/**\n * The BaseServer implementation is used for containing methods and properties\n * directly related to the serv"
  },
  {
    "path": "lib/Flux/Captcha.php",
    "chars": 3020,
    "preview": "<?php\n/**\n * Draws a CAPTCHA image for use in forms such as the registration form.\n */\nclass Flux_Captcha {\n\t/**\n\t * GD "
  },
  {
    "path": "lib/Flux/CharServer.php",
    "chars": 149,
    "preview": "<?php\nrequire_once 'Flux/BaseServer.php';\n\n/**\n * Represents an rAthena Character Server.\n */\nclass Flux_CharServer exte"
  },
  {
    "path": "lib/Flux/Config.php",
    "chars": 8354,
    "preview": "<?php\n// You don't need this line if you decided to specify a custom $exceptionClass\n// property in your version of Flux"
  },
  {
    "path": "lib/Flux/Connection/Statement.php",
    "chars": 1857,
    "preview": "<?php\nrequire_once 'Flux/LogFile.php';\nrequire_once 'Flux/Error.php';\n\nclass Flux_Connection_Statement {\n\tpublic $stmt;\n"
  },
  {
    "path": "lib/Flux/Connection/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/Flux/Connection.php",
    "chars": 6759,
    "preview": "<?php\nrequire_once 'Flux/Connection/Statement.php';\nrequire_once 'Flux/DataObject.php';\n\n/**\n * The connection class act"
  },
  {
    "path": "lib/Flux/DataObject.php",
    "chars": 1527,
    "preview": "<?php\nrequire_once 'Flux/Config.php';\nrequire_once 'Flux/Error.php';\n\n/**\n * Objectifies a given object.\n */\nclass Flux_"
  },
  {
    "path": "lib/Flux/Dispatcher.php",
    "chars": 6686,
    "preview": "<?php\nrequire_once 'Flux/Config.php';\nrequire_once 'Flux/Template.php';\n\n/**\n * The dispatcher is used to handle the cur"
  },
  {
    "path": "lib/Flux/EmblemExporter.php",
    "chars": 2455,
    "preview": "<?php\nrequire_once 'functions/imagecreatefrombmpstring.php';\n\n/**\n *\n */\nclass Flux_EmblemExporter {\n\t/**\n\t *\n\t */\n\tpubl"
  },
  {
    "path": "lib/Flux/Error.php",
    "chars": 151,
    "preview": "<?php\n/**\n * All exceptions raised by Flux should be this or children of this base\n * exception class.\n */\nclass Flux_Er"
  },
  {
    "path": "lib/Flux/FileLoad.php",
    "chars": 1013,
    "preview": "<?php\n\n\nclass FileLoad{\n\n    protected $path;\n    protected $errorCodeMessages = array(\n        1 => 'The uploaded file "
  },
  {
    "path": "lib/Flux/Installer/CharMapServer.php",
    "chars": 458,
    "preview": "<?php\nrequire_once 'Flux/Installer/Schema.php';\n\n/**\n *\n */\nclass Flux_Installer_CharMapServer {\n\t/**\n\t *\n\t */\n\tpublic $"
  },
  {
    "path": "lib/Flux/Installer/MainServer.php",
    "chars": 1096,
    "preview": "<?php\nrequire_once 'Flux/Installer/Schema.php';\nrequire_once 'Flux/Installer/CharMapServer.php';\n\n/**\n *\n */\nclass Flux_"
  },
  {
    "path": "lib/Flux/Installer/Schema.php",
    "chars": 7069,
    "preview": "<?php\nrequire_once 'Flux/Installer/SchemaPermissionError.php';\n\n/**\n *\n */\nclass Flux_Installer_Schema {\t\n\t/**\n\t *\n\t */\n"
  },
  {
    "path": "lib/Flux/Installer/SchemaPermissionError.php",
    "chars": 808,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\nclass Flux_Installer_SchemaPermissionError extends Flux_Error {\n\tpublic $schemaFil"
  },
  {
    "path": "lib/Flux/Installer/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/Flux/Installer.php",
    "chars": 1372,
    "preview": "<?php\nrequire_once 'Flux/Installer/MainServer.php';\n\n/**\n *\n */\nclass Flux_Installer {\n\t/**\n\t *\n\t */\n\tprivate static $in"
  },
  {
    "path": "lib/Flux/ItemExistsError.php",
    "chars": 93,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\nclass Flux_ItemExistsError extends Flux_Error {\n\t\n}\n?>\n"
  },
  {
    "path": "lib/Flux/ItemShop/Cart.php",
    "chars": 2603,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\nclass Flux_ItemShop_Cart {\n\t/**\n\t *\n\t */\n\tpublic $account;\n\t\n\t/**\n\t *\n\t */\n\tprivat"
  },
  {
    "path": "lib/Flux/ItemShop/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/Flux/ItemShop.php",
    "chars": 6189,
    "preview": "<?php\nrequire_once 'Flux/TemporaryTable.php';\nrequire_once 'Flux/ItemExistsError.php';\n\nclass Flux_ItemShop {\n\t/**\n\t * @"
  },
  {
    "path": "lib/Flux/LogFile.php",
    "chars": 1469,
    "preview": "<?php\n/**\n * Convenient way to log information to files.\n */\nclass Flux_LogFile {\n\t/**\n\t * File handler for open log fil"
  },
  {
    "path": "lib/Flux/LoginAthenaGroup.php",
    "chars": 2498,
    "preview": "<?php\n/**\n * Basically acts as an uppermost container holding the LoginServer and Athena\n * instances on a top level.\n *"
  },
  {
    "path": "lib/Flux/LoginError.php",
    "chars": 316,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\nclass Flux_LoginError extends Flux_Error {\n\tconst UNEXPECTED     = 0;\n\tconst INVAL"
  },
  {
    "path": "lib/Flux/LoginServer.php",
    "chars": 18611,
    "preview": "<?php\nrequire_once 'Flux/BaseServer.php';\nrequire_once 'Flux/RegisterError.php';\n\n/**\n * Represents an rAthena Login Ser"
  },
  {
    "path": "lib/Flux/Mailer.php",
    "chars": 2403,
    "preview": "<?php\nrequire 'phpmailer/PHPMailerAutoload.php';\nrequire_once 'Flux/LogFile.php';\n\nclass Flux_Mailer {\n\tprotected $pm;\n\t"
  },
  {
    "path": "lib/Flux/MapServer.php",
    "chars": 142,
    "preview": "<?php\nrequire_once 'Flux/BaseServer.php';\n\n/**\n * Represents an rAthena Map Server.\n */\nclass Flux_MapServer extends Flu"
  },
  {
    "path": "lib/Flux/Paginator.php",
    "chars": 10398,
    "preview": "<?php\n/**\n * The paginator helps in creating pages for SQL-stored data.\n */\nclass Flux_Paginator {\n\t/**\n\t * Number of re"
  },
  {
    "path": "lib/Flux/PaymentNotifyRequest.php",
    "chars": 19222,
    "preview": "<?php\nrequire_once 'Flux/LogFile.php';\nrequire_once 'Flux/Config.php';\nrequire_once 'Flux/Error.php';\n\n/**\n * Handles Pa"
  },
  {
    "path": "lib/Flux/PermissionError.php",
    "chars": 93,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\nclass Flux_PermissionError extends Flux_Error {\n\t\n}\n?>\n"
  },
  {
    "path": "lib/Flux/RegisterError.php",
    "chars": 800,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\nclass Flux_RegisterError extends Flux_Error {\n\tconst USERNAME_ALREADY_TAKEN = 0;\n\t"
  },
  {
    "path": "lib/Flux/SessionData.php",
    "chars": 12070,
    "preview": "<?php\nrequire_once 'Flux/DataObject.php';\nrequire_once 'Flux/ItemShop/Cart.php';\nrequire_once 'Flux/LoginError.php';\n\n/*"
  },
  {
    "path": "lib/Flux/Template.php",
    "chars": 39498,
    "preview": "<?php\nrequire_once 'Flux/Paginator.php';\n\n/**\n * The template is mostly responsible for the presentation logic of things"
  },
  {
    "path": "lib/Flux/TemporaryTable.php",
    "chars": 5852,
    "preview": "<?php\nrequire_once 'Flux/Error.php';\n\n/**\n * This library provides a means of creating a temporary table in MySQL and\n *"
  },
  {
    "path": "lib/Flux/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/Flux.php",
    "chars": 27708,
    "preview": "<?php\nrequire_once 'Flux/Config.php';\nrequire_once 'Flux/Error.php';\nrequire_once 'Flux/Connection.php';\nrequire_once 'F"
  },
  {
    "path": "lib/functions/discordwebhook.php",
    "chars": 547,
    "preview": "<?php\n/**\n *\tDiscord Webhook\n *\tFunction does not include \"username\" or \"avatar_url\" and relies on the setting configure"
  },
  {
    "path": "lib/functions/getReposVersion.php",
    "chars": 659,
    "preview": "<?php\n/**\n * Get the repository version from the GIT hash or SVN revision\n *\n * @return int Revision number\n */\nfunction"
  },
  {
    "path": "lib/functions/imagecreatefrombmpstring.php",
    "chars": 3103,
    "preview": "<?php\n/**\n * Code taken from https://cerescp.svn.sourceforge.net/svnroot/cerescp/emblema.php\n * under the GNU General Pu"
  },
  {
    "path": "lib/functions/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/phpmailer/LICENSE",
    "chars": 26421,
    "preview": "\t\t  GNU LESSER GENERAL PUBLIC LICENSE\n\t\t       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Found"
  },
  {
    "path": "lib/phpmailer/PHPMailerAutoload.php",
    "chars": 1528,
    "preview": "<?php\n/**\n * PHPMailer SPL autoloader.\n * PHP Version 5\n * @package PHPMailer\n * @link https://github.com/PHPMailer/PHPM"
  },
  {
    "path": "lib/phpmailer/VERSION",
    "chars": 7,
    "preview": "5.2.26\n"
  },
  {
    "path": "lib/phpmailer/class.phpmailer.php",
    "chars": 147052,
    "preview": "<?php\n/**\n * PHPMailer - PHP email creation and transport class.\n * PHP Version 5\n * @package PHPMailer\n * @link https:/"
  },
  {
    "path": "lib/phpmailer/class.pop3.php",
    "chars": 11006,
    "preview": "<?php\n/**\n * PHPMailer POP-Before-SMTP Authentication Class.\n * PHP Version 5\n * @package PHPMailer\n * @link https://git"
  },
  {
    "path": "lib/phpmailer/class.smtp.php",
    "chars": 43495,
    "preview": "<?php\n/**\n * PHPMailer RFC821 SMTP email transport class.\n * PHP Version 5\n * @package PHPMailer\n * @link https://github"
  },
  {
    "path": "lib/phpmailer/extras/EasyPeasyICS.php",
    "chars": 4062,
    "preview": "<?php\n/**\n * EasyPeasyICS Simple ICS/vCal data generator.\n * @author Marcus Bointon <phpmailer@synchromedia.co.uk>\n * @a"
  },
  {
    "path": "lib/phpmailer/extras/README.md",
    "chars": 1636,
    "preview": "# PHPMailer Extras\n\nThese classes provide optional additional functions to PHPMailer.\n\nThese are not loaded by the PHPMa"
  },
  {
    "path": "lib/phpmailer/extras/htmlfilter.php",
    "chars": 39267,
    "preview": "<?php\n/**\n * htmlfilter.inc\n * ---------------\n * This set of functions allows you to filter html in order to remove\n * "
  },
  {
    "path": "lib/phpmailer/extras/ntlm_sasl_client.php",
    "chars": 6651,
    "preview": "<?php\n/*\n * ntlm_sasl_client.php\n *\n * @(#) $Id: ntlm_sasl_client.php,v 1.3 2004/11/17 08:00:37 mlemos Exp $\n *\n */\n\ndef"
  },
  {
    "path": "lib/phpmailer/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/phpmailer/language/index.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/phpmailer/language/phpmailer.lang-am.php",
    "chars": 1693,
    "preview": "<?php\n/**\n * Armenian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n *"
  },
  {
    "path": "lib/phpmailer/language/phpmailer.lang-ar.php",
    "chars": 1663,
    "preview": "<?php\n/**\n * Arabic PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @"
  }
]

// ... and 359 more files (download for full content)

About this extraction

This page contains the full source code of the rathena/FluxCP GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 559 files (1.7 MB), approximately 547.0k tokens, and a symbol index with 725 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!