From 310f1b2438efd4c36fbc4c94c1ed8f386f97c952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1ndly=20Gerg=C5=91?= Date: Thu, 8 Aug 2019 16:58:29 +0300 Subject: [PATCH] Dump from SVN --- .gitignore | 1 + .htaccess | 3 + config/.htaccess | 2 + config/config.php | 141 +++++ config/lang/hun.ini | 139 +++++ config/lib/PasswordStorage.php | 315 +++++++++++ config/lib/functions.php | 274 ++++++++++ config/lib/loginManager/lmConfig.php | 82 +++ config/lib/loginManager/lmHandler.php | 14 + config/lib/loginManager/lmPassword.php | 14 + config/lib/loginManager/lmStates.php | 24 + config/lib/loginManager/lmTwoFactor.php | 14 + config/lib/loginManager/lmUtils.php | 44 ++ config/lib/loginManager/loginManager.php | 393 ++++++++++++++ config/setup.sql | 118 +++++ index.php | 195 +++++++ res/add.png | Bin 0 -> 4801 bytes res/admin.png | Bin 0 -> 82976 bytes res/classes.png | Bin 0 -> 5170 bytes res/contests.png | Bin 0 -> 12898 bytes res/icon.png | Bin 0 -> 10256 bytes res/index.png | Bin 0 -> 7555 bytes res/loading.gif | Bin 0 -> 14255 bytes res/logout.png | Bin 0 -> 174158 bytes res/minus.png | Bin 0 -> 5125 bytes res/phases.png | Bin 0 -> 6635 bytes res/plus.png | Bin 0 -> 5265 bytes res/profile.png | Bin 0 -> 15722 bytes res/register.png | Bin 0 -> 4408 bytes res/remove.png | Bin 0 -> 7390 bytes res/search.png | Bin 0 -> 18381 bytes res/subjects.png | Bin 0 -> 5578 bytes res/users.png | Bin 0 -> 8985 bytes res/wizard.png | Bin 0 -> 39007 bytes script/.js | 24 + script/admin.js | 115 +++++ script/classes.js | 63 +++ script/contests.js | 130 +++++ script/js.php | 29 ++ script/main.js | 203 ++++++++ script/phases.js | 125 +++++ script/profile.js | 35 ++ script/register.js | 190 +++++++ script/subjects.js | 125 +++++ script/users.js | 131 +++++ script/wizard.js | 86 +++ style/mobile.css | 236 +++++++++ style/style.css | 301 +++++++++++ subs/loader.php | 62 +++ subs/msg.php | 43 ++ subs/part/.htaccess | 2 + subs/part/.php | 29 ++ subs/part/_backend.php | 24 + subs/part/admin.php | 109 ++++ subs/part/admin_backend.php | 181 +++++++ subs/part/classes.php | 56 ++ subs/part/classes_backend.php | 96 ++++ subs/part/contests.php | 218 ++++++++ subs/part/contests_backend.php | 177 +++++++ subs/part/phases.php | 112 ++++ subs/part/phases_backend.php | 157 ++++++ subs/part/profile.php | 75 +++ subs/part/profile_backend.php | 49 ++ subs/part/register.php | 631 +++++++++++++++++++++++ subs/part/register_backend.php | 382 ++++++++++++++ subs/part/subjects.php | 112 ++++ subs/part/subjects_backend.php | 139 +++++ subs/part/users.php | 189 +++++++ subs/part/users_backend.php | 206 ++++++++ subs/part/wizard.php | 242 +++++++++ subs/part/wizard_backend.php | 26 + 71 files changed, 6883 insertions(+) create mode 100644 .gitignore create mode 100644 .htaccess create mode 100644 config/.htaccess create mode 100644 config/config.php create mode 100644 config/lang/hun.ini create mode 100644 config/lib/PasswordStorage.php create mode 100644 config/lib/functions.php create mode 100644 config/lib/loginManager/lmConfig.php create mode 100644 config/lib/loginManager/lmHandler.php create mode 100644 config/lib/loginManager/lmPassword.php create mode 100644 config/lib/loginManager/lmStates.php create mode 100644 config/lib/loginManager/lmTwoFactor.php create mode 100644 config/lib/loginManager/lmUtils.php create mode 100644 config/lib/loginManager/loginManager.php create mode 100644 config/setup.sql create mode 100644 index.php create mode 100644 res/add.png create mode 100644 res/admin.png create mode 100644 res/classes.png create mode 100644 res/contests.png create mode 100644 res/icon.png create mode 100644 res/index.png create mode 100644 res/loading.gif create mode 100644 res/logout.png create mode 100644 res/minus.png create mode 100644 res/phases.png create mode 100644 res/plus.png create mode 100644 res/profile.png create mode 100644 res/register.png create mode 100644 res/remove.png create mode 100644 res/search.png create mode 100644 res/subjects.png create mode 100644 res/users.png create mode 100644 res/wizard.png create mode 100644 script/.js create mode 100644 script/admin.js create mode 100644 script/classes.js create mode 100644 script/contests.js create mode 100644 script/js.php create mode 100644 script/main.js create mode 100644 script/phases.js create mode 100644 script/profile.js create mode 100644 script/register.js create mode 100644 script/subjects.js create mode 100644 script/users.js create mode 100644 script/wizard.js create mode 100644 style/mobile.css create mode 100644 style/style.css create mode 100644 subs/loader.php create mode 100644 subs/msg.php create mode 100644 subs/part/.htaccess create mode 100644 subs/part/.php create mode 100644 subs/part/_backend.php create mode 100644 subs/part/admin.php create mode 100644 subs/part/admin_backend.php create mode 100644 subs/part/classes.php create mode 100644 subs/part/classes_backend.php create mode 100644 subs/part/contests.php create mode 100644 subs/part/contests_backend.php create mode 100644 subs/part/phases.php create mode 100644 subs/part/phases_backend.php create mode 100644 subs/part/profile.php create mode 100644 subs/part/profile_backend.php create mode 100644 subs/part/register.php create mode 100644 subs/part/register_backend.php create mode 100644 subs/part/subjects.php create mode 100644 subs/part/subjects_backend.php create mode 100644 subs/part/users.php create mode 100644 subs/part/users_backend.php create mode 100644 subs/part/wizard.php create mode 100644 subs/part/wizard_backend.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2fa7ce7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.ini diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..9e00fd9 --- /dev/null +++ b/.htaccess @@ -0,0 +1,3 @@ +RewriteEngine on +RewriteRule ^(config|res|script|style|subs)($|/) - [L] +RewriteRule ^([a-zA-Z_]+)(\/([a-zA-Z0-9_]))?$ index.php?view=$1 [L,QSA] diff --git a/config/.htaccess b/config/.htaccess new file mode 100644 index 0000000..7d3aaf1 --- /dev/null +++ b/config/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all \ No newline at end of file diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..30f543d --- /dev/null +++ b/config/config.php @@ -0,0 +1,141 @@ +. + **/ + +/* + * Includes + */ +require_once("lib/loginManager/loginManager.php"); +require_once("lib/PasswordStorage.php"); +require_once("lib/functions.php"); + +/* + * Load config file + */ +$config=parse_ini_file("config.ini", true); + +/* + * Regionalization + */ +date_default_timezone_set($config['general']['timezone']); +mb_internal_encoding("UTF-8"); + +/* + * Load language file + */ +$lang=parse_ini_file("lang/".$config['language']['use']); + +/* + * Set up DB + */ +$db=new PDO($config['database']['type'].":host=".$config['database']['host'].";dbname=".$config['database']['name'].";charset=utf8", $config['database']['user'], $config['database']['password']); + +/* + * Byte order mark for utf8 + */ +$BOM=chr(239).chr(187).chr(191); + +/* + * Debug + */ +if($config['general']['debug']){ + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + ini_set("display_errors", true); +} + +/* + * Versioning + */ +const VERSION="0.7"; + +/* + * Set up login manager + */ +//build classes +class handler implements lmHandler{ + public function handle($state, $target=0){ + global $db; + switch($state){ + case lmStates::LOGIN_FAILED: + functions::setError(1); + functions::safeReload(); + break; + case lmStates::LOGIN_OK: + $sql=$db->prepare("SELECT id, username, fullname, accesslevel, class, perm_message FROM users WHERE id=:id"); + $sql->execute(array(":id"=>$target)); + $res=$sql->fetch(PDO::FETCH_ASSOC); + $_SESSION['id']=$res['id']; + $_SESSION['username']=$res['username']; + $_SESSION['fullname']=$res['fullname']; + $_SESSION['accesslevel']=$res['accesslevel']; + $_SESSION['class']=$res['class']; + $_SESSION['perm_message']=$res['perm_message']; + functions::safeReload(); + break; + case lmStates::CAPTCHA_FAILED: + functions::setError(2); + functions::safeReload(); + break; + case lmStates::BANNED: + functions::setError(3); + functions::safeReload(); + break; + case lmStates::FORGET_DONE: + functions::setMessage(1); + functions::safeReload(); + break; + case lmStates::LOGOUT_DONE: + functions::setMessage(2); + functions::safeReload(); + } + return; + } +} +class password implements lmPassword{ + public function verifyPassword($cleartext, $database){ + if($database==""){ + return false; + } + return PasswordStorage::verify_password($cleartext, $database); + } +} +class twoFactor implements lmTwoFactor{ + public function secondFactor($uid){ + return true; + } +} + +//build login manager +$lm=new loginManager(new lmConfig($db, $config['login']['session_lifetime'], $config['login']['captcha_enable'], $config['login']['captcha_after'], $config['login']['captcha_sitekey'], $config['login']['captcha_secretkey'], $config['login']['ban_enable'], $config['login']['ban_after'], $config['login']['ban_time'], $config['login']['look'], $config['login']['remember_enable'], $config['login']['remember_time'], lmStates::AUTH_UNAME), new handler(), new password(), new twoFactor()); +//init +$lm->init(); + +//get the current schoolyear +$schoolyear=""; +if(date("m")>=$config['general']['newYearMonth']){ + $schoolyear=date("Y")."-".date("Y", time()+31556926); +} +else{ + $schoolyear=date("Y", time()-31556926)."-".date("Y"); +} diff --git a/config/lang/hun.ini b/config/lang/hun.ini new file mode 100644 index 0000000..becc61c --- /dev/null +++ b/config/lang/hun.ini @@ -0,0 +1,139 @@ +lang_1="Magyar" +lang_2="Román" +cookie_message="Weboldalunk a megfelelő működés érdekében cookie-kat használ. Továbbá a weboldal használatával ön beleegyezik a felhasználási feltételekbe (lásd az oldal alján)." +cookie_dismiss="Megértettem!" +login="Bejelentkezés" +username="Felhasználónév" +password="Jelszó" +password_confirm="Jelszó megerősítése" +remember="Megjegyzés" +ok="Mehet!" +forget_user="Felhasználó elfelejtése" +remember_as="Üdv újra," +index="Kezdőlap" +wizard="Varázsló" +users="Felhasználók" +classes="Osztályok" +subjects="Tantárgyak" +contests="Versenyek" +phases="Szakaszok" +register="Eredmények" +profile="Profil" +admin="Adminisztrátori felület" +loading="Töltés" +logout="Kijelentkezés" +index_content="Ezen az oldalon kezelheti a diákok eredményeit.

A Felhasználók menüpont alatt a felhasználók listáját láthatja.
Az Osztályok menüpont alatt az osztályokat tekintheti át.
A Tantárgyak menüpont alatt a tantárgyakat nézheti meg és szerkesztheti.
A Versenyek menüpont alatt versenyeket adhat hozzá és távolíthat el.
A Szakaszok menüpontnál a versenyek szakaszait (pl: megyei, országos) kezelheti.
Az Eredmények menüpont alatt a diákok eredményeit nézheti meg illetve szerkesztheti.
A Varázsló menüpont alatt egy egyszerűen kezelhető eszközzel adhatja meg egy diák elért eredényeit.
A Profil menüpontnál saját felhasználójának az adatait szerkesztheti.
Az Adminisztrátori felület alól az adminisztrátori eszközökhöz férhet hozzá." +filter="Szűrők" +search="Keresés" +class="Osztály" +accesslevel="Jogszint" +empty="Üres" +apply="Alkalmaz" +reset="Visszaállítás" +new="Új hozzáadása" +fullname="Teljes név" +passwordhint="Írjon be 0-t egy véletlenszerű jelszóért!" +passwordhintedit="Hagyja üresen, ha nem szeretné megváltoztatni." +cancel="Mégse" +edit="Szerkesztés" +id="Azonosító" +perm_message="Üzenetküldési jog" +tools="Eszközök" +delete="Törlés" +edit_perm="Jogok szerkesztése" +delete_confirm="Biztosan szeretné törölni ezt az elemet?" +permission_confirm="Szeretné ha ez az ember tudna üzeneteket küldeni a belső rendszerben?" +ryes="Igen" +rno="Nem" +rowid="Sorszám" +role="Szerep" +headteacher="Osztályfőnök" +student="Diák" +name_1="Magyar megnevezés" +name_2="Román megnevezés" +subject="Tantárgy" +ministry_support="Minisztériumi támogatás" +ministry_0="Nem szerepel a listán" +ministry_1="Nem támogatott" +ministry_2="Támogatott" +nothing="Semmi" +description="Leírás" +ministry_place="Hely a minisztériumi listán" +subject_1="Tantárgy magyar megnevezése" +subject_2="Tantárgy román megnevezése" +custom="Egyedi" +mention="Megjegyzés" +newSubmit="Véglegesítés" +contest_1="Verseny magyar megnevezése" +contest_2="Verseny román megnevezése" +phase_1="Szakasz magyar megnevezése" +phase_2="Szakasz román megnevezése" +teacher="Felkészítő tanár" +place="Helyezés" +contest="Verseny" +phase="Szakasz" +place="Helyezés" +prev_found="Ezeket a bejegyzéseket találtuk, amelyeknél megegyezik a verseny és a diák a bevinni kívánt adatokkal" +do_before_new_record="Kérem nézze át az alább kilistázott bejegyzéseket és törölje azokat, amelyek nem aktuálisak. Ha ezzel végzett csak akkor véglegesítse az új bejegyzést!" +proceed="Tovább" +back="Vissza" +finalize="Véglegesítés" +selectme="Saját magam beállítása" +wizinst="Ennek az eszköznek a segítségével könnyedén hozzáadhat egy új eredményt" +wiz_step1="Diák kiválasztása" +wiz_step2="Verseny kiválasztása" +wiz_step3="Szakasz kiválasztása" +wiz_step4="Felkészítő tanár kiválasztása" +wiz_step5="Helyezés megadása" +wiz_step6="További információk megadása (nem kötelező)" +wiz_step7="Előzőleg megadott adatok felülvizsgálata, véglegesítés" +needlogout="A változtatások csak a következő bejelentkezésnél fognak megjelenni." +editpasswd="Jelszó megváltoztatása" +export="Exportálás" +exportcolumn="A következő oszlopokat tartalmazza" +contest_desc="Verseny leírása" +exported="Exportálva" +preparing_download="Letöltés előkészítése." +download_ready="A fájl készen áll a letöltésre." +download="Letöltés" +schoolyear="Tanév" +importUsers="Felhasználók importálása" +dbsize="Adatbázis mérete" +dbname="Adatbázis neve" +size="Méret" +uploading="Feltöltés" +processing="Feldolgozás" +importdone="A felhasználók importálása befejeződött." +importnotes="Az importáláshoz egy CSV fájlt (delimiter: ,) kell feltölteni. Maximális mérete 10MB lehet. A fájl nem tartalmazhat fejlécet csupán adatot, soronként egy adatelemmel. Az első oszlop a felhasználó felhasználóneve, a második oszlop a teljes neve, a harmadik oszlop a jogszintje (0: diák, 1: tanár, 2: osztályfőnök, 3: menedzser, 4: adminisztrátor), ötödik oszlop az osztály, hatodik oszlop pedig a jelszó. A CSV fájl generálásához ajánlott a Google Docs-ot használni, mivel az ismeri az UTF8-at is az Excel-lel ellentétben." +classformat="pl.: L2015F" + +;places +places[-3]="Részvétel" +places[-2]="Különdíj" +places[-1]="Dícséret" + +;errors +error[1]="Hibás felhasználónév vagy jelszó!" +error[2]="Hibásan töltötted ki a Captcha-t!" +error[3]="Túl sok hibás bejelentkezés történt erről az IP címről, ezért 10 percre letitltottuk." +error[4]="Valami rosszul ment. Kérjük próbálja meg később! Ha továbbra sem sikerül, kérjuk hagyjon üzenetet!" +error[5]="Ez a felhasználónév már foglalt." +error[6]="Nem található semmi ezzel az ID-val." +error[7]="Már létezik egy tantárgy ezzel a névvel." +error[8]="Már létezik egy verseny ezzel a névvel." +error[9]="Már létezik egy szakasz ezzel a névvel." +error[10]="A megadott jelszavak nem egyeznek meg." +error[11]="A fájl mérete nem haladhatja meg az 10MB-ot!" +error[12]="Valami hiba történt a feltöltés közben. Kérem próbálja újra!" +error[13]="Váratlan hiba a feltöltés közben. Kérem próbálja újra!" +error[401]="Önnek nincs jogosultsága ennek az oldalnak a megtekintésére!" +error[404]="A keresett oldal nem található!" +error[500]="Valami rosszul ment. Kérjük próbálja meg később, illetve jelezze üzenet formájában, hogy 500-as kódjelű hibát kapott." + +;messages +message[1]="Sikeresen elfelejtettük a felhasználódat." +message[2]="Sikeresen kijelentkeztél." +message[3]="Adat sikeresen hozzáadva!" +message[4]="Adat sikeresen törölve!" +message[5]="Adat sikeresen szerkesztve!" +message[6]="A jelszavadat sikeresen frissítettük" diff --git a/config/lib/PasswordStorage.php b/config/lib/PasswordStorage.php new file mode 100644 index 0000000..688694b --- /dev/null +++ b/config/lib/PasswordStorage.php @@ -0,0 +1,315 @@ += 1." + ); + } + + return self::slow_equals( + $pbkdf2, + self::pbkdf2( + $params[self::HASH_ALGORITHM_INDEX], + $password, + $salt_raw, + $iterations, + self::ourStrlen($pbkdf2), + true + ) + ); + } + + /** + * Compares two strings $a and $b in length-constant time. + * + * @param string $a + * @param string $b + * @return bool + */ + public static function slow_equals($a, $b) + { + if (!\is_string($a) || !\is_string($b)) { + throw new InvalidArgumentException( + "slow_equals(): expected two strings" + ); + } + if (\function_exists('hash_equals')) { + return \hash_equals($a, $b); + } + + // PHP < 5.6 polyfill: + $diff = self::ourStrlen($a) ^ self::ourStrlen($b); + for($i = 0; $i < self::ourStrlen($a) && $i < self::ourStrlen($b); $i++) { + $diff |= \ord($a[$i]) ^ \ord($b[$i]); + } + return $diff === 0; + } + + /* + * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt + * $algorithm - The hash algorithm to use. Recommended: SHA256 + * $password - The password. + * $salt - A salt that is unique to the password. + * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000. + * $key_length - The length of the derived key in bytes. + * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise. + * Returns: A $key_length-byte key derived from the password and salt. + * + * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt + * + * This implementation of PBKDF2 was originally created by https://defuse.ca + * With improvements by http://www.variations-of-shadow.com + */ + public static function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false) + { + // Type checks: + if (!\is_string($algorithm)) { + throw new InvalidArgumentException( + "pbkdf2(): algorithm must be a string" + ); + } + if (!\is_string($password)) { + throw new InvalidArgumentException( + "pbkdf2(): password must be a string" + ); + } + if (!\is_string($salt)) { + throw new InvalidArgumentException( + "pbkdf2(): salt must be a string" + ); + } + // Coerce strings to integers with no information loss or overflow + $count += 0; + $key_length += 0; + $algorithm = \strtolower($algorithm); + if (!\in_array($algorithm, \hash_algos(), true)) { + throw new CannotPerformOperationException( + "Invalid or unsupported hash algorithm." + ); + } + // Whitelist, or we could end up with people using CRC32. + $ok_algorithms = array( + "sha1", "sha224", "sha256", "sha384", "sha512", + "ripemd160", "ripemd256", "ripemd320", "whirlpool" + ); + if (!\in_array($algorithm, $ok_algorithms, true)) { + throw new CannotPerformOperationException( + "Algorithm is not a secure cryptographic hash function." + ); + } + if ($count <= 0 || $key_length <= 0) { + throw new CannotPerformOperationException( + "Invalid PBKDF2 parameters." + ); + } + + if (\function_exists("hash_pbkdf2")) { + // The output length is in NIBBLES (4-bits) if $raw_output is false! + if (!$raw_output) { + $key_length = $key_length * 2; + } + return \hash_pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output); + } + + $hash_length = self::ourStrlen(\hash($algorithm, "", true)); + $block_count = \ceil($key_length / $hash_length); + + $output = ""; + for($i = 1; $i <= $block_count; $i++) { + // $i encoded as 4 bytes, big endian. + $last = $salt . \pack("N", $i); + // first iteration + $last = $xorsum = \hash_hmac($algorithm, $last, $password, true); + // perform the other $count - 1 iterations + for ($j = 1; $j < $count; $j++) { + $xorsum ^= ($last = \hash_hmac($algorithm, $last, $password, true)); + } + $output .= $xorsum; + } + + if($raw_output) { + return self::ourSubstr($output, 0, $key_length); + } else { + return \bin2hex(self::ourSubstr($output, 0, $key_length)); + } + } + /* + * We need these strlen() and substr() functions because when + * 'mbstring.func_overload' is set in php.ini, the standard strlen() and + * substr() are replaced by mb_strlen() and mb_substr(). + */ + /** + * Calculate the length of a string + * + * @param string $str + * @return int + */ + private static function ourStrlen($str) + { + static $exists = null; + if ($exists === null) { + $exists = \function_exists('mb_strlen'); + } + + if (!\is_string($str)) { + throw new InvalidArgumentException( + "ourStrlen() expects a string" + ); + } + + if ($exists) { + $length = \mb_strlen($str, '8bit'); + if ($length === false) { + throw new CannotPerformOperationException(); + } + return $length; + } else { + return \strlen($str); + } + } + /** + * Substring + * + * @param string $str + * @param int $start + * @param int $length + * @return string + */ + private static function ourSubstr($str, $start, $length = null) + { + static $exists = null; + if ($exists === null) { + $exists = \function_exists('mb_substr'); + } + // Type validation: + if (!\is_string($str)) { + throw new InvalidArgumentException( + "ourSubstr() expects a string" + ); + } + + if ($exists) { + // mb_substr($str, 0, NULL, '8bit') returns an empty string on PHP + // 5.3, so we have to find the length ourselves. + if (!isset($length)) { + if ($start >= 0) { + $length = self::ourStrlen($str) - $start; + } else { + $length = -$start; + } + } + return \mb_substr($str, $start, $length, '8bit'); + } + // Unlike mb_substr(), substr() doesn't accept NULL for length + if (isset($length)) { + return \substr($str, $start, $length); + } else { + return \substr($str, $start); + } + } +} diff --git a/config/lib/functions.php b/config/lib/functions.php new file mode 100644 index 0000000..77b8eb4 --- /dev/null +++ b/config/lib/functions.php @@ -0,0 +1,274 @@ +,<"; + } + $charsetlength=strlen($charset); + $string=""; + for($i=0; $i<$length; $i++){ + $string=$string . $charset[rand(0, $charsetlength-1)]; + } + return $string; + } + + public static function get_string_between($string, $start, $end){ + $string=' ' . $string; + $ini=strpos($string, $start); + if($ini==0) return ''; + $ini+=strlen($start); + $len=strpos($string, $end, $ini) - $ini; + return substr($string, $ini, $len); + } + + public static function process_string($str, $dep){ + global $functions_accent_convert; + switch($dep){ + case 0: + { + return $str; + break; + } + case 1: + { + return strtolower($str); + break; + } + case 2: + { + return strtr($str, $functions_accent_convert); + break; + } + case 3: + { + return strtolower(strtr($str, $functions_accent_convert)); + break; + } + } + return 0; + } + + public static function validate_captcha($secretkey, $response){ + $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretkey."&response=".$response); + $data=json_decode($verify); + if($data->success){ + return true; + } + else{ + return false; + } + } +}; + +$functions_accent_convert=array( + // Decompositions for Latin-1 Supplement + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', + chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', + chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', + chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', + chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', + chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', + chr(195).chr(159) => 's', chr(195).chr(160) => 'a', + chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', + chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', + chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', + chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', + chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', + chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', + chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', + chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', + chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', + chr(195).chr(191) => 'y', + // Decompositions for Latin Extended-A + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', + chr(197).chr(190) => 'z', chr(197).chr(191) => 's'); + +?> diff --git a/config/lib/loginManager/lmConfig.php b/config/lib/loginManager/lmConfig.php new file mode 100644 index 0000000..d8f8f89 --- /dev/null +++ b/config/lib/loginManager/lmConfig.php @@ -0,0 +1,82 @@ +pdo=$_pdo; + $this->session_lifetime=$_session_lifetime; + $this->captcha_enable=$_captcha_enable; + $this->captcha_after=$_captcha_after; + $this->captcha_sitekey=$_captcha_sitekey; + $this->captcha_secretkey=$_captcha_secretkey; + $this->ban_enable=$_ban_enable; + $this->ban_after=$_ban_after; + $this->ban_time=$_ban_time; + $this->look=$_look; + $this->remember_enable=$_remember_enable; + $this->remember_time=$_remember_time; + $this->auth_type=$_auth_type; + } + + private $pdo; + private $session_lifetime; + private $captcha_enable; + private $captcha_after; + private $captcha_sitekey; + private $captcha_secretkey; + private $ban_enable; + private $ban_after; + private $ban_time; + private $look; + private $remember_enable; //NOT SAFE AT ALL!!! + private $remember_time; + private $auth_type; + + public function getPDO(){ + return $this->pdo; + } + public function getSessionLifetime(){ + return $this->session_lifetime; + } + public function isCaptchaEnabled(){ + return $this->captcha_enable; + } + public function getCaptchaAfter(){ + return $this->captcha_after; + } + public function getCaptchaSitekey(){ + return $this->captcha_sitekey; + } + public function getCaptchaSecretkey(){ + return $this->captcha_secretkey; + } + public function isBanEnabled(){ + return $this->ban_enable; + } + public function getBanAfter(){ + return $this->ban_after; + } + public function getBanTime(){ + return $this->ban_time; + } + public function getLook(){ + return $this->look; + } + public function isRememberEnabled(){ + return $this->remember_enable; + } + public function getRememberTime(){ + return $this->remember_time; + } + public function getAuthType(){ + return $this->auth_type; + } +} + +?> diff --git a/config/lib/loginManager/lmHandler.php b/config/lib/loginManager/lmHandler.php new file mode 100644 index 0000000..43fbf32 --- /dev/null +++ b/config/lib/loginManager/lmHandler.php @@ -0,0 +1,14 @@ + diff --git a/config/lib/loginManager/lmPassword.php b/config/lib/loginManager/lmPassword.php new file mode 100644 index 0000000..660e4e4 --- /dev/null +++ b/config/lib/loginManager/lmPassword.php @@ -0,0 +1,14 @@ + diff --git a/config/lib/loginManager/lmStates.php b/config/lib/loginManager/lmStates.php new file mode 100644 index 0000000..8c509c3 --- /dev/null +++ b/config/lib/loginManager/lmStates.php @@ -0,0 +1,24 @@ + diff --git a/config/lib/loginManager/lmTwoFactor.php b/config/lib/loginManager/lmTwoFactor.php new file mode 100644 index 0000000..749e58a --- /dev/null +++ b/config/lib/loginManager/lmTwoFactor.php @@ -0,0 +1,14 @@ + diff --git a/config/lib/loginManager/lmUtils.php b/config/lib/loginManager/lmUtils.php new file mode 100644 index 0000000..f841de5 --- /dev/null +++ b/config/lib/loginManager/lmUtils.php @@ -0,0 +1,44 @@ +,<"; + $charsetLength=strlen($charset); + $string=""; + for($i=0; $i<$length; $i++){ + $string.=$charset[rand(0, $charsetLength-1)]; + } + return $string; + } + + /** + * validate google ReCaptcha + * @param string $secretkey secret key to captcha API + * @param string $response response of API + * @return bool + */ + public static function validateCaptcha($secretkey, $response){ + $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretkey."&response=".$response); + $data=json_decode($verify); + if($data->success){ + return true; + } + else{ + return false; + } + } +} + +?> diff --git a/config/lib/loginManager/loginManager.php b/config/lib/loginManager/loginManager.php new file mode 100644 index 0000000..c51479f --- /dev/null +++ b/config/lib/loginManager/loginManager.php @@ -0,0 +1,393 @@ + + * + */ + + +/* + * Includes + */ +require("lmStates.php"); +require("lmConfig.php"); +require("lmHandler.php"); +require("lmPassword.php"); +require("lmTwoFactor.php"); +require("lmUtils.php"); + + +/* + * Class + */ +class loginManager{ + //constructor + + /** + * building... + * @param lmConfig $_config configuration for login Manager + * @param lmHandler $_eventHandler handler of events + * @param lmPassword $_passwordEngine engine for verifying passwords + * @return void + */ + public function __construct($_config, $_eventHandler, $_passwordEngine, $_twoFactor){ + $this->config=$_config; + $this->eventHandler=$_eventHandler; + $this->passwordEngine=$_passwordEngine; + $this->twoFactor=$_twoFactor; + return; + } + + + + //settings + + private $config; + private $eventHandler; + private $passwordEngine; + private $twoFactor; + + + + //frontend functions + + /** + * initialize session and set its lifetime + * @return bool + */ + public function init(){ + session_set_cookie_params($this->config->getSessionLifetime()); + return session_start(); + } + + /** + * prepare for login. Run this on the top of your login page! + * @return void + */ + public function loginPrepare(){ + $this->passFailedAttempts(); + return; + } + + /** + * lets start here! + * @param int/string @identifier id or username of user + * @param string @password cleartext password from input + * @param bool $remember save user fot further use + * @return void + */ + public function login($identifier, $password, $remember=false){ + global $lm_force_captcha; + + if($this->passFailedAttempts()){ //not banned + if(isset($lm_force_captcha)){ //check captcha + if(!isset($_POST['g-recaptcha-response'])){ + $captcha_failed=true; + $this->addLoginHistory(lmStates::NOUSER, lmStates::LOGIN_FAILED); + $this->eventHandler->handle(lmStates::CAPTCHA_FAILED); + return; + } + else{ + if(!lmUtils::validateCaptcha($this->config->getCaptchaSecretkey(), $_POST['g-recaptcha-response'])){ + $captcha_failed=true; + $this->addLoginHistory(lmStates::NOUSER, lmStates::LOGIN_FAILED); + $this->eventHandler->handle(lmStates::CAPTCHA_FAILED); + return; + } + } + } + + if(!isset($captcha_failed)){ + if($this->config->isRememberEnabled()){ //check if remembering is enabled + if($this->isRememberingUser() && $this->twoFactor->secondFactor($this->isRememberingUser())){ //remembering. + $this->permitLogin($this->isRememberingUser()); //good to go! + return; + } + } + //proceed with normal login + if($this->config->getAuthType()==lmStates::AUTH_UNAME){ //username based authentication + $sql=$this->config->getPDO()->prepare("SELECT COUNT(id) AS count, id, password FROM users WHERE username=:identifier and id<>1"); + } + else{ + $sql=$this->config->getPDO()->prepare("SELECT COUNT(id) AS count, id, password FROM users WHERE id=:identifier and id<>1"); + } + $sql->execute(array(":identifier"=>$identifier)); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + if($res['count']==0){ //user not existing + $this->addLoginHistory(lmStates::NOUSER, lmStates::LOGIN_FAILED); + $this->eventHandler->handle(lmStates::LOGIN_FAILED); + return; + } + else{ + if($this->passwordEngine->verifyPassword($password, $res['password']) && $this->twoFactor->secondFactor($res['id'])){ + if($this->config->isRememberEnabled()){ //remember... if he wants to be insecure + if($remember){ + $this->rememberUser($res['id']); + } + } + $this->permitLogin($res['id']); //good to go! + return; + } + else{ + $this->addLoginHistory($res['id'], lmStates::LOGIN_FAILED); + $this->eventHandler->handle(lmStates::LOGIN_FAILED); + return; + } + } + } + } + return; + } + + /** + * finish it up! + * @return void + */ + public function logout(){ + $_SESSION=array(); + session_destroy(); + setcookie("lm_login_random", NULL, -1); + $this->eventHandler->handle(lmStates::LOGOUT_DONE); + return; + } + + /** + * just some formal checking + * @return bool + */ + public function validateLogin(){ + if(!isset($_SESSION['lm_id'])){ + return false; + } + else{ + $sql=$this->config->getPDO()->prepare("SELECT auth_token FROM login_history WHERE user=:id and success=1 ORDER BY id DESC LIMIT 1"); + $sql->execute(array(":id"=>$_SESSION['lm_id'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + if($res['auth_token']==$this->getSessionKey()){ + return true; + } + else{ + return false; + } + } + } + + /** + * do i know you? + * @return int + */ + public function isRememberingUser(){ + if(!$this->config->isRememberEnabled()){ + return NULL; + } + + if(is_null($this->getRememberKey())){ + return NULL; + } + else{ + $sql=$this->config->getPDO()->prepare("SELECT COUNT(id) AS count, user FROM login_remember WHERE remember_token=:token and until>:until"); + $sql->execute(array(":token"=>$this->getRememberKey(), ":until"=>date("Y-m-d H:i:s"))); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + if($res['count']!=1){ + $this->addLoginHistory(lmStates::NOUSER, lmStates::LOGIN_FAILED); + return NULL; + } + else{ + return $res['user']; + } + } + } + + /** + * i don't know you anymore! + * @return void + */ + public function forgetUser(){ + $sql=$this->config->getPDO()->prepare("UPDATE login_remember SET until=0 WHERE remember_token=:token"); + $sql->execute(array(":token"=>$this->getRememberKey())); + + setcookie("lm_login_remember", NULL, -1); + + $this->eventHandler->handle(lmStates::FORGET_DONE); + + return; + } + + /** + * print captcha html code if needed + * @param bool $dark use the dark theme, default false + * @return void + */ + public function printCaptcha($dark=false){ + if($this->config->isCaptchaEnabled()){ + global $lm_force_captcha; + if(isset($lm_force_captcha)){ + if($dark){ + echo "
config->getCaptchaSitekey()."\" data-theme=\"dark\">
"; + } + else{ + echo "
config->getCaptchaSitekey()."\">
"; + } + return; + } + else{ + return; + } + } + return; + } + + + + //backend functions + + protected function generateSessionKey(){ + $random=lmUtils::randomString(32); + setcookie("lm_login_random", $random, time()+$this->config->getSessionLifetime()); + $hash=hash("sha256", $_SERVER['REMOTE_ADDR']."***".$_SERVER['HTTP_USER_AGENT']."***".$random); + return $hash; + } + + protected function getSessionKey(){ + if(!isset($_COOKIE['lm_login_random'])){ + return NULL; + } + else{ + $hash=hash("sha256", $_SERVER['REMOTE_ADDR']."***".$_SERVER['HTTP_USER_AGENT']."***".$_COOKIE['lm_login_random']); + return $hash; + } + } + + protected function passFailedAttempts(){ + //check if no limitations are enabled + if(!$this->config->isCaptchaEnabled() && !$this->config->isBanEnabled()){ + return true; //nothing to do + } + + //check if is already banned + if($this->config->isBanEnabled()){ + $sql=$this->config->getPDO()->prepare("SELECT COUNT(id) AS count FROM login_bans WHERE id=:ip and until>:until"); + $sql->execute(array(":ip"=>$_SERVER['REMOTE_ADDR'], ":until"=>date("Y-m-d H:i:s"))); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + if($res['count']!=0){ + $this->eventHandler->handle(lmStates::BANNED); + return false; + } + } + + //count failed attempts + $sql=$this->config->getPDO()->prepare("SELECT COUNT(id) AS count FROM login_history WHERE ip=:ip and date>:date and success=0"); + $sql->execute(array(":ip"=>$_SERVER['REMOTE_ADDR'], ":date"=>date("Y-m-d H:i:s", time()-$this->config->getLook()))); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + //force captcha if case + if($res['count']>=$this->config->getCaptchaAfter() && $this->config->isCaptchaEnabled()){ + global $lm_force_captcha; + $lm_force_captcha=true; + } + + //bann if case + if($res['count']>=$this->config->getBanAfter() && $this->config->isBanEnabled()){ + $sql=$this->config->getPDO()->prepare("INSERT INTO login_bans (ip, until) VALUES (:ip, :until)"); + $sql->execute(array(":ip"=>$_SERVER['REMOTE_ADDR'], ":until"=>date("Y-m-d H:i:s", time()+$this->config->getBanTime()))); + global $lm_banned; + $lm_banned=true; + $this->eventHandler->handle(lmStates::BANNED); + return false; + } + + return true; + } + + protected function addLoginHistory($uid, $success=lmStates::LOGIN_FAILED, $token=""){ + $sql=$this->config->getPDO()->prepare("INSERT INTO login_history (user, date, ip, auth_token, user_agent, success) VALUES (:user, :date, :ip, :auth_token, :user_agent, :success)"); + $sql->execute(array(":user"=>$uid, ":date"=>date("Y-m-d H:i:s"), ":ip"=>$_SERVER['REMOTE_ADDR'], ":auth_token"=>$token, ":user_agent"=>$_SERVER['HTTP_USER_AGENT'], ":success"=>$success)); + return; + } + + protected function permitLogin($uid){ + $token=$this->generateSessionKey(); + $this->addLoginHistory($uid, lmStates::LOGIN_OK, $token); + + $_SESSION=array(); + $_SESSION['lm_id']=$uid; + + $this->eventHandler->handle(lmStates::LOGIN_OK, $uid); + + return; + } + + //functions for remembering + protected function generateRememberKey(){ + $random=lmUtils::randomString(32); + setcookie("lm_login_remember", $random, time()+(86000*$this->config->getRememberTime())); + $hash=hash("sha256", $_SERVER['REMOTE_ADDR']."***".$_SERVER['HTTP_USER_AGENT']."***".$random); + return $hash; + } + + protected function getRememberKey(){ + if(!isset($_COOKIE['lm_login_remember'])){ + return NULL; + } + else{ + $hash=hash("sha256", $_SERVER['REMOTE_ADDR']."***".$_SERVER['HTTP_USER_AGENT']."***".$_COOKIE['lm_login_remember']); + return $hash; + } + } + + protected function rememberUser($uid){ + $sql=$this->config->getPDO()->prepare("INSERT INTO login_remember (user, remember_token, until) VALUES (:user, :token, :until)"); + $sql->execute(array(":user"=>$uid, ":token"=>$this->generateRememberKey(), ":until"=>date("Y-m-d H:i:s", time()+(86400*$this->config->getRememberTime())))); + return; + } +} diff --git a/config/setup.sql b/config/setup.sql new file mode 100644 index 0000000..b3db6dd --- /dev/null +++ b/config/setup.sql @@ -0,0 +1,118 @@ +/** + * /config/setup.sql + * @version 1.3 + * @desc sql structure file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +CREATE TABLE `users`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `username` varchar(65) NOT NULL default '', + `fullname` varchar(65) NOT NULL default '', + `accesslevel` tinyint(1) UNSIGNED NOT NULL default 0, /* 0:student, 1:teacher; 2:head teacher; 3:manager; 4:admin */ + `class` varchar(10) NOT NULL default '', /* format: {G,L}{Year when school started}[AF] */ + `password` varchar(255) NOT NULL default '', + `perm_message` tinyint(1) NOT NULL default 1, /* 0:don't allow messaging; 1:allow messaging */ + PRIMARY KEY (`id`) +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `login_history`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `user` int(4) UNSIGNED NOT NULL default 1, + `date` timestamp NOT NULL default current_timestamp, + `ip` varchar(45) NOT NULL default '0.0.0.0', + `auth_token` varchar(65) NOT NULL default '', + `user_agent` varchar(500) NOT NULL default '', + `success` tinyint(1) NOT NULL default 0, + PRIMARY KEY (`id`), + FOREIGN KEY (`user`) REFERENCES users(`id`) ON DELETE CASCADE +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `login_remember`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `user` int(4) UNSIGNED NOT NULL default 0, + `remember_token` varchar(65) NOT NULL default '', + `until` timestamp NOT NULL default current_timestamp, + PRIMARY KEY (`id`), + FOREIGN KEY (`user`) REFERENCES users(`id`) ON DELETE CASCADE +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `login_bans`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `ip` varchar(45) NOT NULL default '0.0.0.0', + `until` timestamp NOT NULL default current_timestamp, + PRIMARY KEY (`id`) +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `subjects`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `name_1` varchar(65) NOT NULL default '', + `name_2` varchar(65) NOT NULL default '', + PRIMARY KEY (`id`) +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `contests`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `name_1` varchar(65) NOT NULL default '', + `name_2` varchar(65) NOT NULL default '', + `subject` int(4) UNSIGNED NOT NULl, + `description` text NOT NULL default '', + `ministry_support` tinyint(1) UNSIGNED NOT NULL default 0, /* 0:not listed; 1:not supported; 2:supported */ + `ministry_place` int(4) UNSIGNED NOT NULL default 0, /* place on the list of contests */ + `schoolyear` varchar(16) NOT NULL default '0000-0001', + PRIMARY KEY (`id`), + FOREIGN KEY (`subject`) REFERENCES subjects(`id`) ON DELETE CASCADE ON UPDATE CASCADE +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `phases`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `name_1` varchar(65) NOT NULl default '', + `name_2` varchar(65) NOT NULL default '', + PRIMARY KEY (`id`) +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `register`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `student` int(4) UNSIGNED NOT NULL default 1, + `contest` int(4) UNSIGNED NOT NULL, + `phase` int(4) UNSIGNED NOT NULL, + `teacher` int(4) UNSIGNED NOT NULL default 1, + `place` tinyint(1) NOT NULL default 0, /* -1:dicseret; -2:kulondij; -3:reszvetel */ + `mention` text NOT NULL default '', + `schoolyear` varchar(16) NOT NULL default '0000-0001', + PRIMARY KEY (`id`), + FOREIGN KEY (`student`) REFERENCES users(`id`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (`contest`) REFERENCES contests(`id`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (`phase`) REFERENCES phases(`id`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (`teacher`) REFERENCES users(`id`) ON DELETE CASCADE ON UPDATE CASCADE +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE `messages`( + `id` int(4) UNSIGNED NOT NULL auto_increment, + `sender` int(4) UNSIGNED NOT NULL default 1, + `recipient` int(4) UNSIGNED NOT NULL default 1, + `content` text NOT NULL default '', + `dismissed` tinyint(1) UNSIGNED NOT NULL default 0, + PRIMARY KEY (`id`), + FOREIGN KEY (`sender`) REFERENCES users(`id`) ON DELETE CASCADE ON UPDATE CASCADE, + FOREIGN KEY (`recipient`) REFERENCES users(`id`) ON DELETE CASCADE ON UPDATE CASCADE +) CHARACTER SET utf8 COLLATE utf8_general_ci; + +INSERT INTO users (`id`, `username`) VALUES (1, 'nouser'); diff --git a/index.php b/index.php new file mode 100644 index 0000000..24f456d --- /dev/null +++ b/index.php @@ -0,0 +1,195 @@ +. + **/ + +require_once("config/config.php"); +require_once("subs/loader.php"); + +if(!$lm->validateLogin()){ + $lm->loginPrepare(); + if(isset($_POST['uname']) && isset($_POST['passwd'])){ + $remember=isset($_POST['remember']); + $lm->login($_POST['uname'], $_POST['passwd'], $remember); + } + if(isset($_GET['login_auto'])){ + $lm->login("", ""); + } + if(isset($_GET['forget_user'])){ + $lm->forgetUser(); + } +} +else{ + if(isset($_GET['logout'])){ + $lm->logout(); + } +} + +//select page we want to see +$view=""; +if(isset($_GET['view'])){ + $view=$_GET['view']; +} + +?> + + + + + <?php echo $config['general']['title']." - ".$config['general']['org'] ?> + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ validateLogin()): ?> + +
+
+
+ isRememberingUser()): ?> +
+ + prepare("SELECT fullname FROM users WHERE id=:id"); + $sql->execute(array(":id"=>$lm->isRememberingUser())); + $res=$sql->fetch(PDO::FETCH_ASSOC); + ?> +

