From 40399300745f83cce81d3109abd4e7b15aea5595 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Sat, 31 Mar 2012 11:03:12 +1100 Subject: [PATCH] Merge scripts from Tinyboard-Tools --- migration/kusabax.php | 338 ------------------ stylesheets/dark.css | 150 -------- stylesheets/futaba+vichan.css | 88 ----- stylesheets/img/fade-miku.png | Bin 234 -> 0 bytes stylesheets/img/fade-yellow.png | Bin 47975 -> 0 bytes stylesheets/img/testorange_bg.gif | Bin 2618 -> 0 bytes stylesheets/img/testorange_f_bg.gif | Bin 143 -> 0 bytes stylesheets/img/testorange_testo.png | Bin 20588 -> 0 bytes stylesheets/img/testorange_textarea_bg.gif | Bin 292 -> 0 bytes stylesheets/img/testorange_top_bg.gif | Bin 6551 -> 0 bytes stylesheets/miku.css | 87 ----- stylesheets/testorange.css | 208 ----------- stylesheets/wasabi.css | 390 --------------------- tools/benchmark.php | 52 --- tools/inc/cli.php | 104 ------ tools/rebuild.php | 105 ------ 16 files changed, 1522 deletions(-) delete mode 100755 migration/kusabax.php delete mode 100755 stylesheets/dark.css delete mode 100644 stylesheets/futaba+vichan.css delete mode 100755 stylesheets/img/fade-miku.png delete mode 100755 stylesheets/img/fade-yellow.png delete mode 100644 stylesheets/img/testorange_bg.gif delete mode 100644 stylesheets/img/testorange_f_bg.gif delete mode 100644 stylesheets/img/testorange_testo.png delete mode 100644 stylesheets/img/testorange_textarea_bg.gif delete mode 100644 stylesheets/img/testorange_top_bg.gif delete mode 100755 stylesheets/miku.css delete mode 100644 stylesheets/testorange.css delete mode 100755 stylesheets/wasabi.css delete mode 100755 tools/benchmark.php delete mode 100644 tools/inc/cli.php delete mode 100755 tools/rebuild.php diff --git a/migration/kusabax.php b/migration/kusabax.php deleted file mode 100755 index 1561214f..00000000 --- a/migration/kusabax.php +++ /dev/null @@ -1,338 +0,0 @@ -' . KU_DBTYPE . ' not supported!'); - - $kusabaxc['db']['type'] = 'mysql'; - $kusabaxc['db']['server'] = KU_DBHOST; - $kusabaxc['db']['user'] = KU_DBUSERNAME; - $kusabaxc['db']['password'] = KU_DBPASSWORD; - $kusabaxc['db']['database'] = KU_DBDATABASE; - $kusabaxc['db']['dsn'] = ''; - $kusabaxc['db']['timeout'] = 5; - $kusabaxc['db']['persistent'] = false; - - - // KusabaX functions - function md5_decrypt($enc_text, $password, $iv_len = 16) { - $enc_text = base64_decode($enc_text); - $n = strlen($enc_text); - $i = $iv_len; - $plain_text = ''; - $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512); - while ($i < $n) { - $block = substr($enc_text, $i, 16); - $plain_text .= $block ^ pack('H*', md5($iv)); - $iv = substr($block . $iv, 0, 512) ^ $password; - $i += 16; - } - return preg_replace('/\\x13\\x00*$/', '', $plain_text); - } - - // KusabaX -> Tinyboard HTML - function convert_markup($body) { - global $config; - $body = stripslashes($body); - - // >quotes - $body = str_replace('"unkfunc"', '"quote"', $body); - - // >>cites - $body = preg_replace('//', '', $body); - - // Public bans - $body = preg_replace('/
\((.+?)\)<\/b><\/font>/', '($1)', $body); - - return $body; - } - - $step = isset($_GET['step']) ? round($_GET['step']) : 0; - $page = Array( - 'config' => $config, - 'title' => 'KusabaX Database Migration', - 'body' => '' - ); - - $log = Array(); - - // Trick Tinyboard into opening the KusabaX databse instead - $__temp = $config['db']; - $config['db'] = $kusabaxc['db']; - - sql_open(); - - // Get databse link - $kusabax = $pdo; - // Clear - unset($pdo); - - // Open Tinyboard database - $config['db'] = $__temp; - unset($__temp); - - $k_query = $kusabax->query('SELECT * FROM `' . KU_DBPREFIX . 'boards`'); - $boards = listBoards(); - - // Copy boards table, briefly - $kusabax_boards = Array(); - while($board = $k_query->fetch()) { - // For later use... - $kusabax_boards[(int)$board['id']] = $board['name']; - - $already_exists = false; - foreach($boards as &$_board) { - if($_board['uri'] == $board['name']) { - // Board already exists in Tinyboard... - $log[] = 'Board /' . $board['name'] . '/ already exists.'; - $already_exists = true; - break; - } - } - if($already_exists) - continue; - - $log[] = 'Creating board: /' . $board['name'] . '/'; - - // Go ahead and create this new board... - $query = prepare('INSERT INTO `boards` VALUES (NULL, :uri, :title, :subtitle)'); - $query->bindValue(':uri', $board['name']); - $query->bindValue(':title', $board['desc']); - $query->bindValue(':subtitle', null, PDO::PARAM_NULL); - $query->execute() or error(db_error($query)); - - // Posting table - query(Element('posts.sql', Array('board' => $board['name']))) or error(db_error()); - - // Set up board (create directories, etc.) by opening it - openBoard($board['name']); - } - - $k_query = $kusabax->query('SELECT `' . KU_DBPREFIX . 'posts`.*, `' . KU_DBPREFIX . '`.`type` FROM `' . KU_DBPREFIX . 'posts` LEFT JOIN `' . KU_DBPREFIX . 'staff` ON `posterauthority` = `' . KU_DBPREFIX . 'staff`.`id` WHERE `IS_DELETED` = 0') or error(db_error($kusabax)); - while($post = $k_query->fetch(PDO::FETCH_ASSOC)) { - if(!isset($kusabax_boards[(int)$post['boardid']])) { - // Board doesn't exist... - continue; - } - $board = $kusabax_boards[(int)$post['boardid']]; - - $log[] = 'Replicating post ' . $post['id'] . ' on /' . $board . '/'; - - $query = prepare(sprintf("INSERT INTO `posts_%s` VALUES - ( - :id, :thread, :subject, :email, :name, :trip, :capcode, :body, NULL, :time, :time, :thumb, :thumbwidth, :thumbheight, :file, :width, :height, :filesize, :filename, :filehash, :password, :ip, :sticky, :locked, 0, :embed - )", $board)); - - // Post ID - $query->bindValue(':id', $post['id'], PDO::PARAM_INT); - - // Thread (`parentid`) - if($post['parentid'] == 0) - $query->bindValue(':thread', null, PDO::PARAM_NULL); - else - $query->bindValue(':thread', (int)$post['parentid'], PDO::PARAM_INT); - - // Name - if(empty($post['name'])) - $post['name'] = $config['anonymous']; - $query->bindValue(':name', trim($post['name']), PDO::PARAM_STR); - - // Trip - if(empty($post['tripcode'])) - $query->bindValue(':trip', null, PDO::PARAM_NULL); - else - $query->bindValue(':trip', $post['tripcode'], PDO::PARAM_STR); - - // Email - $query->bindValue(':email', trim($post['email']), PDO::PARAM_STR); - - // Subject - $query->bindValue(':subject', trim($post['subject']), PDO::PARAM_STR); - - // Body (`message`) - $query->bindValue(':body', convert_markup($post['message']), PDO::PARAM_STR); - - $embed_code = false; - - // File - if(empty($post['file']) || $post['file'] == 'removed') { - if($post['file'] == 'removed') - $query->bindValue(':file', 'deleted', PDO::PARAM_STR); - else - $query->bindValue(':file', null, PDO::PARAM_NULL); - $query->bindValue(':width', null, PDO::PARAM_NULL); - $query->bindValue(':height', null, PDO::PARAM_NULL); - $query->bindValue(':filesize', null, PDO::PARAM_NULL); - $query->bindValue(':filename', null, PDO::PARAM_NULL); - $query->bindValue(':filehash', null, PDO::PARAM_NULL); - $query->bindValue(':thumb', null, PDO::PARAM_NULL); - $query->bindValue(':thumbwidth', null, PDO::PARAM_NULL); - $query->bindValue(':thumbheight', null, PDO::PARAM_NULL); - } elseif($post['file_size'] == 0 && empty($post['file_md5'])) { - // embed - $query->bindValue(':file', null, PDO::PARAM_NULL); - $query->bindValue(':width', null, PDO::PARAM_NULL); - $query->bindValue(':height', null, PDO::PARAM_NULL); - $query->bindValue(':filesize', null, PDO::PARAM_NULL); - $query->bindValue(':filename', null, PDO::PARAM_NULL); - $query->bindValue(':filehash', null, PDO::PARAM_NULL); - $query->bindValue(':thumb', null, PDO::PARAM_NULL); - $query->bindValue(':thumbwidth', null, PDO::PARAM_NULL); - $query->bindValue(':thumbheight', null, PDO::PARAM_NULL); - - if($post['file_type'] == 'you') { - // youtube - - foreach($config['embedding'] as $embed) { - if(strpos($embed[0], 'youtube\.com') !== false) { - $embed_code = preg_replace($embed[0], $embed[1], 'http://youtube.com/watch?v=' . $post['file']); - $embed_code = str_replace('%%tb_width%%', $config['embed_width'], $embed_code); - $embed_code = str_replace('%%tb_height%%', $config['embed_height'], $embed_code); - - $query->bindValue(':embed', $embed_code, PDO::PARAM_STR); - } - } - } - } else { - $query->bindValue(':file', $post['file'] . '.' . $post['file_type'], PDO::PARAM_STR); - $query->bindValue(':width', $post['image_w'], PDO::PARAM_INT); - $query->bindValue(':height', $post['image_h'], PDO::PARAM_INT); - $query->bindValue(':filesize', $post['file_size'], PDO::PARAM_INT); - $query->bindValue(':filename', $post['file_original'] . '.' . $post['file_type'], PDO::PARAM_STR); - // They use MD5; we use SHA1 by default. - $query->bindValue(':filehash', null, PDO::PARAM_NULL); - - $query->bindValue(':thumb', $post['file'] . '.' . $post['file_type'], PDO::PARAM_STR); - $query->bindValue(':thumbwidth', $post['thumb_w'], PDO::PARAM_INT); - $query->bindValue(':thumbheight', $post['thumb_h'], PDO::PARAM_INT); - - // Copy file - $file_path = KU_BOARDSDIR . $board . '/src/' . $post['file'] . '.' . $post['file_type']; - $thumb_path = KU_BOARDSDIR . $board . '/thumb/' . $post['file'] . 's.' . $post['file_type']; - - $to_file_path = sprintf($config['board_path'], $board) . $config['dir']['img'] . $post['file'] . '.' . $post['file_type']; - $to_thumb_path = sprintf($config['board_path'], $board) . $config['dir']['thumb'] . $post['file'] . '.' . $post['file_type']; - - if(!file_exists($to_file_path)) { - $log[] = 'Copying file: ' . $file_path . ''; - if(!@copy($file_path, $to_file_path)) { - $err = error_get_last(); - $log[] = 'Could not copy ' . $file_path . ': ' . $err['message']; - } - } - - if(!file_exists($to_thumb_path)) { - $log[] = 'Copying file: ' . $thumb_path . ''; - if(!@copy($thumb_path, $to_thumb_path)) { - $err = error_get_last(); - $log[] = 'Could not copy ' . $thumb_path. ': ' . $err['message']; - } - } - } - - if(!$embed_code) - $query->bindValue(':embed', null, PDO::PARAM_NULL); - - // IP - $ip = md5_decrypt($post['ip'], KU_RANDOMSEED); - if(!preg_match('/^\d+\.\d+\.\d+\.\d+$/', $ip)) { - // Invalid IP address. Wrong KU_RANDOMSEED? - - $log[] = 'Invalid IP address returned after decryption. Wrong KU_RANDOMSEED?'; - $ip = '0.0.0.0'; // just set it to something valid and continue - } - $query->bindValue(':ip', $ip, PDO::PARAM_STR); - - // Time (`timestamp`) - $query->bindValue(':time', $post['timestamp'], PDO::PARAM_INT); - - // Bump (`bumped`) - $query->bindValue(':bump', $post['bumped'], PDO::PARAM_INT); - - // Locked - $query->bindValue(':locked', $post['locked'], PDO::PARAM_INT); - - // Sticky - $query->bindValue(':sticky', $post['stickied'], PDO::PARAM_INT); - - // Impossible - $query->bindValue(':password', null, PDO::PARAM_NULL); - - if($post['posterauthority']) { - $query->bindValue(':capcode', $post['type'] == 1 ? 'Admin' : 'Mod', PDO::PARAM_STR); - } else { - $query->bindValue(':capcode', null, PDO::PARAM_NULL); - } - - // Insert post - $query->execute() or $log[] = 'Error: ' . db_error($query); - } - - // News - $k_query = $kusabax->query('SELECT * FROM `' . KU_DBPREFIX . 'front` WHERE `page` = 0'); - while($news = $k_query->fetch()) { - // Check if already exists - $query = prepare("SELECT 1 FROM `news` WHERE `body` = :body AND `time` = :time"); - $query->bindValue(':time', $news['timestamp'], PDO::PARAM_INT); - $query->bindValue(':body', $news['message'], PDO::PARAM_STR); - $query->execute() or error(db_error($query)); - if($query->fetch()) - continue; - - $query = prepare("INSERT INTO `news` VALUES (NULL, :name, :time, :subject, :body)"); - $query->bindValue(':name', $news['poster'], PDO::PARAM_STR); - $query->bindValue(':time', $news['timestamp'], PDO::PARAM_INT); - $query->bindValue(':subject', $news['subject'], PDO::PARAM_STR); - $query->bindValue(':body', $news['message'], PDO::PARAM_STR); - $query->execute() or $log[] = 'Error: ' . db_error($query); - } - - $page['body'] = '

