From 694078bb34f075a9d87b9257b00df032d13a6ace Mon Sep 17 00:00:00 2001 From: PHClaus <15097539+phhpro@users.noreply.github.com> Date: Wed, 26 Dec 2018 17:11:33 +0100 Subject: [PATCH] 20181226 --- README.md | 3 +- TRANSLATE | 8 +- chat.js | 40 ++++--- chat.php | 320 +++++++++++++++++++++++----------------------------- config.php | 98 ++++------------ favicon.png | Bin 914 -> 2243 bytes index.php | 5 +- init.php | 3 +- logo.png | Bin 0 -> 2243 bytes 9 files changed, 194 insertions(+), 283 deletions(-) create mode 100644 logo.png diff --git a/README.md b/README.md index 8d02a82..4e4e49c 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # PHP Atomchat -**PHP Atomchat** is a **free PHP chat script** for low volume sites or individual homepages, e.g. P2P chat. +**PHP Atomchat** is a **free PHP chat script** for low volume websites or individual homepages. - Works OOTB - Completely anonymous - No registration or passwords ever - Emoji auto-conversion - File uploads +- Themeable - Multi-lingual - No database required diff --git a/TRANSLATE b/TRANSLATE index 0340ca9..0fdbdae 100644 --- a/TRANSLATE +++ b/TRANSLATE @@ -1,10 +1,10 @@ -Make a copy of en.php and save it as xx.php, where xx is -the language ID, e.g. fr for French, it for Italian, etc. +Make a copy of en.php and save as xx.php, where xx is the +language ID, e.g. "fr" for French, "it" for Italian, etc. https://www.loc.gov/standards/iso639-2/php/code_list.php Edit xx.php and mail a copy to @author given in en.php. -Subject: Lang_XX_PHP_Atomchat -Body : @author Your Name yourmail@server.com +Subject: lang_xx_PHP_Atomchat +Body : Your Name Attach : xx.php diff --git a/chat.js b/chat.js index eb7baca..e359e41 100644 --- a/chat.js +++ b/chat.js @@ -1,5 +1,7 @@ /* - * Javascript push helper + * PHP Version 5 and above + * + * Javascript pseudo push -- actually more pull then push * * @category PHP_Chat * @package PHP_Atomchat @@ -12,43 +14,43 @@ * * HELP WANTED * - * AJAX push works OK but is neither pretty nor overly effective. - * Should only trigger refresh when someone adds an entry rather - * than continously pushing every n seconds. Also needs fixing to - * possibly skip content double-render when viewed without styles. + * This should only refresh on new entry rather than continously + * polling every n seconds. Existing code also needs fixing to + * prevent double-drawing content when viewed without styles. */ -// Refresh every n seconds -- default 2 = 2000 ms +// Refresh rate -- default 2 = 2000 ms var wait = 2000; // Init object var http = null; // Link object -function object() { - +function ajax() +{ if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else { - alert("Your browser does not support AJAX!"); + alert("Your browser doesn't support AJAX!"); return null; } } // Status -function status() { - +function status() +{ if (http.readyState == 4) { document.getElementById("push").innerHTML = http.responseText; } } // Timer -function timer() { - http = object(); +function wait() +{ + http = ajax(); if (http != null) { http.open("POST", "?"+Math.floor(Math.random()*10000), true); @@ -58,13 +60,15 @@ function timer() { } // Update -function update() { - timer(); - setTimeout('update()', wait); +function push() +{ + wait(); + setTimeout('push()', wait); } // Beep -function bell() { +function bell() +{ var beep = new Audio("data:audio/wav;base64,"+ "//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihw"+ "MWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIII"+ @@ -130,5 +134,5 @@ function bell() { } // Init -update(); +push(); bell(); diff --git a/chat.php b/chat.php index 94b2177..495bf4c 100644 --- a/chat.php +++ b/chat.php @@ -2,7 +2,7 @@ /** * PHP Version 5 and above * - * Main script and configuration + * Main script * * @category PHP_Chat * @package PHP_Atomchat @@ -30,7 +30,7 @@ // Load config -if (file_exists('config.php')) { +if (is_file('config.php')) { include './config.php'; } else { echo "Missing configuration!"; @@ -38,41 +38,53 @@ } //** Script version -$make = 20180504; +$make = "20181226"; -//** Link logo -if ($logo !== "") { - $logo = ' '; -} - -//** Init protocol +//** Link protocol $prot = ""; -//** Link protocol if (isset($_SERVER['HTTPS']) && "on" === $_SERVER['HTTPS']) { $prot = "s"; } //** Build URL -$host = "http" . $prot . "://" . - $_SERVER['HTTP_HOST'] . "/" . $fold . "/"; +$host = "http$prot://" . $_SERVER['HTTP_HOST'] . "/$fold/"; //** Link logfile, initial screen, and status $data = "log/" . date('Y-m-d') . ".html"; $init = "init.php"; $stat = ""; -//** Link emoji config, arrays, and code +//** Link logo image +if ($logo_i !== "") { + $logo_i = "\"\"/ "; +} else { + $logo_i = ""; +} + +//** Link logo text +if ($logo_t === 1) { + $logo_t = $page; +} else { + $logo_t = ""; +} + +//** Link emoji config, arrays, and init code $emo_conf = "emoji.txt"; $emo_parr = array(); $emo_sarr = array(); $emo_code = ""; -//** Init session +//** Attempt strict session +if (get_cfg_var('session.use_strict_mode') !== '1') { + ini_set('session.use_strict_mode', '1'); +} + +//** Init and test session session_start(); $_SESSION['test'] = 1; -//** Test session if ($_SESSION['test'] !== 1) { echo "

