From 2b2d20fde772c2d99c2d703e0f3ebc9240ec0f24 Mon Sep 17 00:00:00 2001 From: hellcat <> Date: Mon, 5 May 2025 17:54:15 +0800 Subject: [PATCH] no message --- .gitignore | 3 +- .../Controllers/Api/TG/HookController.php | 15 +- .../Controllers/Article/ListController.php | 1 + app/Http/Controllers/ExecController.php | 12 +- app/Http/Controllers/SakaiController.php | 105 +++++++++---- app/Http/Controllers/TG/HookController.php | 112 -------------- app/Services/TG/Hook/Mod/Article.php | 142 ++++++++++++++++++ app/Services/TG/Hook/Mod/Base.php | 43 ++++++ app/Services/TG/Hook/Mod/Cmd.php | 34 +++++ app/Services/TG/Hook/Mod/Git.php | 128 ++++++++++++++++ app/Services/TG/Hook/Mod/Option.php | 34 +++++ app/Services/TG/Hook/Mod/SaleCode.php | 48 ++++++ app/Services/TG/Hook/Mod/Test.php | 28 ++++ app/Services/TG/Http.php | 29 ++++ bootstrap/app.php | 3 + public/images/article/1.png | Bin 878489 -> 0 bytes public/images/article/10.png | Bin 582427 -> 0 bytes public/images/article/11.png | Bin 757147 -> 0 bytes public/images/article/2.png | Bin 981066 -> 0 bytes public/images/article/3.png | Bin 786208 -> 0 bytes public/images/article/4.png | Bin 1150521 -> 0 bytes public/images/article/5.png | Bin 582427 -> 0 bytes public/images/article/6.png | Bin 333048 -> 0 bytes public/images/article/7.png | Bin 757147 -> 0 bytes public/images/article/8.png | Bin 891047 -> 0 bytes public/images/article/9.png | Bin 1152633 -> 0 bytes public/images/article/clash-s.png | Bin 9452 -> 0 bytes public/images/article/clash.png | Bin 15816 -> 0 bytes public/images/article/client-background.png | Bin 303151 -> 0 bytes public/images/article/quantumult-s.png | Bin 10580 -> 0 bytes public/images/article/quantumult.png | Bin 4856 -> 0 bytes public/images/article/shadowrocket-s.png | Bin 13971 -> 0 bytes public/images/article/shadowrocket.png | Bin 6198 -> 0 bytes public/images/article/v2rayNG-s.png | Bin 6770 -> 0 bytes public/images/article/v2rayNG.png | Bin 9187 -> 0 bytes public/images/icon.png | Bin 6410 -> 0 bytes public/images/logo2.png | Bin 31923 -> 0 bytes public/images/logo3.png | Bin 22638 -> 0 bytes public/sakai/css/common.css | 15 -- public/site/clashv2rayfree.com/css/common.css | 28 ++-- .../clashv2rayfree.com/images/article/1.png | Bin 0 -> 1587099 bytes .../clashv2rayfree.com/images/article/10.png | Bin 0 -> 840451 bytes .../clashv2rayfree.com/images/article/11.png | Bin 0 -> 377711 bytes .../clashv2rayfree.com/images/article/12.png | Bin 0 -> 304921 bytes .../clashv2rayfree.com/images/article/13.png | Bin 0 -> 887201 bytes .../15.png} | Bin .../clashv2rayfree.com/images/article/2.png | Bin 0 -> 653213 bytes .../clashv2rayfree.com/images/article/3.png | Bin 0 -> 1432488 bytes .../clashv2rayfree.com/images/article/4.png | Bin 0 -> 333814 bytes .../clashv2rayfree.com/images/article/5.png | Bin 0 -> 368602 bytes .../clashv2rayfree.com/images/article/6.png | Bin 0 -> 514863 bytes .../clashv2rayfree.com/images/article/7.png | Bin 0 -> 1164535 bytes .../clashv2rayfree.com/images/article/8.png | Bin 0 -> 834192 bytes .../images/article/client-background4.png | Bin 0 -> 668390 bytes .../images/article/client-background9.png | Bin 0 -> 998202 bytes .../clashv2rayfree.com/images/article/cvf.png | Bin 13654 -> 0 bytes resources/views/article/list.blade.php | 4 +- resources/views/article/listAjax.blade.php | 2 +- resources/views/article/single.blade.php | 2 +- resources/views/freenode/single.blade.php | 2 +- resources/views/widget/head.blade.php | 21 +-- routes/web.php | 18 ++- 62 files changed, 617 insertions(+), 212 deletions(-) delete mode 100755 app/Http/Controllers/TG/HookController.php create mode 100644 app/Services/TG/Hook/Mod/Article.php create mode 100644 app/Services/TG/Hook/Mod/Base.php create mode 100644 app/Services/TG/Hook/Mod/Cmd.php create mode 100644 app/Services/TG/Hook/Mod/Git.php create mode 100644 app/Services/TG/Hook/Mod/Option.php create mode 100644 app/Services/TG/Hook/Mod/SaleCode.php create mode 100644 app/Services/TG/Hook/Mod/Test.php create mode 100644 app/Services/TG/Http.php delete mode 100755 public/images/article/1.png delete mode 100755 public/images/article/10.png delete mode 100755 public/images/article/11.png delete mode 100755 public/images/article/2.png delete mode 100755 public/images/article/3.png delete mode 100755 public/images/article/4.png delete mode 100755 public/images/article/5.png delete mode 100755 public/images/article/6.png delete mode 100755 public/images/article/7.png delete mode 100755 public/images/article/8.png delete mode 100755 public/images/article/9.png delete mode 100755 public/images/article/clash-s.png delete mode 100755 public/images/article/clash.png delete mode 100755 public/images/article/client-background.png delete mode 100755 public/images/article/quantumult-s.png delete mode 100755 public/images/article/quantumult.png delete mode 100755 public/images/article/shadowrocket-s.png delete mode 100755 public/images/article/shadowrocket.png delete mode 100755 public/images/article/v2rayNG-s.png delete mode 100755 public/images/article/v2rayNG.png delete mode 100644 public/images/icon.png delete mode 100755 public/images/logo2.png delete mode 100755 public/images/logo3.png create mode 100644 public/site/clashv2rayfree.com/images/article/1.png create mode 100644 public/site/clashv2rayfree.com/images/article/10.png create mode 100644 public/site/clashv2rayfree.com/images/article/11.png create mode 100644 public/site/clashv2rayfree.com/images/article/12.png create mode 100644 public/site/clashv2rayfree.com/images/article/13.png rename public/site/clashv2rayfree.com/images/{截屏2025-05-04 下午3.44.45.png => article/15.png} (100%) create mode 100644 public/site/clashv2rayfree.com/images/article/2.png create mode 100644 public/site/clashv2rayfree.com/images/article/3.png create mode 100644 public/site/clashv2rayfree.com/images/article/4.png create mode 100644 public/site/clashv2rayfree.com/images/article/5.png create mode 100644 public/site/clashv2rayfree.com/images/article/6.png create mode 100644 public/site/clashv2rayfree.com/images/article/7.png create mode 100644 public/site/clashv2rayfree.com/images/article/8.png create mode 100644 public/site/clashv2rayfree.com/images/article/client-background4.png create mode 100644 public/site/clashv2rayfree.com/images/article/client-background9.png delete mode 100644 public/site/clashv2rayfree.com/images/article/cvf.png diff --git a/.gitignore b/.gitignore index 2eea525..27de538 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.env \ No newline at end of file +.env +public/fn \ No newline at end of file diff --git a/app/Http/Controllers/Api/TG/HookController.php b/app/Http/Controllers/Api/TG/HookController.php index e7645da..797e3d6 100755 --- a/app/Http/Controllers/Api/TG/HookController.php +++ b/app/Http/Controllers/Api/TG/HookController.php @@ -4,26 +4,19 @@ declare(strict_types=1); namespace App\Http\Controllers\Api\TG; -use App\Models\Article; +//use App\Models\Article; use App\Services\TomTool\Http; use App\Services\TG\Http as TGHttp; final class HookController { - - public function __construct() - { -// $this->middleware('csrf')->except(['cmd']); - // 或者 $this->middleware('csrf')->only(['specificMethod']); - } - - public function cmd() { try { - + $oTGHttp = new TGHttp(); + $oTGHttp->sApiToken = env('telegram_token'); $oTGHttp->sApiChatId = env('telegram_chatid'); @@ -31,7 +24,7 @@ final class HookController $aUpdate = json_decode($sUpdate, true); - @file_put_contents('/www/_tg/bot_log.txt', json_encode($aUpdate, JSON_PRETTY_PRINT)); +// @file_put_contents('/www/_tg/bot_log.txt', json_encode($aUpdate, JSON_PRETTY_PRINT)); $aData['chatId'] = $aUpdate["message"]["chat"]["id"]; $aData['fromId'] = $aUpdate["message"]["from"]["id"]; diff --git a/app/Http/Controllers/Article/ListController.php b/app/Http/Controllers/Article/ListController.php index 3510a6e..874a221 100755 --- a/app/Http/Controllers/Article/ListController.php +++ b/app/Http/Controllers/Article/ListController.php @@ -132,6 +132,7 @@ class ListController extends Controller 'sMenu' => $sMenu, 'sType' => $sType, 'sTypeSub' => $sTypeSub, +// 'sSiteCode' => env('site_code'), ]); } } diff --git a/app/Http/Controllers/ExecController.php b/app/Http/Controllers/ExecController.php index ba39694..3329e46 100755 --- a/app/Http/Controllers/ExecController.php +++ b/app/Http/Controllers/ExecController.php @@ -303,7 +303,12 @@ class ExecController extends Controller '美国、新加坡、日本、俄罗斯', '香港、台湾、美国、日本、新加坡、德国', '美国、新加坡、加拿大、香港、欧洲、韩国、日本', - '美国、日本、新加坡、台湾' + '美国、日本、新加坡、台湾', + '日本、香港、台湾、越南、土耳其、阿根廷、俄罗斯', + '日本、台湾、新加坡,韩国、俄罗斯、法国、美国、德国', + '新加坡、日本、台湾、美国、韩国、德国、香港', + '香港、台湾、日本、韩国、越南、阿根廷、俄罗斯、加拿大、美国', + '上' ]; $iNodeRegionRandKey = array_rand($aNodeRegionPool); $sNodeZone = $aNodeRegionPool[$iNodeRegionRandKey]; @@ -398,6 +403,9 @@ class ExecController extends Controller // 直接生成文章 public function freenodeDataAll () { + + ArticleList::where('type', 'node')->delete(); // 先删除节点文章 + $sTimeSet = -env('freenode_keep_day'); for ($i=$sTimeSet; $i<=0; $i++) { @@ -409,6 +417,7 @@ class ExecController extends Controller $sDateCodePrev = date("Ymd", $sTimePrev); //// 文章入库 start + // 图片 $iPrevImgId = ArticleList::where("code", $sDateCodePrev)->first()?->img_id; if ($iPrevImgId >= env('article_img_count')) { @@ -486,6 +495,7 @@ class ExecController extends Controller dd($sDateCodeStart); } + // 指定文章静态化 public function freenodeHtmlSingle($code) { diff --git a/app/Http/Controllers/SakaiController.php b/app/Http/Controllers/SakaiController.php index 48c1564..a6cacad 100755 --- a/app/Http/Controllers/SakaiController.php +++ b/app/Http/Controllers/SakaiController.php @@ -7,47 +7,86 @@ use App\Models\ArticleList; use App\Services\Time; use voku\helper\AntiXSS; use App\Models\Tags; +use App\Services\TomTool\Http; class SakaiController extends Controller { public function tool() { -// $directory = 'feed'; // 替换为你的文件夹路径 -// $files = glob($directory . '/clash-*'); // 查找以sss开头的文件 -// -// foreach ($files as $file) { -// $pathInfo = pathinfo($file); // 获取文件信息 -// $newFileName = $pathInfo['dirname'] . '/' . $pathInfo['filename'] . '.yaml'; // 新文件名 -// rename($file, $newFileName); // 重命名文件 -// } -// -// echo "文件后缀已更改为 .ccc"; -// -// exit; - -// $k = request('k'); -// -// if ($k != env('k')) { -// exit; -// } - $kv = [ - '节点每日更新 @cron' => '/exec/freenode/up', - '静态生成 - 客户端文章' => '/exec/html/client', - '模版 - 免费节点文章' => '/fn/single/20241231', - '模版 - 客户端文章' => '/client/singe/1001', - '静态生成 - 热门标签 @cron' => '/exec/html/toptags', - '节点文章 - 批量抓' => '/exec/freenode/craw', - '节点文章 - 自动删除 @cron' => '/exec/freenode/del', - '点赞 - 初始数据' => '/exec/like/init', - '点赞 - 自动增加 @cron' => '/exec/like/auto', - '节点文章 - 生成数据' => '/exec/freenode/data/all', - '所有文章 - 静态化' => '/exec/freenode/html/all', + "/exec/cron" => "cron n合1", + "@cron /exec/freenode/up" => "免费节点文章每日更新", + "@cron /exec/freenode/del" => "免费节点文章自动删除(超过1年)", + "@cron /exec/html/toptags" => "静态生成 - 热门标签", + "@cron /exec/like/auto" => "自动点赞", + "/exec/html/client" => "静态生成 - 客户端文章", + "/exec/html/article" => "静态生成 - 所有文章", + "/exec/html/single/{code}" => "静态生成 - 指定文章", + "/exec/data/freenode/all" => "数据生成 - 所有免费节点文章(一年)(凭空生成无压力)", + "/exec/like/init" => "点赞重新赋值 - 所有文章(无压力刷着玩)", + "/exec/freenode/craw/{day}" => "免费节点文章批量抓(循环调用up)", ]; - return view('test/tool', [ - 'ky' => $kv - ]); + $str = "\n"; + foreach ($kv as $k => $v) { + $str .= $k." >>> ".$v."\n\n"; + } + $str .= "\n"; + + echo $str; + exit; + + } + + public function test1() + { + @$k = $_GET["k"]; + @$s = $_GET["s"]; + + if ($k !== "wocaonide") { + exit("?"); + } + + $s = '/'.$s; + + //test +// $s = "\/AticleSet__1115zz__sale_rate 1118.118"; +// $s = "\/git#LastTime 1"; + $s= "/cmd#list"; + + $oHttp = new Http(); + $oHttp->sMethod = "post"; + $oHttp->sToUrl = env("APP_URL")."/api/tg/hook"; + $oHttp->bIsJson = true; + $oHttp->aData = [ + 'update_id' => 123456789, + 'message' => [ + 'message_id' => 1, + 'from' => [ + 'id' => 7740568271, + 'is_bot' => false, + 'first_name' => 'John', + 'last_name' => 'Doe', + 'username' => 'johndoe', + 'language_code' => 'en' + ], + 'chat' => [ + 'id' => -4668400285, + 'first_name' => 'John', + 'last_name' => 'Doe', + 'username' => 'johndoe', + 'type' => 'private' + ], + 'date' => 1610000000, + "text" => $s, + ] + ]; + + $r = $oHttp->send(); + + var_dump($r); + + exit; } } diff --git a/app/Http/Controllers/TG/HookController.php b/app/Http/Controllers/TG/HookController.php deleted file mode 100755 index e7645da..0000000 --- a/app/Http/Controllers/TG/HookController.php +++ /dev/null @@ -1,112 +0,0 @@ -middleware('csrf')->except(['cmd']); - // 或者 $this->middleware('csrf')->only(['specificMethod']); - } - - - public function cmd() - { - - try { - - $oTGHttp = new TGHttp(); - $oTGHttp->sApiToken = env('telegram_token'); - $oTGHttp->sApiChatId = env('telegram_chatid'); - - $sUpdate = file_get_contents("php://input"); - - $aUpdate = json_decode($sUpdate, true); - - @file_put_contents('/www/_tg/bot_log.txt', json_encode($aUpdate, JSON_PRETTY_PRINT)); - - $aData['chatId'] = $aUpdate["message"]["chat"]["id"]; - $aData['fromId'] = $aUpdate["message"]["from"]["id"]; - - if (!isset($aUpdate["message"]["text"])) { - throw new \Exception("?"); - } - - $sText = $aUpdate["message"]["text"]; - - // test -// $sText = "\\//Article#List ni__aaa__bbb 111 222"; -// $sText = "///\\\SaleCode#SetRate__zzxx 2"; -// $sText = "///\\\SaleCode#List"; -// $sText = "///\\\SaleCode#Find zzxx"; -// $sText = "/Article#Like__sale_code zzx"; -// $sText = "////Article#Add jxxjjjj"; -// $sText = "//\\\//Article#Del 9"; -// $sText = "/Article#Set__1__user_name xxx"; - - @$aArg = explode(" ", $sText); - @$aOption = explode("__", $aArg[0]); - - $sCmd = $this->cleanCmd($aOption[0]); - - list($sClass, $sFunc) = explode("#", $sCmd); - $sClass = ucfirst($sClass); - $sFunc = ucfirst($sFunc); - - unset($aOption[0]); - unset($aArg[0]); - - $aParams['aOption'] = $aOption; - $aParams['aArg'] = $aArg; - - $sClassPath = "App\\Services\\TG\\Hook\\Mod\\".$sClass; - - if (method_exists($sClassPath, $sFunc)) { - $oInstans = new $sClassPath(); - $r = $oInstans->$sFunc($aParams); - - // 可以不返回,里面直接send - if (isset($r)) { - if (empty($r)) { $r = 'hook的mod返回空'; } - // 返回可以是数组 - if (is_array($r)) { - foreach ($r as $row) { - $oTGHttp->sendToTG($row); - } - } else { - $oTGHttp->sendToTG($r); - } - - Http::response(200, 'ok'); - } - - } else { - throw new \Exception("没有这个方法:".$sClass.'#'.$sFunc); - } - - } catch (\Throwable $e) { - $sMessage = "错误(line:".$e->getLine()."): " . $e->getMessage(); - - $oTGHttp->sendToTG($sMessage); - - Http::response(200, 'error'); - } - } - - private function cleanCmd($input) { - - $input = str_replace('\\', '', $input); - $input = str_replace('/', '', $input); - - return $input; - } - -} diff --git a/app/Services/TG/Hook/Mod/Article.php b/app/Services/TG/Hook/Mod/Article.php new file mode 100644 index 0000000..c2be152 --- /dev/null +++ b/app/Services/TG/Hook/Mod/Article.php @@ -0,0 +1,142 @@ +get()->toArray(); + + foreach ($aArticleList as &$row) { // 使用引用来修改原数组 + unset($row['updated_at']); // 移除 updated_at 字段 + unset($row['created_at']); // 移除 created_at 字段 + $this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + } + + $this->oHttp::response(200, 'ok'); + } + + public function Find($aParam) + { + $iId = $aParam['aArg'][1]; + + $aSingle = ModelArticle::find($iId)->toArray(); + + unset($aSingle['updated_at']); + unset($aSingle['created_at']); + + return json_encode($aSingle, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + + + public function Like($aParams) + { + $aArticleList = ModelArticle::where($this->cmdGood($aParams['aOption'][1]), 'like', '%' . $aParams['aArg'][1] . '%') + ->orderBy("user_name") + ->get() + ->toArray(); + + if (empty($aArticleList)) { + $this->oTGHttp->sendToTG("没有"); + } else { + foreach ($aArticleList as &$row) { // 使用引用来修改原数组 + unset($row['updated_at']); // 移除 updated_at 字段 + unset($row['created_at']); // 移除 created_at 字段 + $this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + } + } + + $this->oHttp::response(200, 'ok'); + } + + public function Clone($aParam) + { + $iId = $aParam['aArg'][1]; + + // 查找文章 + $aArticle = ModelArticle::find($iId); + + if ($aArticle) { + // 复制文章 + $newArticle = $aArticle->replicate(); + + // 如果需要,可以修改新文章的某些字段,例如标题或状态 +// $newArticle->title = $newArticle->title . ' - Copy'; // 修改标题 + // $newArticle->status = 'draft'; // 例如,将状态设置为草稿 + + // 保存新文章 + $newArticle->save(); + + // 发送新文章的 ID 到 Telegram + $sMsg = "新文章已创建,ID: " . $newArticle->id; + $this->oTGHttp->sendToTG($sMsg); + + // 返回 HTTP 响应 + $this->oHttp::response(200, 'ok'); + } else { + throw new \Exception("没有这个id"); + } + } + + public function Add($aParams) + { + + $newArticle = new ModelArticle(); + $newArticle->user_name = $aParams['aArg'][1]; + $r = $newArticle->save(); + + $this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + + } + + public function Del($aParams) + { + + $article = ModelArticle::find($aParams['aArg'][1]); + + if ($article) { + $r = $article->delete(); + } else { + $r = false; + } + + $this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + + } + + // /ArticleSet__id__user_name xxx + public function Set($aParams) + { + $sField = $this->cmdGood($aParams['aOption'][2]); + + $article = ModelArticle::find($aParams['aOption'][1]); + + $sSet = $aParams['aArg'][1]; + + if ($article) { + $article->$sField = $sSet; + + $r = $article->save(); + } else { + // 处理未找到的情况 + throw new \Exception("Article not found"); + } + + $this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + } + +} diff --git a/app/Services/TG/Hook/Mod/Base.php b/app/Services/TG/Hook/Mod/Base.php new file mode 100644 index 0000000..6aede03 --- /dev/null +++ b/app/Services/TG/Hook/Mod/Base.php @@ -0,0 +1,43 @@ +oHttp = new Http(); + $this->oTGHttp = new TGHttp(); +// $this->oTGHttp->sApiToken = env("telegram_token"); +// $this->oTGHttp->sApiChatId = env("telegram_chatid"); + } + + protected function cmdGood($sCmd) { + + $sCmdNew = ""; + switch ($sCmd) { + case "user": + $sCmdNew = "user_name"; + break; + case "project": + $sCmdNew = "project_name"; + break; + case "code": + $sCmdNew = "sale_code"; + break; + case "condition": + $sCmdNew = "cron_condition"; + break; + default: + $sCmdNew = $sCmd; + break; + } + + return $sCmdNew; + + } + +} diff --git a/app/Services/TG/Hook/Mod/Cmd.php b/app/Services/TG/Hook/Mod/Cmd.php new file mode 100644 index 0000000..70c861d --- /dev/null +++ b/app/Services/TG/Hook/Mod/Cmd.php @@ -0,0 +1,34 @@ + 'SaleCode#List', + '优惠码find' => 'SaleCode#Find xxhh', + '优惠码rate' => 'SaleCode#SetRate__xxzz 6.7', + '文章list' => 'Article#List', + '文章like' => 'Article#Like__field like', + '文章add' => 'Article#Add__name', + '文章del' => 'Article#Del__id', + '文章set' => 'Article#Set__id__fild set', +// '添加github的sshhost' => "System#AddSshHostGithub", + '文章clone' => "article#clone id", + 'git手动重置' => "git#pullR", + '文章find' => "article#find id", + 'cron暂停' => "option#pause 1", + '测试cron' => "test#cron_i 01", + ]; + + $this->oTGHttp->sendToTG(json_encode($aCmdList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + + } + +} diff --git a/app/Services/TG/Hook/Mod/Git.php b/app/Services/TG/Hook/Mod/Git.php new file mode 100644 index 0000000..8f9fb47 --- /dev/null +++ b/app/Services/TG/Hook/Mod/Git.php @@ -0,0 +1,128 @@ +get()->toArray(); + + $sMsg = ''; + foreach ($aArticleList as $v) { + $sMsg .= "\n\n"; + $sMsg .= "https://github.com/".$v['user_name']."/".$v['project_name']; + } + + return $sMsg; + + } + + public function LastTime($aParam) + { + $iId = $aParam['aArg'][1]; + + $aArticle = ModelArticle::find($iId); + + $sProjectPath = env("BASE_DIR") . "github/" . $aArticle->user_name . "-" . $aArticle->project_name; + + // 进入指定目录 + if (!chdir($sProjectPath)) { + throw new \Exception("无法进入目录" . $sProjectPath); + } + + // 获取远程更新 + $this->runCommand('git fetch origin'); + + // 获取最后提交的时间 + $lastCommitTime = $this->runCommand('git log origin/main -1 --format=%cd'); + $lastCommitTime = \DateTime::createFromFormat('D M d H:i:s Y O', $lastCommitTime[0]); + $lastCommitTime = json_encode($lastCommitTime->format('Y-m-d H:i:s')); + + // 检查是否获取到时间 + if (empty($lastCommitTime)) { + throw new \Exception("无法获取最后提交时间,可能是分支不存在或没有提交。"); + } + + return $lastCommitTime; + + } + + // 没用 + public function AddSshHostGithub() + { + + // 定义要添加的主机 + $host = 'github.com'; + + // 执行 ssh-keyscan 命令 + $key = shell_exec("ssh-keyscan -t ed25519 $host"); + + // 检查是否成功获取到公钥 + if ($key) { + // 获取 known_hosts 文件的路径 + $knownHostsFile = '/root/.ssh/known_hosts'; + + // 检查 known_hosts 文件中是否已经存在该主机的公钥 + if (strpos(file_get_contents($knownHostsFile), $host) === false) { + // 将公钥写入 known_hosts 文件 + file_put_contents($knownHostsFile, $key, FILE_APPEND); + $sMsg = "公钥已成功添加到 $knownHostsFile\n"; + } else { + $sMsg = "公钥已存在于 $knownHostsFile\n"; + } + } else { + $sMsg = "无法获取 $host 的公钥\n"; + } + + $this->oTGHttp->sendToTG($sMsg); + + $this->oHttp::response(200, 'ok'); + + } + + // /Git#PullR 3 + public function PullR($aParam) + { + + $iId = $aParam['aArg'][1]; + + $aArticle = ModelArticle::find($iId); + + $sProjectPath = env("BASE_DIR")."github/".$aArticle->user_name."-".$aArticle->project_name; + + // 进入指定目录 + if (!chdir($sProjectPath)) { + throw new \Exception("无法进入目录".$sProjectPath); + } + + // 获取远程更新 + $this->runCommand('git fetch origin'); + + // 硬重置到远程主分支 + $this->runCommand('git reset --hard origin/main'); + + $this->oTGHttp->sendToTG("操作完成:已重置到远程主分支"); + + $this->oHttp::response(200, 'ok'); + + } + + private function runCommand($command) { + $output = []; + $returnVar = 0; + exec($command, $output, $returnVar); + + if ($returnVar !== 0) { + $jsonOutput = json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); + $errorMessage = "命令失败: $command\n" . $jsonOutput . "\n"; + + throw new \Exception($errorMessage); + } else { + return $output; + } + + } + +} diff --git a/app/Services/TG/Hook/Mod/Option.php b/app/Services/TG/Hook/Mod/Option.php new file mode 100644 index 0000000..6629417 --- /dev/null +++ b/app/Services/TG/Hook/Mod/Option.php @@ -0,0 +1,34 @@ +first(); + + // 检查是否找到了选项 + if ($oOption) { + $oOption->value = $v; + + // 保存并返回结果 + return json_encode($oOption->save()); + } + + // 如果没有找到选项,返回一个错误信息 + return json_encode(['error' => 'Option not found']); + } + + public function List() + { + $aOptionList = ModelOption::all()->toArray(); + + return json_encode($aOptionList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + +} diff --git a/app/Services/TG/Hook/Mod/SaleCode.php b/app/Services/TG/Hook/Mod/SaleCode.php new file mode 100644 index 0000000..a638ae8 --- /dev/null +++ b/app/Services/TG/Hook/Mod/SaleCode.php @@ -0,0 +1,48 @@ +update(['sale_rate' => $aParams['aArg'][1]]); + + $this->oTGHttp->sendToTG(json_encode($updatedRows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + + } + + public function List() + { + $aSaleCodeList = ModelArticle::select('sale_code', 'sale_rate') + ->distinct() + ->orderBy("sale_code") + ->get() + ->toArray(); + + $this->oTGHttp->sendToTG(json_encode($aSaleCodeList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + } + + public function Find($aParams) + { + + $aSaleCodeList = ModelArticle::select('sale_code', 'sale_rate') + ->where("sale_code", $aParams['aArg'][1]) + ->distinct() + ->orderBy("sale_code") + ->get() + ->toArray(); + + $this->oTGHttp->sendToTG(json_encode($aSaleCodeList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); + + $this->oHttp::response(200, 'ok'); + + } + +} diff --git a/app/Services/TG/Hook/Mod/Test.php b/app/Services/TG/Hook/Mod/Test.php new file mode 100644 index 0000000..aa953ab --- /dev/null +++ b/app/Services/TG/Hook/Mod/Test.php @@ -0,0 +1,28 @@ +oHttp->sMethod = "get"; + $this->oHttp->sToUrl = env("APP_URL")."/cron"; + $this->oHttp->bIsJson = true; + $this->oHttp->aData = [ + "is_test" => true, + "time_type" => $sTimeType, + "v" => $sValue + ]; + + $r = $this->oHttp->send(); + + return $r; + + } + +} diff --git a/app/Services/TG/Http.php b/app/Services/TG/Http.php new file mode 100644 index 0000000..390fd97 --- /dev/null +++ b/app/Services/TG/Http.php @@ -0,0 +1,29 @@ +sApiToken = env('telegram_token'); + $this->sApiChatId = env('telegram_chatid'); + } + + public function sendToTG($sMsg) + { + + if (env('is_loc') == true) { + echo "
";
+ echo($sMsg);
+ } else {
+ $url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($sMsg);
+ file_get_contents($url);
+ }
+
+ }
+
+}
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 9bbba82..fe727a2 100755
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -14,6 +14,9 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->alias([
'test' => \App\Http\Middleware\Test::class,
]);
+ $middleware->validateCsrfTokens(except: [
+ 'api/*',
+ ]);
})
->withExceptions(function (Exceptions $exceptions) {
//
diff --git a/public/images/article/1.png b/public/images/article/1.png
deleted file mode 100755
index 268641ef6649992d0b241234b6c79d710d273a32..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 878489
zcmZU)18`>DvOoL;lT4gUl9|{OYhv5BZQIVo<`dhtZ9K7U+s6FoJ?GqePkrC2>fOD%
z``5i!_o`K^YS#{vlMzLL#exL@00`n@LJ9x?WF7zje*P8euV(rXzXAY&tuYrAloJ;e
zB#?8kH8Hm`1^~pufXUEG2`k_HuKpCWY6w6U1Y)&0fs4W9evyksWD)pAfGhwHiC$aZ
z^4pSM7?P@uGG|)@pl+pBQ}dPFWrH9urz+wLHsuu(PTytM-6p5)Wa@bG=z1&T(>trF
z4}koYt5gZz5)k`y6e#@Vjq%&J1dJ9iKJZllk`q|e@KjtKF>yZ_5$faB?GB4y;$u-J
z!&3L3PhDX}g7F;)fG|-8(a4S|p%?fJl2tK
zLLl%(ox*oC;juY`qAY_;CoO!~6BE_Tk6e`Ukmi#&X3tkLNsXr#8dct*jhY0uR%0ZU
zdtw|>v6jTxWB@V(((uMGgBB?)Q_lyH%>1|Gz|1<#_iOMzCHDcwelj*?w1RMy0|!G=
zwG>ng?%uj{@`bKa21L)_?scPB`>C~*zHPDPpzLfsRNh|qyq46mRfhb2QbRV%ZYjLN
zQ(<#av_WHwCH^6=!t*Yd~s
zaAM^f0s9(IcEXQJjr0hvj08(!Wz&>ixTp-h9ST6;sc$iaMAnAs9
z>V0|th9?4s1|uwrnSU-vjRuYGFCkEvXH;TbVxWXs2CE!mA<~#@lZRHKS~6uuofdAA
zb1|)RjO;|67Ng^*6RZs^nbr#51tX;YWY@}Wv*jxeQgQ@U
zpY<^AQ0AcX-m87~HAx4`CJcU{Y@g(H`L*#g);p#b>nFQUU=BY$ncFv_ui$+KeNcTq
z0*pIQx!Lpr^CS#mn*$gIQ1(A-Gt@*oguKMOM2X_0#PAB#Nl?tclx8?3It9&3zDg|;
zX(q7mvm3FybH5P0;Jo0y;06iQ<~+;CleZ>5BwB#JfDA!o%w=hvSgO)FOfohN&WjLljY*Sp8{A(xMYzC#WZ!)0op#
znV}o(G`?&2Yk*e@RC;UtXm~9lFQWho9w@3RJ}J`4znQCHB@7iBPfM7In&CDOTGLqn
zxL~^wUInfeH=;YCZTy}rj5xtQ9zJe9(JjJ|(w9Y%QRghQk$6gs;ZSsbcM9YfS(>xPBp_|z%
z-m2oY(lbN0B4A#&vFqIi5^hXS(f8X$>|plu6PLxs#EqCm%&6!8fVYN9Cp1Z9q-6+>
ze25Z^JQ(tf;*1oPN+GQ!Etfi##!LMstzJ}Gq$#B-9Wov{ZjyqYvXHjHN|sVTJ~z>v
z+MMd!prf
zScPa1@_~qi(}*L8tIE#8+2vg4vdgK=vEfj}2F*_AYUALuXRt@)v~u9E1U%*FcaE|w
zKVxNeWlh!0T+3-s^{jhCeBz|WqKa>fb{>S-+qtS;&mY{YFHSeDI{G!m+j-u>&}q>D
zRm4~fSA3Pdd1SpiakqI^d9D9U@^*eB|BUr^>s9WR{hay=^N#q;ZK_$zxE!)l{ek;#
z{7Lq~>%he>$$kVb2i6NV2!`vg;a}^I?jI8%^?UZWML_Ux?SN#+Y`EUQz#uEw)_&&g
z+t!8kT)C&|!rUMIBlCLoYrr^9~|?
zjlS8yvoMdayn!MTEd{Mv|AL(r|N7?1%j`XlVzbGM*74SeL!HcGR#~pAd#{I=j+fzt
zU!ymp%%i&QC>@lWcCf6*q9Ek#{;eTjifdFW6nNOqpu)bR(#_JsQV8=+^Yl5WIq$i#
zS=}(UJlL7^$k@mYOngRS1|*Z{@V&tY_2-KH3dL_U;zj!gP5O^{=d`6!4Ps?#+pT(M
zzX{b-&iN1%8Ci=dl7r#JFB~LakZw1*vO7Q>vT%Ff@pKDX#p+7DYaezSBeIX65B_vO
zb_RAAH1@RU8S`H$JkEBG2L_J
zs%VcN$nS#IaT;+I$CFsq%*%A|hUfRRDt`}s(*&tsm
z?d-NL!+^D5ZR}d?pV+pxw;N6+O7%?L4YqfY69}3Zn&HhITO7V;3k=D18*8C!`)gu-;x!Rfi;!PXsA(=}?K^C=*AJ%tPc;+Hj%Cv9kZ8AYw
z7S@jzJTK)R)zF%env}AZ*_(F3ZbjGQ$1Csk{YM2yI+?PZTT2|>54}NwaLu%nZOir)
z=d-{u{$#p_+Ob=rHv}qhW4iH_lbw*1Y8?j1lDz1CT9;P7FX#j
zj=769?@yDSiLvIE=BlUh^OH7Q&$r7=c2_jlFRsv+VOO24*{;6(z2PA#A%ihYctGw&
zU#*Asg{ucx*1?lazs*Oo8Ckshn>QVv3HR5=?rY2g^%ckbqXh^V2$}%?fJ{1*?qgpH
zZ}!`=W26aQmyRYc?_Jq$-nEc#!LM5*n~`1GPcly%y-&1Pnjyp?_`V~r^tZLo375r!
z+3MMAT?4-EJayMpmzFQA<+c-B{aw5`6Ii&wTceIzc|Z_(MjC9-S^z-q8(0pJBfI_M
zvlTb#^z&N}hX0>|y}PHB7BIOGj03d+cIX~?AsQ8eRutuEp@+%NJ|4K|H@wh
zkYHGVFMlPlzr+KE{lBsZ7&!pqUwUu=AjBL1`5zydzx2Lqu0&c6L6
zw;b^Q@rKOHf%qR8{QR#Cz^^DMF8-G*8afyo+c=upI=$orBK|61?8MX^0f6s6{~<7O
z1(NH(@t4e%)ST3$r8o?2t!ed*Yz>TQ-K_2Yi38wrQn9}`XXJ@CQXP{$Xp!w@TlYi#e?$Mv^#6q_I~qF(+FJk3
z>BRGY{rV61zm5L^a?$;>^#3Zwzw7)j?cYN4z;e<3Z_{{S<8^x`{`L{aTu4^wFaNvC
z{uy8{e;?%k=6_|V229eQ)29FcA3$7)U&Zyz?m=x4E`C4AmsKpaiGH=!@ozyhF?5
zgZH1C4}IS34R6=#i?a+G%_gg#RHkA3<1lYrx&UvFV8J*viZFe8$F>>1+%h?GwCM%2
z`~8PMdw;ZKNe|Kx&K^AaIqj<}CP{`BzLy)TQz!qln-k|w;7y+ZIdRaSQfA{{E5Zc`
zx>r2YsFc_3lFhQ$B>f5JQG
z`PhZcu*@t`5_2o*c(CN08+c7%Ebf|PG#%T&XdXLV@J+tm2{AsqCmZq6P%-yB({@Mi
zieRv6a@sq|868&^la?#nv|mVQ;OC4u^MKQqDOH^dTKqbL?~LReeo1!`8F(K`ip4Da
z5gjht)Kh!`zM5A381b6CN1th)9Rc@~95zDx_DSSzKWB43I2x!BW8}7@+
za&N2rz?IxnWomJIs%j~y&IhH^2y{2S98=fbRVkh}RY4c7i3^Jr=d>VB(TIj^H*}0b4WR}C
zMrmE@!j%^>VkHq5V=$O=D*DY$xlPioG9`cDy~*j`^T)G2tHy!Mw-*nMK6@OVm6gq>
zO@c#|vmPB|6SqHT@QrOCnhX=IYgNBLt!ppxKI1)NX7bA}&J!X`)Iy!cb3B~M@)lcz
z)rRs8qYO`d`N3JTa(>iJbN2M9O?p?!;GfmmxYqu)7DY416r_Y{`@93rwVOWkgi~(O
zbX&!*K7rGI(Y*DCe}&uGb(K%(wnzgazQy=tx8aLnf@A2c94=JyIb-v;WgPo-4)9BE|LK8XXrE(F;>aja(z%}`{H0gZdT>9&b0vc59DV8Nfj
zM`9h%lnWx;YhiJB$sF9n#W|w)?*QtNxkWSR18oUZCo4FuS*;9XpPOe?W0-77DhuE5
zwLMWHjmGoBD*=+3x9iU4(`05ElOE}&$2Gl!&W8})f4oyWuEBrIqt?J&FbvXG3?fAu
z+-SLPXTZ_+Vrn2frG#WHooKvgyw1F5osNFKp6EJ;i^kdiaW3
z`7XDG=;DMYo&%E1s$9~cJBV@}8+e)Cm1=Z6&C6|8
zrKPM|mYkJ8Sq?u2gS4WVD868Il#)n|?rU07VHW{mCsXWkp}R#edrdwq)ecZ8GM&>t?FWzhgh?^pF260Hi
zP7xs5xTnpF=ER2$*Tfav=A^-iVvvz1Rb5S00?U+Uxe^3Krdy_>2rI$)de0l-@cZ(*
zAAjfFT!c3CQ3IbX)M>kl=?CLvb{UK23>>Cb<`LKPqKo^p^?o=W`;_+Vqvs=v5jED@
z#G@ivXNc2!c~oii*Zi*4XlI#@92~$5_V8NkUR29;RMk`8^5UcCgX$-I#6jNr=ZN;f
z;@c%{b_Ta#HzXZ>D80)iDU+T^n~k)ZfRxGN;_{eXTyUAhwot|0T;qy3|GtDx-iGthNj6
zcg{Q~r2k~3u#8&XQ3wsV{tT>^9uk+nOZ$V-FJXXRxs4L`Te)P&AC61DdhXZnrEzIw
zZ5uu;9nKV9?E8C%7{>Pi{q&&*h*C5b9f8xaASP?E)517JnmaK?^I7|_h@~Nx4PFeR
zOLm&8&Sw?(KMSsT$9-=|V&%kW@@$;qwZC?eQ9h~Q5`%kWVvmo1!}&`goclV_Y||1{JqM@%cU
ze#GW|J3@|3H!C*mN!!Ut&lrlkzVwu8*d*7y>Q*Ji_ch4%sL$2Gq>LNsxy_scdkQ^D
z^ozXE+W?=t>&;i{uk#BF>~nU;*q<%K*igBek$=$4R1x20Q??Z+{<(YI=TGWU(Gi=_
zADF;8VF`jr2UF0BEB1!Xv}QZ^?W=0j-o}FWSNBk~Y0Vhey5~yavdi?ko&D4!>J?9p
zE*X6cW5~WLh@o@k-4VG-utQ!h3P`GkaG#!0wa6AT9%1S>S6TQuf>ofu8JjxqAt%DH
z`8EbP^AkAyM#jhPUPq1J(wzAAoXG~(eLcZf+R`XTSUS1|0(Kq?{ev(vqObvk2yroT)20ps(apgm;G80e=O}}*`LgMIs{c=TV)H
z`NMG{Qr$pY-Kk>Y`z)B6J%~Alpao?)rfh(%m2Y|X&JJ_EZmeeP4a0zfE{vibpYaHmSg~Z^N
zP+17w=P~Nm!Avo{>D5_bpEBVW(!b7@H8@lEUX7o;AWb%=0gcy0$QsR7J&?fC2ZnQm
zayxjWLV6tRZTkAQm2{D;OM7;4Q3jW5LWBLZSPvU5&=}?X6;}R;*3O3KPvgYF##ow(
z`kIsT8IAEx0DgflnJnbqc4HIT%ZM$)kU5+^Uwd8MXu5$EV>U_)83gBG7`UL)2)3Uc(HL
zb6ooU5A%>=S^Zt8$-0kO|J9ZTSu|J{Q2K2II*b$xaTS82etZF{;SPU>kJ1
zIN)gC<3t~{-BfEQ{EX*%nWGd=Dw5xvag$I#BaU*$E%HBzxgS5dfcFm(CF(<9-8FKT
z%>^dMOrJdLYLu-SO%aWDKt87#X^hQ?{EV|CgWolCQ|Ojozn@oe+pSyDFU$DN60(hk
zmolQmwK&+|bPKz-Luts&%RXJA6>azJ%NI5&)MohSn2jDD&O;hy#PhfJXBuPosZQgI
z{!~pnv$>(Br@+?k${if}O;olo$xpiPXX9`%^_i@}s5?~84=z&Lp3If*XAL~ZQPPKC
z2#nHBP8u?u?TUEAn8t0^rRUyyxh4ac=?#>*H=PB25m^wtdts5j8#_cF@T>uTy-5R<
zFA{~jiP6@!FWjrQhi^7iuG|i~>|
zzAr{-==9}|)xN@D$pX}E&CQ7S*O1jxPS~VNsjc-OV?JvAfNaPNOA3ge1-_M>c|#%+
zD5^mfu!`8-u)ISq>lk8+M~P7D-E5A?Nx$W7VAX#rKKGW^bdb7nt9%DorlpLWWpz!;
z!rF^LAhMl=^2@5}NfZhX~Bs
zkYW@$&fDoam3iEZ_d>&GVUkx-Z)CXF7d$k1k|B5q#2W(WIb~a~4}Q|;THxNPPN9Q6
z{OmSpq(|;0rp>x03UpORd06sP$7K+tRhFB!V55QaG7~S>jxfg=?_QrKhmtO{EqopX
zj0DIC+?zelgcyGurWe+{n!kR&RRnTqbEdR`jjtj~qHfO<5Jy0a7bGZP~Q7-Ao&
z;uUG?2S)}0=9umbXB=>$Y_}EOm801l8cSjnx3kZLF?Yv;LPU6kXYni{Hu-~60TrPe
zND*zANwsfc+{JX%$Ec?Oy)PJdX7HU_O`W8XN7V
zNBjBvA*=D@sCkC`8bF0$81_Wn)c3)}vfE4QivELoA_8%{`5>>BzD&`;{n1LD=V7AG
zP?#eFTO~+ozcMXBTwuo}cE&^f4e{onUyw-78X<#iX37+W=fXili7gd`$`_%MW
zPkov6GL(lO)_ScuX>H1$e`(idD2($*LMd8KR@X#n+|Av0Xq9A#Y2cCYuONk^#gm#5
zO|Wen5jw9nK=8IyI-9%g>;5Xh?mTO2uu&m-NT$U(oV>yDwB5Fc#?53Ps)!FFq03O}
z*vV&c0cJrarV9r>DumM@|F8x(o;dM#wz3?$f#Ti{i&j_Bnk6IAA%>VNBWpxR0KyP2
zX(@4vvxAV{nRxm+`PkE`_|BOhP_kO~L|56BNhWTRyB8K!)VDk|)i)clB2VW0YAwiUWIcb~`Vru@20SdEI*1
zk#T=T!0RJu9v`0D1a%7*il-r38!0nOrmT7?CpO4YZ8_6c#8Obfzhi>hjQyFs-V_Z|DK9`e^CZqA1=?8YiSh<3ed
zsV*q+jwcBm{j!s0H(;btyi1fEL|t1soqr2H@Q~Ybh~fMFSh?76q|%lPn|TUt?gq?m
zxI^7^ioPZI{^^;`r0Skx5<84YEDNR2>6L7pGvNC7c=q^G=@i)nZ0f@z`YkY>DDu_Z
z>p}`OlFTRl9oDv$wuV+{ZYXyzq3Ss=5pdtz>##}S_V^=)y(TPVkfoG)%HjGPmYh4t
zG-baXN9N1g&dGIjf`f)kiVCG02XCf`jht9TV||uXpeTgUDG6SK(BCUDTi)g{O5>m(
z4D<_svzNsc3GJ
zzqEymD2*r}INDWPPXuw8ZlJ>x)|JA}REr57CeDzSOd>k@3)@kcy3f&=64d50{(3dm
zS&i!0&fzN*Ub8sPf5UZD3)e3Fx?r*0fgA&Y7!c|`pbAx_$!VlUW_P-=Q!K6CHlL-}
z_RfYIFH8|pekKnEV5|s{6B@Lpff(lBzzmshE<~{RN7&8fyVrpS>tSe>T0IzW-PB1c
zmH{qszuOqxeo40v?g^-dn1}fhHvek`inOAOq1uJM0TE~DrIY*h1#oQVUh3^l?)HV)
zJb9$@G=(FvEp{g*hh#QQ2Cqd7&m0>wy~Md0*!aP>_rCTS3xr%BnX;F7kti@OznuFq
zZ)z98^_-@~cIn}rk=HJ4=XD9z4Q=^Md;cRQEYcG&1SkQMaG+FiK^rZ#oF
z-+G6*io}){dl}nx97Rfp`OUNrbXwP1-Fa?*;q-vv{JCK}cAxzRys_Hr8CI`RRYfXn
z_3}*sUvz(p_iXhyM;yAF)*6Y-dn!W0Q2d`aeCjjPt_0O*hVNkcAEy`VXKQatr-%;K
zNF2W>%E9pZ36@TAJs4(CZeA^o&yKnyG1VM0$r=_#d=w}!@4tO&a%1-i%4!b}r)Gvs
zHsf5N0=*K74DB99`U|(kv~!R^Y!awuo+g!h7*FyY5(Eq)(E;&=7Z&N9bZ0VR_@Gt^
zxAYK)gQ%r3+UhOotv@+dx#jXmxA{|#QOD6AVCm32Z-xS#n6jF%91`VxN4#Yk%IGvS
ztq?(lYqN-_GH&@&v%*9;-Q%qk$zzE>7&-c*oNCCbA1^rm6sNr0e_5Z#VDR9vw-rg|
zICAnUa>*-wXG=OGX}U5|uJ!WcdSZ%(dvv|sojLNgT5DcjWAemr)8&euI%S{b+3cYAijWi#)QS1g70jADqaSL
zas$8p23uYkMi~S7@@KS>uOQXK+HX;})`&%JiN7@r@^`Uo9xjRQ*8$<9N)Q>QLjTo*46GYmzH$g0|SRt*E
zvcOpiQ%s-A>tgxY`fsa|~9a^fq;xrzSp=IqmG*PURx5gY>QksOp_s4`KI}6{0H%>C?Di
z_iF`Xm?jr*!mQ|9Br(9RvbR$^YxNk=!lERU`Z2QzCxw4Kt|g}$W!us;Eb5+^k5hVJ
zZVbBw=D8+&`U)sNPl29WhGgwK+eOF+NIZL;WO)&)eje#lfOzz{6$1X|CxmUbnvJn;
zFj`F+ch6b@RF$$n8>8-OaCVeD=*L
ztBDf@yvqXT;@1$n9=Pf;w7mk|E5Qd!joZHE36;v$!9vlR4GdDiyI}DQHjtBA<3Ly%
zi2k8hGzYwed)>s*FX5)Lx?DW7O&Xo@&HBuz#k%!?sd0kIc`x^R3D>f@*`M=Dg|6f{
z7FwF!LFZ?~7rxC1B
z5{o|4KvUYe?->W9IjcV<1n6dL74|~&qCJPBfwy~qlwD$K+oE|gu$A7}fLMDMH{q?b
zr}lU6!qKw`5R>^OHA_vw)zvkWZjW=>z|`_sj312?jgj{r<;q#W=6BbwfMZ3(OrOF|
zFsU{*v$@Fn0cV+4jfvgS;;}&Q+I3OUGi7&q17P;hDAbC)RW>A4>Rk5e#!rWc4S~%j
z)@Yt);*^g!AR7T3Ro@+7w6Z<(^2ld7RplR)rv-(^-f8EuzUJ?><6qG7&t&bGp3z{q
z?IlsUCUk-k0f!h+ZKqAR>-JLED8uTF(gL#O8k!^O(QE|^0SBj1m*jB`+X*BN;}DFX(F86|8|PF{8Qvy0
zO8K!xcdufHWp(wKS(>Z&828~WqnDpl47FLgjFhb5X~3pr*%xkP4~b#jn?)9T^mJ<+
z&8v>kg}t%2ORDlU8(PnG4mYGjC@RHF#mToeYEFbWe!zE_Oo6EmmZ><^eKGHMQ7Cc2
zu*z;*zzWAHP^Jqt8;5GkD@wV6DXD2tKpF2X-EcaU_B+4ucx$G`KtVJg@;&i~V+C8%
zPbah)ThR0A#(C0(!&U;)nQVid9kiO;*Fi*~;!%~UmpSu;k9JdYe8VcEY$ToA!Mv`J
znCT+48mH)YP0~BFw@@Q)N;;5{@3IrW<>-`nFtSh~ZU;#rJj2G-G$}6INd#*rq=r7B
z+IXp(25Vpu7l1G}wbE&@Rvc++e^gpf!FaEcOQPkA{@m6ZvwD&Ck7#nE=v;d{MFSQ}
zSbe5G@qq})3;Q&0YGi&nav+62SCDDI{UIinA#Ym|Bsy)t*B3)UO%#`gMie1=`*g%i
zm$~nIkk;t638k`RJutjjD{h=LQ&TilT%0)=wfyZwfq%j~4^e)Y1VwJ|W}wS!w-RBa
zO{)g)3%qlebWqACh7BZ!jr{$pVkz3JMW^kE5sCfn%(|wOfn`zBF0DimUY1GZ_yX1Q
zfbOYY6pbqHkg4dp_qRbiOvANdVU>McuVZL|CewLH_H5G(=D`nefC^MQ7pbC7f6k<%
z3U8&3;oZ7#w?>m2djA4pRb==k-<$)UroCa=yJvLR
zid9yL`ymcOl;78woJ;(DC;)gEpy+PCw=X84;_%CA#X6bf{V1ij^Ya}EPqWUdD}VB#
zH>e?#CXJJ|Bc?i#>IhqzkAT}QOJGsIM`C!-LuF(B-n=3I__-8wW7<>h#HeFe)TiF-
z3ikUuN_iU7$k&(UCx&RjaSqPIiR?Ga)b|hf$MhS2cw_Q(Z?;HH9Gmgh|Uj*
z&cQ$Y%=Px1&+zA<+D$w2SHdp_7gRQ51?v*FnTKQ0juVpPMMvbFN7|7ixH!o8<-s;_
zp&x0-wt#=%8^`K+neaAmXKx&v70+FSMY@Ux@0VzHYo&<|lPU8~B2bp-q%D9c$PxxhQ@Cyvwd_o^(^9i9P9!+Q!8~W=S&AwvaYXU)-3WI
zK2H=bDb#1wk?nuIe3kq0UPQb$Kk9W1gPKXEV6Bw`kuH$Dq|rPtS^zC@I)4m}b46
zOrhJlfrbWqRwqu7gsw*lW{X_N9ImLvqsd!w4~RWkpO)j@Sx7#Xp`k+z;1biF=lHCU
z-Ny!h(}$34V+x+$PJCboqc7FO7u}t2_IF03*n~}^vp$Mh-RKw+O+z}}H8MiKdcE{i
z4?*H8m;5+up+F?pK-2;vHX!X?;RIJ-LavcJ;$e;Z?D?)T;l?X>
zk0Sw_WUZWpHk>?)y>Lb6Go0{O$s;IH;hKWk3P6VV;=_GKTMZI
zvm+*CCig-e#zSp;ZZL~xRbt~*R<}OWyE4O*f*cvj(G41ra0}+0RkRxOl(}xtT1t!x
zn0r$B<+7mW=8(7&NI#86EkS*}d=F)Zr+|qLRP1<{U#SF0yAhvhs={K?owATlRsCQw3Dk#rfC3ZfKV2v|AE*QFq034W!hMu|=n*b0x(gh&zc2D0)<63cH%!QSx}!4VN9CP+%$xr&f$mJ)TXl$O#g
z^PU3tQHx)S0b6y@g2(YXjtX&i9C_e#W@QcX3RRY+5>sU%vcRVB+(WpfXI4Qxgas77
zjzVR;xv1dV#$oZ;bbFCqSDBW7PSt0NEY^ioJ!nntdk=~3+4EH3TtMArYZguW&Rn1d
zDI1jl-mN|H#N7HVt!}$#)Y7GnK02D`?*h~&I+W!VYWH9IDN=Hzz^)VlQF?3`f+i+Z
zieHnPTEHQ}0Rofxu&nCp-p2TR7TUKwG2~i;;N+AL@Oahl0l30%=4E1z9Bm#;X
zod;EJK+@R+h}8^1LLN?ZD^}sjiB*v#o1XSdxs&ys6ZHFV8*b7=gE$(>j6>(uE@woi
z?Fr&`uH2-5H^>*fG3%_yO?%CiH;^jmv`R5D)=H>+Zh1+Mfp1l(@oGV0G~c0Y9KrjR
zt3xD<=1Ok^Q70RE@F*#RV;Pbr-lNoA+kEuY1N-B&2AzJl1dIM#XeCUzAN>mZB%XA_
z4_(T$BReg(;yuzs8IM*o(#TN&E9v_J(0#j49M7iPS%&Z
zdS;MkZfG*NW0bAr4fKtjLZmKDW^t!I=v0dyIpN4=NKwr6hiQ@kiUr
zDT2m$vaf>52LHG$B+j2fGR>h*VL^&8`k)>FyP0`kC;DLKELNqnhzxNCN(P
z;RNK2w3|b}P=gn&MY4$W8>6DV736WXDGGXDlLf|jXT~b2?!5$cj#M_P!v^sgydh>*
zgn=gMI3xfU<#t+UW#oh15shxL-9N|8z(J%=y&B%_A}ZA?pY95`2ZvkO
zx8=?cn+!6J9E+(1aOI6N(Syvcq3;X&fOfD8mFk-mtndEiN~MbZ
z7f>JepZbT|3msj+UkCoxi5t)>`x)H*w}8=RodHZyBjb^=bvoxSQr>~1f81NTI1-2x
zCcCK>$d1T36dY|&FboFg)%M#vIjLlCEjFc1)rG?d7K|PW2GJtb9#5q1MO$dyX6&_V
ziyEOn#MhcwDqi|j5G|y>VZt*O(+ry)_!r|%hEGw`n%@ESzVzz1k@9*IO1O=&weGNA
zAk=~);@(a1P=>!R_1(Msc`0`i2WTufg+9SzFiQ%NsQe-!6jye+SY-$X5IXKtR9=@_
zVNcqpk|@t}x9`SQ-FtiyduR)msQwPO%~uYpAVh098Fto>!Q;0bd*olzqZ+7~lOrJ9`tt6Pksz4c~0544CCDdv=
z=>BssyC>}D;^;)2vrr{yOGa5#3C9~m%1WqQwO7VcOVI}xEVJbZ8|ZcrvEr^$FusD*
za{an-dXRh~z^nZsjDh=vskrrwj!i;ID$M{ieZGolf@ZT}(x|V`itCAmY?jJ#LFy#;1^z={+lwbjdHazLFg76_K-;d;6mE59mxPYxWd$o5S-2m3ZBOj$~7<
z&Gr%jRuiC#h5VSLhqCgqV2?;I*U|6Xn6Rbm+79SW2j(
zfy3uESsPp6Ao;ls`Vxd5W&qB6P*VlpaXzs!=#L1@VKVt3j;%(r30t_2%0?>&fk7|X
zSVE3q$b(*fQ8_sKTWbRB35-2O8LCA~^W#hVlIcRLX>>`K-1l-6R;D#ZL5a4mHGxB5
z83x`qkR;(Lzl2~>1O~B0s&WPK!i`7sAN0n@IE1#mYJC=DjN-K(Z48Z-
zZvC4B>nbKRux%>J_uSAWfq!0vlr#&=de}C1GV$RB2?dusWx4x?1Dl|ZzExc7N(QGF
z+0MwKa?D1@I$j}tSgG7AsSO&uJ<7$Uk;|ncVnXv}j=;DhFR37Sh)~<3B4kizQ^W=8
z`#7Z#)=TY~qOFkNj$AU-EEi2Z%!35?gkl37*UFCk_B@s=w9E_TxkR0mYR0z65wHm1
zA2vh9o|$YVu>y_rt!lyoB{_xq51jb`QXPzh%RX$?!?^*PHaT12a7(RcZh46a{0oeP
z)C5+8aSprKGZu0?>}+B!vBYKZaa)svpJ+27zVV)35ZZ?6XBvx!*2zPafE{c`h}3mz
z`)lS%bV;gp;{D3Kv0K)zv}S`1eP$54WOBDEcjQZ$5aNkh9GqW(6nTbg@Ig@e9=lA@
z3t4s|MZ)nz`5#)#tgbWf$AyS5djSW{*js6`YlO*YTXdz93!jdz1OpgO!A}7=+TLl9
z$S$uf^e9}=`^(PsqZfJ2!(ES<5Yfk98IJ?$PmKj*?+e5&cxhms#DkB=S)J1K$L|Y3
zo(r9TSPYkOxHu0PbwmW^*o!^k8jyh?Kvw)LObeN)_(Pm|Pe61GIr#SBcAe>ktP#m-
z$THR9DZ}ph;TKhN*TZ6+OEqMM0^Fm_wWRWTD~r4Hi5U1x!Xo8EZ4-SKTV{r(Ze
zj1n||B;*!W`BGhYa$E5XP(Q$$Oml9%iqiqBv!6dFfvox=d`o&<*S*o|PMDi@SnFyV
z%T`vkv5?l?v{L$!;yAiw`aDuA?<>?A%!NisaL-cJDyn+|b@pPxRpoY2IS1)vk|fUkBFn;36-51@~45U>%%ZW&Vk~GtEz6
zZJMxIoKEs8Soy$&gZmqr=}D@mE#1MJ68Nna9jZhfDb8wB~PuYO@8is*8jf
z)oOy)nGK^O`hqBswF9pv^@sGTx#}v%`$D;dNx~9^Qf9TPw6Ft;+dY+G%aM+sS0s
zn1xaK5LYzv-#ysW9M71pdj{!;^Z7vbB?i?fS7hOLM8mXQHO(DISq!av(RE#!G2PpV
z4x9V;BaR1(;kYpJw46v<+7Dop`dfy3Y5q*r)C{bnBRbHFk=3;CDZj3{qKQu@Wox#+
zvNXzOT4tBFB%XkE3X5pd3D#@7Y9Cws)L0{->KQNDPpckFvOnxY7{4X$xmR+YZamkj
zLrL-lcVy8ywS7=)xs`)zXD$N1>XE+wbiss!_*V1@Vla(YG)F3e_M}hkhEe7{&}gBR
zygT4=K6$@CgI$sQnnti{ALXe{i4UPfwPcsTWz&qfFtrpyT()!=!K0dK7LNQ;a%2C7
zKQ!m>@Vmf1y{=GS{0w1DaX*p9IaBLeQN)n
z3uFN7>4adhFg4?D7ZI%JyqT~P)wk{YVG^%b!b~^^Z6EC_3ZTp+i6k^yweYz5hmwwW
zV+HRk8)B^$7owz09W!8ad!HE@_AEs~MV)jdrPZs|%R@WbfldKDVD9>7X<^7ioOASh|bMeHf0P4A`|&9_p|2>q?$kkyQ_sC|nF%L`**Xe0Z)&q$H**SF#h0h8|;Kk4*
zex^-f5v1kz-!2Q-9`{2(Z=}?7eN5E7pXRd-xo!C2jM_XB!Wsbs4mz3cEgsyyjanHh
z(XtCcRWz;a^7l^4`c6Uv%l>(!
zL#6(>;no=>nq3zA(*eqcFi%gr{(ZbKMxt^W7NGA=w((;K@AM(ZyoJ~V1vX}}0?i&{
z#$(h*X9rhbGh%ZGVw-0ZwT%f~l4&*t98Y3r{Tkzph(KLpl^r(9?9;Z`_NI9Z2IH@XTNOz1L*sr+Z9sQH_J4=Ut;n=B@Gd
z*$NvS!GZX~($)&7h=0Bf>9AhHaL)Wngi-wt%KU!-lR#|054YCko+s`v$8Kl7N?ZBB
z%V#+9HT1p4l;ygtJD>gfAZ*X?=b`MVv855mCL&0)H{dR-FH$C*&(HIG%!-|)c9!vo$>8m36ZfiFALFyetdLqi{FSo2`PQ;<6^%Eu_O;fzGJsQFi%|QW
z{kV3pOcWwruBFjnu4jSA9z~w5%2w7yY}K*%-Yv6V|D~)x_@FGekRy8lZR03d`QZng
z20GBS`TF>s{#|a!(sg8B-CY-`R>
zWheCx1ju!Su(9`?J+iiSzQy5TIyb;Nr9>zngsv;O7#+sC14pbJbMjc>ogyz;-7`PS
z7uIl=F246&ZWQX5YekVS9kOg{!r0W_pcrBP^yr3eg;R!eUducFi(l}H6Dv%(>6gCB
z-cG`a)l|plq8xjT{S$xt2NVFUP#@qyeln5fe5HbN9NMygcV{Kkf>(j@hz8c``4i5%RmM0Ozu|(qLB$cszCNieTbpT9kQA%*-YfHe
z{)1O0*od5);)(m*(B~|hzJmbWLP1?tmYmE=+3K{d0=_Zje8VZ$QH946s2!np3exL+
zf{6~7^cM`4HcN-DUx@RyysS)hh2gE(>c_suYN@+b8)(;zK&<<)hXH3+V
ztkPP1m(8K?zMD@2u^I(F({{F#6YyN5*ryzjVdr@fku`awEJwJ&WUwjmuwV
zv*aB<^{j&vUgAW7m+&X0%HBRY(Uhu)nHbNghhOUv)IB`bZp7>vI%odtzsl+)Hw9rr
zRikv%>BDgEBXr0`ZrG({J#a$Z%%|>GKl>@NgdXV;CnTDvst69j12F%oN!SVV9D15L
z=?6N|o_xBTdFsisWG|nYtC#ZXI}7M={PwT+YO^PVq`GV7sk-asK@i@&RHgAmZ2(=bQtIjb144WfgEac_JKS#8kbH6_VMha(Bxa1yXz
z`y)0$rU#+s}sk|9uBFAn|HEuBR4zV`~&LzB%i9bOu9DxG?N*x
zS(O1!CkC0vSmZjrxzxTzrk-PgJR1}c6~_TE|Kx0$|Nc*9_U7wZ*`rOXj=>bFu#~;r
ziD_8jpv;{O*C(A$t4W|u7qsV!FV8J`-GHT0OtP_@z3pv81BII^)a&ycQ}5)}a$dVA
zV~d9e)Bom`HdkIXr=<`&8hSXao^fWtXSL$q7{FpHlgU2L8YjgoHn(0s_IO!*oi73o
zP7NqT!7q;Y&WGn=GLF9M(AvTgwZ(o{>la=q6P$O-QTauWt;nbzV>~v!yo*n#QsinH
z6ZouDlSTUj?XY(nd$aM1;bMzgLf5j6VUAr(oCP`#bW#Q%JgG)`m6Gy(h1;f)glg57
zAyz|qL$!1I{j&VUAIj{5k4b_qNTgBgL5YiLU5V@!^F7zxzq6=JPpzuL}&zV!}dn_6wJZ4(+OaT&LN@;i=0@z_8ASw3I|
z)DExUt(hCeURx%`n&9?T7Cii^M^eb<_vEXWrnLWkC5|qRByb~2AYIRnGz#{w^pw_J
zJjF)qtnoG2TW&AwXTDw5x805j=K+8Y9Gz6e>w^({o%WXTgTi@GKwsw3O#1hD3>?Qt
zEPU?Ktn|`WGdNFS(1&Arsu8}aOLIgiiQTP9x&NK5^2D30h>D%EQr7T`4cauvkX^=>
zoA1B1-1X4CtU+*WBgb*~i)H7ApmyYlx*?jmSCWq8ERha%HNTp7@hhTgeX7l>MvDrz
z%C>9X!JcDKW^cS%R{wmVOy77bbFtYD8{);N$Lwfg1_QItXp0V!IdL1(N$XT37Q=L8
zotoT_PDc_z03(c=H=X^)U3$QQGws-PE-Um$U!cbet%2K2g7gGiv%8d);m0v2o6a6Cz(e
zLlBDZiiUw9ttYfF#O?{UU<20G_rG5j+{|Vly++ji6%3htUZm5on)8ZZ{xjL$+9~sY
z{i|%Xug$4oiXcxbsWUUi!$aVh*hXxX`N+fp1Uc!*a${yUeqSDEmEMp3v+T0*b#-_G
zpMvD4(BUKwORcM+YL1S%osak^#!r7z3O5^0c&**Wfdkz6@Q?WR=09H$q)vO(*H`Yc
zVh&t;jB9&8`Vp^p+{qW?SRK?KmRM!es$ck)sRyY^=J`+c|pDrRvQwS&fIDdUQULz>O|}^vx!O-ZxvftbMf$NQZ}W
zBVI>evch=9-cb|wy<6SFYhtcQWt@#e3Zu`u-pr-EZ_=hL+PP`jW3~0kdv7UsKXPAQ
z)06%_`}ajLbOX>iazxz#jl8KMT}&%QN4p*zQFR_?6i;0M-sSdB+$Fjr*wwa
zg(}NjqzL`YSEDBG73C{?53s@kht%R`S4c6*Vs@3Aq7>$qo4JfP-9CXIle%6f306B5
z?edNE>P6k_1wmlfy}vxh&H2{v{!o@Lzr?Fkyl$Mr8x6T!8HE)N8Ae8INrxs$J56zZ
z?A?2+EWi6*o@~~(k~dm7^@uZx>kEZ}b?E``Yiv3ty-}X)#N?}ibLu%|g^`-1Z!)V?
zCFA7xKp69GZmxw9f37G`+@kIewfr`(89wqzR!I43V?|j@9)|w_x#7|qf;!$-Qi**4
z06+jqL_t)b=iEeWKlfaj{N*`r`s->a0WS(4XuRzZRz5S{F?mPmIGor_l?JfC>^}Su
zdnG-?;vjBT8W+NPD
ze@@0esB89OkX5T^Dx%`1@e~{#iT*M_eWpxtKo$CrUkmotytU3LAO;*w3hGJpCub8|
z%QPA}ap;bxka7E0_19p()~qUKESgSm
z_Ro1`jW6s?zrr4d_b|R{dzWX*9N-mCQR;eBic3P=6SGQY7&2nx{G|zB+hV`Cp*-e<
z?~i{eu5{4OS0UGmD)A=$!3KV25orHzCQg=-!T$NrA*-
z%p0O^*K0;lw&*}9MBTe4uju{sr)8Txf^J+DkO9)
zQOf9ux|=WO{op^!*)Sz6`bK^qACTyEG~T`;LOtHj?IqFOMzC{J(#~Lz0iOCr|Pk
zkLU2Y4-*&8+a0RFnN?cMjQh1Ky0##;%gVyVfBt9PD=DpkB!D-_AETeD0f6hd-t-T7R98)eX6kO^|$sgRIK$&^{f9Y(Z;=eb^J|
z@yE*Q@h7tStIC20O8nJ!Z-ppRYtxZjo9EsZo@*FYY)I=_v?J|F<4||tv74@bvK4iL
z&d#vv>7`f7p(50!NOh%aPtSSC%f8*#eV{tH=?>v?&HjlcUFc#k_
zbCdvmSCdq4W}#z$qUx%$n83^I!csuL5R#
zZS#r#8pT1DFZEhh`i+T<$*#_}tjw}KaHg!j{*AK4NxkHWb#u4WDp)UX*joKAmG;#J
zAC*@gHX|3CxrzE;xs4v?g4PS1={2+WF&$8IZdS|dZvH5;9V*S_?W%1Yp
zWsen89CH7}%Y6K48(r>dNsK7Qq1t;8ilAQQEG_A1KdxjDZyzN!QQ6lDCpj0XH|R3lh1ftbZ4}cQ8=Qu_|5*zYhcemFUUFJa_rpLZi;xA$PuRnOeu3G
zZj-HY`g_loy;D5FbzcjcD2D*$&|A+7idZy}iqlkrX*$`A_}>8ea9b(A`US6GzkxG`
ziMcdM8q>(NY3B=|tvuu8A=1nH+4{wUUn%9;XUbWhI>WbQEBivViy`fB0&(O3Q~09W
z_D}w&Z2kM+?6}@u%LAEpxg#!ke6=cn^H8(1Zsd41ELJDDcli<_%rC$_0!)qY_`+u{li?7t-_)`|G6gVhX1!LkB
z3E^2TWdixHx36l9E*9NSz!g*KcVIUy%wiJ)Q?v(m+B~hu5Gxo
z_A&N(0}x>MBHXX=DnGE=3Xu%)T(tC>e`ULgqm<)~;|co+GQN0!w{i^P{x9=1p1`;O
zLBoCX$FuSnj;IrRJaEvk69SXiv~h&qOY$^5b1
z_jtO>4gG86aseL3CnE<^mPC
z=}lJ7{_c-uzQ>KWlU^AM{>qE+nbV5qe4*7tUxq{@3n%)st+M>DALna;U`y%XlR^2D
zH}#Sm`7wI=u0h1Wxf<$iHunC-FY|htI7By=`33nD73FkXwK+OSbUm)iS@-w(!S~Cq
z8^!Cq9Wx`TPEV$K9H2h#nY;-NfCN{Uc~i4>mKANk{dJkY^)`-R$5`4s<$*asYlG*~
zVi8#c2SWaJZaMBx*!OCQ6Kcw8uf6+lLS=Pb)rMM^3csn>rO~}wp$~5x)XnPpQ(*1K
zWrDBet=WdaxzOyxcgy7O|1R@a*dud&wyangIko>GD0|a6ed0U~+4&gjY9sfho#aV=
zI&bGN(&`eq02`a6th%7iDR7i=zmHpj7)vC|?nq9^SR*_QiTpIj$rc_jbsd
z;N0P+)6??!o5#wDU7h8mr=ROoyZms_R&*QEG0TM?b_rRjlQ7wymiuu;xoNyImD?*K
zoKE!U90?pbqHZWfuyfUp|K&NN&J{Q|GLz}*0r%CLRe9&8b@|Jw(>Rtes+!GAI_ktD
zlYXA+&E9>l%>Kj;$Qw+!m@F^ZoYz-+^jW!sOpHcV^TBp>Ge(^@};;;Vm4NQ%r}RWR{m38c>}NX<;6+4lYYxtJtz6gr=BclaeglMsD}b{vg*V>
zV-f{`wS&3ESlk(hHjNmsVJBD-5!6~EiCWnbq625lX
zw0rsWr^}KrCuT)cijyZ|;RurJIC{Ge?I=Kls}X2aVDtwa;&sC5OaCfmd#58w{VjGS
zLaM?co5ItLGfnaSgOyN=?c-(s?00!ZlFyja9=KD&!_o>7mCs(EE5Xavf+PJ`X3)26
z!cPNrhl)Gp`6{PPtDI93wMV-uoF!kM%`YXfwR$CS-sZFRo%YrMKQB>RJotN)|m
zqlkqMAC4a{y>BN=oyp$7Sc!%3u_(ianwjJj0EL
z8e3ujcGzI^t(#WmxqDCZBpF9kESezPykIaKaHlW7%$IxqSY~|vXUfe%-K>_^6ZkB(
zpYe7t3|CeeJPwnSkl75{-5B+A3LG7dByc2wt3m=pzoak64A8e{+6rz^vq!=skCwf!
zeKngiuX&Yf9JCWd`EkZ|6|dH9T&0-3X6H11`N|wNa_1i}l+~a9jQwOBAYYJiIP6Ad
zoZsWh)SnZ?y!LEHkX59?%?&T}%Cf`5fip}xcUOC5{*{Ny>RaEelV+xLPJV@TZzjxj
z4UMVVZu%K&f^bkx0q3vYQ1ksnaPze|o>ty;n#m)t=uO{wllt*A)f?`{mt)GMI-)G9
zWOV@S-EvFW`>!7rwaam2!hTFs#;BzgFio~NADl4T4ygz9=WY`Hlb@C?UT<@(s`au|
zt)F-zxBW>bZvryv`$)z0h5RRM-o3c_=CWji@`X+^dkN_^c&=kzl^vHPS%)g$3fE4`yl;Fj56W-PFo678&XIbfW
zJD=0uMaD|5@tt}q5U1=MolsLqk1{qyqmx*MFzC&YlE_$B_UC-@S5+iA4#bC*9H}VUL7z2v
zyJ%lavO01D+&}iV@@%+Rn;zh!!__ANnsFEx!W{{{pSHZ%OpISXQn1`D%M-`T`nx|Y
z<*qx?eZ~j+!BRM^Cmt@7liSFb
zRl!z3Lwgjis05B2QCC!)S35E~m>r33_T@RE&XrNMQPt@9WzTJ94{x1Zl)v6{8mol?
zb*}>^T5CQty!8>U;=TGhPiJ4P6Ae7r-V``N-F4|CMuJ-ss>md|8CtFCk?A;B?$>gP
zgT=u~)?sPaavhI&uM#*ofrx{NKJ87IpQ~T;^l$a(qh)pfee5ZRo#=ZJ?Gs?N09Rsy
zwGZu8dQoLoZGGa{$1Pqno3SFN{P7Ps^XgMS?PL$Jk{2?Rn$}FyD5Wqh??2HvVz~C^
z&lRe8oYe2F~JEu-=
zc&gps+Sw^5SQ)$g`Ty|R-e&!jx8cL&H^@YINN9C%l3XXs60$S_e3NIsTh2Vh*K=@&
zOxl>EBPy#);AQ-3UdkvJ1ET9b6>
zWyPCyzKqUP>jEpiUBNvB(k3{Smp9#9R^MY4-EFs)RbI!l&XkGl;NLp=gZ0Z`MU+=z
zXuYg9OZty1zotx(R_IgeO&@aQr#DZNci$=H?|(0oH{PIMAQGHVz8LGx7OfU|omfp=
zSELQUXrZYy`}9TK88M-JysoPni6{quCaP1y=3wOd3SBnV>U{C*tHw8QZP4fFJ-X~z
zl~;9}!^bhz2Xf1;opSutJ>~2jyt0Qws<2v0Td?#ViB6$)*we^kJF-1f%6FL_=py>B3JUY;N5w#`6~L-oO^&Ecm9Pz~%zo=v
zvEICCxBTs1mYDOjd&*Z{<}a}V>ff)G_34je40KHGF~6GWr(#m>t9W@G4{Mnf6ESWZ
zD|o3!^y+WR8<)dAfb;=HNelx>o2=fr(z*U?p7y7j-cIKpYmXZ)I{1p4@%7`6m&L8z
zxUwwW5WPs}540&szcCKlziRKDdujXUyc#!u>7`PB|9d8&xN*oHB%++!B(3+SgK`Q+
zaV3LsgwmF0Dw#>~uu2LihPQ<)oP~MCiwW|C)fo%%Kl{D1Javkt@HnHOnF${_23~;4
zFx7Z(q{5rU^}$GA+FM+>if6%1_l!;KcmDY2viis0SPjC&u@!WpE1hmPOdiJr28gST
zW`c%uX?W8Q6?AEGKP&H^`35f;`n5*J7=GRWNIU8Uk}k7qmz0X*?HUIl`y0LTYMK4|
zm)R?--#&Nv(7%X7WDY$@BOf?8yIU3yJiycMXR^v{hJ(x-4dJBjvGbP8^BjWLJnCL2
z;M8f#S7_gTx6FU}3+j&pQKw;KgOHkhE|vdIek}VQulfTG>&BDkwN5A;Yzv&s-dJVc
z5+3SGI1*_d)$<}oi>emWuOX?Z)YfgF^XDc@H#o;(-$>IFtPfGdc%VqNNzgP_p
zjQvg(u~=@V(rl58pF}rPH*LNUsV*tgYb4ZuCA09%f44bS*7~O2)Javaj|Sd!GVQAu
zTorkZ$l)+Hdp{cIZRCYKq7dWUqxdy10lII-N&9=^j+-dDfzIG6DCb2}9@4Dc%HZKg
zu&3BnAJmcW!+ZOX|E*Mu3|E`CD=?1t3LTc#^RB1!Vf8#L?Ru)SeLZ%9
zN)3~0@5}7m^zrn090p7FuvtF!bXh$5a8`ym852H}4>80RIPJLpgC?>XMQU3wa+>pz
zhuObgDidFAZqBGKjqxO{r|mmOgh3p;sx!!zF-0A86{@oJ9+x}itXRq`10+niNp=Ff
zppB+K{9!qB@+JU%${0f}27ch9O?6IXg+sC`|2DNY-KyXpDtkQP-DY(Nk1B9#EqTJb
zEZaCGcYgYdvi#`7j2CrEDc=1-UJYYi+Bl-j@rE5@OxB%%mg9Gq<&Stp>_mMnPYAQc
z<7VF3PeP^$!ECw_#;Yw}AD_8W3&)NdeP>0_XK(;?p4ImWtAO`t$H|X=Ty{?$uQ%WD
zx?J-(2D*T3>K3lff2jPne4QQCW9#e!o_}6u?^m8}VcW^(g|&1LPLP|XQtUDT&gLjn3L_ugb(*N!MPDUE}4tUU74@j2z;+?M;5@o;YXub0dE
z!;j*KbCsOnxPF26mm(HSztl$R%<3q~xM&>__G$>>y(vRonOC{$`su5*%1OP7Zjr5?
zRmU3_wToU2Rk?f~tg6lInZNW;&-M%IY%qQlu5StGEYZoDJ>!hi_QUINsDXPivUHXY
zZk#C7N1raU2OlUO?yx!v2mcO^?L5F|Y{s|%yuX87uJ%L=WpIqh#5QkJf&G9&9{6x}
zSp4=&zM8kq%4&7mFfN>g&wS|p;vj;gH=7|fukAb9%ex^tEtVPl>O%ApW
zv~AEeBZF~8RtI5?vIZuljt+RQJ|dLl6+`MOe{mFAmQ_&`zUs3&b$?kr`<=3|L459*v+*8i
zuh6QvU1=ph;?xP_D@ncr2qE})@@&0u9q~%i)@yH+$uEDEn{RuYc?UzU=}ld;j^vye8(PJ}ATU2DdnKr5tOdOxPo9=WqWglRx}14us6f&68Hj4;-8~
z(s5P*`7kgE}5qQ$B{zLRfm8JiC8V7Y)o$Px=8P6VewZawjA{8Yq(A%P3AgnQ>
zG36^9r()JF^}7Jg&Qat7Y*>Yzed#0iK1-h+6+enzg%VIt>O-5}>W#^!zv(IJ5#yFg
z>w8!^{`AxAeRxw@`Ed*K{Hkjm0|w3Gnz$(asgnoLH!9~n$(Qs}oI}P|6AA89>4Sv&
zy0GI8#@%@uaIT2D`AmH^uhP9l!j;51$JoABiS(CqAX3f7uPbkP(}wxvonL)`=TNus
zkmSe_b%@BWNYarb>WYZ*T0ydzd|pkCs4l%~9CVUxm-jzNPVS+Yh}w=_SoC^5x-##@&C?oZK4ZclOKQlFGn+zPqQ&f(+%(7R~I8w4C&aW?z^epa?V{Gcq`YN){W0v+(v&S3zG
z@Df5eY}Pnfmp{NUM!9VEj*M#k1gTQ~G?eB!?_cvMeM&v*?T4>7vc3!_$K=m^VUbrl
zypbO@%RZC`Ww$T$kc-M6l&r@%APZl|D<^L)%V)k>&fa=+neDpz*>-nDqri0@V7zm5
zKEB4Nuci3VzG-Jo#5IgUw?C8+tRqM3TDYZF)`s=t(B^6{w55+m^~_V?MOfs={g|S#FNDM3)0b
zV<&is@l{^ednjY1PAYYzYM2Np%0(XbV0s-=@*p5N7k6+J>d%<6a@BW&L0yNZs=FqP
zU(M4lJ;`R}cYfTyn#c9fpD&K=MM2pwQeW-DIHc-0u#vWYf)9v!Xnb*p5IHFvtsde<^%|IsI
z#Cy7;IfSTsL>@PY2gjiEv0(8}3zDg%I>9k?EgcrZ6r(!M)z%HifJ3~()+&g&%WSAq
zWBky8R9-G-!aY#Ch9d}S&?AJS+_Lh^=M-PD1uxO22h7Ob3lqjFmXRO2^jq^Urv=z(pEg
zN6jmIwzJp#F>Owtp0HQc^leu2@M@VWhg>b>hR$x*+Urwo1-QB%P(1ZXB|#N@4X-qC
zoGtIrvbdd3b?cOJwJ^BEnJ*$XUJk`KB!U-tD#N&Vz&Y8OmHDf$mDw+TiC(Y|
zk+2O{|H9BYavShnTqHW6oWPr4+^-Rx;qJ=0vwWe5%}XA1ic;SC*PRz0yqG!1#_FQ8!fM)A=(JGjK66e($BX%KNXp
z!)B^(%f_T8-R#Q~NF6ZcZM%GU`rqX*FaBRV^z)Xb4Uma!`0K{^%A2VTjicDP5;$nY
z)f<~e^PP!LqUsYV81rhpTN`pw+p`Wt&hUo(25<2moMctpEk%5!Wx(h_Tsp7?GY+Qx
z`JFy=yx9`go6?(3mf6XZO!nAkB})U~BD^sW^J+@3qo2Tb*>avf=f>K)R-Ar$EM&cL
zVu|yVGt_y)s^Etnd)@n4piZOX-#4K>6w4Qsh#Y#ox~3@3
zh!nX;sla;b<)sIT)nH>vDmAELu;-X!9hW*apZ$K>%h&Vh$MK4ZXTT8HE{iSu
z{x5zNCxT8X?UJt}h_7m9Ej#EhSz}CLgM=!#CJXjKTRreleXY@_*kFq-4DX#6&SrRO
z^{!wQd#$>#NtIn1krg-Zu{rs#ep9ArKB0XWceR(bNCo9MmS2w#ndggu-#S)86)1I*
z2K8CH66)D!`1<9YS?NPd;T+WS~idSx1~ovGemyUv-NdVsIzsjRU9j=$uqN6{VhxC%vV2N08z@}V2a
zV*|NB_f~xHU~{MIFQG^Vk!mJjCiK
zz_Riu@M9%#Ea3VQf;yFs=&2P|r*xXG@rY$3^{kRop8?QI#_7Sgj+KYr-G*J~BJx@L
zv*<(?{T1AU?GUaZulO0=u_L=YAiMS9d&;f%-Hlx6vsOg=qAZ&{
z#_{uzJ4(KQ1dbe07ZA|(lwCVrdRy+hbVPmd>bqBsBT89od}cVJKEM(6+)Mv=9i&Ou
zfMwzV`_|wnd^r;6M!%osqQ^b=fkzwN(@pjwgHZ;t07#5>}mvGIq{2OE1B?-+hNjFTbTO(?%YR@aQTsvxVxn)K3q;7VG>YqXY5;x%!w
zJqKNB97o@9Ms5G|#WML5dl^yXs^_V6poW_iuClU-nDn
zMCI;@>r9HHr)WN#E|)uQE2|&9T!o>&}ag
zD3?6?D!`2XzwK(IcixRdtUIGpp>~KYdO~oEu?8=t?REIap}Dy2_N+#7WAs2$5A!>Z
zu>;nT8_MmEJ}Fy2{b{~#2gAVC8_2BcRqw12q0`I7frD)$2ZH*V-`=rfW%d34C}(du
zK{e~U4%R^|0}sSI&fealRZJcNuJrn=U)(&;&+L}D8>)K)%qw4!v+xH(*PTl9K;{K5
z<)sIm^h>_Rw>r+lfbadFEN|g!PQ3bH|DCl??5nlv-IP@+N%Fp=$*kkKmd|M~MPh?Q
zHl%PpV_z;`m7V_U#WH>2g)%*j)6@P2Ty0~cwS`msY8Apk<_=tYY3RCIuQo?zVP3DZ
zIqIc-QL_@eg&h1^q~oTq1=m$X!f71<@^#pqW5^3z(+~!yxQQf0^>PUi)VaD%HmUFGSkL&7dkpQitwPTtCTLTs=AVSp@QQ~#PHnK562
z$**aG9);^n0@15YldB6Ehpnb|6&+igx{tl1o+=CXj$&NSSQ>jFO!`4
z_kq`(>s|WXEf3yRZh!Eed~GnyYk`jX$mKP_fzn5gr~?AIzAu^3G1@qt8CFES%!()n
za{k60{>zfXK}VEc>DW;1gf=3E>C58oh^`WF^44!iypBe-MydvyHWNlz^GWo^(t%G?
z?`Tq2FPLe9p*8H#$hEP(5fO)unM^cs%*ZveIGJXwI5_*&$4lWx(N~1B
z#F!h$Y|toCZ)*50cyj2*h<;5iyyYPMO9+;sbYI<&nX46VxO%dfS*Qp;yJ-d
zMs46V&x0bP`V<#wC_iVc@VwskwIUGsdG5D)HRFYUlpR)9`3%&Fxl5{@i2wiWy@#7z
zw~?=n>FyaOB}$~SD3XenWl2`BeRrSd{_)>;@2)M|veuHUoO7@;(@cl^zCQpxJ;R|y
zQVc_?G1KSZ-~fd}p-=$o6aYyV#TmGSth}?w%njta5=vBR;La_6v3`3!?{wc%zN`H}
zp;9jJP-65YU2{4RY85e>fR@D7I_iPrWu5(K`v^SGHq&rP~qYi_ZAEAH?H
zBgGMuo3*#!DYMsJr(MY}6x$+m&!APFK2vjc0V<8D8Iq@G@Zq)!Gda
z6F~Sn6Yb*(4%2HtxDJ?YA;jG6X<%
z7Im=7MDeY6%jzrtiee}2jn~r4G}5j*U=lXZtA+a3FtHI&<=hH`;whWVo?>s08Hx(&
z%!`V=aEagHm@t2nKqeV*|mq${#2^nd{ZqO8bx_C7H-OE63sXT&|)su*m>t$bKHej%h?FxO`?K}Ei(K&Tmjzx-jS_AfR+``o)~Q>)
z1mz}O+OrXCzs9!B8bJ%Bsg{+{bHKp>Gd?!m#
zlzf>0;@04XXMHfwrMt!`FlVuame%TBuG68eh1bV9S49LtkQzsP+n8w8eB-@?Vz+ofUnzlb_&o
zy2UZj+@IK+`Pt{XH1Ec{Zz~6nus7tw(!9_^WNU8Teo{9pxAO#J`$m81C$CNNUl&+g7n$@qaC7M50MI|{hQDbh6TGs%jN3aH
zyiRy3_c@@-a4QiF&BP3aiu~+=9(QSg2)@tMhfr=j53{dtWC!(h27ME?-$0
z@jJuvme0Q~<%2KF%BdfLffX3hUB)qRAPr5kyfA?cJ|NSc43qx3Cs~WIc}x2A{#(N~
zpLU7QGPiOqVwAyFC12jlUxN*ldV8?Kc<3l5>35b5mSK1*imp;bU**e?pEL>Cl81rN
zzYR!gjBDfC2T%1*OLl;Wv%QVpd9Ms!`)W42rSP!a+T_4JnudaMM}Fr1#EW&169PP7u8pu3LHRg*_2s~K){=UXuxPr`P8O$jK<6f1F5RT=NdrSHKGi8H4N@lV2umr+RN%ZA8JVf~x=~G`^
zJJ*y9TFWO=!+*V18CAnpu(}yy`80U%-B`j5mD?x<=k;NHQa1xB0Htb$jM@h0x&`f75T?
zd2T_q{KSC-I%(ALG+A&(E)Fd(;{f~nfJ=I)g)(dS{kLU+qIni26+n<1i6deF82U_l
z6`|5K`}OcHdt^0y#Zo8OisSqVPp!YXQmaQc%F^vx3RKx*Wuc4>3%~=6fjnAdg=
zMh~zwls=PoS7kjsAwSr#(=zJau$`Q5!!X`^oCNk4i-G##J#KqAsN$&)_orV@4m1MW
zf&SP{;R)*s2A4S1yT#vvcD!xx)6R-SezrB0aeEKlSPngKA8hW&>ndM*debfX&w{fI
zI4=q;6;bC!rt2e;RuxsC*pjE^n-9J!KYspQS*5d@chpz8sNEv!yOS)<`-nZF=o}+x
zM46ugiT|a$N)*`A2~i=|&1}X*%YjUAvKy=6bs*C!jLyq}r(bh(Y6q4n`I=7}>vakb
zPVYNXh6itnV9(@CMG6}aWAcPW1Dz3jI!&3>P1#GvuYL~6HW>omP6v6OggIC5c^=8-
zzgpH!UNq}-f!yg`rQ^9Xt7&Shw2Y2J^QG0yEjtk)3Hw<1h@U~|@W(TpHpS$aWi}29
z%Rcr(`kbTe-)56rFwP`^$xUBo(95uhMe2gVeJoH^{t-#blqxrB%x>1am~OZE7t5Bx
zH3)`=+?63($6)qR&cJA^cN{9?M;$Y~
zt}WLGP}XsrWs^4i4d9v8*Eu{^rx1Udxv9
zVJSI83AOg$e@R))+WHcA7q-dU;vN+w300;!*$w{23*O@2Y8klh8MEPL;rmeHpkRvZ
zYh}`s$o-)9eaEKXfAKUz+t3(V*p|)Lwkr+{a;2jr;G$B=C3`iO8aKpK^JX00Z#;t%
z>d;}J@SceBpgOWiSpNWWoS)p>5?|_fBIs)@RDignG8xIOL5=I53wBm_FI9}JdwSzB3E&aBWB!I&;mEax&Uht&317*|(5VJX
z?8-f&zB`3Q)QA5ceWBekB7uuP1yGX#*KbAb;*wbxNL(tRb{f`3-2@z=tw8RTL(k^$
zGm|C0B)I%3lX{oT+{^@oPHxIXXl0d23BAaSy-!x|x;sl~VyX*VAw;>vz$sjy@+x_&
zINfx$Q|K9QhA;YhCn3x&i5DaN62IAt)Va{;?-mh1M}G3SV>`KKtp&Xj>@Id!58zxceYoIF9GooR*uLeIoL8%y&P
z2c4yvF7b@Z&p~Vti)S}oKsWMX8;w&AX^Qja1Vu}-C;}+Xh{?`mmA!W!ewgEo@2^VF
z_7$)zCMMLwP|bydcn07BaZ*86-bS!KA?_
zO`>QbjRVBSsuCnLj-rV);ngO%RV+!pUQed?y-QJsEYT~s9xkW<^ardM*gPBlGmmwY
zJ4gyMCpC4~{0WdR4R5?Ee#VN+4F#E2gfG5S)|hOejcV_j60KPl)o-1&7t+^d#G8khb=i!bI4XIaWJYm{f=Rh-okvEX
zc%5=OjSJe1X>>GDR}3c^SiL@6UD9rrkqFhF-fkT#Q$e0y~X
z(y$J?`g@>B7xRSYw*#oq=hwt;z(O+v8oG5%ChZOIV-)h2F+!z`NZ{jn$oOF83zX9A
zt2c0|G-HGrOGAsx97&tDOg#CsI@8)AlGQwK;`PGSNXzSPrT~1>IW283wcJAF7p#A0
z`woL4LcrNDNlZQL)pVU%IKD%
z-D}W
zu$KPwqrg%Tb$)cZE@IV2W0R#ZG0Oe&ozKdtuUJB`3oW9)J@IjQ>*N1Jr`d!H5@xB0
z`h{!=4HfkE26Z4JJVm$REhLY02!uu8*4I2YPhwXd3NY&@1CnYH!6-TkDVH5sU!HnZ
zZn?S4IDN+MVzP$~!;jua2e&_+QpJaftC1N5>CDM~DJ~DS?oZG%p%dlnkEB)cy%7i@<$}P9Tj%f0rSvIYd`Q~(`xIDI2zWHX5N*FHmTLr4Z#>ee=z-^3L07ZcZ|?CkgSQ-~f!Yv<+ACNTWsyWN-ql6I-f3@u!zw#SRyUeiYn>_FUdm%kmPR};VDher`%WFh0`NYSw{OC(Ao!)>>
zfcIo&9fQNF76E^LK6?=<>$DKmn#*@87*+U=0q&_d8SILt?{VhoG1KvrR^`+5E;cWH
z_Kz{$cR8|hZpxS3VH)LnS^L{RIW6zsEDah^24I1ZlR`@qg_hvN(QsfUFL4#=yaOg4
zpq34kMpG=s););9P%W_ntnXcAP%}alHo&wY~mJbkws%RX(@Ip>wn;{=k
zClbvcG!cc1cEITQ#rQ`HLh$xb#K}{?E0cSW|5%EJu;4CjQe-djm~+Q~MExb@_=T8V
zbdkMQC4Iv|sbCBM~@=1FM$xTfCm
z3-mI(aF9_;);94xAL?yHXk@T9gwjD${HZ}+0_Y>5QZ{oV=o`2
zw7%dzV2`i~dpwQrV=q6HALgZk*yVY)8EH{-!mo^xGt9f?LzHBZct$nAI5n9`cXY<8
zmC#-{m_GeX(w1Q7+gWgTj<%V160}V5?}T@XbS^jv??8GaXw^W@Ukg}3^!qB*qYNdM
z`%)FGsfYhYIb|BQ1DK((9{lh<7Aqu?*p3yHdxEIcmcpBa0&eBwTC5s{bgeMq^G4Km
zOJ2*%6{G;wVH>wDdb>(L9G;+6(cZ@N57VQ^%Ix@Y`Xa*82PKxA!H>iXZr(2&)|s^P
z*%tn2i55UO4^R>H#78%jeH(RNQ2Vr+OZrc<6X%w^Jtl&@C}zLJMP3I!GK{jW9^79J
zJ#;_xK?P2`*lzvQ!+uGgzxK3CMbxi~1LznsvT!iK!Cfe#PJW3+6c3wS#?>WAUz+#L
zj~|t{KKVZk?3FKdkkLD?E`Y8srq@{RNbB0+;Gt8f!giCA(pEPgc5DfyP
z?OMK+k(bcM*Xfbt=N*&efrCpM6c!>*h+_G{B-~9=Jsy1aHVOy!k?;%YNGlAK0`h|$
zuN%dylrm4#xumJ10I*%`s$|QAonkvsRsk`UxG3Qq*sP4CAz{+TjE0oSVCy9-=1Z25h8_XpEmsk=t0i+UW%=_8nPn7isj&RcXdfCU)-{eDG
z%&0T#Ff=ExbG7MO7F!aNd(yah`0Br2EhF|rTJfts5waOEIITu0!Y0QJht($6<`#lZ
zfc;ZWS#lI)8(2Ec{_}q`NZ*6C29slQTA8s&9RyqZmQAMr{356Jp;V)-jVOu002M$Nklx)>f7Gt=@gVb_)4}{478G0CXe{%Bj_p
zCj)Rw{dGF;L}T%pzc(B60CvKCT)L}60eD84t3|VQQTYK6bz_~Uj=0;uOzyj{lta);5(oj8i(pzP&w6FE7L?eF7vHJi9AXCj*vALTP3!b=1j;3ye;JB0
zPBUK1&wRSSWm|JxgnTjn3fO}X)^0%&_3#mj3l$7*F6C|k-QUaG<1FvzM}egx>ip<*
zUBs%Ljm?zCO^@}}yDZJyrHZJfMbxEbxrkLRRgNm$mET+uqzd&}Mlf}hQaPl(7mY-#
z9gKojg~y_EqBk6}vC>l_~VI`*`RoI)b%o*2iy)&zU
z;0(}wi6bE8sV{cCUdtUrZKn&xO0Qc>Y&F&CFq2K{!2v?*B++>Z?XqW$UOM$Uf#5+!
z6eCuvE~yfaIF4X}@7K`L21|&TJo^QDSML^^ZQvWPv$tCb{|Y%w!^igTSu?kX{*W
zTv8F|{k$F*igKmB8B8@)!aJ553eFtah&ZEnef6uG{6$&)3g|M>JJ_@A_#@@i9S6#o
zeYaQ~k^zw;DO-boX+w(z?O?rMW3HEH&VP{&oTx_mX8-(W8GiHuN(`5p8Pi*(m<W
zQL=DX;iAiPgHcl$S_#w#Y+;iYM@4hO8T^fh`^)f|Kb8}R_rjCZ5eig!Ip*=1&;n_P
z5iOu_T*xLC6k3@ua0QvN_Wh4#^!)QxLBxC8j@B8gT11ie*rq^Km2bKU`G`}R9{_-4
z3f`bp;ncVC^fP60*L`JUhBARP0~KaiK<)Y9Jx=QTSCsLwyhEWY&xljn4u0DTk2Fil
z1k!2K1|)A^8X3gdPif;%e<~XX_63)O8;vv-WKC}~#-1Uv);-MXQYUZ{f8utfno78}
zFTX0Izy3WXiB%ZzfWj3g0mZLAUGTNyWj%qP^(0(m%JhMU%KBrEP$ZtkeIbX?xARg<
zV%e@WC+SkL-dp)Bhm$sW*AofXzF{Ap*E|uAz5C=%ekm&D*BYR<8L1|P0CW`y5%hae
zT0PhfM0EZx*vW&NfwqoXuf`&r|1>?)_QmuxWwwIY$7FVmiS41Xa_`+`!Y1Qdn%XT}l6rB0L|*`Es;Z9iF%B}0^|D<@7wJ`J*uUj^ME*L(m#oph@kvyZ>=
z$(FH$FPHAhP=IQw^4I!k{+4rpj!Y-alUm1z4wdO|A7|evRygp1u8zsKq8b@M<;ybj
zMriwlQG2^=&2>w{@Ub$GvFanA94H4*(S~^zo^nKhb}5RY#x_YG857^7ywpr)i~~n1
zq8_>*+3fham!aMlt)UkEmlBg-1FWSY>eo=qt&FvkuHC~@5%nvoc#Dc$b)cxTg9#V(
z5sZ_e*6Z}iV+IWw%+-lZ(xGrlVk~IVG4S3mmy=`1%k*xJd)>c>38Vu+-zLMFmzhVzYkowiT+LhR`sNxezREp@WoQQv?(Xe6fG84
zn5mNck>s;-O%-?*nV&*+Ue*o6I!SYWKf%UTGoIlkh>f+
z7@tP&pQvdV4KtyP6BbF$TR!IL{2Xa?z5Y@ba4>kNq6NjmW{
zSQW;?Sso6@m`h6Ea_W!rqY!yF$E(Ma=GC9Jv*4e@@^wRR6Y%xv3wh2env|;)tgjkD
z(rD*Ys?}KuJcrP#bpE`Z{K|e0N*Vn4Lm9sDI!AGTuZXJhlvLS!2-&H{RJLD8qv3tK
zFE;elq8Y?9&vNOxoD_iGRd(;3No#dg%)tyZ#y{?nIYAjUV~@nKdx|*{u+Hh9((ZY0
zU1xY2Qzk3aicRmDj9N3@lBq0VU!@}I!Osqq!zb#P&Gwycj`#Ffz}{q$u+ic(@6GL(
zJMpEw$gttfd!vZ*lxk&+uFD*iPx}3Bf0u~M%Xv{?sfao+GF>l`Y)DloxKirNw?8c>
zmwQBAFO~a~<>*4vNKOzHr=IZS>~4tQH^k1NPRn`Q1uKHr&L3H|(@;UpNTd#|%>~%4XYfgPFzH3L9V-m7cV{^Qc(t-mAr&PjKR=
z#!_e>nDA0>8Cu#a<6_Jv{X-riwl-cV9RQ@ahAQPc{py?4Yz35z^$Ms?dVLx(NgsXp
zeOcjn@#z^hl>Xq|GWy{=mNvly1D5v8(;2(wT73;R@2@uP#W6ToXj~;xqm2QbD8B3E
zk?8of_?zB&SD8NgXqnx3V>YW!{bX3gd*WqD6g1ZIBm=NkH-f&_T&0zD*UB&Lm~f0(
z!ZzfDwb55!V%ETtG%V;;I62vLAFWstNiXQ3MUKv;cGA#+qytDLjgT8dWd^5nTG73Y!Uex0n9)-u`zbC$0v#)&76XEw^{zy7<7PMr+i8-Cem
zlB7%wp4`M)G(rdNDviechOum6*e$5Z88%M7v&^1*x@@qtGnPld7%?y({`t>kaDoXL
zRv#DODWR-_LPD5YY-$BT&!$z6rW=%ts-o)14^$so!CV3IWHg!@ZbHt2wxPJWp}i}5}8
zl=9^7P=vulAZmWbNITJ!LKs@zrmu%w8+U31M8Q6NDqi|j+mHM6jo4Rb$j1Mp&ptJn
z`r)F|koWFMW>{$7KwR|_%U^ROER)uPC~|E-3CnwEcOW!FB3Mlar8}m3DSX+k55Cg}6Cv
z69xX(Onfg)WvKP;UVH<_fi8QOuczPrScdO1UQpip0mC0ME^ZF5jp=}6&;_DcVJ)w}
zhyq({^&FsD<@668<9qMT76z03D3q~|iU7!09O{!!G9Qfm$ODti?1Q?af?JLEklZV;
zkqI5xaTHN^{m?$#$Y2D^7kZT)5utW#JV$nJfpjSzYGJiz9p1F39DewI@}`$2^Dd{n
zFUp#wMbyR9eW{4Lc-mcaDQz^hIn$UB7%t5_!P2}n2KEj;b`lO(x{wZzhn$eIT$*=j
zDPQY;6J``e%6A1T!45L(;J7~L%LhVuw8nJi&~4?%+u7^s4t^Y+?AP{~+
zi<3sJtEFw!38`TrNsHopQiYBtY_uUxcY3$duD|h~w~GPzgGHSzo0pnv+!~cI{O*S`
zMHw+-2~zp~2U4RL$b^!~7ZZ-~R`9R9WW_CZ*a5WDrIoo(Xlexg-8EJTwmr74R&H|5{K~mB5lU_MqppF>45`f%JJb7t^d*ns1NEUUw4Uh4;tj%ITXA
zV8P`x3azidDSQ6=zrn|{qqK5P#{N{wS(R{sh2Q<1(oT3E+~)-#9(k$aoBZy{vhl#t
zGC6T7n_Kr~3Mm>Gfcj?Ijvv-z84#Nnf9z64u~15(7#O|(L0SEum$MAFF5Rp2sdTae
zfJa>Ms!s_z_l4xdPF(428j@!jj$JCG=?rIH|eU|mQ#QbZCh}Q
zeA#c}AJ_0$^l!(h#@&{{bkuK_F`wC3Sq;VfKc+yKEe}udK6@cfPDo
zf}x;Tq@(R&D;--YLw^Y)fBCREg;S4Ki60`FNB9wjYKlTKdr*pK
z;>j=YI%5P6NEv?2At@+jQ~&mxv63=}DqDpa{%Yw>t4n{Nf5`@+$0fZ$*ExN61l%ft
zcik6VlW|czZrsQcy+dvz%|bxZwf0c)K_Mi3puK
zGu2Lo+ZK2ExRnA+MbuV$T-Q&vp;W;?piyPBax9{jim2wjzAxt`xJm*8M_g>&sD{6I?$oweCE1pfbd|u#Bhz@T({^
zKCy(=s$fq4#kyGV3nK{}Sd!G-YkKkw9O@Wr4nIe^JZts4Q)R$DQUmsfn4CGG)}XBX
z$X*dlHnR7LRxJ%i>Ny4L8E*1V10DP+pan5iMVsgP#510Xa66nX8){px^&5sUFX4(Pd(*9<(3<|^ucdHW*?vBH
zoY6uF+&kWNBUbQiNScq#*c3Hei*29#Cp{Ic4|GF7ABAwdb#ZiGJuP9+U2ixRNE4F>NIuehX#3>y0)xQ
zneM-VeIai~(YBhC?xtEwpoE*k$0?s}Rj~Zxc!+d{n8~k~z6)R88-M9`2L)1ZjZcHo
zJfPvn^Sp*zJbS}zE5Msr%*g{MPn5OyKPrV~!Bdy=eg7RiOqgZ{5V=ez;HhtV-*wQL$kuvA+Un-)`pH|m=Og9Rh3jhX3F3mgr^~qg%
zYTnW!>JqVAlbcnXJ7z|pGdWS9M#j503X>KGkz*7X;~Vyu^5BDI$}+rYBOHus<>0`;
z!9aQ?N8WS`0L=!gd>PA99D;nEKIRgk|7!%(JLHrdy4UeJ^tZxzNL|>LTcu_ma6
zd+R6wOih{#aDkI7I(;ACPBa+z$UqET2f!Sa13EW8_j_Ia6Mc`^Lv8?0k6
z*T#xQEc&FLh;s(%6Ms?c!F}SBuy*OC2n)6{`)a$(D=#_{ZI9aD2TqN3Ue^w?1JwFu
zeA7*3`UFSOqo|!~4a0zi3sD?UL!;}Y5%hYIP<0T7GKGD!{KCEduYZ)`$@Ox8Jz+fQ
zP8s07Kn~t4zx-s~`IDa_Z{n|Ec+cT#&1D%m=~T>258qlQ&$3?>e6CGNr?2;3&lNvl
z8`di=jmK<)1>r1DL;1Aw**j(Z<(JBh8|+;IzI7rbp2TczD+({40Y=pZf@Q4y!?ekz
zXOBEwHuz0Y(yy`y)$oNE%F4&^KNE3JB3c)JEsjmEzaeWGQa&(ClLfl3EM2U$ok%kc#iM2OaZW!69m0wIV2OmGYsEvSXnE3zCT?~zl7otD>gJ_
zb^^pFx*4Zb-Y>$DnOFr@E?@{P$0%s0fBYj~%Wt6E%77Xt$SPCF%HM8u)KpCjb3!Hus0Wm}ING47p7do@`XG0@E;hu12`Z4*svp
z?JD29q*H}x6pfVKrFpY86io-H-~CtvKKKCRh8v*?{NUI^#iK>w;s>rNVOsfZI(Z$~
zG$e~3Lpj^WoIsl~m%iOg0a@R=s}@n#uSzGvBIK-JY(i}wxGWEbkFuFLiH7uYc2|WFpJQ9(q+yGSk
z+W}pYXA1{>$XfjidNZWU$NPT@7h^7>O0SSq4^iaOWXyE;&JIO{NY
zQocYDwebyR{|=P-^Uc+E4(ygo^Dd$m6oLr&Ozue@G1>;pb7%}O?c`k+k|i|Es>W;k
z%i!)i%izcz+I(4zjmgW-JIaF^XQytIszdir_t){GXX5IO06((zL_1UXGZ}OX&
z^hpJGEKYI?*}uQU8sKdd6+bdaVHn|we466Je^J^1v?etlaj!6yK?zA_X5n*1L0nSS
zMD3v>qJvrlMR}0NMW_Y{xu#E%z2)9b4pKBX_w<0xduOg5(|SeO!YZ`7A^GdCm%-`N`M4v2
ztcy9pQ(j@~*{p}FN`_X{dTS4sjdDgu#$;@rGN@?fQYLraP=-g2aoXKs6q_ia>8m{E
zJPaXi^5aRm0M4qHe;1v(^mlnhfXSBb+Mz(&igjk)S)qF8b(k6^yarU|RP7N~6s-1_
z@Xm-sDONa?VTzU13Ws56U2Wg$SV0K2&%h@y!61Q}jFTOgK8}dD2QKfIngUiqU{Vj<
ztG{Pb!#qWAI^vYu<7{Hi@6-V6X(DSiDPvR_U`pyfY@t7%0IJnm`=Y9dLUtm6gsu#w
zD~aC_N5!V@cx*xms7r8Z<8QTH2Ug4N537hW7jhKQCan4giJsxSkM9A?`*~4dsfao+
zGF=~$>V%>;rYUCoQAB-vdT9}LEmyCSm?~|z&5|HL)A=((urqf+nT{ZX#&-JC{YT66
zfd?_IWj3Lbz|n-03W4>nQu>7+w(+7fu=^9R^^&;6_=zZ66D*$=DUc4?N(hoF|`D#3WX$K;8F)L
zIhlzdO~vC+{C-KcKYOVViB>BI{8clP~=V?d9+N~h}R>IGx%2F24*1#sMop>
zN-f9s0n7I1pGD{jMyN#w_e?5!nH(5W#`oSYYp=cvaj}qKGOE%=xnn7Q09&~aW=pp!P~Gk^sbtU3J>
z8wH_?9FWRa&OIz0_~_%Z_QH$dRc$!rsS3>7W(%quW+vd{C47mW`Y-I6H~!E6EaLrx7P1#pz{np#iIcZHK&Q%c=Fy=pZ
z7P=$7aK|hB5sK2`C!dxT_VjY#9-@ns#BaAbsPpuMPvHY;Vj1Vl@vJ9kyYVFZdEI|+
zmSts-E{Z{1q{N{80````|c<
zcEfpT>~yBm!RP818c)@2dFX+c>E80{S$gj-_z=)#s{5O{seUGx@X-{jr-{l%HXmoh
zF-ygEPo{!5saJgw51S=xpnGmTrycG|3{8T>4)2#iyOIKml3MXQpr+kqjN`Inq!w;lsPZ`uE(^%g%UOOu*V}RTRDc2j8%iB*-
z!1~5Tj7wi1A^@#x{MMtgQa}62uK(ttGG)oGOLSe@J71PfAP*|ON*#$r}{QAZPGXL+|d3!k3oPPME((+b`Eyx4x-t+
zWb(iRWp>wH?74DN1Z$FI6eyr7_~)P^al6>{efQ5}#Itkg);Pp1kZi_bmBik&f>nlw}*U+N^y@ByF2Vxs@$ze_=JG5X?5
zp0V6OA?30S6$fzu=!42|AO7qVkJ+buoabq9TAVD)BSPCM?P*VhmACt^V!r
zW%T)HIpu2wrBzqJo7PnQZnC+fUK+Q9A4}2LyngzdN8xMu`^A4?3FFC7#2|4L5+vLa
zPUB@UjiN|vDE8Xe`2AC`6sH9Gfxv_qdOm3Ln?sO^?kfj@bp3|V87^YYifaAMU7
zsNsPERr%}vm$<+W=huvFMxL1JGQ|nMF%!xtW65SW^6^iVU5=7JR9uF;EFxufX_3kq
z-^otB-MXZG^!3+e@Zw9Qe8+O+HI{t}A``E(>70p6t1ls66(^5aH)gI-Z*{3}prs09
z1+D$cjW?Ha|NW&LK3Fym-a?C^?8@yd)u)US2_|=mY3Flc%9r(?90)nL`}r8>PP=@w
zJ18LEbhlWa@|ieYt0%<9i~zjYukRDeWF;lJNeyj%k=ic^}|Fe%5jm&ymu&p
zRM|n03>NQ15%n+|man4(icDg@YMS))vHE4)Sd&Fg+Xr20=eUBAB1Xy^<=}&Nl^btA
zm~9v=K+F14XZfpzw^T&^N~%6$qRD)Pw#&0Vf9sPn#v*FDH18T^0_rhU+B*X7*^2=w
zIgKR%Ci8ACe(=_^!hRzgtC-F5<$lVun+ax#lpVO~61e
zNn6J;aZO?x(u%Jx6I1SeVw=E)%elfAqFi=wEi(8@$gQ;y1-B;i15RTbe!-+c#i9xp
zwI)%tNF&PI2|(QW_;VZPp-7{Pew8!IGv^&Dk=P2HsSV=_@1wi9lA1aTs>HaE{o_~K+Mt}WV{gUf@^0bU|oD;UgMFfR!YPB+S69exyq#gZO)V&Sj|bc;XHO;Ho{$DQuNB%1uPbk`0A6gg=mVXg(dQ;!6O
zSr)@v#Ds56Y~9;$q}?I2(|@qcU#qCmr=PK>AL9jnE`N_=LZOJ#$}VQ^I{y$>dmIA%
z?^(?wE0qFZ-ktVJh$q?xgO!I;Xj?@fo+(pf=zlQMN#`|Ufw
zMG^J+zA{k&hso+))sS`T*kE4wwVErCOLnb{C6C*m-Eh~za?AaGWOVVlrL3;@$(xz(
zhVj}aHrI}CsffCE>gpF^s(6^Up7>|w(>FgV6E-p(A@CjUtNp#&PV0!}9#K2gf|3sj
zm|I2w_!Yp;wj3B^4x;s{rm;@o$G5O~D5u#B_$sk+>VHtk@dG-Ku
zzY&*LIptx$%2+}dX~o@$syYbi(1a1oa}0j5;IH{4(M
z_xQWvZaqMOO3V6?3BeEr(NOCmtV3K%5rQ{_Q_c|Y=SyIjE1hfHSPM~yE_Z^G!y>M8{Lg{V99%0`w=j^`YjLIhVop4u
zcy)i5$>BT7?CIyqI{OE?l*2()qb^_gSx(0T)66=$^j9d+RAu
zqg1a;wx{>qR|*#6WB1jhkEqM{kt|dKN#^~9S=x8s9!1oC#(~teOY8F)$qzi0Ph#DU
zw?5VTg`j&rapg?mEC2W1c0;-K0ZzyD<03C&Wq&?EmT}ID0!u~Id6DV*h?L{B5zPt#
zmq2{>=Er3tiYUS&K5TYZ*DV!MJJY`l#R$Q9lt}QlghlHogys!5m2x|KIXrNroY{-=
zi7K6G;!Nl4i4?jlo3Nv|CniF^FPPR&0khZ@djDozkoe2Xk^&b(0mp%1FBsBktZb&t
zk=N>%_@)>_@uY%b^>dc$z58w%oIG9D*=uEZdc!#`3JuaZ^f0MEodePgb^^`Eyo=-_
zj*6ftri{v;{~3@57kNA}g;dkVcOjQr4oAptq^Tm<#bIWY_G9i0lqUyS*7Dom%um&e
zLc~!q@v^+7Sw}cAb)chLoVaRPWVr9I=;Sq+?0m75i`Gs9Dn?ln<+k<6Mze$G|C)OA
zYqhS{3n>@qo)