Migrating…

'; - foreach($log as &$l) { - $page['body'] .= $l . '
'; - } - $page['body'] .= '

'; - - echo Element('page.html', $page); - - diff --git a/stylesheets/dark.css b/stylesheets/dark.css deleted file mode 100755 index e41f163f..00000000 --- a/stylesheets/dark.css +++ /dev/null @@ -1,150 +0,0 @@ -/** - * dark.css - * For AwsumChan by Circlepuller - */ -body { - background: #1E1E1E; - color: #999999; - font-family: sans-serif; - font-size: 12px; -} -h1 { - font-size: 20pt; - text-align: center; - letter-spacing: 0px; -} -div.title, h1 { - color: lime; - font-family: Arial, Helvetica, sans-serif; -} -div.title p { - font-size: 10px; -} -a:link, a:visited, p.intro a.email span.name { - color: #CCCCCC; - text-decoration: underline; - font-family: sans-serif; -} -a:link:hover, a:visited:hover { - color: #FF0000; - font-family: sans-serif; - text-decoration: underline overline; -} -a.post_no { - color: #AAAAAA; - text-decoration: none; -} -a.post_no:hover { - color: maroon; - text-decoration: underline overline; -} -div.post.reply { - background: #333333; - border: #555555 1px solid; -} -div.post.reply.highlighted { - background: transparent; - border: transparent 0px solid; -} -div.post.reply p.body a:link, div.post.reply p.body a:visited { - color: #CCCCCC; -} -div.post.reply p.body a:link:hover, div.post.reply p.body a:visited:hover { - color: #FF0000; -} -p.intro span.subject { - font-size: 12px; - font-family: sans-serif; - color: #446655; - font-weight: 800; -} -p.intro span.name { - color: #00CC00; - font-weight: 800; -} -p.intro a.capcode, p.intro a.nametag { - color: magenta; - margin-left: 0; -} -p.intro a.email, p.intro a.email span.name, p.intro a.email:hover, p.intro a.email:hover span.name { - color: #00CCCC; -} -input[type="text"], textarea, select { - background: #333333; - color: #CCCCCC; - border: #666666 1px solid; - padding-left: 5px; - padding-right: -5px; - font-family: sans-serif; - font-size: 10pt; -} -input[type="password"] { - background: #333333; - color: #CCCCCC; - border: #666666 1px solid; -} -form table tr th { - background: #333333; - color: #AAAAAA; - font-weight: 800; - text-align: left; - padding: 0; -} -div.banner { - background: #00AA00; - color: #FFFFFF; - text-align: center; - width: 250px; - padding: 4px; - padding-left: 12px; - padding-right: 12px; - margin-left: auto; - margin-right: auto; - font-size: 12px; -} -input[type="submit"] { - background: #333333; - border: #888888 1px solid; - color: #CCCCCC; -} -input[type="submit"]:hover { - background: #555555; - border: #888888 1px solid; - color: #FF0000; -} -p.fileinfo a:hover { - text-decoration: underline; -} -span.trip { - color: #AAAAAA; -} -div.pages { - color: #AAAAAA; - background: #333333; - border: #666666 1px solid; - font-family: sans-serif; - font-size: 10pt; -} -div.pages a.selected { - color: #CCCCCC; -} -hr { - height: 1px; - border: #333333 1px solid; -} -div.boardlist { - color: #999999; -} -div.ban { - background-color: transparent; - border: transparent 0px solid; -} -div.ban h2 { - background: transparent; - color: lime; - font-size: 12px; -} -table.modlog tr th { - background: #333333; - color: #AAAAAA; -} \ No newline at end of file diff --git a/stylesheets/futaba+vichan.css b/stylesheets/futaba+vichan.css deleted file mode 100644 index b9b610ab..00000000 --- a/stylesheets/futaba+vichan.css +++ /dev/null @@ -1,88 +0,0 @@ -/* +piwnichan style, based on futaba.css of Tinyboard */ - -body { - background: #ffe; - color: #800000; - font-family: sans-serif; - font-size: 13px; -} -div.title h1 { - font-size: 24px; -} -div.title p { - font-size: 10px; -} -div.pages { - font-size: 13px !important; -} -a:link, a:visited, p.intro a.email span.name { - color: #0000ff; - font-size: inherit; - text-decoration: inherit; -} -a:link:hover { - color: #d00; - text-decoration: inherit; -} -span.omitted { - color: gray; -} -a.post_no { - color: #800000; -} -div.post.reply { - border: 0px; - background: #f0e0d6; -} -div.post.reply.highlighted { - background: #f0c0b0; - border-color: #d9bfb7; -} -div.post.reply p.body a { - color: navy; -} -p.intro span.subject { - color: #d00; -} -form table tr th { - background: #EA8; -} -div.ban h2 { - background: #FCA; - color: inherit; -} -div.ban { - border-color: #800; -} -div.ban p { - color: black; -} -div.pages { - padding: 7px 5px; - color: maroon; - font-size: 12pt; - - background: none; - border-width: 1px; - border-style: inset; - -} -div.pages a.selected { - color: #800; -} -hr { - border-width: 1px; - border-style: inset; -} -div.boardlist { - color: #B86; -} -div.boardlist a { - color: #800; -} -unimportant, .unimportant * { - font-size: 13px; -} -table.modlog tr th { - background: #EA8; -} diff --git a/stylesheets/img/fade-miku.png b/stylesheets/img/fade-miku.png deleted file mode 100755 index a231913f1e4f1e4959ba1143d571682735e77dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yU|?imU^v0S#=yX!`KkLW0|Ns~v6E*A2L}g74M$1` z0|NtRfk$L90|U1Z2s2)~Tla^7fkCFkHKHUqKdq!Zu_%?nF(p4KRlzN@D78GlD7#p} zIoO14)8z#W3=AorE{-7@6W?As$k|{Z()`eV-1!1Af9=(^_JmduG)!zhz$E zcz4~hVZG`c{_k)3pTFgo7dUrY-cDhT{{8#+zSsZF*jH0uegFUN-~ZObK>U>R@&Wh! z&-=??*k^z4|L&Xj&;HAM`}_7!dj=3VaNg#@YcA_THF1#tJaV(0+NJ9B+j zM%0D-<$p5Ia{M}XlV#Ox_5!x~|5*3teNVgf=Ae6a{)ft_o2z)VCDC5s&HZfX{+iUrwD5uwMCxwR#W#ueX;K=M}wgIk$(M*X;P$1vl*uxtaAZd}=3B zBJZ0%zpThAT!spkWXqg2y==^9>s&$aou%;x4(st-P`{KWTaoz`QY9G$ka7R=JV zoxRVGZn$W);o~bF>B|~DeR+lzF>L*(AFMR4c*QfX>cN+~_SHPh#~-G?7YW!Ld*i_V zC(IvM**AplWO%xZLBesX!^=h0ZU7Pe`nLAV3jwd~MZrId^lg=G-)+9lqc;2C z6Qdb1Y?E&(`ybjOdZ>hP?(M5wbC3Cm-`Ono=B5c-@393JB}}B6-I6b47-q~X$oSR} ztGBQ`|Il;OCY9cwYz$}P87`PgZ%JuN(dzA46&!d;T1Gv2hUtgJiuV>d+b``-F<8OF zHudO&O%fqu(m!9iDcgNH9KEoRJ4b`*nKECRos~Ot=Yfc=pB`vzS(_*7P*~z^Zp`17 zpuE%I&O?c942!>uG*wEsN$>LryWM_E@lR}s-LVO4dL^cm_OoY5c_;nVSsZ&q+VoXr zfKJ!M3tQ_O+58IDOE^tCD{!e@sV((rbA;646Q?hk-ap$cv@(fhxz=+tn_qejN~OlH zZLTD|T0C=~?yB^R_3|F)^)@j#%DCJ;W2H{bX{By>hlmZ~L(ihS&TOMD8zE$TD{P)$hFL z-bDWQjVpI{?kE9$Y=?c#_uTor-0obj%xnFJ-4DeZ{0t)c z*L=wO_r+hv?Agt8iw)ufBzB2fCURFZuFGXfw!6?}AhBt`a*V|rwi){B`;Ig$)vxti zeN-`TVpx*E2~~&#QY(>q?S8V0c)UK5Be-MXc>$i>Igz%~Q5Js>v!tGLH@VMnR-5ky z(_^m2<$=%njCrRPGi6C>IjrWnpvAo96ho?;HbZY=YNCvM8?(vwPsiun$eX+HMuNtr z48^8JWzizKZAzQtRC_E=cUeeDTHLbPz@+RcHaojOWoKU4&Z4ljCI*Lh`Y|qhueEZc zb0>$zMWX{3b|^iltncUc!ly?3dt9f4Y(HMPh~w3{G|zjb;jy1bTP()%`nrO``mmV6GWYGb}~Mey#K^2h_sdyHMXg>Iku zE4*s?_2Y&%`=3|L(<(|b2Jfwq!(?WcWr%9nl+zn+~f@%n`B)TD6TtqM7I zo=Kl0g)|;-tbZ2!?IdT>9J}|&f9AhAUpilL?eF5odwlFx;ZLj*cb$B0vv&uFPS;L` zyR!Go^ctMAz4L_j*`_I_xZF)URDZpg^jdZvUmb3`?O^oF^g{3uWsD6Qffu8S9;W?=Sc?7ypty^ zTj*SGa=)aOQK8jZ{+3PPv9(SIPVqc3m}M!w@N$Dk&CB_25uwRi+Nzh%9p7;x)#VIrJ{3t75?<;kq~7C-)h|bKa?aru|U-lk;k+;%O^>zvQ+} z4VlFsZ0LKac^nQN5`6^T2N-?^@eCB_-mlwHRt{uD{zDhms z{fD=*+iY7VNo+pGx%rq$h=Uhb)rmWQYG!b$i-;H3todQl-L2govf`E5^@~|C?su7L zB10do(kxth;+fJN=Bpp|DFv zEBNh_g-bS-drE&;a`9YV$I= zGRY_HPHzu0$G4>t-Or`pOO&=o*PZzFLdoLqk-{p^#S;BRpX@J7+4p2UnzTB0mc;R| zJU2J@o+^-?z4L7M5=(hc{dL( zo%Oh|SgyZPB;<~GV*I~(n=W-7`*kJoa?H;OPCUDc1nf5@9kdI7S@7!dA4h?m?cuAo zIP8;mdo!soFwVo-c3-uJ@Z>{YSIwlqRxn%*|I||TLC-g-D(h+3PTx;nXCq%sDgSoy zf~>QA-i9<|rFCM=|2XsT%g|cAYNqWouwB76L~Zrt~#JKLBKuxUqSlACWm4AUmq540qPd2UR7rv~n;bN9mT>puE#oCG( z*XIvZ8R{=3soOWbXSc0k@@}_Ha$Q{SxWr35^v_T2i0@Lbx7?oZ9{)jP5!e6HMUvch z{wHSzyvGVpI&26vDp#bGked}CEJBhd2Br& z*;gwzdBtg!SJQ-al`g)$AY^FM5u1Kx`e)^Z&Vl9A0=Lh2qN8THddeN8Z6{O;ToV_2 zH%?FKepP#}=uNS9+10N>OI%&7KCg|b+I3y${_W?Vm6Co(p89t5NUCw+&81t!CWiIT z@zCE?bL;s=y^Vi$Qhz61T4k7d)hkn1X)T|k5!Xk7pqaV$-Z%Hn*z(FJ>T6Jx>yoci zytC)8_x|hhN37IuUeV7L-z;YDKAyBG#~{+oD^hIYQ)j)?YQD?r_?AcfE#SSJno;`c z+R-OZ3@s~{&gnXlsV#G7;o1$$V^1=FitM#fn15AAZL{Fyn=7W=RN8w>+si~oy=v>t zZ=0vQ?e@$*v&2+y>DChoyUk~R<*EJi_JVcKwYjNRbk!{9d!FkzedD>p?eVD%m(&9H zEcT2vY}UBqw$6Tb@cszpQn{B$H?4ISc)O+dhQ9H)(_Me19z-@jXkfb0z2fEPj#+Vs z<7%VQKFxaOe{;_@pGe=OZ6+qU87`(SzmLva899xuYKh$>wfk3Hr!9EK&G^TO$%1L^ zjcIHj^*6imm>w>@{I33qbLpNI!1E?+g@{(H#4OoR$Vj63JaaybAYEe!D3alP{7v>+g?c~?_ITL;zoO^s>Mq* zu3v5`?M$BCt^7$uX2tB}=>@@8vrK(AzK)7@j(1yoMEIofps6M+?q4Jn;?Z)VC*JylU-M@O~opJkmVX^2?S3(w&>8Xk9aqzVN|BbTiK% z@8FFKZB5#%y1GJFd)}S9@w5G4?Yi=ya0T1^A0kF}hrS%H*)%1Z zCBjWxIK?=7!^34oymIREx5>GzP`k?dT;oadDc{`RyQVyd=2F&Sx!`wXzx1Tj^{)P& z6MhRX-IqBla{AV^W7Z3TdACnHW_`go#MnfyGDG)qKx|&1Uh&Nr&(?b@&O0j8UGT;{ zf5Ti?$BEYdPq}QoRCny&bz;}Uqf>3fr=-+}T0ZSRS7AMWN>AIfTfHXBLoBcDJz9C~ z>@CIc^FONP9GZeQM@>C{^lb6GRF?Yh)^BIOtW!5yZ>ct;Ph+wqv!U;gJqy|A8CBFN zJh-s=r@*u3&3{kce9Hg-{(DRF%VpW}_I1iXDp%Rst~t8&@2x*8CG=9Idz#B$tG@ZU zoy$bG=*i|&bw`(%E_~rCdr&Y(_EyV&@iy77vfnox+n7B6T$KDW{@6_iwe8=%pBi;^ zTHj6fuMF7>mj2#yNZe~yvVZ2o;Hukqqc^F4tef9oa_9L64&$;T!c_;ZrWbHr`Zj&N zLAAv+sjc-PU%I9_oKrk=k=b_HlcU=Irp@5w^**w-8X)0>JXU_bvST5|JaKNXJ zvpQeDyKv~Qy=Cs=Z9PKA^ACQEdUAfvk4v)hlRl=-KiL20WO{|$LYJBw77wCcPGIbR zzRh{x^y7wat(UoH%ZA?i^WuN_%%*<{xuPH3IVGmfe`p=Yx&Prd!M)NO`EF+g9A1}r zd7kNyD+}4`SvRiEbDba`vTp%Put~D@rsvvGTpZsdUTvFqqk5V9!gFpWC#K{iYA*c0#kbI4*}KP+78i1bSMk5tsNPh|Afn&V zs+SlYvin@Zf8lKmeeq8VTiVN&eSD6@Hf)wJI`?kF*B({t>2G2-eGWf+&d5*II^WLv zyXO0ExhKzo#Q%hD-W^WMbgYbVTI|FTNs>!gL=ZF-WwveRBorD)p5q%j+d} zo!O%eazTFo;?rk#|2}*%^;zu63#!ib**vjn_j0A2w!Z`0iT!y7;A z9%1#(57GG{eemZi?~N03)=pfzOUw0XS(5u|Nzt{(176Iw$cl5zDT)8~uX=I+j&F%^h8yZqdJ^}FIzx2`x7u{(a= zi^-DnnVj9X{1oH4+pg`yF&z}<`}%qI{=CREv(&roUzFspmp%U4i+%d)#GDJK?`Yh+ z>O*ag$a8^x!mGOFK63w4wfJrCaDVoNy!r3C3=c_X{8!DCDLOI#!*8uU=}(^g=Z*f~ z@TFedo;&J_fLpoL6|)mY$5H~tHui4Nkommx!}Dg*PC?0cvF-QmZd~Q~)*pRk@hOdT zp9hXdr{+9-g-$Zkx8<>uozT`Gr!{CzWkxCAEudW^Z2VZ_}9*)ojoGO*|^$ z(00X_2Q{8_SQ&2g|JC%SYIop1-LKhCHR9j8uG*3+c=vYST;D5q<>NPLCEDFTzgg_d zUa{}tJey`(-4HU6zbUXu?bC}#WmB&PM`>Sh+IsJZ=?Bh;lN^6qvM)`(%dzUw*;DOb z+@97qt+}ARV_A0c`?gJC-zVrlh&fq%Kj5}r!t3J!<|)24erwLw7_JlE*%uu?Kd0%5 z?~CO2CEUtZ{>@+1R+&cFH*LBByvJiN z-#vT$b>0`<{&gak_q|{2?|VbSKZiwVi{mG&=}*pI5$|u{ezMWm_Kk7is~g_^59)hM z)FK*P9{mtK{7?PBH>1Sf|5GCErZTs6Eq>pxTfI>C_4W-<(^C!yZn>5|_vn*IpYUx7 zJi5Q0p4XK6D3hhvA#Aft{hIN<#%~?s$5&shP?Y`Nci;KbiTVk#x3n*){ftY?l?uDT zEpRz{N_)J?g`kqp7Sa_4*viFti zzL;#P|F?R{{mT}nS~E-iH!uElKls=nd*cH`sqnG4(iq$5=~zr+UY`nMcCTS$DnDy}xuH)4j05Y{RlTp0C$M z?%wX5w>ss8s^Jznqb;FECE!e#%rp1cde_<)VkdvLJ=qXh%>QxYMGG0}ncKUHTP7{7 z-m$_bL*|pE#S6v^_Pqzse%W*TP`K*;G*^S$X*bMncf~V#%6o86uk)Le8}-amo;x=7 zRpk3q?4GaE4By_Hm)jV1ZP$12xz?2vtPZd0;;?5ivAg)jJn6G)%8rzM4s!VkE*}-9 ze}8MiogQG8W>eN9_W0PdU72o~y#HfUpjPqy&^HmP>vx=yKk)P8&1H`R zPMxnbakP0}GJW$SIhntl=~iZK7bnd2`QdVMr^&Hz3$|qNnZ7!BQ{>_K>GKQBC(Y=8 zX|pmXxZCd2&7x^XCx7{OU6pfwk%P&kcK;Q>O|orgU%cWWl%ZT%`*QatPSL)?FZ;RE zHIDB2_+GT;(INJz>kg*cZ*R{(Z1?8ZA@f}!#}xkaX`EVYb#>x@=B1~LqxQ8Nmuj`# zeDL!X!>l;oz3k03+-DNygW{O0ctew}DNad#bV@LCt>?5ITq~D*8$^GyF1erdE!pAkPZ7@zhgM9LIG-!@&G^l; z!kqcpy5BrsZ(Jqsbo!u~$lKI#r%g|{8rTh7_)?Yix6+Kssz50))=GVJ^9Ja1!}=g;%nie3jNGADxg>d}yU?d=z6b9s>mKi5dRDRN z2UB$Eq#pe%*ShxiEReZwxlqIK*GxwxZSOnWJ~Hp;k7w>rCtlw( z<@4XmMZ(ure;axRF6Ozb=sLw_(t6K*{l|~X{>Z%SB|q_V_r_L3SB(qmQN3@Mo($S% zyX~F9JVm{E)rB4};_qmg+x$Dzw);Hq^mM)F>y580RerYC*k%3B47Oc+er=4&j96!q za;Yo*-SqeRk=LURhpt)hLofAe%dFO;pC9_Y`19hrdb-8?^ICJyCOmrLb!1Yvx1Qe4 zip@JJM6wA>9PHl0KxA@OP5#Y2%fG#X>n@#%>QnDKldp-OD`|*oYSGRdH2L1 z`HO4HdL`C72CWY&*(*5t*Mu}PX~UI||J%LYJT?54~$XW}+rh>3AKzr?4VaVy*HzojQTpXRJfo2M*&amSjvC1>_| zwz@u$%{bpufA}I-RYqW@?X1*AcfEgJanLfIHFMoX9@Dz8mFu^hw2o@6nIv&c_0x-P12VEtRyV;??Ar0<(j z5Le)%%s2m7oQ1XNGUb*jF`qoMQ;enJFXk2SZ(}r_v41<4rs!eG|FYH!haQywdh?by zZ`s+fa-**==bLd^y_p_)`9b`JH?5!QT#8wL#KccmdDwc!VvWl@J>KhYKK~Ss`D(y* z?vSKsY3=@6t2u|Je)Cfcv6#Hlavl5GZx>UnxMm$cK6xb{Yff47vd!nS=kn#2@vY1# zdwBygjpO%Q_Saqc3x0Few0~{+*pgdPwPC%u3A^tts~hR9&aK5~&K>VsyjM}Cu<7lk zrf)0HaW#voiOO!On>YtQ(0pXM{W)(~G3 zKeujn*~{;dcNMkIt#oYu{Os(M*dL5M@{(`sSdRX9oAzrJ`|m4TA556e{Jh*kKI6~> zj(14~SLXR-|2y%?G-T<)%5+P0u5ah7%`cz($dJGA>f7XtuP@F0^35Y~_Yzs#HHRjD zVf*u4^Hj?E>#42H=6knaUld=Rt0iM`R^nUEV@CFhAl)BZzpp=e<=CY}d;iFbhadA> zxkvnY^}tSV%I`PN8T`MmzO0h4+t%p|i*)&elEUcgmWLOe?ONw7lwosJL^-KwuWLxVZoKuL)E;K-n`q(X7%SSgZZ4Vp38UL;fg=#+ID1(US-d8$L-z% zvesMf7k2wywo_ue7=TrkkZcywBU(_jzHn?XKl_ z%D)!0$#sSo+E+QUG&k4%POB=Y>MJiS_%(}*z0NV2f6nzaDYj8l{~Z*}{b0&>tK@9+ zxBQ5unKynOT<^T)**EV!7gjpIsd_b`jD2qzx8CjLaW7K;&nV2%4*K$+wI}8FzEoc6 zT|DmtZ@X7q6yr%)|8L)8|7^Dl<>ywUTV{0fNmOv-j8Ckzcgc2njKROR_K5yA#a@UH<$XjQ2riQZ*+pQ zpn-g$!RL#XQXVYFR)wZyEykRH%s4c`_DW2PG-&>D`AIvUbAKe9H<={`T(gy1kg3!8 zb#qTyV*ZsC&mA{vxH(<_$0~I~Ep{ow;5UQ43PO+Q2R?k{%$g%RVBhTM8 z8fS|fVnY63iBXS!QL&S4RoUsDUZV@|EgdYfOO~=MS6eytNoh*&vX2)e?2g^y?0Hlz z;*zW8@xQP`Jo@O%zAU}5IlgmZ@?X^& z!#_+HIN4rrRMq~xy#CP!!}Dcwtv{O%U08d9Gx`R1L9VjI=f<#>gA@MBK0K6YexSzk zqbi$D?aSgQUA{u?IkV2o#hw&cyi4Ovw`8sXM-(;XngVXYBl{&9-rS_YG2Q(FsbB=|1eIVE45w7aw| zsd=Ht;#Q8XTe*Q-B)ZO2O*MF=qwU?}ef;9HMo|gRO*dkil~0y#J~ef7*3w4FbERAc zwc(z$K953H3 zmfGEJIP1@jJDz*z6l&*Mo|IwTpmel&*2ym|HC<&V!Yj_*(^A)-<>9BWex{X#ZraH+ z*Zm?k6-l_?ExUJcef9DOPusm(Zlrf7US1m{cd1g#_Aq1CtB$;9yLBEg-kZ6|wKMnG zKhCR{Uq6Gp?US zoq4?Znd#ZtE7!!%be(XWzeoRjtmdDiUvEhrvnujldLz_Zmt(g7q#HHUSWZ>EnO`}* zwx~&F`T5_4|D=Bx-%a;;{V!(0_QQ>Q)iaK`M=8u&EH2*YYAC*7_v72=SPL?8Px^Kl zvz0~gMW;+$^@u5Q);#0L&J(lboTqtB_6o}I`Reqi#J)t2(>~d*uHX4j*a6{Z8sh#Q z4;M^OGjiUn>6hlmGIOW4W}}Vjm9WN5@1H$ye9NKwd~;Q~@8@t zD9`xe{@0dFxjVKVKDprViG~K%%lDEODDGok zz0ouz>Qv3O74t>iCO)~TFZk`n=Xt*ueR4e1mpVD+`-^3#jxBu|_B7(;l~2`POFnzP zXuI~O!~MowZ$bW$qC@?)hBw8ZX*cdZU!(fRsV*Zl`J7OxeeJ^KJzk#^wU(W<`f?(R zby0=!L^}_S8XOoXGt#DZvnEIFhtFuzdl{q`- zD7C1xI$m;|V>#!|%@<#MHu-$rB0hJ5?t$57>ifUEU{!kk;I;Nu;qB!=zVY3bbMowo zeB2V5ETyHO%4(aES7+zbDtu}lSNrSb7kTHd2)LTNZt>L}eY;qHY+7|BH29I%#IvrS zDqXhA#q%Y9sGI9G*(>c#=)IF7=_jr)X}P)A`wsUhQ_-2H7d#fR3|V%|)7dli{Uoyo zp52_spP$_Ecar_gNp5ZDfBf^1{c6f9+*<#yp*bV$7WbLP>tYd-^Pf%+pUTiwt9k6v z&tukZu@9%oZ?fCP;b&hs=SH!j&8d_B&)om7I#1|Q^6QJw&zNZ)F3ovnra$RfjmqAN zblSl81qKwxx77ZuKINq? z^*Y$ym)rK0V>sU<_b{Cs&$VRzYUkKgnUZ_Kwze&$yMA+;cyjvyMee_H=%$c=a<68jFGyciVKPxYA_D``@{Z`vYV7hTf z#e(Ot%*&RXwn&&))S-F8$WG=`_^to;yv~y1CJOcL@7MmdDL=bw-=5Zx$h)<%GyA&^ z?&m0Qn;1|nRdD8E$)vttHZ0{z9RFM=o{r^`6+JdVXdTxYCeFew&-ly5>gKTYr5AmW zac$i*OG&-0NGPNEhtizIa^K&56uT)CbL8%FiJA*9x8*OB{(fh=3ROt(h#Zv7Z$FtKD{E^r$}t_oKUYk!Dx~7zjr7s?|7_wb5Yg& z%`(65bj6nL70DEwc&rQQCwnl8>}Pq>dY;#mTu|tc&$18nqB<#U!6a6U(K<3 z`YG^jp;>wV(UhABn{uXX(os6y9y85%md{@qzm2~hN-aBm;nkD1-6u~b7k%=w6rFfE z%wmUgbfW+6N$gKHOI149t&a3bQ&!s?sJYp-YHPUYw+XpB!)HThE06g^Jr0WM=Gj)g zIr9942^11(&w2^{zM#}*OJxJ&z3(~te|Ba3nu%8Z zUy^QKQ|>6c<@RQ}HNje`>zZfqdd+spm%euM#E;o!#H-xOsys~DM zo@Aq>)WL#~?T*hx%d2KYVCJ=$nQ#NzW$;2=+-V>S>=02d%VAAw(9SF{oVG?)LpIqFLTTDPtH5? zyVmYf;rzqOXKo1kzhDfXe^AlmcKp6WZyrWuUHRvjziZmWVvgc34*i;yAG`Lera2uJ zD%6d&>RPMXd9p4|?azw#ssERln{D2{{rLLb&fMSsKiSfI%g9S+KkM=AiT0Zxd6(CC z9GhOtX8%cj{zJ)Dp^u4=fB604ll)MTXZ@sl=Kp`Mq^^d&jJ+zgmu0J0xY42S;jh1R zh4kOkJV$62aKIz1Bx?62|lkH-) z*viP)>~@KYTq#%4zkIdDAJ%@f`#E{Os#^t5MeJo6(M^nx7p)E{+3s|0(#EOZ_sll$ zv+w)xA+M#g`Nr*s&x^k~pSvl$ZQjO|=imvnRW~D#txS1-HvPHX)4Th0Z|($%@6RgR z=3TbW{LLQGO`lC;`Ip8)$LY`V#Og}^x@TCTq7(}iy2`V5I!|rBMAdBLFYi_U-hU{S zukCj7qN@9JnZKdMTSAMz?0uN=(AC{y7id1tyY1g9$y+*-Rfi>_61Riq+-|C-ub;d5 zEAPWMMxXOU=h$vOdb^-(W@Y%M;*;m@3t3N}S^m9$E^N9_3_RUu51#G=O%-lGb^$cq zm;3@Y-6sm3?&Eg`P4|IZ@U{><-Dk1u%pPsYT`4c}dl#NQv)ecMh1r|dOy8C4d%IZcl`Z0HHN_^aHQf{%zI4SMzc(4Cix+*B;HnjNKYO~P_uXl^ z|CY&js*dedd3&j4+70cCW(ys68_H^}%00hh+gUm3KWf{qZ(mlsZi##4miPHnZ^^!# z_a^eb`rX?PcZt8fnVSDa@Vea@ZMJXv#nJ1bgN)~yI-Z(neV4?U3}~J zo;iQ^C%%@S@bCSjbjNO~LofWAZ?Q!lo1t?`X`7%}YqFjAznTq7hDwL`zW#8VeYe!X ze}&yuA(BsfIBiz!n3VfR_FS6x?~39Z9@nnzzBr*$DAvV$-jQo<>++}M7jOI0sXoy+ z`$PJ{e@@&!Kg?8YC0bpmROx>olsQUKC&7He`KlTn& zJ@fo`<+Y}L*B|}sax@EOk7jzNEbVm7MK1Qvx=mGH*{o43uFc-TX2+;4**L$zw`!BL zW9Xj9pA+t__~So8w2Jk5N$#7w0oPv1ePW%Xz4N_v)@|0DzY?$7)^wil+&WYLSgF$W z!q=}R`%c)yS^H)}Nuta1%nA2gwz9o;FA(efm7DUGt@5bytJ$gg-#PF6t={#1gZb2` z)!!a%d$=Qe*Y2MccYF6ey*M@L*7w>kD>w%4k8 z$yUD<{Ih=IITq~+9y0rrZv1Dt5vR81<9wsj%Zm;K6n^=;F;#y{>R+*Ke|mB(x~~0N zvw4P1_sdgaJqum;|FLvcp67g)wXn(k`;n?+<`?8XKB_R4(qHoU-p6VWxu5)-ysKGn zsoX!k#`iE+HDgj$_ooltY`ZMlY6JLZ_OCxYGnaM0gyqjvb=JS$8Q%@A>ig_I{UUHx zb&ZqRp)a=Qr_OWxcD{bFQb6$D$k5x~uui;3$&2u{~`lGkPOXkdnm(F)? z_C0O$JbB@2Z`;?gKNURh>MXl^d$Vr9>8S5@D~r|ngVG~H1s}FI98;h5*DYsX3(xd3 z;wK*S_GrjG`Ls_q{UOh(V?D?FE+*Z%5o3P#eDJT2OSL=8_=Uq|Qo#w^%4}FdwGmt8p%sF4fa{93wa#O_4E_AcCn632Z z=O^KJZbF|8=c-T5&ARAr7kzG1#iV=xcd0xK=Ie0#^ntT8%zsxCL%zE?EnQJZ2r!reyH$8e=z2)|04o=f3kjN zg01~|{)P|wN6x&g{}kNNiLFA9 zclsWxYrAXH_qKTLQM*jru&>S;mN(iK?S0d~(p`V`a@mPjd{5PGI&s>I}N z_y4T0`7~>K(Z2eqyhpoI?A0{0rYy8x(lN>Xlj+ItAAjs%w$F`vsa#ZNxXoZ02kS4F z)f@MkM4sAq{F>}B<0D6l_4zpec1J&LJ3jwr!S|gHKb?8{r?hQX$&o#!Z7)p4&pJ#G zx1XlXdwOb{Pt?aVe?R?IeI1p(qf1oe{?awG0yb}`u)D)KSN`v>Cp^#pMlRhf=`$y$ zGoq;QXO8Rw^e(FoQ|1|l0|AgXw@gslU@ac65 zPfRT{4|=6M>*_ke$EF^yLc7+PCk4r0I+LcXR{H1u^4f6Y<1^W>etmU_e@f-Y*6m$u zr~PBPuiGd6EdE{ly&HyiO)K4{r}=jpUH5!cy6@1LAre` zztG_wE^@-(l23`c*+-=u?kc@x`)SYm6aVgo-q>tgm{aKdO>A%3CGDMOSNyYnwSMmj zi8#5(XQm6CHv?)2ryN?ImN^0v$D&2f9IeT(hynJk#U8Gk zy^ovKFJ4r7sQlLZ3-A9ml)W;EytuqqJ!kRd=GwgrEHf@$J7}jZqctbF%q~pkE$_n) z;hgDWTl`DIB-R+Le6gWdcH2g0>1IC>=lKRa^Y@8VCDkeEl}(E}EckkZS^16FvJD&A z{w(_a>dWmd-uutL;)^Wwe? zH%TmDDL1sp@?U0JpYl^`)%gc|HqQ}e{r!CJ?9AsC4cjlg`nK^!=}W(=>J8R^6yCl_ z6rH!k{K0WJK;i#320atEtdo$Z#^{G?N$;~Oxxc@mh>;D4(<;}_)E%GOOy(>TW zkY(zFCpUJ@JajxIig(3_$c3AoCUa?6@33FdFB`xpd*h!c_vwRjkyjRc=j#5{NqTe1A#dICb z)P7OMIX7AD`(rWDx5|@pS9f3A*RP)Yx9#@#-32ojKW;8K{4=v%On0NwzLw54Zs~51 zug<)9MRoSYGg$}r@4jl~=f?N#f!l}sr6fcP}-jxY={9I49lPH~V!4|D{XYzA!cM z@i<+Q^jTfB;p0{|_kv0JDbj3f(&fLU=xBe%`_KO$(m&m{Qwwmwp1dZTM$EXji z%a_GRD!gThU|`_dnw#wu^6T8Ge+>2EyC~Ug3e#IL=k46yiMK6y+=4x%JQX!ndY4QP zndBDakvCy>`R8}s9w#H$%igXqo_F~8hYzUt`@Z~px7@NoYA_3``vt@?gzU;5v0%T+vwe>d(q|LEI?Y5#Wa-qv?DU%h^v zdpK{kUEQA>*RFc~d-p%5{@0h6*YD@w-}m>=r>Cdue=YhZzIFX4O)dR%PbHpD^!ppL z?$-H@xAK2ZE}I*j85MtZW8!(Qb94XcTm7v6_vhzzv#78?hEJU8xAIIZ-YWV%^2u@22X_0c+Uyuk zCEFUlxq0&cnt%R3%ir_7sC*Jvzgkz}`mJp`f6qjmykEue;`h{frH3yR`~FnEJ}ETz zwVg-&_ZbH&e?(3?Ubai|cIVfgr}4Q*GI{<7l|K4cyhT3tY{Z;g`Q`EHzcnKx?`iV? z%6%4ly;5iTrZu^@6sp<`PrjN34a*8wiR1StyKlI@{Qu{C{r8cd?*5XCd6m7(?CZLU zmeViZX0e}tmhLh4!?bVvc2E2MdG4R{H$L{)v{lagUb^py-rlKy{W}q;vMYc|PY0_l@)j1?4wotj`0VZ{eT(Eq%M}EuQaA^Ja>D zdiUn$%(zqcOTVmm+_>&Pb7{uj2m5mE`)aFWdoJkJov6J~7XSUfm-Xw4=lN&Sy}rHv z5*a(`-sac!4%=Qb>%Cd6IrCwDVZHOTKl>-!*WR~tIQ~0g{(*D%XM9rE{loC&^2z@i zd&4K%pa1r2_NI+{y1yK~E&lx1y_alXI&X9CI=V}u?BB5|`_I3A;y>rq%r8Oz=3M`I z_+QzZXm9&y$J(X#x_`^Ry?wg%O76w06aUuQxSvRV>fJJRzhQ01p5>)aKUO^Rsk*mJ zPA>G{VFMlz3P_HAGy9K?-Tw3#+iwk$$@}HE)qdRUyRVyjuW0?@KZn!P(=WgJ^WYli z3%=tm&+i=gqU#j*`g3-Cy8W3?3)Z{Y&sn^AwZi|YcdwTj)YRPQyC8j|-uC!%kNpA1 z-rY`rUi@bJWBub9@;4@a^yEEW^7l@i`1R_EpPv89i(6jXxb1z^vmgAsDqZHip8om# zo9&-XUv#|u|2*Pk{nG#8WgosQUG6U{t@&2z_r_#{b26vPA|Fh?ag>|q|MRF%?`!HF z?2K2{KhLUj?n`|^OvCAuJ1fs^cpmjh|H8?a*7_A~;@2LYEB^W?{w3RXOZ)$_s{_v5 zS#NrGcg)-9y^kwv?%iaPIQ;zUkzR|rSI*!4F+ZK*$?yHAPi^$6eqs*}7XzN>67dhR zjrSdR-e$LD(&HaY^QCX!IVS$2>WS3qlRuc^o9F&HF8i|^|1HKg z#&Or#Z%c36c_{nCnv|TM$@K@-wr6>3&z|!%zg{Wz(=Qvn$EW5c%s%)kPQ$qB%%}6; zUX*gpKe#OCwzk>sU-!$lyqj$^v+cUT;q~pj`?Aer|Lf;mPL_^N`0Ib`+s_MmwR^8W z|1_&*^?UA#?x*g*?%T*V>-v$Zk_m!4;>zwnG19EJw+_!eR`k_$?jPCwC&}OBH_!j) zS@p*L*S;D36aC+Pud4XoQ@vB|#&N~pt*JY!^!}~vB22%WW9{+SarZpm)y+$M1Bc+)@83MT zw)R`)xz^`gvU~0CHBGGVua(%g@aY_>h@a2P-yYpI@mARx`}QM2BGe}`_u_2s%Z%)9?+RG*XH zcz^xu;7f0p-~F}QVf~@4Pw#)7@BQSxrTmL`f37Xqe{#pc6-?Px1dDJKOKi@7jFY zV|KjW`sd^0tG^Wg`TpYH9cXHlXsdouak^(_%+dOLU3Y)KDv+&szRlj?diNf2<^QJh z?mzfZ_3Ze?{+Z3m`(u}F-n6iSFYec?oc2$97EI;8a9l(9dfLy8|E=oe=Px^b`R3v{ z#+(J2{73Vin@U-(-@H7Qloz2o{^cP**wwET2_W8nLZ>mt`(ciU+(?RC8%zn}fnI%_LiFPrJ_Z{Pp7 zQ1?v#a& z_O|xQ=Kb3rzSrC-cPB5_fA{aAd$MuTXTERFYOiZk+WxLuzTnx;M?Z}$%Nxw5$XwOG zpeHlGO1JE-)o<;;$Nw+>yveuvUifsmzx}_xB6qHj`o8wmtF4O?RJZr=zP+?0$Fje5 zkI?g}Z|7~BDRXuGd1e3ep;g*14u<}>w|@6m_-Aq7^E)ZC>g38kKJeQ$u-#^Rx#SiWtsGVBvbZnk-3ETRY zGp<*>oACJR+T#9*ll!yR_XMwz4|_ZNkN(x?yGy-n^I!3}|K0z=ru*t{ANBu>H+}Y5 z^T~?;iA(GzvpZR9(&o6_C{Ct&AczWtLVdB=P$nNBCi)Nt9$q& zdbdnvfre6vV_Ny*tVBousXuwWtgf&7bp&<=e8BLy6*$&}C1->Jl z76R;#Tx3qfy?kYNeRsO2!};_7BGzYRrSHxZ5aPJdJa78+g9!!_JZ#M{>Vf^AUteE8 zeSUs^ea$1Q@2j3aDqgyVA@#@igZ~3x{_Of^T=W0m-=~+C`-7#8YJPrtdjGuMzS`g4 ztlw`iPi6V?+uiNT?=ADD&h!7epULdvzjfc@zXtv)o4RcB^|$wb&W#QEwB`v*tkmAP zrKi`Wzui-9SCI95b=B)P@=vqxm+st>UoAI_zmj#;zx9==U;BQ~x3B;Az50djrN2Ku zKK{P9qHWg-eQp=4y>c&&UH;8e`_!>#r+Dh>I1lmbUn^fN$W+$%cbENA^{4mzs{hCD zgWBA6@3^df7yG7O{G{wV<-Bp^d}Z73M!$FS1kSt7G5h%a3p1B>zVC^SDYkW$n)}&e zORcNj5_j}xg)}~Xk*F)r2rR&cBSbP27uQQ@+{?v!1UHkvCe(s*eGyh)Y zuLuq+eBR(nzJQM3L9yA^efHep3&yBzFJDcXM*4W0Y<=Y;d8?@RuFZz#Uw=)V^> zzm&hed$RQ3)W5Z|j}C0RVf)W5TA}{m_qw(ry>z;~ z@@%H~iTB@*+kf);^HlPz`8vhN#&7)N18XnLXDt2t{#Cx@eVJKuGhaskvYoe-za)F< ziSFM&d=LDecd)3u`)O09n2_NDGAbsJ_xDN8`xe5!{M&xfSNRX5rj)O*2~HDV_xsMl%k!tyYtO&-Qgie6 zbJmjLTi%>;V|*&Md5g7G1@G_IH%=b^{zy~5!$0^Ocjcznp}!`BTyJ#mTq^S^&9GEs z_40L7o=;47PoLRm``+u{x;S{=?{(CNWW1?w8o?PU! zbvobKo+m|=SM$`fK9XOvzxOJ=Xs^J@2{XyUe|Fzjsx?oBrjD<1*uUFTZ%!f3|2lp0W8;`KMDUXD*dqFF$?a z%Z}zy8PD%e!k-sTY5rib_TAO%&pj90vCq|>zWAfV(>GK23ub8Jh=tGEAOoH}ou^4$95YO8c7%M(F! zdry3MU*jHLH+A~E>*bQGjaI+5{*+c_<9NJ(;{C4lH*ex!)<4e?{P}D7Y4OSnfBVi~ z`Zw?Bqs^ae*U#PD5<2thSJ_Hq+j$Do|EETOF^hlud*`kH#<8J)<4?bP^Iqo5s{h&d zV*jsyRv-KS`X-3k_p<&s^y%8QJ)B=s^YVxG^i0!#tMBCfZ|qnJ+YZ}{=aSSxrw!Y^UprrEzx+c_2)cB z$v<{aOP_{Uu1#5UYR$U!mr|-^V3|kj#hn=YaEk-(izl7FE-%k`{t;8;?%#4}u39zy zy>#A1G=25A7OB7m)x!#V!!yK_PW>eD!;w2-V^xq zkWRl&+}uJpS^bEkzsoFk>0MiyF8uJiaqZg^J03Cl2mGvm)6Y|vr}{V}l>MH&3E%SP zKQ!Whw-)Esgx7|ot5w7$zy2~=$L;Ok)@{dsif%Z3aqSMiPpiLd)qdQ?ZFBI{e`W1j z{l}r@7Eb4aGUCsldjI5N&2D33MgH7rMKR`~mOZ(z?rT&Zy*RgE?#z8)?iuJGg+*iEcdgj;uzWcHN?{BnExBja0Jn#Ocz09}r%Pn@ruG@U+`qY2x&)-j~ z|Nj5PyT|swj{Aqb+++K5N7T*u&*zT)m;Jq1d4E~zANz+d%66Xfiw{5cf9~c!(N$mf z7u}2WX?T4r-?~rW=Z5*`3^%85vMdOTo9e!`&TeLO{KFSzJN*2&2Y;89oG)q&s|)wk zA9()a*89L6leX`Rek}KX-}M^@ILlJ&{bNM3<184iP3d33TxP@gIx4AZ*ZNJj*<%>{ z9*Ri$zbRPSx1KdgY+s&Ao!E!kHT(FE=f9|$YAo^b;tbwg@5kIPRzEHaJ$CM2Y~1e5 zEq=TB?>*fSF6;PhxAK*FJvPd8Rz}=6`c&B>&jG;I%~T`8(Ni zH{W{plup>Eox0p7cD2y^bJv>QGv+(S^*`V6&f3;JXyIo2ISen$-mKp!cFo%6yV#e? zrtJ#(V*M(9?+m4%Z|ShLy1z8wUD#t$#(Aal7u#$(u3)3K`p^DX#@?$dg`HRKkkA+Z zX)nwyYX|K?R{ z+Q$E){V&Y84A@uXR85*+?07GJ)1K858{Y9>sxaSp?alVZTJJ(@d*7`MTBrJ1QhV=? z{m$!z*ZkRkJN`N6_FMDoJY)U_e!E_`F}wZ`Tjk30%JJL(XXUfkxm1Qe0qe%+t>r(fIIU-m9L z|J2HH+rQ7Xu2$PmoQq$bC!<|`@n7lx!?thMf8PJhxCJ*{6KJ@{(y?f-7WKmR~Y)OW2pf46s~Hf;a0?q^@RRqMLzyFPB~ znmaEc{Q7qt|QZ`_kb>yBwY z=8!$2Ycr3peAynozx~FAXKJVNKb}{wUbd?AL%B-W#z|}Pq$Xc1d-zFXQ_-efhyL$a zXWIAPXyx9HVC(Q5-KYL%_r#y~zIcAh=d~72`s{ZP&dvDw!u9;s1@hC?yDeXp+t+(r zU#hVBR3ZIg7pu**H#H91_-`j~K5~BVI??v!Kf``KsC;xxlzn${{rCS4x2N?5%axzC zaAKF4`l)c;;dlRIe=iod?SE;+{w1g1>2j)BSZ(UJ?>jr@tzG>o=Ú!r!^et3^F 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 TpS{HP`|-g*pFCzk1_o;Ytxr1D diff --git a/stylesheets/img/testorange_f_bg.gif b/stylesheets/img/testorange_f_bg.gif deleted file mode 100644 index 1887e7fafb6e97ac3bd99eade27900523dadf463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 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 I@5o>c03A8bt^fc4 diff --git a/stylesheets/img/testorange_top_bg.gif b/stylesheets/img/testorange_top_bg.gif deleted file mode 100644 index c1d1828294769df41824d63387a4e3c94cbae35f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6551 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 - $config['thumb_ext'] ? $config['thumb_ext'] : $extension, - $config['thumb_width'], - $config['thumb_height'] - ); - - $thumb->to($out); - $thumb->_destroy(); - $image->destroy(); - } - $end = microtime(true); - - printf("Took %.2f seconds (%.2f/second; %.2f ms)\n", $end - $start, $rate = ($count / ($end - $start)), 1000 / $rate); - - unlink($out); - } - - benchmark('gd'); - benchmark('imagick'); - benchmark('convert'); - diff --git a/tools/inc/cli.php b/tools/inc/cli.php deleted file mode 100644 index 4dc19412..00000000 --- a/tools/inc/cli.php +++ /dev/null @@ -1,104 +0,0 @@ - -1, - 'type' => ADMIN, - 'username' => '?', - 'boards' => Array('*') -); - -function get_httpd_privileges() { - global $config, $shell_path, $argv; - - if(php_sapi_name() != 'cli') - die("get_httpd_privileges(): invoked from HTTP client.\n"); - - echo "Dropping priviledges...\n"; - - if(!is_writable('.')) - die("get_httpd_privileges(): web directory is not writable\n"); - - $filename = '.' . md5(rand()) . '.php'; - $inc_filename = '.' . md5(rand()) . '.php'; - - echo "Copying rebuilder to web directory...\n"; - - // replace "/inc/cli.php" with its new filename - passthru("cat " . escapeshellarg($shell_path . '/' . $_SERVER['PHP_SELF']) . " | sed \"s/'\/inc\/cli\.php'/'\/{$inc_filename}'/\" > {$filename}"); - - $inc_header = " - * Rebuild only the specified board. - * - * -f, --full - * Rebuild replies as well as threads (re-markup). - * - */ - - require dirname(__FILE__) . '/inc/cli.php'; - - if(!is_writable($config['file_script'])) { - get_httpd_privileges(); - } - - $start = microtime(true); - - // parse command line - $opts = getopt('qfb:', Array('board:', 'quick', 'full', 'quiet')); - $options = Array(); - - $options['board'] = isset($opts['board']) ? $opts['board'] : (isset($opts['b']) ? $opts['b'] : false); - $options['quiet'] = isset($opts['q']) || isset($opts['quiet']); - $options['quick'] = isset($opts['quick']); - $options['full'] = isset($opts['full']) || isset($opts['f']); - - if(!$options['quiet']) - echo "== Tinyboard {$config['version']} ==\n"; - - if(!$options['quiet']) - echo "Clearing template cache...\n"; - $twig = new Twig_Environment($loader, Array( - 'cache' => "{$config['dir']['template']}/cache" - )); - $twig->clearCacheFiles(); - - if(!$options['quiet']) - echo "Regenerating theme files...\n"; - rebuildThemes('all'); - - if(!$options['quiet']) - echo "Generating Javascript file...\n"; - buildJavascript(); - - $main_js = $config['file_script']; - - $boards = listBoards(); - - foreach($boards as &$board) { - if($options['board'] && $board['uri'] != $options['board']) - continue; - - if(!$options['quiet']) - echo "Opening board /{$board['uri']}/...\n"; - openBoard($board['uri']); - - if($config['file_script'] != $main_js) { - // different javascript file - if(!$options['quiet']) - echo "Generating Javascript file...\n"; - buildJavascript(); - } - - - if(!$options['quiet']) - echo "Creating index pages...\n"; - buildIndex(); - - if($options['quick']) - continue; // do no more - - if($options['full']) { - $query = query(sprintf("SELECT `id` FROM `posts_%s`", $board['uri'])) or error(db_error()); - while($post = $query->fetch()) { - if(!$options['quiet']) - echo "Rebuilding #{$post['id']}...\n"; - rebuildPost($post['id']); - } - } - - $query = query(sprintf("SELECT `id` FROM `posts_%s` WHERE `thread` IS NULL", $board['uri'])) or error(db_error()); - while($post = $query->fetch()) { - if(!$options['quiet']) - echo "Rebuilding #{$post['id']}...\n"; - buildThread($post['id']); - } - } - - if(!$options['quiet']) - printf("Complete! Took %g seconds\n", microtime(true) - $start); - - unset($board); - modLog('Rebuilt everything using tools/rebuild.php'); -