Missing session cookie!

\n" . "

Please edit your browser's cookie " . @@ -88,20 +100,19 @@ = htmlentities($_POST['lang_id'], ENT_QUOTES, "UTF-8"); } -//** Fallback default language +//** Link language if (!isset($_SESSION['lang'])) { $_SESSION['lang'] = $lang_def; } -//** Link language ID and data $lang_id = $_SESSION['lang']; -$lang_data = "./lang/" . $lang_id . ".php"; +$lang_data = "./lang/$lang_id.php"; //** Check log folder if (!is_dir('log')) { if (mkdir('log') === false) { - echo "Cannot write log folder!"; + echo "Failed to create log folder!"; exit; } } @@ -112,7 +123,7 @@ if (!is_dir($up_fold)) { if (mkdir($up_fold) === false) { - echo "Cannot write upload folder!"; + echo "Failed to create upload folder!"; exit; } } @@ -124,10 +135,10 @@ exit; } -//** Check if file exists and is valid -if (file_exists($lang_data) || $emo === 1) { +//** Check data files +if (is_file($lang_data) || $emo === 1) { - if (file_exists($lang_data)) { + if (is_file($lang_data)) { $file_data = $lang_data; $file_text = "language file"; } @@ -139,7 +150,6 @@ $file_trim = file_get_contents($file_data); - //** True if file contains only BOM or empty lines => fail if (filesize($file_data) <16 && trim($file_trim) === false) { echo "Invalid $file_text!"; exit; @@ -149,24 +159,21 @@ exit; } -//** Link default language and config +//** Link language $lang_mime = $lang_def; require $lang_data; - -//** Link selected language $lang_id = $_SESSION['lang']; -$lang_user = "lang/" . $lang_id . ".php"; +$lang_user = "lang/$lang_id.php"; -//** Check selected language -if (file_exists($lang_user)) { +if (is_file($lang_user)) { $lang_mime = $lang_id; include $lang_user; } else { $stat = $lang['lang_miss']; } -//** Check theme -- renders plain if missing -if (!file_exists("css/" . $css_def . ".css")) { +//** Check theme +if (!is_file("css/$css_def.css")) { $stat = $lang['theme_miss']; } @@ -178,14 +185,12 @@ header('Location: #MISSING_NAME'); exit; } else { - //** Init name session -- append mt_rand() to prevent dupes $_SESSION['name'] = $name . "_" . mt_rand(); - $text = "