+ +
+
+ +
+ +
+
+ +
+ + + + + + + + + + + + + +
" required>
" required>
+
+ + +
+
+
+ printCaptcha() ?> +
+
+ +
+
+
+ +
+
+
+ + + +
+
+ + + +
+ +
+ + + diff --git a/res/add.png b/res/add.png new file mode 100644 index 0000000000000000000000000000000000000000..389573b8f2a998d48bc71921b1fd5cfaa47091ca GIT binary patch literal 4801 zcmV;y5KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000N zF&f{`Xat4$K|~WY5hDsDC;EYy$Sk zzgGd@L|NE86=NaHke0wLz+hky&?n&M{|YPz)&ZZ$*%X->LMoN=EDkXgmU9RWhd0be;JAzfJsOwDCN#sc3(fQY7L8!#o825J4iEmS2DyvYn8( zVn9UG@~Jefoe<*6%IXb#EKOFws0XU0YN-bH%k@VJXajTt3V_%zfv~;vAsIav3Hc7P@8$!M|6!16Tp%6V5qk#2>ef|UJ7zaX@84C6` z&^#ipq{pRm(u9F9fiRnaff4lYbuygcTcS$Hn+8IB6az2wD+cl`i5eky8+3ju z@xe&oxTah)qC!ZC0U5UvKlB4?H02u;1w!^{cJ?~ri|%sYL`TkoFbR1>vy-EVKT0*# z*Y{x&(o>U+$z%_PYRY_j7=&!m=-6BbgES2IP_|X!puH&?ayO)NuVjjlks6)a<6v-R zo~GT!4%*e(;e5^|A)7TiRF>gE8Rypo_35NMtdRd-;2al(+^j*yI}YB`bsp`zh$N}d z7>Ac!5VAtii9?P)up2!3P>l$j3-hIDd@-7v5MmliIuH>n<%LO(2sznNV33K#@m% ztu#Y(4XY9RBC4^|f(ao*6!itBjC@)&dvrSQdRuF^~`P7~1Fe8Jm zmX=ay+u$n1F63~F->Q6hZG%u*s<+o>?_n@*{a&WH8hF&=cQuOoRxSvswdnX`F|eAh zxA;x13qn*b2%GOmn-~yc<9hLJOz04DI0J(_D+YwD&A^LxJP1Nm)3DH@_#LxdOf2E_h_!LkX#>Ql#lnGQ4Jz=$u}V>#S8(sgaoSm`8A3cTbmFNTcTbV zo$#T|m)wrVCY~-K-zw^F3_(Ri4HGm}zlJ{24|1qfd=SeW4?vWH9NKCa45d2bZ4w5w zOi@2RhiAvNiu(0vrcav?qKYcHEr$tt#;3}+Qd#+OCF?aUN9CZ(x==%14c8uT!(i*r z6%B95K|*FL#$>C>1TalUPf}NEZS{tY)~IvR z8%v)s32Ah!>2&ljg1-yI1==G5A9Q4V%J;f2pd^6>mTg}a;d7rQDpwxe0lbI*M4gj}D9WD^=RQ`E{>r0XvXsb` zwqHC;nu9G(3Gp|DfRusrWlWUgDVQ94tPFj;iG!7`qhA!AivSuS*ffhC73Dydy}+sklJ8>q`*_;Pgg>Zkk}9^iS;oc1jX9h9ywk32BNR zl9Y~etqh!_002yT2?n4H zv_Ja+!zTbhrC!(9xfd|G(fBOs@tChzz*cw9WL;r>LH$5{Jn}uj#3cuW3K>nQiZ$SUqxVKa49LfHL1iNl!q|Sc^?La%Z1$-RXaBB(0Yg zJtz5QA*y{85Q?95{ng{YGE3Zg(OXM=^3?aq{ipZ8a&(5dHuZFEhOB(q{*r|hhe09W z=J1!F_qqSR3P+ZaVBr7xCnypIg#Y~jyLcq<-+P{b1mwRbBIuwJ0PVx#FcBma^xuPX zfG!mM-BKPp904H}AP?ZQOBate#-BS@SfWxKNm;H9NI&zoVsTXHG=_j;FB^ zP2;Ibw3BLQUYSQQTgx9^a{65yPGrE2D6bndYiAZrbVko)aiWVKmR6f_N6cR1KbZ+L zU=CWJ*=)L}?CaT!mky=L<0nj$XDUkJ1RgcHIyHp^+15M81s9_IrY`;pnhM$#n-#e5 zkCY=$m{l1+JHKxAs9&Xe>*VbIXx&sipS>=jLjSLJjP;=CxsP+2CGW0Z$ic%8BJd%O97mc8?K3ln#Ym65;%OWxL|5)V-xQnj*+I*IuMVB$%`-)~o z;*1hN#9N0rN~5W8Xt2gtjgHCg1cjrog6lI=@?kEXBl0gbI_*i`LfcrDF~|DP_EHdG zl~FdqaRCb-92Zzvw5IB7EE8>^zsF!I?m;cj^)AXoC>GlLRUw1-B#4{b=%|C-^(X1A zM)o#}qE~Ya`(1FA4(`Xj#9I1Hfl*zaM#DR@E9by(p4*adn5G)K44<>J} zGP|?QRNl74)-lYC{Mxj;=)#cB1Ik2-3((V456Th>i#>h?US5t8M8!%#Fq2o^ba68h zfS9>vP0*j^nizDOns;y)EIcuB+lmv|iGn_4(WB+@7~JI2h*u87#i9Vh_56R)`t%SmC>(~SV|P47fGc<4PteBnX+%5C zL7|x4(H$UpE7^9!J( z(5n1tIPu_f3HByl>;hNA@!Hi@k3;{3-4&e}G}2RC0y2ljojWbwfvb%npw`B88?`sk zpfUUtu)V`wusMHOprd1+*n%dMlNQ@}A^{OVH531Sv1x1741I|i)KNT*55IwS`BIj< z8A@_@nKSQC-@!-HNPW$h@=vS5!l1IZ=;lrVyo*BZN8HRo7_a%ZFDcofx;1E{O1$~5 zDL3eklsIfd5egcQ9>27>?cfCJ=`-=TIoEV`UzprAZr#^}=hed+97XAxbP*)N?Wwe5 z&~9}XMkUUBgQ_k-ra!+xc{eiJIPTZ4+bm9O2h^Nm<}_nWO~uDmVBoSu`E!fg3aOCa zT1Q@0kXg(1`%(Cy;~-XLYWt01I?Jp2-?oi@uGLxf{lVaLiw`l6yTjs&J_tFJ%IDe+xX`a&%}U z`z~e@gR@rlg2|IL){Y)2L-wm4^xFT-T@Q~xdn-xci%NAz_5-B&cra~49QIHgzx|Ck ztf8$y4f!KZxP8d3UM`ibad*LFgpDb+omeBXb4JEZaSo+AS%I5_RApm}lmrE!<= z4g+af*ajQzfLh1Dv!fOx-2_8cJ?B5uyU`Z72r_qnuIumUnU8Y(5jl3*12>XpGp;HA zBy8`;ORbQ!-8nN36X-`ijk1Pu!9!T}8*fuXx@>&-bJ`iJ@alg%Q@m&70 z(0=Bcn|wkTlhl7}^ZZ@A)wYwwq1Qc5)r)m=+W5wfV?K3%xE__OAz=Q?gN>>bd2-=Z zO<5SoPq2PLv>bF?l@v*ul!58*ME$oJDy`QGC?wk{c-C{gTWsw#T zY(GM<9@LC#ajb7%7Eu=aaWy>wc!;gC5|m)Q@VK6EqW-YqpDZa)MsVS3HCI!0*<+`t zRrzt`;;3DJVH-n8UD^`^)^=85wz6~KCdMb*JWzJ^!*;oMm=>i`k_Z3&8#q{avas@o zN$W`!@3wbo(N<6mK58e0-T%BJf<33<3~2PIdU9y-IFUK+-5>Y0g2it(2?|fdLutmx zSMz21q;$EW98v8|Q6ykH4=6>HIft&LO1 z1UlvOWzXFG`UeF%(SI$N>96w83KXKQ=t;);5iI!7TiUq-akIq)NIb**;5{VHbF0FGcTXRg>SG?QlV@&d+ox zo^93NaD!(dq~23xh|3z1ybUpMU={v}P-oV%7?7?)`5S7<#2= zVPCc6iQZ|IQWFZG$9H3OfYg`ab7sc*si`ms%-e0)iNHZmVXyAayyER31S@$L!bNU*GQc? zpU1tyb~Hi%k#*cz=Zx<3Qq@oGcc#Vl&JnLn)B-FA?TH7Y&#%v){gD44t9tf!iEFf; zO+e`8A2@cJO1a)p1#Y&D`fsfd)cP46lQNa?w&?fL3|SbhvG9M!WS)VoOI#2uMxAy0 ziWeT-V5E<@WPj4M$tY6&fQU^K-G`9)>+dIf77Ca)@1{xs@QnREZs;LbByda6J!d_G z?HDyAK=tDIwbPDkQK_9T``MZ+bb6-@6@EQ@JE>;qH%=wLE-1@-hGEqzT^WKL1i;OF zH08XR3!-G;yF!b0sNE|b?$)aomCFW-TOO6y<3qI%4;NfrCABq?goW0#gQ{IC|0?JH zBkeZ=yIvp0B6{u&n>g$_NEgV3MggZ0R+`#t$5U4+Vc>LfrkGP`ZLxM4t(_WwVkAWS z4WKK1=C77)&ubmnKitN9x`)Z<*Ogcj()VUdg-xVGu7V7Q8-ib zpia5Mx3ceMWK0Cpe1inwk-q;P20dh^eLvGRUaFPZhl4Uh&eMsIjloBZTbc?f0i>$S z^*`k4e#CmW&-q7%aTQf#106%{$CL~EwW(ce*>*RYo70~EJ|VD|O@ zkts0Js$Hwe;y9y@Yhh~_Z4sq(tmfy#uw^fXy}}T-)p@Z;?9^zby2q4d$ak0zp--Pa7};F@RgQX^e)@-(EcKp3qA7?Ly6yscfVLx_6T{aZ zPxmM*9!g@>Hq%?`Y8=sKf08TLz1ycUuC^mQj%E<&w|-<&*cNw6Z3MMGpu8&?@geie z*>=~O#hP~X-3l`PjAm`rY2SC6mPTL(zUK~P4wRzp5&+ewhd(}uTWn}}LND$FdPp1NPaHN40%ZYwH!{@I$}y)H*QamoV$=0N!PR~BI|{X0zf8DKToFol192seBdrXStec6HjB9Yu`$I2cp{9 z_28LhMi6;`KnxDGY-|v6Ir5;#YobK!W*Q|<>o=>^YBqmrera&i79iVC53J`9)_HEB zLS|%jOt*%ENV_9fSKU7nCfj&_Y&7%!aNC>yC@Z4>Mco&&RlhAgjl#P*mnKk!Bnhwc zGOm^mI6rvL>9uTFn%sBm#DgE2E2;~ejWHXhdOWm^zG<~ohX*wNL&1hLnv^z(u#7bWxU}%tmYSg$pAkvHYbLq>ZY0>F0in<VL@I2q<|KmO25Dehk4ejjE7iFif} z{Y)(|bmFHr$J-rl>Bn6olO#mgbM^$WC%Ond=rTv&Z#Jx*B)H7at+6hiPR0Fs%X&&~ zH>o;`8qWA}{>4ww%!`c@=Bw`tPuJGoNq^JkyCC-|Qdid)_gXOBx3ljp~h?+ZRU4duZt zk-d5|lIW0c>5Lh4)d6ns9##tUP(M}ibpFA-HcU+KhxhvewhE0v)=tfKRqP+%-Sp$5 z&myh$3(8V-F;Gq7w87C3f-+i@K3_{czGHU-L?0nRvjhoR$ya8jIpq`LTgj4ww^S4x zl}M>iQ1!{C`?2@c8O9ZEH;oPR{;_* z#bFiq6^1>ia-FUz*BDM?KdG^gXZcUX@Z2LreHBD4%(#Z2D&X%`**4O;;_D>+n@NM! zp&E99U+cv~d4A=GFSpy}k$(L;gd7cHN$=e>RU*8pL+do0BEsQ6A;AQ*AF5M6r*9M} z(R@xqaah;G)&}c_i}Bt~FP^Z~tuMlR95be}Z_XBtQTwH2=6`ScHd(p4oW3NMzHlH1 zTnyNWg#J9pEkp2A4Spfpxh?c>#EibM)hb5D#Gd6q(6tfSPd;;~=SFW6#jwjHPB!TJ zmgcE#prpNaSq7!iX?}8~9M-Y;ac%$2?1t18(0r&wq=d-R z%rM)k@1F)Z{GUWhScx81&aRDVbI-1HTwg_K;klLKnSiFmvF9YO@!&Zd5!O~(7zK}a5#WiRCcy0QPv2D-l8J(SAqOXxt_4iy9`3mKLJfbigQdDMM`8n& z-MPBh;qY3UAkU+tw<{$N&marYk8*ABaXZm1g8oi(j@g))F=WS3KEQr#C}pb!x2|(= zpL{2;$9_HnbG3gB=uA>=Yf4rHhi_ZRDd98J@{V1#!8+1nVXdL9YMMPB9!4??EoAj< zCZ+52MY9j1O{k+835$*|w#qGD{a18_5vS=YhhYql{8r8?(OC=d6{rt~|4ufaL@QktSq2X75T2)kT?KLh#({w)VEwKd+_-9ZBa=u^$(uPR8;)D{?5`gmGI{OIzQ05OBFa& zp>_`5vLWG-K+p`Ad5N333-xPcBV{D^{dWT_dCMT6LvQ?uZueBN9Y6ixhnw@I9)aN5 zHw^U;_1sh*Tisu7@I9wk&2rJyz$GqY4(aRRsX580t zF1Uyz9aZ6TgpHpK9-I-=)>gZ_n8*a2g>)VjPFTq%T)Yp#5O-te15;}ww^rg2%2k`-$>_N9@5>UZS;pVM3SbP6^8S&4_+kb>d%F^7c!jgv zewy*O2=pA2&~Bm_){hgss;=9=eZS+SO5dxO*K?3(#L?k)+Yf)Dx5azIgl1*LG_|9X zkG|Ii%CgIuLvR^G!N>I74_}|fan;4j*+n=ZNGnq(4XK4%WPIZ^iQ;CXFRlvw-GKnu zKG`@g`s>&qS=Es2moFx^;D*4cyPt#GlhgCmvqiQxFK5~B@v=q~2L$x_duD|jl6C@dY<{=F&dGq{21TS~jR=V_5Rk0Jd}sET`N)u; z=z5buQ)2aC?Ft9cGEfx2tUtybhqr6IcoGtTkYt>WC3gEUzImmWyi?67V9b7!VoTRp zcgN7n6p~qA%e11sQ@a`Vyq8ifcaT25Wk7>j*(CsOv;?3>K2YDsvtJ4;_xip|R#DEZ zFRzaeaE}XozAj%8H-H)=ZAZ1nDk^Q;iHeSaXOtHP$Um6pBkjt&56EO|?I`RDc zUg4N;0_*r!#UGW;8EJ~wuwUOr-+)}W|Rp7KqRPz+-Lg;lq{5V@XH+pL>qy zlC91=9u@C!thk82gXzQ3P_(VxONuN1qbI;mBitC4z!tD0JSD{Lvs{Yp4}B_wNCP*A zpmxMzr`+DB<(_4S#5lIvvu3srNDqO(pH4!N?#me zcgvbZ)Oo5m#z3iJeBAIQ$K~xlC7`KCPL}v-M@Ay#EcmxBLS&(|w^;(UKW!8#p2vus z>RO=&PJ$ME0Tvi}ajYw^{3sRKVzoAPVes)gAe zYYy#MGYzn*#WT!jlqMZ!LxlE<)#Cvn&TUqwcKpg|*G0eehY)i(g@4iRL^%R{`J*uqCAa4(*A3 z$Yk%1I7??N|0!%Ka5e)(EjZiXde(=4AmttEt7PQq*uN2GOPc zXU7h+N6{S@J&)~mXmxhvxo5bypu9tqAegw8ZjE06YmA@fO@PpJmM&3Q=`4NI1R!_( z!>{Sq3GiXIv)h;L5NK~iK-iw1#=!&+^pHCe*tinKiC!gJ z%UarOwzi-A&f6+(DAzckUUD49E(ULXS0_KwqsngM)vnz2-4G zi?^%)CJ!9E+>uLa=D0R2h`PlWGsls``Yu!{DCz3S^<+@`E$G2jqr2kiLTIEw%u{hO zkxUM8UTWJb;sUwkAq2Qe(RmU!FfOd?NgFd1$^r$@qd_MuH05$b*adiI2Z~Vp%Wk?k zF&|mxK`RAP9H6+4o`v%1@>Ei3`J)EPuU|}Ur<`53Rylwl9kFpyxn?t=HE;ycwYk@i zZDB~Qpt~H=g12A+VgcF5xYw%vu5`$pC{cpri*3Za7=hiqXRm+uXOTZ=gB$*IJctOm zxPB~?4T#<}jfPgVugrZ$@oEKg856GAy)|M}?Zb`=e>4+Dk5IN6UbxYplwyT^0a-9% z+MJX(8dYu3LiF`P`?CGMmi7na`6m2b zY}{qw#h>te6Qe114G!(=S~dJ}ETGryz`}8Jz>iby1U}4ZSP2Zhd`wnu^x!%DM2xMb z(l0MfvB#vX_Xlq-)#ZV1(mkvV5KJfcpk~($R~r;49Guh~b^g)BP@R`J0HMoaMPNT$Y=CYx;*X^icmavfnJ5AkCp zvHv}SP#h1R_A=mSrm-s1(ODld8r*lcgzV8j_V?YXCZbq$Aarx7W!>O{Nv%}d|r z&zwQQb}9NH(S16$wJq1ae%PINjzI9|@APE@-wx4v>;fS1sid8K78k zei4==IYjQm!XIZCUk9%2PZJh-!d3RkV{&L)Yc@0V16j*b>VOAXqNvpU+=0&tV^b~V zGy!Ew9}!AJpz7n!g6-Q-<{K(*?f7q!fUw3*;A5g3ZfZ6#&0EQ;-cGKk&}G0{-urQs zkQZ;fW^ZHRm$#Q6*#W$)$_KO0u4nR}me+!`lT9nW>0Ikm+ytP%vK^AdlTwIFRe=c^ zIpBx@(`enURNMSfFI719!YxSZ&Z(CiRs5)1DD1W*SbG|eJyl;#8~bXDxy(3R;?QqF zS?%`x^UC5H8LCC5!&|0MsQ-iPrO@>Fyng?g5{1uZk-V)03Mf>dbjvJfS{+#k|2mv! zuXw6%+;7O{C%=m6zX&|{3=Np&rvD;_lQ@>l6)`$zFXZODf#`>c#^}F{<*h}+#$C#n71qR4e{VB#|{m`$Y~rL@AzG8Rw_% zD$mYFQZC4i&dX(pc}mYOC%Y1ys5^UEA(6%?s$I$TEj#gX$-klhP!d!Y3e>r37y`4W zRgRvgzjZ6O(z=GL5|@X)-~iWx%E~>naH}*if+EkOCWH)h{~Y?Ky`u-7`&COGOW7#a1oH&xUhA`QLi~C9KsVBl+b1W8IXERK>M3il-wA zcu<-2Rq8>>m3P1g=KS-Z8$2MSS%eeiV4IzE^d)p(&LU&HoFflemiRZNmdh|9v5~Xv zTxfsnHhb!)$}>p{iO(BDHva9%)qd8bC9-!Mst11Ht(a_Ib_KU=KF5GiMJ47kzH{t6 zVl;tAZ|l`NRFnij0O13^z!H6rq!GYA94^J7c7Qsw)-4$3lWy(OmUaT{9!^mDyWyOm z;q33qyMV(We3k>IN1FQviUfv#;&Oq48$fVRg6g$_2n40ryR3Xt_0{eK2g>b0OXIMa zmP^(CDwGv;B=IA_Ww6ijLK&iSX5^~`FiOCZ8mq?=xqm)EexT~l<&{|^+@sP9Z`>86 z@bR!H_7~iNTzcHoXfdnX4zC2RnV~IRI$1;BDpGDsBKM~y3}NVJ41lf$F6r`I5ISz9 zPnhoQG)m|sFNYe#G$#vUCaz2Ocn~Es?F5M35VX+95h)*e6_RheZPR3F0ZxJ>0kj{r98&5}n*u6@@rr+L1xWrLq{I|H}U>hjfxcG?xm{4XFC+(JgcKi;mOHo*H zOFNXuc*aY1Igi(r7jgcN)GXrjq+tUpcRcTaQt*a3-|8mh>G?ZJ*#b2S8NZLLKlLMm zdO+WSHYqyQ19^L8WapmD0@5Hwoh$l*{-^H{XBavBFdP#94V+&gw-I;Ej`0aX{5HUK zOwWb(0b*G1kwW(}4o2#@aPbTY5M=9~-LbkRb;N^^_{$MaS?lWXUwTOs){%y|0IW>o zAiE$ZhYO%00nh1x^_LwEJDs;!<)*3{@+XWX!55P(;$DMJSP$_>+&<8@@qk902d9UP1qBwT-`ah~R+L#yrf(8+hya4~Y$~7b#L^py^?mA=Z2@ zibQKHTcu04!?7mGb~|waei}Flykr31R`h!$h6~pA)NmnLs|pKfIWPRmx>H}1VSKXpTSwsv z1|7W^8?tUc^~BS!N|G+SLGA-L-}g*8$pKtPOah=n*CMGa!inQ#og*D2Hsk_(AJ2`Wi(O( z-I77aYh9>4)$i6e_S_hQ7Tdac(n! zhVWptJ78!-%36v?%p^^Tihq?DT+Y+qLg^<4FA7_F26!=Sp)e&tzV}H%bN>o!wG8ku zCNGJYp?GqS8x!&iYr@3SlWOrN+{#p0%iiE+B=9>9QLJlZO`jD8z74^2!q7-o%xuQ< zJ?4mM3k^Mnh#4nQs%Hijwp=YUXNsM=Tu$7U1RUVqq(yg>Lw)3Km$2z<4Ob(TD}}D* z(^3XGrSI0!BF$?w{(8-!%Q?)ecyL^y2!TKwwMjt$LH~Q{7G-rL^+uZ-^7mb=k&*r^ z$zrvR)+2}Ri;Mhtq(k#@r?>MRkI`RC7xu($=-#jDv=0$E!Ny$Y`=_zGbdf$W%=!v* zxYAm`j+fJjyI`XaRCjDC^qJ{VVgDbFtB1`kSR}CKdS5TRq|t19eM}lN94`OGiX!+I zKCPkUAl>oUWPq>g!d%TDP>uJ38qbu&TE?Fh;wQ^^Z{(PPE^jPeLMbRfgCgRHrJl}s z;V?N7{aKAk4?~rLS~awlw2<^lRzFI4JL8$`PbScuTg=K_LKI*mHP;J54uS7KboNPb zts2%m;kQ(SmxW+8@X?0@o^bqc!%P=I6sr4R1^zR#Pz6J6cfAbmFTDfd4a^^6NtB~D z;!oSIqYml+BfN1(NC0;7v4&^KnpJOH&^J+~v3#6@xo<%}=_5=%zl5#v*WR-zf^{xJp0DyIIRl>|XiHh=x6X7x z$UdL~+)@XRdN_w^sE|2QC_BBVGjAZ`Y{+6J0w-D)7|!IzNI_f+`>{R}Txbk^eq^Lm z3hKm8Q{hiv6S53XYcO=j3w4n!!t?@+=fU>wuou*Po6A?W-Uw1L6sMdB-y`@r>g!2( z3gg1V#z#?&$y_Xt30}^2nFQ=@mU|J+=E8#1I8&I1lMHnCOxHHarww-nX$%2!7=g`> zuQVK!J$54>&*cjC+(cYCn#=>fjg?wa@Il0EDaCnh_u?C`uQ&sNLsK9ywZOIf_^RAAHC-FUEIB&F5ida^8R54s@hewmu1oLq>Ks!m|#aCX2`?9V_ zzXh6>N@wgvDMr%hf@4=5j08|8&CsNL)VVlznR)I8ohz6iA_;_woKtmz;-b%zYx$vv z!Ze4aP0FWT`Dh$lO?TeKe%j#ls$C_BUCb@>(Ox=V@gEbmM#;>e^Bdi-sc*(bWECiJ zfV~9#4J(8UBti*XIwp|iWf9KK0Lpb=Tv7o#cNb~Pm&yyeHa@0A>ZRwzNQz;vNg@X~ z7;jV~)0<=%?lYsg(DJ`!zTo}e0-|xD)B_6|hA<4l;1eH!Y|^by>al+*&;P{|Sa7)% zCVF&H9PowEo>Gc5VIWs{?!h;5>iffDq<>BZzhcrQRK2aXtN6xf_gnLH9Bir3n&HMC zId-9WPBZ`0xTVq69C`*HmV4Q6VIy>_MSMW32{+`$tt^xy2@_3mHn>~tTS=3?;0gvT>Q8deMbC*vPP9`>*xJ~WjZ&oiQ(7burxjwUR+`Fx zR=jQsykzgc1{eo{F_vWQD<2B%Gef!9a1X-ojhNJdzPYtEkb?No-yS1*FRG&lK`{c- zv)Dpn$9=|+P~1jHF|R;2i}(`Sb`$@Bt1O>5HWG4?TADOZ?9iJ>AU8;*rwoKa#Jla4 zyVS0CMejcVLK}KeKqI#?#RG~A`t#p9ZbqUX1F*hLey<{rX4b~t7M(4!)Vy8hpflP<=kiL%5bNUuP?44C zePzoWhNr@D2%GaFg7)dCSEgz}3=fd~2$>u<^*#aj1+w}9A{~et9##3nXsYg5YUYGM zm0Ts1n4mREx9B}{5`cY@voi86RW7G&S-Igroc#u^ zZ5FNoygmZvl*M!a_+7XiuQ|1R2A#bmcjv%RD)9xmXbbTH#4wPdLU7kcp8+n6Wj2Jo zeFKnuE9Ux%#ix8k7l&%!%LD%uxo&g-C|yC{q4VB*3k6gtpJo9~Ui2_k=YpBX zwNM~~8)pqf-=AhgFP{qEq^6FSy2F0QH4+bR8Uqb5)955rZ58uU4ol@g$2s&rE{M>l zf3`Ibda@BeXfSI8ZM^F!N2C*AoF(@&=>yIgR2??d8+-d_B%3ADCjUdS$-hV#RbkPX zEi6dWjc>R}5S`7*DZ{W;JDGC^tmtigG2b-Ujz`pa5L9!_7n|4f1iLcAqYvjH+c*N^drDezUI|0%+FykLCX8()2njiMQI=h z60?ilP`O7}LvFmhZ>MGFLDY0WLgr);Xa5?L6fIbRSea@b@!fnMCib3&c0Pz)a@;H8 z0$!c){#tzhR9k;KI=)Ev1ehGk2%ugv@1+5WMZ+9i|H$L^`mQnw-8-L}CNlodV$6z5 zF|x`6xxr~V6|zBgIsqT4fgZB1$|ywprfip*za8lCrKn=J`*v&*>jZw?qjX^3j31Z8 z;7L^JAn`Z3@oCfdx9YtVvpM+}b@=aflr1gJL;jcQ;=q?^d=hvI++otw`qlpu!~Ey- zyAU+%E)ztYdHWvc5HLV8B!g;>5~E4hvzWYRfY2zh-Hubi-p?HP?u@xh_gWeKf&E(r zT5DDrg3G0UAo>7=DO-V)Wc9N$WPo&O%p;`v;Ga97k_nE;rwE_540e*~GdR<>)S}ou zYJLY|0Q8dy{SjDg+B>}jT8)lrvC;$5Q}8`&Y@)t4L6}L=raY#%tiRL=Tkv?j<1YR?JOE z=m_BQSYHx!{k45B;YT_!@eCaR7I!7C$7|P|kiQ&pygF%o%VCCo$B7Qpw2O8}^Pj(j z-XeZuz%*@5gb?Hj6t3Rb;>OR>m5fRlJE z-yX$!Aj@3hGm=eRf{rdm$K}*)!d{l>IFGWsk5;1lHBWt*gVaNz4_R?Nx5y#k7Et+Z zcnb5obK%bKZ!!Ls#wAne4-jiBr870Q57$lWPnM_8v&&HxUa1)@rw`2bquHJ|>#f~_<8Gctq~O0T zg>?xZd^y4Ah}2lhr!ja=8T8KWoz>B=7}sTJqyZ>~AD&Ox3-<}qN?CD%pE+pecW-f^ zXHw#uGQh4U;wKadJ2>V+no<-Ux32>d^a;`dY{(JzfVL%SaE;y#P-VM*QcA^-QI-U;FK?+EhE79H~8v}wkRzw;EOk0 zA9zp!Mn_V;nle_Xq5Bd}`**?Uw&=iejO6vAI)P+nW-4**46S`$ z{41!}UqS6v>cE#pK1WY&*RdsB6pfm&KMj{{sBaXTuBij7l$7F;TGB6=?vl-g%C<2CMwW3>5tlx z+3MnC%_Ik;1U~T_ke^`p{xZsl4$Xu%p{u!q6X0FF`xPAzOxLh3jdZ(wQjr)bP<_E^?r(!&hWYhPcO&545XNYsEuBwRFi_SD zf(xWJrpxfrD47L+xd3srFk~R$FEsb_yJPYSKIUV@sBXOqBb9{TnRAm@bYkV7i$Xeg!FxvvSru>)%t(Z+#$wNG_YA?SMe7I%O8_s^n#&T=6K!2!4A-Ra|6 z$TXWGG{IMd}mwW*&X1ZL}*g z9m_Pa2xK}<6o;eO@|39$vkZIUHQH6P7okJbqlNH=2fVh1^yU^SbH^Tb5tWrY&mhkY zalu=~!C=|3afZUx>kt}QJYU@OyAA|k0?fAT92WbMskP3)APnXK&l3*#fX-$ywWBLJ zG>mBXgd@yg0y>1O#KP)?C`z)4RK?VCquW(|$ilkE_S;^t{q0bn&nv`Pjc0qYOi1_z zsv;-gx*EEIt4vmf8PVLhMk>&a`|D6bt#nH{4`(@CRe_JWHIgL^=#J^?iJVcpF~ z8At$NS&5(b#C60anDWE0YZ6IJ)Vyb)S@C?{(&hrlqh7eM|21gDjuRO9klLpeHY)>| zs!O{P%pT(;W9S_N?UR|yieFvgg#G|m#PR`08878^RX-39{_Pjb*z3p%6$(5Z9kK|A z{!|10eT)mcbq4aNwh6q{#*)d1yf0{)N4xU`g*g5X**XoZbxQHaO`mQUt(@&b zG8V*ZT1;tNE40_|I=H%O*YuF=9K74VeK;?SuYs&P8Zk}#j+xbL4nH!Yf80vxbTxq@ zFD#GL?ji*C&3S;J7dSRGWy0<>?4i4lz`9K?zV;tOwnrgEsGuLKeOY+l8H&M-U{_5~M3L#)8| z(B*XndKeU~44LcryNyK}s!QXa4+46xP^_O-LcQ(-ZS!if%TK>Z{Nps*xL8?mv+KrQ z>onGfsVklhC)v!Ojs;s>E_EYa4Vc@MaiH`+PxV=e4~e05BM70;3(tSPKjAUkncABy z0>Rk!_8f=Df2`{Ck~%n}pGV^)U-RUjErkajef~f#9|pvA=Q@FNysUd5Ts*{2y7{)y zJ$=?yAHbGwj!lDa_jq3Gx)8vLhAH3_fil@LL#A*UK-ksPHss$*a61H}1evq=?#=gA}c!9_*e&YsZR7>*Dh1R4;36pe z2zXvdB+U^MW)1UQSQ3MqNN-CIF^bEt6mV?|68wPa2cU-FMT{TIMC~y=JA3af`oj8D z5St5^Co^A>Y*|c{W&q{sOdnucY_8OxdL>B;C^iD#?W`^HX2M-dtfcT4tbpTs=J1q$5ZKFg#P_qY2{@ew~ zrd|9{bV7UjA;T(%I6%I^Vc%zSQf`-wzd%b1NpiyR>E8>G113; zQ^F;MB6k-IlyfwEPJ8vSw(8n1M@dk=!Q+{mQIP4F1th7JvcNJ%!^Fo&*X^(4(zff_ z_!2Lwa*FSs7K1oyLw*Oo4+9mwHHnSdVJTuVRlR{L0GF8~%U!_B}QHxgm+ zGtg`5ADDy8>@}{=9-Yq3?0MlX;u9rd73WO#xG~}F8OuZ_5K;*El?HyL4HO;1^S}!l zM%vt6O!NxpeqKUf{X^e>3viK2gd#7~_v-^2<+dh&lfp}y-gz7gpP|imsd`L6|0f`9 zilS-_#w@R_1%E4h@%09JEjnm#gaxBAs;7>@ueVlXec49GNK;{2#_8%{kD%`FMnDKN zF8HvB&2yO1^c_t1u56%U)D7qm`~nYn0#C@t;+ zd^6ncW*`UKWVgffK=KtsRMNaDWqbZ5T6Zr)TMAUph-S_~HI5qsIdrn17)hKGxSwq- znTK{G&$g4_j6r8DjImQd|4tFpWI8`w0sB^)gRdN0_S&>f!)m0vDSN zRw^j0d`NRGJMN-i85o&eY<~)GIzDi1XP6GkKu^)QG%Kq4#=@@w>&_a-MVp^D&~wKm zM>nV8&}du*$xfLbbA|2YKM=rx#d8Tz-YVvs5HkiAvB zfRF;x1t!NPF25`vD-w}+p$iE@2I|$Bs^G^cgX&j`(=!TO`xz__6>(ANIDyy4Q#z2qH7sl@)U8)t#Tcy*Hv#zD1q%L({ zPx2%~1EHn(7e~#??4svFRompabz9H{A&-q2#&FTCE&d0fyK;zgAlBMYWmf2I`nX@w zpU;A?*#K%OvL|VF0|q{r;T5-yH3ZY%;yet_OrQUlfBcO<&>$`jzn8n%I73 zzGr~ZcZ|;Z;rrz9!fTyJ%phrzjm91I{SrI>bcayvN(L6BQj$0;+sO=UtA&bu{K&4B zWl{*-V_BkD``q&gZ`~Chx0 z@;%6EUu7v5H)zraZJz&cA{KRU4s8S$XGOn(GyZay#h1=NI?eOG3947n?!C(zpCxR^_vM;r{r1DWma(hAD-UC5z6oVA3pbNW;7T}c4lmm z7Q4tYV+pBHDJ{x`iX^16o7+y=N+OA|6s=Sg*`^4U5Q-#AlqGxiF*DEI`}6$1|G}KO z&pFrYdM(#MZfFfdVWtXHlam6ncVGrTrLAvA$SnaRBaMiJE0ITuTW86Rs7yU>UY`td z0quh$549`rqYAu=Z#O*kN1R0uo0V zk00`cej1gG_#8Al*}STAIXuGnoVnn!iUc7QusTnb=bk+kn$PD!0fkZ|uN8|m_E|CR zo90*A7|^}a=Yt*Y0wzXRx-4`k-(lPb~5u(S!3BV$YsXf-1 zlk>Vp`vX_2`c3JVY_QYzDz7gJ<0YJTr^l{*ob)em91ujGyF7N2Ix+Pq)g|SR zpF9|!E^>Z=@CYA?&^){AFdj(H*GGp%1K&kP$GFfUN^%!ovLS56Kn3XXllpx#1Zlb0 zB=IaMUMk`w56OAS(_cd@-E9hJus4)%Z+Qo7aRo~kzJTneCefO__Q>WR;q;9 z4fzlSw8r5T?n1*$JfJAj@bE6FA}mfRA|LYiZ#VTjUb>~1tl@>CGn#jJi!r}HNy<2U zD2|nJa&H0B(fuBJT9v{4@wCP>rh3>0_!^!R-U;29t7`$n{>2>wL7aGJl3Ob_%H3r< z3MPOji}nYhuF@U+(2M<0_V-Z}o}UR#lGL44MLhg7VBVJe~<4`+qo{1}F|7&{gBDADQ#|FJ|fcW>`Wi@I?g zZONaQ(PJ7UaTJ$PF4 zP*V>3L&Bd(gLbJFl+2X45L+UeREUA~q!7217s@eluVWiJ08fmSow=45mcF=tyo)uu z6Ln)djP#e!sUn0~p4F4Mr7WTCC?bZIc7y8GzNb&P-L-KSdTl$3=~?B{Z$uHs9*e3Q zYJ#f7XjDg$f8$abiAabRQ{Mp!M8Q|Qnq>H^ADJkcBCWdZ4C>5TrvJlf+L#jfA{1O+ zASmEdJI{afkIbo+$(RhEw=x+M5oSKGN7ZDFYDvUn`z=de@y`|LzrHR>v6s0vZX>}8 zW<(rXI=Llvik!NHi7#J&%%h&$kgd;4XcLZG_2f{uE$@j5%O(~^!&Xp7b={^Q#$HUH zd6PD{I}W85LZK&J&Kd`6pe9=)&jn=TOA*w)_|ZU%lmrA#P)NoY#|YC)L_aM6CYB(4 zA5yV3tq{9{lH@I1#bp#Y-VK<4%MM-(n6Cc5KKm*S5336P>Q%qw5+=af1->2*nf+Aa z5>Yi{ctDExff-UjPGp=9yH>;K8>W6;vkn8_8gVcA7mJ4B7Z`ADA<$^BWo3XSR-KV6 zx#;|Wya!FRh1_rQ_{%vetKqNYytZkhXv?)Bip<^oKol&P#$JG>P;gA>l27g(zF!CN z%5n~8UP?j5ilB8i1O@&hg#Ml1w@h7DvIuxA#F7S+<|^3Wh}NQ!a&LNgBd`%c1a zdChJE-G+5c==W4%-3OMnk~IM~m!~d14SJCqyjwssnP0aY-58yB8;Gr{fhF$kS&gNs zwoB-iUyE_F_T7iXmQ>2QwOXW*wsJ)b#W9#E2J?rJt4HPE)3n8!t#Qu5l)a!#$fypa z8wf9B)C!U*3g8xP1y7@Z6B1DS=q>Kcf80bia$4gw)dVzkjL+S)1KxYig`XCq)@U^m@iyHP?4b0<)7AcLsh}Gs4OC*p(fx zPIfo2yHi7dJ$lty(*(NMO*xEAK3E`d_r;a|YeL7Ms_ff*dOA_+7zYMQT%t`z;pt{^Oyd_7Z_mJAA2U?mdp()YbY zDS}G75m&O2nun*|+>+MsbkJUaRM4O-V(rhe~~$H)sss{VLM z-ZP;c3+I$ksb6_&%eK;#jJ-2b$ehQd0=|70=~ zyamb>(OTv?Gl65_2G1{LPJR@DX_yXm&Si;ZvVHrkx?CF{cA<5Tv@0TuS_RFz7N15selc2BX6muMyzG5?qziH_Zj7i)|T>iE>A2~6pp+#y?JtcG&(}yBvtO$M@8Tv z2!9BgGv*%@czxXID2ipw$YqxdjM?CvU*D4!kTu2A^x)#9ToRD0VK}$$)&&YE2N85` zAvTz!j2diO?`^YwR^hBC*m1$xm-p8H&_jx)`1y@Aj=|XsZtKDSTSANi)OP!wXZ6ez zp<1cry9Qa=Mwy^^&AML{xUX0wBCRgHN(UsGSypdPeUnni$i#*Klu9in_Oc+ibfo8O_^z0^5nxd8|$0}l+P`dh=` z4o?8mp=5KAFHU=LgVod9eI2gt1{E(^{cMfvuLoWVn3mzsT|pY@%W4|64e{m!8PLBV z&VO}Z3?ZIVj~d4;|F}Fe<-1(-N_A9U6fpa1ub}D%E4!OO$nuwSS*YfFkn1sp`=TC! zx%$udH{%cIP#b)y+cqHRB%1ws5>7qrG5ht|=M)?@gRSx06CC*I5L{}a}lUS*ESO$75V+q%aGLwJS73$CvvUt&7>x!#f#w6Mwtzl_r zaUXV^yga&kiZ*RZC$O6Sh5XzQYRZHtkCn6q6G=p9_8y}-HO)-RP$@+bZMpj->Z_>3 zfx$@$?UR0GPj;*tyK^$j4nVEg~sy4 zKr+$Nl_ZT%S35vbg?gJ9m&S`sxrpRBio~-J$umUKn7_SC&|m-$EB!^v5kB!af^5KWnizjZeV1ck|pOcn7?Thx6OK%%qv=yQFFD3@9Ct>I}+Zk4i zxvB7eC6EaQWkCnHsS-Tk%NIMv%jot7FD@U|n<_=rO}JXjGOwTU|vc1YrlB_9(f0>4oSH-43S75r6Z)n#CV zT++mV1QZzQ^jwOhwoZ;i1s#Ap0HPmd{JE}6BUI>>TIry4=ebdNGX)+%Rp1s_|1t2N zAd6_8ONhe0QhYSK{Ljo6ZO{^3FR}H`n3g5K_DrUA* zah5ak!r)zX_%Z$?Oh@SO;K7uv3E&_GVt%=0ya`RFjuE62!^_*Qi3Zt&1H6I9vu&db zIyqFYn+x zCK($remj}dW^?g~6)k%qVBh~fwf*2hsPX`7jszHIqF5T1gvp>OAR0=;z}^!lHKm=kWcZJ z%DAyC8%_zoI%Y31#2i$cE&mFCyq_d2D1+-8kB1nv)7>+weXX3(|T zmVo+$M|?57|8onm@rQ+c-N$Du1B@^6M5y<*bLw(s4hCGacoH5F6wMzKuOKmB7D5OviH9T-HG(vDUF{8{t7l}uYa3$MU+P8cXw zhT9xj7I1Y@iQ~wrtsMKaMuTEBspC+Fz&_agG~nlD=*rQKqcgNr+S^FLd9A4vvU9Fj z@8p^PKQ|MbcncFc8$u4cHAB9M!{^uCw*|W_R`!3+oxw`FqjdHUjyz0S{G*UHuUUSr5rS=TpMRbk6wUW@K*S5GrE_Mll`mOI`kihjlhB>Y5!hVJTtvdjXro zrmiU@b~*n`-2(8-n$bQ51%8vu5>CBBT=;$o?;wYzUkz8D9>&1Nb!He?cYf$z#BmA~ zS`&Wg$8nigf0k)qW)vRaXRZ2cX3zxC#(Pl)ZWA+ia0?4l4q>{!``y$O$A9%ihh11b zi{$XqxF-q!V}lfk5dIJ(`RNzjTIE!&L?Mz;$4YJCSY6bVoC8^CUsyBD^iZ})yUQfR z$C}1-B83mzUC+JsO=Vw1g)~)i?eN}>gMHyoD~0apO5QSc-JbyBx)%R_fS&|&Rw{61 z0;V5PdJveH8g>BMONIQb6ttiT=+Fflar0ML&S=&_aQZ$!MFpIyNPUSJboqbPnN5lX zsr^76O`w$vC%ycMVfk!1x3waGJWL1;BvsWuROPJdv);6`7r;5*$8uDKvE~GBAgPp(?+ni;|5?Cs62BRg-tDo|C**_V&B7+IS4c^uAcqn+-5Mr(JL~1lD z1TkiB^9lBI6=&S@%Na}`BdyJXbfW*>r|FeJ~V>y>L6A6KWJ!Q0O z>vRe|$2j!?Y>6*!52{`w$E;Lthi~yur1DbCP0ku8Oi-l*e87hDtlN3pd@Z54Kl{a) z4vDfDEyT6jQo3d9*l;IE^QCU$GmN4-PZm|Y868Er{9M*j2{b@44ItmmKpU?{0-I3o zr(u=;ua8m8fwKjXM-wP}_#B3EEA^!)j=PjvxAP`>90Ud*L|||f2@d1`AL}~G_7r1r zM9-r(fqmN|J_nicfwGpAcrJK5OED+GBdZbVXz>-+zeyMM0cT-QQfT1~+*`tT=#ASDRDAJ7%4 z;@DY*Gh*9jQ{-a&wbq5Uo1{A8R;*0=@oUv}KQ4SZ%?LE7H{Vf8ky|DdCzV#&A3Ryt zfzs5XAUXX@g2210lLm0{97Gu2g@yoL8MX%Sw=g?YWRcMImS2`|;P(J9;tvJ7z~Odc zl5F�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 literal 0 HcmV?d00001 diff --git a/res/contests.png b/res/contests.png new file mode 100644 index 0000000000000000000000000000000000000000..58e17e5d8453938480279d109ed47d93dc8dc87c GIT binary patch literal 12898 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 M07*qoM6N<$g625{pa1{> literal 0 HcmV?d00001 diff --git a/res/icon.png b/res/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9e1823d33e5d0ca80b922e67c15b229c7bfa28 GIT binary patch literal 10256 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 RNdVA~*$Io|c}Jc8`XBoAk!Jt^ literal 0 HcmV?d00001 diff --git a/res/index.png b/res/index.png new file mode 100644 index 0000000000000000000000000000000000000000..0c33e5f4427abc1fc82fb632643c10e8be82c01f GIT binary patch literal 7555 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 literal 0 HcmV?d00001 diff --git a/res/logout.png b/res/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..638fbd77dba65a64c652bdeb786b6313deee1795 GIT binary patch literal 174158 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 F{|6Jk^yUBn literal 0 HcmV?d00001 diff --git a/res/minus.png b/res/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..9926bed54fa8137a8a3e790576ed8afdf244642b GIT binary patch literal 5125 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 NOhsF{;)zx8{{Sjn!`T1; literal 0 HcmV?d00001 diff --git a/res/phases.png b/res/phases.png new file mode 100644 index 0000000000000000000000000000000000000000..714f25cd9c9f1f562e2bd28f6c7c64079e50e3f5 GIT binary patch literal 6635 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

7#p12#c&(#Op=aX@xLKMJY zY`gvBwd)s_7X)L`Xjumzm5}}9S^O5E6h8a?v#ZFjn8~x|H&71EFS!u;6|?ul+I@Ht zf?qC;R{gcJfBA?l^ov~=6p-meqxpnrHt~du=Z)DfX=DzJwUI}oo&{umpYEGW%=U>m z94cETk7PjFj^WW*xA(<Ql%ij7K$w?Dh>s#N^iILLt^fe=u$dyR-Ha++TZpN5wZA{Ogs~0|P}#NM?xQ@#6iAS64H`GRe+k1Zr%2alS^fhi|cNz*=*0)BapQEvxwd zO>BpsSJ6G^Fig0O&H%E|3kgLoK5wVTZli->2UG%t01)VNcBmVVYa2^;PosPNFJxOo z@8*01yFqpL=oRt_h;a7~m0v+$2g5)$aCLf&2w50v_{3`qt!%vq+JG#iyQD>M$xK23 z7XxO2NOW?7F*-ZjNK)_(y|q$VJ@c_7DT;K}-RTYIL4+3ywh!G0*ga6};tvh|0|x2?7XH#YG~yjhF)13g7y+;ErAb-_$a z(>Fv#*_RpbRPK-jNCWziY3t+b)0oDJufEbH_hkJ_I6-p##AcOJMMbVOI_y@EtZhIC zL<^es@5z6Dt&JbPwsf!^2Bt{PLMZUS#E#$0Zx%kAk&p>%3=zHvrkB8cqGeI-;eSi- z8wENf&g+w$xfnIMK0phk-F6?3FZ-x$=H7jJm5T*}J>yz-m|oWycfUCz81W>}nq*ZkuBZc%KbX4$*MP zZGXSAi)-UOcr*l--Nb9pKv57r2t21YSSqs5;c&rnm#!)Uh{4ppQ|}+bk(}&{wrofS z?j4ioYF}(QmBu{%J$I}?>YF^5eJH^6Pg&?AbUbZHr3Awm9NXKYD%PoJ1}PYt=WP<2BDqFbIS(^J$pq1xnN zjm>{CFHK*j4e_tKq~}!Rs6r{Sn&?}Hx{(mRA2-d-s9Zl$-_{1ESynMO-&$!xD3G6H ze(an5uI-XGj_T;w{6Zm= z^Cv7h2UM*lYD(0vI^F^H`CD>8$$XF2vYr zoX;J{J?HW+)yRYV4pAJ%_YCrNKm;=zTOo)yGJCluJFLsA2)!sZZK&z)5~$y~ltmQ@ zaq!eDuhD-yGLwI&EW0S1A9_?s$!h0W6P`&=e=|ZN-I#cpVfLValGVn6Q)=SM^k<4p zFQbk&=VxMbeB#hww^r_D?uISB1z+LIE* ze{sbQnxc`J2l;paZvMapEX#YU{??vN&`RXG+PR&&+;m5B@V0rzH{_=_uznR3G+?|y z2w6>^!nb62Gq`Fcb7Yy`7-Q?ah5?3C+QalN!#8!>_~YrYuq0mw!UZ$HhoygAw`(oN zE|L_X!t3<72eQjKW@!hNAvaO*s531~m5cu*_H3Q7>rvSej3tHN`U0I%!J+fbn-@-! zsAkb$M$71}r?V+|%FMEjW1#rS{jYN4t+Nb9t>Q+HFRTg}40fNzDjfbN~3emBfTGL+3Hd?t{SJRy-b8QSb zHTaUO2*iq!BHRi)VtZk7x~>~{R`}0QyW8StOu%>&Q-L80&>o-**lOOry=)^bnAY=R z-6ErX76bg5e_U5fl)7(gy(a-$9GOSP3vs5HKnUG!=Y~XiMy&v8oeVeTBNXC-_?h{H zAhGptT}J+E+7DVygtfe6(ISx0g^aqcVl0d1Hk&(Cx&Htj$4LXYMo8%NlUxtT&j->$ z*NCVki8NbOPq>IaeTRdsw=|G3Q@`;(^~-D%xKY$oroatOU>7%-Qw_>%T#sTk)-10& zK+nT0P$%ie5>QT4Qc+c$a!||XuRKR(6QbrB?RrZJSG!aCuTg#JUuOGMXlJ-3bs6yZ zJ=DgDKtwK8-)`apZ<4oeyzViY6w-4l-raOndz6_Cu!V{g>u4KDf`Q~MLV&MzBNrM4 z9iM+LgZMLYPo&4qgoo~v31GN|3@43Nh|hM$Mk*a~ll?u!yC=qj-NU25tQjI9RSm3~ zyd*#BcfrTL^AL+jksb~_J)+!{@KIl4JZ6nWMgp?Btb3A;K98tUCf-Hks%^I>XJ`F z=VHq{*LSP8t5uQ2T~|1r|9`@uiP?H=(-{ZO=E*yoJsmSJ3OJ5!h(BBPdeuK)c*IU?^ECH&+$L!LYrt4Ivh6^ zw$T^>F>C_`PhYjHZ@j*)S+N(ZF9G>-h4~4OEwzLAl-`<}!12Ps{}fikhyu)j$(v>X zWdnFG_*^}^b)%(U0*t{fPIY5sxkm6PB5SHAw<_1wHAh4$%{{xGpAqa3H)Fi|au|z>u`{$7R?^Tr{{J`AEQt_xF$fQl-@cp!NeoJ( zCoS;X(?I-{$XorWKCB5)cR9lm`n+OpiWcnEl-e7Q?9Gc|)k#-ar~l}57uh6b?$n0A zxN5i6b0CMzju-fwd9;KrrmJ~!)>~PX8vtXmiy7r7aC%en9OEfoc0;4lxse-GDjduJuqkH| zxx3 zZEgH3;qW~P08}a(WT&&rIE#=RU#8T(b-PY)i^|&Ez+^UBms&2dT^LlOYy_fAGup-3 z7dP@mZ)CLR({@@oOFW!dETZvM7YZC*CZYb}+Jqy-{}I}Ri@!@9$V-U_z0W9X!Z%@) z!dIQ~P~>9Iu~Ii=Dd}beL;cy)IrP0gZ&%I?^9D)M7QiToo*pG{o<`g75DDo3o^d}{)oDrUe|l9xHYD~M`Bql9o? z6%>T*%|PIw>9NukWBxvJd-A*Rqh|*KC$)Ka8jsbe;PBGOjw{I<_=KRJN-0B?Gg5;K z^kzUq@P&#x*O#C^O*R-pB6nwV){?T^Wrzy8=>&YFd35T*GK@ zPO|c@L`OuDEbCb{g;h%v^z(&ciY`I=E@$U;w{hV4%{58Yed>Rpf%QfhK>TU%bRA-6 z^mCRM5;M{Fw0;jtv`oJ}H)GkiGvqkYbc$A#u4o`Ku>DnzeRFbqvXqr8HApb&Mc+yF z+q_T7^*196WE_7@UrKA52>f~t{wmLC<4o{h^TD;g-QN761}#EeO2Cm_mRIgCc-DuL znQ2j~jF0TSG1t!tU17bsFsjT+Q1{`m&in7kv}4wL&XhCiA{XdrL_de=4vh__toiV$ z6e#XwpBgYLdoL!ryOC3WBg2+R3vs1F$)|?m$Dg%AX)tX`AL6Fzgt7$VsE2&ttt^zH zMdd{Iu6t5(`oEHhgaOEQDqK6D0nW^c*8d1wDLtI|e7Ez`Jj*H_lZ~|BnGh3y*79^V zso=gIzL>BGgg>i}$q%)cnP?${)qW!L1HERLu&>M>Xa6Vemh+b{G;!H7GjKF9TAqd~ z&6Re480vdqT^{d@zQ`1j8CxGFGMk(Ohz`{tqzg>vq% zAE`;~%V5}%O7P3ietvVR!MJ-Vu8e%bgczIqEoYwK#l0e?o!&d0h}h39E}eaoJ)85P zi|#PDd8w>y?FV$V&}ctv7R2>Me}b(-I<1a|)*#)_8e_6p#UigcpEjP&!#JLs#bkJF z?3foWbu<)tlsga5?ORvekTAKGwm|kcnUqY<=`YhYTnFkE9zy39I@e)N}(%74F?9R6rOO4=x35O-4s12v%9o?*c!hK>wa!8c4^TZBh0V{k-hH?l%$?x#Xzi1!S!+~0>h9CiC=0bM8p0GvwKV+EjWjON`_4csggK&K{H?oO z9L0s*bwl{tglqVmQo3$Tr#FbUC`@anebQG#LGjsjrC)}uNw-2_4Ejz4*a<5Iv2|;j z=mGAh5DUYU-!Kb0eR(p*7OA=w!xC(DpO?Z^@3Q=4`V)f0wA#{96&cSwN_?L4x9FVV zk7IV9)e#RB`PC7VGAGX1$761Ka7lOkIBD4f>ukBlq$MeECW@^+hLH*8X zFRiF=xX189K~+FdP^O`}#w@>)H)eW<#e%U3zA5pyX&|ViR~z=8YJ`2Ag0~3Nr&Pf^ zh7W)G?OfwCRpl!9#C7~kJ9|_K>7JHk6!_<9DvvVP2cCk(za0ucACKy_X3$Jl3s&&n z?t5>R>`JaygQeRb%kPmCNrBW@yAWD?MP|+6*ZVn#)}^+iv)rFHNZ*)i58N3j}R>>(!z_v6Ogn)ED*=6|fWn5of z^_&u5)V^t%)mj8`+UYi~=|Esri2}zFAjn-g^M>0Iu8?14qZ)|+qi8OlLKx2Tx;!+m SrS%a3!1THm;+=u}!~X|hju>A6 literal 0 HcmV?d00001 diff --git a/res/profile.png b/res/profile.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb294826a8fef623654f7a635bbebef27eee01e GIT binary patch literal 15722 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 literal 0 HcmV?d00001 diff --git a/res/register.png b/res/register.png new file mode 100644 index 0000000000000000000000000000000000000000..1b90d35e359a3d69a127804546a11956231f94b6 GIT binary patch literal 4408 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

V5ZPb$c&pljQx66S?F@t=GtMT6o~227uR{^n z^Jy*Fv^IR*3bMx!b2zXHFbWO(st_tjBI{`oNTCcPgFvrk?M6M*o1e_{t-va&`?skt zxUS&ze}eOxf-q=ow%$A*oGElwFroxX4JiBdsj2Q!rHp5&U$_mLH#@D2v6FqBUElLe zDx-+b4)A_Jo2S9CS;3Ot&4_>WpyM-fXzSlffN~X%970&R7gYvrc%5W#a+P&r-BaQI z6z7~mPONal9}&u42rv?f?7ty13;ohgoP1;wCDhWM_}`(QY=MW2)YnF!0)>rfmrLA8 zZr|U}ryE{b^Emo%Y%w$yWD^Voqcm8XbuCgm)%DwhKe0e?UIGwcO7S!w|7FB7RjX`@ zP5^30Q?GQlNtB>ED)V>hr=AtuK2qhqNNX_y@Sy#ABN$M5mOL*VdXnuMgG6p?)k^1W z;BNhU1B3(OQHm@F6nQ%TGr}IZ%FdbqofzHFKjr-mg#g(sd@is8L=HV8tGlm}Yrcs> zN)FA57uFv2+w_jze`@+(6EH!Gu!nCwY;yHD}WTz7N0%PGX0Lt>F&H` zJgd*4Y5T#&`8_Y#${b)f2pKdM6|0v|EJHyUH>+!Eb{0l&5Z{XQ+IBI`0Z}`w(K_xa|lfxI9_6Rhn3wVn3Yrw;ZusDn-_Gux+ zhp!glsZ16Io{-omA9PI=qgkkZnRy@yUDn|Aw9qZ^>VzdA4?|}?HbmefNRV0L89M6t z#M3Me?mE~@Ys17t4gL)EAA^-A5{g_!ygD|5`1Z!!mNiunu?f+nEglPGzCD-wd$!02 zw9aO|ZQP$BNK2l+*7pCYjX5aRLPEV}%R5ZUi}^~eM#p!P50>CD#fiz=NLq^!tq1xd z54~lQ9=%N_epQC5h%eP-;U=wc$kUY}KhhEWn3oK8SAtYwq?F+Y3JYd0Wkmcl=S#Je zNAv&YDL0I-M;sa7YvAm<_{#wl4FMFfuHFdKIpf}nrDR5i{2I{m9g}kncGN_HAyEYF+S#JVREMWPVAK}r7Hm29IulCr z<#AEOB4DO`&ehAQxLc9?Q?PeRNC!H}yce!Usc%^*g9;;8VrVn`+zTez> zLx^tsj(EfilyNgB=Pj(d=TSN(E)dS$k2VB0NRxKKbGObSw!@WqoG6}%k4RRv7xh?u zmJxA(4tm`(_-8I!)yP`brSw4isr0o(Ist-T?&x(FsKV^bKRW)gMD9uOIydHq2!6`C z2`G!uxVmGq9oW3GU0OmJLh^6IZeNl`igK-v_o!(SbX zK4$sTWT>gm4GrN`Al>LXWg6NXcNNYWq7`InN`9GsCpd4~Y?vLm+J@@^YmkNzX{{csjhY8cqsMZ4{b7k>YDsMH_7tqLsH39SSkV zlsgOvOmo0gLbJR7PDc!S++8^C6RqImhEmD|ym<@sddhrHfLC!o(|e~EHw6`}*~m|Gwt0u8L{5#L;%gnCg4Y7MRRAwv)RH=8BkZby- zXLqr{0tj$(0g0RSHmBm#1-8ILl8HOv1LavmO*KP$SrIhXu)pTWkPy7+h(0T;0)IV1 z)P~J^3XhF?Of5`LBkde`NfVtw6>Q+ z1Og@Cwde~-seyxy%5a~)cXCr9t9)dulgCIPS1@p8$sX8f�p3+c%wFHV-TYLN=*gIr^PKpqU2am`9&_}$% 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

98GuW*Qqsw(|wp_2* z;8P-s@QkD{6>Te|e$7s|Uvhq2h*+w{WCu?THr<)cMgbP0En+7Ts+6Y8i)BoG$xBAUk+_d z5BcJmY+ZT!q_FM#!tk{tcmGv=foJrVpQ|uPkQW>tF}=6vN%`hf`I<37ed9^=+ji$T ztFlq!WafJPX}Q&--vllg2mAta=@CSYqgqNV?j~|Ut)H^0=#>o0cLb_3;oQm{5&v5v zv-4B{VW2!oCT78b-h=whH3!@SC2mHs5Zcj)I6RO(VhIFToEKs<{&saJihSsth;mYv zJx`Z<4L7_0=J)Vr(8adG=Je1y-`J31%9VMO)S$&xB$fH%sy!toCF|S7h9HDi^AN;J zmA`+ZP}4u$(RABuU}`7jAEP6(*)iX&MHs4sTm>|N{-Q!zv3Wtsm4z(WE3wq zY##(quqK>>RGIzaKCIzR+pejS2GYqMlBEDa1G;kakl||KkjxsgGVe^vX;QEDh(ba+s87a~k3GcXPiajvd)0c0zKu&g`frWlQ@Whm&0E-f$GUg zlT(7X8_qbAT7G0=73t$no4b4CXAi%|fA=pfp`{P0@h{Jh)RZD$K*_kjdDoG^*vSbA z5^p(o0mmp$kfOl3cvZ}Jl<*6Ypxc4^tzmjub{6H4jH2w)8QF3Yu96maDvlMr77%9G z?>xr{;qTfd}d#qpqmixAhjq6HxjFWp60{6u#)MyeFs7`vF)igVVFJE)+t~4kq5)X) z6U5ttB0tj&$(E0Uj9hH@pBB86aDna9slq5+58w{Ev9YoDmpV#)9z=v17}SK>M7`>J zyPQX8P%|V&;gyhlFjGWSwHF#PRjFjM6EN*nU(t3m{jhstl~9L2m%3M z$mth^>+Jx}vlvb=t1Z+R34q=++0?R8SFx)|)&85lX-BA^zZC=^_|!!)cZ z`{5-irD7D4?!^Ypqm~YJ;SNRAR^M*a(*UZ15VbY>`fa&F;1JLljCaNbusMB&n@)Av z`w$=xbe~dGY09kP1>@SB9mOD(FvCNC#`eGS5$92COy&Am4DvdJICB*eKbfTpGU+ zoNv_yp`qu8beB(naOt%rfuj<`-tVKB#I00BTa zZ1bLfzc2CWcS}*`l;X4YLd#+9`PUnP6~M0edUB^mcQH0WNpJNbmVNhGa%Q>;yU6jr zcft64DbFC}+qBbG%b6Jo$#zz*0s+ZyhZ_sWJ*0^5J$g(f*T_UX01DSW-JU~b(jccU5 zye|Y*GJ)tFRo>oWD!*S%+*hreonD%WDo(;FFNSL|2p#=kU(iqqBwyB2O#K+$;uKQx z=xb_iHPfF`*YMl!Msh(RF~>%j3f38u`oYtu=@MM!`4*RSTZ~Ld&kQ9uje`Y>Ej4ySLa;_34vuHbv~;IHKcQB zo2JriS(VI@Sx1Gu(@dm-nlyr1SXg-Ji^}99yM1LSA$FJ8z-i~pb!C_wD4#Hlg+f9M zz%~YJ1I}<=aNl29v;m6q+XlOT_MMx*_zjnomRVrXtFRQ3K(U}~sCT^ns#)*jqcb@i z!jW$6k{7R=;Ei<4_txWg4HwU3Z+XoetScKCZkGaToK&#=6;{NCA}&l$<>Jss|M%r| zUdekoqlr`I7UMEy;UH?g!&}PfEs70xy?@!xLxRU5qQVf3T zy{{7REPbkT*DALjkaRhv)f3zA3q^#|Wy7Rr`mXeo(Ykm}-H|HV-YW@AaM?^l_#XCh z@eeW038P{FV3)N86o|OimP~@j2-tlZdShk0PBL-Ep*_Xl4I{!jIyoc}`GGx#ia`uQ zwWzpX1w*m#_e?Y|5Fo8;kj@~{8$noB6QU<`O8h*mcIE_j4H0gph(+WYI6-d5Tg)np zGwcYo=ig_1NSyA&rRcc!@k;HYfgs8)mBM5*;OXo8fqSclYEU7jXF=yztkA_@YTF+eq_Yx`R^=CI08G(m`CSj_KF4vv zwud?Kvmu3w93g#OGTL0j#+IO!AxHnULcH~~n(nG0&uK8WoN6)GjM#$#kUCm{jT<1{ z-9?&8gpz_J;Gwl>KF?Vs^V?oSyV+jBUAdN<3)^_n3RV=R!S_5wAmdNPc)I%QT1RkW zUxr-yu;lKH207yyWj0ka4Fv0%Mh9dqhFq0hAY9A>29;)?LCJ9U3aO*zyl9#0s}w?HUadm zTmbe4HpWZ{9L*npB?d{tQe_pzWXX671*A=rar94Jm46_?g-ybvTrmgC6g2s(U~IsR zG{enizk_@IvdtAN%`UUmQL2b(LC-;JD11!h%x+NU#_)j|L2QPRn(q!+8_kx`Wvz-} zIWZa-D^FQjdv5)K5hv;#1;f)G-(PU6fAkWfxVuqP`^ zdwqXWkTfTX8uK$`(!dyGvcRkjz(oVFYSaG7=G~0aHq7m(gVM^uJ6$c_bj5+9D+Lgc zakvb0zh$zpw@?thKmWUX>%2~Xr{TT@$W_s3bgsC+C)kkfLM>`qOV9qVEzX3NE;u!kCX zv1BX)VR?)ZCO6W6F~f67bDhURGcrcrT&^VO$_o3Iv#Nf%RFHzp~Q9U`Czm7eg$or?qS$ zMaBe>M1QV1OP0yIc=49tWjJp^6dqC-OxGKj#Km@0*vicu=A0R>fR@YG`|tWsGorX7 z3XI8TqrW~w>^^?hs~UKM1z`f1d1sXq7^Kz*`vUPtn^D3Aww3L(y@TH=C(O(>pVqKR ze0)k=H5+;QQ_8N=@wZW`g0Jp-L$YWFPbsAwR_en#{GH@3)dJTMWU&Z#Im_x@&%OO(T z?Wt!px_(g8>q{Kce@^TQ&b-#q8<;Shrg$>A6a&O2_~ehS^?xy{GXKnOb5()3K3d$o ze415(aM0MiQ=b`+IycyVy^H&cb;jxD6v6?}#1SZAPgWWUldzkG4g+gn@;w9vB7Tsi z$y*lipd@y@$6K;d!AA*{o%O|?xF_&6Z$o@NlB3qgivjgl_KXzXWR?r1*vhzJpTEX)ruMP3Dr5TL|*VEeSK z1)}4v6e&&P;COYzeZL4VZW$gP_Goq8pCp%!;Q68K8gorJfDdTz#eM(Xe3cTQolHXn zn_cNRC@Ho7dP;ePjgx?}qzM1&g(TRwvIK<)JEO#}Woe|4Lusj8;sE2Y&D^%qmk&Bm zTSk9T1p7+Of6_B%wImYsyXB`zD=3EZFnKn?LEEpTPM$;8rKV;kqk3EW$5%JYIaPa} z{F>Bpk9mPEGj{Kiz*$7w!<-#~r1Ult89p4Yf8x8;+<=bPNDW{{sF=(uBC|0uHWiY) z6NuQwen@!yb*1e-tiqsmCG^(Gf20roDggTIYRvNog!Gn4kYxTFSyeD2ShGG^;S z6VrVb_ZYrm@Hmwg_=M?4EDa1MpAAQOFLccS!(POT4bqFh*yHz@a%ulDZkzW9E-;39 zs|xoURZ4+Fo|6>KzY5u!J4N$gt|0|&?+JR}tEnC`ugi6fIs#3i!yBCcf+nHj(eLCu zdNrPDKZ~H4_mJe(nk)-yZjpN|IYk!iMohUrxEh2CSyFaU@9dv9`99uwsHv&7Zu;WU zPV|GQ0$>2pP6{5S)yIr^54%LgUfVT_BImzZx_Pm~VpD-;S$>jzu;)|w8Cl4&1_y>% zc|=2GNxs>z`ti}DU%J>k=V!tR-xFicvoIx^k8ujCL`Jj$mY>YMxvS%x=EHdy#XHh+ zbYdLV+`UCGuFJlVUx%XE;*<%#Fx`&#RMzf~6lyXAvmFK}$fe}GpT(ag8q`u%%`rO& zE-nrUCfPfE_rzxM8^xT$|8Mk%>p{ziVbaU%J{LBHLZg;&mqWsnt*tG6lK1a9Ky$&? zza5#OJmB$G&^iIi&o1f)^i8kk_M z%o4N_=S2uUf3NC68MdjSi4;=FtPaAs{(OJiQXAVLiADa*p zF(#&FTKwYQR^tEq(q7qeK#$6S8N+_vvwavcG#j)R=XOQc>O=1IwS1SA2T}_%!Gbw< zL!YO?0JKwFJChi)1dvhM1IaJ~2c(_;oOpK2h0awdcmc!I^4}wQLL4eu! z0}HMt6xZU+C4>a~okfUr#d%!5FxIbk@4pp#ncr^8Dzmzf3QqVVtb2%rn<x@+uqZ<-Ku8RY;VyJ(^|OFu$=q<0S~YhAz?KnbJD-z@e_j0HGuE53i z&|IFbOjKal@;@)1C(=Uv^mImz6-LCiPrZCO*&oIJo^I}ba8CJ|v)I<&8FA?~5NK!xn1F4twgVIJ_gkvMiYme}xVy0_e9lCI58%n($Z*29 z)bA9c$=TfO<4cW#;>8@VTABPn48p-dOR|?Og(ot-gnr!n zD9bt)Ib~kg!&^3 z@7f{d8FD-VIVZ#d#*~94vBp`i=$QQX3!4hq?1GV{ZZxfW5XdB_7%&N&;Q8<8s6HhtTdI5{AM%#Be1%%xsHvWRd(DLvLC8fk%hQuBf<~_ zRi{S6=8yU77lsDJ#`(Tf5(z!9!S8j$Qz_hk(4#fuXv3)K?2HlKBoh&tTRD6I~;HEmmr^+ti zbHGutKpB?;%q_UreEgm<&%d?1Mg4}mvWN0i;mCb=@&SNRS_`oDLk($keWUNUfl-D=uYDk>o2}Awqi{LV*sA{MvKhvVJ6^BF-TAzH}B0+j;HQ ze@<*Pe9kYC_u!EqS$7aej3%qox_<~nT=Kab8N}>VCJI%Sje+JGH7BK|r47o?1PiC3 zzv?5br0TYmW|p9HYq6Bo3VjLDQ@6I>xAY;m@S!N~Ubldcun+aa2&mSLcH#ogF>$=t z9=&~z=Bu&lZ+UpX(;f``oW5O2vx+fO<)XCad5`^wRnU-IER>#i@|mJOy~&&vpg~ID zF>)lu`ab64TqLbS>bUE_H%+*r&JIV)v@B%yHow$gJFO{(yWAKTZ#AQf!+oJFcCHU8 zOKyf}HTB#w7Dxfu8s1xDg_YdG4||Q<_c)jsy5H#qP?uVcM(W)TXCn=LuQkl`4S6z& z(MG^&LYYkMu>&5}tbmrWujL<3oVxg%yyIFShX+yV5GeSmW-2xE+ykM*~ z7*3c?Bmm%4@g{(<+w6~8W!YZDd@s^mt^NA(VdQI09ugZ67YW%W|NMZ(dc$b^&>2|n zuLXm`$%dWZ;5BKENz>;8~WN&Mn8fC!QPLPQCxz(0YJvPO*Y z63>Co#tV@`!r@Vrt>}p$Pz+ft09!5aiNpe4bpZoneOm1jiUxrHv}O>vGQ%B4M*_sps0z*`qDm;PTkggV;u^y?5%x7YG9V-S>Yc za{q-*djb#ev!x3LKaFK5y^q+;o0;))i-Y<9LdEfeS6Yqr^FVKAmpSV)c;cnWyJrL>pioK&8_yU(vD1QsbpZF|1}TE2 z6(`vs-~!#1v2?3&Dc*+v?-E0~d8T1E=g}Z`FZsH9()M7PzQ8=ZcC^~z%T;84eUwmZ zL>OCD_48*WmUy@z{Dp5gnnxnhG@w#MEpU7BVXsBXTP>?e)pRwvrnGU`D}P#QzYo`t z$-EJn!G(n3D>pDR<=l2MOnM;NNd4kkc%4f(GtNk* ze|&pWuD;JXT+PtEdgj)932!Ta;!1t4d{M_`8S!*T?y6r*hN*gt0*Mhxxa1(Gz_2MN z!)AMh&Mg$m(#f#OZw>!hGU&D%a?5;@%M^V4l%BxVs%9pKa$Okc) zjXbEiV=5ea;65j*16Jz4PO?D2y?IM!!tp#{qwdue5mG_Nd zwXe^Ds{XwRv-URk6@I8J@siq#AUOGyM-v4>c(G`mE_+SBg}o^5Z6tBofB0x&m&Psj z%PnrFfBO49u##}eej$pMKWG@MPTp_-mqIwjPhYmtz!77Fx?cUR zyO99umw>BNOn5mJ5UI7DQXHtNO}bgvm7yCO-ln0hW!PjlO0qiR;iJ>}$w*s9Mn*;R z7&REL^hO!fgo@o&2A#gNbQ3f^ijgUjEsOBXWY|wX&ZYd;Ejd5U2(@uhp7=v>bF>n0j0RjBy3!d1^sps233va{ezjL{JTIYSh~v1vq_R zhPk|*;}A1?$ZcGo7Vc6@uJMM<*rV`Dnu{p0vL@+}NATw$C|edD(QuW8DE4xu-y`k0 zSa_0Mgk#rYji05V2HVx-@gH>qLF~P`vyh=>!U~x5;=t&rP^>T^V*d7~db57TZXDSY%IY6;|=!9CDUT#2#m)i z@PdCZ*;Fj8)@k{>O$*cO4wc%Esx=2{p{4;*K z>xcBtR@j+o6P>8}8vNT{Zsm-@fA(J*#_;vkyh~nr2c*{_@_VLNa_@ceIB$qe>SW@7 z%@|8tktyU2prQhYekYGXf#1eHyw$nKJN)rgX!sOM|9Z4q#r)rnL>ploZ)HjUPmlP> zCNEQMAlhu8!(1iov%lI8)z<5+Qm$nF+gtIHhEkO)ZKOcZ9ch1PSlHm^;SJYkYUANW zbY!jvdGV#gH$@A7z4z_Oat~drqrn;Z-F2q_OS8#L%yE&Hk8cnI;vtK6*Um_q1Q`I2 zg&$L@cSTL^N9B%NgU^)rO$OC9RrI-B=4HEskb6YeDe_@uq^POfg%JmpnHk2iHdKHeMLY>S@P5Uq0SHvlTmhC#!B9 z_w@x7t>6`4OG*+*y$ zTR_Tw@TagrahrfOQ|wE#Y1hZ-(6@4D%&z*M|a$)RbG7a zwvNh!^iS2j#=5$?Dnv)vF?%c?@Wjp@K2?OZA%>$ynnnO zHC5lnVh<%)>E+ADDLNahyn9V%_NcwKM1qnwPU=}2j>zlPzpNB6n{>j#1k#btwx9nf z<&x5MmZGaX#i*a2qHo{E52-ht%kKY4UHH-4{gn!9vPP-Bq8Uy*02#Y0OOo7ASzlzp z`u^y5(W*uH7W$%PSMi&YF88{_fte7Me_ho>V%fJLD@dCyH^D~oW85$_p;wl|3JpQL z&hS;Yi5OH3+ubkBeE9_59UM-`f~nUz4pH`!FC;1N^u!FWv;-yN1DjcbL**`uWh_{} z0T=%`cE^1MIrdgfI*eo~X)DZL>QV?_n&))KfFP; zpw#&@PNbbPfkh_>_5@0os`>pZJSE-kIo3ePdTHJG;NnY@yP8x%N-`(@L#y zE^;4td)>lj{CKr5*82k^xAmk&PKOE|q=EVTqVu2ixwn$6&~2aHEOG2s_GTrKDTUi6 zW^NSoq>V&smF6HrOJ1HCc82ZXk+~L_WfFHqy7}=BuXhX)0^qqGOlb1v%=@U~U|5)G zF9xfw|5M}-7ZidjTjZdw26=ksztp6!s%{@zR^Mk8E|v*n8FV*kFutCQS<8B%88D=1 zn6mVxk5YTLJs`(-hFW)en7WV#559mkyp-2di~Y;f;40+{{RJ+$o~3Q@jfWElMhukG z!k<2{MX@Pa*s#!b_`J=$<2Db+=aJ4k-cVrnD6!b}`153B0PzSJg-G0Y-*(Bos}+w` z-|J>jotc-j)l5>7s>1%UkKno80%i8JP!v){#)V9iNm`8igHEIUGFWrVDkisUOz!S+ zMj-$u@x13? zshWb;YXI0DODy*6bDQ+Mepz#Gl$1XRk*HmoB#WW8ri+)nszTn+SV{b?jE~;Z{Ptj?6wT-5XLQPsn~`!56)6 za2`~I83xpUT3`4U${bXrAj-ZqoHaA^4Ya$JDFC@3*R^p+o-KsN`d+!;j&*d z_(=*K-FTTNggCd-rH5b>O(+7wf+*J3DFj*=099~xb#-bY4sb;GJWEet(4vp=1&}mB zCJI0UD?DIkVWE59t`u6=zK@Yp#!6-vd|Wz&yHY zJdR|hS78~p#OuM%&pm#yY3RMqzHimbQXUESj6#Z}Rwq}uW-Q6IL*hf+37#F*ML%bV ze1+WK9@7DXy!N7cGm8|J_WC*3!KiuY$?Z^HXHrHTVWE1WOtkK3sgB4<$D5Qp1?lx= z5Tf~FT}N5gUM*)6C2$+tve|F39~T^P|0t;i0AL?C3!q|YX{r0ItjBQgtkdoLMjzAg z{trvYno(Aw3zK84fdRm7B1hsqyx;1#y?5D1%4Vf9&;Mxl4R?jT+)gFwWPXOtgj{@L zM-R1(BcLP|QxRw>r60t{hS2}jqHysz{U{`)aaa6R2Pc1WJ&uI&$=7>UzNJ%-WZ7;f zv(@l^Q|HsuBw4_!A+{`@IPX0Mm4fS<$ za%x^rJm26ydlTe5*lrtMhgCX+&ZA@Bx$WnC(C7;un_+0FwuTx{bb%8(Gcyu%ApW90 zWuniUCOP;(s5|dM+=Ys@6AnH;fwI$=58K;>%5<45U1Arv&Mj3%io`|!?kbSi>s-3~ z6x1tTk11t|{rYPG)yV|`8y2Y=VJtkXDe8}%D`kmvok}2B3ttrbDdmF=s^HDoD?M>i zGJ|-Be<|Re34*@FXHe@+lA|40j@TDHvB4)lWR|%gy3Tf*gv$rZNlMR6g!#51WPMeg zHws8V!}oG%TL0l?9{zg${BAdqQaDGss=s5!TMai<){px%r!bS7;9~sK36U-8-uv&r z>x?BNg3T{?MtbiAWe^bVt7+cQnh-d&`FWw%a%wn*Bf*U7NDQWfsr=&j);kz@0gvE* zH2=Zwe!CS*!5Pw5bS0bn0|qdx*2}es-e+G~0kHW!NSMVq+xh1NEp?SIPN>`Xc=UFb z?wI#MALy^f+eQ*xCti+j-3j_^H+J-|7}I%8!0ir=D(dYs$bkisUvfPg5?4=W$Hk&egQbltmM*v)&CK~9a-GWkDm5bnt$PU!@}Kh?W62f| z1wpB}3tvYTzb!BjO3|MXGy5BLW*7-OyuK*~Zp=zE>GeVGIHKq0=L=? zGP!mGDvbay<~jiV4TpeIX2jzW$h+1t{f6B4QiERy_LgMo?TZ`QoJi#MdSG?r(;g zC@CjUYV2PYV&7kAbd2kFjTPQKXY;YlH2Kn$FN!-D`6c0=_lr`Fzi2W=PZ?bq$`~_0 zkC^?u*A7fzF&fY!Udnv}zB3aR$N2l!Q3j43KNV?{s3k7`5q@(g6l&1wt|9CGp;^jE zq`ygbOjqyi&z+Qsf|8zUytDKcmS-Hr60Zy&^M&)diZ_We$5MQ{pC*)>3BqL5@kE65 z`Msf3;&LD&y6n7v<*dy)H!cky2!W~@WQ?i(3SiIIJ%t!{FEKd~({(C)5i#fE1((SS zs_2VS^>Ktk_a(xAhHIsUi-5N0!)0ahf%)__sRiEVI%;q3Fm>hpBzwloseg7){~8;+ z4*tD*Gr4tMQ$4URO0<(G`_-mHHVGPJgJuYAwW`O)48Yz8N%vA{Pu3HDqJF}gHcY}l z8jfSmC`G78$L>lJT_ozBY zhwcVvSK4tLe0aqcSu zN@U;&_xm-LF`K)v#+`W*GZR6h_7i6AXq zc8CEFfL)v}ri-ODSg0VTu_(d(-u-ob@Vh(yCx)=?QSS4zLZIf8Libonp9{X2(yV8L z^lN`xR$=Ox(FL)}f>tDxFA)K(M}AvU6jntXb<%8_Lr0&-gxg2H_*5vGvhKM`uxMla4C65*x^+eh2nkCV5M~q^Kebp zl`*`sj{yA`@jJ2#NQs*_grzgOVRuVq_Se_N*m{NHerf-VX=6x-oiShE)7iWBI5Mf- znWVE=&h04k@YQ>-0yVZJrzf@T&Tb1IwJmEQaul!?ef;W3)4;q=>lydMYPr&T+->nL zhs<~*ebLh2f@5uiF+N8VTc*Mt7Ny;%r+w3}?4R{zrj_p}Wc@4=bgl^Z=^w29pXoRM zM7m_WiH*-qaustYNg3{mGWk2wCa2o=`}6JG1ZxKLn+}hp#!4`G1dHt8*G`aKQKFE1(|^9R(Ti{GJ927MbV%@_Z`yerS#{wQqBD3A#>Q z7az|lD=Sm3_4GZ@?E0Gtd$Y-g_7E*CCcrI*&P87j*JY#qGIG5CMnvD#Lfq5SOpk{+ zD;zAnhAr}~WD0-B{xn!sB;=rc;vbPVLuuC5V*yJz}s%kWBwe|?(l&Xe@5 z@C6bR`11g=(5n!GunGex%QNxH)A`Q?7JY~B{b|b@MX`0nvcrZ7Vdrj@*Q*g`?0@&O zTvPexkG^xs-Y3nUUVgtoh^y`31L7Nvq8&uL=cVSxEhSBgLun(#_&DBy&Ffh4m-F4oJT+YoqrJ(-6VH7yVy6TUc7ObK!{DrPUNz>yX zd(i-IQRtcA694KU;I2Ny>!3LPtqWbdN9DEP;C}tv6@$N?c(!q8LrY@TOf%zQ;J|BW z9eR}$A%(Wz-TfP>q!EvYhA0vE*`UqSiCyhx#TbNwYZDku*|$E5;T}NdmwQcU4>P*hkCBt`+rbWTW*8$r3@V zdH8)Pf%S3C!7+HL?xsu1*A8S6yc7tMYVBYSwPNdlK4G7 zeq7m^HxJ9dod#P5&rNJKE<=bZj`SY<3Z%c1HwFZRvQN6(5~;pO6<=LTN~mNbMbNpn2LLmb_^!1WbaFK> zpwGvuCafT_?w1;<6W%O5T+hY&0I$?bA``v{&x3L*C$y@eeu~QX3 z{09ma>|&z0wyh@=Qn2gP3gu}u2Qh8S>c_RZmCtSo&(yqk^LIMYDXm^`;a?a$H1e8F z=0pt}Qx_y+un6g~Sp9vHb+H_0KH_DdZFBes#ZtgbABZ}AO-2gFXw+1sGw>lfMaE?; z+^lNWQ4p|fp!xj^EArO$MlDB4f}o zDnwc;%})2A%9r#K0qs%lkw*Wb4Ek|$ZA9kdqp2AyFR$LC-ChS;<62Bt+Mb~fi)^`d z0P8O^c9QX_jA9|Oxa}0z7DW_d<)p5;B(sT~(WIWe2V;3ol-=G1T0+lIe>;!M{cluV zQarS+NL%?vuMV`Fh~~~SBHt?rG!pQF-$H)-hVs_mH;Z@6QV@DBR^KxEGI6ApcE>o# zULK1z2vRqEy6h1v8FA%ZS)6CyU1?qx z4a_|U#2$vznhzT6ED|~nVo2m_FLhj}no~fC_*P$>)(N@PgAuwyvuj;_Db6cS8kBG z87yNlMtk;iPbc&|}uiQ#U*YQ=)E(GTppSkl%kL$@ zog~s5QhN8s^bA_{!$4T#{^{kS`CWINc!C>gdIgf1od(|a4U#+oMl4D)HBbsixfv8P;D2~VJm##txnFT?;XqhpeB2R+<< zL5-=Sk@5{`0E5y;>R>q<;*3br@H+Ev@53cVh>}ZJC$c=MGsomF>V+pBf0XWilYUo` zz9?Lrj{lD98k#j^Uqtu-_!-rwA6+fhZ8~sZp0&+%?66Iwf9jigdbaS`tT0TP@WLgf z{N~Ne*2Ux~Ot!Mt2j6HO`N!Www)n4Rc@i2Vk*(g$BJ)n0|#$>3!iL* zQiK=U|4Cl|t9kJXoJ&-6{RM!L;PiBSL4Kj+{rD26{BuZ_(H!V0zJ7+3oI#|3mwnDI zO6$QQjRe#BZe{9IXhbZeWNzb*V_x+oXo6ON~Rr)A=}M2_4n}Rl}{)ATeUCJ z|Ax}t%kDZvm*H>JEWQY;d-D1@%8^7c=xk;^nlVLx;jlcc*KR{Kqa&gBhQZhLxoX|)bf7h`M%>OV>)PP^aWt@1x zdwPnNdFO7+LCRsE8a;oF9w1dX`-~*075yf8H}TcU>9FLx!_B*+T^5gPAjL#MfZX_j z^PM|+_sg*3XuVopv|y1y+JNVaAsg-dWPjC1!x~IT% zz!{bmd9MgcP1Oef^QQjC>_Z~Gmfg17ESH&Da~XwHEU^jSzfMWU*K9P@uPzjGZxx-# z8h&;Oc7OSm+~fNI_L?Z7R5qu>5Ug1FM6-5Ymvn+*dET7jJ&GaNEIqtI%63f^a)42g znlIG>Ms|OtmS@(L6dtz4nJG!*w}}*u$l()MN+4<33lWDcE#!8if!Aj=5^zy|5&om! zUz6iD@t@iHE&MV=r2%_8TSZIT82BU)T#m`iLj~R%H<<`0aZ#5r5Yc&NrSY|Ic=#}D zV7UkO%W+2pRr*y@f#3%Ez#ryx|L-lYNAp|&piPADk&0O+BeTuOtrJ90FW5i<0EBgr zn7N?Gd-bCVH3!A?l|-xcOr9D*L+Wvk>M9#7uU5b8#&=>c)JQ zsaT;VLN)DY8Q`CJHIn1TT zXq_p2`K^D}#Z&Sp9~hv`xG2V3RR2=scc}R3t6zmLk1$b`l};08S}YZC{L;8+wmVv^ z=4ZgQcR#i9qc}#+pjWHe_~A|o$IQ?zybslDa2{F ztvd2$+PT>nN9=ETRoKS1AZ*+b6UfMs-mK#p6Z96%t*@LxxcS@6W$Kkjoj zY=x_xrL$nX=wdnNYt39amHcc_E%?2+E#lA;l6slycx`O4zx(4L*}9jlD<(fL5rkCN z_0l=HH}c)95kx7dwX0`S4?e}d0yGQ^e8MCj@8$O&B)g|5WlBgFQ3bVB9P%NC-?YSX zgH5NT^^@kmuET4789Q9SF=*5N5G6VNFhJ{cn8M$`H(g~~+~mgK!@L6O&alWqW=I5? z;{y&;isXK4^f*r-v?yBG8?wA+aYNzr_;A9CXaizG__I8;bCfn-w3Ko)h1XuqUcy|T z5QiW-8P;zyEC6UQyd`%@Cd7{PvubehJNqjyX^Hm6+x(UPLZUq^5xbNy;6or;8@vtd zDGc&Up_+qbwO$9_w3cFdQd5`dWLLXx9m*VI5ay>X+XS*zC7_p$>9{X&CCAY2HyrmS%(^PAJw)WV1p~SquE@mQ8GI&T%daw4p6O8E}by%ID0X zG6)NM=_*QxzS~a5FJllC%7y?LW=Jv_!0Wc*JdELf$-*8Rnv(Zt+L7QoizmI7m_Mvx zD5S8(;zm84B4+^0fs@|=dS3imam|P?s#HBX(@o{{7Sx)e^qe z$6JJ9sj5B&d|YsC&CNQBx~+dfH}w?%#NgxyH%_niWOz3&mi7HEzLHt`@7qddnfunO z6`XfYoCol}xq1)Ai$B^vBPkt!0KOh5cll(QxjIS>kbENCd=e?ok_7;IT5Lfr%%hgE zE{a^}sH5Wj$x&&;KpPA-~`+<;s$9yhJ}Ao^1B2zhuk0xjGKG;^Q-IsnFS zT{HdT@6xF6sJNS&$h@8Ai@@frU9t=%U*&xjo5jy~+9wt*#`rReta;bF;}m+4?Bd%b zk{|p_&DQKCTWdV2>zmWy-jp0ECwSs7FW*UvEYV9{c0{q=)9t0moksI6Xx+8?Ne6xf zUDd{vc)t*SGdKDr&?Z95=@zXpUN?|r#m}3k+WpK~=h1wk7hke}c3&|1_O;x0G0Jkn z&nO@sL&4y4d{VGNo1``5O~BeW`IzrTb$BdIgioNI&q&|~62Ijl$-Lyf=nx1_Uhb8& zgBxLgYc&Ms0?LNbC{I0IBCe!m8WTJtoMH1}B~fGSEjxU~dyd@Pell9(W~({jjK1ZW z6;AgmNCTNL;##-a-Y$)Xat}ZySOY_W+XL+v`{_L+;-57=zjY`TSp9yb<4gEA`mk#v zkVTtGKyMs{!R*cIzggs+F`j#lE&Sc^*e^ES(8aWmtgxs6bB{HbaoArq`j5G4N_ETG zD82M$$LDV#*(z7>P!sO;?u=R=0sv`u5mRr&RKNG~vP@MKJ><$sS0BE2PtGenyA-nn zLF^(kA5fBO4(_B56HK6;_; z>|(C?p0UFZjWCP8w$$yGHkvJ4^QBOI36!RjjesC>;RM(6{X7P!1vMI+%h=_)P5Aph zwNAPpTgUml<_HFjHX+I9z%WK zB`U@;b@3XzVG|I*kNyZQW;j0CR`L)e@PEZ#_qh|Cftk^0)GW4*VxW9rTSDlL8NSA? zjCi{_qP|QS8f;~Bv|HAC(B0zIU=T~tP5P_s8Kx1Z0V2(C$v}wQpbO;;v0~=ColBOB zzIu0~`>DGwMC;vOWB9hNlY_2(jjcg8he1 zor~&8+C3QZA>bd%k>m|S&wt*Hdi@@P%ttBTnnp=*5Z~d;AaIdhNoAQyeI>>t2W7%J zgW11d(F6n}9tSH|H!2b=RBTP>DEO7Ozvtz)6mkiBY?5%y_)Ru7O5s|S#!T@mSrv~= z`%60>(kr)1^tFNtBVPH2Hru#z*%2UuDi2; zzwn>+kAev!-@khmBwr4sB<$_m$=K2&XbL%}4;FPzF84!Ex4zjL#;N)_9@14x1bY0# z1bpBZ*2zAau*YlB+ziq2eisB0Zk%JEiAbc0Kx+f3tI)bWw5^@??nCD*SVkNMZhz*} zh1kP$&jz;__*dsWbU}Agcwn(D?VGc0>m;%F?vS8X;ouWE)|Ux$1HFn9HJfgpDh10Q zFf8ndNnFw(YSnbG&D%SaT2X4AoZVm~^?p~)DqFJ+42T&~R-jghP+DS#U;`*CZszyv zQ8nXcU$025&`~YztueE|o<`(JQR;=6fkTdR6%|r>&o8L7o8;o3epJv6w0#u@;uLuC zVNg*l%Br!PsuG0|f2V(q6ZRVXZpiwB9S1yH77BJ!J(ftYO@@-i7Z$0>YKluw;I@ z5;7fga@i6#jtJ=HNmM_F%A(fN{dLeKz2jN_GLDyhC5S+s7G^#koZ|wul<`XL zG`Hs$4wYzyy-`hfGk4-id45j&f5^UDH^fLbkfRNvFu%(`rZusJ5jD4!%1x(-SBbRq z8o$_6C7emj!$}V0XupIST5=t&OWbB8fz_7L4gS0|Y})P9yX7@Z!N#1xK+m4m@nU3@ zhvT46NS;W>rzLi^_D3%a@Kt;tP72u0{W0;cZQGc>kN)#c>{FvFMvl;7hs>`DR3Yz= z*9U%xPLpnN7T)hT-Y?U2LPEM%BMmXE*#RXS0=Pdt7gt%VL0WM-8X^#`v7OD zL%ky}rEpS}WIn8dw%(~{7}3GR+Mm@X<645i{2F4!DgG>tU@&Ux%sslQ)YFlHt$Lb$ zrmxzPiR>;U7%?d}GXlylayoIOdG==ID^3RNKIo3ezsWBQ*i9z#8bWZ`#M$LG3BjRx?Hp0&>}yv9-A@)$)$Q+ePQQnk_`f z=(5W+Vu#}qFes0hR93klbM_~w1K04$t0aFuj>zCwPY*Hsv2_uDqV2+uek=2$sz*D` zxGGGCAjZgpM#T?BDX0JlZ9+r9&?&3@igu=OPqX-J=V?dri`EZ|wM@=;{wm7{`}$E;gXlVxG zK?zh|$}xXm`@)D-ww#tYGmxg#(y9?EgxEnRkejvi{N**V(7(!F%7&KJ7@J-qF2H~6 zM|q}Ht8KgN{Z6euXyH%Q_Him{zs{Cr(UmmA6Fb^)%24$4RtbZnnV>FL)YM%^dDYO8+x%bLyR&a5s^R#n?lSwO~>nsZ}q8+PURNk+B##grM=&v#IJ@B zl%LT3!I$(PrnZ5pw~~hfELQ$b(HP3CaeOp51XzL@+k;^$9-Bk^ZJY>I1j5C)ToVs8 z;#5Z&(y%M_iu()7IJ3px($cb!MSmiUO{34^`SG!eziNU@g}`Lu*uQ0nGk=GOp*Vy{ z^?wvt!Z?Al6JQ^?cY%CX1MQ`8M31owN?0zDvz5RP#zbZF#&5c)SdfybDZgC}ps?GdB_r zl*ij=H6AU^D~{vk`0#Kqdx*t9cdvC}^0?%IPp5Zzx7=EkKkm6NPT%tUsMs+qsj3ep zzJ8Q$_Px7wC(aLKP5N!h20KW$i^BY68Bg=j65(d0K`*$}WLM7_94kyQ8HU6mJHd$2 z++O~?RwaKUcz^!5?{h!8MffR-PEz7{DHQ)C(j=zBASV5__TeMid9mn4|K(y(kdwW=eX|SNRpGrJ?*igLyqy2T^66osM8AIKE32tq^umHS>w(%= z{Gy73?83*r&zV)vwm%(Q)ii8cL|bp`C zaNy*@LSdFCXr$CP6{5!sgV-7~)(ub%SC==~GHS{U{q;qfdAyD`o-e)2gNpAk@SnEa zwb-lkr9mjW|D#+hhKD4+72Y5807I7!E8YhM*V2Uob4%iOty9GjxY#dgkr}Crcm!;4 zrZa+k_4KF?yjh0RTSo1X)9G_6@X$NV<#GpGxXMa7lNCX%(EY{ktktgBqR4eaUYu9S zQ?|xmnWZ&(l??(ew*UGMB(wKCnB(WYaB-89H!6SVOIC5V@INCDf(m#~=w(XO^MVOJ zVH&hCX!PR6bT1lsJ#8wz!Rya+O)vJk^R-{rGC_92KT&OqI9{H6(@ihh25r{_X+P%W zF>hY^-R4qQaK6aGM8rlMBU}BiKMok--zzgDD7)z(=>x2cpg&9a(FuL#IG)muGmeyi zhpxUb9`kK){|*mMt;L053sfoeFcmk45+B<~c{8Uq-8-E>VrAt>eSeWS&;Z+V=_odr z=zZLs^0!Se9g+q-YZ3Qa9-V%P7=HGB>ysP+A*ete9&|4+d84_HG8dhUWCQ3evNUiH z4Hq8eTg4~l=6*KV-R9lYnrgMIp77g>&af7zp6jktOPw{?6uw-JYp^X7nabUhh-o?e zt<@1QDrLB66wQMjocNG%SiuZvU%7OT{$<@H`3?NnTbD;?-GN`7_d8Dg(u(IFQg36F z5DEKC$iLuWa_-e4_D@gh7p-#iR3bF-2h*9<>Aq`(Ceoc9c*m2Oa*KcwoLRRx^T zt@0ElGaxOch$QL31limfw#N|aFluo(_b1XBVmwRo-CJ@iY-b;-{avIb0%NN8J-cb8 zcGD6oqrR$iKKXf|es>k+s(07(xos^+o#O5wbpHOYX?iFAtp}^5h$+E20VrTd0;7;B zqG9<8mbgRKb5sq>urAEkDlmANv{u;7vnOBKbBSuN(l+~@j&odmOjS*KQxdP|ribypS}M4 zGl3b*numk%IKGZvnw8m}J1cWYu&fVpLGX`aYv>*o!+nykwtX0T(>ySThkx@DAMK+G z)`L~;`+M=>`?cRU1JU9u#V<1CPrO!A79_wC+s#v}x-FOUuJc!)jUDMY%gm|*XTasA zD?R-5NI$Ywuna*+#g7itU~Z|mb*`$94qYNg4|uaRC%1O53dgRJ$l_DN{0Iluod?qT z4KFZ_dTazP+I^S;pNr}W&<=DK7Oq~X=UQD*XU`%27R+(EJec3oUd&6DhMJa$lW$pB z{biSr9F>*lN_TK_itNBv;GSuzQPMRvb#w1&SnFjRKUVRRds#s{;it@Crbn&(ob8D2 z`PFbE&bJlvs7LYLI(cE;Tqd0o@sECDznuBd{u#$w^Bz>>&TsxKo-$K_f{Ov=2kLZE z?&ON6A+IXIRv=-}`uNtev2HQhM_tpRegnm>DF)TsFSTPcz4gR}jjOi00t;SOof-$! zhyL&Y)l|BXQAO8qb7;g%^LRF}r&bZ|yOD4VjwHpHRv_oAvwar}1fNxXT1Lz@ zue+_g&w%RWKIogMqR|06ad~E(%JrX{WS9h1yjur4 zEoiZvyQ@*aF4e8ClYSxJe=%fi!YS4wEXrlY9XWiIR%UoA}YdyOi zdD3Xz?GZuhqrd9+X6*`{|L=U0g&>C^e=cisw{9gvEM1PBNvZvqw;1sx{&0PV9jszC z)?;_-5ak#knkp1kI{rDv*hN?QlBcG>p) zX7AKl57;gou}E5uZ46qqIEgFvAW%oSac<2|irCcdOk_=}3xD||L>y>EyM65MsHJ-L z?pK?K>CU>Qa_WoO;)cSSfW&Mz%DCDT_{F4i{u*8zn;ZUaKr0|y3D$~d#mQ3FX|#zR=d1s~ zpV*UWlC?>lrjB=6aJ(>DSX89_l%{;F&!%ywXrZuhm+Ggd!;7l!Wi@Pojk&@Cvk2|| zKx#8+-_n-bwN69Su>D+R%9A|=<4`lm%(!u*M0K}J%D!ACKA!Q^1z`ZeQis-k?IZ1t z<`D(=oCs0LTJGf-*EVlu&=YT8y zKEOMX_0xPmo`TBlG2ugQ7%!h#QsP*sz#`ZP9MINM)S>J@>+(PwcSip3BI4gwtaDS$ ztANPg`JNgN)z#*wj(apJx5WA5L7sWzC_6V@efLzyqj;G80|X86Ol;6^30E<})VdF4 z>*sROUeKylYyT+W#0>#t0th+N7gg&75 z#FQ2eX{4f@|8TOD`(d9>tNqiAuc_Xvn1t4l?KUcYpQ|jiNDPvuf@2Q^Ro|101 zewm|IMWHV1~>Tp-bG&O&`N?vq4$lG?Dcj=%&v-Sbz z0lU-wn!5n(J`*y(9*g6}iipkLLLb2v^4_D6Q!hl1W(j@Y=FcmW;E+WSH$Gn2Uv^)5 zW20N|t6rE@-{Q8fTUctFuav`j;vzL?kJsxox^_X^d&<{xtH`MoA~3zL$7FXbZ~iiJ zPx9}4&Z{U_ld%*fWn`&DMxG6NP$wd4?ikGtsW|XazGw;?)B=ym}YRg><|}; zN{Xx?Z{P$eH2-|bOR(8%sp}0ZuhH0DDh>iq`8rG~4_#+Cocc1wZN7?sGbjq<`yv-u z?U3UD0YeFjl0eHj|^*yN?S7Pn2~tavf<}@ajN#PC zES6%Ly>T^9cF@u%hce?FE{`s2`Zv~u;0o-Yh-I!;qv{3s?3+IkaSeZm3TkxT%N5tS zMHZH}8tB3a`n7a9kHt@zfA^4t`yX-lnjW>Py|Z+LtEP$-eM~!uc-u$*u`)tRSJw|c zL}0rCMw#o|qZ1eq_A8r8O+zD`PShM=f7kFtL8(ijz=S<_&j*b&!)RKq2sG`a3$`iS zAR3-&uK3*}JpA3ltohmVG&)yNh8S(_4#?K>a6zBMlfS8bUg^8kv;$pg=>xiZem0Kt z){u3lTd4*1Srq%~Iu8Yh&XajZZ*3~G{x+jkodbrPbAW$%BdESJnoX73T1YnNDbB-( zQZV~R5BBU160qS)A7NNgZ9%entNFZ{X{HN`xr!4`S5|78T}TflB?vo77PzzMHvt{Z zL70VwxG)_XBr>bU=g?F!EAKlBA2XTB_vlm-@QeBzI8nJ(IC^B2TN>Tw#HH;UzyvT- zifNema*(P2@-d8$h}SJN_-%+F>RJjoWH%974m=hzr5m5(cG3bA(*tp}~U zO@8^Y_u4*8%lADtoCz;=PgDD7k@?2*-{s|0z&&KOd9^-mHM`;m-EPF;wWj?Bi9!-& zdQ??aHGjF)ex%Yt0Q0AetLZ5cfUGf$|Yxp3!|E=Z7G zxB1CIyNIWI3AfXLi4!uJEI5&IbfVe>vhLDzNvECN_~^9om^9XauIqLz68~!%2=8IZ zKPkANP+84M>cg$dB%=L0uc)razAR?<_RobO50BH#+%P_xuX)mXfK$S1EZe&3clT$9 zbG|N86NKQ&2qht6j^l;3Iwkxx$nxK+(7o7D@r$ja5!uN^{wY*KbX-*EdZ4=)ztf*E z0jW-2 zSIi6;b&S^9zSyM!EsRS+rY|_~;q@qT`poGWOKL6}^v#bYpYODEAFdb5n1l}`rXu$d zN-DT(?$1KAvtwhMSEsMGTU2(ABCW?8>7FinVulR{n;1)7uqJK^*F7B}qW&m5q?SKQ z0;GW9(ppf3n~jZ)D%f$IOS|O7ly#Yi`&zH5Z~8yjPo0tM1vtosj|FBd{|L%rS#{?znr7aImwc=p64;0^{ncM&2=b^$XS-^UHp}y=GnlRss=To}J%&o#9HN zvzqbB(W}jFqP#pG4}7c!hh}69MFTmriBebVJ3o6QMLff&Wuq1nNu+?hc1}JpD@(P; zk1~rh4$P^VA-LOPSGoGR**YtY6!*I@`FLNbC^2x#s~~L(McL(VSGWxl$Y$stwzZy@ zxXxp>ihFu9`uVy+&St_JsNqMacWrPE{>0VB>GI*1EMIb20IA7e>b%EgRQZiWJp1)t zTNkP6&czD;&JtWqrs-ArMo1$rp0q%r)2la!*@lLb+ZC3Fv(vv*WweW1VwYE6@be_q zV7&ULCy@FvG&QYXEtlE7e$a=h=+!?%{xAXVc)k1V*WZM%t#qf(ztw;C|-h@zK(0g8rk%h)Ca2qehaiKo@xSanJYfIJgp2AIZ+0`t0 z3*P{zci5=Tdye*uj9mktJdw~h!ZBgS)M0KRuKt6Q-iHg#WE<{JYkR{uH) z8WtBoG9^7110pOHjwOv0L=iU97Y`jf+({85j|I0V*Mm;i%hS_oiPk6l=rK7eMg3Oob~iGC8DoqQ!9R>o=k54VZ1vi z?yc)l%0VSX_!#+_gmrmtF5|wrfhS6FC+g;`ORoPq+$LHTVS!t=EIzKVJ7Sr#s6;8}23$h?+xx z6Ripp)Y0i7zHEx(iNBGtx8GzWLABrP?T1NYPTzO9J<&YAj-?iK*~>|3-)%T-xqZOC zb;iF9I;+OL>j+*!*YNNBV96b$huj{`f2s^m8e76?k01rWVS%Iq)FV$a_R-vA{&>-J z__f0(T*;@_1%7T0ocbgUj=y2u0Q&OD+anm^APdMbkvfW;MMfZ?cCwY{hpe=q{OJlL zAWAOVxtfmJNrhUpYQdPTY{<>IPd0BH9d|ylaU)lkBbxA__iv{jrKMtZzoI^;ff^+p89|b ze7`T2dA6?1031kY5#2v2b%2H0U#=!iP(t{8w%Y)KYH6E-1nkM4QJDs#?oxcW)bJ1H zbpI?`?1YQeW*>?j*;1UuX-5KJLx(vcQ~u$_&`WiLnruf^9FJ%$p%!Fts6qHi`d_1_ z9|oU-V$1lh{DZ+7lwS7pK~EwuM#3JBql20({r%?(X1<*k?xBAM6u+i~ zTrIu2S!|53UOPW0zO7OKEm)lYvV;FiZEbD(x|jc^=;Afa-Py>Pg;_1G;*J}TM2$Q> zxye;S*r0oRdiLT<#ZrmMQ-Cl*vWVubvKQ}!%gYdVT%1cie@R&)8>$A2PmMuV(xFQx zGjAfTUQ4=G#)Kn+;w`{EyevYDn=-DmW22*0@nnc_1pFP^a|(s>$!=j^BV*%F|FyjJ z+pw`z@ir<@rG_H*_c4n;EY!a@fXo6z74gy_UjTLvlIArEte!BcR#F&L#B)m{0EH10 z(e{zA>^y_eFm*}@8<0Z2e*J1lPj7;CQB3-P$UrS$>x+py8YY%Eb9EJvwXXq}jf>6c zda_fGZDSUufQ^ubI`)eFRcNp$8wx$bXPVEhF%^R%)V;P;6|>@3Q|P4orzV z@eP;?!>ZDX4IJsA&W2|T_h!l5B?!BieXGxC3L!BDBsVOf1o5{k20f%cDB|cLR7yrW z^nGf}_;{#F6@5Hdtux;>LS%ABs%>zM*$o-s^K=X`#TgF4o913R#5#fmYyQ7wK z6dUsXUZSZJ`kW+!c|@(j7? z11H-JqO0#9SBAe0p7X}&0rNmhsfy#2+jLc{3` zYzYW^wNV;62)(@GtC$kB1f*O8fC`J@XPa51Fg>t@U?Yk|&5JL2cO(gCnFzbbmwMgi zs}(bdy2vWd0>+H-{)05?72i;=_$|ejA+|HL$Cxy;TMKRqNtr;2cW0%>+~>nChtI6p z5v%*pX>fwxX5kN6w@tPX_2haIV!ESsV#n+T!@kl=_+S0uo_>~#&P(yD2V^5FgUYIA zTxH*K@=1}DA;pxK-26Tzwfy10GeDX8E|7vmMOGYPLrAm@k|M$qe~+Djw2KjZY`!J- zvsnPBnJJ{8=p!$W8Yh>oI7om1gAqED983+dPJ8=9JWT~!F`uKdj?&c4)oKhp3?;3Y zI*=Bh&IShRJWG^<`X55n|C~vk@Ul<{n z9iIM_gU=d3R%k~Q5=@qJwuT6f$ z%zTIIO+6A5c>?GUI(%uUf}$zr!1R|;w>~&weC|KrZjoYuhkV-;;>4S@vT$~G<_NQ_ z;sidJfW+O0d$>o-c6WCh`S)fN-CL>Q%l~3SeAH0OWDq`tbF_n&JhsGO0kybBoI@P5 z4^-TDN)fcWpSDdN{wZ@+kCGl?pxI(qaDqMA5|?{2mQdKKw_E)wj13;m)~kR}*#J2{ zp_91FXO(s=$9;XnjIr&4NF#=|!As0w`h*XoT0xcrpjSWwxxw7?lZgC1RpH+owcsgu zH$O~0JIKWR&L_YIVN45&w1VD_Wp2LtVSos#j5)wA?;&el2NY1T6NgdY+Q4EafO33}GY?$UA{X4^hcX0r9``^LxCwY`P)^=|rgGUGOcv9h zEuoz`pAB`urk_-RL%<;nU?M0<>(l4WWDhqO9i>T|W2pT&FtiQ?Ez=AM{!Y0yjt^j7&or7@Fo(@8$~nm2&uJ z{!HfMr6xrKTJui(Fe9Faq^Orvu+35J&|D*e&|r3wm2r^_oTFo{AVcM+s3BpFP$Eyr zu+S(xLaoJ#_8ixv+Y>29WL5c&c?rQqlg56krGWK^=h4rz8+3&|%U!F5M7LrJ6Zu$V(Xp5HMd zuNrFK%8O&p|LQ@_CMuQYOm5tonwrj97Jj-I{7$??_vEY*^qn~4ziO%110qCorBKlN zD;M_}FhEU18s4augP^KnR8F3L%LKi5ENIR7|1;^HYq9POon_npi%Eldq6~n& zU|Ob`eG()fEZmcN!KT`T1Ry+h!U-K(4}KZea}OV>ZF7D6Q0|m#K}v-elLJelXJNzq zi)}Iewi^W0}=k$Tn^o+e>3_cU%w>!U}VMH0nz!dKu_(F$>=- z;7Ppe;Z*xGRPFCJ9O1$E1t?}O4}`0Zr8d84~XvArKBF`f+B!RDfPxD z`A%rp%x*(iroh=9xB~3ZvO1M4^XW;&7kvi_84ZTmpYo1`JHn`3g-UWEF&=7o=+}mJ zd(m+N@rPLfQ0cc;rRFjE-YtZiTd6->@4%?wThIJO1>RHjqMM~A{gs_gtAn9IM;Y^~ z0yy@zTBKM7!Pa#~Z0H3f^0Cxc{>!M(2tr02TTsEr<(?IdzU6|d8D6rD7>hfo6|}+F z#y^m1pG%jBE!+QX0f_7)gvd=96O!$jp3A$Y!5axT6B94Z;r}Jx6Ae#1kn7hr%4{%f zn8}dhxr4uXGzP&|z-%3i<{&Pv>xm7Hp0!jG^2gM72LTex1!v*M1!25xjVbhT8G_ zWi_|kiAYG?EB=xK!8PUj_}Dvtu}3_h4rmA;QR~t}3mM?!UuW7)d=_7R@RiXt$`!PQ zfRSJ5mtIB?AKV?>iI+i|Q4f;KNB1K`*0GAUx8J;`L;w7kiL7Wvxd#*;WpM=|tR+Q< z7Xvg=Kk2SH_TBniU4^+`ilU<$Th9c70eQpCF7+U>*=mH%N{V!7iGk3;b_E8v&xH{QWrCUyvk= z2@{C~{}g?R3R8cQYE*&7cz_UO)tH!{SJg-UlS7Pzh8Wc>q5mdpIrxl(&e+6IFDD(5 z%_02WM*UZ4#zNWUfIAmN9L{KH@F3Qa9zHAT?iVof`v#pU;?NeqH)tIEvzCPdg!1?Q zn5sjl9QDnFh~$hYELp11E~uqdl4T1IpXsmn2=-FF7$Jq+z!e8(S~T=y(nHPi@-pfT z^U^QY&=u;r140PwF?|QpNmHqCK}%Z4k9EM}z&rtB(HwC~hV~37g2?6L?8=0~lF+mp zo_2DibBwAh6U|_P91^yXxY)kOh@Z3s&zn9dPe?(fwL`IjeloDUQ0PxqK9Pm8^s zN4Uy1;}alCrf3Wihij~u$TTz|*Z*eQ_rH)1umNm1KdH|jyhFQ_lBxhRF)?v&zP4E* z=)>0zfc8w?xLKjmpo&_~aCrwu?#uIGyph-t8$S3BRDoN=15)Qc@>SE73W{)x`}Y2U z(+qsgmA2_IgoT<~@`zIUj7R`#fu}IDWlrBqM{<^MID;wWKxTO)3;UYpJD9GIOrs&| zc5-__jYmDxv6vXm)~gU z;DM4Sp8xz2NWHtgJw14QD}9VQ(>QND>6?;bc#|{(ZRD1JWjGM7`PnSJSlz zGX1^(_j|UPG3GMYVn!~RC}~mH+#=;#=*H4bH$*PUmQ`$C}@A81R&dpezo+AxCmzCm{R`Y zG7%y4WM3a16B?1BdegSyYF;~7Q!DhjT)&dl{tBc)YMuUSw%sH+(d!~tMG2OeD*du$-H($D=S<+Ko_oi0=v1h z{~UUyt?%#!OH5a#^6AbpUlt*m*tqFrZU}o;LEw^i>L4X}>N90R0>{gxwpVL4;&|We z-2n2d*4H|kbDpTyE@0~oxJMSwe16jMM$C702{HMsFqw`$yl~qaUO&*5W3dpEJu}=` zmXKSbOT|=+SanJ)OZ9s-%mUUp_D1kI3Ex`YOwPlXzGAYov672s6%9Cq;bw|<*enYZ z&#rXvq}{-A#>oSRIdu%5t9CXuTyDl1Dh0~;(~*;tv#GJn=CQ+K2D^zsZX$4)%q?5a z9Uw$xrKw8&s+YSVe)+hHA$H@Nk$pr~pi#&0%~%bmDL&Q-Z)a#`pPm+FT)j&iDWf-N z$h5yrc>A^T0LFVwc6T&`@meYCmmmDD*rSNDlb|zrD40Vf-+2npOEDy{4_t9}JR3_> z<)K)a4YBvm<1W6I-$*^9W-A<1nhRN}3>%Zr`vh+jh{tuu2~Sd>gikPeK#^1D^I!@m z3mfgrnt*imdIkoT!-&(V`@4DnE{2FT5r}I+@a4Y#vM1!hp1U3_AGMpY6z;bWzN%)q z)F;xwR@nb+iKzu)C!Q0)jlE) zzlRPT^m|l5)>qPzkI#~!Ym!^!@9%Mm9wNn-;oEwBsqJzRn{0)7&lX+5u;#!nlVdjG zu7cAb<%)t66VN12iIo!iX-qz{H%MC29X(rBQZl;cyV`ZtZ6Ut7RoW=BNBmSLQvwTW z18z|vSL=?z{m-7FLE#e zo~|PM$x+HNLzlk3OdQRK9giVxn{Wb=u8W-9eV&>9{yVYCO<>Lc^dzZ~PeHXzy}YZE zw@AD$cBOs;0C@j4`g7VE#x2udPIqwosd7~Lr6c6!Va1U}mNAM6VAM?LLU(I{5l&Y6&7($wCW~3{Ch_?yPbm!3QvXatOTeFj6trwnA zern05=Ijhm8P~XVAMO3_>`hCn+H3=&tUK-IfwTx-Etu9<@YWP7?4 zvLNeSi+gaMnDb&`e%|uJAM0*2ZnKdV>WLax7xOg~<-cU2!7EX)RoF&&H~30A%FWIt zXZ|E-p-pMbz(Cp_l4@`jMGb4WO|0XjmLY{8_Lqew9>aEP+FNV| zZx(`8gD&_&wrG0Ox8~;Nll}NQlVB`v?W;Ej0u!2J&R%Z2!W5neKzwxRAECfL=u@b_ zmDIut9E3@0S^MEOynW#n5t%E~S$_|3nMkthB0^t#7T%Kdj1*)LePqZAEna=r4Q7nRQ<#X-ours5m0R5 ziJd*}Nl=#r3+0_FpBqI5hSb)F;ppK#XSRY)aqKf>=!mOv@DpP}H>!cwoK*vAMjW!k z*UNetn;~nX4fr&F%q}g%QM-yHUtWHoLZ5fo_ppw}|v#OhpmF^<=dCA4vUPEz1iVn z{uuuN-isZT`z_CdM>#cq+}t?_i+yey>@SQ%6FFWYYLrfxyw)q~pY& z5*!1vgfy$DlMO*q82Tl#kr1(iiQFM{JDv-<5;q4u%W)W;W7~T?+SwnDAfU^D_pgW!vvUuZi)b@uQRdd2_gQ zmD@)!-y9k7t;7NnPrsp6qMfL38d2SdL-IhzYaRSm=NFup9pzZDL`!O9p zC5OgH@%8p#>tqSI4qXIAXN(igOe4(x(&c5XdXcre#)tCzi2-EY@xo~4De9B7v8i$Z z@5ee{<^~YXq3OA5%z; zox;4lyn#l`DRVNlzH%AlOsXVfVshoeosNWkri1>KLtP(q{q1r5kxa*DvD#!>Y)@kdB za?%kq5J4L23v_j;E-~CrT1Xu*4$QU0(B`#2-!_PAZXDVGX=j~t9M2u6+?<5Mx(#jBd+IXV4A!j~#vok36 zQ<3nzqB_sWKfQZlkR*C?a})~Nhzc}%i7dTT&?yRJE+p$YUA#{lD6JXzhqf!plaIAn zUYOkjJnkDfY!YPv5_?Ke=dJY9*&WYVpoo)u!% zU}HT@KGp2GCO_&19_PEQ(eIlG4~&U7SavE~k+F#-KF0^NNgO_l?@r@Z_;RnHyA z%0*OKCz{vdo9us_F>rX|ELcr}I+4oZorHH{?8wbXZJoMQXGYwjXfIvEbK8Fu?D#{Q znU78ndYb-Nv(Xc}D&6g+Hl3-uK&S~XUKVmApqV0Qgii-(>}2kSx8XaEp@{}Mrab`5 z?sRVg4D{!^Vsfbe-545VTd&#_ea|vFYg|{NImE&+Yfm4c{bj_l_ zaV468$Ex{Y`V_{#!*WGnx7Z9s0^iRMo>Oql`pi_6nh|_96@O+lXn$iC# z2^C$$pl`U<-6+8xILan6fN79)_Gv83jiTql;ak-@B*jh;Pl;6pB|Qq}Fnf#sF7p^} zPjHIOxs&||cB79E5nRw46M7s8@0yL`6-TN;Im;C)m@C1C1aks6a=fRD`9M80DGkSP z8$;1oj?3;{v(W4hjq6mZ4Lu|$DRYGDUeDR8e#0 zaV^_hj;7Hz%lc#ZR_a685uz6|=49+DFe07Thk&VXWWjG!u7>`VSz$_V=86M8&~Gt4 z?54|y4I{qt!}Y=^(iV?1h+gzkDBU+bPFs;&%&&x^D#Vfx-TZH+17M~bH8Ue}>qi5T zs_t8TLl&O%p67DZw}DD7T!323fQ2oLy28e!|D!PDwx=I(-@^Hz;t9D*q6QK&FUgGT zS@{Vs@CQ1UbI8E}sjUxu1;KYytqi8NUzZfw2k}-<8ze+xqg+r930lPBqKb1D6Vl`T ze~sE%H(}aaE}8vCp^iygUJ45>4(!;=1U#tbx)R`GEx{mvW!;Qp%glU<#ONLtT5KwP z@PUt}W-l9@xpD3iLdLp-3GM?0ej+nwmiL#&L9=~}^oVLy;s;|{a3&?4RbY>_g0xVx zxh)%kKC-8a-3PdT399qJ&#b@?X=~P##seyIKe6>F^w`|{fLr$zYz62%)G6f9wZEJ) zqufqJI%R8`&ia-Ue%Q?2MA`CWETn}ySLLj=;RHbc!f*uP{jI_}vu8Y@2En#@t6q#y zT%k1{Z|hG6-0T!C@-->+hPQamUT9g0@ef)lNi2%+tGJr_ zF3-hq$*$6CbQACy7`j|sWwQO;Al>&NlV2X3k&(Imuf#t~J%Ll}x&=EtF_8(^m!eHJ z1Qjg{du4ht2wS-8M}HaH5m`g?aP%6r;8I0m&*=cR4%{hd*ko- z*I4PqAq|4ifzH~L%Kq$^pP9wqTZtFTUGzbH_U8}tqSe&n*6g7&Xseu7X5mdn*b%{OSGD^QZH zl4ND{(2ma&?gJ^imb=}35f&fCxTi^HFsXAa1$u~l!tAlz;u_lksj@~%hV~1vNDypXo^<8{NblXZkp;|TqKq5BBKbCvlRD|HIUg2@9*VJB}RJ|i;%v` z#y2>{lh>wCbBORc7Nj{sAwNV-meQZYRVfjy124+k46Z!Q6sBjd@&{iRioQ;pyW2AL zYAhuZB@0h4rC|_`h~CfpoZ5k zcGAHdxWQ+5&Q^wYwU6HA0Mr50$ALX=vyLZx3sW#mrmMRk{Xn*M(~iE!w^4vMWQ=to zGwHG7{upiK6a4}monKg(Fu`hExpL))3v=1e;(?RtLIFlRpO0QasMs)#Hklcn9(UoJ(|2rn>CfvG@b#ruOvLXS z1EpnEpYXfId&Siwgpa{F*lYFFDJxZx3Y3tP48ntnzo+iqIJxEeaDGC)j)5 zX=B4Sk#`LiQ=W<)-7|2f?CDSQI?G5QkF}>x)bHi{E!Oxi);-4`FYjKj^X=p3*osGw zJb%1@_%eCCqDZ%3M^( z#mmKhA|yWiclb@f-O|!UD0+^YY$5e?ZO@B5tLaHEpEIlO!el|8. + **/ + diff --git a/script/admin.js b/script/admin.js new file mode 100644 index 0000000..903c7d2 --- /dev/null +++ b/script/admin.js @@ -0,0 +1,115 @@ +/** + * /script/admin.js + * @version 1.3 + * @desc Javascript file for the admin submenu + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function adminImportUsers(){ + //hide all status messages if any shown + $("#statuses").children().each(function(){ + $(this).css("display", "none"); + }); + + //get file + var file=$("#csvFile")[0].files[0]; + + //if greater than 10MB don't upload + if(file.size>10000000){ + $("#status_fileTooBig").slideDown(); + return; + } + else{ + $("#status_uploading").slideDown(function(){ + //generate form data + var data=new FormData(); + data.append("import_file", file); + + //run ajax upload request + $.ajax({ + url: "./subs/loader.php?load=admin&backend", + type: "POST", + data: data, + cache: false, + contentType: false, + processData: false, + xhr: function(){ + var myXHR=$.ajaxSettings.xhr(); + if(myXHR.upload){ + myXHR.upload.addEventListener("progress", function(e){ + if(e.lengthComputable){ + //calculate percent with 1 decimal precision + var percent=Math.round(e.loaded*100/e.total*10)/10; + percent=percent.toString()+"%"; + + //upload progressbar + $("#uploadStatus").children("div").css("width", percent); + $("#uploadStatus").children("div").children("span").text(percent); + } + }); + } + return myXHR; + }, + success: function(response){ + $("#status_uploading").slideUp(); + + //something went wrong during the upload + if(response=="error"){ + loadMessages(); + $("#status_uploadError").slideDown(); + } + else{ + //everything ok so far + $("#status_processing").slideDown(); + + //start listener that checks processing status (run every 500ms) + var progressChecker=setInterval(function(){ + $.ajax({ + url: "./subs/loader.php", + type: "GET", + data: {"load":"admin", "backend":true, "import_progress":response}, + success: function(response2){ + //update progressbar + $("#processStatus").children("div").css("width", response2); + $("#processStatus").children("div").children("span").text(response2); + } + }); + }, 500); + + //start processing of file with ajax + $.ajax({ + url: "./subs/loader.php?load=admin&backend", + type: "POST", + data: {"process_file":response}, + success: function(response2){ + //import complete + $("#status_processing").slideUp(); + $("#status_done").slideDown(); + + //stop progress checker + clearInterval(progressChecker); + } + }); + } + } + }); + }); + } +} diff --git a/script/classes.js b/script/classes.js new file mode 100644 index 0000000..e91764c --- /dev/null +++ b/script/classes.js @@ -0,0 +1,63 @@ +/** + * /script/classes.js + * @version 1.0 + * @desc Javascript file for the classes submenu + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function classesLoadList(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=classes&backend&list", + type: "GET", + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function classesFilterApply(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=classes&backend&list", + type: "POST", + data: $("#dd_filter_form").serialize(), + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function classesFilterReset(){ + $("#dd_filter_form")[0].reset(); + classesLoadList(); +} + +/* + * RUN + */ +//autoload list +classesLoadList(); diff --git a/script/contests.js b/script/contests.js new file mode 100644 index 0000000..064ac52 --- /dev/null +++ b/script/contests.js @@ -0,0 +1,130 @@ +/** + * /script/contests.js + * @version 1.0 + * @desc Javascript file for the contests submenu + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function contestsLoadList(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php", + data: {"load":"contests", "backend":true, "list":$("#schoolyear").val()}, + type: "GET", + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function contestsFilterApply(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=contests&backend&list="+$("#schoolyear").val(), + type: "POST", + data: $("#dd_filter_form").serialize(), + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function contestsFilterReset(){ + $("#dd_filter_form")[0].reset(); + contestsLoadList(); +} + +function contestsNew(){ + $.ajax({ + url: "./subs/loader.php?load=contests&backend", + type: "POST", + data: $("#dd_new_form").serialize(), + success: function(){ + $("#dd_new_form")[0].reset(); + loadMessages(); + contestsLoadList(); + } + }); +} + +function contestsEdit(id){ + $.ajax({ + url: "./subs/loader.php?load=contests&backend&getdata="+id, + type: "GET", + success: function(response){ + var data=JSON.parse(response); + $("#dd_edit_form input[name=edit]").val(data.id); + $("#dd_edit_form input[name=name_1]").val(data.name_1); + $("#dd_edit_form input[name=name_2]").val(data.name_2); + $("#dd_edit_form select[name=subject] option[value="+data.subject+"]").attr("selected", true); + $("#dd_edit_form textarea[name=description]").text(data.description); + $("#dd_edit_form input[name=ministry_support][value="+data.ministry_support+"]").attr("checked", true); + $("#dd_edit_form input[name=ministry_place]").val(data.ministry_place); + $("#dd_edit").slideDown(); + smoothScroll("#dd_edit"); + } + }); +} + +function contestsSubmitEdit(){ + $.ajax({ + url: "./subs/loader.php?load=contests&backend", + type: "POST", + data: $("#dd_edit_form").serialize(), + success: function(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); + loadMessages(); + contestsLoadList(); + } + }); +} + +function contestsCancelEdit(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); +} + +function contestsDelete(id, elem){ + if(confirm($("#contestsDeleteConfirm").text())){ + $.ajax({ + url: "./subs/loader.php?load=contests&backend", + type: "POST", + data: {"delete": id}, + success: function(){ + loadMessages(); + footableRemoveElem(elem); + } + }); + } +} + +/* + * RUN + */ +contestsLoadList(); diff --git a/script/js.php b/script/js.php new file mode 100644 index 0000000..bbb1844 --- /dev/null +++ b/script/js.php @@ -0,0 +1,29 @@ +. + **/ + +if(isset($_GET['load'])){ + header("Content-type: application/javascript"); + readfile($_GET['load'].".js", true); +} diff --git a/script/main.js b/script/main.js new file mode 100644 index 0000000..497eded --- /dev/null +++ b/script/main.js @@ -0,0 +1,203 @@ +/** + * /script/main.js + * @version 1.4 + * @desc Main javascript file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +var Site=""; + +function disposeMessageOverlay(){ + $("#messageOverlay").html(""); + $("#messageOverlay").fadeOut(); +} + +function showMessage(html){ + $("#messageOverlay").html(html); + $("#messageOverlay").fadeIn(); + setTimeout(function(){ + disposeMessageOverlay() + }, 5000); +} + +function loadMessages(){ + $.ajax({ + url: "./subs/msg.php", + type: "GET", + success: function(response){ + if(response!=""){ + showMessage(response); + } + } + }); +} + +function smoothScroll(selector){ + $('html, body').stop().animate({ + scrollTop: $(selector).offset().top + }, 500); +} + +function goTo(site, pop=false){ + Site=site; + //slide up + $("#content").slideUp(function(){ + //load part + $.ajax({ + url: "./subs/loader.php", + type: "GET", + data: {"load": site}, + success: function(response){ + $("#content").html(response); + if(!pop){ + window.history.pushState({"site": site}, null, "./"+site); + } + }, + complete: function(){ + $("#content").slideDown(function(){ + //load script + $.getScript("./script/js.php?load="+site); + //prepare site + prepareSite(); + }); + } + }); + }); +} + +function prepareSite(){ + //smooth scroll + $('a[href^="#"]').on('click', function(event) { + var target = $(this.getAttribute('href')); + if( target.length ) { + event.preventDefault(); + $('html, body').stop().animate({ + scrollTop: target.offset().top + }, 500); + } + }); + + //disable ajax forms submit + $(".ajaxform").submit(function(e){ + e.preventDefault(); //prevent classic submit + }); +} + +function toggleDropdown(content, img){ + if($(content).css("display")=="none"){ + $(content).slideDown(); + $(img).attr("src", "./res/minus.png"); + } + else{ + $(content).slideUp(); + $(img).attr("src", "./res/plus.png"); + } +} + +function footableRemoveElem(elem){ + //delete from table + var button=$(elem); + var current=button.parents("tr:first"); + var remove; + //if we in the detail row or not + if(current.hasClass("footable-detail-row")){ + //get the previous row and add it with the current row to be removed later + remove = current.add(current.prev()); + } + else{ + //get the next row after the current row and check if it's a detail row + var next = current.next(); + //if the next row is a detail row or not + if (next.hasClass("footable-detail-row")){ + //get the next row and add it with the current row to be removed later + remove = current.add(next); + } + else{ + //we can't find a detail row so just remove the current row later + remove = current; + } + } + + remove.fadeOut(function(){ + remove.remove(); + }); +} + +function search(field, list){ + $(list).children("li").each(function(){ + if($(this).children("label").text().toLowerCase().indexOf($(field).val().toLowerCase())!=-1){ + $(this).css("display", "block"); + } + else{ + $(this).css("display", "none"); + } + }); +} + +function toggleRequiredFormElement(container, to=-1){ + if(to==-1){ + if($(container).css("display")=="none"){ + $(container).children("input").attr("required", true); + $(container).slideDown(); + } + else{ + $(container).slideUp(); + $(container).children("input").attr("required", false); + } + } + else{ + if(to==1){ + $(container).children("input").attr("required", true); + $(container).slideDown(); + } + else{ + $(container).slideUp(); + $(container).children("input").attr("required", false); + } + } +} + +/* + * RUN + */ +jQuery(function($){ + //get correct site + Site=window.location.pathname.substring(window.location.pathname.lastIndexOf("/")+1); + $.getScript("./script/js.php?load="+Site); + prepareSite(); + + //ajax loading functions + $(document).ajaxStart(function(){ + $("#loadingOverlay").css("display", "block"); + }); + $(document).ajaxComplete(function(){ + $("#loadingOverlay").css("display", "none"); + }); + + //go back in history + window.addEventListener("popstate", function(e){ + if(e.state!=null){ + goTo(e.state["site"], true); + } + else{ + goTo("", true); + } + }); +}); diff --git a/script/phases.js b/script/phases.js new file mode 100644 index 0000000..d8eca14 --- /dev/null +++ b/script/phases.js @@ -0,0 +1,125 @@ +/** + * /script/phases.js + * @version 1.0 + * @desc phases javascript file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function phasesLoadList(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=phases&backend&list", + type: "GET", + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function phasesFilterApply(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=phases&backend&list", + type: "POST", + data: $("#dd_filter_form").serialize(), + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function phasesFilterReset(){ + $("#dd_filter_form")[0].reset(); + phasesLoadList(); +} + +function phasesNew(){ + $.ajax({ + url: "./subs/loader.php?load=phases&backend", + type: "POST", + data: $("#dd_new_form").serialize(), + success: function(){ + $("#dd_new_form")[0].reset(); + loadMessages(); + phasesLoadList(); + } + }); +} + +function phasesEdit(id){ + $.ajax({ + url: "./subs/loader.php?load=phases&backend&getdata="+id, + type: "GET", + success: function(response){ + var data=JSON.parse(response); + $("#dd_edit_form input[name=edit]").val(data.id); + $("#dd_edit_form input[name=name_1]").val(data.name_1); + $("#dd_edit_form input[name=name_2]").val(data.name_2); + $("#dd_edit").slideDown(); + smoothScroll("#dd_edit"); + } + }); +} + +function phasesSubmitEdit(){ + $.ajax({ + url: "./subs/loader.php?load=phases&backend", + type: "POST", + data: $("#dd_edit_form").serialize(), + success: function(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); + loadMessages(); + phasesLoadList(); + } + }); +} + +function phasesCancelEdit(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); +} + +function phasesDelete(id, elem){ + if(confirm($("#phasesDeleteConfirm").text())){ + $.ajax({ + url: "./subs/loader.php?load=phases&backend", + type: "POST", + data: {"delete": id}, + success: function(){ + loadMessages(); + footableRemoveElem(elem); + } + }); + } +} + +/* + * RUN + */ +phasesLoadList(); diff --git a/script/profile.js b/script/profile.js new file mode 100644 index 0000000..82d6242 --- /dev/null +++ b/script/profile.js @@ -0,0 +1,35 @@ +/** + * /script/profile.js + * @version 1.0 + * @desc Profile javascript file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function profileSetNewPassword(){ + $.ajax({ + url: "./subs/loader.php?load=profile&backend", + type: "POST", + data: $("#editpasswd").serialize(), + success: function(){ + loadMessages(); + $("#editpasswd")[0].reset(); + } + }); +} diff --git a/script/register.js b/script/register.js new file mode 100644 index 0000000..a616be2 --- /dev/null +++ b/script/register.js @@ -0,0 +1,190 @@ +/** + * /script/register.js + * @version 1.4 + * @desc Register javascript file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function registerLoadList(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php", + data: {"load":"register", "backend":true, "list":$("#schoolyear").val()}, + type: "GET", + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function registerFilterApply(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=register&backend&list", + type: "POST", + data: $("#dd_filter_form").serialize(), + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function registerFilterReset(){ + $("#dd_filter_form")[0].reset(); + registerLoadList(); +} + +function registerEdit(id){ + $.ajax({ + url: "./subs/loader.php?load=register&backend&getdata="+id, + type: "GET", + success: function(response){ + var data=JSON.parse(response); + $("#dd_edit_form input[name=edit]").val(id); + $("#dd_edit_form input[name=student][value="+data.student+"]").attr("checked", true); + $("#dd_edit_form input[name=contest][value="+data.contest+"]").attr("checked", true); + $("#dd_edit_form input[name=phase][value="+data.phase+"]").attr("checked", true); + $("#dd_edit_form input[name=teacher][value="+data.teacher+"]").attr("checked", true); + $("#dd_edit_form input[name=place][value="+(data.place<0?data.place:0)+"]").attr("checked", true); + if(data.place>0){ + $("#dd_edit_form input[name=place_c]").val(data.place); + $("#registerCustomPlaceEdit").slideDown(); + } + $("#dd_edit_form input[name=place_c]").attr("required", data.place>0); + $("#dd_edit_form textarea[name=mention]").text(data.mention); + $("#dd_edit").slideDown(); + smoothScroll("#dd_edit"); + } + }); +} + +function registerSubmitEdit(){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: $("#dd_edit_form").serialize(), + success: function(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); + loadMessages(); + registerLoadList(); + } + }); +} + +function registerCancelEdit(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); +} + +function registerDelete(id, elem){ + if(confirm($("#registerDeleteConfirm").text())){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: {"delete": id}, + success: function(){ + loadMessages(); + footableRemoveElem(elem); + } + }); + } +} + +function registerNew(){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: $("#dd_new_form").serialize(), + success: function(response){ + var data=JSON.parse(response); + $("#newSubmitPrevContent tbody").html(data.prev); + $("#dd_newSubmit_form input[name=newSubmit]").val(JSON.stringify(data.params)); + $("#newSubmitPrevContent").footable(); + $("#dd_new_form")[0].reset(); + $("#dd_newSubmit").slideDown(); + smoothScroll("#dd_newSubmit"); + } + }); +} + +function registerNewSubmit(){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: $("#dd_newSubmit_form").serialize(), + success: function(){ + $("#dd_newSubmit").slideUp(function(){ + $("#dd_newSubmit_form")[0].reset(); + $("#newSubmitPrevContent tbody").html(""); + loadMessages(); + registerLoadList(); + }); + } + }); +} + +function registerNewCancel(){ + $("#dd_newSubmit").slideUp(function(){ + $("#dd_newSubmit_form")[0].reset(); + $("#newSubmitPrevContent tbody").html(""); + }); +} + +function registerExport(){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: $("#dd_export_form").serialize(), + beforeSend: function(){ + $("#export_progress").css("display", "block"); + }, + success: function(response){ + $("#download_file").val(response); + $("#export_progress").css("display", "none"); + $("#export_ready").css("display", "block"); + } + }); +} + +function registerExportDownload(){ + $("#export_ready").css("display", "none"); + window.location="./subs/loader.php?load=register&backend&expdownload="+$("#download_file").val(); + loadMessages(); +} + +/* + * RUN + */ +registerLoadList(); +$("#dd_new_form input[name=place]").click(function(){ + toggleRequiredFormElement("#registerCustomPlaceNew", $("#dd_new_form input[name=place][value=0]").is(":checked")); +}); +$("#dd_edit_form input[name=place]").click(function(){ + toggleRequiredFormElement("#registerCustomPlaceEdit", $("#dd_edit_form input[name=place][value=0]").is(":checked")); +}); diff --git a/script/subjects.js b/script/subjects.js new file mode 100644 index 0000000..655b0e2 --- /dev/null +++ b/script/subjects.js @@ -0,0 +1,125 @@ +/** + * /script/subjects.js + * @version 1.3 + * @desc Subjects javascript file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function subjectsLoadList(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=subjects&backend&list", + type: "GET", + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function subjectsFilterApply(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=subjects&backend&list", + type: "POST", + data: $("#dd_filter_form").serialize(), + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function subjectsFilterReset(){ + $("#dd_filter_form")[0].reset(); + subjectsLoadList(); +} + +function subjectsNew(){ + $.ajax({ + url: "./subs/loader.php?load=subjects&backend", + type: "POST", + data: $("#dd_new_form").serialize(), + success: function(){ + $("#dd_new_form")[0].reset(); + loadMessages(); + subjectsLoadList(); + } + }); +} + +function subjectsEdit(id){ + $.ajax({ + url: "./subs/loader.php?load=subjects&backend&getdata="+id, + type: "GET", + success: function(response){ + var data=JSON.parse(response); + $("#dd_edit_form input[name=edit]").val(data.id); + $("#dd_edit_form input[name=name_1]").val(data.name_1); + $("#dd_edit_form input[name=name_2]").val(data.name_2); + $("#dd_edit").slideDown(); + smoothScroll("#dd_edit"); + } + }); +} + +function subjectsSubmitEdit(){ + $.ajax({ + url: "./subs/loader.php?load=subjects&backend", + type: "POST", + data: $("#dd_edit_form").serialize(), + success: function(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); + loadMessages(); + subjectsLoadList(); + } + }); +} + +function subjectsCancelEdit(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); +} + +function subjectsDelete(id, elem){ + if(confirm($("#subjectsDeleteConfirm").text())){ + $.ajax({ + url: "./subs/loader.php?load=subjects&backend", + type: "POST", + data: {"delete": id}, + success: function(){ + loadMessages(); + footableRemoveElem(elem); + } + }); + } +} + +/* + * RUN + */ +subjectsLoadList(); diff --git a/script/users.js b/script/users.js new file mode 100644 index 0000000..75127d3 --- /dev/null +++ b/script/users.js @@ -0,0 +1,131 @@ +/** + * /script/users.js + * @version 2.1 + * @desc javascript for users submenu + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function usersLoadList(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=users&backend&list", + type: "GET", + success: function(response){ + $("#list").html(response); + $(".table").footable(); + $("#list").slideDown(); + } + }); + }); +} + +function usersFilterApply(){ + $("#list").slideUp(function(){ + $.ajax({ + url: "./subs/loader.php?load=users&backend&list", + type: "POST", + data: $("#dd_filter_form").serialize(), + success: function(response){ + $("#list").html(response); + $("#list").slideDown(function(){ + $(".table").footable(); + }); + } + }); + }); +} + +function usersFilterReset(){ + $("#dd_filter_form")[0].reset(); + loadList(); +} + +function usersNew(){ + $.ajax({ + url: "./subs/loader.php?load=users&backend", + type: "POST", + data: $("#dd_new_form").serialize(), + success: function(){ + $("#dd_new_form")[0].reset(); + loadMessages(); + usersLoadList(); + } + }); +} + +function usersEdit(id){ + $.ajax({ + url: "./subs/loader.php?load=users&backend&getdata="+id, + type: "GET", + success: function(response){ + var data=JSON.parse(response); + $("#dd_edit_form input[name=edit]").val(data.id); + $("#dd_edit_form input[name=username]").val(data.username); + $("#dd_edit_form input[name=fullname]").val(data.fullname); + $("#dd_edit_form input[name=accesslevel]").val(data.accesslevel); + $("#dd_edit_form input[name=class]").val(data.class); + $("#dd_edit_form input[name=password]").val(""); + $("#dd_edit_form input[name=perm_message]").prop("checked", data.perm_message==1); + $("#dd_edit").slideDown(); + smoothScroll("#dd_edit"); + } + }); +} + +function usersSubmitEdit(){ + $.ajax({ + url: "./subs/loader.php?load=users&backend", + type: "POST", + data: $("#dd_edit_form").serialize(), + success: function(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); + loadMessages(); + usersLoadList(); + } + }); +} + +function usersCancelEdit(){ + $("#dd_edit").slideUp(function(){ + $("#dd_edit_form")[0].reset(); + }); +} + +function usersDelete(id, elem){ + if(confirm($("#usersDeleteConfirm").text())){ + $.ajax({ + url: "./subs/loader.php?load=users&backend", + type: "POST", + data: {"delete": id}, + success: function(){ + loadMessages(); + footableRemoveElem(elem); + } + }); + } +} + +/* + * RUN + */ +//autoload list +usersLoadList(); diff --git a/script/wizard.js b/script/wizard.js new file mode 100644 index 0000000..c8667af --- /dev/null +++ b/script/wizard.js @@ -0,0 +1,86 @@ +/** + * /script/wizard.js + * @version 1.0 + * @desc javascript for the input wizard + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +function wizardNextStep(elem){ + $(elem).parent("div").slideUp(); + $(elem).parent("div").parent("div").next().next().children("div").eq(1).slideDown(function(){ + smoothScroll($(elem).parent("div").parent("div").next().next()); + }); +} + +function wizardPrevStep(elem){ + $(elem).parent("div").slideUp(); + $(elem).parent("div").parent("div").prev().prev().children("div").eq(1).slideDown(function(){ + smoothScroll($(elem).parent("div").parent("div").prev().prev()); + }); +} + +function wizardSelectMeAsTeacher(){ + $("#wizform input[name=teacher][value="+$("#wizardCurrentId").text()+"]").attr("checked", true); +} + +function wizardLoadPrevRecords(elem){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: $("#wizform").serialize(), + success: function(response){ + var data=JSON.parse(response); + $("input[name=recordParams]").val(JSON.stringify(data.params)); + $("#wizardPrevContent tbody").html(data.prev); + $("#wizardPrevContent").footable(); + $(elem).parent("div").slideUp(); + $("#step7_content").slideDown(function(){ + smoothScroll("#step7_content"); + }); + } + }); +} + +function wizardSubmitRecord(){ + $.ajax({ + url: "./subs/loader.php?load=register&backend", + type: "POST", + data: {"newSubmit": $("input[name=recordParams]").val()}, + success: function(){ + loadMessages(); + $(".dropdown.content").slideUp(function(){ + $("#wizform")[0].reset(); + $("#step1_content").slideDown(function(){ + smoothScroll("#step1"); + }); + }); + } + }); +} + +/* + * RUN + */ +//load register scriptbase +$.getScript("./script/js.php?load=register"); +//handler for custom place +$("#wizform input[name=place]").click(function(){ + toggleRequiredFormElement("#registerCustomPlaceNew", $("#wizform input[name=place][value=0]").is(":checked")); +}); diff --git a/style/mobile.css b/style/mobile.css new file mode 100644 index 0000000..b0293b6 --- /dev/null +++ b/style/mobile.css @@ -0,0 +1,236 @@ +/** + * /style/mobile.php + * @version 1.0 + * @desc style file for mobile all small screen devices + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +h1.title{ + text-align: left; + background: rgba(31,73,125,0.8); + color: rgb(255,255,255); + margin: auto; + padding: 0.3em 1em; +} + +button{ + background: rgba(31,73,125,0.8); + color: rgb(255,255,255); + padding: 1em; + border-radius: 0.5em; + width: 100%; + font-size: 2em; +} +button:hover{ + background: rgba(31,73,125,1); +} + +form{ + width: 100%; +} +fieldset{ + border: 5px solid rgba(31,73,125,0.8); + background: rgb(220,220,220); + border-radius: 1em; + padding: 2em; + width: 90%; + text-align: left; +} +fieldset legend{ + background: rgba(31,73,125,0.8); + color: rgb(255,255,255); + padding: 0.3em; + font-size: 2em; + border-radius: 0.5em; + box-shadow: 0 0 0 5px rgb(220,220,220); + text-align:left; + margin-left: 10%; +} + +footer{ + background: rgb(200,200,200); + border-radius: 1em; + width: 90%; + margin: auto; + font-size: 0.8em; + text-align: center; + padding: 0.3em; +} + +hr.placeholder{ + border: none; + height: 30px; +} + +input{ + border-radius: 5px; + padding: 0.5em; + border: 1px solid solid rgba(31,73,125,0.8); + font-size: 1.5em; +} +textarea{ + border-radius: 5px; + padding: 0.5em; + border: 1px solid solid rgba(31,73,125,0.8); + font-size: 1.5em; +} +select{ + border-radius: 5px; + padding: 0.5em; + border: 1px solid solid rgba(31,73,125,0.8); + font-size: 1.5em; + max-width: 90%; +} + +div.message{ + width: 90%; + padding: 1em; + border: 2px solid rgb(60, 255, 60); + border-radius: 10px; + margin: auto; + margin-top: 1.5em; + margin-bottom: 1.5em; + background: rgba(0, 255, 0, 0.5); + text-align: center; + font-size: 1.5em; +} +div.message.error{ + border: 2px solid rgb(255, 60, 60); + background: rgba(255, 0, 0, 0.5); +} + +ul.menu{ + list-style:none; + margin: 0; + background: rgba(31,73,125,0.8); + display: flex; + justify-content: stretch; + flex-wrap: wrap; + font-size: 2em; +} +ul.menu li{ + display: block; + padding: 1em; + color: rgb(255,255,255); +} +ul.menu li:hover{ + background: rgba(31,73,125,1); +} +ul.menu a{ + text-decoration: none; + width: 100%; +} + +td{ + vertical-align: top; +} + +span.password{ + background: rgb(0,0,0); + font-family: Courier New; +} +span.password:hover{ + background: inherit; +} + +table:not(.table) td{ + display: block; +} + +label{ + font-size: 1.5em; +} + +table{ + font-size: 1.5em; +} + +p{ + font-size: 1.5em; +} + +div.overlay{ + position: fixed; + display: none; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; +} +div.overlay.loading{ + background: rgba(0,0,0,0.7); +} +div.overlay.loading img{ + position: fixed; + max-width: 50%; + max-height: 50%; + top: 30%; + left: 40%; + padding: 1em; +} +div.overlay.messages{ + height: 30%; +} + +/* the world's fanciest checkbox */ +div.checkbox{ + width: 7em; + height: 2.5em; + background: rgb(140, 140, 140); + border-radius: 1.5em; + position: relative; +} +div.checkbox:before{ + content: 'On'; + position: absolute; + top: 30%; + left: 15%; + color: rgb(35, 200, 40); + font-size: 1em; +} +div.checkbox:after{ + content: 'Off'; + position: absolute; + top: 30%; + right: 15%; + color: rgb(15, 15, 15); + font-size: 1em; +} +div.checkbox label{ + display: block; + width: 45%; + height: 55%; + border-radius: 1.5em; + transition: 0.5s; + cursor: pointer; + position: absolute; + top: 22.5%; + left: 10%; + z-index: 1; + background: rgb(220, 220, 220); +} +div.checkbox input[type=checkbox]:checked + label{ + left: 45%; + background: rgb(35, 200, 40); +} +div.checkbox input[type=checkbox]{ + display: none; +} diff --git a/style/style.css b/style/style.css new file mode 100644 index 0000000..10a3af7 --- /dev/null +++ b/style/style.css @@ -0,0 +1,301 @@ +/** + * /style/style.css + * @version 1.5 + * @desc Main style file + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +button{ + background: rgba(38,143,84,0.8); + color: rgb(255,255,255); + padding: 1em; + border-radius: 0.5em; +} +button:hover{ + background: rgba(38,143,84,1); +} + +fieldset{ + border: 5px solid rgba(38,143,84,1); + background: rgb(220,220,220); + border-radius: 1em; + padding: 2em; + width: 60%; + text-align: left; +} +fieldset legend{ + background: rgba(38,143,84,1); + color: rgb(255,255,255); + padding: 0.3em; + font-size: 2em; + border-radius: 0.5em; + box-shadow: 0 0 0 5px rgb(220,220,220); + text-align:left; + margin-left: 10%; +} + +footer{ + background: rgb(200,200,200); + border-radius: 1em; + width: 80%; + margin: auto; + font-size: 0.8em; + text-align: center; + padding: 0.3em; +} + +hr.placeholder{ + border: none; + height: 30px; +} + +input{ + border-radius: 5px; + padding: 0.5em; + border: 1px solid solid rgba(38,143,84,0.8); +} +textarea{ + border-radius: 5px; + padding: 0.5em; + border: 1px solid solid rgba(38,143,84,0.8); +} +select{ + border-radius: 5px; + padding: 0.5em; + border: 1px solid solid rgba(38,143,84,0.8); +} + +div.message{ + width: 50%; + padding: 1em; + border: 2px solid rgb(60, 255, 60); + border-radius: 10px; + margin: auto; + margin-top: 1.5em; + margin-bottom: 1.5em; + background: rgba(0, 255, 0, 0.8); + text-align: center; +} +div.message.error{ + border: 2px solid rgb(255, 60, 60); + background: rgba(255, 0, 0, 0.8); +} + +ul.menu{ + list-style: none; + margin: 0; + background: rgba(38,143,84,0.8); + display: flex; + justify-content: space-around; + padding: 0; +} +ul.menu li{ + display: block; + padding: 1em; + color: rgb(255,255,255); +} +ul.menu li:hover{ + background: rgba(38,143,84,1); +} +ul.menu a{ + text-decoration: none; + cursor: default; +} + +td{ + vertical-align: top; +} + +span.password{ + background: rgb(0,0,0); + font-family: Courier New; +} +span.password:hover{ + background: inherit; +} + +div.overlay{ + position: fixed; + display: none; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; +} +div.overlay.messages{ + height: 30%; +} +div.overlay.loading{ + width: 15%; + height: 10%; + background: rgba(38,143,84,1); + text-align: center; + font-size: 1.2em; + left: auto; + right: 0; + margin: 1em; + border-radius: 10px; +} +div.overlay.loading img{ + max-height: 1em; + position: relative; + top: 40%; +} +div.overlay.loading span{ + position: relative; + top: 40%; +} + +div.content{ + width: 95%; + margin: auto; +} + +img.icon{ + max-height: 1.2em; + margin-right: 0.5em; +} + +.center{ + text-align: center; + margin: auto; +} +.selfcenter{ + margin: auto; +} + +/* the world's fanciest checkbox */ +div.checkbox{ + width: 7em; + height: 2.5em; + background: rgb(140, 140, 140); + border-radius: 1.5em; + position: relative; +} +div.checkbox:before{ + content: 'On'; + position: absolute; + top: 30%; + left: 15%; + color: rgb(35, 200, 40); + font-size: 1em; +} +div.checkbox:after{ + content: 'Off'; + position: absolute; + top: 30%; + right: 15%; + color: rgb(15, 15, 15); + font-size: 1em; +} +div.checkbox label{ + display: block; + width: 45%; + height: 55%; + border-radius: 1.5em; + transition: 0.5s; + cursor: pointer; + position: absolute; + top: 22.5%; + left: 10%; + z-index: 1; + background: rgb(220, 220, 220); +} +div.checkbox input[type=checkbox]:checked + label{ + left: 45%; + background: rgb(35, 200, 40); +} +div.checkbox input[type=checkbox]{ + display: none; +} + +/* dropdown div */ +div.dropdown{ + border: 2px solid rgba(38,143,84,1); + background: rgb(220,220,220); + border-radius: 10px; + overflow: auto; + padding: 0; +} +div.dropdown.header{ + border: none; + border-radius: 0; + height: 1.5em; + background: rgba(34,119,227,0.7); + padding: 0.3em; + font-size: 1.5em; +} +div.dropdown.content{ + border: none; + padding: 1em; + display: none; +} +div.dropdown.header a{ + text-decoration: none; + color: rgb(255,255,255); + cursor: pointer; +} + +div.searchbox{ + text-decoration: none; +} +div.searchbox input[type=text]{ + background-image: url("../res/search.png"); + background-size: contain; + background-repeat: no-repeat; + margin-bottom: 1em; + padding-left: 2.5em; +} +div.searchbox ul{ + list-style: none; + padding: 0; + margin: 0; + height: 15em; + overflow-y: scroll; +} +div.searchbox li{ + color: rgb(0,0,0); + margin-left: 0.5em; +} + +span.number{ + background: rgba(127,127,127,0.8); + border-radius: 50%; + margin-right: 1em; + padding: 0.2em; + padding-left: 0.5em; + padding-right: 0.5em; +} + +div.progressbar{ + background: rgba(100, 100, 100, 1); + border-radius: 2em; +} +div.progressbar div{ + background: rgb(0, 180, 245); + border-radius: 2em; + color: rgb(255, 255, 255); + padding-top: 0.5em; + padding-bottom: 0.2em; +} +div.progressbar span{ + margin: 1em; +} diff --git a/subs/loader.php b/subs/loader.php new file mode 100644 index 0000000..16ef4b1 --- /dev/null +++ b/subs/loader.php @@ -0,0 +1,62 @@ +. + **/ + +if(!isset($BOM)){ + require_once("../config/config.php"); +} + +function loadPart($view, $backend=false){ + global $lm, $lang, $db, $BOM, $config, $schoolyear; + if($lm->validateLogin()){ + if($view!="" && $view!="users" && $view!="classes" && $view!="subjects" && $view!="contests" && $view!="phases" && $view!="register" && $view!="wizard" && $view!="profile" && $view!="admin"){ + functions::setError(404); + $view=""; + } + + if(($view=="users") && $_SESSION['accesslevel']<3){ + functions::setError(401); + $view=""; + } + else if(($view=="classes" || $view=="subjects" || $view=="contests" || $view=="phases" || $view=="register" || $view=="wizard") && $_SESSION['accesslevel']<1){ + functions::setError(401); + $view=""; + } + else if(($view=="admin") && $_SESSION['accesslevel']<4){ + functions::setError(401); + $view=""; + } + } + + if($backend){ + include("part/".$view."_backend.php"); + } + else{ + include("part/".$view.".php"); + } +} + +if(isset($_GET['load'])){ + loadPart($_GET['load'], isset($_GET['backend'])); +} diff --git a/subs/msg.php b/subs/msg.php new file mode 100644 index 0000000..57a8e42 --- /dev/null +++ b/subs/msg.php @@ -0,0 +1,43 @@ +. + **/ + +if(!isset($BOM)){ + require_once("../config/config.php"); +} + +if(functions::isMessage()){ + foreach(functions::getMessageArray() as $m){ + echo "

"; + echo "
"; + } +} +if(functions::isError()){ + foreach(functions::getErrorArray() as $m){ + echo "

".$lang['error'][$m]."

"; + echo "
"; + } +} + +?> diff --git a/subs/part/.htaccess b/subs/part/.htaccess new file mode 100644 index 0000000..7d3aaf1 --- /dev/null +++ b/subs/part/.htaccess @@ -0,0 +1,2 @@ +Order allow,deny +Deny from all \ No newline at end of file diff --git a/subs/part/.php b/subs/part/.php new file mode 100644 index 0000000..3a6c04b --- /dev/null +++ b/subs/part/.php @@ -0,0 +1,29 @@ +. + **/ +?> + +
+

+
diff --git a/subs/part/_backend.php b/subs/part/_backend.php new file mode 100644 index 0000000..a7a703d --- /dev/null +++ b/subs/part/_backend.php @@ -0,0 +1,24 @@ +. + **/ diff --git a/subs/part/admin.php b/subs/part/admin.php new file mode 100644 index 0000000..54f2da0 --- /dev/null +++ b/subs/part/admin.php @@ -0,0 +1,109 @@ +. + **/ + +?> + +
+ + +
+ + +
diff --git a/subs/part/admin_backend.php b/subs/part/admin_backend.php new file mode 100644 index 0000000..897bfdf --- /dev/null +++ b/subs/part/admin_backend.php @@ -0,0 +1,181 @@ +. + **/ + +try{ + + //import/step1: upload file to server + if(isset($_FILES['import_file'])){ + //time limit of 2 min + set_time_limit(120); + + //get file size and compare it if JS has sucked + $size=$_FILES['import_file']['size']; + + if($size>10000000){ + functions::setError(11); + echo "error"; + } + else{ + //get temp file to hold it + $target=tempnam(sys_get_temp_dir(), "resmanImp_"); + + //move file + if(!move_uploaded_file($_FILES['import_file']['tmp_name'], $target)){ + //something's wrong here + functions::setError(13); + echo "error"; + } + else{ + //count lines + $lines=0; + $file=fopen($target, "r"); + while(!feof($file)){ + $line=fgets($file); + $lines++; + } + fclose($file); + + //prepare session to track everything + $progress=array("total_lines"=>$lines, "lines_processed"=>0); + if(isset($_SESSION['progress'])){ + $_SESSION['progress'][$target]=$progress; + } + else{ + $_SESSION['progress']=array(); + $_SESSION['progress'][$target]=$progress; + } + + //echo file name (which is process identifier as well) to be able to track it + echo $target; + } + } + } + + //import/step2: start file procession + if(isset($_POST['process_file'])){ + //insert multiple records with the same query + $rowPerQuery=40; + + //set a looong time limit (20 min) + set_time_limit(1200); + + //don't stop execution even if the connection drops + ignore_user_abort(true); + + //open file + $file=fopen($_POST['process_file'], "r"); + + //a simple counter + $rowProcessed=0; + + //build query string + $querystr="INSERT INTO users (username, fullname, accesslevel, class, password) VALUES"; + for($i=0; $i<$rowPerQuery; $i++){ + $querystr.=" (?, ?, ?, ?, ?), "; + } + $querystr=rtrim($querystr, ", "); + + //buffer to hold before insert + $buffer=array(); + $rowBuffered=0; + + //prepare SQL query + $sql=$db->prepare($querystr); + + while($data=fgetcsv($file, 1000, ",")){ + if(count($data)!=5){ + continue; + } + else{ + //add row to buffer + array_push($buffer, $data[0], $data[1], $data[2], $data[3], $data[4]); + $rowBuffered++; + + //if needed, execute query + if($rowBuffered==$rowPerQuery){ + $sql->execute($buffer); + $buffer=array(); + $rowBuffered=0; + } + } + + //update counter + $rowProcessed++; + + //update status and close session to release write protect + if(session_status()==PHP_SESSION_NONE){ + session_start(); + } + $_SESSION['progress'][$_POST['process_file']]['lines_processed']=$rowProcessed; + session_write_close(); + } + + //if something remained in buffer + if($rowBuffered!=0){ + //build new query for the remained records + $querystr="INSERT INTO users (username, fullname, accesslevel, class, password) VALUES"; + for($i=0; $i<$rowBuffered; $i++){ + $querystr.=" (?, ?, ?, ?, ?), "; + } + $querystr=rtrim($querystr, ", "); + + $sql=$db->prepare($querystr); + + //execute everything left over + $sql->execute($buffer); + } + + //close, delete file and die (I leave the session there intentionally. I hope nobody will spam the session with 1 record imports lol) + fclose($file); + unlink($_POST['process_file']); + + //some bogus stuff that actually fixes the ERR_RESPONSE_HEADERS_TOO_BIG error, because PHP wants to send a ton of set-cookie headers + header_remove("Set-Cookie"); + + die(); + } + + //import/step3: check status + if(isset($_GET['import_progress'])){ + if(!isset($_SESSION['progress'][$_GET['import_progress']])){ + //if it does not exist, echo 0 + echo "error"; + } + else{ + $status=$_SESSION['progress'][$_GET['import_progress']]; + + //calculate percent + $percent=round($status['lines_processed']*100/$status['total_lines'], 1); + + //print percent + echo $percent."%"; + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/classes.php b/subs/part/classes.php new file mode 100644 index 0000000..5075368 --- /dev/null +++ b/subs/part/classes.php @@ -0,0 +1,56 @@ +. + **/ + +?> + +
+ + + + +
+
+ +
+ +
+
diff --git a/subs/part/classes_backend.php b/subs/part/classes_backend.php new file mode 100644 index 0000000..315ab7e --- /dev/null +++ b/subs/part/classes_backend.php @@ -0,0 +1,96 @@ +. + **/ + +try{ + + if(isset($_GET['list'])){ + $filter="WHERE id<>1 and class<>''"; + $filter_array=array(); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + if($_POST['f_search']!=""){ + $filter.=" and (class LIKE ? or username LIKE ? or fullname LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + } + + $sql=$db->prepare("SELECT fullname, accesslevel, class FROM users ".$filter." ORDER BY class ASC, accesslevel DESC, fullname ASC"); + $sql->execute($filter_array); + + //echo table(s) + $first=true; + $rid=0; + $curClass=""; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + if($curClass!=$row['class']){ + $curClass=$row['class']; + if(!$first){ + echo " + + +
+ "; + } + if($first){ + $first=false; + } + $rid=1; + echo " +
+

".$curClass."

+
+
+ + + + + + + "; + } + echo " + + + + + + "; + $rid++; + } + echo " + +
".$lang['rowid']." + ".$lang['fullname']." + ".$lang['role']." +
".$rid."".$row['fullname']."".($row['accesslevel']>0?$lang['headteacher']:$lang['student'])."
+ "; + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/contests.php b/subs/part/contests.php new file mode 100644 index 0000000..7bda5db --- /dev/null +++ b/subs/part/contests.php @@ -0,0 +1,218 @@ +. + **/ + +$oid=0; + +?> + +
+ + + + +
+ + +
+ + +
+ +
+ +
+ +
+
+
diff --git a/subs/part/contests_backend.php b/subs/part/contests_backend.php new file mode 100644 index 0000000..06a70a2 --- /dev/null +++ b/subs/part/contests_backend.php @@ -0,0 +1,177 @@ +. + **/ + +try{ + + if(isset($_GET['list'])){ + $filter="WHERE c.id<>0 and c.schoolyear=?"; + $filter_array=array($_GET['list']); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + if($_POST['f_search']!=""){ + $filter.=" and (c.name_1 LIKE ? or c.name_2 LIKE ? or s.name_1 LIKE ? or s.name_2 LIKE ? or c.description LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + if(isset($_POST['f_subject'])){ + for($i=0; $iprepare("SELECT c.id, c.name_1, c.name_2, s.name_1 AS subject_1, s.name_2 AS subject_2, c.description, c.ministry_support, c.ministry_place FROM contests AS c INNER JOIN subjects AS s ON (s.id=c.subject) ".$filter." ORDER BY c.name_1 ASC, c.name_2 ASC"); + $sql->execute($filter_array); + echo " + + + + + + + + + + + + + + + + "; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + echo " + + + + + + + + + + + + "; + } + echo " + +
".$lang['id']."".$lang['name_1']."".$lang['name_2']."".$lang['subject_1']."".$lang['subject_2']."".$lang['description']."".$lang['ministry_support']."".$lang['ministry_place']."".$lang['tools']."
".$row['id']."".$row['name_1']."".$row['name_2']."".$row['subject_1']."".$row['subject_2']."".str_replace(array("\n"), array("
"), $row['description'])."
".$lang['ministry_'.$row['ministry_support']]."".($row['ministry_support']>0?$row['ministry_place']:"-")." + + +
+ "; + } + + if(isset($_POST['new'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM contests WHERE name_1=:name_1 or name_2=:name_2"); + $sql->execute(array(":name_1"=>$_POST['name_1'], ":name_2"=>$_POST['name_2'])); + $row=$sql->fetch(PDO::FETCH_ASSOC); + if($row['count']>0){ + functions::setError(8); + } + else{ + $sql=$db->prepare("INSERT INTO contests (name_1, name_2, subject, description, ministry_support, ministry_place, schoolyear) VALUES (:n1, :n2, :subj, :desc, :ms, :mp, :sy)"); + $sql->execute(array(":n1"=>$_POST['name_1'], ":n2"=>$_POST['name_2'], ":subj"=>$_POST['subject'], ":desc"=>$_POST['description'], ":ms"=>$_POST['ministry_support'], ":mp"=>$_POST['ministry_place'], ":sy"=>$schoolyear)); + $res=$sql->rowCount(); + if($res<1){ + functions::setError(4); + } + else{ + functions::setMessage(3); + } + } + } + + if(isset($_POST['delete'])){ + $sql=$db->prepare("DELETE FROM contests WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['delete'])); + $res=$sql->rowCount(); + if($res<1){ + functions::setError(4); + } + else{ + functions::setMessage(4); + } + } + + if(isset($_GET['getdata'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count, id, name_1, name_2, subject, description, ministry_support, ministry_place FROM contests WHERE id=:id"); + $sql->execute(array(":id"=>$_GET['getdata'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + echo json_encode($res); + } + } + + if(isset($_POST['edit'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM contests WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['edit'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + $sql=$db->prepare("UPDATE contests SET name_1=:n1, name_2=:n2, subject=:subj, description=:desc, ministry_support=:ms, ministry_place=:mp WHERE id=:id"); + $sql->execute(array(":n1"=>$_POST['name_1'], ":n2"=>$_POST['name_2'], ":subj"=>$_POST['subject'], ":desc"=>$_POST['description'], ":ms"=>$_POST['ministry_support'], ":mp"=>$_POST['ministry_place'], ":id"=>$_POST['edit'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(5); + } + else{ + functions::setError(4); + } + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/phases.php b/subs/part/phases.php new file mode 100644 index 0000000..58977ea --- /dev/null +++ b/subs/part/phases.php @@ -0,0 +1,112 @@ +. + **/ + +?> + +
+ + + + +
+ =3): ?> + + +
+ + + +
+ +
+ +
+
diff --git a/subs/part/phases_backend.php b/subs/part/phases_backend.php new file mode 100644 index 0000000..b73fa2b --- /dev/null +++ b/subs/part/phases_backend.php @@ -0,0 +1,157 @@ +. + **/ + +try{ + + if(isset($_GET['list'])){ + $filter="WHERE id<>0"; + $filter_array=array(); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + if($_POST['f_search']!=""){ + $filter.=" and (name_1 LIKE ? or name_2 LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + } + + $sql=$db->prepare("SELECT id, name_1, name_2 FROM phases ".$filter." ORDER BY name_1 ASC, name_2 ASC"); + $sql->execute($filter_array); + + echo " + + + + + + + ".($_SESSION['accesslevel']>=3?"":"")." + + + + "; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + echo " + + + + + ".($_SESSION['accesslevel']>=3?"":"")." + + "; + } + echo " + +
".$lang['id']."".$lang['name_1']."".$lang['name_2']."".$lang['tools']."
".$row['id']."".$row['name_1']."".$row['name_2']." + + +
+ "; + } + + if(isset($_POST['new'])){ + if($_SESSION['accesslevel']<3){ + functions::setError(401); + } + else{ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM phases WHERE name_1=:n1 or name_2=:n2"); + $sql->execute(array(":n1"=>$_POST['name_1'], ":n2"=>$_POST['name_2'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']>0){ + functions::setError(9); + } + else{ + $sql=$db->prepare("INSERT INTO phases (name_1, name_2) VALUES (:n1, :n2)"); + $sql->execute(array(":n1"=>$_POST['name_1'], ":n2"=>$_POST['name_2'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(3); + } + else{ + functions::setError(4); + } + } + } + } + + if(isset($_POST['delete'])){ + if($_SESSION['accesslevel']<3){ + functions::setError(401); + } + else{ + $sql=$db->prepare("DELETE FROM phases WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['delete'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(4); + } + else{ + functions::setError(4); + } + } + } + + if(isset($_GET['getdata'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count, id, name_1, name_2 FROM phases WHERE id=:id"); + $sql->execute(array(":id"=>$_GET['getdata'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + echo json_encode($res); + } + } + + if(isset($_POST['edit'])){ + if($_SESSION['accesslevel']<3){ + functions::setError(401); + } + else{ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM phases WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['edit'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + $sql=$db->prepare("UPDATE phases SET name_1=:n1, name_2=:n2 WHERE id=:id"); + $sql->execute(array(":n1"=>$_POST['name_1'], ":n2"=>$_POST['name_2'], ":id"=>$_POST['edit'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(5); + } + else{ + functions::setError(4); + } + } + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/profile.php b/subs/part/profile.php new file mode 100644 index 0000000..ec0a142 --- /dev/null +++ b/subs/part/profile.php @@ -0,0 +1,75 @@ +. + **/ + +?> + +
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

+ + + + + + + + + +
" required>
" required>
+
+
+ +
+
diff --git a/subs/part/profile_backend.php b/subs/part/profile_backend.php new file mode 100644 index 0000000..b2c801a --- /dev/null +++ b/subs/part/profile_backend.php @@ -0,0 +1,49 @@ +. + **/ + +try{ + + if(isset($_POST['password']) && isset($_POST['password_confirm'])){ + if($_POST['password']!=$_POST['password_confirm']){ + functions::setError(10); + } + else{ + $sql=$db->prepare("UPDATE users SET password=:passwd WHERE id=:id"); + $sql->execute(array(":passwd"=>PasswordStorage::create_hash($_POST['password']), ":id"=>$_SESSION['id'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(6); + } + else{ + functions::setError(4); + } + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/register.php b/subs/part/register.php new file mode 100644 index 0000000..0a2f795 --- /dev/null +++ b/subs/part/register.php @@ -0,0 +1,631 @@ + the core + * @author Fándly Gergő Zoltán (fandlygergo@gmail.hu, systemtest.tk) + * @copy 2017 Fándly Gergő Zoltán + * License: + Result Manager for managing results of students in bilingual school systems. + Copyright (C) 2017 Fándly Gergő Zoltán + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + **/ + +$oid=0; +?> + +
+ + + + +
+ + +
+ + +
+ + + +
+ +
+ +
+ +
+
+
diff --git a/subs/part/register_backend.php b/subs/part/register_backend.php new file mode 100644 index 0000000..e11d851 --- /dev/null +++ b/subs/part/register_backend.php @@ -0,0 +1,382 @@ +. + **/ + +try{ + + if(isset($_GET['list'])){ + $filter="WHERE r.id<>0 and r.schoolyear=?"; + $filter_array=array($_GET['list']); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + if($_POST['f_search']!=""){ + $filter.=" and (s.fullname LIKE ? or c.name_1 LIKE ? or c.name_2 LIKE ? or p.name_1 LIKE ? or p.name_2 LIKE ? or t.fullname LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + + if(isset($_POST['f_student'])){ + for($i=0; $iprepare("SELECT r.id, s.fullname AS student, s.class AS class, sb.name_1 AS subject_1, sb.name_2 AS subject_2, c.name_1 AS contest_1, c.name_2 AS contest_2, c.description AS contest_desc, c.ministry_support, c.ministry_place, p.name_1 AS phase_1, p.name_2 AS phase_2, t.fullname AS teacher, r.place, r.mention FROM register AS r INNER JOIN users AS s ON (s.id=r.student) INNER JOIN contests AS c ON (c.id=r.contest) INNER JOIN subjects AS sb ON (sb.id=c.subject) INNER JOIN phases AS p ON (p.id=r.phase) INNER JOIN users AS t ON (t.id=r.teacher) ".$filter." ORDER BY id ASC"); + $sql->execute($filter_array); + + echo " + + + + + + + + + + + + + + + + + + + + + + + "; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + echo " + + + + + + + + + + + + + + + + + + + "; + } + } + + if(isset($_POST['delete'])){ + $sql=$db->prepare("DELETE FROM register WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['delete'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(4); + } + else{ + functions::setError(4); + } + } + + if(isset($_POST['new'])){ + $new=array("student"=>$_POST['student'], "contest"=>$_POST['contest'], "phase"=>$_POST['phase'], "teacher"=>$_POST['teacher'], "place"=>($_POST['place']<0?$_POST['place']:$_POST['place_c']), "mention"=>$_POST['mention']); + + $sql=$db->prepare("SELECT r.id, p.name_1 AS phase_1, p.name_2 AS phase_2, t.fullname AS teacher, r.place, r.mention FROM register AS r INNER JOIN users AS s ON (s.id=r.student) INNER JOIN phases AS p ON (p.id=r.phase) INNER JOIN users AS t ON (t.id=r.teacher) WHERE r.student=:stud and r.contest=:cont ORDER BY r.id ASC"); + $sql->execute(array(":stud"=>$_POST['student'], ":cont"=>$_POST['contest'])); + $found=""; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + $found.=" + + + + + + + + + + "; + } + + $exp=array("params"=>$new, "prev"=>$found); + echo json_encode($exp); + } + + if(isset($_POST['newSubmit'])){ + $data=json_decode($_POST['newSubmit']); + $sql=$db->prepare("INSERT INTO register (student, contest, phase, teacher, place, mention, schoolyear) VALUES (:stud, :cont, :phase, :teacher, :place, :mention, :sy)"); + $sql->execute(array(":stud"=>$data->student, ":cont"=>$data->contest, ":phase"=>$data->phase, ":teacher"=>$data->teacher, ":place"=>$data->place, ":mention"=>$data->mention, ":sy"=>$schoolyear)); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(3); + } + else{ + functions::setError(4); + } + } + + if(isset($_GET['getdata'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count, id, student, contest, phase, teacher, place, mention FROM register WHERE id=:id"); + $sql->execute(array(":id"=>$_GET['getdata'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + echo json_encode($res); + } + } + + if(isset($_POST['edit'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM register WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['edit'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + $sql=$db->prepare("UPDATE register SET student=:stud, contest=:cont, phase=:phase, teacher=:teacher, place=:place, mention=:mention WHERE id=:id"); + $sql->execute(array(":stud"=>$_POST['student'], ":cont"=>$_POST['contest'], ":phase"=>$_POST['phase'], ":teacher"=>$_POST['teacher'], ":place"=>($_POST['place']<0?$_POST['place']:$_POST['place_c']), ":mention"=>$_POST['mention'], ":id"=>$_POST['edit'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(5); + } + else{ + functions::setError(4); + } + } + } + + if(isset($_POST['export'])){ + //allow to run for a long time since this is a long process. 10 minute is more than enough + set_time_limit(600); + + $filter="WHERE r.id<>0"; + $filter_array=array(); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + if($_POST['f_search']!=""){ + $filter.=" and (s.fullname LIKE ? or c.name_1 LIKE ? or c.name_2 LIKE ? or p.name_1 LIKE ? or p.name_2 LIKE ? or t.fullname LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + + if(isset($_POST['f_student'])){ + for($i=0; $iprepare("SELECT r.id, s.fullname AS student, s.class AS class, sb.name_1 AS subject_1, sb.name_2 AS subject_2, c.name_1 AS contest_1, c.name_2 AS contest_2, c.description AS contest_desc, c.ministry_support, c.ministry_place, p.name_1 AS phase_1, p.name_2 AS phase_2, t.fullname AS teacher, r.place, r.mention, r.schoolyear FROM register AS r INNER JOIN users AS s ON (s.id=r.student) INNER JOIN contests AS c ON (c.id=r.contest) INNER JOIN subjects AS sb ON (sb.id=c.subject) INNER JOIN phases AS p ON (p.id=r.phase) INNER JOIN users AS t ON (t.id=r.teacher) ".$filter." ORDER BY r.schoolyear ASC, subject_1 ASC, contest_1 ASC, student ASC"); + $sql->execute($filter_array); + + //setting up file + $exp=$BOM; + $exp.="\"".strtr($config['general']['title'], array("\""=>"\"\""))."\"\n"; + $exp.="\"".strtr($config['general']['org'], array("\""=>"\"\""))."\"\n"; + $exp.="\"".strtr($lang['exported'], array("\""=>"\"\"")).": ".date("Y-m-d H:i:s")."\"\n\n"; + + //build header + $header=""; + foreach($_POST['export'] as $e){ + $header.="\"".strtr($lang[$e], array("\"", "\"\""))."\","; + } + $header=rtrim($header, ","); + $exp.=$header."\n"; + + //build content + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + $push=""; + foreach($_POST['export'] as $e){ + if($e=="ministry_support"){ + $push.="\"".strtr($lang['ministry_'.$row['ministry_support']], array("\""=>"\"\""))."\","; + } + else if($e=="ministry_place"){ + $push.="\"".strtr($row['ministry_support']==0?"":$row['ministry_place'], array("\""=>"\"\""))."\","; + } + else if($e=="place"){ + $push.="\"".strtr($row['place']<0?$lang['places'][$row['place']]:$row['place'], array("\""=>"\"\""))."\","; + } + else{ + $push.="\"".strtr($row[$e], array("\""=>"\"\""))."\","; + } + } + $push=rtrim($push, ","); + $exp.=$push."\n"; + } + + //save it to a temporary file + $file=tempnam(sys_get_temp_dir(), "resmanExp_"); + file_put_contents($file, $exp); + + //return file name for download + echo $file; + } + + if(isset($_GET['expdownload'])){ + if(!file_exists($_GET['expdownload'])){ + functions::setError(404); + header("Location: ".$_SERVER['HTTP_REFERER']); + } + else{ + //download exported file + header("Content-type: application/octet-stream"); + header("Content-disposition: attachment; filename='".$config['general']['title']."_export_".date("Y-m-d H-i-s").".csv'"); + readfile($_GET['expdownload']); + unlink($_GET['expdownload']); + die(); + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/subjects.php b/subs/part/subjects.php new file mode 100644 index 0000000..8f7765e --- /dev/null +++ b/subs/part/subjects.php @@ -0,0 +1,112 @@ +. + **/ + +?> + +
+ + + + +
+ =3): ?> + +
".$lang['id']."".$lang['student']."".$lang['class']."".$lang['subject_1']."".$lang['subject_2']."".$lang['contest_1']."".$lang['contest_2']."".$lang['contest_desc']."".$lang['ministry_support']."".$lang['ministry_place']."".$lang['phase_1']."".$lang['phase_2']."".$lang['teacher']."".$lang['place']."".$lang['mention']."".$lang['tools']."
".$row['id']."".$row['student']."".$row['class']."".$row['subject_1']."".$row['subject_2']."".$row['contest_1']."".$row['contest_2']."".$row['contest_desc']."".$lang['ministry_'.$row['ministry_support']]."".($row['ministry_support']==0?"":$row['ministry_place'])."".$row['phase_1']."".$row['phase_2']."".$row['teacher']."".($row['place']<0?$lang['places'][$row['place']]:$row['place'])."".str_replace(array("\n"), array("
"), $row['mention'])."
+ + +
".$row['id']."".$row['phase_1']."".$row['phase_2']."".$row['teacher']."".($row['place']<0?$lang['places'][$row['place']]:$row['place'])."".str_replace(array("\n"), array("
"), $row['mention'])."
+ + + + + + + + +
" required>
" required>
+
+
+ + + + + +
+ + + +
+ +
+ +
+ diff --git a/subs/part/subjects_backend.php b/subs/part/subjects_backend.php new file mode 100644 index 0000000..f6a9130 --- /dev/null +++ b/subs/part/subjects_backend.php @@ -0,0 +1,139 @@ +. + **/ + +try{ + + if(isset($_GET['list'])){ + $filter="WHERE id<>0"; + $filter_array=array(); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + $filter.=" and (name_1 LIKE ? or name_2 LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + + $sql=$db->prepare("SELECT id, name_1, name_2 FROM subjects ".$filter." ORDER BY name_1 ASC, name_2 ASC"); + $sql->execute($filter_array); + + //print list + echo " + + + + + + + ".($_SESSION['accesslevel']>=3?"":"")." + + + + "; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + echo " + + + + + ".($_SESSION['accesslevel']>=3?"":"")." + + "; + } + } + + if(isset($_POST['new'])){ + $sql=$db->prepare("SELECT count(id) AS count FROM subjects WHERE name_1=:name_1 or name_2=:name_2"); + $sql->execute(array(":name_1"=>$_POST['name_1'], ":name_2" =>$_POST['name_2'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + if($res['count']>0){ + functions::setError(7); + } + else{ + $sql=$db->prepare("INSERT INTO subjects (name_1, name_2) VALUES (:name_1, :name_2)"); + $sql->execute(array(":name_1"=>$_POST['name_1'], ":name_2"=>$_POST['name_2'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(3); + } + else{ + functions::setError(4); + } + } + } + + if(isset($_POST['delete'])){ + $sql=$db->prepare("DELETE FROM subjects WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['delete'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(4); + } + else{ + functions::setError(4); + } + } + + if(isset($_GET['getdata'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count, id, name_1, name_2 FROM subjects WHERE id=:id"); + $sql->execute(array(":id"=>$_GET['getdata'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + echo json_encode($res); + } + } + + if(isset($_POST['edit'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM subjects WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['edit'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + if($res['count']<1){ + functions::setError(6); + } + else{ + $sql=$db->prepare("UPDATE subjects SET name_1=:name_1, name_2=:name_2 WHERE id=:id"); + $sql->execute(array(":name_1"=>$_POST['name_1'], ":name_2"=>$_POST['name_2'], ":id"=>$_POST['edit'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(5); + } + else{ + functions::setError(4); + } + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/users.php b/subs/part/users.php new file mode 100644 index 0000000..87955ad --- /dev/null +++ b/subs/part/users.php @@ -0,0 +1,189 @@ +. + **/ + +$oid=0; +?> + +
+ + + + +
+ +
".$lang['id']."".$lang['name_1']."".$lang['name_2']."".$lang['tools']."
".$row['id']."".$row['name_1']."".$row['name_2']." + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
">
" required>
" value=0 min=0 max=4 required>
+ +
+ +
">
+ +
+ +
">
+
+ + +
+
+
+
+ + + + + +
+ + +
+ +
+ +
+ diff --git a/subs/part/users_backend.php b/subs/part/users_backend.php new file mode 100644 index 0000000..3d50b43 --- /dev/null +++ b/subs/part/users_backend.php @@ -0,0 +1,206 @@ +. + **/ + +try{ + + if(isset($_GET['list'])){ + $filter="WHERE id<>1"; + $filter_array=array(); + if(isset($_POST['filter'])){ + if(isset($_POST['f_search'])){ + if($_POST['f_search']!=""){ + $filter.=" and (username LIKE ? or fullname LIKE ? or class LIKE ?)"; + array_push($filter_array, "%".$_POST['f_search']."%", "%".$_POST['f_search']."%", "%".$_POST['f_search']."%"); + } + } + if(isset($_POST['f_class'])){ + for($i=0; $iprepare("SELECT id, username, fullname, accesslevel, class, perm_message FROM users ".$filter." ORDER BY class ASC, fullname ASC, accesslevel ASC"); + $sql->execute($filter_array); + echo " + + + + + + + + + + + + + + "; + while($row=$sql->fetch(PDO::FETCH_ASSOC)){ + echo " + + + + + + + + + + "; + } + echo " + +
".$lang['id']."".$lang['username']."".$lang['fullname']."".$lang['accesslevel']."".$lang['class']."".$lang['perm_message']."".$lang['tools']."
".$row['id']."".$row['username']."".$row['fullname']."".$row['accesslevel']."".$row['class']."".($row['perm_message']?$lang['ryes']:$lang['rno'])." + + +
+ "; + } + + if(isset($_POST['new'])){ + if($_POST['username']!=""){ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM users WHERE username=:uname"); + $sql->execute(array(":uname"=>$_POST['username'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']>0){ + functions::setError(5); + } + } + + $password; + if($_POST['password']=="0"){ + $password=functions::randomString(6); + } + else{ + $password=$_POST['password']; + } + + $pm=isset($_POST['perm_message']); + + $sql=$db->prepare("INSERT INTO users (username, fullname, accesslevel, class, password, perm_message) VALUES (:uname, :fname, :al, :class, :passwd, :pm)"); + $sql->execute(array(":uname"=>$_POST['username'], ":fname"=>$_POST['fullname'], ":al"=>$_POST['accesslevel'], ":class"=>$_POST['class'], ":passwd"=>PasswordStorage::create_hash($_POST['password']), ":pm"=>$pm)); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(3); + } + else{ + functions::setError(4); + } + } + + if(isset($_GET['getdata'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count, id, username, fullname, accesslevel, class, perm_message FROM users WHERE id=:id"); + $sql->execute(array(":id"=>$_GET['getdata'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + if($res['count']<1){ + functions::setError(6); + } + else{ + echo json_encode($res); + } + } + + if(isset($_POST['edit'])){ + $sql=$db->prepare("SELECT COUNT(id) AS count FROM users WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['edit'])); + $res=$sql->fetch(PDO::FETCH_ASSOC); + + $pm=isset($_POST['perm_message']); + + if($res['count']<1){ + functions::setError(6); + } + else{ + $sql=$db->prepare("UPDATE users SET username=:uname, fullname=:fname, accesslevel=:al, class=:class, perm_message=:pm WHERE id=:id"); + $sql->execute(array(":uname"=>$_POST['username'], ":fname"=>$_POST['fullname'], ":al"=>$_POST['accesslevel'], ":class"=>$_POST['class'], ":pm"=>$pm, ":id"=>$_POST['edit'])); + $res1=$sql->rowCount(); + + //check if password needs update + if($_POST['password']==""){ + $res2=true; + } + else{ + $password; + if($_POST['password']=="0"){ + $password=functions::randomString(6); + } + else{ + $password=$_POST['password']; + } + + $sql=$db->prepare("UPDATE users SET password=:passwd WHERE id=:id"); + $sql->execute(array(":passwd"=>PasswordStorage::create_hash($password), ":id"=>$_POST['edit'])); + $res2=$sql->rowCount(); + } + + if($res1 && $res2){ + functions::setMessage(5); + } + else{ + functions::setError(4); + } + } + } + + if(isset($_POST['delete'])){ + $sql=$db->prepare("DELETE FROM users WHERE id=:id"); + $sql->execute(array(":id"=>$_POST['delete'])); + $res=$sql->rowCount(); + if($res>0){ + functions::setMessage(4); + } + else{ + functions::setError(4); + } + } + +} +catch(Exception $e){ + functions::setError(500); + error_log($e); +} diff --git a/subs/part/wizard.php b/subs/part/wizard.php new file mode 100644 index 0000000..c327185 --- /dev/null +++ b/subs/part/wizard.php @@ -0,0 +1,242 @@ +. + **/ + +$oid=0; + +?> + +
+ + + + +

+ +
+
+ + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+
+ + +
+
diff --git a/subs/part/wizard_backend.php b/subs/part/wizard_backend.php new file mode 100644 index 0000000..13ba7f8 --- /dev/null +++ b/subs/part/wizard_backend.php @@ -0,0 +1,26 @@ +. + **/ + +//wizard is just an other frontend for the register. So no backend here