From 62cdc8b3394528fb8614e88d07c69026e0ad3849 Mon Sep 17 00:00:00 2001
From: franzz XACcxwXm*K|vVdD@21}{+ks7%opfY|Ym`VT
pU2N?(WBz&;E3-|;(*2{t&Na+2*8>HU`7NNVqlrK&ra})YHFo0|e
zX`0?8^hMNfdF+V+%QBv92
zOsSxB$CAUIWNvz{keStT?-`8s26v^?@n^@!lIaJ?h63TixUQn2L05ol&{6)XnqV7X
zP$-zi8Y7+-DQNAUV)4#T!!sh!&^(~?4#6w(;vQj3d^gl#mU2p@XW4KG5YLge1kUrR
zujN$GmPICm6vu^dBNY=#F^svoB(l@IA_dZB@0Y!Yn#4HB801qo%^l~M(Kz)=LjOO#
zA?guEOMG1|*4N>`8dOJ*P|uO!L01;0ft7cesi2wZhK2X3j-O|&(u+p%t7sNjL*QT#
z^KJ=?D!41d>6%n8wuyGB0gqoc>_Iw(OLQ_$+%(-Iyo|vfIu*k(G%-ZEy{z3t*i-K3
z#O?r%ewclVM;V
", $this->asMessageStack[$sType]); + break; + } + $this->asMessageStack[$sType] = array(); + return $oMessageStack; + } + + function __destruct() + { + $sErrorStack = $this->getCleanErrorStack(); + + switch($this->iExtractMode) + { + case self::MODE_TEXT: + echo $sErrorStack; + break; + case self::MODE_ARRAY: + if(count($sErrorStack)>0) + { + pre($sErrorStack, 'Error Stack'); + } + break; + case self::MODE_FILE: + if($sErrorStack!='') + { + @file_put_contents('log.html', '
'.date('r')."
".$sErrorStack.'
', FILE_APPEND); + } + break; + } + } +} + +class MySqlManager extends PhpObject +{ + const DB_SERVER = 'localhost'; + const DB_LOGIN = 'root'; + const DB_PASS = '0nadmin'; + const DB_NAME = 'mythoughts'; + + const ID_TAG = 'id_'; + const USERS_TABLE = 'users'; + const THOUGHTS_TABLE = 'thoughts'; + const SETTINGS_TABLE = 'settings'; + + private $oConnection; + + public function __construct() + { + parent::__construct(); + $this->oConnection = mysql_connect(self::DB_SERVER, self::DB_LOGIN, self::DB_PASS); + if(!$this->oConnection) + { + $this->addError('bug connection'); + } + else + { + if(!mysql_select_db(self::DB_NAME, $this->oConnection)) + { + $this->install(); + } + } + } + + public function __destruct() + { + mysql_close($this->oConnection); + } + + private function install() + { + $this->setQuery("DROP DATABASE IF EXISTS ".self::DB_NAME); + $this->setQuery("CREATE /* ".basename(__FILE__)." ".__LINE__." */ DATABASE ".self::DB_NAME); + mysql_select_db(self::DB_NAME, $this->oConnection); + @array_walk(array_map(array($this, 'getInstallQuery'), $this->getTables()), array($this, 'setQuery')); + } + + private function getInstallQuery($sTableName) + { + $asTableColumns = $this->getTableColumns($sTableName); + $sQuery = "\n".implodeAll($asTableColumns, "` ", "\n", "`", ",")."\n".implode(", \n", $this->getTableConstraints($sTableName)); + return "CREATE /* ".basename(__FILE__)." ".__LINE__." */ TABLE `{$sTableName}` ({$sQuery})"; + } + + private function setQuery($sQuery, $sTypeQuery=__FUNCTION__) + { + return $this->getQuery($sQuery, $sTypeQuery); + } + + private function getQuery($sQuery, $sTypeQuery=__FUNCTION__) + { + $oResult = mysql_query($sQuery, $this->oConnection); + if(!$oResult) + { + $this->addError("\nErreur SQL : \n".$sQuery."\n".mysql_error()); + } + return $oResult; + } + + public function getArrayQuery($sQuery, $bStringOnly=false, $sTypeQuery=__FUNCTION__) + { + $asResult = array(); + $oResult = $this->getQuery($sQuery, true, $sTypeQuery); + if($oResult!==false) + { + while($asCurrentRow = mysql_fetch_array($oResult)) + { + if($bStringOnly) + { + $asCurrentRow = $this->arrayKeyFilter($asCurrentRow, 'is_string'); + } + + //One column case : collapse a level + if(count($asCurrentRow)==1) + { + $asResult[] = array_shift($asCurrentRow); + } + else + { + $asResult[] = $asCurrentRow; + } + } + } + return $asResult; + } + + private function arrayKeyFilter($asArray, $sCallBack) + { + $asValidKeys = array_flip(array_filter(array_keys($asArray), $sCallBack)); + return array_intersect_key($asArray, $asValidKeys); + } + + public static function getTables() + { + return array(self::USERS_TABLE, self::THOUGHTS_TABLE, self::SETTINGS_TABLE); + } + + public static function getId($sTableName) + { + return self::ID_TAG.substr($sTableName, 0, -1); + } + + public static function getText($sTableName) + { + return substr($sTableName, 0, -1); + } + + private static function isId($sColumnName, $sTableName='') + { + $asTables = ($sTableName=='')?self::getTables():array($sTableName); + $asTableIds = array_map(array('self', 'getId'), $asTables); + return in_array($sColumnName, $asTableIds); + } + + public static function getTablecolumns($sTableName) + { + $asTableColumns = array(self::getId($sTableName)); + + switch($sTableName) + { + case self::USERS_TABLE: + $asTableColumns[] = 'user'; + $asTableColumns[] = 'pass'; + break; + case self::THOUGHTS_TABLE: + $asTableColumns[] = self::getId(self::USERS_TABLE); + $asTableColumns[] = 'thought'; + break; + case self::SETTINGS_TABLE: + $asTableColumns[] = self::getId(self::USERS_TABLE); + $asTableColumns[] = 'setting'; + $asTableColumns[] = 'value'; + break; + default: + $this->addError('Function '.__FUNCTION__.', table '.$sTableName.' not found'); + } + $asTableColumns[] = 'led'; + $asTableName = array_fill(0, count($asTableColumns), $sTableName); + return array_combine($asTableColumns, array_map(array('self', 'getColumnType'), $asTableColumns, $asTableName)); + } + + private static function getColumnType($sColumnName, $sTableName) + { + $sColumnType = ''; + switch($sColumnName) + { + case 'user': + $sColumnType = "varchar(20) NOT NULL"; + break; + case 'pass': + $sColumnType = "varchar(128) NOT NULL"; + break; + case 'thought': + $sColumnType = "longtext NOT NULL"; + break; + case 'setting': + $sColumnType = "varchar(20) NOT NULL"; + break; + case 'value': + $sColumnType = 'varchar(20) NOT NULL'; + break; + case 'led': + $sColumnType = "TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP"; + break; + case self::isId($sColumnName, $sTableName): + $sColumnType = "int(10) UNSIGNED auto_increment"; + break; + case self::isId($sColumnName): + $sColumnType = "int(10) UNSIGNED NOT NULL"; + break; + } + return $sColumnType; + } + + private static function getTableConstraints($sTableName) + { + //primary key + $asTableConstraints = array('PRIMARY' => "PRIMARY KEY (`".self::getId($sTableName)."`)"); + + //other constraints + switch($sTableName) + { + case 'user' : + break; + case 'thought' : + break; + } + return $asTableConstraints; + } + + private function addQuotes($oData) + { + return array_map_encapsulate($oData, "'"); + } + + private function getLastId() + { + return mysql_insert_id(); + } + + public function insertRow($sTableName, $asData) + { + $this->cleanSql($sTableName); + $this->cleanSql($asData); + + $asQueryValues = $this->addQuotes($asData); + $sQuery = "INSERT /* ".basename(__FILE__)." ".__LINE__." */ + INTO ".$sTableName." (`".implode("`, `", array_keys($asQueryValues))."`) + VALUES (".implode(", ", $asQueryValues).")"; + + return $this->setQuery($sQuery)?$this->getLastId():false; + } + + public function updateRow($sTableName, $asConstraints, $asData) + { + if(!is_array($asConstraints)) + { + $asConstraints = array($this->getId($sTableName)=>$asConstraints); + } + $iTableId = + + $this->cleanSql($sTableName); + $this->cleanSql($iTableId); + $this->cleanSql($asData); + $this->cleanSql($asConstraints); + $asQueryValues = $this->addQuotes($asData); + $asConstraintsValues = $this->addQuotes($asConstraints); + + $sQuery = "UPDATE /* ".basename(__FILE__)." ".__LINE__." */ $sTableName + SET ".implodeAll($asQueryValues, " = ", ", ")." + WHERE ".implodeAll($asConstraintsValues, " = ", " AND ")." LIMIT 1"; + return $this->setQuery($sQuery)?$this->selectValue($sTableName, $this->getId($sTableName), $asConstraints):false; + } + + public function insertUpdateRow($sTableName, $asConstraints, $asData) + { + $iTableId = $this->selectValue($sTableName, $this->getId($sTableName), $asConstraints); + if(!$iTableId) + { + $asData = array_merge($asConstraints, $asData); + return $this->insertRow($sTableName, $asData); + } + else + { + return $this->updateRow($sTableName, $asConstraints, $asData); + } + } + + public function selectRow($sTableName, $asConstraints=array(), $sColumnName='*', $bStringOnly=false) + { + $asResult = $this->selectRows(array('select'=>$sColumnName, 'from'=>$sTableName, 'constraint'=>$asConstraints)); + $iCountNb = count($asResult); + switch($iCountNb) + { + case 0 : + return false; + case $iCountNb > 1 : + $this->addError('Trop de résultats pour un selectRow() : '.$iCountNb); + break; + } + return array_shift($asResult); + } + function selectValue($sTableName, $sColumnName, $asConstraints) + { + if(is_numeric($asConstraints)) + { + $asConstraints = array(self::getId($sTableName)=>$asConstraints); + } + return $this->selectRow($sTableName, $asConstraints, $sColumnName); + } + + public function selectRows($asInfo, $bStringOnly=true) + { + $sAttributes = array('select'=>"SELECT", 'from'=>"FROM", 'constraint'=>"WHERE", 'groupBy'=>"GROUP BY", 'orderBy'=>"ORDER BY"); + $asRowSeparators = array('select'=>", ", 'from'=>"", 'constraint'=>" AND ", 'groupBy'=>", ", 'orderBy'=>", "); + $asOperators = array('constraint'=>" = ", 'orderBy'=>" "); + + $sQuery = "/* ".basename(__FILE__)." ".__LINE__." */"; + foreach($sAttributes as $sStatement => $sKeyWord) + { + $asSelection = array_key_exists($sStatement, $asInfo)?$asInfo[$sStatement]:array(); + if(!is_array($asSelection)) + { + $asSelection = array($asSelection); + } + + //if provided values + if(!empty($asSelection)) + { + $this->cleanSql($asSelection); + + if($sStatement=='constraint') + { + $asSelection = $this->addQuotes($asSelection); + } + + $sQuery .= " ".$sKeyWord." "; + + //in case of double value input + if(array_key_exists($sStatement, $asOperators)) + { + $sQuery .= implodeAll($asSelection, $asOperators[$sStatement], $asRowSeparators[$sStatement]); + } + else + { + $sQuery .= implode($asRowSeparators[$sStatement], $asSelection); + } + } + //default value for select + elseif($sStatement=='select') + { + $sQuery .= " ".$sKeyWord." * "; + } + } + + return $this->getArrayQuery($sQuery, $bStringOnly); + } + + private function cleanSql(&$oData) + { + cleanData($oData, 'mysql_real_escape_string'); + } +} + +class Session extends PhpObject +{ + private $iUserId; + private $sLogin; + private $sToken; + private $sPostToken; + + private $oMySql; + + const SESSION_ID_USER = 'id_user'; + const SESSION_USER = 'user'; + const SESSION_TOKEN = 'token'; + const SESSION_POST_TOKEN = 'post_token'; + + public function __construct($oMySql) + { + parent::__construct(); + $this->iUserId = $this->sLogin = $this->sToken = $this->sPostToken = false; + $this->oMySql = $oMySql; + $this->syncSession(); + } + + public function getUserId() + { + return $this->iUserId; + } + + private function syncSession() + { + if(isset($_SESSION[self::SESSION_ID_USER])) + { + $this->iUserId = $_SESSION[self::SESSION_ID_USER]; + } + if(isset($_SESSION[self::SESSION_USER])) + { + $this->sLogin = $_SESSION[self::SESSION_USER]; + } + if(isset($_SESSION[self::SESSION_TOKEN])) + { + $this->sToken = $_SESSION[self::SESSION_TOKEN]; + } + if(isset($_SESSION[self::SESSION_POST_TOKEN])) + { + $this->sPostToken = $_SESSION[self::SESSION_POST_TOKEN]; + } + } + + private function setSession($iUserId, $sLogin) + { + $_SESSION[self::SESSION_ID_USER] = $iUserId; + $_SESSION[self::SESSION_USER] = $sLogin; + + //Token + $sToken = $this->createToken(); + $_SESSION[self::SESSION_TOKEN] = $sToken; + $this->setTokenCookie($sToken); + + $this->syncSession(); + } + + public function register($asData) + { + $sLogin = strtolower($asData['user']); + $sPass = $asData['pass']; + + if($sLogin=='' || $sPass=='') + { + $this->addError('Empty mandatory fields (Nickname or password)'); + } + elseif(htmlspecialchars($sLogin, ENT_QUOTES)!=$sLogin) + { + $this->addError('Nickname: HTML characters are forbidden'); + } + elseif($this->oMySql->selectRow(MySqlManager::USERS_TABLE, array('user'=>$sLogin))) + { + $this->addError('Nickname: This is already a user called by that name, choose a different one'); + } + else + { + $asData['pass'] = self::encryptPassword($sPass); + $iUserId = $this->oMySql->insertRow(MySqlManager::USERS_TABLE, $asData); + return $this->logMeIn($sLogin, $sPass); + } + return false; + } + + public function logMeIn($sLogin, $sPass) + { + $bResult = false; + $asUser = $this->oMySql->selectRow(MySqlManager::USERS_TABLE, array('user'=>$sLogin)); + if(!$asUser) + { + $this->addError('Utilisateur inconnu'); + } + elseif(!$this->checkPassword($sPass, $asUser['pass'])) + { + $this->addError('mot de pass incorrect'); + } + else + { + $this->setSession($asUser[MySqlManager::getId(MySqlManager::USERS_TABLE)], $sLogin); + $bResult = true; + } + return $bResult; + } + + public function isLogguedIn() + { + $bLogguedIn = false; + if($this->iUserId && $this->sLogin && $this->sToken) + { + //check if token is set and valid + if($this->checkToken()) + { + //Check if user got a actual account in the database + $bLogguedIn = $this->checkAccount($this->sLogin, $this->iUserId); + } + else + { + $this->addError('Authentication problem, please sign in again'); + } + } + return $bLogguedIn; + } + + private function checkAccount($sUserName, $iUserId=0) + { + $asConstraints = array('user'=>$sUserName); + if($iUserId>0) + { + $asConstraints[MySqlManager::getId(MySqlManager::USERS_TABLE)] = $iUserId; + } + return $this->oMySql->selectValue(MySqlManager::USERS_TABLE, 'COUNT(1)', $asConstraints); + } + + public function logMeOut() + { + $_SESSION = array(); + $this->setTokenCookie('', -1); + return session_destroy(); + } + + private static function encryptPassword($sPass) + { + $sRandomText = 'F_RA-1H"2{bvj)5f?0sd3r#fP,K]U|w}hGiN@(sZ.sDe!7*x/:Mq+&'; + for($iIndex=0; $iIndex < strlen($sPass); $iIndex++) + { + $sPass[$iIndex] = $sRandomText[$iIndex%strlen($sRandomText)] ^ $sPass[$iIndex]; + } + return md5($sPass); + } + + private static function createToken() + { + return self::encryptPassword( $_SERVER['HTTP_USER_AGENT']. + $_SERVER['REMOTE_ADDR']. + $_SERVER['REQUEST_TIME']. + strstr(microtime(), ' ', true). + $_SERVER['SERVER_SIGNATURE']. + $_SERVER['SERVER_ADMIN']); + } + + //Session Token + + private static function setTokenCookie($sToken, $iTime=1) + { + setcookie(self::SESSION_TOKEN, $sToken, time()+60*60*24*$iTime); + $_COOKIE[self::SESSION_TOKEN] = $sToken; + } + + private function checkToken() + { + return ($this->sToken && array_key_exists(self::SESSION_TOKEN, $_COOKIE) && $_COOKIE[self::SESSION_TOKEN] == $this->sToken); + } + + //Post Token + + private function refreshPostToken() + { + $this->sPostToken = self::createToken(); + $_SESSION[self::SESSION_POST_TOKEN] = $this->sPostToken; + } + + public function getNewPostToken() + { + $this->refreshPostToken(); + return $this->sPostToken; + } + + public function checkPostToken($sPostToken) + { + return ($this->sPostToken && $sPostToken!='' && $sPostToken == $this->sPostToken); + } + + private static function checkPassword($sClearPass, $sEncodedPass) + { + return self::encryptPassword($sClearPass) == $sEncodedPass; + } +} + +class Mask extends PhpObject +{ + public $sMaskName; + public $sFilePath; + private $sMask; + private $asTags; + private $asPartsSource; + private $aoInstances; + + const MASK_FOLDER = 'mask/'; + const START_TAG = 'START'; + const END_TAG = 'END'; + const TAG_MARK = '#'; + + public function __construct($sFileName='') + { + //init + parent::__construct(); + $this->sMaskName = ''; + $this->sFilePath = ''; + $this->sMask = ''; + $this->asTags = array(); + $this->asPartsSource = array(); + $this->aoInstances = array(); + $this->sFilePath = ''; + + //load file + if($sFileName!='') + { + $this->initFile($sFileName); + } + } + + public function initFile($sFileName) + { + $sFilePath = self::MASK_FOLDER.$sFileName.'.html'; + if(file_exists($sFilePath)) + { + $this->sFilePath = $sFilePath; + $sSource = file_get_contents($this->sFilePath); + $this->initMask($sFileName, $sSource); + } + else + { + $this->addError('Fichier introuvable à l\'adresse : '.$sFilePath); + } + } + + public function initFileFromString($sSource, $sPartName='', $iInstanceNb=0) + { + $this->initMask($sPartName.' (from row) '.$iInstanceNb, $sSource); + } + + private function initMask($sMaskName, $sSource) + { + $this->sMaskName = $sMaskName; + $this->sMask = $sSource; + $this->setParts(); + } + + private function setParts() + { + while(preg_match('/\<\!-- \[PART\] (?P-h1!A$cDL^o9wpxGOi`B!zjJce7zZg@`(OSt>^GoCCZtt&c3Xz>_I$K zRsrVFC)d_Yh(WzU;W}>#=2&T!uPtyS#llwQop+DBfk#_7HJ{c?wYl%wFv!6QWTd~U1-u&;8 zuIlt3 u +rIXWxkk-3TC>}HzmHM0LR~zm9$$q; zL?8MED#ns-kjIbZ;!w)R&`OuwlIK#qWy2B%O%ka)XI6I|Qi {h z2hKYcHDav&&o1mY337UEg<2SW q*xkM1SKP=EAD;lKTfC4wa-@x(`t<=p z0q5#8;(~?fr0%NeKqb)0KQDo5ipXw5hT|szLY7Pc 5&j+vpT)Z+YtD6mibz* zGXE>pCI2gNfOvFt)guD_YfH317DaByX4U=Mu5`w&t3UL zS*sn5c4wutiy*ogFJJ>m0fuqE8C=a0@bK0#021n{NUnmC4SWPVNwjCxG8)^!W2{i^ zd=at77sXMYgh4)nMYYm_edo^lJk8tJU~t(9ArXUxu8r2-W3KE9_+R~}zRGS|(Tz{9 zUZn|4ooKvrq{6~V=`|F5P-G(Yr_~&dXR~EuIqH4a)zbzKEY|;0fhZZI>c-GQe?!3E z&&>+fd12nwt1WU*-a1+So#d7#1n#-+Wr641_P+aOUQB|3pKPTZ=O!*chbi>=V1#S) z{u#KY_J2hj1Z`QXub#v6-oyO7vE|yMEWRV*i>ID)M6QAe9Y7dh9vRHOH&v4IkR3xb z#EhCN@afgM@d#2c4|D(z=;`P`_%C!c&o;fdM5 GfZ0krW2I&W* zJZLocTHmNU*__>Qc3gw0F!gU5Sb8xajDS9Y26Mwqv|-EHu^DlrHc>1->KVWp1-rv8 zp$VT$)_YtZkIP8%bYCgM=eXb+eGQ*XqyK5R{}lE?80Avk)o#CWVTSKcpZzgj#eP1j zp6pSzZzSoq(Q$ph)E^197OF1_$aac8GkLG7%(`tMeyCXw&J$cl&kHHz^nlrErMj|; zFExmNlJB~Btq@?Jx*lo7oR98Cvv36LPo$KjTUC>~%EY~Ml%||1e(4z2jJ9AoOE`$9 z_G3QcqepVNFxs$O2#=d<-b6&|@m?)`qZY-xi`(++{cf3?uF@&G2PJ w4H;8j3#PPPABC?KcoNh*0*Cfl zi51K%pCeru`#lIztZvLAmEy#o-M_Qe1qvpXYl|%#Z EOO`FIiZ?(=pQ;2R&4`=49qC-c^r+oMCX*d0t z4{4C9R&rfU)gI^a?DMAE{W@dHR+O1Sa&m?1hvqIx!6S5<%OBVcO{ohP5))wT_Z9vr zvS7(d02_J=MW6E_!;H@sMnbeHum!t!Q1EASKC_tM<&T1rdR>C1swYA(mclpRG~#1b z-iOsN{a)X<;I~`_4>Qs;e3c0BpQ8+|GcFrlgW;&&mDnCy78G7}as`aN6CD4q<&0ra z8Cu<}oXiNmXw<#jAC7d&`~a_pm!L~z;m+= 0O? 88;tVy?XJ|7n^sabeT$Fz5X&psq=&ru&PeQuy(RXtd5GL*68V7IX#XfP(B=r zR`fX!$ENMnPa%=DD**O;kla5^t6&-w45g7aKU_i0P4MrI56jrAsl(W SDq~1?sD;VtZ>2|38A@j|^pQ*SbbtS^iRs`$)c+X$I?yf-zWUuUd)B!6 zv+}Leoc8mzf@w8al-or>j7QaktslFxp-Cgle~%$oVNuX48Wz-N*66CJlBL<2m6;5q zF=-F37&}{Vlp{guE9+Kk)8c{Re^bzyHZ1CZ=bDOwLzqn`ekfeL9cpo4wt;r7-}; ^eUAt9A!xMKzkhr%xvop5#fc|5Y9#OaP<*zc`SfJ{OeNd!MO|&FoxsCLDT^YdwEX z?3Pt-Pt?k!@9mTbn2 fluE=a6$4Ykqec&KSJQIa1=nDrj{vm?|U1RRXa`c@O3_I zmyW#87gXUrG}+alI0+yzZ6isTz6_%@?C+O$mWbw%Sas$ -B0;sS5U+8zWzP$h_xCW;}+@1eokmm@>ugLYHUhs#; zA)}B%87J<1j-GBl6nfri#}8^j9NbYml@eOZ(5GhZG2n$LX7!))t%xL=NEKTQc^Jcr za-2`Mxn*kKyKrES^UFX}8llCXRi_5lsmBbzJJl*U|JCsSrRFNX?7e*g6z_oQzBEDz zU=nC~26-nOILB(im75_jynf6d@n4y+xjdsrYRIycIQ}&ZNy|?l=f@epNfgvem6{8q z9E18dHf Nwz z(-u77eSp=!j98WGMJRl*n@?kx%(dtR`5`-ez6C1Hr)N=LiGw_>T%(i>s;wKar70vv zfh~a;#ql5Q(|HhB;RV;!4lJj={N-fk0u%nB@q#E_8b(=)!Uas6s|-8T2*& !hKgt zGrqHQ-aQihg(gCB;9Q2!rbJ8{le=51y7K+qy0I=!dine&@cbETETd~o82nrC4`}0U zc_NKFSzT8rlXI(+4 4%|LsA04l}P zqb>z@U2j_y(=#X*Ca*WH6N{99I$W=$p^+t(;p$Ysl&-XHSl?|aP*Du{WxY1oFkq{t zCsQCugFlg}zNN&Ex7~O!qu#e?uYJ|=am?cK3n%gO{Y~Gbgx5T2@TiWa&)4>#lH*J! z8v=E)AC&@Ml p1X<5xHA>o+_-Ws zp<5gNAMP~1w6>keRnK01ZC`OOq(qZuvMJLd2!R8@?8zr5n}sr;^=`Qj)04zG=5l{e zXIiz0$(k=ez%i>TRn}KI)(wZJWmH$f5~lWID}*{DE*mE6Xlf6qu)4~8^VIvy%-!NP z{Y_>2zvyPKPADm7q(?lf@m?5k_&-sfnGK};=|*Fo4aGA0b80Aj(g7N)XV13Hr>Bh$ z8=XX(XSm MNw8^PkTx#ge_hAmGhyE7p~#pemHZFyJ}kO!j$^MXU! ul7HXmxC`!U|^J|gx869 z|GiG}hGhxJ9X@jPH#Rj8;N=uTv$RasjMAz`oo7(3XGtY{cL5zot}rOJ0E#8myH}W! z^~JZx_!daAXq1=k@b#u$=2_4BuGEO-2s~y%?KIuEE({u97Gp=2w=c2HTO;QOv#yeL z3hWuH*_D9sB=Z(K|H9Oyk9QuahaBMpD>>;Z@4a+gP*5tMQ5`| *3>%MpCF8e397pH2I~FoEG8R^>o*r?L`@`8;DhbNYR5q}sUZgj+-Ne)dOCxjE~F zVyG+oRO70Dg$w-7AGJG@TbFSd)(%C(J_TKblCcvn!h+xFrzZ4MA`bt_z)@2rrcO}Q z%tWdzo72yTd&tZ|y2kpSAbyUyFH)^;R%vel&Vr3YHSn!lEa#e0CqB!R$6SSu+ne(( z#h%IjPwy@}1KYa9DE-Y?Qnw~K1tR5;)lN-AMB=@b=c087^|ML-({$FUa`wY-@BLf- zZu8^?#BjT!E1S=9JgqC5cMl_qjZ#(DHkVubx+KQxdh2VmL(JjR0g1kUBF$b*UWm0q z3C|3rjshs=c>(%kzG}JxjL6(A%1lhCgf7$7M@>{}(4@v*m#u@{KjITU=%JmoLk77+ zFX5}>^3fxs;;qHZ;t+Iu2)eu0g<__0HOG*k8V@fv?%|x({=K0@4v-7p1z$Qb+(R)8 zU!`C;82UrRTZ{EP7dr%gl8wY k6 zJ*wfYV7Oi#8jiE5lO|cRKUo^=Ihb85@t`+Fu~zFQ!7brAR)-P_HYCX(?#JR92~24J z?T1?>ff4>PuCqh+e(hE1CG3SnzkMXBoC9TQ30<6HQnZDczi$W(SC+WToW~9?wo1}p zAMgfp;qJ1$-;8mkh^O$&R5haA093dWb^mp*T`!BtZYWJZh%YGDm1|l(_LUGMCEFDz zn*LvRUQE~c5|>!szf|b-%F}2}a{P#0{^e|NO=pwWLKJ&-SB{F|GJ@@wvy;wbE9l>G zFUr-x)iZ^GP&C!HCD{80oH=V)GOi54_>FuvmsEzgpp0?S`$Oaz9v%79$Cdc>IPz zxOLtk6Lio?eIo8WSd(2gm@V|Lj|q%DwZr WzQAAxtII-3r8Ka$8%q+J1 z_oYLtbcr^eV!-!v(5;OnJa=|FNvAFVS4jX=_Nq3jN!=I`@|py`l-ORWOe_K5n|nI( z;fG=TNnRSH^wms}BacL$wor<+qs5Pom|L9(N4Frc55M5YbuGkO2RhhU!p-yQtFmfK z>$_GbYL7lm&w1>$3_lfKd)mj~3cOfr-59Q2Q$*R-*Y@wmPB8+*&ZeEf)Aei~{f+WJ zHBLOO&?xj=2AjmyJ+4nqvD0P4F*)=UGXdTDA*GG8+4LL!T0?x%qDiujuUcycxZn=j z8BZi%-uFHH_PY%EzAOg3%6xbKkzLx!0mrLvCC(nJi1ncmGijgct`PIElGLytnnW)c zj*zK>>}f-zRb7%V_TJNDmVZrxcf#YTVm?2D(4>Tb4ZX#$*^`~fb78$soid1bdY_6V ze09R2dr{eCBDf~k`)V#FC=;$GfAG4tgQp`rdEr5HZy%~6iT5K%8WAwW8!h;hylq^c z%bjQq JCg*z7(J?J z9#0CtxO?R8Vk*dt5SIPErkRU+XYP?92JgUcd1CfB39fZ&@K4-mCfIcPq~tPR-*FC) z;s04s=PnwRR 3E{uh@3TJu2lr4Hhf`CbzZb- zg=WTufY~E0Y+hS(BLuGk-y$*%7kr~80tc%ss{P5%>m5HS_8SHjRT9-Y%T3HLO)~$E zH_|7&BgSn_4I7{)Teh=NDN^kpsBXOVen_<5SB_Ap=BcN7!hvoBWBrSF)W9Zyv8;CN z3hw$?a{hyp__h=YH_aU;+e&DI?)h4CCGu?9Ax<5+BxuS#>}st7WB*CWZQ3-&{a%Ui zJH!YU6&|4I=p8+B*gI?Ovo_*j<=2%P=KE(S?MGyS39#sDeKOyysY#lsSFU{fbBv1j z`RYKLYq7~Rv0YI;ow6{3Yt<(8G{8C=y8VLd$2+`;o#e;VMdb7-ocC3ICjV0O8&8_= zCyXmR{U${+pZe5fy_AbAhg>D`{e)y;(U-sP{DTA9vn(?j&d<6wn{95NYyQ@EW0AWA%b#Qcac5J>|}AW&%FA%V2*R=-dVe@=fuFWgc8D zQEzXv6OND1A>j9wiuiBR(JjvUo`gGWPVKht9i=tEyu{8`tZ+k+INJ)R(Z*3l6W=$e zh9$38HUbBsh4fiPU+T-d-^@f@1kZ1bKV|~KOl`-E@Z{A$=ZkBY*5Fa0E))3uek*XU z+q%^E#FYw3z>`q7{7a4PSLHj7be7G4?ddS}RmCs7p Nw |pd=N5J@A&_HgWPFQ+X-yko)oN{JPv$ucf1{>6xj~fxIeX=7#!Ae3z9upu~<# zQ-vrU94~oH?VG99=ERQ2Ugo`i@R7gXw}+@-$ M@*`wqy??)ScLJv##k}2zSZ0_Lzx?GS5j~QT7=OFT#t=fdI zW`_SF74RFg^;kyLlvbqByNVJ}Xf*QQ`zkZFcg&aJY^vTz3~uqVvdX&_e8=Vj&Ed0e zt!~JFl>ccHe4V05O?X4#&qn@c6ZpMEY@czsQ?t!M?(6t|K4J0XpIAe_lwARl-V8HC z)0r~&zFa@@-lm-9R2puLHaU(W=pfeJoS`>eu_NXgD$_pv{_T!R?F8 V9F>W$ZT02^UStS+y2X^UO^!1i+oOwdiP8rLzFA;7j1zy1R_!z*35Ds%T5^J> z_mD8mY)>mD)-&PNr`sMp;3fOLe)brM2OelMEBOs_1iPW_y82VaKBh3zyt_%|Jicpp zb`gB(aL}YG<#mi*-fvY}p3b^gZz!CmhgbDtQ*NLhl|!-kylyYIaES0v>*B$weTr7D z(pPklgPqx~R`z&R&>qVExcqoq>~$r-%f(laQUnD~sE?#gH;yjkMsXx(q^eHzfC$ri zVmb7*{w##=@N&mhbkxJ+;6+c1B<#o?<1z|$brNrtqo u}F)Ng(9EM|WGjz~%2BdJsXn98r8(H#7g+5KdaL^BrXLXxbNuTLxfw)43_p$ZV z4M;&EY-c5Q%Br;g;ty> zQz<|-4KiHS(UnX>L`e8zVAR)%v$~bTtuIk$n-{TH74w5Mmh;O}lY^bzGQc0Agr7xs z328Gkt|NqXTH2bWTRLR)Yy|v$hb^K~*qN$YYjzv>;A-W!`61bW&*)FG+U?K#lXXtP zWACG7Dw=A~V-G=ctWM;Ti1IvgZ`ph!ep#$$HdNP38`Q>(BOgS=XyabD*&x&de4?@| zGgCyc9<+(!P_I@A#de99-DUzT>c?59(#kGs#}d&Q{(&b=wGz2cW;`~&mZP8-uXiR) zlO>(f?mx2GfcktnYS)#iYOL}wbka1>Bf~QYei>!HMo^LeAUiS4EBX{k(Zwt9Y=zJj z7eWLp9rJE^B`&Pfl~(Hf;)kj!QF;!&uxu*H%aZLn;hynvHO&gQJEqvS0|rYmL>s7A zPPjB4eO{h#J8z5Zmvf#1JCj{o=)}+i@Z#8G=JUflBGFxfTjTKW{^0a3mso6pwnG0I z%yW`!AjB;D V5ZEASt4ogBEBTh+F7iH@)yxV@5DOwsD7;3JK~f6+l1Y+NfX zqaNvu8l;=Lz!ad%gf?{Rz;>6!_mRW0W_N_o%honYJ#VO~9#p)BHJh3XigUnTM~lb- z3UG#1lb0Mz(Ph0(uwML;wA3fnE^`(E>~ST>xRoy~_fGW6vX+2f;;Gsb3>p4rBP4qc zPkNy)?i2gn3z6dDy}V$vd2Ot29K8n94huZGe7Ux~;a{8)R8^UZC%sj1;DYXex)6CU zxDG*`^G+3Ih&JO^MWVgfAW)d$h!jN=IDF``%GjNA3^_Jm)q5CPnyXhc;N_I=?BS4$ z-b`Z|>ny7fyB>mdi99y8 YBTFTn`{LVhnC5;VCVc;oU5KRv(Ais^QAF_!7( zhLmt){%Cjx4yVl=a;3u>8su`aNRmU=X=J$kk=^vOxxNu{f2}VthI?#OM(&WKq>}Ah ziRU^L_H%T^=HPNa!HE~?*JhE@nDNE^ur?srXZIxRT4_-us=Q2^BD2@+;ZP{M?LYPR zb8Qaz1)}$nq(Teo(Y-yW-;&ylaxZ`3SR2f)f8y3C0S6zSM#U4%XW9C$wfG}e$a5u& zAq;q51GmB88`*z%wW6Fnb=g&91KmI|&WxF!^8ONF>{~&J1WH)%>k~X2IB`HqUi3FN zU04&G)Gj>s&G0Xh?w4_Ga$N(fd1HZrOW2@u&`o8ExZ^ej00~k&jc4rY?2Ei~%VtM@ zxqcriT@Edd>xX x zhs1=NkDnsB2S+W>>Nk%^a?ZdR7r9MzZ}5HM+5}Cl(|y6)#;?`DJu6JawZH sxxI!Ai5E}Hxf~yj>4I(vOIGJ#z!rQ)?X%8AF`W{k$G#~e1Mn8 zMm*WDu(_bTv1kQfK}vHFhzobtkYIj5--eQY2mtJ`$e^}{X8G;duDw0?$AcsXCe9$i z@_}`MhWU?>6_^uL5pMhOe~u~wra)hHhe6U2;txdJIkC@5LS)UcZROBUdnHKkW&4tC zicAs&1it$7ysfR_gPUPI)Q(3j0UWt{KgZjd`a&m|47mi$TF1r6E>%69uhoV9{tYDy zCp?5=BHGvzjloA$MY(v}z*GIN=FGt49dY^tVU~ImQ!;nY?OD^3jCWvgD-TvQUF5wZ zb0(+8@c7_nz-sLkTi{OcRyE9J_$ywbc{p1Q+^AkeOXcYdm1kHeXS7fY7wlD8wldbf z<`1aVun)=?`95{hN!9%lCq2E0zdepKRTP>-ti1FgpVnUfEbnZSMWNvNV}T8)Yp(i6 zj(yzF68*whlslDljTi8I>G+05vX!KTrLW^>>(pzT`f*{|%)O^roQ%Fk`vE8%{`QSt z>WjQ-t(HucMHWSTpY#=GrJPPZYg D K70rw2+Eh+?@^De5yFp4|=sDBbF`l>8 z*+{t#RD#ap&u+A$(`obU#lfeMWla0cmz(wa;oh`yJFwK#^rY9klCUND7ZM(n({0dA zq0P@kjcUd|iLR9MFMN_B2`Qd(Q)IJduIZ0TeQ0G?EiK6!dLt-4%#tV%5E$@96*sIA zjUi#n#`HSbp8M^EQ6=nS<)uP}fy*7$sZU^Qe6W{JN%fd$=H*3~Ke#v+v-P%=FjZ#K z zY(UDb+ZpKOvi8>>GZ4&XaXH|?W?{3S$CBtZ;wDqD?Sf@N`dB wu=ZD1bjk43RKUk&qB11VQ{@AdQ45DIqmNq#TUV-KD6sFeC*P7!pd39P&9(K%_RB zslbp9sZrk>-#_oKySH=SJ@=e*f9ISl=cjAEikE2Y%VMz(EWn>REBn-ov6u(5Xf#d# zwbEl4$ScZwu4#E$rtrg3Vs?e)+VCxdJZtl0Z3|MIp_TvgYS8bNq-+~oije{o+1g}% zTD|bg5 RI5aW& z7E@aJpGkbkKDajD$oi7=c5C;|=>2i#-#5LylUH=E!W@P~7#29$icde7Hoej{=`vk3 zsq3Vcm1#sL)R=3wK{EsQ{S#>1>bFvwrf(^QU@y;4O1j+?Jh@tKIeoBn{eJe)-A9TI zTSknvUG|F2 XZQ zPn6b>#x90p9yI)p+ ?u-F7n0LnR zAvJiXkxvvl)V$U$|Cb5!8XX*6kx;RZC{lYuU%}0x?;X0k&VMd>0g_QFclD7LI!5io znYk)^pQ{Znt2ivgNH?YyQSp1&M+XmbQyHPQ1w6At8JtLixN^-igZReaq0hqOBnQ9X zhD{AN`ywo7q|JFB*lWhk5SG97VO^ar47X3OT{+SM=-eOyh3d`b^nqB4Ia2}Z01Sa) zA&b9$U+m4Yk@p^ZyYZ7-c-k98vUBdijbI@~S{*pAWttoa+bZj>_kv&hwEGGT>Hgc( zMo=Gq)vLw+qLEIUaSGM2A;CITO?A>NOe=A+BxNQzx@OkjQYuFs-XHaQ2GW)HPX%Uo z;)}3ZuIIPU{oYQxH;Po{ewKcGH@WwfBC*U{d0c4RtKI8EJQL32N=)@r`t$rEI;JmO zhR+G+ug^tet^&Kmyw-fShE|6SS>$cO3O%56g#<{eDLzNY-8Tuy#2BvjO_`b`=ZF6s zEjGyw+c+>1{+=x_Fog)9`b9$Sev?`G_{7I2y>lzu-;uBv=jqq<)w-98W(S9@VJceW z`x(#w0Y+kh0vN?=NT!gn+UTDr%#JZO24&$dFJmuF_JoGvTN%8RKjkv4hwKsuoy*AO zvj?~IIekIOD`t?R;{ET;DTjpl1+$qY?>)cO%9TlwLG5IBtGJd?DQAIux?8k?XKB)C zx$i3lc@!dzz@WtL2m}>%qP|4sbj}o +?Op= z8?e$N`sIA5*(}u+TUkCxmvOZ=RTJDQ0lQIs{B{} u%D)rad`UE8R5+&lR85GR6w9NkPBni?ul2dT+P_&7d+6s59YasZ z0^!O|kSZ|3n#%zR#~v7!-vbf0xuWA|^k)#O*Pt1RAR_RuYW%)E+xld2p|9T89VB0I z4)M2l9UmZRQCwe^<|gav2wAp7T|>dMxcIYx9bHZM{f`X|Ae7wX=uDT>~cMTqLF3z(joBeE8pmyH7 z=)fBcaizUqaDY6;&HFNF7P}N2` $JL?T?VAbx_s5Nc3 zq{o24`vC*3n_dA2Bc)-GbfXO3*8YA4dWm%YwiUFILs~i?Y|$>S_mwp>^TRSI_NbY= zY6-a!b2E?{^JYui>rR2O<)-#akv`Gu65qgD$M4_zx<4|LJ%1GbG9}914l4IsO=;BX z+?HfB-{GzB_3B@J%+Ys;^blCPzx(&AtooN_KW}9AiD=Kbh_IZHqAZ6W=A5^AD?a{X znbbpT-8K}R&$1Zn`8h%v9^D~)ny)ySlPrK*dZ5s9i+CqjMSBmunZ@YA5*og0WUrRz zI9Ky55QrHa6uw|CEgkbMVc^3+>Sx{15=$fYSkd!%jyR0F3v#hqfkFw+p`+;;C1+p| zTscvERmz!GQ~qlu9n0(AtcE$Jq->Zjxag!C)ifEBRtDQ&_a%OTO1&u%6odq%%H~iw zrbBv=p+i-6>&;t>DY1NO+w`t66O26mXk6}Va#0xkqmhZiQAiK|BR}F6El$x8Z5hgz z+CPI+z4b1ZuSM^T(> WNzssv5-hqpR zdi~T|eE#y<_^y=HRF(1^YU~ XyNF}zpjPltMSe|JvZg>pr}3tsMV^4F$XQK$jCgg(>=WJ*_fC#Q zNQY6rU~S`MUPpCbV~}KF&INA!4p(-~9`?eYw25$kZjp+**8Yv3BZhJ8pOfv7>=-j% z?03dB3c05-yI++L7KQDnI30zs)m)LEU`Dn->gM{gKxlJf=TDlx23HY;?DClieciYW z_91ZK6oJ9QJ!uQ4U_l)!4pvq)gx7C>TAdn9;9wB_Az{VDZYXGeSL15LqH_V4=D`4z zj=xw>`nF_rEQW>sldSovi}XoJqdabKWoA1bk(;_zB7R!y*cLUU*A}dqf_PfNdyXdL zj98|lA4uGY5cJtT7O=CoZ17LeR>v@x?a`mZ@IPAIjjuZxWg*Nr*abAT1-=ZtIW3jg z!6WWgp0dcwu&PQ9mt)QOIbuGM67zwD{X$X%xP3ZRH-Q5>9PEwHAWIg91FLraVlPh< zn{wC|TX>+Ve}89a&wcVl(peetxBQC7F@Tar&`w3tB#%g5{Sn@Tmqzjj3!-XbL5tsI zmQU$H=fBJE5eXVV(n}_qgNrz}q37Wv|8i`Cb|Rm$b+zxnbM%|9*?dOA4^4x6-c|9& zQITAXS1<&TD7Z)ot=g}EL7DrYNIJ?ow>#XVTbP6#oj-RiZpnPGtlz_1t?YGN+|9J# zB0qVr6{*3*xM!Elda*8pezz?}Vf7OHIk+HFcT;EY>lW^crOT9_64uFBE+e>6j`aMG z!z2zwX *7iIP5o(-i ~hs3J7o{$Kw9d*+%0880ZWl8D#7)=D~jlOs55b@W77YK@-fu1#Xg7U1$E5Z zzrZfy{=-`M`eFWIRc#Bxw(tttH`}i!{1BhN>>~%a5lI`KFuYdb%5PdLC`|oA0`C-Y zmxtb&gP_hQcfXhSaAT0g>fyal;zHkOJh4gxgMDolhq=69Wy|>Q{(@yXJE)y8?>;F% zQvYNb29gmanJHhz{!RegN@iA_{$U}<&z~FERPA5#pFn-7(fN&MtzT^2*)iY&EvF|2 z#(Cqy*d)+6G;liH>%6797FFsRK#s%~_sg&yT|2kw-b4&(Enl1%G(ZO~U$9j=8v0Gv z@9L6b)A`^7(!d=ME!HdUfBS@|23}7No5c#2#cIZBY9RB#k0JuxoAm#z=y8s$B&Xd> z2m9f%-d0lt43@}gWVZfNh^(s;*uR7s?bNI2>i+uusUv+582{8sviVdVxgp3_tCh(5 zG43&Ro$S OJh^-c-eR}|H rv;n#62e8^VEUMJEZn3jL>#b;ries8!6|Yl%Vq@wvx~2D*NtCGiK|RcNd z z*oDXe`pTDCn^NR LWs?W7&Q&sOP-I^ER5UN}{y&M$U zigzux87+kR(48RyWxfuZ@R2| I^u8_#8pb51u6FY&vS$ zJ> 6f;Ll*xNO|MJO?06Y6>K-tZecHq)}J!tROXK ze+(DsUWzXiv1TOAxU`yQSX2+r2H8*Ic?_mQ`c|#vFNt$SqQJC1XMpCebFo!JYH9F{ zLmHH}A?(v@zckXYyysDWbYwq)BQjg#w%NklA+`I&qvX3jhs+G5Pd#B^@-*5IpX+c9 zk1nci+F7S3hwdBX(6Y|E`0~L#g`#PjMu7=Sud`R774Z$*^TSF{`nqQtbOgZ!X8Jq; zqX}TaU0DB6(z_CJyyP(vWDH_v+M}!qn$C37 r@&3RWi9!s-}2WdCg%OvkJ8NRCI z=Owg |u%~TwD)L19>7c-_U9NF@3YhM7PeT$~Hqd zizid Q K@+(lQcO5T zuq>Y7=Zt}!gB)_7?9 taf=P2;~$yq8`OwYIM)j#bYn_`Azl5(P0o2
0zd-RzzV}f zwC|iL>=>-eQW_hXFuPPHSqUBp4i=J*M}pgj>pe<6o^0XT=ycm`PPAC?0o{Ol={=yi zEo>&sm--kJJ>RK|U5dIjm+y6uqXVAIDx|V?A2rxEPz$nhgITx45AEFd$yRMku_|&2 z8B#H}>hCobiga8~=BLSslEB7i(0|zfkwT%UC~p;>#wi2X>h}g>qT*fMSKt #bHrRJ>m`m&&APfFy?4x)r&^#%w{J>`BwP%)?v^I76c~rrVESA?;vFgSpcX&V zU^0NDd(OLwShRgB(3LJTJg)3zC#F7ivDb}`l^7Og>pvGaVuJDqT NhcR)RpQ6;6G atPI_HdS5iRO z@Ia6V37SxpdsOyRD8f}9ZrIqB%YjCW(}t^`2d{mi&Ln}E6ok%}Q?+7d%Eue8;$)ze zY7-*ly6t9$5Xg!7yK4mG99!ilWyi~|Hg9!zzZmePG!**2>Yi!*{|!92=yvOT|8bEZ z&V1wX`ILhHMbDwRvTzu+(l0V8-2VE+N6O6~LxFoc91*W9p4x*~a{)S<`WhALc2WNU Du(tyf literal 0 HcmV?d00001 diff --git a/images/bubble_inverted.png b/images/bubble_inverted.png new file mode 100755 index 0000000000000000000000000000000000000000..18375189607ba0019a1fbc0e5fcd7b25b5a6212a GIT binary patch literal 22464 zcmY(rcQ~8>7eAb!LhV(xDz?^YYu9cmsz&Q$)vnsRN`%-|t15PFt)lj(h}~A~)-DoM zP%}i0i1FP0{;ucuT#xGt@rV1q-{<{4=e)*|I3ojXx~rU5K_C#Fu8!tY5D2^nykDlG z1is5ZS@!^bQ25=~{f`RxLQuVk1%aR-T}_Su0&{or;JMr;P5ogeQ$yRN$4>QlYF#So z*Njl{$U-uy@T*tr%as39S6A0!WZfe&vLdw@5#ie;W?D;VB_;K*2ltulMN%INH{dPJ zI@G)tH|D3B0?eeO{X!4Q3=PdN!MkO QOibj7h)z?` zJXj{Mq2}XTx@U4Mm)|K~*vnh!ALSeug0+QHPy(McYF;NnML@8R5g>RUubc+9H9|%M z%Z|QAgU+-KD8pyugu!AzicYX;ag>S<`dDNzBs;>t2 D@DabPju5P1Oew96a|jFrnVHuT61vb+z<`;}yd_()q#fL+9B0 zp{W!bTA&(`c`|F5@@jZ%-HAf}o9fdSax_U${49lrYAO!geH?86<|YU7Sd?F`@jepv z wTu&;||vXWoUX6HZ}E; zuov eP-?;rjSC5oTFi-Pw#d46Bx*&N zir|$PXd)_*Uc0_SH+9Ep+d>!F;x1HCXk{hQ(eS4!*P_A6faZkUSWtH`^~Kv%!7|N^ z)h8)}>3S(LRw+39I3*9>0r%`?4)LVpdlnh6H}^mA#Q(OWAxA?F;#=>8CMkiSCj&9~ z{CmOEd|?FQnJ@7%5;l|4@VripF8&bog}hs0`EqCe#w(;D+awj?NP@u=9ZcbKtj~nY zs;3eA0;UfC+uLA>8_x5a{fjz7Jz%rQ`Y1}!i2wLFUC1?!+?m_sXidE_91&IGswAUt zNoN-fgatD@+qi-4QaPF03G38r$NlD|zr-ZUpLtujZnzE{{jx*{^Pb-mOMgSdHuUja zYzC}A(=A+jEn24K{7p93CjGQbmFRmmWgQa}-6v`PmRnJN3#f0u&ZC7~DQCYG7{>(5 z=#%c--k*>ONWNK@pl?rjPY1deLxEdad>;-RSEJvcnnj1_iZ>>rxCr;mhc1J+@KNmf zVWVeurqgHPi(#4yhR5i@^S4_;D$z)W==*daR;?#jt?%IqsWen?m@PCuFC0a3wmp85 zrcJzR9b~z&nrVYpy!hhae8TG3Jhsjysr$6}qiD>dl>dY|Y|@@J7DVdU0A*Q7cN0`= zFf}=nT~cMt>L?Lz%|t^%#Kl4j(uAvCT=mheV(>ycv(v4xIfBNg%xv;Qz7?xw6=W8` zJfKTzw{o?_k&o1*sR`tK#S#@jQ7vDXnSlid*eugkm?3Or5hr^VJ$7~(W9v#^*AGU3 zwvaLr;=67z$hSy4y;W;qG9_CtE(NKjPq~mIYf(oUzM~@Sr^`IC#O%66*^s{iX{eTd zzI$~Rls2+uHYy=0c~5BRn0NJ ;eJx&F5A{o^*?IcY{7#-#L?ulbH zi~ErQ7Olt#QEqoL{{|xv2%YRxLaLzM0cjxJw)iQCfmXf~@dqC{AVh|~A!hZ{+f4Ga zn}QFpeuYf99m^wnLLB*7_h_w9O9`bU&hOEies$8yF;*dP{44e1(8!32-jlSSWq(tl z_-=6xtmB !E^KB{8i8*-s{AF QqPe`P(=8lNh&Kg1 z5>@d$?je)SZj>JRKs16YJQ|cA{<_5~tF}4E$T#w=I|>1uSB#gZ@S6PlcT|%qxGO#f z6oQ=vm)l(l)t!X#p`k~5HAqLrex=KgA%f^FeMVeW0wWI7#$>2B8sDbMEdToc2Q{&H z0&DmUe6a9unfu5jX9u!)2Eq;SLL4O}?qKlYxA5SzFLjDEwusHMpG6O?N<|;FnyXG- zaCAvqW+knPsR60a`#o!o-#eIcw1+edRPU!2^8`U;D_y!zm4lhbxhTf&D;S$|W2r zzfDV}C8Fwop6OqndxCn77ejY&SrEf6+3QpWuk5QA^=i)i%zHWy8%a7y*sVxZ&hscr z!bo{J_SVo~$B*K2|KOW>v3k|p-=E|{@rhB?maf0LOj;h^JsBG$mzVsaw6CP1Lm2GW zS)Suwh@cr&37(aZw}!b}Sp2fcC&qw5#24K_QsrWqfH1Ie86g*$uSSP{5FP9qP7vZu zX2NxtZ1NQ-bi4lr!Jf-XLknzGGrCwr=Fp*MyvMx0n=J;R(CbuheWpLfTySIypt)Lr z#{^&zvGK8igSq$$^zvG`9@u=bLJ%$TIf5F_0P6f^=cz1WdT{?}hI|*CZhOa+*WVe8 zCc5lzv5(w)@m)VfkSI_*L1W~+Mn(7zw4}UPD8598ADQINJNKVSha4hI*(;2S5O?bU z3Ov|x2wO8w;!_GW@hsk#ng6&g3RDlqRau>44^xHTUHU3t00}TJ@PGH(zapQ~=T5kR z_V<;&7-+%gr!>UZBXWM>mU4ZIpEwD1paEXF{JwbzCEf}YEv9O5Hb0Omaskcy|6PVw z5nTiFxeJy3>N*P7t4;u5lt*_HB2JM^eL|dT`fFmgllgaU!uQo8dCMLDMsH%DaO~bF z8IqxJZzp=p_MYqbYhIUZr%Mjur2?n_uyi B;x#3-f3T`JN7<=~~oZ)$$_6<6WP8dn@rw1A7r1$3UPz9xD0bR2x=j znrk%M2zCe)Hx;4xagl>giJ#jGr7#d92So#&$ t0`?QSv_?bKzFr-ZG{ko~W+S#vrc$R$x+Z==teo4zp9oe%S{@;0Z^l*NEN_vXNl< zR#DH1+*PNowz{qXbav!m+|w^qNhlgn+T(l$`{CdOo0DLBdkvH4o!_qcK;R-T*LnSC z=3AV@ZX6d5c@*NRAlyVZHZ{dcJKO#bPv@<9Z7p?ot8K|BeIZAAvTiYknQK-pxXSkq zQW%aST StONZ#0|kZUn 5F~yoNojO+P;l|5i&e|?t>J7&va*J15!8F{oDtVo wAt(-?LNq6>)vE>J`P_se;3g|OfIEpIGEFr=uo)Y%EjXwGFkY%l07 z9*OvkZ24W}A0mP@997x7Apb?lT^5159>Pv0%3=D%)WYJ4jXlFHuEmcz^0SYSNhl$7 zKc^5nXI>Dk9Y2dN9V^YHak&@X9*>KDMgez#)4+#BRh^pZ4sJYL`d)kYm43bA&2R6M zxCqS8AvJ8g%IAf5QUrCK)D(2Tfa=&ZY|Mb-*ZsNG!(fjB{u4m{s$mPN%x}a(`qRl4r zIyUS1G02wZDWmd{sPm*C^#`i-fy}rn4|+PZ9 zAVAOP$ayAVAUK}i$C9xdj2qEdy++UyDAkPxDT4wSlp*R~4#o{0ff)@VNlU;D3@bD3 zT^@9Xv1nlDpc>ePwZd?O-DcX&VgL$5-hK>>YNn%O!BuTKapG9IAYS_hK3cQfYM-Br z&pogqo7Yz3PtBm132QAIs%`8C3e?CsP=K?5mz&W8tdiaI_F_$XX679lj?D4tKp_om zgw&ho=^X>nUQHaeD#=1j1m&w{jNsO;BlV6pcbNbD=j6TvyQP9+pwVJmuhZBNwUP37 z-?uh-tBv+y?gH zv+=p_$>Yr}E%<}8@p6Z@XPa$2W_N8j9+BHq-ZLGdgYHy)vmLguUU~Y{T_xo0@Lv4% zxY?GA;eY$@vz{O+p _VLUEU#qKqq$ z{ib>{O61~+p!W+&KYsXuT?{{bg8!Zx7bn-EeO1Ex%KJwTGq}IVy%vDyP|ZFYNcxwr z!r1{NFvo+=7sGta{FZ{CaRS4oYze9ohgOH)HcU>3s}|g)sdTrR34Z~1i**}xhy_|5 z=^-+y*${}jf&x@Z$YIkoufW2h=jWlUQrN=GeEZz`fh>3y`E@slobD-_E7T+l1RrQ~ zEiGT{9PAc>IqCI}GDk>|BfG4QunP+d+r$X |@to}T7=%uG9>$4)!!DpZf z%*n G-a)>=A%RUgfiJnA2L2R_ORL)9&%r6#GBLDjr9po}MNg1U~T zatn)NP_)Q2P@k|P6vW3dK)Z5=s$+S=P07tm%QxBo55i{)=X7ZQhh;aS5WNManCA5J zOUn?i;uZR-2bLBm!+k~c*>^Y6fJGUThhEMI>JqerGv5dQ1BDZ06!3k|@@3o-nmZn8 zI8fOBIo%Q@P91$84?wv);cn~yk|;qCLbw4!L~k_L@5g*oC#`MO+&a5xF(esiXk5U- zU6-F{pJDG$Hs1sAuV*CUMRW`D @1WpwMMWgUIIb*5x3HRCL^LmqSZ}#S+!7mxiC&k zWF^UehT`8U8(ghRaebHO*}{xt0SbUeae}Z))R|>@d8gzMfd={3E %^sB>8rR^Lq$pM$KoCb#gB4obauTEexSPAsl{Hun2tNmB#xoy zXX?CP8r=_#D{-qCtUn`rjL%cD*)X7hvkT?6@C)2MZVnsh6*0`c=X#bHp>CHUEoRg9 zds0wCwQh}?urCkD9&K4r??szzzRRoOU1TS>o4*CV(*oFbP+W6@ix0#mWU~hzGnyOf z5D+l^ a!NC@4|u8|ML zf3EJN(7+albf`q4YU?dbrYs#TI@#5e+J$2ja6F;-x-y+A{YO-=baFItEv}z7_&h6S z_l8=)q?Dt@;7c!8QFUxLc_b=PHWCrGK^uwKh9^M_kN{C@5Y)ZL(XGfQ`=7+nc&5|p z3bO__8TNd#Dtx3O&u?)@o(F!~(iv(C)H|<518&~?%%Dd|m{cU<6RIJb0^S@6T!vBv zr$({I0?MJaG^A99T*dL6mPt9XM;v^%)KJ)@L|(32hK2n7<(y9#3tu$b{BkoAk;{)} z!CAA#O6nu!CDf5E((8)vzmt8@F`1&&O?iAb{1-x-0^V;*w;VFBKf@i;qv)) WS_yB=Rhm*P~D^|%wDUCW$`^+v(Wh)VHTuq$6zAL(_ zfo;Q;CdjFrbf#W~&lKshT!~n@zx>fF%z=W4z8Z !(AL#e@ z8t_1GLF)F=N+3!+KWH`VatI&hbFv*}7}v)#)MBv7h;y)PveZJt#yK^x@DVUAks^d^ z94W6nC3xlIDv18do(yPYnp)5A0S)1!5Os3e=YL?5c4+YGJ9E-ccZO@Y^^Auzh72-^ zSDF4@D##rb59OWD=0XRPh^-f)%5Ox0>jLo#HCgEDumqh+MnSMy9Iu`Z%ta}L{N2DN z2#h9x)2v~u-xkOFxIi-c6E*S4=Sjoe4~K6R2?(|!>qOcZh9kO;Y~Kcl$-3 HY!d{9)u?acih@7ja0ck~u&-3%%+M$ey=emikKIClw1oac=( zz2FE_`FUZHeLSlMTj$NGr#>y&KuDi@Rq^4g!kX6~jI6bj<&tK)bWgmvDSiqgyQ UaD#mYX{ONp$j0HYQKaL{6M$12=bUZ=f&+pXRs*fABx=Fj$&w0>3& 6wf? z2xMlVme$f;{-5%Yz>Tyx2a)gh92g$6Bsoko;zl@c#3JQY;{e@QO?%+aR}G}RXFim7 z)#~k)nln8JPDtl+3WJfpd7TQ8t}eKUFQ}rtjgy7mB3mCrtVe=TE|al?6-q1~D8LUp3kE5Xr8`h$H1C912bU4-92epv6K9UNRM8?6xf%&p*(^ z1;PPt1Tiu~7MOAS?cKWo6f@JqyKIDNd_Oq_{D5+Yb~By@mv^d-Y$;O>=aT~WubRD0 zeRk}f@Spye3NiH3BV8Ds09t2Be-Wj%+?tnXeK9*t#~n{12cBmNSVQXFKlD&^j=YPr z(LaPcsTPUSKYSdGdi}s*x){Ecw}U>F(a0yaq9p&q>%nL#7hZ{(l6CX;_D186EglCw zuXUh+Ln?qAO9!~z>@_L^1w6zz67e uD zI!c2QUQkWVk?dkc3GKKT)eh$9Ub*tlUPGXUdsYNJPvRy;0X$p_DT3xQ2jqZn@-2W> zQFT7)eOcI1?3D1}lKTv6t&Tl!{XtJ?^UH@%EVqpE;U}7^H?Ap@26IT&t=o~Vs#?kV zmfN-ukn)+qXr&>!f0wh&;<7^?|LEd_z%$qRVCw~w8l5dtjr8H4j>nW!V6}^qP;V~@ z8+1EqdqLd>L2q@1k?aSgQ2vZ_F08O~y)|=j?mP<6b|20>PxI9V-7a_katkPe2wiek z0# a^H9DFSj(@RK*T>I{6T0%kaeYjtu573G^VYI+G z(l9cK0v-jZ9;f&1XHe0o61Pnf?*+-^;Nz$Oya6xkg`N+s0a!7^ZvVm0)w50*$b&V= zCU5|ZoWe}3%v<^uZl$rTGo*?u{mBdO9kg&3%WHXlZJ>WuhfM#w``FRr-397)&Ua8= z=Xoy!Q-cZ+eK!srTk&Q>T9MBE*Eh>P+3B^8 $j4i9$b*AIIbJc)eH$a!|5X4xah^@FLD#&g Ce#;W8y*FgK{ {ANj3!)w}$(Zs6BhItZQ4ZI#Gkd;#mOA={PMyYF$_MXnW_x444j18_ML~RD zB^kmZ;G X6w9!?~I;U)Qv-(IXER4I2iV5nLDtQ{k~xPV@GkAo$Oe^O%v`Y {GyC zkx;aQ7Cc)_r6ejK40v#uu me)i{1iD@{xJzxBM9z0DWpcqCfm)wpi`yj^ECf4S8vAYT7N#DS}q2F+jFF zV{`s63+Mvci9jQv`)dDE^np!pLXBk5dL>Qhk&YSc*aie)jOz>rf1a@paUDNvsM+w8 zit^l`fO=C}(k*{DvrEb>>wQk)=lX3 ZQ=FJf_(Y491(644i%30JY&E#sJv(T*dJyFYZjUS!N({uS(Wh(MjjH8 zsG{%Ggc1Pc0cMT&eCt+s-toD^z=Ra4z^~Nn|D6SB=A@mI1-bR?1|O@*Q9=O;pz5&0 z8*)J>gjV8E8Ev0<5c~M$IL$PsXYn|?<)9t}osyS}sc(oJZyZ=5BwRfpf2aKNGaohF zteP1YBZuqQ&jMgl`IO~~$paQb6J+z*<;%rB-t&`s+jDo!8-3ddEet=3SlDzMHS@lE zetvB1@OVYz6Swt(5}Ne5<+d;Mn4fH)k)I|1RiuANW3+8Mh?Rs;wR(AxRV1ab)i@wf zaf@&&p>^r7oOv$EVbFTb0ZWZzd3@>S)~gzF%hq)}LNc+?UZbKRX2#W%?!bT(?mGUc ze!Mrkg=_xPzN%)IY<>D%8fqg)@5UWfB^~~(+_dI56@r*G!B0(x&_l1sWKW}3x|#WJ z7C2o)dL)^wU+ny{oFEJ*(9B#M_Gp{=2Lwz-_^0x!<3eEq*QMJS-@wk_P1ThdljbMi zTD_a^>PZ`)reFGauBsV6TD0d?D-{vOwAqxIuXYYthe{v5)I!JV94qK3;4}>XT6qGH z5-#+rwgbO$ZdQCeNEn=tERYsXLLF|&dnxXPC8@O>6^x-8nLPf3KL{)%Px!*s-8MYm zGy5~ BzbZg!q2Im0vPPR+M!Nfo_MohI#t-rsfvW7g!K87p)IT$$esDKI0_^`d-!z zPsorkCtzRlEFPI(LnbYf&o^jWnXc5h{i5E$7Oo6pcOaNlnC+NFy5PxH_opqqv{vZ% zed H#QG#Bmy*$?M=at9*0L+<7Dwq>$PKK2a|5KF(@UI@r;plRJ;fAWr zGUV9gfa`NJp g5js$#xlcQj2Da)7^-t@yUo79>iici&P`fDpSc&^@jOSG)?Hj~ZRfb3e0tnF~ zWQ*nhsgy)84LreC*WXt3)d#~T*amO@Cu%X*a8>!_>_xjCAb3Bo|LkXx-40^i`0rka z9qz-y9$@msZ~+DB4E*7sfrRZm&IND@W||M(-|Vs1te#QK3o;U1a!}xk@Bs8xtdl=0 zssV&c`YbMG`xl2{$h^irYJgUfX2My&=SM4v=^|nC@gb?eD1bi|;mI>Hozkd8o%MH` z@=WueNv3b8aEX xu5WeediC6e7hi^O!K;1O3(KjPe4Jp9iRn5w05s_n`T5&uk zU`iI88AyR+d;ji4hV{RGUZDYkhfu5hGY(W=t|zjGp3k $dqIDS5|J*YX(ItbmU%aW8Q zzoi{c=|cZ@p7oA?F0&(l1jFb!Y6wDP@sx4%ue3f`KNVnOd4srL5Yr%s(tVR!si|=1 zo%!66D#yE-I3HTmN6j|{U(1&13p-#xg+zXQCDOMq%tX&vFjl9l!X47@s`G}$`O&;9 z$Oe?~H8^FtwB%sok95;(1hcB1)Lm@cDjR0*A{c8Yok$mamcMw}R{!x8Do@wJ`M1<_ z??`?)X{0O`*WvC^t4XNtWB@RZSXMHExeM|SPu-v?yxyJT;b)bMBHgQdxbQ#ZqY6(( z8P1kN?_R?A!p8?zw37;y?f+WA=oG)WebB*L7g0YXOy>)74g{x;XIRu@!-nwE0{rj_ zQPrS?)^^r`QlXS%aiN+Xd@4V@;SE?P^Emqc7>RXt< vlL|&lin%<0!z zb@m$qfsIF*pm$HrE`|F zaIK|i#a|Xez)K@IN!mJqw{1D=Ywde~G1oV!Dp$afm1B-XOm0Td!Ycs%odu`z8uhxU zrP|8sqeg{%6snk#4!5Ib%tTPF-SxZpV=gzVvWLpYV#Q6SWGs$6s2tx6E+=*O_=kt+ z>Apr)ZM@RJE>S%HmCJ*(K6x*R*3RNZBa>|OkS$Mz)v-#8K%@RvbK-Qrj|B7~Y@uw< zm;wgL-u{EAvgZN%6%z8n&fPND&|U)zjqPPgk78Jest%eSw~IoB2yW36D4#gIr6L4) zW>*6k%|*bN4}fnSF(^68AHO$4bp8k72417CN07RqH)y3UB$SS1c;)=uqC13`|CuVK z|6k-8UZE?pv!y*Y5w4ft4Rikr%(tjfK&4b43P%F;ujcf*u>g2MkM0WEec_AaP`=zF zB!eX%+ET2Kui#H8tq=P6=twpmU*smVd_z81sg@5P6@4RYIdL j$DxE3^xny #GLkY1Esj-apRLn#OxsBYm~1B zOKSuwq616`?{oO>fR4HEc6g^WuWO(&KaX5T2)85k_~{im@5detO(B uvz;vq= sT+j+Kwv2(Ad{Fc&eI2y@E7;0PNIJP(pHBjkq|OeD3+IEqf{S*G`ht zW^qG@Oue)Dorv>T*QW{Ag&I?nSa~ez5APZ!-Q26c)?e4#KNPfmv%#Kt1T^DllFEq= zFO;+NB*VFD`v=boYOp` nQHwTq%3to z{4gq22b)#=+L39XA0J^N$lEn_QlWG-o~6;xHbS$zXnQ%>BGtBevldj3&(@QwcfE@p z6U5^AJC9IV(W7(D9JDyT+Sqm$b+K?KkOXLs@xmzVv|?Tkak4S^j6s>7?w;b8asAs+ z`zj+r@2)t0A_e{Jt#j_T$*9&$VTt!Vu>qv#+rfs0hAUMt)j;`K39G3A)%RM2qjhiv zZ%X>*eh368m~5JXl6-{g7ElyL55HemxhsJSFX5RB`}6mV$%IXj{+V#HRXjiOlgy)J zl!I8lORW~*jrZ@|aLX=HJsqy-I-3_5tET)xFL(5) Q(T!DR z*wq$nP2dfeV!dkrGx)N)K*^m`BR5T$370w!h<$ZzhMLHJC0_A!Qo8)Y5vO^QHzXVz zVk`bcpDyT!HNN>-$pfs%i`KVP=%NfPR#o}(G`NWfS9~uU@+cXnudNn``#?p|b(O&& z4SUu#kV#|ZIpx_UWm2e%(IT~uqv=x6 < Y6djIR zk%*^&sjJldJ3@eZ{^%;9BP1jQrn+}h)Pgxc&x4N0T|iti7&>Sp3=?ed&>u)w1R{Nc z23{oj$`_qe9=v*cT~a5{8nZd%jS5>zNVLphP<6Q<>T9pj-NY_99?qtrdK0KXJeK?2 z$*(= R*wn15o5Kt|nJN8iCno3Rijp#VI;JbajMbj5y$* z tz&GWeZ%+wG9%*in{WHWzUry3(SqAg@q=LnDAb7u;V z+&dDl)gD9isCUDNNu!+mefT`NW~kZ>ZwpLt90?%0gNM?b1Z-1s8FH~T*n6i*e(`W~ z+|gYwGNPSwyR&819}7{huxU4!KIW(US>t#(9Dy=1q4(vzp6dr<<>$l|FCRzSG2+Lt zl-=vbtgE@whSdtk^NZINLkK7LMZ8jU1OYIn;th-&4aT$VR4M*A` kUKyalT=Gk!B`~@K{bya?-l!nY#n(pyhCxH}- z?+|s>7jvJ^^hT8&zUub#Jkez-Lh1|vE&1T#O1p`7`&4=gEqn++Vb3x}a +ZucaBhkvPB`^8tqB-GTVEdDFKl^>Pn@h-h8TIr?~U$dSH Lz;ZupoF%{!PgF`@SKDJjJH>Yn&p (^O#HF1Dj#9BaGx_ Qw=(BCX0yjf zg}22RS+J$H^NCnonjiSLw$E8#>;pPibCC64=w2~ubT(A9AFo_i&YhpR<2?{t=fz6h zAc@{~K9r0=%I9Lpa>S1*cWiS6tez4}Cy8!vDoOgTh=$JuMR+YAe@|4$@}`p;MMi|< zCu?|3UT&j)3HdqeOWjaJMdpi%B;N)2+Zfk~4?3*QcPqjSYhHi2k%?UxpTqu)MB~gx z?7F>ZrAC%Ll{a^ HvZq& (^HZS)*U#p>E|iPdC%c|;Vj?Z z4RfhHH#aZ{xTfN5z)xphEFACbL I&Mu5kpA$C^oA4oL@WULv3v26{ACr_B zKE*7wqn@$dIZ{=zlrV 6Do0514Ww)1n zxc*! t$$I)8@K0`u#AcS+?rpxp7~A zK~?p pxNH}GGJQQJ(=9 zU*`*n2O$%V2gxIO&O`jPX7Vc+RqcmkbB}F mhbGP~%U(Yc6)Sl^nz0sPdw$-%b -ix&bcrLF z0&&ZU*jc!^f(!i92s^!J=N>v+3ZW7sSJSVZexN8_8|-*}p|?6GbwPL2kG&vyqkjiC z-5#P;vgn)!7Xd82oAxV7cKl`J-MvuATYE{Y^!ksfC~JnmBL5)d!Hz}j+gLNOj!EC3 zONk6~+=~yuNDuwqux4Yj#5_zsWT#z?biGbm>!ta@jH>3x=h7~IP}t@*-;UX0Yywpy z+;VO=J>jj7XJg-a@G1gevsRV&2Os(*+=djsY5x_>6vAM+O@F*`E%efoAt;1{*PI=3 z!~AI$^K1N2CM(;IueSu5Z)y}n2u0eaYf&l=5)V6{r;XT;*b;mBhT8|fN%|BOYkwBA zq5V5{zcqNZi+f#a2A_Toh{qjpQ$EimJ8E@?#QX+zHo5&Cm(wTfr;>sDCRS&5QNOQt z(?6tMCT)7|@Td%6#F*nW$x^`ZuEo-{4A$uxc^Md#a}KfmgRQ;w+voOvJEkokuHRZ3 z6mw!1Y`<>m&uWiBu)q}MNT~u@OA5#jnp@=z9QF@;!Mf%zQni?xNj+_&!97P(4BKuE z-ea9}M=$U+ahm*!#@xu6TApoH*`)Yyv6hIPJLWY~0)WZ#pEvE!mjFQYZ0jLMJ5zKg ze%g8oVLbfI$w(Klzkf$ Wosof|@6WV6Sj^%KBs zu3s#DY>XJBtp)cWg*J@9YrkS2KPCgIWWVtT6{25Ol)L3PT0En-W0_rX9tD`nUQb|O zIN6uH00~>PcKa3t_Lp~ iH05CQecD6$e|K%-%&}CX$l0i%`7ZEN78BI@M~EDG z mHyG3^Cr9QOWALw!^uMMdO_W983ykYYf^4A*fF&WYHRIIfto?)ly=nNLd>5| z`uUk~MKYg3H?FC<9FD0SfsOFQuJwS>%fG4L0V8@m_7!uS4D^$0_UXQJMFIKHo9Pj= z2N2h~%%@*gXVq?>6q#M9wpV`IORKc==^QKNrkS?9+5BQ9cI)S%K<|(*2ndaFRI{c@ z6U@;fh^{-pfo0O#8=nZ-h z ED4@%-6 zl4|!Biu<)|PQLH;*r13qhth$9UXvg1rRmJJNrpTiaPe|0_+BheUHTL52#o&`08ZMk zaw%4~u;0b<_&2v_A4`E3&XXpw{s$%khRSPu1=nz^=SCUDtWF >oKC^=avhyEI6RbL0L1bO0eI5Vc=kuSlPfS`j{8BaflPeFG z$J1Ld#N*PI2n^-hdwpEt^I P)*N`Nn u82c|z~L`J0zGX%w85V#hDI}hUXXDx9Mv* X6L_ z3y3``@kNW#Z(s!b@lG{w<%C t?(9Ui zoZ-J+QYSIUcy#_Lx7;P$Qp6>By7qb`scJgC5 -CF`g74R&5~J9bKuWX0-EBW|x|c#gv^aeLovIow&iWr2dYN|w^ksZ+ zgg@d>)`@K1DYxlb>UFPKY-nk|_7eo*=MVw3#Pn clFJ`;_;8o-NU+5VXjbUPdmF@nh5RObq>CO=HfE4B7HEDuvYpOZ70 zVm?a)7IibUYO&FCWP|;j& wOYAY7#K^Wf9w)$nRb*sAV=$XZN4Et4%Vs1g; zC>Ty*e@+qmgKq>AK8kr0fv#vsHw!Q0*hWpVOMVx?lYxrEIyd5_`x9@3J_}Md=m4Tu zS0g1Of(bPjYeMp-75&hPh9E@k6hq*VnNMp!N%nQ8bfiU$@Z_^gvVaP?Wn4Y5_-Z1a zT6;wCi!x7Vs?MjLnlUr)*}oNP3&(@gJi*P8SJ?Tx+q)wfIkp$l7z$;S#LSzv6SaA7 zilZwYXD)6aOI-1fQeHi6JJ;#VO|0hq3xd${*?^8jEjX@si**;;&{FPm*NR#5f>u8{ ztY=t-ebZtQdCQYkKzXbyI1ZicoNFr~@rLZ5_uB@p_-QWAt#m}@*{uY=sQtM{v|Fzn z+>-2C%E`3(i?RLGfAF`wrN#TrBHpsVOKrRYtiWY~x@!2c7av1jnHtIPatqu(xI?j3 zeG5$bfaB**l)7-S!2C|ikj=dvX0R``o~Ibk|B^Y5wFaogN(I55`vj#MfrJSxw)2@L z<;-+s;uO;|oo3tULC>h+Dlq33^kP$GjP_=HJ*b-zqOj%6%M5}%hmJbqmsu8JQRjAZ zeR_Ay&4O=SM@NCk^i(ZuT5zeWi4c9x98v>Kmoy>AR;m7$*mWb?Y=LB*PojVs21D(g z2D{^f{$#NMtoJN=ntZvK-s8tJG5!f?1(mZI`4*eF=Jlnb@>}1F?b+|%PkG( 4jgLmb+li1sE!6G z;!R0LeoR47)7EmSO;vTJ=*a2Ch6o+$`^=ij;{xT*+p9_s`IGNH1lHSu4{h}5e_+^o z`YoHzb}IbJ6>cn@-QL=gmzJP~9xq51k)Of@4y2z|{LHA{Sx%3EypYjfNt%2@k?#c= z|FD-t9{ZS{@#>}2ebkjoy$UL(Sa#@LbQLcSbSB$$*a66C9{m^wwRXQ@^x*at5njvC zh2#c3XZ->zZmJW=&PtFVb6i<_X{q;Wn?8xXgM{Cy={ndS{k~?J-`siy;QNtzW`Qs` zg#Wnx0Z8V9`+Myr<*jE1fdkmq(vm7vW1tRw`OePH{A=9Ex?-V>AedfLxRU`^mXNG~ zH}HOdD{oadCopZ8j$I+yU*YRUtmkLv2lK)^cd**|i)^$MY2MsnngeG7PHeo0AFuDn zkLrHvDQbQ Wx2$wVqaw*d{&~+9My|Fc_9R* zTF**Svkb8t<%5_A1z+BM;!mfKj{woz#VS8s)9j@HE1U3L_PmI)K3t2`S|s)Y3~@g; zw-1;_pBi?ie%c)x`{*{KQD?wk`)@!a5qp2f|9;QcI)MXVGW+hUK{e($K_JDX8hwY} zl{DFUm032sJ=obwP^;eEqVbRHF{hA^f$0UhYQ1>mkk2_Ky16^^N0H{tZvFk;+ALNP z&~=Dipq9mct)Wfu$)^u;vA~?R_t?O?)gAY(cPb<88B*H~HFv(qz7X)~c!k;gP33>l z=b orf2tvUWz96}JW>fmBQh1H76m4i8No4R5I3 z^42ub8dX2@^}^JZ`p;m`ca#Elb{6U#4Ev9)gWDx9fBq`k_^C9m{-33`GrmMZiOVdk zuJvMqZEF)t+-u;hJ%~K{dlg@|l0fCr>4Sy|F#A@7+fR-NRh#kQHp{Erw?lTDzO_p# zlP39OIYWltsT_M?>YUM0ISKqeEYwVj_+COxCX_#XO?};n-L`?L)ll-`YG_YBzxZ8# z6%aGX6}K0^1ccSE1dz+v_eiUN3A0W-SB3Y!XKIcAh<4C6SrxuajhzM_*Am$82TDiV z?*H_uUzWx*b$(-=M=B&YC9~>zL4zUACU5q<5Vuu-wJx8R0F$ `WLo3@K~zum z(0q{VEgjW5J2h%ADVef2cnJXk<9VXMSV;;*{obp!$@dx(*(JI~Zy1Jd-9jH&?l`*# zJ1>r^knS;dZe~JVxjN^t*k4nanTZLmXPs+9PMXY1dqRTZ2p-0)-P=&{!S~7Oim=6( zhyMlPyzI(4KeQeg9; !T{NJM#giEmiYhnq0qSOXUE`7}Nurk8yGF^YOc$ zu(XC*JHyH+q1%}@gkhY%+O7aEx;hL0M5QhiUT4S1dnH4qeyLE`fu?{&y5u(f56P?Z zCu+c_sj(T4T3hS7IN4#iXkhXH*{xTv(!}f 38~fR5rifX%#5H70KrKO#}4)w$lrP z0Mj23kg>?SxYoT!Jxi2-fBy9Q^psB~_=+8mtv}lsGvk@5ACu$%q?v|>wvwXO)+*Tl z)5CSgL;e5pyUd7??3J0acQ_h0k(JGfjAUfw>@zY$C@Ml`&dTwnJDcouDBIb4oqfjP z_wn_8{Qkc8z1QRQem$R`=WCoUx|T+>wa!*dL^*lHCCMaK-}`YdTOk6^w$5F3gbVWx zQXrKzITS~7jZBYvig|d!O~N3HpS?zY6}?HE44Nxxrq~{;P8hrEj^0K1Dw|ictfP*e zg0Sy9-+(yMh(E?*Clw`@o?PdWr=Vh~TYbPmv+5NcCng()=9qNAsm6FsGCfFdWcjkZ zH$9}zOn!n9u%70@AE}5x00n2|+*T%>g&13VPBPC$en{)%YPe=#b2~4XFuLlBhwQZM zTo9b7P7P HX!Xjm^$bl7YKdCGd8c oaz zwKK6)5!*c(vTBjBE;BLRt4W%Tt&Zo_Y2nqimtea#%|jE@;sqwA-0>m`LC@@H76zX# z&%{)JaVtU;)T8WIPE4@g!zow@q_)YyxtL6Wqt;j0h6!0MCZz(xoAURg8pib%` uH3_^~`3BeBXqoJH89rHra!{_AJOA-zRj$27B-ICJhN!B$~`z0kJT|1??$ z4>=1^7Y5818GC7445#Bl& 85Oz#gZyLk*=qMt~KoPSL%Ff wccAFcFXiH1UQxP3| bMJCQf-22sGgW-)PL{sHr$!n@e%oDtSW~kzC^&@GVt9k=PFnQZsQD z9@`DB%jj`F6O{>|vfj5^J*G6=hT$6F8YC($OV^o`yb-F +Z_#Um !vuOt-O_yuTNJu;-^b`JMjg;Kj`l2#Fw zoO}#fI*!w iS1)s5~^0Z@djGcJO`6AhgpJp}6d( zZ{=|y_+bjNAAw*t6rj&<4N)jPezrU5XcOePAz9u~$x)JC$B?vQyw;SUnn~bS*-D58 zWj+{CU3 ~8YQDJ@>3CH-MI-}NLnA8~F*T(OqG zuPnpBSwgF}-bdxa47KkHh8HYijLKqF$rSwzGkaaRcoJQSrmaXhV9Gz9$2a)R(w>rh zhJl^w_0u8LMVv6_Aq#uy=-!nZH;w~l)atd5Df`Y|OI)R&nYwuni7|{z4ON|g9vunO z!Tc*$|CZl~h($%|ifTG)IT{aE0TM8WX~S!~-ds$>*+K&L >qCWUsJ*#Z&q&+~pINjX*NJV5;$Tcu_kW@v4 z_atTdS_DpTkQ<(o%#VdDaU|_J&b57;5bCJYmr)2}P+*2D`X1~N<`NaF=7GdqdLX+| zJ|vrZ`c*MHvY@QI8s}!+=xj09?UTN$Y*n#&Kj@KU*5~BJf<; O7UrI+}H@hVAPGQv#vE_q`s#1kw3*cPn*PBJoQ`N<2pWfqgmJ60yQJR}#Lm%70 z6D8Z|lbe-a8sfIsyu B46oAXA(rb+`%+Y~Xr`1cs87_@ zW{5sp6cZm5Nc=H(MOILnZZl^0WR`$$6@|C0B>I&zoKtO2eHnF+!ZdOvl!8I;>2Dqu z=(60ML=Oy=Oici>r#8`pLvCu0zf1AMc+j>go7b)118PJ=LMkAEd>wwSC4Cgrr}Tw1 z*>oX(&`(8lUgP;4qEoYGPX|uLd?;a=7WIb2@9e6b+WeJ+(Z=Lb0NOLhj@!%7#|6Mn zuY127Z7AF?-l!d~ULUz&qMI_N$_)8>N-dIa{-M+s$Vo}rN+~{M;tCA_X~+g}H>$Q7 z-dhW({uyUmX?9~joI2jk%VUMCk%g~|Hc|U@gSEJBo6rxDXJC&8>1v^LlBc4ty2|w( zb*brey&&_f6tZ |~ttY_yqCr#;CyH&f} z8^5tNIW-ygtwA7If_9R4O92X5TTtClTv%gbQS-`$66AVX;Og2d> ~Uw6b*WyU8kt!xZi~jM;sBWEnz;#f-AD=N_-W zp7js<4MV^476ewZ%S%6ctjN3_5afVb2uI^*i}hp8D+ySK8=j^R7tHfLxy(_Zzr|J0 zx5@F*%*|-p0MGRYLf`gBTlbP=9t6DWc4*;yl|Z^(GyiC>txP{sefv;0;J`YIO+Bki z_bqbe;Q$Y9lP0sEl~FTe?pqtRqxoLX-t>jd*YcIA`Vk^(!|?6h9W|>thiL|{o;BN- z#7;pD74Hj u@mmfQdQ^XY+rF&y16G%A6}_71lB;qrlRZUE4^m>WvsVQb6YDR$ z-O6Q~!K _kdItWRu#)-CdRi1NEg0@zgP;4QGM)bzYq zW1UiY-5>faf7rO{G~6eLh9^2*b?#{qWPf1~-+y(4w?m@q*hy-WCv#jilfO$GExiTg zznT%^=ax>n1O(RDfKuI5CsvuUY{Xa!Qs|UONZYa ^C|cBG69`J*ySh-e2MWXDPdvSB?8#68Og{rLI!J z^rDURPH}Qhm^PoLmajws4V(-_U=RX79s|4qm9yD=s_e1rGFeZwgch!7ii5~EOfu$Y z9xJS)ql}od?i77bfL#*L8Qkb@e_SVN^ccuTP0-U<(nuqc0uwuH^nkL<;PQYPe!c!y zQe=U*zHCS^Wa+Cyu-7_}U$Fh1yT{Mjr_c0*lByq19%AV>l3*^+_HHBYodzJ?yk}b( zXd$J|+$B`6i7K4U&n-eyziusdKea!~e}~A-OlZG44GdG!iqo04QY@*n|H(Whze#PD z8V1byiC#68(|K)K=&?^Lu?H}UJKs>kG&!H`d(o2~_p=4QDNNUImQ3p!%OYNZyK6f} zvRWVkK!i2uzM0T)1i=Y?|MW)-Y^3{1Y;nZ #4VWIVT%LCfrfC?+e7kRQ_)lSdZZTeg(WYi`4)fIU zFMVdt0jJa9PVIRRHXqYa{e$81HmPV|!SJAE;y%)BX~GydyBPQ?Icd4;W{q!Bwiz26 z#NN=#D( K|*Keq7QL@#$+ocYh(lvVEkJ77+h&Hj?}A(W9%@J6p1AT?fW zUwwK5^ciFy4tZJ-QL}p+@&ow3UnWb#R=sZjd)1FIs}}lGw(+(7bKvt=i)m ydEc<4e4jifl`V&22)zUaOWR?hoc0z|sEIy#Zf21Tjh zZy+(Dy7!?F*33BaiBr(~FoNZIO`}iX(Y8A0Q~%{=!`L{A9U|-Fp`rfK+RYx}f3ieu zOil?czOtKG8xzWG>ifd*&s#3+rkDo;BS4`(G ZjlFdyY_;YR!_;|g`zQWSuE^Ng7f&qs}KJ|ET1 z_~zoYItFM;`c_`quC0r%@pp$^5hsV0gVNCx>F(gQv2vogI=?+^tOnjsYle#E(jfUa z%p0DtLL5V5$$zTCb_3>Iq56Q}`_rq5u928##SI@+@yg}jv;nvk`4$N%FL#m65~N8t zg8=tEEyIrd1*+2+-6};V+!D(+7`|_wl7jZ3({9x6b4k9p2e(N7do#H$G)p|cj8$?x zgWc QU+l5g+n?Iqp#`T!Yt*)LndaQzdUa!$z^{ zDo&wg!N1kVxNvJoPa3_F!g%LY$>zMoMJX!>JVG)A!D;;GA*>$y%G VvaEJy4n`)!tdVXYqeZ(R(^aP$&=lH;{imQ9^2920Ar#t{eqKO zvU(R%3cEOGN(N0syeRKM?y-zyqnQ4C`n0q6uc^;H%VC@>Wxvlm%fRCvayZCnO|Rmc zPt*=tqG5a>(y-G;H*uxv#H;rF^kC|mg2QA<)`I *kR zBP)O*RO{A?pv(6pp<{dhMedRi&<`h^Ji{+fxZ#diWDUo(V#{!NMr%f6WJDYFgyJk7 zyj32!wC$oDM_HcCD>$5+IIm%rnn3JPig+R0jr111f9XCVwHTAUMmzz@U?MQdCoWhD zEoVj%^#c}4LpKyRZrg7x@;i^A1c(3x;f_u?yD>dSK;w|`Zx78 X&vkfM$@-DMX`F26LlzYm{u9}m$78w~;ni9M!s^k#s}I1F zsh7nE5)Z2@X0+sCj-k(E?h-#ybWmA1+8%kUjuf(ba5*m9fFiRewVAYc0R&W#Q)gT1 z+m~ Cv z Td749Pt!Y6 zIVFM&`uDo#D8I<`F;Wx(5K?4yd^A>CUbo+jD6if)qYyHY*OR!sM!K#yKk3Waq4&mE zn>S;6W;X84;Lr3-O4iQ2+tBh6Jo`Y_*aH2{`6G2BW8$a}X~eM *$2^0mq5>bkFoK*Gz3!!alI1P POq=_+GGtB%sMe;=8VB9hVnUCMY>Q)ES2yP=$G`%;vC~CPLHX z(wA|!iT>7~l>S}Fc=Ky%)~3;Wxgf!)D)RNSqt4calij*Y%U9V^^Z%G$A3Ll6BRJFZ wkrS)*1zZ8a_yA4P^Ej*J+2XSh?NjAf^W`~>rw=oMmb@TMRb7>`htRP90dRFsNdN!< literal 0 HcmV?d00001 diff --git a/images/button_left.png b/images/button_left.png new file mode 100755 index 0000000000000000000000000000000000000000..c8f50fe8a074958d79d4283b0d970192b8356985 GIT binary patch literal 1422 zcmV;91#$X`P) P001%w1^@s6se*8p00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igk* z6D~T*f5xEz00j<7L_t(o!|j(_Y!p=($A2@kceYD!lopB_8Z8nESlUt`k&B7O_<)I; z*hpeXG(>qa-VzfNi9s+%MU7D-5u#{7B_=!=Odz33x1=H P59wEx0ScARX=P?Ah}<4?ebu9nZgs$Lj-`N4d^)ce8ijm%O;` zBWjkdFpN^<4 lHMNaMDFJg@ La-%BFxblarYG>Yy&wfrN~9D>A&gaushJ!;bcl}bUbcR)kJ%Nsq$9oOfk$}t z*^Q{G##1l9Ysw_e*V0_3A=lvGAT7aTZ2Rylib`e~k(!PwZ=KJEP0!KS(}kvK2FSRC z8&J|7q_wq`haZ2M!s60QLM?w@x%Pf;zq2MSljVann3U2!C+(+C)39n?T3bVB-Eb-d ziUMU7bB%;cffRcB8!61+Q{^NUi{bJ4K!}veS(1#8-jFi8x+GIDDK9Ul|7?#XdOgD^ zRXvvI$+GEbMz$c!8ynfX>pkMJs0F}WCpfjpWU(Q2dyqgNfF296{iV(PcIKCCAYqNz z-j*{b0|Nu>-~SC8H^0EbCCiXP5RZg$c|2L&oIR(;*`$%loFJ{iAP;SLk|lMGmSoDz z=tw!VmaI&bhovd)O1QJLlcjZy6B9f^4&B}+^xRCs;V^!G0aEB$a!e=k@lBZ%#9vUr zpI5ICC@h?Y)5&I5#+FmAd6ku%?dh6Y4$CCSlGC&aVN=32ix+dewb|Ce 2W!{e!`@GKW>KFs@+oY#9lvtbDx4Y|`1*_NNt-oF zvTaOa%L$^Y3aYAd_nNhw>+5Cb`)@Jy$3>(N=*a}fTAKOs*wINOnh37sx@id^NF;Tl zu{a~6AzF?erMt5Oq3eu|#c_HAJlfPmUH$TL+rY#vAZMQ_ih`!9I2{^pw~N}kdTy(# zX6VW=BcUkgdb W1ACIRd6^Qc-$`hGknYp_$etaqNHdhW##2`cNvqJ z2{H*wZiGD(08LeKIi2`C0%2~sPNxH}r P001%w1^@s6se*8p00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igk* z6DuBw3)VFN00ePKL_t(o!|j+$ZyQw B6m{0M#k8&*g>L_tUhp|)yiDOCtfNE@e(n>dM6J9hk>$7Ny1*r~^MT9*xs zbmYgq_k8D^d(W9UBR#nBmEaj)GXKK$Kjc3OQJ 4}IzR}-AR&?Q=gF?$C7($lglNivJ&|OEKztI-7ot|)p_Exg2p7!^W5&i={`Fg2 z+iqIl1oaCE4o?voKgCXZnPP4eBM@U^<~6db^Jr$6t(7^fTJ xPV(j@ zs-=8WK_<1pvDphCT#|FY;5ts5;#TPj(aaE`;VJH3{|2j4Y*S$6GNcx+;SUdC*J>S= z_XP EV|nfhwrxMQkj7`N_NXhMCqz~>s+AIM z4@;j4VwLk4{s@Ka=E0S_Zu5KBQlH;UGC6$?SAcEX?P6JviPb8$-IT5nyH-Y#B~G7z z2Y)#3sbo*~!}sQThD-BD7&8Suvbxi_C#1TY zBN87YpW8mL<@?7xA-mftCQqGa`OdArt@eU>LQ2^+j?KQ#^>B<_W}|PbJI(V C1hD9eeX6C zM~?Hx`xgmC4%L;oF4Hf(%&D1keZjkzdRa!o;{N G{<$v>F??F#u~h0U!D=P$gC&mZb|L)$NMcTXf#RmErM1Ot8| z;UEE1=TI!dMk>ki>6!Kl>>*t}0Z?QaUDNRUTwK>hl0ef`b|0;i7=4qGiK9GRS@QOz zpZ=uoO+92mzezM4A~6(YI38p5?i?R{_%WL9Yq#EUaQ39vO-qubfA&UG@%an_0h35L z$WSy)VRMDz&K4hi`WZvRV{M9U+iw1r`sw4F8SDxiw;ndzcBokvrE-PX#7U;6&v5z2 zulfGV&)G_++Mb1_eqR=}E&^~Gph~4mp;#inTOo1yB(pEQ%C(;_u`qXo)#blPKfK>R zq!ZL}+@?4ALXqw44%wXoBZp5gGI5l|$QbeA(I;;mBuPS+B@{)$&~^NNr~V`fY^*M^ z^ylvsOJyq6+SBzXt%t%C28jB9dkO3>`Y4qv1Ar)v1FGu{?;0o3&?)&%%9ZM1I;}lW zYbo*>I)2ll)~i7F>x~csMUfkoyS`6#Z;b9`<)EPE+XqEKk!4gxY2=hP*gn1$rYQCO b5<>7dwuodBX}(F000000NkvXXu0mjfj2%{o literal 0 HcmV?d00001 diff --git a/images/button_middle.png b/images/button_middle.png new file mode 100755 index 0000000000000000000000000000000000000000..949df5459607a741922fb3ef5f6b6fb6b0470317 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI}!3HGf{@&OH5-1LGcVbv~PUa<$! O>_%)r1c48n{Iv*t(u1=&kHeO=jaaWjglt1YsaIu9sR?&;zf!g0N{ z&zkFy1A~jaa@~ZES-u9XH 8o1}hst`xt_tZsGq$@QlXiDX>~D9V6Bs;Q{an^LB{Ts5CQ)7F literal 0 HcmV?d00001 diff --git a/images/button_middle_hover.png b/images/button_middle_hover.png new file mode 100755 index 0000000000000000000000000000000000000000..6eed1ce45a553de0b45df3157c0930025630266b GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI}!3HGf{@&OH5-1LGcVbv~PUa<$! O>_%)r1c48n{Iv*t(u1=&kHeO=jaaWf0+$Zzm1NC66!c)B=-a9l6# z^W|bP6lu0sTG8>yU-rw6c_)i2SXc{}t`nJg^usMX^Q4W AF2 N9Vee}t;8*t2TED*fG0-Ofqgxy%0c?T*V Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igk( z6(=<&hSWd+00tFFL_t(o!|j((Y#mn>#(($U%$=EM`(Zmy>Ox3?5~T_Xger-FO$sb3 zwN$i75etM^um%AuHc$jxR0IelD2P2!s6a{;Dp_(8po*GGEu ~tZ376Gr5<46+_U`R2j5|CZjOgO{t!|KMCH6=fGq9g zO7^h2e4TH6`E#5)@gOHoo e3QL*;2abn2k*O|Pk!nQ=g*&KbGyaH#s-Uvi)^=Ac>mUIOLSYC9*PG&cswgN z8+`Q(kMW-Oy`R?>uW{hsgDkyvm17?~#@yT-v$L~ro<-ifUS@hglT$N1aO^=oa{6ID zdir6&lVut6&;5oU|LBK2^5~-+KYko3`vll+e?(_<-TSfwUxKvTErK8{!95 vxyDZ;qm!HO%JmwtUXW;TZdhh*5_~Mto&L1yc zq}6KE>2&F)8P2(pdnEIOz2wE;O2R6LFJi|&e2RUu?`D2}o~`W`olciDb0a}yzv^r- zq09D+efrGjdErkNS!>>AyVa)K?UEG$RS?;GfKi bpiwj?25#ATf>C?Bo zU&Ia{Im+^l2F>OMHV80Aqm@J}g;JsbaM|dDC3*X?{@UiTD6-sh@4HyKew`$Vur|a7 z0hw{7MznYC4H8zat6C{y6ZJ`&&2=`nS|o9sI0^}!!+TlnVDu6UC+vx>*M;| $2c2m+c!)T579-Rwq^b(9pSXI3DkfvRn^Rzo1+U*YAG$V5k=N$@Jbg);& zLkSs*U2nXOj3?=KQ?e{0%X+G=D%lqlEYF^D_m16KzDZ-Lfe9nhtXH`oqG^vsJC kW+kwg|71_Z{Gn+>3GZifdAGiDg*FR#2zGO>>!FjyN9M;2RF-(UX ljo6E~Q^Xp$>$7XWwONmwzr4&laV$2+z zE{eG*Ki1dQFvbwa@eaB+8V!E-^iSy!QIBgVrSi&q$)$u5ql?7*a%@~#S?1?Y|AfuW z4SMml)muD&?i}C$-c#J}DD1>E#u&oD5CjHebio=qaxN-6$g-5@|8S10ORIeQTTilo z|9-Z%wpd+jqM~t3{U9dDMHNT3JZ+eBKks4$z^#=Pu3r5&3kwVU=f*nW#0*Nzu+~jc zHfHMJI}rk;lo(@(Y{ wfk0_Rpfy23L9JD8zd|6S$X_Z2 z*c*-QCBXD#JqHj1DRK~_bzl1BTT1jT_)UCxlmO$kq_hTs7^qMn-cquW0Fez#dlm?U fV4&@{`!W7s)sG%GK4RKl00000NkvXXu0mjfmna