$date " . $_SESSION['name'] . " " . $lang['chat_enter'] . "
\n"; - if (file_exists($data)) { + if (is_file($data)) { $text .= file_get_contents($data); } @@ -203,7 +208,6 @@ 'Content-Disposition: attachment; ' . 'filename="' . str_replace('log/', '', $data) . '"' ); - readfile($data); exit; } @@ -228,19 +232,15 @@ //** Check upload if ($up === 1) { - - //** Get size, trim name, and link file $up_size = $_FILES['file']['size']; $up_base = basename($_FILES['file']['name']); - $up_file = $up_fold . "/" . $up_base; - - //** Link type and URL, and init error status + $up_file = "$up_fold/" . $_SESSION['name'] . "_$up_base"; $up_type = strtolower(pathinfo($up_file, PATHINFO_EXTENSION)); - $up_open = $host . $up_file; + $up_open = "$host$up_file"; $up_fail = 1; } -//** Initial form state +//** Initial upload state $up_pass = 0; //** Post entry @@ -252,13 +252,10 @@ if ($text !== "") { $up_pass = 1; - //** Check emoji conversion + //** Check conversion if ($emo === 1) { - - //** Link primary array $emo_open = fopen($emo_conf, 'r'); - //** Parse config while (!feof($emo_open)) { $emo_line = fgets($emo_open); $emo_line = trim($emo_line); @@ -267,14 +264,12 @@ fclose($emo_open); - //** Parse primary array and split values foreach ($emo_parr as $emo_code) { $emo_line = explode("|", $emo_code); $emo_sarr[] = $emo_line; $emo_calt = $emo_line[0]; $emo_ckey = $emo_line[1]; - //** Convert emoji if (stripos($text, $emo_calt) !== false) { $text = trim( str_replace( @@ -292,69 +287,65 @@ //** Check upload if ($up === 1) { - //** Check selection if (!empty($_FILES['file']['name'])) { + $up_src = getimagesize($_FILES['file']['tmp_name']); - //** Link MIME type -- image only - $up_mime = getimagesize($_FILES['file']['tmp_name']); - - //** Check if file exists - if (file_exists($up_file)) { + if (is_file($up_file)) { $stat = $lang['up_exist']; $up_fail = 0; } - //** Check size if ($up_size >$up_max) { $stat = $lang['up_exceed']; $up_fail = 0; } - //** Check image if (in_array($up_type, $up_is_img)) { - //** Check MIME - if ($up_mime !== false) { - - //** Build entry - $up_link = $lang['up'] . ': ' . - "$up_base ($up_size)
" . - ''; + if ($up_src !== false) { + $up_iw = $up_src[0]; + $up_ih = $up_src[1]; + + if ($up_iw <=$up_tnw) { + $up_tnw = $up_iw; + } + + if ($up_ih <=$up_tnh) { + $up_tnh = $up_ih; + } + + $up_link = $lang['up'] . ": $up_base ($up_size)" . + "
" . + "\"\"/"; } else { $stat = $lang['up_noimg']; $up_fail = 0; } } elseif ( - //** Check non-image and build entry in_array($up_type, $up_is_arc) || in_array($up_type, $up_is_doc) || in_array($up_type, $up_is_snd) || in_array($up_type, $up_is_vid) ) { - $up_link = $lang['up'] . ': ' . + $up_link = $lang['up'] . ": " . "$up_base ($up_size)"; } else { $stat = $lang['up_notype']; $up_fail = 0; } - //** Update error status + //** Finalise upload if ($up_fail === 0) { $stat = $lang['up_fail'] . " " . $stat; } else { - //** Finalise upload if ( move_uploaded_file( $_FILES['file']['tmp_name'], $up_file ) ) { - //** Link entry and clear temp file - unlink($up_base); $up_pass = 1; } else { $stat = $lang['up_nowrite']; @@ -378,8 +369,8 @@ //** Build entry and update log if ($up_pass === 1) { - $post = "
' . "\n" . + $post = "
\n" . "
" . "
$date
" . "
" . $_SESSION['name'] . "
" . @@ -405,7 +396,7 @@ } } -//** Check theme session and apply +//** Link theme if (isset($_SESSION['theme'])) { $css_sel = $_SESSION['theme']; } else { @@ -413,93 +404,80 @@ $_SESSION['theme'] = $css_sel; } -//** Try to prevent caching +//** Headers header('Expires: on, 01 Jan 1970 00:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); +header_remove('X-Powered-By'); -//** Header +//** Begin mark-up echo "\n" . - '' . "\n" . + "\n" . " \n" . - " " . $page . "\n" . - ' ' . "\n" . - " ' . "\n" . + " $page\n" . + " \n" . + " \n" . " ' . "\n" . + "content=\"$meta_des - PHP Atomchat free PHP chat scripts\"/>\n" . " ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - ' ' . "\n" . - " ' . "\n" . + "content=\"$meta_key,PHP Atomchat,free PHP chat scripts\"/>\n" . + " \n" . + " \n" . + " \n" . + " \n" . " \n" . " \n" . "
\n" . - "

$logo$page

\n" . + "

$logo_i$logo_t

\n" . "
\n"; //** Settings if (isset($_POST['settings'])) { echo "
\n" . "

" . $lang['set'] . "

\n" . - '
' . "\n" . + " \n" . - //** Language + //** Language "
\n" . "

" . $lang['lang'] . "

\n" . " \n" . " ' . "\n" . + "value=\"" . $lang['apply'] . "\" " . + "title=\"" . $lang['apply_title'] . "\"/>\n" . "
\n"; //** Theme @@ -508,9 +486,9 @@ "

" . $lang['theme'] . "

\n" . " \n" . " ' . "\n" . + "value=\"" . $lang['apply'] . "\" " . + "title=\"" . $lang['apply_title'] . "\"/>\n" . "
\n"; } @@ -545,7 +519,7 @@ if ($emo === 1) { $emo_open = fopen($emo_conf, 'r'); - //** Parse list + //** Parse available icons while (!feof($emo_open)) { $emo_line = fgets($emo_open); $emo_line = trim($emo_line); @@ -553,12 +527,10 @@ } fclose($emo_open); - echo "

" . $lang['emo'] . "

\n" . - "
\n";
+             "                
\n";
 
-        //** List item
         foreach ($emo_parr as $emo_code) {
  
             if ($emo_code !== "") { 
@@ -576,11 +548,9 @@
 
     //** Upload
     if ($up === 1) {
-
-        //** Summary
         echo "                

" . $lang['up'] . "

\n" . "

" . - $lang['up_max'] . " $up_max.

\n" . + $lang['up_max'] . " $up_max

\n" . "

" . $lang['up_allow'] . "

\n" . @@ -614,7 +584,7 @@ " \n" . " \n" . - //** Sound + //** Audio "
    \n" . "
  • " . $lang['up_snd'] . "\n" . @@ -660,11 +630,10 @@ "
\n"; } - //** Close settings echo "
\n" . " ' . "\n" . + "value=\"" . $lang['close'] . "\" " . + "title=\"" . $lang['close_title'] . "\"/>\n" . "
\n" . " \n" . " \n"; @@ -674,8 +643,8 @@ if (isset($_SESSION['name']) && !empty($_SESSION['name'])) { echo "
\n"; - //** Check data - if (file_exists($data)) { + //** Check data file + if (is_file($data)) { include $data; } else { $stat = $lang['first']; @@ -684,61 +653,59 @@ //** Navigation echo "
\n" . "
\n" . //** Text " ' . "\n" . + "title=\"" . $lang['text_title'] . "\">\n" . "
\n" . - //** Name -- hidden + //** Name -- hidden session token " ' . "\n" . + "value=\"" . $_SESSION['name'] . "\"/>\n" . //** Quit " ' . "\n" . + "value=\"" . $lang['quit'] . "\" " . + "title=\"" . $lang['quit_title'] . "\"/>\n" . - //** Settings + //** Conf " ' . "\n" . + "value=\"" . $lang['set'] . "\" " . + "title=\"" . $lang['set_title'] . "\"/>\n" . //** Save " ' . "\n" . + "value=\"" . $lang['save'] . "\" " . + "title=\"" . $lang['save_title'] . "\"/>\n" . //** Push " ' . "\n" . + "value=\"" . $lang['push'] . "\" " . + "title=\"" . $lang['push_title'] . "\"/>\n" . //** Post " ' . "\n" . + "value=\"" . $lang['post'] . "\" " . + "title=\"" . $lang['post_title'] . "\"/>\n" . "
\n"; //** Upload if ($up === 1) { echo "
\n" . " ' . "\n" . - "
" . $lang['up_max'] . - $up_max . ". " . $lang['up_info'] . "
\n" . + "title=\"" . $lang['up_select'] . "\"/>\n" . + "
" . + $lang['up_max'] . "$up_max
\n" . "
\n"; } echo " \n" . - - //** Status "
\n" . "
$stat
\n" . "
\n"; } else { //** Initial screen - if (file_exists($init)) { + if (is_file($init)) { echo "
\n"; include "./$init"; } //** Login $stat = $lang['name_info']; - echo "
\n" . " \n" . - ' ' . "\n" . + " \n" . " \n" . "\n"; diff --git a/config.php b/config.php index 9452167..55d0cbb 100644 --- a/config.php +++ b/config.php @@ -2,7 +2,7 @@ /** * PHP Version 5 and above * - * User configuration + * User configuration -- integer values of 0 = NO, 1 = YES * * @category PHP_Chat * @package PHP_Atomchat @@ -14,100 +14,46 @@ */ -/** - * Script folder - */ +//** Script folder and page title $fold = "atomchat"; - - -/** - * Page title - * Logo image (16x16 px) -- $logo = ""; if not needed - */ $page = "PHP Atomchat"; -$logo = "favicon.png"; +//** Page META tags description and keywords +$meta_des = "PHP Atomchat Demo"; +$meta_key = "PHP Atomchat Demo"; -/** - * Characters allowed per post - */ -$char = 1024; - - -/** - * Default language and theme - */ +//** Default language and theme $lang_def = "en"; $css_def = "grey"; - -/* - * Allow users to change theme - * Auto-convert emojis - * - * 0 = NO -- 1 = YES +/** + * Logo image, width, height, and text + * Set $logo_i = ""; to skip image, $logo_t = 0; to skip text */ +$logo_i = "logo.png"; +$logo_w = 32; +$logo_h = 32; +$logo_t = 1; + +//** Allow users to change theme, auto-convert emojis $css = 1; $emo = 1; - -/** - * Date format - */ +//** Maximum characters to post and date format +$char = 1024; $date = date('r'); - -/** - *********************************************************************** - * UPLOADS USE WITH CAUTION * - * * - * This feature might get you into deep water and even break your box. * - * Enable only when you fully understand the implied security risks! * - *********************************************************************** - */ - - -/** - * Enable uploads - */ +//** Enable uploads -- use with caution $up = 1; - -/** - * Upload folder - */ +//** Uploads folder and maximum filesize $up_fold = "upload"; - - -/** - * Maximum upload size -- bytes - * - * Make sure this doesn't exceed your filesize limit, if any. - */ $up_max = 2048000; - -/** - * Thumbnail width and height -- pixel - * - * Image previews are linked to open the original image when clicked. - * You should keep them small to prevent excessive gaps in the flow. - */ +//** Thumbnail width and height -- auto-trimmed if source is larger $up_tnw = 64; $up_tnh = 64; - -/** - * Allowed file types - * - * Please note that the script does not check non-image MIME types. - * There is a chance for fake uploads. As a minimal precaution you - * should never allow anything directly or indirectly executable on - * the server, e.g. html, php, js, etc., and remove all types your - * hosting may forbid, e.g. no mp3 or certain archives. - */ - - //** Document $up_is_doc = array( "doc", @@ -117,7 +63,6 @@ "txt" ); - //** Image $up_is_img = array( "bmp", @@ -128,7 +73,6 @@ "png" ); - //** Sound $up_is_snd = array( "m4a", @@ -139,7 +83,6 @@ "wav" ); - //** Video $up_is_vid = array( "avi", @@ -152,7 +95,6 @@ "qt" ); - //** Archive $up_is_arc = array( "7z", diff --git a/favicon.png b/favicon.png index 115431a7005809d4f07204adf5bbdbace2a9d5af..1e6c4052fd2d4e08c1d5a91dd8379b5764c8350e 100644 GIT binary patch literal 2243 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 diff --git a/index.php b/index.php index 2333cfd..603638e 100644 --- a/index.php +++ b/index.php @@ -2,8 +2,7 @@ /** * PHP Version 5 and above * - * Preloader -- may contain custom prerequisites - * access control, maintenance lay-over, etc. + * Preloader -- custom prerequisites, access control, etc. * * @category PHP_Chat * @package PHP_Atomchat @@ -15,7 +14,7 @@ */ -//** Required to bypass "Headers already sent" warning after posting +//** Required to bypass "Headers already sent" warning ob_start(); //** Load script diff --git a/init.php b/init.php index 16551e3..8c9ed9a 100644 --- a/init.php +++ b/init.php @@ -14,13 +14,14 @@ */ ?>

About

-

PHP Atomchat is a free PHP chat script for low volume sites or individual homepages, e.g. P2P chat.

+

PHP Atomchat is a free PHP chat script for low volume websites or individual homepages.

  • Works OOTB
  • Completely anonymous
  • No registration or passwords ever
  • Emoji auto-conversion
  • File uploads
  • +
  • Themeable
  • Multi-lingual
  • No database required
diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6c4052fd2d4e08c1d5a91dd8379b5764c8350e GIT binary patch literal 2243 zcmV;!2t4_)aO$wp&V-9!yh*cc^*i1D(?1`-n+j09xeof_NVUb0$Z_96mWi&B(cwx!#i z&YUynGUu`%PNy@7BCdOqC-Y{`d*1*5d7k(Azt1c1J)W7F8AVmqt{@0jJC4(m&*wGM zG|6VOhOX-)Q&UrenM~$LZ*Q-CrE3aTGARthdw`ul+t>cbFbs0J9J;PEJ3Gtd(9rbBC!f51#RS4IJOSKsrFjg3 z0M~VKU6(?k5RDxN*LCrHAJ6kv)h}M$HGJmGZ@>Pn_$}Zo`ClGE07*iK#}SiBWK|`e zN}*O)qomU-H*|KMxNHRG!+yv2#VvRqw&&saKDO^;dmdK#xKO|e0xZ|PdPQq%)0xjc zd;1as^BeBv?+YFRjvz!}zK=Ce#`Zk&o=3h=z%CTXyDpaJfh@0D(c1d%nW3Rk0J&_f z0RY>!>F)04?Afz4H8pYc=uxh}{(3}F#57G5Md8@7V+;=u^ZfJAGj-ttHFb6Tbo+KX zZn}wc=g+h2vB$71i)*gEmZ^yerY0sxY8uzATZb5nfg}w8>4iNoU*{UY{{8#$JdghV zel$&E_wL>F_4ToB+cuUiUCKM}yn`&uba!`i-+lLSptqNwY~IWxJw3RBz;jPM#i})H z_{Gyt^U?9+1i*%#9^68KbDw?+$s}l+*12`-J>{ElXE6*Pe)u8n?d>dDw1^vSxPkZH zdynSkW?EZY(KLC(5XY-aVG_6>{o%i2Q)AHqH-g=9F4G!|-O`E80Y$RP> zO=EjI$=X^Lx3w{O?i?seL_$?}0?0EnGfKI_sjAB9)2Dg%*=IR<@+9eWnqq3o#i!tT z*nkZ`?}1jsUkVOwWcmm;dF+Eu=(Ow$CQ zrKJT)k}wPd0L!wNot*`sbK^$zxjFW|@B;k<1N?5^J|@SvTofvLLgC9 z#VfDB&I`MDGky3l6*V>d`lXk!e4phV9TWiD_gT{3j|#%^lTPC3?U2=1Oa>>3I(vNjGWKswaUuM=mji*hx3zVIjYnGMBqRk$ooFA zREmmN4AXHiEQ`GB;sild`$2#chB#q}FUt$-6NVs3k!t$BCYz>-VHjwdR+>~MGPBt% zx@l5VUylvUzV%ib8KBFwPZ!@)pq$BMj&yZ(MR`(`Xwyj&XTSJ@?gt-a&NL|q0)ZrvHBBU0=5Kv{$jKyzuH%Lw zQY^+t{r!mPH2JwXoI(L)88MMSh{q$3%a82hGd6Za?(OZh*Q{AH1hlEDN-P#bh{w6N zyPJK_J;wu&Jc5);@sGhlI=5}Z_dIUA{dSa^8vc3g7};zV&+`}`9!5^5F)mynjPi?T z+xV^v^HC)XOHl~Jq0F8=whS;aF|h-9v!bGccr1pPO!A}KZsX&VC;7vhZ<5e7#=iQB zwVO6kzib)R*Ia`OGVu`!g! zMg&R1nwvvX6ynv@qa>Xf{1AtM&3kabg32J6)nm)nC5|R0{_mdS?67M-Ap_}$Mo-4kd{}