From bf57bfa43b1f56a5dd15b3884afa812b7c33491a Mon Sep 17 00:00:00 2001 From: bit-cook Date: Sun, 30 Aug 2026 20:21:39 +0000 Subject: [PATCH 1/2] fix: close core security audit blockers --- .github/workflows/release.yml | 31 +++-- core/agent.py | 165 ++++++++++++++++++++++++--- core/menu.py | 88 ++++++++++---- install.sh | 17 ++- scripts/build-offline.ps1 | 5 +- scripts/build-offline.sh | 8 +- scripts/install-offline.ps1 | 50 +++++--- scripts/install-offline.sh | 16 ++- scripts/install.ps1 | 47 ++++++-- scripts/tools/seed_uv_generic.py | 6 + scripts/tools/stage_application.py | 42 +++++++ tests/test_command_safety.py | 26 ++++- tests/test_install_tracking.py | 14 +++ tests/test_installer_transactions.py | 11 ++ tests/test_network_stream_safety.py | 79 +++++++++++++ tests/test_offline_manifest.py | 2 +- tests/test_release_staging.py | 31 +++++ tests/test_release_workflow.py | 4 + tests/test_runtime_platforms.py | 5 + tests/test_uninstall.py | 52 +++++++++ 20 files changed, 606 insertions(+), 93 deletions(-) create mode 100644 scripts/tools/stage_application.py create mode 100644 tests/test_network_stream_safety.py create mode 100644 tests/test_release_staging.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 27be60f..db0a6d6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,13 +8,15 @@ on: workflow_dispatch: permissions: - contents: write + contents: read jobs: validate: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Validate tag and version shell: bash run: | @@ -27,14 +29,16 @@ jobs: online: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Build online packages run: | cp install.sh pages/install.sh cp scripts/install.ps1 pages/install.ps1 python3 scripts/build-online.py cp install.sh scripts/install.ps1 VERSION pages/ - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: online path: | @@ -46,7 +50,9 @@ jobs: offline-linux: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Build verified Codex offline package run: AGENTS=codex PLATFORMS=linux-x64 TAG="v$(cat VERSION)" sh scripts/build-offline.sh - name: Smoke install, execute, and uninstall @@ -63,7 +69,7 @@ jobs: test ! -e "$root/home/.agentboot/agents/codex" mv "dist/AgentBoot-offline-${tag}-linux-x64.tar.gz" "dist/AgentBoot-offline-${tag}-linux-x64-codex.tar.gz" mv "dist/AgentBoot-offline-${tag}-linux-x64-sfx.sh" "dist/AgentBoot-offline-${tag}-linux-x64-codex-sfx.sh" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: offline-linux path: dist/AgentBoot-offline-*-linux-x64-codex* @@ -71,7 +77,9 @@ jobs: offline-windows: runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Build verified Codex offline package shell: powershell run: .\scripts\build-offline.ps1 -Tag ('v' + (Get-Content VERSION -Raw).Trim()) -Platforms win-x64 -Agents codex @@ -93,7 +101,7 @@ jobs: python "$env:LOCALAPPDATA\AgentBoot\app\core\menu.py" uninstall codex if (Test-Path "$smokeHome\.agentboot\agents\codex") { throw 'Codex payload not removed' } Move-Item "dist\AgentBoot-offline-$tag-win-x64.zip" "dist\AgentBoot-offline-$tag-win-x64-codex.zip" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: offline-windows path: dist/AgentBoot-offline-*-win-x64-codex.zip @@ -102,8 +110,13 @@ jobs: needs: [validate, online, offline-linux, offline-windows] if: github.ref_type == 'tag' runs-on: ubuntu-latest + permissions: + contents: write steps: - - uses: actions/download-artifact@v4 + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: path: release merge-multiple: true diff --git a/core/agent.py b/core/agent.py index 2db8226..3ff4166 100644 --- a/core/agent.py +++ b/core/agent.py @@ -11,9 +11,11 @@ * 工具:run_cmd / read_file / write_file / edit_file / list_dir / linux_help / http_get """ import json +import ipaddress import os import re import shlex +import socket import sys import time @@ -143,10 +145,31 @@ def _split_base(base_url): if not u.endswith("/v1"): u += "/v1" s = urlsplit(u) + if s.scheme not in ("http", "https"): + raise ApiError("模型接口仅支持 https;本地无密钥模型可使用回环 http。") + if not s.hostname: + raise ApiError("模型接口地址缺少主机名。") port = s.port or (443 if s.scheme == "https" else 80) return s.scheme, s.hostname, port, (s.path or "") + "/chat/completions" +def _is_literal_loopback(host): + if str(host or "").lower() == "localhost": + return True + try: + return ipaddress.ip_address(str(host).strip("[]")).is_loopback + except ValueError: + return False + + +def _validate_model_transport(scheme, host, api_key): + if scheme == "https": + return + if scheme == "http" and _is_literal_loopback(host) and not api_key: + return + raise ApiError("拒绝不安全的模型接口:仅允许 HTTPS,或无 API Key 的 localhost/回环 HTTP。") + + # 连接池:复用 TLS 连接,砍掉每轮对话的握手开销(极限性能核心) _POOL = {} @@ -163,8 +186,10 @@ def _connect(scheme, host, port, timeout=180): if os.environ.get("AGENTBOOT_INSECURE") == "1": ctx = ssl._create_unverified_context() conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=ctx) - else: + elif scheme == "http": conn = http.client.HTTPConnection(host, port, timeout=timeout) + else: + raise ApiError("不支持的模型接口协议:%s" % scheme) _POOL[key] = conn return conn @@ -188,6 +213,7 @@ def chat(cfg, messages, stream_cb=None, tools=None, max_tokens=None, temperature scheme, host, port, path = _split_base(p.get("base_url", "")) if not host: raise ApiError("模型接口地址为空,请先运行 `ab model` 或在菜单里配置模型。") + _validate_model_transport(scheme, host, p.get("api_key")) body = {"model": p.get("model"), "messages": messages, "temperature": temperature} if tools: @@ -230,6 +256,13 @@ def chat(cfg, messages, stream_cb=None, tools=None, max_tokens=None, temperature msg = choice.get("message") or {} return msg.get("content") or "", msg.get("tool_calls") or [] return _read_stream(resp, stream_cb, conn, scheme, host, port) + except StreamInterrupted as e: + last_err = e + _drop_pool(scheme, host, port) + if attempt < 2: + time.sleep(1 + attempt) + continue + raise ApiError("模型流在完成前中断,请重试。") except ApiError: raise except Exception as e: # 网络类错误:连接可能已坏,弃用后重建重试 @@ -243,6 +276,8 @@ def chat(cfg, messages, stream_cb=None, tools=None, max_tokens=None, temperature def _read_stream(resp, stream_cb, conn, scheme, host, port): content_parts = [] tool_calls = {} + terminal = False + malformed = False def flush_tc(): out = [] @@ -265,12 +300,16 @@ def flush_tc(): continue data = line[5:].strip() if data == "[DONE]": + terminal = True break try: obj = json.loads(data) except Exception: - continue + malformed = True + break for choice in obj.get("choices") or []: + if choice.get("finish_reason") is not None: + terminal = True delta = choice.get("delta") or {} piece = delta.get("content") if piece: @@ -294,10 +333,25 @@ def flush_tc(): partial = "".join(content_parts) _drop_pool(scheme, host, port) if partial: - return partial, flush_tc() # 尽力而为:返回已收到的部分内容 + raise ApiError("模型流中断(已收到部分文本,未执行任何工具)。") + raise StreamInterrupted("") + if malformed: + _drop_pool(scheme, host, port) + raise ApiError("模型流包含无效 JSON,已拒绝处理。") + if not terminal: + _drop_pool(scheme, host, port) + if content_parts: + raise ApiError("模型流在完成前中断(已收到部分文本,未执行任何工具)。") raise StreamInterrupted("") content = "".join(content_parts) tcs = flush_tc() + for tc in tcs: + try: + parsed = json.loads(tc["function"]["arguments"] or "{}") + except (TypeError, ValueError): + raise ApiError("模型返回了不完整的工具参数 JSON,已拒绝执行。") + if not tc["function"]["name"] or not isinstance(parsed, dict): + raise ApiError("模型返回了无效的工具参数,已拒绝执行。") if not content and not tcs: raise ApiError("模型返回为空(流式)。") return content, tcs @@ -510,7 +564,7 @@ def linux_help(query): "journalctl", "dmesg", "man", "apropos", "top", "vmstat", "iostat", "sar", "netstat", "getenforce", "sestatus", # Windows 常见只读命令 - "dir", "type", "ipconfig", "systeminfo", "tasklist", "ver", "whoami", + "ipconfig", "systeminfo", "tasklist", "whoami", "netstat", "where", "driverquery", "hostname", } @@ -555,11 +609,13 @@ def _simple_command_level(segment): words.pop(0) if not words: return "normal" - first = os.path.basename(words[0]).lower() + if os.path.basename(words[0]) != words[0] or "/" in words[0] or "\\" in words[0]: + return "normal" + first = words[0].lower() args = [str(word).lower() for word in words[1:]] if first in ("sh", "bash", "zsh", "dash", "cmd", "powershell", "pwsh", "env"): return "normal" - if first == "find" and any(arg in ("-delete", "-exec", "-execdir", "-ok", "-okdir") for arg in args): + if first == "find" and any(arg == "-delete" or arg.startswith(("-exec", "-ok", "-fprint", "-fls")) for arg in args): return "normal" if first in MUTATING_FLAGS: for arg in words[1:]: @@ -583,11 +639,52 @@ def classify_cmd(cmd): for pat in DANGER_RE: if re.search(pat, c, re.IGNORECASE): return "danger" - if re.search(r"`|\$\(|\$\(\(|[<>]\(|\$\{|(^|[^<])>{1,2}|\btee\b", c): + if re.search(r"[;&|<>\r\n]|`|\$\(|\$\(\(|\$\{|\btee\b", c): return "normal" - segments = [part.strip() for part in re.split(r"(?:&&|\|\||[;|\n])", c) if part.strip()] - levels = [_simple_command_level(segment) for segment in segments] - return "safe" if levels and all(level == "safe" for level in levels) else "normal" + return _simple_command_level(c) + + +def _trusted_executable(name): + """Resolve a bare allowlisted command from OS-owned directories only.""" + import shutil + if not name or os.path.basename(name) != name or "/" in name or "\\" in name: + return None + if os.name == "nt": + root = os.environ.get("SystemRoot", r"C:\Windows") + search = [os.path.join(root, "System32"), root] + else: + search = ["/usr/bin", "/bin", "/usr/sbin", "/sbin"] + path = shutil.which(name, path=os.pathsep.join(search)) + return os.path.realpath(path) if path else None + + +def safe_command_argv(cmd): + if classify_cmd(cmd) != "safe": + return None + try: + words = shlex.split(cmd, posix=os.name != "nt") + except ValueError: + return None + if not words: + return None + executable = _trusted_executable(words[0]) + return [executable] + words[1:] if executable else None + + +def run_safe_cmd(cmd, timeout=60): + import subprocess + argv = safe_command_argv(cmd) + if not argv: + return "exit=126\n拒绝执行无法从可信系统目录解析的只读命令。" + timeout = min(max(int(timeout or 60), 5), 300) + try: + result = subprocess.run(argv, capture_output=True, text=True, errors="replace", timeout=timeout) + output = ((result.stdout or "") + (("\n[stderr] " + result.stderr) if result.stderr.strip() else "")).strip() + return "exit=%d\n%s" % (result.returncode, output[:8000] or "(无输出)") + except subprocess.TimeoutExpired: + return "exit=124\n(只读命令超时 %ss,已终止)" % timeout + except OSError as error: + return "exit=126\n启动只读命令失败:%s" % error def run_cmd(cmd, timeout=60): @@ -718,20 +815,44 @@ def search_files(pattern, path=".", regex=False, max_results=40): return "\n".join(out) if out else "(无匹配)" +def _validate_public_http_url(url): + from urllib.parse import urlsplit + parsed = urlsplit(url or "") + if parsed.scheme not in ("http", "https") or not parsed.hostname or parsed.username or parsed.password: + raise ValueError("仅支持不含凭据的 http/https 公网地址") + try: + addresses = socket.getaddrinfo(parsed.hostname, parsed.port or (443 if parsed.scheme == "https" else 80), + type=socket.SOCK_STREAM) + except OSError as error: + raise ValueError("域名解析失败:%s" % error) + if not addresses: + raise ValueError("域名没有可用地址") + for item in addresses: + address = ipaddress.ip_address(item[4][0]) + if not address.is_global: + raise ValueError("拒绝访问非公网地址:%s" % address) + return parsed + + def http_get(url): - if not re.match(r"^https?://", url or ""): - return "错误:仅支持 http/https 地址" try: - from urllib.request import Request, urlopen + from urllib.request import Request, build_opener, HTTPRedirectHandler + _validate_public_http_url(url) + + class SafeRedirect(HTTPRedirectHandler): + def redirect_request(self, req, fp, code, msg, headers, newurl): + _validate_public_http_url(newurl) + return HTTPRedirectHandler.redirect_request(self, req, fp, code, msg, headers, newurl) + req = Request(url, headers={"User-Agent": "AgentBoot/1.0"}) - with urlopen(req, timeout=15) as r: + with build_opener(SafeRedirect()).open(req, timeout=15) as r: data = r.read(300000) text = data.decode("utf-8", "replace") if len(data) >= 299000: text += "\n…(已截断)" return text if text.strip() else "(空响应)" except Exception as e: - return "抓取失败:%s" % e + return "抓取失败或已拒绝:%s" % e # ---------------------------------------------------------------- 工具 schema(OpenAI 格式) @@ -761,7 +882,9 @@ def execute_tool(cfg, name, args, session_allow): if name == "run_cmd": cmd = args.get("command", "") level = classify_cmd(cmd) - policy = cfg.get("confirm", "smart") + policy = str(cfg.get("confirm", "smart")).strip().lower() + if policy not in ("safe", "smart", "always"): + policy = "smart" if policy == "safe" and level != "safe": return "safe 模式只允许只读命令,已拒绝:%s" % cmd, level == "danger" if level == "danger" and policy != "always" and cmd not in session_allow: @@ -776,11 +899,15 @@ def execute_tool(cfg, name, args, session_allow): return "用户拒绝了该命令。", False else: return "非交互模式无法确认写操作,已拒绝;如需自动执行请设置 confirm=always。", False + if level == "safe": + return run_safe_cmd(cmd, args.get("timeout")), False return run_cmd(cmd, args.get("timeout")), level == "danger" if name == "read_file": return read_file(args.get("path", "")), False if name == "write_file": - policy = cfg.get("confirm", "smart") + policy = str(cfg.get("confirm", "smart")).strip().lower() + if policy not in ("safe", "smart", "always"): + policy = "smart" key = "write_file:%s" % args.get("path", "") if policy == "safe": return "safe 模式只允许只读工具,已拒绝写入文件。", False @@ -795,7 +922,9 @@ def execute_tool(cfg, name, args, session_allow): return "用户拒绝了文件写入。", False return write_file(args.get("path", ""), args.get("content", "")), False if name == "edit_file": - policy = cfg.get("confirm", "smart") + policy = str(cfg.get("confirm", "smart")).strip().lower() + if policy not in ("safe", "smart", "always"): + policy = "smart" key = "edit_file:%s" % args.get("path", "") if policy == "safe": return "safe 模式只允许只读工具,已拒绝修改文件。", False diff --git a/core/menu.py b/core/menu.py index 05c2517..a13336c 100644 --- a/core/menu.py +++ b/core/menu.py @@ -524,6 +524,31 @@ def _remove_path(path): os.remove(path) +def _safe_extract_tar(archive, destination): + """Extract after rejecting traversal, device nodes, and escaping links.""" + import tarfile + root = os.path.realpath(destination) + os.makedirs(root, exist_ok=True) + for member in archive.getmembers(): + target = os.path.realpath(os.path.join(root, member.name)) + if not _inside(target, root): + raise ValueError("tar 成员越界:%s" % member.name) + if member.isdev() or member.isfifo(): + raise ValueError("tar 包含设备或管道:%s" % member.name) + if member.issym(): + link_target = os.path.realpath(os.path.join(os.path.dirname(target), member.linkname)) + if not _inside(link_target, root): + raise ValueError("tar 符号链接越界:%s" % member.name) + elif member.islnk(): + link_target = os.path.realpath(os.path.join(root, member.linkname)) + if not _inside(link_target, root): + raise ValueError("tar 硬链接越界:%s" % member.name) + if hasattr(tarfile, "data_filter"): + archive.extractall(root, filter="data") + else: + archive.extractall(root) + + def _remove_owned_shims(a, entry): candidates = [entry.get("executable")] suffix = "" if POSIX else ".cmd" @@ -550,9 +575,13 @@ def _remove_coco(purge=False): root = os.path.expanduser("~/.coco") if not os.path.exists(root): return + if os.path.islink(root) or not _inside(os.path.realpath(root), os.path.realpath(os.path.expanduser("~"))): + raise OSError("拒绝删除符号链接或用户目录之外的 CoCo 路径:%s" % root) if purge: shutil.rmtree(root) return + if not any(os.path.exists(os.path.join(root, name)) for name in ("bin", "runtime", "resources")): + raise OSError("CoCo 程序目录缺少预期结构,拒绝自动删除:%s" % root) # CoCo 的 agent/ 内含会话、认证与用户设置;默认只移除程序文件。 for name in os.listdir(root): if name == "agent": @@ -1048,8 +1077,13 @@ def coco_offline_install(a, payload): if not (os.path.exists(tgz) and os.path.exists(side) and os.path.exists(key_file)): log_err("CoCo 离线载荷不完整(缺 coco-0.8.0.tgz / .sha256 / agnes.key)") return False - expected = open(side, "r", encoding="utf-8").read().split()[0].lower() - h = hashlib.sha256(open(tgz, "rb").read()).hexdigest() + with open(side, "r", encoding="utf-8") as source: + expected = source.read().split()[0].lower() + hasher = hashlib.sha256() + with open(tgz, "rb") as source: + for chunk in iter(lambda: source.read(1 << 20), b""): + hasher.update(chunk) + h = hasher.hexdigest() if h != expected: log_err("CoCo 发行包 SHA-256 校验失败") return False @@ -1070,6 +1104,7 @@ def _node_ok(p): return False node_bin = shutil.which("node") + node_archive = None if node_bin and _node_ok(node_bin): log_ok("使用系统 Node") else: @@ -1078,17 +1113,7 @@ def _node_ok(p): if not ntgz: log_err("系统 Node 过旧且载荷无内置 Node 运行时") return False - runtime = os.path.join(install_dir, "runtime") - if os.path.isdir(runtime): - shutil.rmtree(runtime, ignore_errors=True) - os.makedirs(runtime, exist_ok=True) - with tarfile.open(ntgz, "r:gz") as t: - t.extractall(runtime, filter="tar") - inner = os.listdir(runtime)[0] - os.replace(os.path.join(runtime, inner), os.path.join(runtime, "node")) - node_bin = os.path.join(runtime, "node", "bin", "node") - os.chmod(node_bin, 0o755) - log_ok("使用载荷内置 Node:%s" % node_bin) + node_archive = ntgz # 备份用户 agent 配置 → 换新发行包 → 还原配置 agent_dir = os.path.join(install_dir, "agent") @@ -1106,7 +1131,7 @@ def _node_ok(p): shutil.rmtree(extract) os.makedirs(extract, exist_ok=True) with tarfile.open(tgz, "r:gz") as t: - t.extractall(extract, filter="tar") + _safe_extract_tar(t, extract) try: os.replace(os.path.join(extract, "package"), install_dir) shutil.rmtree(extract, ignore_errors=True) @@ -1120,6 +1145,22 @@ def _node_ok(p): os.makedirs(os.path.join(agent_dir, "sessions"), exist_ok=True) os.makedirs(os.path.join(agent_dir, "languages"), exist_ok=True) + if node_archive: + runtime = os.path.join(install_dir, "runtime") + shutil.rmtree(runtime, ignore_errors=True) + os.makedirs(runtime, exist_ok=True) + with tarfile.open(node_archive, "r:gz") as archive: + _safe_extract_tar(archive, runtime) + children = [name for name in os.listdir(runtime) if name != "node"] + if len(children) != 1 or not os.path.isdir(os.path.join(runtime, children[0])): + raise ValueError("CoCo Node 载荷结构无效") + os.replace(os.path.join(runtime, children[0]), os.path.join(runtime, "node")) + node_bin = os.path.join(runtime, "node", "bin", "node") + if not os.path.isfile(node_bin): + raise ValueError("CoCo Node 入口缺失") + os.chmod(node_bin, 0o755) + log_ok("使用载荷内置 Node:%s" % node_bin) + # 写配置:models 骨架 + Agnes 密钥 + 默认设置 registry_path = os.path.join(install_dir, "resources", "provider-registry.v1.json") providers = {} @@ -1137,7 +1178,8 @@ def _write_json(path, obj): _write_json(models_path, {"providers": providers}) auth_path = os.path.join(agent_dir, "auth.json") if not os.path.exists(auth_path): - agnes_key = open(key_file, "r", encoding="utf-8").read().strip() + with open(key_file, "r", encoding="utf-8") as source: + agnes_key = source.read().strip() _write_json(auth_path, {"agnes": {"type": "api_key", "key": agnes_key}}) settings_path = os.path.join(agent_dir, "settings.json") if not os.path.exists(settings_path): @@ -1399,9 +1441,10 @@ def ensure_path_registered(): if POSIX: block_begin = "# >>> agentboot >>>" block_end = "# <<< agentboot <<<" + npm_bin = os.path.join(NPM_PREFIX, "bin") block = "\n".join([block_begin, '# AgentBoot 添加的 PATH', - 'for _d in "$HOME/.agentboot/bin" "$HOME/.local/bin" "%s"; do' % NPM_PREFIX, + 'for _d in "$HOME/.agentboot/bin" "$HOME/.local/bin" "%s"; do' % npm_bin, ' [ -d "$_d" ] && case ":$PATH:" in *":$_d:"*) ;; *) export PATH="$_d:$PATH";; esac', 'done', 'unset _d', @@ -1413,10 +1456,15 @@ def ensure_path_registered(): if os.path.exists(rc): with open(rc, "r", encoding="utf-8") as f: content = f.read() - if block_begin in content: - continue - with open(rc, "a", encoding="utf-8") as f: - f.write("\n" + block) + if block_begin in content and block_end in content: + before, rest = content.split(block_begin, 1) + _old, after = rest.split(block_end, 1) + updated = before.rstrip("\n") + "\n" + block + after.lstrip("\n") + with open(rc, "w", encoding="utf-8") as f: + f.write(updated) + else: + with open(rc, "a", encoding="utf-8") as f: + f.write("\n" + block) except Exception: pass else: diff --git a/install.sh b/install.sh index 5f9125e..3c49303 100755 --- a/install.sh +++ b/install.sh @@ -61,7 +61,11 @@ step "AgentBoot 在线安装 ${TAG} · $(uname -s) $(uname -m)" # 在替换 app 前先保护用户已有的同名命令,避免应用已升级但 launcher 更新失败。 for launcher in "${BIN_DIR}/agentboot" "${BIN_DIR}/ab"; do - if [ -e "$launcher" ] && ! grep -q "AgentBoot" "$launcher" 2>/dev/null; then + if [ -L "$launcher" ]; then + err "拒绝覆盖符号链接命令:$launcher" + exit 1 + fi + if [ -e "$launcher" ] && ! grep -q '^# AgentBoot ' "$launcher" 2>/dev/null; then err "拒绝覆盖不属于 AgentBoot 的命令:$launcher" exit 1 fi @@ -134,19 +138,24 @@ chmod +x "${APP_DIR}/install.sh" 2>/dev/null || true # ---------- 3. 生成命令行入口 ---------- step "创建命令:agentboot(控制台) / ab(内置 Agent)" mkdir -p "$BIN_DIR" -cat > "${BIN_DIR}/agentboot" < "$agentboot_tmp" < "${BIN_DIR}/ab" < "$ab_tmp" < [ "$actual" = "$expected" ] } -step "AgentBoot 离线包构建 $TAG · 平台:$PLATFORMS" - case "$(uname -s)-$(uname -m)" in Darwin-arm*) HOST_PLAT="darwin-arm64" ;; Darwin-*) HOST_PLAT="darwin-x64" ;; @@ -66,6 +64,7 @@ case "$(uname -s)-$(uname -m)" in *) HOST_PLAT="linux-x64" ;; esac PLATFORMS="${PLATFORMS:-$HOST_PLAT}" +step "AgentBoot 离线包构建 $TAG · 平台:$PLATFORMS" # ---------- 0. 确保 npm ---------- if ! command -v npm >/dev/null 2>&1; then @@ -93,10 +92,7 @@ ok "npm:$(command -v npm)" step '复制项目文件 …' rm -rf "$STAGE" mkdir -p "$STAGE" -(cd "$ROOT" && tar -cf - \ - --exclude='./.git' --exclude='./dist' --exclude='./payloads' \ - --exclude='./node_modules' --exclude='./__pycache__' --exclude='*.pyc' \ - .) | tar -xf - -C "$STAGE" +python3 "$ROOT/scripts/tools/stage_application.py" "$ROOT" "$STAGE" # ---------- 2. 各平台 Node 运行时 ---------- mkdir -p "$STAGE/payloads/node" diff --git a/scripts/install-offline.ps1 b/scripts/install-offline.ps1 index 8ee8b44..c242e18 100644 --- a/scripts/install-offline.ps1 +++ b/scripts/install-offline.ps1 @@ -44,6 +44,25 @@ function Expand-Pkg([string]$pkg, [string]$dest) { } catch { return $false } } +function Assert-ManagedLauncher([string]$path) { + if (-not (Test-Path -LiteralPath $path)) { return } + $item = Get-Item -LiteralPath $path -Force + if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { + throw "拒绝覆盖重解析点命令:$path" + } + if (-not (Select-String -LiteralPath $path -Pattern '^rem AgentBoot ' -Quiet)) { + throw "拒绝覆盖不属于 AgentBoot 的命令:$path" + } +} + +function Set-LauncherAtomic([string]$path, [string]$content) { + $tmp = "$path.new.$([guid]::NewGuid().ToString('N').Substring(0,8))" + try { + $content -replace '\r?\n', "`r`n" | Set-Content -LiteralPath $tmp -Encoding ASCII + Move-Item -LiteralPath $tmp -Destination $path -Force + } finally { Remove-Item -LiteralPath $tmp -Force -ErrorAction SilentlyContinue } +} + $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $LocalRoot = Join-Path $env:LOCALAPPDATA 'AgentBoot' $AppDir = Join-Path $LocalRoot 'app' @@ -54,9 +73,7 @@ Write-Step 'AgentBoot 离线安装(无需联网)' $launchers = @((Join-Path $BinDir 'agentboot.cmd'), (Join-Path $BinDir 'ab.cmd')) foreach ($launcher in $launchers) { - if ((Test-Path $launcher) -and -not (Select-String -Path $launcher -Pattern 'AgentBoot' -Quiet)) { - throw "拒绝覆盖不属于 AgentBoot 的命令:$launcher" - } + Assert-ManagedLauncher $launcher } # ---------- 1. 校验载荷 ---------- @@ -133,18 +150,25 @@ if ($pyExe) { Write-Ok "Python:$pyExe" } # ---------- 4. 命令入口 ---------- Write-Step '创建命令:agentboot(控制台) / ab(内置 Agent)' New-Item -ItemType Directory -Path $BinDir, (Join-Path $AbRoot 'bin') -Force | Out-Null -$pyRef = if ($pyExe) { $pyExe } else { 'python' } - -@" +$pyCommand = if ($pyExe -and ([IO.Path]::GetFileName($pyExe) -like 'py*')) { 'py' } else { 'python' } +$agentbootLauncher = @" @echo off rem AgentBoot 控制台 -"$pyRef" "$AppDir\core\menu.py" %* -"@ -replace '\r?\n', "`r`n" | Set-Content (Join-Path $BinDir 'agentboot.cmd') -Encoding ASCII -@" +set "AB_INSTALL=%~dp0.." +set "PYTHON=$pyCommand" +if exist "%AB_INSTALL%\runtime\python\python.exe" set "PYTHON=%AB_INSTALL%\runtime\python\python.exe" +"%PYTHON%" "%AB_INSTALL%\app\core\menu.py" %* +"@ +$abLauncher = @" @echo off rem AgentBoot 内置最小 Agent -"$pyRef" "$AppDir\core\agent.py" %* -"@ -replace '\r?\n', "`r`n" | Set-Content (Join-Path $BinDir 'ab.cmd') -Encoding ASCII +set "AB_INSTALL=%~dp0.." +set "PYTHON=$pyCommand" +if exist "%AB_INSTALL%\runtime\python\python.exe" set "PYTHON=%AB_INSTALL%\runtime\python\python.exe" +"%PYTHON%" "%AB_INSTALL%\app\core\agent.py" %* +"@ +Set-LauncherAtomic (Join-Path $BinDir 'agentboot.cmd') $agentbootLauncher +Set-LauncherAtomic (Join-Path $BinDir 'ab.cmd') $abLauncher Write-Ok "已写入 $BinDir" $userPath = [Environment]::GetEnvironmentVariable('Path', 'User') @@ -175,7 +199,7 @@ if (($All -or $Agents) -and $pyExe) { if ($ids) { Write-Step "离线安装:$($ids -join ' ')" $menuArgs = @($menu, 'offline', '--payload', $PayloadDir) + @($ids) - & $pyRef @menuArgs + & $pyExe @menuArgs if ($LASTEXITCODE -ne 0) { throw "Agent 离线安装失败(exit=$LASTEXITCODE)" } } } elseif (($All -or $Agents) -and -not $pyExe) { @@ -191,5 +215,5 @@ Write-Host ' 内置 Agent : ab (默认 Agnes 免费模型;联网 Write-Host ' 纯离线用模型:菜单[4] → 配置本地模型(Ollama / LM Studio)' Write-Host '==============================================' -ForegroundColor Cyan if (-not $All -and -not $Agents) { - if ($pyExe) { & $pyRef (Join-Path $AppDir 'core\menu.py') } + if ($pyExe) { & $pyExe (Join-Path $AppDir 'core\menu.py') } } diff --git a/scripts/install-offline.sh b/scripts/install-offline.sh index b03a915..d271a57 100755 --- a/scripts/install-offline.sh +++ b/scripts/install-offline.sh @@ -24,7 +24,10 @@ step() { printf '\n==> %s\n' "$*"; } step "AgentBoot 离线安装(无需联网)" for launcher in "${BIN_DIR}/agentboot" "${BIN_DIR}/ab"; do - if [ -e "$launcher" ] && ! grep -q "AgentBoot" "$launcher" 2>/dev/null; then + if [ -L "$launcher" ]; then + err "拒绝覆盖符号链接命令:$launcher"; exit 1 + fi + if [ -e "$launcher" ] && ! grep -q '^# AgentBoot ' "$launcher" 2>/dev/null; then err "拒绝覆盖不属于 AgentBoot 的命令:$launcher"; exit 1 fi done @@ -83,19 +86,24 @@ ok "Python:$PY" # ---------- 4. 命令入口 ---------- step "创建命令:agentboot(控制台) / ab(内置 Agent)" mkdir -p "$BIN_DIR" -cat > "${BIN_DIR}/agentboot" < "$agentboot_tmp" < "${BIN_DIR}/ab" < "$ab_tmp" < [目标平台] """ import json +import hashlib import os import re import sys @@ -75,6 +76,11 @@ def main(): else: raise SystemExit("uv download failed from all sources") + actual = hashlib.sha256(open(archive, "rb").read()).hexdigest() + if actual != sha.lower(): + os.remove(archive) + raise SystemExit("uv SHA-256 mismatch: expected %s, got %s" % (sha, actual)) + if asset.endswith(".zip"): data = zipfile.ZipFile(archive).read(member) else: diff --git a/scripts/tools/stage_application.py b/scripts/tools/stage_application.py new file mode 100644 index 0000000..55a68bf --- /dev/null +++ b/scripts/tools/stage_application.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +"""Copy the explicit AgentBoot application allowlist into a staging directory.""" + +from pathlib import Path +import shutil +import sys + + +FILES = ("VERSION", "LICENSE", "CHANGELOG.md", "README.md", "README.en.md", + "install.sh", "install.bat", "安装指南.md") +DIRECTORIES = ("agents", "core", "docs", "scripts", "tools") + + +def reject_symlinks(path): + if path.is_symlink(): + raise SystemExit("release source contains symlink: %s" % path) + if path.is_dir(): + for child in path.iterdir(): + reject_symlinks(child) + + +def main(): + source = Path(sys.argv[1]).resolve() + destination = Path(sys.argv[2]).resolve() + destination.mkdir(parents=True, exist_ok=True) + for name in FILES: + path = source / name + if not path.is_file() or path.is_symlink(): + raise SystemExit("missing or unsafe release file: %s" % path) + shutil.copy2(path, destination / name) + for name in DIRECTORIES: + path = source / name + if not path.is_dir(): + raise SystemExit("missing release directory: %s" % path) + reject_symlinks(path) + shutil.copytree(path, destination / name, dirs_exist_ok=True, + ignore=shutil.ignore_patterns("__pycache__", "*.pyc", "node_modules", "dist", "payloads")) + print("staged explicit application allowlist:", destination) + + +if __name__ == "__main__": + main() diff --git a/tests/test_command_safety.py b/tests/test_command_safety.py index 94f5116..0d8f608 100644 --- a/tests/test_command_safety.py +++ b/tests/test_command_safety.py @@ -14,8 +14,8 @@ class CommandClassificationTests(unittest.TestCase): - def test_all_read_only_chain_is_safe(self): - self.assertEqual(agent.classify_cmd("pwd && ls -la | head -n 5"), "safe") + def test_shell_chains_are_never_safe(self): + self.assertEqual(agent.classify_cmd("pwd && ls -la | head -n 5"), "normal") def test_mutating_command_after_safe_prefix_is_not_safe(self): self.assertEqual(agent.classify_cmd("echo ok; touch /tmp/agentboot-test"), "normal") @@ -56,10 +56,16 @@ def test_shell_expansion_and_process_substitution_are_not_safe(self): for command in commands: self.assertNotEqual(agent.classify_cmd(command), "safe", command) + def test_single_ampersand_redirection_find_writes_and_path_spoofing_are_not_safe(self): + commands = ("pwd & touch /tmp/x", "cat <> /tmp/x", "find /tmp -fprintf /tmp/x hi", + "/tmp/ls /tmp") + for command in commands: + self.assertNotEqual(agent.classify_cmd(command), "safe", command) + class ConfirmationPolicyTests(unittest.TestCase): def test_safe_mode_runs_read_only_command(self): - with mock.patch.object(agent, "run_cmd", return_value="ok") as run: + with mock.patch.object(agent, "run_safe_cmd", return_value="ok") as run: result, danger = agent.execute_tool( {"confirm": "safe"}, "run_cmd", {"command": "pwd"}, set()) self.assertEqual(result, "ok") @@ -104,6 +110,20 @@ def test_always_mode_allows_normal_command(self): self.assertEqual(result, "ok") run.assert_called_once() + def test_unknown_policy_fails_closed_to_smart(self): + with mock.patch.object(agent, "_is_interactive", return_value=False), \ + mock.patch.object(agent, "run_cmd") as run: + result, _danger = agent.execute_tool( + {"confirm": "typo"}, "run_cmd", {"command": "touch x"}, set()) + self.assertIn("非交互", result) + run.assert_not_called() + + def test_safe_command_uses_direct_argv_not_shell(self): + with mock.patch.object(agent, "_trusted_executable", return_value="/usr/bin/ls"), \ + mock.patch.object(agent.subprocess if hasattr(agent, "subprocess") else agent, "run", create=True): + parsed = agent.safe_command_argv("ls -la") + self.assertEqual(parsed, ["/usr/bin/ls", "-la"]) + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_install_tracking.py b/tests/test_install_tracking.py index 35c9230..9aafeb1 100644 --- a/tests/test_install_tracking.py +++ b/tests/test_install_tracking.py @@ -97,6 +97,20 @@ def test_windows_offline_shim_escapes_cmd_percent_variables(self): self.assertIn("%PATH%", shim) self.assertIn('"C:\\portable\\node.exe"', shim) + def test_posix_path_block_uses_npm_bin_and_upgrades_existing_block(self): + with tempfile.TemporaryDirectory() as tmp: + home = Path(tmp) + bashrc = home / ".bashrc" + bashrc.write_text("before\n# >>> agentboot >>>\nold\n# <<< agentboot <<<\nafter\n", encoding="utf-8") + with mock.patch.object(menu, "POSIX", True), \ + mock.patch.object(menu, "AB_HOME", str(home / ".agentboot")), \ + mock.patch.object(menu, "NPM_PREFIX", str(home / ".agentboot" / "npm-prefix")), \ + mock.patch.object(menu.os.path, "expanduser", side_effect=lambda p: str(home / p[2:]) if p.startswith("~/") else p): + menu.ensure_path_registered() + content = bashrc.read_text(encoding="utf-8") + self.assertIn("npm-prefix/bin", content) + self.assertNotIn("\nold\n", content) + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_installer_transactions.py b/tests/test_installer_transactions.py index 50eb633..f7479b7 100644 --- a/tests/test_installer_transactions.py +++ b/tests/test_installer_transactions.py @@ -39,6 +39,17 @@ def test_offline_installers_copy_version_source(self): text = (ROOT / relative).read_text(encoding="utf-8-sig") self.assertIn("VERSION", text, relative) + def test_launchers_reject_links_and_write_atomically(self): + for relative in ("install.sh", "scripts/install-offline.sh"): + text = (ROOT / relative).read_text(encoding="utf-8") + self.assertIn('[ -L "$launcher" ]', text, relative) + self.assertIn('.agentboot.new.', text, relative) + self.assertIn('mv -f "$agentboot_tmp"', text, relative) + for relative in ("scripts/install.ps1", "scripts/install-offline.ps1"): + text = (ROOT / relative).read_text(encoding="utf-8-sig") + self.assertIn("ReparsePoint", text, relative) + self.assertIn("Set-LauncherAtomic", text, relative) + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_network_stream_safety.py b/tests/test_network_stream_safety.py new file mode 100644 index 0000000..846d690 --- /dev/null +++ b/tests/test_network_stream_safety.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Model transport, SSE completeness, and HTTP SSRF security regressions.""" + +from pathlib import Path +import socket +import sys +import unittest +from unittest import mock + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) + +import agent # noqa: E402 + + +class FakeStream: + def __init__(self, lines): + self.lines = iter(lines) + + def readline(self): + return next(self.lines, b"") + + def read(self, *_args): + return b"" + + +class StreamSafetyTests(unittest.TestCase): + def test_clean_eof_without_terminal_frame_is_rejected(self): + response = FakeStream([b'data: {"choices":[{"delta":{"content":"partial"}}]}\n']) + with self.assertRaisesRegex(agent.ApiError, "中断"): + agent._read_stream(response, lambda _piece: None, None, "https", "example.com", 443) + + def test_partial_tool_call_is_never_returned(self): + response = FakeStream([b'data: {"choices":[{"delta":{"tool_calls":[{"index":0,"id":"x","function":{"name":"run_cmd","arguments":"{\\\"command\\\":"}}]}}]}\n']) + with self.assertRaises(agent.StreamInterrupted): + agent._read_stream(response, lambda _piece: None, None, "https", "example.com", 443) + + def test_malformed_sse_is_rejected(self): + response = FakeStream([b"data: {not-json}\n", b"data: [DONE]\n"]) + with self.assertRaisesRegex(agent.ApiError, "JSON"): + agent._read_stream(response, lambda _piece: None, None, "https", "example.com", 443) + + def test_complete_tool_arguments_must_be_valid_object_json(self): + response = FakeStream([ + b'data: {"choices":[{"delta":{"tool_calls":[{"index":0,"id":"x","function":{"name":"run_cmd","arguments":"[]"}}]}}]}\n', + b"data: [DONE]\n", + ]) + with self.assertRaisesRegex(agent.ApiError, "工具参数"): + agent._read_stream(response, lambda _piece: None, None, "https", "example.com", 443) + + +class NetworkBoundaryTests(unittest.TestCase): + def test_invalid_model_scheme_is_rejected(self): + with self.assertRaises(agent.ApiError): + agent._validate_model_transport("htps", "127.0.0.1", "secret") + + def test_http_model_with_key_is_rejected_even_on_loopback(self): + with self.assertRaises(agent.ApiError): + agent._validate_model_transport("http", "127.0.0.1", "secret") + + def test_keyless_loopback_http_model_is_allowed(self): + agent._validate_model_transport("http", "localhost", "") + + def test_http_get_rejects_loopback_without_opening(self): + with mock.patch("urllib.request.OpenerDirector.open") as opened: + result = agent.http_get("http://127.0.0.1:12345/internal") + self.assertIn("拒绝", result) + opened.assert_not_called() + + def test_public_url_validation_rejects_private_dns_resolution(self): + private = [(socket.AF_INET, socket.SOCK_STREAM, 6, "", ("10.0.0.8", 0))] + with mock.patch.object(agent.socket, "getaddrinfo", return_value=private), \ + self.assertRaisesRegex(ValueError, "非公网"): + agent._validate_public_http_url("https://internal.example/path") + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/tests/test_offline_manifest.py b/tests/test_offline_manifest.py index bfd319d..536e08f 100644 --- a/tests/test_offline_manifest.py +++ b/tests/test_offline_manifest.py @@ -37,7 +37,7 @@ def test_hash_manifest_is_generated_per_platform(self): def test_windows_installer_preserves_single_agent_as_argument(self): powershell = (ROOT / "scripts/install-offline.ps1").read_text(encoding="utf-8-sig") self.assertIn("$menuArgs = @($menu, 'offline', '--payload', $PayloadDir) + @($ids)", powershell) - self.assertIn("& $pyRef @menuArgs", powershell) + self.assertIn("& $pyExe @menuArgs", powershell) self.assertIn("Agent 离线安装失败", powershell) diff --git a/tests/test_release_staging.py b/tests/test_release_staging.py new file mode 100644 index 0000000..11bca5f --- /dev/null +++ b/tests/test_release_staging.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +"""Release staging excludes ambient and ignored workspace files.""" + +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest + + +ROOT = Path(__file__).resolve().parents[1] +STAGER = ROOT / "scripts" / "tools" / "stage_application.py" + + +class ReleaseStagingTests(unittest.TestCase): + def test_explicit_stage_excludes_workspace_artifacts(self): + with tempfile.TemporaryDirectory() as tmp: + stage = Path(tmp) / "stage" + subprocess.run([sys.executable, str(STAGER), str(ROOT), str(stage)], check=True) + self.assertTrue((stage / "core" / "agent.py").is_file()) + for relative in ("tests", "pages", ".github", "results.tsv", "run.log", ".env"): + self.assertFalse((stage / relative).exists(), relative) + + def test_builders_use_explicit_stager(self): + for relative in ("scripts/build-offline.sh", "scripts/build-offline.ps1"): + text = (ROOT / relative).read_text(encoding="utf-8-sig") + self.assertIn("stage_application.py", text, relative) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/tests/test_release_workflow.py b/tests/test_release_workflow.py index 6bed7fe..d35bb06 100644 --- a/tests/test_release_workflow.py +++ b/tests/test_release_workflow.py @@ -21,6 +21,10 @@ def test_release_supports_prerelease_dry_run_and_tag_only_publish(self): self.assertIn("needs: [validate, online, offline-linux, offline-windows]", text) self.assertIn("$smokeHome", text) self.assertNotIn("$home =", text) + self.assertIn("contents: read", text) + self.assertIn("contents: write", text) + self.assertIn("persist-credentials: false", text) + self.assertIn("actions/checkout@11d5960a326750d5838078e36cf38b85af677262", text) self.assertIn("install-offline.sh\" codex", text) self.assertIn("install-offline.ps1\" -Agents codex", text) diff --git a/tests/test_runtime_platforms.py b/tests/test_runtime_platforms.py index 866c1ba..9ab11ef 100644 --- a/tests/test_runtime_platforms.py +++ b/tests/test_runtime_platforms.py @@ -78,6 +78,11 @@ def test_online_uv_seed_verifies_downloaded_digest(self): self.assertIn("hashlib.sha256(open(archive", source) self.assertIn("uv SHA-256 校验失败", source) + def test_generic_uv_seeder_verifies_downloaded_digest(self): + source = (ROOT / "scripts/tools/seed_uv_generic.py").read_text(encoding="utf-8") + self.assertIn("hashlib.sha256", source) + self.assertIn("uv SHA-256 mismatch", source) + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_uninstall.py b/tests/test_uninstall.py index 6d65fd7..e0429e2 100644 --- a/tests/test_uninstall.py +++ b/tests/test_uninstall.py @@ -2,6 +2,7 @@ """Fixed acceptance tests for AgentBoot's Agent uninstall lifecycle.""" import contextlib +import hashlib import io import json import os @@ -10,6 +11,7 @@ import subprocess import sys import tempfile +import tarfile import unittest from unittest import mock @@ -165,6 +167,56 @@ def test_purge_removes_coco_user_data_after_explicit_request(self): self.assertTrue(ok) self.assertFalse(coco.exists()) + def test_coco_uninstall_refuses_symlinked_root(self): + target = self.home / "coco-target" + target.mkdir() + program = target / "bin" + program.mkdir() + (program / "coco").write_text("keep", encoding="utf-8") + (self.home / ".coco").symlink_to(target, target_is_directory=True) + with self.assertRaisesRegex(OSError, "符号链接"): + menu._remove_coco(False) + self.assertTrue((program / "coco").exists()) + + def test_coco_offline_private_node_survives_install_swap(self): + payload = self.home / "payload" + payload.mkdir() + tgz = payload / "coco-0.8.0.tgz" + with tarfile.open(tgz, "w:gz") as archive: + info = tarfile.TarInfo("package/bin/coco") + data = b"console.log('coco')\n" + info.size = len(data) + info.mode = 0o755 + archive.addfile(info, io.BytesIO(data)) + digest = hashlib.sha256(tgz.read_bytes()).hexdigest() + (payload / "coco-0.8.0.tgz.sha256").write_text(digest + "\n", encoding="ascii") + (payload / "agnes.key").write_text("test-key", encoding="ascii") + node_archive = payload / "node-v22.23.2-linux-x64.tar.gz" + with tarfile.open(node_archive, "w:gz") as archive: + info = tarfile.TarInfo("node-v22.23.2-linux-x64/bin/node") + data = b"#!/bin/sh\necho v22.23.2\n" + info.size = len(data) + info.mode = 0o755 + archive.addfile(info, io.BytesIO(data)) + agent = {"id": "coco", "name": "CoCo", "bin": "coco", "method": "script"} + with mock.patch.object(menu.shutil, "which", return_value=None): + self.assertTrue(menu.coco_offline_install(agent, str(payload))) + node = self.home / ".coco" / "runtime" / "node" / "bin" / "node" + self.assertTrue(node.is_file()) + shim = (self.bin_dir / "coco").read_text(encoding="utf-8") + self.assertIn(str(node), shim) + + def test_safe_tar_rejects_parent_traversal(self): + archive_path = self.home / "evil.tar.gz" + with tarfile.open(archive_path, "w:gz") as archive: + info = tarfile.TarInfo("../escaped") + data = b"bad" + info.size = len(data) + archive.addfile(info, io.BytesIO(data)) + with tarfile.open(archive_path, "r:gz") as archive, \ + self.assertRaisesRegex(ValueError, "越界"): + menu._safe_extract_tar(archive, str(self.home / "extract")) + def test_generic_script_install_refuses_unsafe_automatic_removal(self): agent = {"id": "custom-script", "name": "Custom", "bin": "custom", "method": "script", "script": "https://example.test/install.sh", "custom": True} From 689acfad764e6fafb54bbe83a3024f993ea82a02 Mon Sep 17 00:00:00 2001 From: bit-cook Date: Sun, 30 Aug 2026 21:06:53 +0000 Subject: [PATCH 2/2] fix: close reliability and compatibility audit --- .github/workflows/deploy-pages.yml | 14 +- .github/workflows/release.yml | 41 ++- CHANGELOG.md | 9 + README.en.md | 4 +- README.md | 6 +- agents/registry.json | 8 +- cloudflare/worker.js | 24 +- core/agent.py | 162 ++++++++-- core/i18n.py | 17 +- core/menu.py | 288 ++++++++++++++---- docs/en/install-guide.md | 8 +- ...11\350\243\205\346\214\207\345\215\227.md" | 10 +- install.bat | 2 + install.sh | 80 +++-- pages/agentboot-online-v1.1.0.tar.gz | Bin 112382 -> 119951 bytes pages/agentboot-online-v1.1.0.tar.gz.sha256 | 2 +- pages/agentboot-online-v1.1.0.zip | Bin 135190 -> 143942 bytes pages/agentboot-online-v1.1.0.zip.sha256 | 2 +- pages/en/index.html | 10 +- pages/index.html | 12 +- pages/install.ps1 | 92 ++++-- pages/install.sh | 97 +++--- scripts/build-offline.ps1 | 5 +- scripts/build-offline.sh | 13 +- scripts/install-offline.ps1 | 32 +- scripts/install-offline.sh | 30 +- scripts/install.ps1 | 45 ++- scripts/tools/stage_application.py | 27 +- scripts/tools/validate_offline_payload.py | 2 + tests/test_agent_lifecycle_methods.py | 62 ++++ tests/test_custom_agent_validation.py | 32 ++ tests/test_docs_consistency.py | 1 + tests/test_download_integrity.py | 5 + tests/test_i18n_quality.py | 34 +++ tests/test_install_tracking.py | 31 +- tests/test_installer_transactions.py | 30 ++ tests/test_language_persistence.py | 35 +++ tests/test_offline_payload_validation.py | 17 +- tests/test_offline_transaction.py | 45 +++ tests/test_process_timeout.py | 35 +++ tests/test_proxy_behavior.py | 45 +++ tests/test_regressions.py | 16 + tests/test_release_workflow.py | 15 +- tests/test_runtime_platforms.py | 11 + tests/test_state_safety.py | 56 ++++ tests/test_uninstall.py | 26 ++ ...11\350\243\205\346\214\207\345\215\227.md" | 8 +- 47 files changed, 1268 insertions(+), 278 deletions(-) create mode 100644 tests/test_agent_lifecycle_methods.py create mode 100644 tests/test_custom_agent_validation.py create mode 100644 tests/test_i18n_quality.py create mode 100644 tests/test_language_persistence.py create mode 100644 tests/test_offline_transaction.py create mode 100644 tests/test_process_timeout.py create mode 100644 tests/test_proxy_behavior.py create mode 100644 tests/test_state_safety.py diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index a0f9ec0..fdeb84f 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -34,7 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Run tests run: python3 -m unittest discover -s tests -v - name: Compile Python sources @@ -57,18 +59,20 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false - name: Configure Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 - name: Build online packages run: | cp install.sh pages/install.sh cp scripts/install.ps1 pages/install.ps1 python3 scripts/build-online.py - name: Upload site artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 with: path: pages - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index db0a6d6..7a73b70 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -88,7 +88,7 @@ jobs: run: | $root = Join-Path $env:RUNNER_TEMP 'agentboot-smoke' $extract = Join-Path $root 'extract' - $smokeHome = Join-Path $root 'home' + $smokeHome = Join-Path $root '测试-home' New-Item -ItemType Directory -Path $extract, $smokeHome -Force | Out-Null $tag = 'v' + (Get-Content VERSION -Raw).Trim() tar -xf "dist\AgentBoot-offline-$tag-win-x64.zip" -C $extract @@ -106,10 +106,30 @@ jobs: name: offline-windows path: dist/AgentBoot-offline-*-win-x64-codex.zip + macos-smoke: + runs-on: macos-15-intel + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4 + with: + persist-credentials: false + - name: Build and smoke native macOS Codex package + shell: bash + run: | + AGENTS=codex PLATFORMS=darwin-x64 TAG="v$(cat VERSION)" sh scripts/build-offline.sh + root="$(mktemp -d)" + mkdir -p "$root/extract" "$root/home" + tag="v$(cat VERSION)" + tar -xzf "dist/AgentBoot-offline-${tag}-darwin-x64.tar.gz" -C "$root/extract" + HOME="$root/home" sh "$root/extract/AgentBoot/install-offline.sh" codex + HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" "$root/home/.agentboot/bin/codex" --version + HOME="$root/home" AGENTBOOT_HOME="$root/home/.agentboot" python3 "$root/home/.agentboot/app/core/menu.py" uninstall codex + test ! -e "$root/home/.agentboot/agents/codex" + publish: - needs: [validate, online, offline-linux, offline-windows] + needs: [validate, online, offline-linux, offline-windows, macos-smoke] if: github.ref_type == 'tag' runs-on: ubuntu-latest + environment: release-production permissions: contents: write steps: @@ -126,12 +146,17 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | - gh release create "$GITHUB_REF_NAME" release/* \ - --repo "$GITHUB_REPOSITORY" \ - --title "AgentBoot $GITHUB_REF_NAME" \ - --prerelease \ - --generate-notes \ - --verify-tag + if gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then + gh release upload "$GITHUB_REF_NAME" release/* --repo "$GITHUB_REPOSITORY" --clobber + gh release edit "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --prerelease --latest=false + else + gh release create "$GITHUB_REF_NAME" release/* \ + --repo "$GITHUB_REPOSITORY" \ + --title "AgentBoot $GITHUB_REF_NAME" \ + --prerelease \ + --generate-notes \ + --verify-tag + fi - name: Wait for Pages deployment env: GH_TOKEN: ${{ github.token }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 913432d..a179219 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,15 @@ - 修复 Windows CMD shim 百分号格式、npm 真实入口解析和便携 Node 路径,Linux/Windows 均通过原生安装→启动→卸载矩阵。 - Worker 支持 Range/If-Range 与真实资产健康探测;发布采用 prerelease→Pages/Worker live verify→Latest 的协调状态机。 - 修正 Node engine 范围、离线资产名、相对链接、vLLM 文案、移动端表格溢出、触摸目标和旧性能固定数字。 +- 安全模式改为可信系统路径的固定 argv 执行,禁止 shell grammar、路径伪装与未知确认策略放行。 +- 截断/畸形 SSE 不再产生可执行工具调用;模型密钥仅发送到 HTTPS,网页工具默认拒绝内网/元数据地址。 +- 配置与会话使用 0700/0600 原子持久化,命令超时终止整个进程树,安装状态更新加入跨进程锁。 +- CoCo 卸载拒绝 symlink 根目录,私有 Node 在最终目录部署;Hermes uv、Node 与 Python 载荷完整校验。 +- Release/Pages Actions 固定 commit、最小权限、显式源码清单;离线 Agent 更新与应用/launcher 事务支持回滚。 +- Aider 改为 AgentBoot 私有 venv 安装;OpenCode 暂停离线声明,npm 离线入口按 JS/native/CMD 类型执行。 +- Agent配置、代理、会话和安装清单改为私密原子持久化;并发安装状态加锁,命令超时终止整棵进程树。 +- 在线/离线应用、launcher与Agent payload提交边界支持回滚;Windows中文路径、PowerShell 3哈希和批处理错误码修复。 +- 发布矩阵新增Intel macOS原生Codex smoke;同源安装包增加成员/大小检查,离线构建只复制显式文件清单。 ## v1.0.0 (2026-08-29) diff --git a/README.en.md b/README.en.md index ee50399..2bf69b2 100644 --- a/README.en.md +++ b/README.en.md @@ -51,7 +51,7 @@ Two commands after install: | 📦 **Choose what to install** | 14 mainstream agents, multi-select in the menu | | 🛟 **Built-in fallback agent** | `ab`: zero third-party dependencies, Agnes by default, offline Linux knowledge base, session persistence | | 🧠 **Model provider manager** | Named custom providers, Ollama/LM Studio presets, failover order, connectivity test | -| 🇨🇳 **China network adaptive** | npmmirror / Node mirrors / Tsinghua PyPI, four-source downloads, proxy support | +| 🇨🇳 **China network adaptive** | npmmirror / Node mirrors / Tsinghua PyPI, Worker/Pages/Release fallback, proxy support | | 📴 **Verified offline packages** | Releases provide Codex slim packs tested through install/run/uninstall; menu `[7]` builds other Agents on their target platform | | ➕ **Custom agents** | Add anything beyond the registry (npm / pip / script), stored in your home dir | | 🧹 **Safe uninstall** | Menu `[9]` or `agentboot uninstall `; removes owned program files and preserves user data by default | @@ -63,7 +63,7 @@ Two commands after install: | # | Agent | Command | Vendor | Offline | |---|---|---|---|---| | 1 | CoCo Agent | `coco` | BitCook | Linux/macOS | -| 2 | OpenCode | `opencode` | opencode.ai | ✓ | +| 2 | OpenCode | `opencode` | opencode.ai | online only (postinstall not yet offline-verified) | | 3 | Hermes Agent | `hermes` | Hermes | ✓ (needs Git) | | 4 | Cline CLI | `cline` | Cline | ✓ | | 5 | CodeBuddy CLI | `codebuddy` | Tencent | ✓ | diff --git a/README.md b/README.md index 477dd97..f04f1c3 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.Web | 📦 **菜单自选安装** | 14 个主流 Agent 按需勾选(见下表),支持命令行指定 | | 🛟 **内置保底 Agent** | `ab` 零第三方依赖 Python 核心:Agnes 开箱即用、离线 Linux 知识库、工具调用、会话持久化 | | 🧠 **提供商管理器** | Agnes 预设 + 自定义提供商命名管理 + Ollama/LM Studio 本地模型 + 故障切换顺序 | -| 🇨🇳 **中国网络自适应** | npmmirror / Node 镜像 / 清华 PyPI 自动切换;四源下载容错;代理一键配置 | +| 🇨🇳 **中国网络自适应** | npmmirror / Node 镜像 / 清华 PyPI 自动切换;Worker / Pages / Release 三源容错;代理一键配置 | | 📴 **可验证离线包** | Release 提供经安装/启动/卸载冒烟的 Codex 精简包;菜单 `[7]` 可按目标平台自建其他 Agent 包 | | ➕ **自定义 Agent** | 菜单向导或 `add-agent` 添加注册表之外的任意 Agent(npm / pip / 脚本),用户目录保存、升级不丢 | | 🧹 **安全卸载** | 菜单 `[9]` 或 `agentboot uninstall `;精确清理程序,默认保留配置、认证与会话 | @@ -63,7 +63,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.Web | # | Agent | 命令 | 厂商 | 离线 | 备注 | |---|---|---|---|---|---| | 1 | CoCo Agent | `coco` | BitCook | Linux/macOS | 官方脚本安装 | -| 2 | OpenCode | `opencode` | opencode.ai | ✓ | | +| 2 | OpenCode | `opencode` | opencode.ai | 仅在线 | postinstall 尚未纳入离线验证 | | 3 | Hermes Agent | `hermes` | Hermes | ✓ | 需 Git;国内自动镜像 | | 4 | Cline CLI | `cline` | Cline | ✓ | | | 5 | CodeBuddy CLI | `codebuddy` | Tencent | ✓ | | @@ -146,7 +146,7 @@ AgentBoot/ ## 文档与链接 - [安装指南](安装指南.md) —— 一键安装 / 离线部署 / 自定义构建 / 模型配置 / 故障排查 -- [Releases](https://github.com/bit-cook/AgentBoot/releases) —— 在线包 / 三平台离线包 / 源码包 +- [Releases](https://github.com/bit-cook/AgentBoot/releases) —— 在线包 / 已验证 Linux、Windows Codex 离线包 / 源码包 - 分发入口:[boot.ide.pub](https://boot.ide.pub)(Cloudflare)· [GitHub Pages](https://bit-cook.github.io/AgentBoot/) ## 安全说明 diff --git a/agents/registry.json b/agents/registry.json index 94b2598..e30244f 100644 --- a/agents/registry.json +++ b/agents/registry.json @@ -24,7 +24,7 @@ "method": "npm", "npm": "opencode-ai", "node": ">=18", - "offline": true, + "offline": false, "npm_install_flags": ["--ignore-scripts"], "script": "https://opencode.ai/install", "notes": ["已预置 Agnes 免费模型(~/.config/opencode/opencode.json),安装即用", "也可用官方脚本安装:curl -fsSL https://opencode.ai/install | bash"] @@ -169,11 +169,11 @@ "vendor": "Aider AI", "desc": "经典 AI 结对编程 CLI(Python/pip 生态,暂不支持离线)", "bin": "aider", - "method": "pip", - "pip": "aider-install", + "method": "venv", + "pip": "aider-chat", "node": null, "offline": false, - "notes": ["通过 aider-install 安装,需要本机 Python 3.8+", "pip 包的离线分发需要按平台打包 wheel,暂未支持"] + "notes": ["安装到 AgentBoot 私有 venv,不污染系统 Python", "需要 Python 3.10+;暂不支持离线"] } ] } diff --git a/cloudflare/worker.js b/cloudflare/worker.js index 092ef4d..a66de95 100644 --- a/cloudflare/worker.js +++ b/cloudflare/worker.js @@ -76,7 +76,7 @@ async function proxy(target, contentType, cacheTtl, incoming = null) { cf: { cacheEverything: !requestHeaders.has("Range"), cacheTtl }, headers: requestHeaders, }); - if (!resp.ok) { + if (!resp.ok && resp.status !== 304) { return text(`上游不可用(${resp.status}):${target}\n请稍后重试或使用 GitHub 直链。\n`, 502); } const headers = new Headers(resp.headers); @@ -162,7 +162,7 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14 -
+

AgentBoot

@@ -181,7 +181,7 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14

Windows(PowerShell)

powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://boot.ide.pub/install.ps1'))"
-
备用入口:GitHub Pages(bit-cook.github.io/AgentBoot)/ GitHub Releases / 国内加速镜像 —— 安装脚本内自动按序多源重试。
+
安装器只使用项目控制的 Worker / GitHub Pages / GitHub Release 三源,并对包与同源 SHA-256 一起校验。

🚀 三步上手

    @@ -195,17 +195,17 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14
    📦 菜单自选安装(不是全家桶)

    14 个主流 Agent 按需勾选:Claude Code、Codex、Qwen Code、OpenCode、CodeBuddy、MiMo、Cline、Pi、CoCo…

    🛟 内置保底 Agent(ab)

    其他都装不上时它一定能用:零第三方依赖 Python 核心、Agnes 免费模型、离线 Linux 知识库、会话持久化。

    🧠 模型提供商管理器

    Agnes 零配置开箱;自定义提供商命名管理;Ollama / LM Studio 本地模型;故障切换顺序。

    -
    🇨🇳 中国网络自适应

    自动探测并切换 npmmirror / Node 镜像 / 清华 PyPI;四源下载容错;代理一键配置。

    +
    🇨🇳 中国网络自适应

    自动切换 npm / Node / PyPI 镜像;Worker / Pages / Release 三源容错;代理一键配置。

    📴 已验证离线 & 按需构建

    Release 精简包通过真实安装、启动与卸载冒烟;菜单 [7] 可在目标平台自选 Agent 构建。

    🧹 可追溯安全卸载

    菜单 [9] 或 uninstall 命令批量卸载;只清理由 AgentBoot 管理的程序,默认保留配置、认证与会话。

    ⚡ 可测性能

    TLS 连接复用、知识库预建索引、上下文自动瘦身与流式中断保护;/bench 按当前网络与模型现场测量。

    -
+

🤖 支持的 Agent(14 个)

- + @@ -241,7 +241,7 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14
@@ -328,7 +328,7 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14 -
+

English | 中文

@@ -347,7 +347,7 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14

Windows (PowerShell)

powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://boot.ide.pub/install.ps1'))"
-
Fallback entries: GitHub Pages (this page) / GitHub Releases / China mirrors — the installer retries sources in order automatically. The CLI UI is Chinese by default; language can be switched to English (agentboot lang en).
+
The installer uses project-controlled Worker / GitHub Pages / GitHub Release origins and verifies each archive against its same-origin SHA-256.

🚀 Three steps

    @@ -361,17 +361,17 @@ pre{background:var(--code-bg);color:var(--code-fg);border-radius:10px;padding:14
    📦 Choose what to install (no bundle bloat)

    14 mainstream agents to pick from: Claude Code, Codex, Qwen Code, OpenCode, CodeBuddy, MiMo, Cline, Pi, CoCo…

    🛟 Built-in fallback agent (ab)

    A zero-third-party-dependency Python core with Agnes, an offline Linux knowledge base, and session persistence.

    🧠 Model provider manager

    Agnes out of the box; named custom providers; Ollama / LM Studio local models; failover order.

    -
    🇨🇳 China network adaptive

    Auto-detects and switches to npmmirror / Node mirrors / Tsinghua PyPI; four-source download retry; one-click proxy.

    +
    🇨🇳 China network adaptive

    npm / Node / PyPI mirrors, Worker/Pages/Release fallback, and one-click proxy configuration.

    📴 Verified offline & custom builds

    Release packs pass real install/run/uninstall smoke tests; menu [7] builds selected Agents on their target platform.

    🧹 Ownership-aware uninstall

    Menu [9] or the uninstall command removes AgentBoot-managed programs in batches while preserving config, credentials, and sessions by default.

    ⚡ Measurable performance

    TLS reuse, pre-indexed KB, context trimming, and stream protection; /bench measures the current network and provider.

    -
+

🤖 Supported agents (14)

#Agent命令厂商离线
1CoCo AgentcocoBitCookLinux/macOS
2OpenCodeopencodeopencode.ai
2OpenCodeopencodeopencode.ai仅在线
3Hermes AgenthermesHermes✓(需 Git)
4Cline CLIclineCline
5CodeBuddy CLIcodebuddyTencent
- + diff --git a/core/agent.py b/core/agent.py index 3ff4166..bc68f99 100644 --- a/core/agent.py +++ b/core/agent.py @@ -17,6 +17,7 @@ import shlex import socket import sys +import tempfile import time sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) @@ -50,8 +51,11 @@ def _utf8_console(): def ensure_home(): - if not os.path.isdir(AB_HOME): - os.makedirs(AB_HOME, exist_ok=True) + os.makedirs(AB_HOME, mode=0o700, exist_ok=True) + try: + os.chmod(AB_HOME, 0o700) + except OSError: + pass # Agnes 为官方预设的永久免费模型,开箱即用;其余为常见本地模型示例。 @@ -99,6 +103,21 @@ def load_config(): cfg = json.load(f) except Exception: cfg = default_config() + if not isinstance(cfg, dict): + cfg = default_config() + if not isinstance(cfg.get("providers"), dict): + cfg["providers"] = {} + confirm = str(cfg.get("confirm", "smart")).strip().lower() + cfg["confirm"] = confirm if confirm in ("safe", "smart", "always") else "smart" + raw_steps = cfg.get("max_steps", 12) + try: + steps = int(raw_steps) + except (TypeError, ValueError): + steps = 12 + cfg["max_steps"] = 12 if steps < 1 else min(steps, 50) + cfg["lang"] = "en" if str(cfg.get("lang", "zh")).lower().startswith("en") else "zh" + if not isinstance(cfg.get("fallback", []), list): + cfg["fallback"] = [] for k, v in default_config().items(): cfg.setdefault(k, v) return cfg @@ -106,10 +125,33 @@ def load_config(): def save_config(cfg): ensure_home() - tmp = CONFIG_PATH + ".tmp" - with open(tmp, "w", encoding="utf-8") as f: - json.dump(cfg, f, ensure_ascii=False, indent=2) - os.replace(tmp, CONFIG_PATH) + _atomic_private_json(CONFIG_PATH, cfg) + + +def _atomic_private_json(path, data): + directory = os.path.dirname(path) or "." + os.makedirs(directory, mode=0o700, exist_ok=True) + fd, tmp = tempfile.mkstemp(prefix=os.path.basename(path) + ".", suffix=".tmp", dir=directory) + try: + try: + os.fchmod(fd, 0o600) + except (AttributeError, OSError): + pass + with os.fdopen(fd, "w", encoding="utf-8") as stream: + json.dump(data, stream, ensure_ascii=False, indent=2) + stream.write("\n") + stream.flush() + os.fsync(stream.fileno()) + os.replace(tmp, path) + try: + os.chmod(path, 0o600) + except OSError: + pass + finally: + try: + os.remove(tmp) + except OSError: + pass def get_provider(cfg, name=None): @@ -177,7 +219,19 @@ def _validate_model_transport(scheme, host, api_key): def _connect(scheme, host, port, timeout=180): import http.client import ssl - key = (scheme, host, port) + from urllib.parse import urlsplit + proxy_url = os.environ.get("HTTPS_PROXY") or os.environ.get("https_proxy") + if not proxy_url: + try: + env_path = os.path.join(AB_HOME, "env.json") + with open(env_path, "r", encoding="utf-8") as source: + proxy_url = (json.load(source) or {}).get("proxy") + except Exception: + proxy_url = None + proxy = urlsplit(proxy_url) if proxy_url else None + if proxy and (proxy.scheme not in ("http", "https") or not proxy.hostname): + raise ApiError("代理地址无效,仅支持 http/https。") + key = (scheme, host, port, proxy_url or "") conn = _POOL.get(key) if conn is not None: return conn @@ -185,7 +239,17 @@ def _connect(scheme, host, port, timeout=180): ctx = ssl.create_default_context() if os.environ.get("AGENTBOOT_INSECURE") == "1": ctx = ssl._create_unverified_context() - conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=ctx) + if proxy: + conn = http.client.HTTPSConnection(proxy.hostname, proxy.port or (443 if proxy.scheme == "https" else 80), + timeout=timeout, context=ctx) + tunnel_headers = {} + if proxy.username: + import base64 + raw = "%s:%s" % (proxy.username, proxy.password or "") + tunnel_headers["Proxy-Authorization"] = "Basic " + base64.b64encode(raw.encode()).decode() + conn.set_tunnel(host, port, headers=tunnel_headers) + else: + conn = http.client.HTTPSConnection(host, port, timeout=timeout, context=ctx) elif scheme == "http": conn = http.client.HTTPConnection(host, port, timeout=timeout) else: @@ -195,8 +259,11 @@ def _connect(scheme, host, port, timeout=180): def _drop_pool(scheme, host, port): - conn = _POOL.pop((scheme, host, port), None) - if conn is not None: + keys = [key for key in _POOL if key[:3] == (scheme, host, port)] + for key in keys: + conn = _POOL.pop(key, None) + if conn is None: + continue try: conn.close() except Exception: @@ -436,10 +503,9 @@ def _shrink(msgs, budget=60000, keep_recent=8): def save_session(history): try: - os.makedirs(AB_HOME, exist_ok=True) - with open(SESSION_FILE, "w", encoding="utf-8") as f: - json.dump({"saved": time.strftime("%Y-%m-%d %H:%M"), - "history": history[-12:]}, f, ensure_ascii=False) + ensure_home() + _atomic_private_json(SESSION_FILE, {"saved": time.strftime("%Y-%m-%d %H:%M"), + "history": history[-12:]}) except OSError: pass @@ -474,7 +540,10 @@ def bench(cfg): def test_provider(cfg, name=None): """连通性测试:让模型回一个字。""" try: - content, _ = chat(cfg, [{"role": "user", "content": "请只回复两个字:正常"}], + target = dict(cfg) + if name: + target["active"] = name + content, _ = chat(target, [{"role": "user", "content": "请只回复两个字:正常"}], stream_cb=None, max_tokens=16, temperature=0) return True, (content or "").strip()[:40] or "(空响应)" except Exception as e: @@ -691,18 +760,56 @@ def run_cmd(cmd, timeout=60): import subprocess # 惰性导入:保持启动极速 timeout = min(max(int(timeout or 60), 5), 300) shell = ["cmd", "/c", cmd] if os.name == "nt" else ["/bin/sh", "-c", cmd] + out_file = tempfile.TemporaryFile(mode="w+b") + err_file = tempfile.TemporaryFile(mode="w+b") try: - r = subprocess.run(shell, capture_output=True, text=True, - errors="replace", timeout=timeout) - out = ((r.stdout or "") + (("\n[stderr] " + r.stderr) if r.stderr.strip() else "")).strip() - code = r.returncode + kwargs = {"stdout": out_file, "stderr": err_file} + if os.name == "nt": + kwargs["creationflags"] = getattr(subprocess, "CREATE_NEW_PROCESS_GROUP", 0) + else: + kwargs["start_new_session"] = True + process = subprocess.Popen(shell, **kwargs) + try: + process.wait(timeout=timeout) + code = process.returncode + except subprocess.TimeoutExpired: + code = 124 + if os.name == "nt": + subprocess.run(["taskkill", "/PID", str(process.pid), "/T", "/F"], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + else: + import signal + try: + os.killpg(process.pid, signal.SIGTERM) + process.wait(timeout=2) + except Exception: + try: + os.killpg(process.pid, signal.SIGKILL) + except OSError: + pass + process.wait() + def read_bounded(stream): + stream.flush() + size = stream.tell() + stream.seek(0) + if size <= 8000: + return stream.read().decode("utf-8", "replace") + first = stream.read(4000).decode("utf-8", "replace") + stream.seek(max(0, size - 4000)) + last = stream.read(4000).decode("utf-8", "replace") + return first + "\n…(输出过长,已截断中间部分)…\n" + last + stdout = read_bounded(out_file) + stderr = read_bounded(err_file) + out = (stdout + (("\n[stderr] " + stderr) if stderr.strip() else "")).strip() + if code == 124: + out = "(命令超时 %ss,已终止整个进程树)\n%s" % (timeout, out) except subprocess.TimeoutExpired: out, code = "(命令超时 %ss,已终止)" % timeout, 124 except FileNotFoundError as e: out, code = "启动 shell 失败:%s" % e, 127 - if len(out) > 8000: - half = 4000 - out = out[:half] + "\n…(输出过长,已截断中间部分)…\n" + out[-half:] + finally: + out_file.close() + err_file.close() return "exit=%d\n%s" % (code, out or "(无输出)") @@ -961,6 +1068,13 @@ def _is_interactive(): def system_prompt(): plat = "%s / %s" % (platform_info(), sys.platform) + if i18n.get_lang() == "en": + return ( + "You are AgentBoot's built-in terminal assistant running locally on %s.\n" + "Use tools for commands, files, the offline Linux knowledge base, and public web pages.\n" + "Rules: answer concisely in English; inspect with read-only tools before changing state; " + "explain destructive consequences first; put commands in code blocks; summarize verified results." % plat + ) return ( "你是 AgentBoot 内置的终端智能助手(ab),直接运行在用户本机,当前系统:%s。\n" "你可以调用工具:执行命令、读写文件、查询离线 Linux 知识库、抓取网页。\n" @@ -1275,8 +1389,8 @@ def main(): if not args: print("用法: ab run \"你的任务\"") return - final, _ = agent_loop(cfg, " ".join(args), stream=(not _is_interactive())) - if final and not _is_interactive(): + final, _ = agent_loop(cfg, " ".join(args), stream=False) + if final: print(final) return if cmd == "bench": diff --git a/core/i18n.py b/core/i18n.py index b18f396..817b5ef 100644 --- a/core/i18n.py +++ b/core/i18n.py @@ -115,14 +115,8 @@ "menu.custom_saved": "已保存到 %s", "menu.pick_platforms": "选择目标平台(可多选,空格/逗号分隔;回车 = 常用三平台):", "menu.pick_offline_agents": "选择要打入离线包的 Agent(可多选;回车 = 全选):", - "menu.build_aider_hint": " (aider 为 pip 生态暂不支持离线,已自动排除)", "menu.build_plan": "即将构建:平台 %s · Agent %s", "menu.build_yn": "确认开始? [Y/n] ", - "menu.build_start": "开始构建:平台=%s · Agent=%s", - "menu.build_wait": "(首次构建会自动下载便携 Node/Python 与各 Agent 依赖,耗时取决于网速,请耐心等待)", - "menu.build_done": "构建完成,产物在 %s:", - "menu.build_fail": "构建脚本退出码 %s", - "menu.build_empty": "未选择任何 Agent", "agent.banner_model": "模型: %s @ %s(Agnes 官方免费预设,可用 /model 切换)", "agent.banner_resume": "↩ 已恢复上次会话(%d 条对话记忆,/继续 可随时恢复)", "agent.prompt": "\n你 › ", @@ -275,14 +269,8 @@ "menu.custom_saved": "Saved to %s", "menu.pick_platforms": "Pick target platforms (multi-select; Enter = common three):", "menu.pick_offline_agents": "Pick agents to include (multi-select; Enter = all):", - "menu.build_aider_hint": " (aider is pip-based, offline not supported — excluded automatically)", "menu.build_plan": "About to build: platforms %s · agents %s", "menu.build_yn": "Start? [Y/n] ", - "menu.build_start": "Building: platforms=%s · agents=%s", - "menu.build_wait": "(First build downloads portable Node/Python and agent deps; may take a while)", - "menu.build_done": "Build finished, artifacts in %s:", - "menu.build_fail": "Build script exit code %s", - "menu.build_empty": "No agent selected", "agent.banner_model": "Model: %s @ %s (Agnes free preset, /model to switch)", "agent.banner_resume": "↩ Restored last session (%d messages, /继续 to restore again)", "agent.prompt": "\nyou › ", @@ -343,8 +331,5 @@ def t(key, *args): if s is None: s = ZH.get(key, key) if args: - try: - return s % args - except Exception: - return s + return s % args return s diff --git a/core/menu.py b/core/menu.py index a13336c..f267d82 100644 --- a/core/menu.py +++ b/core/menu.py @@ -18,6 +18,7 @@ """ import json import hashlib +from contextlib import contextmanager import os import re import shutil @@ -74,7 +75,9 @@ def plat_id(): elif m in ("arm64", "aarch64"): arch = "arm64" else: - arch = "x64" + raise RuntimeError("不支持的 CPU 架构:%s" % m) + if s not in ("linux", "darwin", "win"): + raise RuntimeError("不支持的操作系统:%s" % s) return "%s-%s" % (s, arch) @@ -117,15 +120,18 @@ def cn_mode(): def load_env_json(): try: with open(ENV_JSON, "r", encoding="utf-8") as f: - return json.load(f) + data = json.load(f) + proxy = data.get("proxy") if isinstance(data, dict) else None + if proxy: + os.environ["HTTP_PROXY"] = proxy + os.environ["HTTPS_PROXY"] = proxy + return data if isinstance(data, dict) else {} except Exception: return {} def save_env_json(data): - os.makedirs(AB_HOME, exist_ok=True) - with open(ENV_JSON, "w", encoding="utf-8") as f: - json.dump(data, f, ensure_ascii=False, indent=2) + agent._atomic_private_json(ENV_JSON, data) def load_registry(): @@ -151,9 +157,7 @@ def load_custom_agents(): def save_custom_agents(items): - os.makedirs(AB_HOME, exist_ok=True) - with open(CUSTOM_AGENTS, "w", encoding="utf-8") as f: - json.dump(items, f, ensure_ascii=False, indent=2) + agent._atomic_private_json(CUSTOM_AGENTS, items) def load_install_state(): @@ -186,28 +190,51 @@ def save_install_state(data): pass +@contextmanager +def _install_state_lock(): + os.makedirs(AB_HOME, mode=0o700, exist_ok=True) + lock_path = INSTALL_STATE + ".lock" + with open(lock_path, "a+b") as lock: + if os.path.getsize(lock_path) == 0: + lock.write(b"\0") + lock.flush() + lock.seek(0) + if os.name == "nt": + import msvcrt + msvcrt.locking(lock.fileno(), msvcrt.LK_LOCK, 1) + else: + import fcntl + fcntl.flock(lock.fileno(), fcntl.LOCK_EX) + try: + yield + finally: + lock.seek(0) + if os.name == "nt": + msvcrt.locking(lock.fileno(), msvcrt.LK_UNLCK, 1) + else: + fcntl.flock(lock.fileno(), fcntl.LOCK_UN) + + def record_install(a, source, executable=None, install_prefix=None): """记录由 AgentBoot 完成的安装,作为安全卸载的归属依据。""" - state = load_install_state() - state["version"] = 1 - state["agents"][a["id"]] = { - "name": a.get("name") or a["id"], - "bin": a.get("bin"), - "source": source, - "method": a.get("method", "npm"), - "package": a.get("npm") or a.get("pip") or a.get("script"), - "executable": executable, - "prefix": install_prefix, - "custom": bool(a.get("custom")), - "installed_at": int(time.time()), - } - save_install_state(state) + with _install_state_lock(): + state = load_install_state() + state["version"] = 1 + state["agents"][a["id"]] = { + "name": a.get("name") or a["id"], "bin": a.get("bin"), "source": source, + "method": a.get("method", "npm"), + "package": a.get("npm") or a.get("pip") or a.get("script"), + "executable": executable, "prefix": install_prefix, + "custom": bool(a.get("custom")), "installed_at": int(time.time()), + } + save_install_state(state) def forget_install(aid): - state = load_install_state() - if state["agents"].pop(aid, None) is not None: - save_install_state(state) + with _install_state_lock(): + state = load_install_state() + if state["agents"].pop(aid, None) is not None: + save_install_state(state) def custom_add_entry(entry): @@ -215,6 +242,14 @@ def custom_add_entry(entry): if not _valid_agent_id(entry.get("id")) or not _valid_bin_name(entry.get("bin")): raise ValueError("Agent id/命令名只能包含字母、数字、点、下划线与连字符") items = load_custom_agents() + registry_path = os.path.join(APP_DIR, "agents", "registry.json") + try: + with open(registry_path, "r", encoding="utf-8") as source: + builtins = {item.get("id") for item in json.load(source).get("agents", [])} + except Exception: + builtins = set() + if entry["id"] in builtins or any(item.get("id") == entry["id"] for item in items): + raise ValueError("Agent id 已存在:%s" % entry["id"]) entry["offline"] = False entry.setdefault("vendor", "自定义") items.append(entry) @@ -271,7 +306,11 @@ def custom_add_wizard(): entry["pip"] = pkg else: entry["script"] = pkg - custom_add_entry(entry) + try: + custom_add_entry(entry) + except ValueError as error: + log_err(str(error)) + return None log_ok("已保存到 %s" % CUSTOM_AGENTS) return aid @@ -589,6 +628,33 @@ def _remove_coco(purge=False): _remove_path(os.path.join(root, name)) +def _remove_coco_external_launchers(entry): + executable = entry.get("executable") + if not executable: + return + directory = os.path.dirname(os.path.abspath(executable)) + allowed_dirs = {os.path.realpath(os.path.expanduser("~/.local/bin")), "/usr/local/bin"} + if os.path.realpath(directory) not in allowed_dirs: + return + coco_root = os.path.realpath(os.path.expanduser("~/.coco")) + suffix = ".cmd" if not POSIX else "" + for name in ("coco", "web", "coweb"): + path = os.path.join(directory, name + suffix) + if not os.path.lexists(path): + continue + owned = False + if os.path.islink(path): + owned = _inside(os.path.realpath(path), coco_root) + elif os.path.isfile(path): + try: + with open(path, "r", encoding="utf-8", errors="ignore") as source: + owned = ".coco" in source.read(1024) + except OSError: + pass + if owned: + os.remove(path) + + def uninstall_one(a, purge=False): """安全卸载一个 Agent;返回 (成功, 面向用户的说明)。""" if not _valid_agent_id(a.get("id")) or not _valid_bin_name(a.get("bin")): @@ -605,6 +671,7 @@ def uninstall_one(a, purge=False): if a["id"] == "coco": try: _remove_coco(purge) + _remove_coco_external_launchers(entry) except OSError as e: return False, str(e) elif source == "offline": @@ -616,7 +683,7 @@ def uninstall_one(a, purge=False): return False, str(e) elif method == "npm": npm = npm_cmd() - package = _npm_package_name(a.get("npm") or entry.get("package")) + package = _npm_package_name(entry.get("package") or a.get("npm")) if not npm or not package: return False, t("menu.uninstall_no_tool") % "npm" cmd = [npm, "uninstall", "-g", package] @@ -628,13 +695,15 @@ def uninstall_one(a, purge=False): return False, t("menu.uninstall_command_failed") % package elif method == "pip": py = find_python() - package = a.get("pip") or entry.get("package") + package = entry.get("package") or a.get("pip") if not py or not package: return False, t("menu.uninstall_no_tool") % "Python/pip" cmd = [py, "-m", "pip", "uninstall", "-y", package] log_info("$ %s" % " ".join(cmd)) if subprocess.run(cmd, env=child_env()).returncode != 0: return False, t("menu.uninstall_command_failed") % package + elif method == "venv": + pass else: return False, t("menu.uninstall_manual_script") @@ -744,8 +813,10 @@ def install_online(ids): ok = install_via_script(a) elif method == "pip": ok = install_via_pip(a) + elif method == "venv": + ok = install_aider_venv(a) if ok and a.get("bin"): - found = find_bin(a["bin"]) + found = aider_venv_executable() if method == "venv" else find_bin(a["bin"]) if found: env_extra, args_prefix = wire_agnes(a) executable = found @@ -769,7 +840,8 @@ def install_online(ids): fail_list.append(aid) for note in a.get("notes", []) or []: print(" ℹ %s" % note) - print("\n" + t("menu.install_summary") % (ok_list or "-", fail_list or "-")) + print("\n" + t("menu.install_summary") % + (", ".join(ok_list) or "-", ", ".join(fail_list) or "-")) if not POSIX: print(t("menu.install_hint_win")) ensure_path_registered() @@ -851,6 +923,47 @@ def install_via_pip(a): return subprocess.run(cmd).returncode == 0 +def aider_venv_executable(): + relative = os.path.join("Scripts", "aider.exe") if not POSIX else os.path.join("bin", "aider") + return os.path.join(AGENTS_DIR, "aider", "venv", relative) + + +def install_aider_venv(a): + py = find_python() + if not py: + log_err("Aider 需要 Python 3.10+") + return False + check = subprocess.run([py, "-c", "import sys; print('%d.%d'%sys.version_info[:2])"], + capture_output=True, text=True, timeout=20) + try: + version = tuple(int(x) for x in check.stdout.strip().split(".")[:2]) + except ValueError: + return False + if check.returncode or version < (3, 10): + log_err("Aider 需要 Python 3.10+,当前 %s" % check.stdout.strip()) + return False + root = os.path.join(AGENTS_DIR, "aider") + candidate, backup = root + ".new.%s" % os.getpid(), root + ".old.%s" % os.getpid() + shutil.rmtree(candidate, ignore_errors=True) + shutil.rmtree(backup, ignore_errors=True) + if subprocess.run([py, "-m", "venv", os.path.join(candidate, "venv")]).returncode: + return False + pip = os.path.join(candidate, "venv", "Scripts", "pip.exe") if not POSIX else os.path.join(candidate, "venv", "bin", "pip") + cmd = [pip, "install", "--disable-pip-version-check", a["pip"]] + if cn_mode(): cmd += ["-i", PIP_MIRROR] + if subprocess.run(cmd, env=child_env()).returncode: + shutil.rmtree(candidate, ignore_errors=True) + return False + if os.path.isdir(root): os.replace(root, backup) + try: + os.replace(candidate, root) + shutil.rmtree(backup, ignore_errors=True) + except Exception: + if os.path.isdir(backup) and not os.path.exists(root): os.replace(backup, root) + raise + return os.path.isfile(aider_venv_executable()) + + # ---------------------------------------------------------------- hermes-agent 国内专用安装 def _npm_global_root(env, npm=None): @@ -1013,7 +1126,10 @@ def install_hermes_special(a): "UV_PYTHON_INSTALL_MIRROR": "https://ghfast.top/https://github.com/astral-sh/python-build-standalone/releases/download", "UV_HTTP_TIMEOUT": "180", }) - node = shutil.which("node") or node_exe() + node = node_exe() if _inside(npm, runtime_node_dir()) else shutil.which("node") + if not node or not node_ok(node, a.get("node")): + log_err("Hermes postinstall 未找到满足版本的 Node") + return False script = os.path.join(pkg_root, "scripts", "postinstall.js") r = subprocess.run([node, script], env=env) return r.returncode == 0 @@ -1295,37 +1411,55 @@ def offline_install(ids, payload_dir=None): fail_list.append(aid) continue dst = os.path.join(AGENTS_DIR, aid) - os.makedirs(dst, exist_ok=True) - dst_nm = os.path.join(dst, "node_modules") - if os.path.exists(dst_nm): - shutil.rmtree(dst_nm, ignore_errors=True) + candidate = dst + ".new.%s" % os.getpid() + backup = dst + ".old.%s" % os.getpid() + shutil.rmtree(candidate, ignore_errors=True) + shutil.rmtree(backup, ignore_errors=True) + os.makedirs(candidate, exist_ok=True) + candidate_nm = os.path.join(candidate, "node_modules") log_info(t("menu.offline_deploying") % (a["name"], dir_size_mb(src))) if POSIX: - shutil.copytree(src, dst_nm) + shutil.copytree(src, candidate_nm) else: # Windows:载荷可能含超长路径,robocopy 原生支持(exit<8 均为成功) - r = subprocess.run(["robocopy", src, dst_nm, "/E", "/NFL", "/NDL", "/NJH", "/NJS"], + r = subprocess.run(["robocopy", src, candidate_nm, "/E", "/NFL", "/NDL", "/NJH", "/NJS"], capture_output=True) if r.returncode >= 8: log_err("robocopy 部署失败(code=%d):%s" % (r.returncode, aid)) + shutil.rmtree(candidate, ignore_errors=True) fail_list.append(aid) continue + if os.path.isdir(dst): os.replace(dst, backup) + os.replace(candidate, dst) + dst_nm = os.path.join(dst, "node_modules") if aid == "hermes": - fixup_hermes_venv(os.path.join(pdir, "agents", "hermes", pid), dst_nm) + try: + fixup_hermes_venv(os.path.join(pdir, "agents", "hermes", pid), dst_nm) + except Exception as error: + log_err("Hermes 路径修复失败:%s" % error) + shutil.rmtree(dst, ignore_errors=True) + if os.path.isdir(backup): os.replace(backup, dst) + fail_list.append(aid) + continue env_extra, args_prefix = wire_agnes(a) shim = write_shim(a, env_extra, args_prefix, node_path=offline_node) if shim: + shutil.rmtree(backup, ignore_errors=True) record_install(a, "offline", os.path.join( AB_HOME, "bin", a["bin"] + ("" if POSIX else ".cmd"))) log_ok(t("menu.offline_ok") % (a["name"], a["bin"])) ok_list.append(aid) else: + shutil.rmtree(dst, ignore_errors=True) + if os.path.isdir(backup): os.replace(backup, dst) fail_list.append(aid) for note in a.get("notes", []) or []: print(" ℹ %s" % note) ensure_path_registered() - print("\n" + t("menu.install_summary") % (ok_list or "-", fail_list or "-")) - print(t("menu.install_hint_win")) + print("\n" + t("menu.install_summary") % + (", ".join(ok_list) or "-", ", ".join(fail_list) or "-")) + if not POSIX: + print(t("menu.install_hint_win")) return fail_list @@ -1374,6 +1508,22 @@ def offline_npm_entry(a): return None +def _npm_entry_kind(entry): + extension = os.path.splitext(entry)[1].lower() + if extension in (".js", ".mjs", ".cjs"): + return "node" + try: + with open(entry, "rb") as source: + first = source.readline(256).lower() + if first.startswith(b"#!") and b"node" in first: + return "node" + except OSError: + pass + if extension in (".cmd", ".bat"): + return "cmd" + return "direct" + + def write_shim(a, env_extra=None, args_prefix=None, node_path=None): """为离线安装的 Agent 生成启动 shim。""" aid, bin_ = a["id"], a["bin"] @@ -1399,8 +1549,11 @@ def write_shim(a, env_extra=None, args_prefix=None, node_path=None): if not entry: raise ValueError("未找到 %s 的真实 npm bin 入口" % aid) pre = " ".join('"%s"' % x for x in args_prefix) - lines.append('exec "%s" "%s"%s "$@"' % - (node_path, entry, (" " + pre) if pre else "")) + if _npm_entry_kind(entry) == "node": + lines.append('exec "%s" "%s"%s "$@"' % + (node_path, entry, (" " + pre) if pre else "")) + else: + lines.append('exec "%s"%s "$@"' % (entry, (" " + pre) if pre else "")) body = "\n".join(lines) + "\n" with open(path, "w", encoding="utf-8", newline="\n") as f: f.write("#!/bin/sh\n# AgentBoot shim for %s\nAB_ROOT=\"$HOME/.agentboot\"\n%s" % (aid, body)) @@ -1421,10 +1574,16 @@ def write_shim(a, env_extra=None, args_prefix=None, node_path=None): if not entry: raise ValueError("未找到 %s 的真实 npm bin 入口" % aid) pre = " ".join(args_prefix) - lines.append('"%s" "%s"%s %%*' % - (node_path, entry, (" " + pre) if pre else "")) + kind = _npm_entry_kind(entry) + if kind == "node": + lines.append('"%s" "%s"%s %%*' % + (node_path, entry, (" " + pre) if pre else "")) + elif kind == "cmd": + lines.append('call "%s"%s %%*' % (entry, (" " + pre) if pre else "")) + else: + lines.append('"%s"%s %%*' % (entry, (" " + pre) if pre else "")) body = "\r\n".join(lines) + "\r\n" - with open(path, "w", encoding="ascii", newline="") as f: + with open(path, "w", encoding="utf-8-sig", newline="") as f: f.write("@echo off\r\nrem AgentBoot shim for %s\r\n" 'set "AB_ROOT=%%USERPROFILE%%\\.agentboot"\r\n' 'if exist "%%AB_ROOT%%\\runtime\\node-win-x64\\node.exe" ' @@ -1512,8 +1671,14 @@ def set_npm_registry(url): def set_proxy(url=None): data = load_env_json() if url: + parsed = urllib.parse.urlsplit(url) + if parsed.scheme not in ("http", "https") or not parsed.hostname: + log_err("代理地址必须是有效的 http:// 或 https:// URL") + return False data["proxy"] = url save_env_json(data) + os.environ["HTTP_PROXY"] = url + os.environ["HTTPS_PROXY"] = url if npm_cmd(): subprocess.run([npm_cmd(), "config", "set", "proxy", url], env=child_env(), capture_output=True) subprocess.run([npm_cmd(), "config", "set", "https-proxy", url], env=child_env(), capture_output=True) @@ -1524,9 +1689,12 @@ def set_proxy(url=None): print(' export HTTP_PROXY=%s HTTPS_PROXY=%s' % (url, url)) else: print(' setx HTTP_PROXY %s' % url) + return True else: data.pop("proxy", None) save_env_json(data) + os.environ.pop("HTTP_PROXY", None) + os.environ.pop("HTTPS_PROXY", None) if npm_cmd(): subprocess.run([npm_cmd(), "config", "delete", "proxy"], env=child_env(), capture_output=True) subprocess.run([npm_cmd(), "config", "delete", "https-proxy"], env=child_env(), capture_output=True) @@ -1536,6 +1704,7 @@ def set_proxy(url=None): except OSError: pass log_ok("代理已清除") + return True def write_env_scripts(url): @@ -1681,7 +1850,7 @@ def pick_platforms(): def pick_offline_agents(): """多选要打进离线包的 Agent(默认全选支持离线的)。返回 id 列表。""" - capable = [a for a in load_registry() if a.get("method") == "npm" or a.get("id") == "coco"] + capable = [a for a in load_registry() if a.get("offline")] print("\n" + t("menu.pick_offline_agents")) for i, a in enumerate(capable, 1): print(" [%2d] %-14s %-22s %s" % (i, a["id"], a["name"], a.get("desc", ""))) @@ -1841,7 +2010,7 @@ def write_online_shim(a, found, env_extra, args_prefix=None): lines += _agnes_env_cmd_lines(env_extra or {}) pre = " ".join(args_prefix) lines.append('"%s"%s %%*' % (found, (" " + pre) if pre else "")) - with open(p, "w", encoding="ascii", newline="") as f: + with open(p, "w", encoding="utf-8-sig", newline="") as f: f.write("\r\n".join(lines) + "\r\n") return True except Exception as e: @@ -1879,10 +2048,10 @@ def resolve_lang(): i18n.set_lang(lang) -def set_lang_persist(lang): +def set_lang_persist(lang, cfg=None): lang = "en" if str(lang or "").lower().startswith("en") else "zh" i18n.set_lang(lang) - cfg = agent.load_config() + cfg = cfg if isinstance(cfg, dict) else agent.load_config() cfg["lang"] = lang agent.save_config(cfg) if lang == "en": @@ -1895,7 +2064,7 @@ def lang_switch(cfg): print(i18n.t("menu.lang_title")) print(i18n.t("menu.lang_pick")) c = input(i18n.t("menu.pick")).strip() - set_lang_persist("en" if c == "2" else "zh") + set_lang_persist("en" if c == "2" else "zh", cfg) def banner(): @@ -1977,7 +2146,12 @@ def main(): doctor() elif cmd == "install": ids = [t for t in re.split(r"[,\s]+", " ".join(argv[1:])) if t and not t.startswith("-")] - install_online(ids) if ids else print("用法: menu.py install claude-code qwen-code") + if ids: + failures = install_online(ids) + if failures: + raise SystemExit(1) + else: + print("用法: menu.py install claude-code qwen-code") elif cmd == "offline": payload = None if "--payload" in argv: @@ -2032,6 +2206,9 @@ def main(): for a in items: print(" %-16s %-10s %-32s bin=%s" % (a.get("id"), a.get("method"), a.get("npm") or a.get("pip") or a.get("script"), a.get("bin"))) elif arg in ("--del", "del", "remove"): + if len(argv) < 3: + print("用法: add-agent --del ") + raise SystemExit(2) custom_remove_entry(argv[2]) log_ok("已删除自定义 Agent:%s" % argv[2]) elif len(argv) >= 4 and argv[2] in ("npm", "pip", "script"): @@ -2047,7 +2224,11 @@ def main(): entry["pip"] = pkg else: entry["script"] = pkg - custom_add_entry(entry) + try: + custom_add_entry(entry) + except ValueError as error: + log_err(str(error)) + raise SystemExit(2) log_ok("已添加自定义 Agent:%s(%s)" % (aid, pkg)) else: print(__doc__) @@ -2056,7 +2237,8 @@ def main(): if len(argv) >= 3: plats = [t for t in re.split(r"[,\s]+", argv[1]) if t] ids = [t for t in re.split(r"[,\s]+", argv[2]) if t] - build_offline_run(plats, ids) + if not build_offline_run(plats, ids): + raise SystemExit(1) else: build_offline_wizard() elif cmd in ("version", "--version"): diff --git a/docs/en/install-guide.md b/docs/en/install-guide.md index ae164ba..62263bc 100644 --- a/docs/en/install-guide.md +++ b/docs/en/install-guide.md @@ -21,7 +21,7 @@ curl -fsSL https://boot.ide.pub/install.sh | sh powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://boot.ide.pub/install.ps1'))" ``` -**Fallback entries** — the installer tries these sources in order automatically (no manual action needed): `boot.ide.pub` (Cloudflare) → GitHub Pages → GitHub Releases → China accelerators (`ghfast.top`, `gh-proxy.com`). +**Fallback entries** — the installer uses project-controlled origins only: `boot.ide.pub` → GitHub Pages → GitHub Releases, with same-origin SHA-256 enforcement. **After install** @@ -152,7 +152,7 @@ Custom packs use the same structure and install flow as Release packs. Size depe - Auto-detects `registry.npmjs.org` reachability and enables mirror mode; - npm → npmmirror, Node runtimes → npmmirror binary mirror, pip → Tsinghua mirror; -- Multi-source downloads: `boot.ide.pub` → GitHub Pages → GitHub Releases → `ghfast.top` / `gh-proxy.com`; +- Multi-source downloads: project-controlled `boot.ide.pub` → GitHub Pages → GitHub Releases, each with same-origin SHA-256; - Proxy: menu `[5]`, stored for npm and AgentBoot downloads; - Force with `AGENTBOOT_MIRROR=cn|off`. @@ -209,6 +209,10 @@ rm -rf ~/.agentboot ~/.local/bin/agentboot ~/.local/bin/ab # Linux/macOS rmdir /s /q "%USERPROFILE%\.agentboot" & rmdir /s /q "%LOCALAPPDATA%\AgentBoot" # Windows ``` +For a complete POSIX uninstall, also remove the block from `# >>> agentboot >>>` through `# <<< agentboot <<<` in `.bashrc`, `.profile`, and `.zshrc`. On Windows, remove the two AgentBoot bin entries from the user `Path`. + +Before extraction, download the Release's `SHA256SUMS.txt` and run `sha256sum -c SHA256SUMS.txt --ignore-missing`. The bundled `PAYLOAD_SHA256SUMS.txt` performs a second, per-file check after extraction. + You can also choose menu `[9] Uninstall Agents`. AgentBoot records ownership in `~/.agentboot/installed-agents.json`, so an unrelated command with the same name is never removed. Normal uninstall preserves every Agent's config and sessions; `--purge` currently has a defined data-removal boundary for CoCo only. Legacy installs are cleaned automatically only when ownership can be proven from an AgentBoot payload directory or marked shim; otherwise the command stops with manual removal guidance. ## ❓ Online install troubleshooting diff --git "a/docs/zh/\345\256\211\350\243\205\346\214\207\345\215\227.md" "b/docs/zh/\345\256\211\350\243\205\346\214\207\345\215\227.md" index 728a755..2a2fbf5 100644 --- "a/docs/zh/\345\256\211\350\243\205\346\214\207\345\215\227.md" +++ "b/docs/zh/\345\256\211\350\243\205\346\214\207\345\215\227.md" @@ -2,7 +2,7 @@ > **版本 v1.1.0** · 支持 Linux / macOS / Windows · 界面默认中文(切换:`agentboot lang en`) > 语言 / Language: 中文(本页) | [English](../en/install-guide.md) | [根目录中文指南](../../安装指南.md) -> AgentBoot 是一个极简、极速、开箱即用的 AI Agent 启动器:内置一个保底最小 Agent(默认 Agnes 免费模型),其余 Agent(CoCo Agent、OpenCode、Hermes Agent、Cline、CodeBuddy、Pi、Claude Code、Codex、Qwen Code、MiMo Code、OpenClaw、Gemini CLI、iFlow CLI、Aider)通过**菜单自选安装**。除 Aider(pip 生态)外,**全部 Agent 支持离线安装**(离线包内置完整运行时,含 Hermes 的 Python venv 与 CoCo 的私有 Node)。 +> AgentBoot 是一个极简、极速、开箱即用的 AI Agent 启动器:内置保底 Agent,其余 Agent 通过菜单自选安装。离线能力以注册表和目标平台构建验证为准;Aider 与 OpenCode 当前仅在线安装,Hermes 必须在目标平台原生构建。 --- @@ -34,7 +34,7 @@ curl -fsSL https://bit-cook.github.io/AgentBoot/install.sh | sh # 直连 GitHub curl -fsSL https://raw.githubusercontent.com/bit-cook/AgentBoot/main/install.sh | sh # 国内加速代理 -curl -fsSL https://ghfast.top/https://raw.githubusercontent.com/bit-cook/AgentBoot/main/install.sh | sh +curl -fsSL https://bit-cook.github.io/AgentBoot/install.sh | sh ``` **安装完成后:** @@ -213,7 +213,7 @@ AgentBoot 对国内复杂网络做了开箱即用的处理: - **npm 镜像**:自动切换到 `https://registry.npmmirror.com` 安装所有 npm 类 Agent; - **Node 运行时镜像**:便携 Node 从 npmmirror 二进制镜像下载(备用 nodejs.org); - **pip 镜像**:Aider 等 Python 工具自动使用清华 PyPI 镜像; -- **多源下载容错**:安装包下载按 `boot.ide.pub(Cloudflare) → GitHub → ghfast.top → gh-proxy.com` 顺序自动重试; +- **多源下载容错**:安装包只从项目控制的 `boot.ide.pub → GitHub Pages → GitHub Release` 获取,并强制同源 SHA-256; - **代理支持**:菜单 `[5] 镜像与代理设置` 可一键为 npm 与 AgentBoot 自身配置 HTTP 代理; - **手动强制**:环境变量 `AGENTBOOT_MIRROR=cn|off` 可强制开启/关闭镜像模式(默认自动)。 @@ -280,6 +280,10 @@ rm -rf ~/.agentboot ~/.local/bin/agentboot ~/.local/bin/ab # Linux/macOS rmdir /s /q "%USERPROFILE%\.agentboot" & rmdir /s /q "%LOCALAPPDATA%\AgentBoot" # Windows ``` +POSIX 完全卸载后,还应删除 `~/.bashrc`、`~/.profile`、`~/.zshrc` 中 `# >>> agentboot >>>` 到 `# <<< agentboot <<<` 的整段;Windows 在“用户环境变量 Path”中删除 `%LOCALAPPDATA%\AgentBoot\bin` 与 `%USERPROFILE%\.agentboot\bin`。 + +下载离线包后可先验证 Release 同目录的 `SHA256SUMS.txt`:`sha256sum -c SHA256SUMS.txt --ignore-missing`;包内 `PAYLOAD_SHA256SUMS.txt` 用于解压后的逐文件二次校验。 + 也可在控制台选择菜单 `[9] 卸载 Agent`。AgentBoot 用 `~/.agentboot/installed-agents.json` 记录安装归属,避免误删系统中碰巧同名的外部命令。普通卸载保留各 Agent 的配置与会话;`--purge` 目前只定义了 CoCo 的数据清理边界。旧版遗留安装只有在 AgentBoot 能从离线载荷目录或专属 shim 证明归属时才会自动清理;无法证明时会停止并给出手工卸载提示。 diff --git a/install.bat b/install.bat index a28f548..315b5d3 100644 --- a/install.bat +++ b/install.bat @@ -10,6 +10,8 @@ echo -------------------------------- echo 即将下载并安装 AgentBoot 到 %%LOCALAPPDATA%%\AgentBoot echo. powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://boot.ide.pub/install.ps1'))" +set "AB_EXIT=%ERRORLEVEL%" echo. echo 如果上方出现错误,请检查网络后重试,或使用离线安装包(见项目《安装指南.md》)。 pause +exit /b %AB_EXIT% diff --git a/install.sh b/install.sh index 3c49303..5727b0f 100755 --- a/install.sh +++ b/install.sh @@ -71,19 +71,31 @@ for launcher in "${BIN_DIR}/agentboot" "${BIN_DIR}/ab"; do fi done -# ---------- 1. 下载在线包(多源容错:Cloudflare → GitHub → 国内加速镜像) ---------- +# ---------- 1. 下载在线包(项目控制的三源:Worker → Pages → GitHub Release) ---------- TMP="$(mktemp -d 2>/dev/null || echo /tmp/agentboot-install-$$)" mkdir -p "$TMP" STAGE="${TMP}/src" mkdir -p "$STAGE" +OLD_APP="" +SWAP_COMMITTED=0 +cleanup_install() { + code=$? + trap - EXIT HUP INT TERM + rm -f "${BIN_DIR}/.agentboot.new.$$" "${BIN_DIR}/.ab.new.$$" + if [ "$code" -ne 0 ] && [ "$SWAP_COMMITTED" -eq 0 ] && [ -n "$OLD_APP" ] && [ -d "$OLD_APP" ]; then + rm -rf "$APP_DIR" + mv "$OLD_APP" "$APP_DIR" || true + fi + rm -rf "$TMP" + exit "$code" +} +trap cleanup_install EXIT HUP INT TERM dl_ok="" for url in \ "${BOOT_BASE}/rel/${TARBALL}" \ "https://bit-cook.github.io/AgentBoot/${TARBALL}" \ - "${GH}/${TARBALL}" \ - "https://ghfast.top/${GH}/${TARBALL}" \ - "https://gh-proxy.com/${GH}/${TARBALL}" + "${GH}/${TARBALL}" do say "下载:${url}" if fetch "$url" "${TMP}/${TARBALL}" && fetch "${url}.sha256" "${TMP}/${TARBALL}.sha256"; then @@ -100,9 +112,16 @@ if [ -z "$dl_ok" ]; then err "所有下载源均失败。请检查网络,或使用离线安装包(见项目文档《安装指南.md》)。" exit 1 fi +[ "$(wc -c < "${TMP}/${TARBALL}")" -le 20971520 ] || { err "在线包异常过大"; exit 1; } # ---------- 2. 解压(系统自带 tar,无需安装解压软件) ---------- step "解压安装包" +members="${TMP}/members.txt" +tar -tzf "${TMP}/${TARBALL}" > "$members" || { err "无法读取安装包目录"; exit 1; } +[ "$(wc -l < "$members")" -le 20000 ] || { err "安装包文件数量异常"; exit 1; } +if awk 'BEGIN{bad=0} /^\//{bad=1} /(^|\/)\.\.($|\/)/{bad=1} END{exit bad?0:1}' "$members"; then + err "安装包包含越界路径"; exit 1 +fi if ! tar -xzf "${TMP}/${TARBALL}" -C "$STAGE"; then err "解压失败:下载文件可能不完整。" exit 1 @@ -112,6 +131,24 @@ if [ "$(ls -A "$STAGE" | wc -l)" = "1" ] && [ -d "$STAGE/$(ls -A "$STAGE")" ]; t SRC_DIR="$STAGE/$(ls -A "$STAGE")" fi +# 在提交应用目录前确认可执行的 Python 3;失败时现有安装保持不变。 +PY="$(command -v python3 || true)" +if [ -z "$PY" ] && command -v python >/dev/null 2>&1 && python -c 'import sys; raise SystemExit(sys.version_info[0] != 3)' >/dev/null 2>&1; then + PY="$(command -v python)" +fi +if [ -z "$PY" ]; then + step "未检测到 Python3,尝试自动安装" + if command -v apt-get >/dev/null 2>&1; then (sudo apt-get update -y && sudo apt-get install -y python3) >/dev/null 2>&1 || true + elif command -v dnf >/dev/null 2>&1; then (sudo dnf install -y python3) >/dev/null 2>&1 || true + elif command -v yum >/dev/null 2>&1; then (sudo yum install -y python3) >/dev/null 2>&1 || true + elif command -v pacman >/dev/null 2>&1; then (sudo pacman -Sy --noconfirm python) >/dev/null 2>&1 || true + elif command -v apk >/dev/null 2>&1; then (apk add --no-cache python3) >/dev/null 2>&1 || true + elif command -v brew >/dev/null 2>&1; then (brew install python3) >/dev/null 2>&1 || true + fi + PY="$(command -v python3 || true)" +fi +[ -n "$PY" ] || { err "未能准备 Python3,保留现有版本并退出。"; exit 1; } + step "安装程序到 ${APP_DIR}" mkdir -p "$AB_ROOT" NEW_APP="${AB_ROOT}/app.new.$$" @@ -126,7 +163,7 @@ if [ ! -f "$NEW_APP/core/menu.py" ] || [ ! -f "$NEW_APP/core/agent.py" ]; then fi if [ -d "$APP_DIR" ]; then mv "$APP_DIR" "$OLD_APP"; fi if mv "$NEW_APP" "$APP_DIR"; then - rm -rf "$OLD_APP" + : else err "切换新版本失败,正在恢复旧版本" [ -d "$OLD_APP" ] && mv "$OLD_APP" "$APP_DIR" @@ -156,6 +193,8 @@ EOF chmod +x "$agentboot_tmp" "$ab_tmp" mv -f "$agentboot_tmp" "${BIN_DIR}/agentboot" mv -f "$ab_tmp" "${BIN_DIR}/ab" +SWAP_COMMITTED=1 +rm -rf "$OLD_APP" ok "已写入 ${BIN_DIR}" # ---------- 4. PATH 注册(幂等) ---------- @@ -182,35 +221,10 @@ case ":$PATH:" in ;; esac -# ---------- 5. Python 检查(ab 需要;缺失时尽力自动安装) ---------- -PY="$(command -v python3 || command -v python || true)" -if [ -z "$PY" ]; then - step "未检测到 Python3,尝试自动安装(ab 内置 Agent 依赖)" - if command -v apt-get >/dev/null 2>&1; then - (sudo apt-get update -y && sudo apt-get install -y python3) >/dev/null 2>&1 || true - elif command -v dnf >/dev/null 2>&1; then - (sudo dnf install -y python3) >/dev/null 2>&1 || true - elif command -v yum >/dev/null 2>&1; then - (sudo yum install -y python3) >/dev/null 2>&1 || true - elif command -v pacman >/dev/null 2>&1; then - (sudo pacman -Sy --noconfirm python) >/dev/null 2>&1 || true - elif command -v apk >/dev/null 2>&1; then - (apk add --no-cache python3) >/dev/null 2>&1 || true - elif command -v brew >/dev/null 2>&1; then - (brew install python3) >/dev/null 2>&1 || true - fi - PY="$(command -v python3 || command -v python || true)" - if [ -z "$PY" ]; then - err "未能自动安装 Python3。请手动安装后运行:agentboot" - fi -fi - # ---------- 6. 体检 ---------- -if [ -n "$PY" ]; then - step "环境体检" - "$PY" "${APP_DIR}/core/agent.py" doctor >/dev/null 2>&1 || true - "$PY" "${APP_DIR}/core/agent.py" doctor 2>/dev/null || true -fi +step "环境体检" +"$PY" "${APP_DIR}/core/agent.py" doctor >/dev/null 2>&1 || true +"$PY" "${APP_DIR}/core/agent.py" doctor 2>/dev/null || true # ---------- 7. 完成 ---------- say "" diff --git a/pages/agentboot-online-v1.1.0.tar.gz b/pages/agentboot-online-v1.1.0.tar.gz index 7f777b72985482aec39e175e60fb34d3e475b632..27a2f93586205bdf518ec3cb8cfcd73b2a3d60c6 100644 GIT binary patch literal 119951 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

I!vbDpb$XG>r#~(zpebGbzk0s_{W= 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 z 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 Suj=)SuKx!YB5*|jxCQ_dXmpDJ literal 112382 zcmV)7K*zryiwFP!00002|LlEve-y{H=>2;>MP(evGk6wB2#f_%t_-r#3m_hnlbc6) zQfsCqb(k&FGYA>DKVch?Kp<>`SXQ}G0o@s5^ z@qPC`ATiTh)u~gb&Q_<+=^Qq5rML3=QZg}Ym5frUXbqN2ru{EJ6Mel}$I?E7;AA_j1Ex(8?LbF}Qfo zDtH&e?|HuuYQN2crn>l-mw#6J)9G9P)^ILgG=J_sR$BipEpODV|K^P?O)uB~FSP!j zp9L0Bx$pp2`?U|9`MHI;JJrdrLTSq`B|`;cER#3Vb`q8rU<#I<{BiI-UXh_+5$TMS z2b1g8CHYo=e_*?B(VS=!k(Q>Gjq#>U@%2s7P$(|oCFk>Nf(S-9Gn3A-yUyuHwWm)( zX{b$Kbxxlb1AE`xH}LoIqXX_*7v-Fl0}O*ovBgSv;6uLIU z<>IgjFTC&e<(#?h+&c?h)xJ39JpI`D_FCo9G3W=B5NB%6nK&+7>J` z2IuPC>fCbxxO#h@e-Nb5cKK56KL{FVMUHFoboI%&Z`4=jpmoO2;@4A^a}V$Ln={Z#W&92g1G;D4&OPmh39^Or@Ycf9 ztCb&)!aJ24kDTWpEX;oa+MY9g(V6-bBmxffi16Rivo}Q^rPJl)XRJ8DX#`*HJkZN$UbI;CX)=2gA3Z@h1@psPj z{mR7~&ixN{Lc$r~71X=EGv2acqo`asT6=n%`+ymf)XrdCxmKCK44v_$IhXD(%->pg z^gX~``SirX`~&&&^heI44;CJstImH?xpoyO8z8HmxzGK&WGa>U`D4zpqqUhwVtZfT z?p_$KoTG{RzLw9PfxaXWPQPC{f4?$$2T+FSc`&hf=}YnMo*ja%gvxh!onyBEOl2;d zT)cEvw2Gb9TMPo=3Z@R{T@0GJ)X0EXy#1+j?}9V`p!WQFZRRF)i`0GW?&1e`#l|L> z%CE%^D_1@!s@HGTW{*2_pHyaksGWUU{r+?3$$8=}NJB2g0D-|Gx^x#1$eaWLJ`FPj zV|iLR`Z*wkL6NhgW}$ioX7@zp>fGY^Ssu7IFEk@afAKglE}$>K94}T_#K(_`ot?Y7 z-|p(|6HMyP#0BTX9P$yO9e38MPv!uiNNNnA?4KQkD zMfK7%U~A6w!^({(&XZ{vZmy8U1pqw(rk&|8YInY+p+u$6pG?=DeF6X? zzni~UoB0x&$sx-=cDnZcDkKlTZT$}-x`v4duYYd1Mr7AFXs%K`M&p%jr`bp)Baez0D0|FVk*qSlQKu=qNs7R=%&4cjo z{~R@Q>K@`yd;C^8ogRbVJFT60_p=NTBm4_9@Q#_aa+cV-qZ_WRw=?-s`Mc9fn?-l@ z&XuRtryo`4ufkj{j=%5BokPWmB`mEWkg(3giOT8E1uXikRV?P=-o z5Tp&AVf})~%fz6%9A7*)qazTo%?yI%m0}ZscOVdcTgNQC?VSAv00frfoH+%&&!v&A znS41tlrf5?Vi?4=K7s)aq{_vNh!5GlJH$w-RIuBUNu1pT;381~8&Rr*3425w2Bs$! zzIUwB_VS?8OQT2Q6*^ivrCzXj$LF}f} zaavzW>%!Ih5cuE?l-$RsfE6x0KIMG*De&Kg`T5F+9=CGtU0j$ugNuCPp;|dptek+l zweaY34;s~!6dD708@eMc2($rM?Wp7r6wSYst)hvKCUK!Mw}V9v+{9HNs^88_MVFQZ zz{&LP9J}hwo#*Z(4+dFLIsZMbW*2!d0W*s?9{}(NOrY!{S~egU#9LNrE07BDmn*2i z(7L24DF~2@AaLLrU_q)O+!&9>zaXZh%ps{>yLoHz=~=;a#EZq5nF64M)X3dM3#})G zq8;E+KpaVpYruuZH3BBsQ(Z`}@a(O7H{c&Fpg->goafN7ED-Lbns-6)Jeu1!1uBVqAl6f~8G-_|DohJZbpW>EKZ zb#B|)CBROCnR2bR%G3$x^aWl-i2k=b|EDf$6}>(D)|tD#@B~dSfUR#wFA&f*6yTuJ zBkm@^SgHX+XCK#QKLaHUBu4crK!01bwl-yLpJvVAxN;lNhWaR}&^XEu?p5&7=L>U} zE3@BJ?|jVfgZ>UC0bmQ>ug+ZHMaTq#Pl4=aKZ7-~@c0(vnlFqMt>KZ9h@_$dtsJ2gtx#w;2s+EQEs$)MEk?k;8ypkEMI%=-(=jnr zG)<8o5~&fRIBdp5DKCuNm?)S<8$QSnmJE<~pbi-#1)YT8&C&=oW9NrTqo_w3xwJ5B zJD;+^B20^PK2^>FWf~>ykNAd<xSu?v-DJqtr>-G%_J8C-9ki1mX(>aJeKv-zXKW z6t)o)RxXt(lS-x@XRNFxd%(|W+_`K9{y|M0Q&!)CZ4@!93X8DR*LX`4WK2Am9WPyjhix z>=E?V4w@2S&@Z6Z(1ugQ?qSvBN|uokg?y3vs~=_p`rqCqdVAjP`$OlRF45g9cJJx= zefPGmZ6e&+3)kV8_(ON!_MUh91iZ1Qb64LVMbF!!bJrim@49zwi;1p(+r6i&w^#J+ z33cz>y`#Ge?sf0ly5rq#-MiiqZ^3uFdVqSnfrg>cz8--c%BH%zda<#cU3+j}qp$O= z?j7BIe~g9R?(W-#ZNA;JM|6taoqPJax4yfhbC1~l?w;K}y+acw!`Rxht8Win z#$c3t`rJ?d(B0b=6P z>+0MAZS~^EI7Ibw;-!%N?=JsYc}q4QuzuLPyW0Z#S#q7R_^4VC~;eKj|(zvS?6 zucW6cKA0(+(S4Cu@;MWfl57^FSX?@LqSz+^Vz1C6zZ7q7?T1#a;XF2ImkTJzOzAGM zskNQ?w3%6RVbb>qRSlHrbpbORJ2xTQ@#}ku@)bOwsO#l zRL-NJP)`oUIgK5~zZ^a&C8&< z&ZRSEbaTjn7twi80&EIpb#XKBc4@?bw=<*0m@P*0#r^hXc%3}>7AOZcXi-A?9N=XH z3wniBmCwehO}JTr=FqdZIka`e${F#TS;B^dkv0k?+z&u)OzIDV`GX1aioDy6iU)pR z!T>%NHOvDtJ~9ENVyKq91y zp_UuP)w3lDixO60JRYZQhaQjI)qG=*?3_;uS}XY7z`($uVUL8?=z_)XusyYH6xp30 zHH*Et!xxp!7Vr-3`GvfnBEBoXyO>9?MZD{vnJS|qxH}KJ@R)dOtN`k~h;Nl}hb{A< zh(vaoqwyZrU3ZzK#2?JTtr-jO7)@-;kLEDYs29}g+;HTzWg#!v&96nHVTQbKG_O{K zEsP;xVG2v210NO&g2Q5Wxmdu(a5!`rP)q-Z=U%YFfWWtNb{+KaQVsiTB;^AfgoqEJN!Z7$_+4W^O<*RD%f4TfwW6T3@%0 zj4pP#5j-*Ro>@d>so05VL3&c%$ag-%!{uvUiPoy-`uJ33;eM$kGa zrsD;pSQ^t9ib4aBtKQ3fB}dP zjtMD0Wyha<51syA2?&KaB?PG7J-j(=s}a+-+Cdg3_@Ye%L7R7^m@f~HD7r|3%HgfX z%{=h~d*9eMAQzs<13eU(y5WMz!zyC5%CHHxw$wHV&>ydzN8~W(nYswJ&U6}m7eE{s zdu)#7$yPQ&?HNX+e+2qPKGv?Rck2Sh>Fk_;Y0U%keV z=|x0QXFGWSZ^8gz5|$2}+6>)iVb)-;;LI4XatI!DfGf&|FN!8PWnhr7tbtVEi{HJ) zt`s8&^Bhl`2apB1PGV>bAS@Pv`Ba`5J8w$CFKvg9@X~@U%MED!A`ib)@EgBU zzY~T9S3h3;guYl0zxC}*{Az@*2fQczdL(C>ut-43iPER72p|mtRW5{&_m0$EuagZl z6uBAhz7019@dkd;hg^?(SKn+zq3hoX#jgq$zTRcP+@!4xZ6Vv*S8q`7?jAiug_rnM zXAU_+0qD~EV3Wicm?F$ZH0TZvcn>8Cn71=KWh}f2kKFx#{PHiOB!@+3#u_vRjitYA zZo)OJ;sWr~td*q+{x{2j<)cB_+^i-RcLCMJ!tVk9efNDN1Z|fPz8Iz}eE*$%emJ8~ zPcssMyN!r1TSIU$;NI0<#Yv|;QoLv21 zI!}=$Dh8Pl1JKuiXxDf@1(8dOBhAXeQo2pV7=+cwR53aNvtmMLk{yH2Ws(52NmVh_ zUMspI(*_80n6M%m0V!a{7*ka!0F3DH6;|`69PtZRcE?e6qm!7V8hT8X25k(A75}`# zJk3av1tV#LG%{v09`B7}duS_%!9IpzrY(CvFliWV*w-FvY4!;4{*qzu$8R#EYgDe^ zs$M-+{btsg{=zwZ1H-EtK>14*g&u!{K{`rZXW8&a`*%i}_0 z-~2k5V)QK|WBG6E^deU4WOeaa*1s<164Vjsr)L?owE=S|A-{oEXv#q3!@?~ZEI^W?1h9ZI z5A&8U0fjs1$I6C%(r>5dy{$%kfTYh!AQz)d&Bp`jI z%*4?RLd-R87t9na%ape~@k_S;_bQ#svudR=3&?d1T+OVN0ep5ep+dre`Jm4qxPsgV z0g7j&VXy$MEoDREHS=QD=7^QBZML=BGeUrKWMeqNw&d0#9zTF+%jX7IxVvf)znmbh zkzS>iN9$fw5%WcDjTe}6Afrf<#Znj(z6c683WB9i9080KET+zFW(m0vnE2fcA1gNR zlu?h>KLLEC-^O=|49I-2aY?LOSI=kA zodaqk+>Ey*HpGWAFt&lHaNRk`CN-;YGlp-m;>J=DJqrZ@9t~30`~W?{-~|P1%*aS< zS40})2BY=%2z5YRwTXd$Pin`07=Xl|ZJ6B6Ql%uL7riBIL6$JfiFaL1nCCkbLdbn~ zJ5q}DbfGTY@CgtT@IBBVNmhY?)Ome?%1yMm^phCs2Sg7p4;wUaH12y#e4EM(dC)=U ze@4d6OZA?$MOT4mTJucxq6y>*Tu`-$wm=c39ARM8f?GLyjoJdmxSWGkOgpN|ft1C- zT%dF_WgtF)M~)b@wuB8+PSQOArXaBLj0UfQz1%|MHii31*v#k`nq!h#lszks4ERXD&Cw-C6E8O^iDW zYbZs$k$4>`F3gp@?!D+_=7E3Q*vcVDpY-T|4 z8Nl>V6|kgD2y)Rb#Y_4901T2r4hDjTk%0`v9;r97koAIKHQ3rp>yMX-8_pIr7t|E=!$FhIiyicF>t^ku7sbhP@eRBNx{{ zB0V98&mnkCrv6{YQf2Ppq<@)FZccbKimKRxi|k;-2ZQBUcbJje*eF@>5Z5B z|NqbI|5vUZt|pbOAK*=nRn4)a2sTaUAdboc0XQ)@sM3_#_xKM!0ehO|4t^_wo0u=cg7w`<(I3 z`W&6S!}jO-+z>W*d2f)$wuBz{_wn)ncnJSlw~o)8a05SMGyonrAW$)s|LR}qz`>+A zEcVKsVK+K}BCw*3VE~N;|4)np03f|E008vALLdOrI4q@S7wAaymw2*V9)Y=xyE%LT zgT>>D=k6{W2C&3w#fIaFD&GK~q;*dyE^{OiE*lT_=v)3k@wD3N*4mHb=g^h2+-cCj zLpK}*z_i1ste}JGuif*MWSHXN?Wdn0jZPsFKlyrL?uvUbRq^#Zr>gT4)pOr2JiP%# z$S7Gnfv1a{hu=EKzk@NUgR*>%rZPTXyEC!O-oMU#7?o<@A5YckjEY%?bLttqiHGFw z9L2-yH}4XAnqrPE8Qsk(H0fq8>+t}A7?l`rJcFw?6*wn?d!|Xps(b#p{)jA|`k~`3 zc$k^qt2;NNhXphqpyCZ^K0-xjoy6;6`7=}SLPMy4eq;)sHy)O%j}Qnvo*En=z_g4s zPNz>PIzaeO?p$%MT&c{RmFWd$9xtA|guI=|p9xW}3@uy$goqRwo1 zl4K<#$;-|;{&Dq#>!^gV%bBGPoo2h@W+p-ZFCKrKnv`d~N#kH4}bEIm=ZZuhb(5cvUhb>jy58T<={(g3^v%>fr=>5*7_G8BV~EEfr4ysF67? z9vy>esop(BXXxZ|hCY3tWbc;P&m1O8c;SOEvb z*(-=#ka<#O1UKhJW8MlGQ?T&pT;;+Im3!jUlggP}S|kCernM8_^Vu*rf-v8sR)M`jdB3Fc@em+e$@FzLLb%|{BT&fr@4Ve z0o#!0j3rB3Lp;QbMMS)4OoZ^A9asEmZDA7H9n7>bGs9=w;z(G{46q!t9N}N7o@AqTm#gr&$M*~geAhV6h!XA)AN<9ld3rY zpmG(HDOIn04^pA_@FO%@y-ihJod&Q-61peX2RM3cK)AXZrduKr<|$~w=~lQ8Rtw1v z17!&t@Lb!>L zhQp)V^(iaR=(%$rlSTO*Or+{hRZcyGj@`swGHuOS$?Ih9t^u`0C^xUsgFuvIyD`S@ zBTgM7V_z0;e~KB8Dan-<^pf<2ym&SUgT$``L09g759k6?=9FQQ0my8FM;l^a1m=Td z+ve<<$|UmIg(o+NVtveb;puZA5}%FJm{`dZ zQ@r$mnLB_3e12^4<~%gy%svK_Q8pyglw4uqR=NB>u6Qk2;_j*7j1A3s^QW&8K>Q;plW&^S7)Pz9F!_p;9)^17(=w}zG! z0mN(SLTe~p(j1FR77;A&lrMpeCSIc~IhY`ltO3bHa%az|%ulyS6e1H;5=IGLm`QhL zTXAM5KY@V+dkthNDH@M7HT{Xe)Hj%7#g}n~@)|XS_4r%}f%#T&!k%AS9KX!zA$bVW z{Y1HgmWlpxl@85o77Fn?^*Q1e$0sYNzT%i3{pA5%?h~IfmU$77I`Q+y^yryN*A&o$ ziu#2I&cqGOHbj;Y+x48Aus*0q=ICQGrUa+R)hE8;{G{ZvKaHH@$_*eq&a;O8ntK;< z*=ZS0o%`R`W@j;b&X=DqesI^#WvUbzVkgsIGgxf!dujA2r4c4k^x$G23kC2X5abfj z9h;tG;Q7tU(OJw%NTM3L^a6KKTbV@b8z}-&L0oZ`F(jqqu?ISOC{e4%<4|j(2dwy1 z&wcBh{c!Q-W4t7KhZa4c8CTV*tC&!YMhf6mF5Ib3PUtCKS=R=!#;IVT(S}^I2;U?& zCY@V^KSjCRKc(ILkjT!P&t&Mwb60;nHxB<3nvXr{USK+Wb#BDgJ=sV+Yyn7DKRfxo z=6rD*Ol*Ov23K}zPS&@oA|UzCQpx(H_l>C_$#!#+DJZG9zTPySr%1Yi;kf$MGLep5 zSGBBxz0Y{ewwtFIcnHzEK$0l$*Ltf(?nbCXiG~ zsi7QRtio$eQUr0*r!V<3*>S=t9oKH=JohWkb|(|*L6`bIhkwv@l1?@7%x z{MDy_V~dX+NzlkS*@(N%@2YaF-$}h%xv?m}6j^`TUF1T*bDn+zOPVby)KmCUrE;pC zx$j(^gO7oAy0hRMf0%TAY-E~&p>z^es=waU{B-0CL}tO4u=4#$t*)p%x1T!4zr*x& zkd-%rh|w@V$B9nVjbf7#J*ewSe86V4N2S#6;F3m8? z^}QV?p~k%+U9G`RUtCR=@VMSqXx#NRdOJ(dBV}fW-0d7DTUcN`52#lzE z;W#&TS=VO2hZT)DuMb6YQ=-)?V@M0Uy$&`uSYRY_)J`h$V%{#{jVHD%F`f;C*cr0Z zNfb9k#-ZQh9xCkvGD2=Zs$wz(u6pm&>iJukB6#Kpw({KU)#yKCyPeEo1ch?;f{BWW zUB^F0@ht_=QOulucD8yCz?zi9kk6^7LN%Ef0eFiFAn zp>BGPYd6@9Qa-w&Z0xs`R^8(Vyer^lS(dvSq{Q*YfbwwgZqgKQ4=|vtg(Nw#GmCYV zcK2oA+E0uB`hC})-tL}VzkL2TeA^(}Gb_ySWT7>>O^kJR+sxpZYP8fjn&1~(5htA9c z@jAO!{$LLJ6Pu%ErfngD%H_2^XyqE=%$i^u6Z~u$)4 z&SczsdBR4Zs`4i#fP8jX0zXQLMf8x^-tKni!od5V&dJ% z>5teY50fZ${n_J-AK!vY3NoUSEWQNV;eCXOBe5W|Q?UV!q^F_@f(TEGC}<=;=gBzQ zO+;^$-2KU?U_`kdmcDnpgXpRe5RbNUg{%f2Txjpdbr2-kgge@sH-%TEi$bHnDaX5(X{5$h?!G{z7o=mWd*KN;h7)1&1$x1RJPdrl6 z!sF{4KHL})0_JHz2x|ba;xL}n9$A(`I3lExKJ>_uAR5_T_njgSy<7n9YoEYyMWhq0 zcEH5K{F&ga9WzYyXyQEO(O6Jofh!8 zxRFr=6a>eL?1;VB)i0kpQ*#uOP`P;vZS<*QZq|H`wUJTXK6b%IUG0ba>`DZjl@AC> zWv?ScOG>|`dQO}RgU4?lWg`{Cp4b&baXk|ZzbtA7uwjJ;@*>J_b$2)JFn? z-@nJ@k*!-1i));4JQe{&9tf31{&IjLXLPJs0@Kt=>N6L|*<6llDflQro~i()Ad21U z|3)KNfKTUQ!i|>&BO3WL#T;;$L9+JnBYvE${4ia+GeNoi1LUZ`v*n4lel%-hb1uF8 zzL#TwD$^eWpa44W9n@wYawq^h68Nd}=zZtv-0~<^@mfJ@ix%4zglZYy6@ctx&uTNX zT5y3$rq6NN8^XLimqHetb4FU>no&-1_*<~~Y# zW8>hlWszL48nIg!0~dr}e>7Ypn)z6gkEUU!+*&KJZYdoI3J1yt!ihno7k}}}@gR!U zL0tj&rUWleNimZJ3lR?kT81sRB%0q$G_7G4(2=I1|NMFwJJry4DQn3fBT`|bE(_vs z>5k7N%gV&3yg#pnXR;d^CRWuGnqYkkq?Nm;uOc`X z9-ZbraBgMAX~K=}U?o|P_Y9gPey4GY6hzwm@Pc#|p+GKoaMiPe3ZLX|2mh60N&|V@ z#x+dL3aYFORVd}N8MIH{+11tC-?_WH|94$~4Ax>7Kb~B8IxQn!VV0W`%}q_Oi|U>E z#Y74#x@xqKWv;4*tHoiWNtrvq>G=jBi@^QzI3>wXgt?L!Yr)PK9uFmfMbu!w{nZCGq zVtVoNG^avQH8X?gNE+jW+@8*IX+$=?`1xnf+-;2P+Sb{-y>~10pa^o=3B(}j#<_Fj zsDtK?2B~fzY2GQ ze-OHE0{>etwzRAlhYt(5(VA%9kZ6J%8{~}*iM1&&Y^T+peE{5!{5mi;>gIKdQfz5` zT^`?~eLPvEcm7!I-ficjlMC~wapU&>XSLb$fvOGWd`YMgp$})d>Em$zxSz1(1bTu0 zK~u=#|BVwUj|Iq&{rZVt|C5u&Agp>V3{(5bK)?g-{8i|ZL}?Omsepj^S?v;_GY-Kh zbk9NrVNgF35wH;Ws07l#hCMXI*=ukGtn+Km^eH;M-naw^s8u7Chk&l5fU&$7R(;M5 z4zGT63U~A$J*r%|fm`Zy?r~Yn(rJ)JtakcuYXVjt8fnBPo{&8Dh_U&JGy9nJWN8+$ zTO+BLJ)CL`&JDtH9e^H|p)Kz=UZ|Jj0iMJFZ@7!yAtPfi?OqbTHihe1(mg@SYqLJF z>2+inI7~2$P?2VLHHE&&FQ#Oi493(>9m8y0W`?m*x%xF@L(LfccVFm8=)e8`pB9?7 zt!wv=opBK$c za*JWxW(iLav$gN7}@`lgSSn8G7$`=9nAAOfEiF ziz$fN9tq_N2Ze%1Wb(sS&VOrkByVJ84pi4QTsboVkT`SaYA3#P?tjD)XOfz1(JK?g zBck@?%a~8iIev+ZAQ=cM{#PC=yU)%$)1SI$1L)`so_Cq3-o%56Dza8hFg7RaML+x- zzb#2+K!!3Qnw{gP`LK;TAAp%r(pnsD$R5Gk51IT}LM1^NaIY!kwc&doLik+~kF(c6 z_$O0lnO!duiKL1@retno@r-rAjLT@wL}84(hA9V?46uUd*gm_7K5QyVT$#UFd+=Qa z2yy0uJX8d>!O83HQj^3hYR}I(SFTA!l#F3KG%p77``b}{k)$q3(?cLdKx)enmxsOz z@z5s*!k+!eYnYqjG%J zMJh75HBV{zyn`c@D`1)V$Wmh9jAfT#W>B9JxbFOKs!9gFH`Y2|1c+M&{p=ZB*_;pI z(p{vTDVWSpFao-cGzEu~!hoFH?_*3e9~t51{FLtMIj|HsDAJj@&*!Z;v^NRU0d&s0 zSls)n%i;#gf0zD$KKcK~h7C)`|7~n-jQ?qR8UOdo$p2p@LB~(RD$;Vk1?U7aZwtvK zm9S*OFP8AM04BqXo8=Jl*zm6-X{$&}EBx!Ga5NlJIf&y21g^vmAhZKXGzdgX$8Va^ z%Wz1TsgbZu)0fR()Upu&`{rU0u$D;Q1uZW*IWfV0i?;G4hDial!uXkCYNcqEAx*b=Zr62tEWG>-czRE`4K z;ly#YvfR@~UNfwm)?*)=agN?{<{q*xgdgx+z}&4%FcY$Q@B8XqPEqE3d1vv`adxla zrr7kX%;hojeDT5zCD6K#1}0&>Hv5p}0fRyZ{)p;0Vrxm_(nuc9Qh$7py?b<4`h93C z3F0je^C9+h?d}on=q0N^rWM{SU+L?72jAc%0`A>+w)gMp+5ry+0%C=JeF)n<;-2(M zs&Z@a1e!ZCusIYm4^q7~Ron~xiH1FvOL1oD2*!Mwb}1?yjoc{))3uA7IV#@WvqQa- zfVI-G<7(Wlmsi13H)FjzU? z;i&89w;d(woZ6Sf)uZOjgq#yrvr4x7jxg z@-^5nh(kxz17p+xU1WDLpS3`?!>}T1tck2qi15@cFoLG2t8mO2EdBz&Q1@7iXO>%@=`*{##S z3^)lC8dm;k7n~vdGG(Mj%r3VGlXTYl-#rrDtX(mR_9Be?U=V6N37GOy+4kN%0&Qd6 zj7UGwO8r+&o5}ggtw;THkl#-a)Xep?mZSsQ!UBSh>~ri$qW?*?$0r7YUOD3rFiY1sM(Pz}`^4yt}7+Yd#AE z1OzKv$XLLQXRI>c6C@Vnb4mTfcWOK8&|lr2DW-3wVe>5`GU>-{znf&0PJfct;98A31qS zw6r(>;~`K~D_F55@pitPOaCcHnNlw6>Lu=kvmPhqJu7Ia&iyGzB-u)E0k;Kl6OvNC zoa3@Aeq^QCP1ZM7Fk{TM`$|BeRt{zXBQ4vBWSO`;kqlJ3oyCMy59C#3wK9X?L#(Ne z6!~IdkBGLS^Ftu`$?1+8bjkrQfA7NbcRNuW$QwKJX)1aV?}c{F@V@#*alpuwkxQsv z6H?eE02jR6b&f!9N9zWhu;r^UZcQVYBOzTH*GXc9aH(DeOUYl=^)+JH5jpy(H$6&> zx{})e6+ZM3{40bdk>9USp_AVLCggLqVoZoL@#{nMK1;*P`N2Q07ViJi+p`O>f!dBWG{#>_X&7DWcy#8CaQx&^F>&th ze5b4be{Dw_Ys;@NIUaN;MoQUCM`#QFLq+D=f$hh)?h4~Q01^HH1=?@{2r~rgHZqF# z@BzylMdK^12(LXnYNbmf?OcI4P8Ts*Dlu-SjEvddjBS*xQpW7?gak+jUoMfx3L0CI z{Ee@F4D~=w4-ag5AiP+K4p`fPMIr(+u&Rm_T}o#|MYoUKuj*@8)=X2rim8!QVl+$d*fHy6u%Wn&B@#Oc_PE9HKvPiB?RWx$&M(a@PMsvevdEEk^y!poZ=8f0_p1B*;`=C46>kxc3v;hg}U$bV~ zGC&sqg$0NgUdiN(FrgzR=>BP=xIc=3^9UIHrlF>x=4J`LY{&)QXokNY_&Atm!v(+P z4ftz#mXSLM05CPQNgu@En=R{8`XHK`n)DG!OdNqBtUENA2lK#s4+YX7)n|;uog*P+ zJcovWc;Z7w*2;{v*<*Ie%*M-BERGA(jPs3HcsG3dHr8Y8-5QRCcUq}p-p&t|#2=0A zrWKCaM$V4g=-`&H30{)XD21xXuCxwsLJvo5|uHF|FZ|Qd@K4 zjST>GVzg)!4rPslypr19+|*P!=zc-9_BI!cG@i78%a)b`42Sv4A$5CWYvG`10u2y8 zbVpq(<+E+g@W9Szth8WYu>UCZiOhiU0mw4jnp^cQn?y6Vqz{7T6h0hj*1l@3`)VUx zX3SCvy0;5P3L%RpHW0kcA~AeOLlwed6ysQ~3#(v6-fT*n!!e0KocO4I(c&6A@lkVd zzg3ERO<_=5p$&z^=D?dgiV`#fFkvk}7(LjxhZ;w>S;NPhb@(sN!YZvJg+GTvDvgt#GyiLXD+o&+7 zb-)Zj5-)83vXRSMAx|NPD3fVHp$I`1%^UqVYDL1^jAdFW^6_9Bts@B}HX`X&=Luyi zp3Ud-NV{eXgfEQSuw(8m9*{_+B<;NNMmoKID22E4g)wiS#vptM_}`59L(~*$x#KTw z=&!6FS`YkMj`@{zEBxK0D5Xg;M*rYx{;Zs0Ag$WuVe<`yf|sds(S{BRd8#ZZfo&T> z%;*d9l?^TMcMzTr7p=5Q-FUGX{}Tu1h;@eXs8FVy&Dk)Y1=A=+sEG5BRf+*%z{Dc( zPo%l2>D5>Z^08>Fd8i1hci1TSm<*DPXhLXUfgE~~Wm88MEgCA27Sxi(mc*bt9$uyl zgyNBPl(T_Z7JrG1S+edrZW*-NO2%NuJj84qaiD;NcQZ!8Hrv#X&B3gfD7k4VF5)AJ z)nTPcTLWz)Ryu9w0LqbADecORHx=C=w~SL|w6=^nR9c-NDUB>Oc}wxvQKsFEO)&eV zVjHZmQam++HLd|Df1gdnss}T4tRFC^2}#0k{pwc2!M)F);V4V_a%$uVSdwb(HgDL} zv_9PcQX-c>6g0D-{F?o+&UnMGmjRn8;K}YGi_WL^N`es+hnT|us|F65Kbq6gzTtkGvkj`1<6L% zOP1=VoefC74Z019X2r8m9aRf!C}SSnOw<#%fK}LSTwD*^{d3taVLX5fD?iau|3;H< zeenXspy;2%8fe(9b#F+0qH(;NbOwU*ffnY9i{8Id-Her5RRR!$VHY4j>{g<2xgBZlPu^$!8ZW)Yz~5<=noGjQb%I!;+n z(I8K}X=aavz}h(U(=~!dU7(&hG-8bHoruR&HX_!ehkQEjdepZ`VbmJHwRj}7B`J-% zElFuiqm=>wV2Q~TFg6=3Wzg-hz~mOz*gIfKw~RD*Y(W)Ly)zv4jAUpNo^(Kq&Gc?T zy#x@1J6_D_)e?EGP##gYdAB4B1c5dfR)51CM3*##4&LWgP}6@owGKeW#c$w;Os?a5 ziz^y(K!SXrHOuz6f=a@pf30oe`yQ|f&hbgE3GRDiXLq01pDa13BN{EEaL1Ox4h7p_ zhd3;@7-9s>;`XqaONKjS1;Z^#ql3`I1c1{E6W!8*^_g@}2Rv>;kIVWFU)mwKz1~kP zpk9Xkw2=yTtg)`4Hn_nuh*7U8(EGwv?>(M^tF^Tn?x0LZ4*(t1Xotic4r+-CimM#n z|4U^RSBbk91o=0ADd$U@{|Rt&!%I$)HUlV9@x2pxI9ese)sx%8B)X)&sx-IZj^!TX z3ZYEW{-7KiOG(l>GUwzC;A3t)At(6NQhm8KtMCNV+%%pdojc3!`@fIBuPTP(qWeGB zFOOqB;L5#QxG^w!O0K$mMh%{HC*odPG8V3I<%jg39faG(4h%~~-sG`MbP+a*>Ya}{ zP!UtMPk)W6(gUhWVi35>>I+W@Oz6++mg^eSB^y_LZ$T;7;Rb1Jp$*0kg_?g-InDqW zRj~nQ_Hk|YvpVPo>%a;srX(xt!Ak0AJT;E(EmgqN1!hY!pHUq3>Rnl5Q_iYJ(`cQB z>qQl+D#XR9@@8Y*&A`IHG|EE9isd*jYZ*TNK7N$)NWi~tjsUDMA@i`w$CNn+e&a!G zyoJgV{JYzt=UekXj^9Q>;)$c+pC9?_i}l2{u6cR+~0i+srO$l{=WO3|Yw1FM9>3o8`)fH#7Qe5?v;Sw}R` z-!H*digU1ep;8et**y{Ro|6AiQDRXd_zNxt6el;5}(xf=%&(I zeP^3|q^ak^3c%>W`VRSQNutv&(crnxVgz~%}onb z*E1&NsqdMy1g##w&CUL`pD{**);`^C#I64ND*E#HjF;J^t~buAQr{P6Mp;8o9*=Po zpwx9lc}D8{(G#Mqp*N4SQ2vj)o(#TMM3U&06WZAQ%&5VU@ z+l8Jt#5E*VS$UR^Qv?^s14TiWW?m}K7F$eL>dLdDYQajH)Poo|uPgfuRU(NlRkB?@ zlKK&qZ*MTAL1Xm0*ht_PIw}`#fJVWkkpA)H`og0x!9=b-oCSk|9bx5+ZeKT4t>jT$ z_LZ2F=NwmCVsa}c-wUWIDKi%Ml~cf2oneaz1m#LinFPp(JEdu{B^P>D z1tpg*8L64Nh&Vv7Tg{Vm>C}#%1AJq_C%&W-pS7p63-g$|SD}fE0K0}07HOiYc{tWb zw=w*Wt$z7ASDAk_39y1O!6~VHHACf6ZY&(yh?c-AqAq$)!%%0Xo~cO7wfI)7Qz@y= zM^Z~Ij0sLi#YK@g@Y5Ll3FRpRsK#$>O2P@OJ$Z&5Yg4*GibatwPopXR`86zAD2x5n zccfdWvJ2@<3NUBYXs0-!-4YQ4WPAd-GClOLqu`D9&{vT%ofgS7Z1eQvIguF(tkf&i&wb75t_ z+wNhsp&eJN}8U+eB~4@kEab-1rXKe{R3LzgJ98QtA0r00MG%Y*V|UeT+e zSHGQ?b}j4=d>zm(15STD>!7RBz&WFoIo zoX=~~#8AH2Wu!(TD)u=tNMW3V7%tvfDiy84a> ziBvRE8ZmQ``tJqqB#Tn}U;=lhW!Us)-&Ol-nEQsdIRt2Auc<9^XtvMFn)z}`Z?*nY z`tG$OF+9MePCjsmKL%36|F2k{E^6B$`_R_egc9J@XrOOkhPm&lMLF zln}x)(?V6~E*Po(@E(G=b;QaU@tj%0^UuOa8-)^uBP3o%P5&2)n(j4+^QL&WI~?1S zAIz8XFXNBf*;H}2LS zlbc8+!)~~)49WdTan?T57gL=W=`kR|c(I%dFoZDz4)ggcqq~$BuH}o4Lc0VFWCd4} z#iyx}eBL(2P%)oP{FB41(Ygj643?S7ofQ~t&9M2t?2)Fr97;p0bv8RN;}yfK1HzCWvC<;qg-SwZ4K88m zPc7)dF}0vKlgqITaEKHT%%CakQL6-;i8zsDnIcjbSWF)YH^w5GXo#im1Lg{Cp(3?% zD0R1tx@(A~?(rC7O#FLuldwUM=F;|NV40aQEe6jj*=A;lT!M%v+;1&`^2e-6U~WQ% zx^$v$(+W4Y=%W)f*s(% zEo@3{g+=LYDsY-uW$5%yA2|YQa{zeJ7dV|SmoN<#(NO;2X7c!_6@9vdyg6ulIgj7ibwy@Ui8X{tGb3!&78pu&i=@pGFnF8M!OV-uq9I&bt+u4-vw`W4lnsiQ z2Izo^#+j1}l|Ga>>=-f{GfrDpygU=D44M9Y{iell6xw(>*9A?}mWCif2E?6FOCbq5 zW76X!b~eA?6quk7P>O7d;-$Gkxsw7t@;-{l6IZi}Dy1FzmB57eaP&PKs+#&N(PoU%(?Bc={VC^8c{i1G_oYN1`VFE(Ge8y1vL7L z2QXri*-lJ=1rG}a_pWRo&D)w7ORO%IdM6;eT%_G5STKkU0~U-HRb4d8xUv9>I7Jo% ztiO9pCe1nsOsZ&QF?pJVgBcMF1_{u@WK1%GI!pZ^8KPV%7ttf`(Qq#9uARhkLDaqF z0&eR843gJHnp>kU9zN|g#}x8{@zYYza<6|+g|^(w9u?&DGJ^VNiJ%5)XqvFRK}C$d z44{4)K)pf$wTQ6fCO#TSG5?I{>6LqZ89M!+6*~Q&7c_!gi#&zk*lhu!)UGmWXRIvinmEQbAw#KUXb?=3)JyCo1F9LLtgbSOwstFsZAyq) zEJ-!ZRR~E9%5JVRV7E#u!h=S`r4~gE*jy%v+K&*W<8BsG2xrkm9+Va^m@jBMWX2M8 zanpd|at=#yVXi(>c2VXck*T3~9V}$PK0{N2gH~i*Gpfg(ONT=f^?P(5fxfL2mJyT8 zyiFK`qKsZCOL`16r@-dMCFZTKrDj~&jXdi{ZcGLkqc67rQ-ta{EN$9Mk4c*o2})WI z_08_kEKP1Qz#QelfY}7=k>i{VAYf&aHTJK7tnch?X~=R%m<-+U41ei?lTN4t7z;*m zjBH;p20Yu;@1hG1cixsy*=q`RZmg=I1sh}a=cJia4$b&*8C{&{Czh@^+M5#Z;B67< z+7(?(DDkpA%P?m%r$svd96dC~Ed%AUykTdW9xR9+*XYj_q#RJaq+{8~UR3aINf77} z9$RbpvWR#=%TaD`Cwn)3hLB}+9`^bCri0RpCGBf_DOtH$q%lW#F<-WoWV4A4Pz(qx zT+K#*8H%jM6K@5R0noGNIAq*?c;P5yFB3kd=0_*Kp5C4!klWd}Pucv<92OB!LCb9_ zOY~By!0~&`0={BCZhWymakV%iGgAMTtN-jTefQ6<|J<~GV}1R{){QM2U)F#7CH~-A z3ICeHvkjzXtkT{Oe6XA`ZI=#`tQv6?w?R}vb=}=c^~l=!4vI*;h88EC)~A0oEY2h313m+A9Hv+2Y^J z=gfWunUX&L-Rrpj4C^1Pfh38@L}Bb_?PJ;X-@JYU7JK)v|CW~4=9laL7pnhSwu@8) z*32CcvU+Lg6%k(-$LfAm$%Nz?-U)@n;gD7VkOAh%(L3e zO+My}hdWQ7=W>R4KC~ev6P{XeQ0^yn5Y3+g zifR~q;N1VVa&dOy>5b~;5B*7`E(5< zH$i4z_1>gEO%u1ws1MFQg?OBvtz5sgc=4EecJ6NFJItQLr|bAUG$zw|K7+@=9zCkv zIl6dZX7Tfj-1@^?&asEk4%qws7`&dOps#+4S4j#|9o2=Iwo2+Z#MRw9w`iZ@2V#| zHa^(Yg?X?57El?G90~tB!IyA@N5aw2)}CE&cfZrWyR&b*hA|!;cOFCOPvI7%H$+3f zd#et=b+{dkRrIF(PIhC*P%iGE;goBCyxOeD%! z1QM;yeC4_b-MoYgkLf7$y)SUJJp05sF~=d6SkNRKcI#cqEmW{LBS@omDGl07OvvA6 zu_(Kd)gRk@^%nVKm}|yZxoAc_N>Jr+Oxp9u9Z{;v8IHP5NTTSXe=s!H*EsIQs{&_$ zdakhtw1Tz0mIg_#6gt>x`=0Da2X1D43(O=xO^gE0GMR*W5cqbY*DUcF853Q85%>N( zW~sN7-fp0$I}&eh22y)tO+({3HFLO6-9M7gx-$yn&E-ojxmh+WU`3tUY{2uZ0S3NR zv_0B24w2=U4#wQMvyJbN%_mL!DH(f)eTJCH$6HuFl!3 zU(PK&JB5;K_nxlauD)KZFv=8ZV2_~9dbK{ov;)pH*#d-8UG|5tSE)0Mfj0f+B7Lje zD@MUWuL^Y&H!O1d9B9_Rf;am2n`8Kqy+7XaKl0ns`}Yi&TDPTszk9>TyQyN|_P4X6 z-QC-Io8Q@ZaAR@XAI(ihd3)D}Tu<+YA-yH?u~6M7>a8WQAr3|-R)J;HpZ^KxNfItG zW+^89a#7`-k;TuJ9W;!&x#f*S6Z~y%Yi@2`-@5d81A)g4MF73+jlnv&Gg+JD_7adU zm3#5Ufp1we>=efo=Svs(BcW|wZ+E`Cqp!bnYhU;8QDjK6lj};ly!x3lsih^ICfZPO z+u#72UjFtpKwNJ*;z%nZ%VMIKB_hijMX)FZ3TOJ=?wtO1@zPhUTrOT6uil)&Y^q6N zWJZlKyWKfYqH!x%E#F}oq%fFHHldHz;Ih;gu=12@}5b4yI0t=upI z@!kkQz<*v5oT9rnd#`qP98{zCu*^5>hm_LS%*on;j4zD1sza8KH3e}dVm5X}lc^ee zN(~KDNmTzdxQ}h)fT`}ntKI`SMQ|_Fz~E`~gY*)u&juBQ1y2H{N8DAyA> z-pCMlyEL<2W)LVm_s7Hm6rJ@iB7o{v#dDQip z*Fo2TyDZy1RKYDk(da5rM2Jb3vjyxpCWd0FTT<%U-^Mb^Se_Gu!P;9G44?&7ZksyN zi9wDC6u5r1h`43STYv>L<>+MnTrRp@Amqk*yoY096}J3d)e=_PmWNZ_JW%9KorG<;-xVm zxnzu;{&0<`F-j&2`nFI2k!i??;TYXY)rSI^wbz%%lHG1ye$4&*3)L!MeDuCoO`mVz z4eS1A(Un;)iB8PEJK?ie(EtrmT!ZK=SY&-f+=VXjrm187b|C}yA>tyU5F+2g_-3p# zpRopk{S|Ff>6&nlzM{9vFj)6XB(8ASwSp2w{(;qe73#`VA$gRmOJgW`5`B*ulR^o? z8VA9K%X`~IJOgVw=+%8X4f~n}dFyNFb*vK%H+e#^T{(hCnc<>gwF_YLWbGD3q_uTD zHVsArWyT;yoYb+fFtND$rY0XdQ}2Nxkr>I_C8lOcI0CM&bkwWl+j=Nz@#>6?|wQ=rB!o*T!6L)VTjUOLOUdpR>U z5=8&*o}L}J5R~*oip-g?&K1}Qv;w%qTSD#4Fi5GP^TZN8D(38e1sR&%MEj)t;5nmoJc#9NP($VGW#`AMde>T z4#sBI5>|KjuHLS#@9sg%8@p)^*9lg)n||3(Ij6G51au{buHi4Sy{~U~?^d1#+;$6^ z0Qs*Q4crdhN(l}$*tSyht81Mbq*>VuGlI;^#kG!mNjT|ZzR+LD=QBa`+}1eJg?u3r z^lFTzc@^{DVDaLsFwDGdM%HM5GF$8=Bfc90oQmZ_$xKHSqx3usoUGdU#QlZ&`Gu$Fu^a^Q+X+k`PMN;B&;uvVM4tnr3>Q1gxU6a0xCb7Sj)eZy zAZZ0KC+Jg=zftck<@bXsq8^&rf?1?fFYQfD`r+{Ds+JZMMV6d+6 z3d@B1G%hg7oX^I=KCgZ?hiM>ZA3Db-I2oiEFa}vz4`9Ma=jvU~lDT+dijyj;ngH*k zzlt+1q>*7Aaz(v_lrPbhrX~#40C(=f+I-+Pn0Mvs2Q;1Dh_Iu*(rs;of(6he>qg`jRfvTDEx^52DP8=E>WH`1&mbL$ zg~sSra%^vEezPT-z@!2m($EfVaB(h)74;`;`%F?hf_<^k5+=_n>+W(T@}gtg248Gw za(TY*?=-N1I*fF*iw!{-AsM->>?0pU(_ru|s_r#Of5{P}FfQI^M zZ;;VN2+;Ho(k*i_u^f|w*0dwTxuk4Z8J_%}M3VI`=6D!?8l1f_)=+@Am(HW2lIBMpMHOq(7_S@UI_iIvb+ci7 zgYeP*pcX0Oe`zl0Ze}mhQ-aT4u+s(EVp}-c*n6O?kc=5y*}I`_-%>sCYoPk=-PW_K zYhQRZV++(g@`Ha4&^khE(4Z7*#kW{Is#&GB zfeVqFYzxxO9akDbxi#cyv#VY5-3h;WfOwlH-O!S1y|g_N+-CS+vf}DE&|=TXUWD-qIaqR`1J(1upAdAHB?B;+XY$o<6aR`N$}Wg)^D&4g%`ZOKnWoZCe5@0>eRxMM<( z$a&q|=u2PLBdO_>gjUxzQtuYAc-IbLGjp)Ii$=+m{c67H7PY15+x1Sh1aFru!51{J zTh;(|fc3%_NrOSrU`zlSEwBwVRK|5ox(v^aA>#u(5e!*OAT>~=w#q^S6AYFu?+Q_K zdoAG3&GlBTPs8x+Xr=#`N<)J@Z-rtW?2+~`GKDWs1A}mPyvTWt^%56ve~R^S<{#9a zU&nPf`%U%E$6RV=Vg8IW{ZZ|QhrmiCL%~4aajaq9+uJ27=kHfe&(v;C!FObyJKw%f zMO036oNwjc7nM&>_}9Zf(@nf4NA2E2Va!N^LLQ?c!yMm8YEqlT+mU^K1zq__+erD2 z3ElJBCN?#=e4CEEkQ4Qn_KW@uZc$o}O{l-1L5vw}`c+EWXrlqM7SHET_j<1E@%-fs zD*MH)DLcrF;%q;AqLlpWdJf!5Ar8x&4u>Jq!|U zu$%^BZr_L}ZDInMM1Rr5TsG~SbOlG&*u~QgGZ#1p8r8%H$D9*$@+O_3sGK}md-g$X z9E;dGU*4(A{J>`iI6}H|EQNF3jJmoqQjDy9BZ?{PP4H)s;&Rg?hVs@i0UG+ub|5 zmOfcPY2an{Gg zaR`4z!ms`@{%SVQ zS^dL1#uN$Tw%ha<&gmNTD@|yGJkVn?zrq~)F@`x(ACm|#{)HJ zEgz#1ju_WjrWl2Hgi%CZEIs0Y{S>wWvLmg@0O^~djU;#_!?Tiv0*%5 zEE~gdtJeGxOG|%`78A}qlMH5_Tp^Yg<6xd&TO7Y!8NUOT4~4f}uFZTU>pi0D0Sy~a zYIMO?r?#@=p`ZM*$~IoskO<>8&h*!8e=R)vl6!!j`2bS5-o#kKpV}Dm)4Z`R;HN=# zU>ikwZt6lVakG>XWQOt3!dG)jLz@hTmfoMM??DDWqm(nFENp%rDH41hG8F3n-CO-z zJGXA{QZ5Fm8SNhgMn@Kt8(cn|$q$0abiYs(?=`Vp6ruk!)wZ{(#W8`}F(f_=rzs++ zs|@9|9WQtvk5y_f*J}I(pL6KSndfVNiMqb=7%Q_*uGk|9B^C3 zOr-5%C`ciH!EF<@4Os-)N|Ct5aOAhy=>LA@l|R|9hhx-bv|*zKze3d0*L$1W0yY%T z3d4r+6>ggD1eg&dWTf3@?``rdE!5hm73m>wwEx&20os@JqH+@ePq39oy=6eR&yaY5 zZb7V$qGX7nyg)EWmqQC4+m5QojqWB%vF=W37>~39KN`xRmx9D*8+Q@I+zV+`Kgir) zh8wwCrTAGt`d1KG`kJl=Gjg*;U#1EYUlg>uClwV>U{aDDk6~lES7HS&55OSHFUG6i ze_pvdUcK_jIrbgKHqZP}JNp#aHlO6Iod4dLmbH7GqnAaC0G3;uJzbqVfp*Q*?^`KGhaC~S^e~*#S8eUbM}lgah%$?!b8Ban{1AD=qxeDwKY=j?^U|9Eo!@SlDQ{~SFG=!1W!qA2VH{O2!<5~a40-%rdk0>W}V zTYMZ9=dI$sf3joH0yLETEws1~7c&lkmQ`t=)XIv!0R?>%R^Kt#r`*lhGk&|*YD4#F z%f6Usj@Da`SgZ^zXELbZUGm#T_Gd1^myI2pZQ(#i;Qs|k z`0wLKrGSvS!XbO_Ysj!)+vgr4dks{9*J9$e*O-v)Mp`@)jYdPO9$LPvhxbsEF6KyU zp+-Qd+t;=v5r_BH`&~#XfgONJ!0H?;|ChZtZExea5{2(){)#p-ngBKkl9IfHG405< zWNTtex{{oGGbDox0!i3`@Jg~J*qyc zg@s8vvnjyfayZYw8>`4)p{?HkmV>58C$lRbjqKJQ|U|je)S+3Aq zw0Y#;Fevd?E=}T-Qj?z7eV>3*3r$kn5FSJh+% z1>(#qenUN(@}V8r_(d95;Ik>I)clbS9Kjy`G1p@lGyx>LF`5^4-XmBPh_wvBc`<_- zr2MIO%pa;LW=KY#XhCS8^)i$ts>EK2z9W5o&u!cF{Pw;1y+~hiEUkKKY@$8~ByqZb zw9x;`w*G$|e|WS$Ij(=etIWfr1OGM-(6I2_%w&)r%Z(j;B=hvxggh*j#wMU(d2&R$ zh7W`3W&=}C=u&kbV}|IT7@`*{4eAHeh1u{erAn$!PL54zkWY;T4-b_50|P+`yQg|I zSt`sb7?t9x0Th8+dn=-&%}9)J9C_&cDB!#;%m%geESkI>8D z;eS%lXaKclFbyBMhx_|wQ)u8QvB$YZr3=y;hbcmIM&J*RrN=U3ujU>eJMzqHx#-^syOD>s*T;OYK78AOW5hYx1H2xBA4~ms{OM8HEVw4aV`B!`M!i`9 zL`B5|=;a``qBhb2>Rk?Z7_DlhIXkPiMvW#az{m&Cp{U6(rCh90iZXyU;Rr~i8~N3bxH)`eMg$ks(=WDY$_O+S z6seE;$kP|Ha7+D$u7Tf}`Rwtxgzu&Az_CnC`E|lM6b7R2rI+__+rM+y^Z6YwZhPLC z5(A+Qd+Ahvf4$le+}__G%vXy1jqG~(YaM8{%5R$GV7mVRVo?{1h;=c(L#!~qIZ!Az zn{)lr1l+r|exOSNB@`E|PQ59rCJUIv+ZPDW^3(9abMk-#&|p;RShrIB+arZ&*7_^< z(^>xj*#<~YIHDnRB+$L3FHQalYYS*OC{PXUBpZ~`LpLu`X7dCR2$Lx^WDA*DjF#iq z4@jhMjwxTBoTnU%oJ_6;SdMhgQa9%mLmsTwOGvs=U@hUNqyj1tgYuyf6&C0r4hv+d z41Q6VZTbYT_ zTqld5?%ko{h58hc+$b-_5@BbN{KhBYybTSHYe^$F!vmrtIZ@!xSNNkOKZ{KDhS>?3 zvgDUYQf0cXxQu8-h)tU8LS;S;UFQw}+M4wRTlk0kqW&V}P=9qsKJWpLOe*8>d+h-f zxAB)PSQUtRs%%!{0Pb+nzCy{kcyMyIFcoiNl$v&k3ZYj5a)hg*O96f{1hxHQi$Mj= z9ggKPqz7}pLMCV=$x^oKA^|aOTLM-aG|f&mopEMqA}HxSOcPcx9g?i#)E<|l^)Hl4 zw9feHGZ#Q%T_w)j4Aa=U-J~WPIrHvchtXtF6vgv?871&P3}0 zlC>so8Yek0oIEr-lC;Tr5)xs^=5RD0pDxuIgX^=aiP5TD02r7t4gV}$YG!keWu`wT@JV0QG^0n>MnA0Q(|w) z`G^1cpAQ3BeE9I_PY;h(#xvB2vXoZUdE?TZOQ1X7#v;n2A0+0GPK~?QQozysbVKai}1hBJ3I96=c{@V5S!k4XUcUp^|qcJAg zvvXWjj*;4@JkZ$R3K&ijYNEzeJ%#>3D_QSR_;1UgTyRWmz*MOlV*t@Od>?m&6y)KI zrYN+mP=u;@oHnVG5s(^24u+kk)}VZ$hI-08^r{A9XXPXXtJp8`p%ec_10^PerU*UH z(&@Sw+lIkZfYcbPjB@D4ak7D|t3Zyl_vMG)l)Q?7ablVpG~7d}bdGlm{xs<;WB3v? zfBT_Y*^)gfQ9xA3~Gb+4Jj1)oqjKRQe<<5(UWD;#L{8|+ss<1k|R{Hy-MimsM#rd zBb6doylDcJ3Bmc3U4xJmJ1u#HP%^M~Hr$3BGniyZftHkFJ8!&A(yvI@=wl-bB4 zaSI8Hq@!9(TVyL$@ekhbB0a!^;SsKP0Vl=$d2Rq@f3tzR5 ze~&iZUmRtVU#-r9)k71x*1g5`OUo-aPw{!;cde@@T8o#_e*2AY^a-Q(o^m)9h0PJb zH*T+t4u<6r8<=2_MY$z##+WC-sbWST>em4^d^7BZk@0SX3G2@WJ2td~Lp1C{FwNJpRlbAT=o}75TFyk`hWs znX)7NAL)w)=D;(F63eWIR6^FHEkh2ZLGEB-b|yO0SZZ__9ScTFRGGw;_>>6~aXg}7 zC?cg~IW6T>FwPj4F=B4TP97PdStWIM*yTpi6{OoYYqAzaKRi28+ezFRhd8h6Atf-G ztT;q?Mx>I|s6IT*d`{Lfy%|6{@sfc9HQuQqv$mOx$2V`4kL0Kh&Ztb`6*`Hbk?Rv3 ztv#U=6REL567~xbgKc*3`tP~njx<$ys#2}{9lJ(y89;lIwbpPup2SN%xrftbJRsq^ zB7lsnI3WT&z9{QKAHF2xOJjln-f%~YN^_5F3Whh8hK01CnNVX0t+t0AOAO+5Kc}Gk zsYr4(al0Z%?okRlR-UM@re20? zt)CJRaf%0(qYIO|9Eq@D0yqr-jnKM}(l)Ozkx4z?m z7%bER`UwpQZ=Y&^{Q2sIw>a<9>YLxS7mn&=Q0y)NKi96k2`kfj`vhl&;(Sm@fr*qg zRV&n?a}7z|podbO__beTbF?~a#d@R6*-Etf)GUnaD%M~2sE~K0@gS#0V@Vw$n{(RH z77VoXnqrHnC=il`u73G;`|S1fqx~ql2F{SPG&}}p=Ll`(-!xIKioX21i{nR*h(X0h zmPm;ST|FUI8?DM=sSIlPhs-Bl+^)%t4~t6P*O)@-lxyda$Yfyci({+jt+D-GMrAof z^*U&y(tV9z3w|8KU;WGXtCy~_ghR<}uVCi5n+xr$-|~D|0uMZ?svJungs1s?%oQ}7 z^s3??+}IRWnGwKx_ce=3s^Qv0#QZb2_4hmy_t$OZQR3)$8x6TXO-i{Z%9t?G9!F}u zdTI5{G5E>RDe((AcVL0Di|gkuv`@W_sQJoq-WY(mSFgM)&=~=@j#H5EJ0G+bm$(Z* zWWLx;tS5wQ`lhgBid-Uw8!V>UAyc`MXAT%1TOO?OjmG`Buf3&6KGzb_RWE9fyT4n% z^z8u0%0#gO9ZxNlT)Fw?`iE!Wg82C}Kk!U)wvQeT7Z$v)5u36ZH$9+)7gt!s5=vZ_ z-ZL*BRIDix4Xmmuh9RK~iD7s;nEYjd#1A~6lB&0dEyumr8xMO=9Uvr@bkrSp@3%Kv zU%sXFUVQyyKG5SQ`C*FJX39Tg0i38-XMHvhk9O>XYppY1v`-x8{wOv?Ku@An%#BTH z?7Zm8O&zVCnsCQr><2S94Vsdm-vK$^=L@sICK@r9h%{1pIZvqA`m4+Dv_HDQTRZD< zFU?F@W}toKi}7S5~F< zvV+%2d2Jhk0upZKA@wZTEQu1;+&PV&(u+seuHH1w?L}?;*4wMg7d72ah7_SWhH1&7 znVQH;>XCF4yTlpC_%Y6!l3$q%=k76e=L=wf*8lhctdi>H5@6T$3k#g94E??@0LA{< z%I&v#a4R?8;%sLaZe{5`RwQuB0Z-<3g!{zNw~T>OK>pa+9G3)nLZ=-<5_ZN19?29~=T z!oo?PPj$A}L*ilS29E%)&9!Tv^Ar*OWv}^&FI?bop3}mNiyxWWh{H(pP69ffc|ZG% zoac?m95hz*oyNH8Gwd)%euPJ3B_#~ohhuZmx}o?gY}B6M5NL1SmO|SI@VaIhojx&UK1mV z2e{Xwc;&(=#4F~!XiVtbC4F7d3&ZLKy$CwG^4Z#rYpw5J?}}l%V3#;%(TS{j#wrOI zMbUydvJNNMuuySLUe+QLnAh%n_ClumhaEi)=RfS^@$LJcu~r&%cE{*PlPn~LloI`K8#v66T4ZpElRxQTt|RfYT^K?V|0W-wXa$Spcc;? z18Z3;SiL2ND>f^}FgiynK^D*e$UI^uxtm%T5$mGXOohjgjPDrQat=wF0egDmy zrg^Pni-7M|&%M67ytMkqYwZtjW1^Th|Ij{;8MzA+#7>>yXbqeL4kayos7e2VNR_1u zq*tLuqxcOetJT)&YZy3@lIiK?HCZ6iy)0`&35A0lWR3Wmhg!Yg|wOr_L1_2 zEIywcZC!jnTJtfOh~?$ho0nQwPqdfL0C-riwR_iFN6*34!l8F?@kk!T5qj{BL4!Ux z76eBbw?__-1AU0@S{00GRN*K_4q}dH8jqrWRQG3n47{D`5xbtqi#5>0$xgVJC1f|CT`XOGc+!}dll#G>^D4rhVTqSK`k$Fh`p@We(!qg z)Unp-znC&JX$X^_%C|5uB?fp!#cmkJk0-$n|DeqU-pNLqJt3~ z%6tKl!l~q>bK(BfZ|qHKS?6axGh@%N(Vs9&jk)`+)-rwZR6vOXawf#d>a_IgpQM<# zQsHD{F_xW%bmEe2Bz$tDv7uqVdc>VQiFm=FT)`0*nbyxz9*YDkGifoB(WkqGu&QSm zW5l~kqdwx)5b*hlG#gBFLUSYLKMx=&>~O?ri0VtcCkGEE(CL#+*U%38uM1zKTr4Os zpzq!E!aIpcW^N*u!?ZbzaadXEh&eenpo?)0gdyTc;>J&5i<}DpzKjlIu^u8=CEo-T zG2A>#`Dp4oVSbEb$c-Oy12dGduRFf(F;urJfJY-BuZI5dt&|Kr+t0TY}>VK`(9i?n^`>ut zni})cRGo?(=Kmd*XW^T^F?b9Ajpg%M?=bw$AI5ii{EE-$3;)d@R-55)9$|Vh4oR4` z1Dk?Amx`Z-A(M`Nw{EsE4PQ zSd8N+djphgMHS=ZNaViLI(v+b3R)jtMkCN0K*fDBz)Zx zGU)RLB*(BZ)6AaobgtYy#T*${SzlNHO3WKT|5(*ue%2=pFOX`BpEKKqT1RF+PJRts zp&6?bV8L{f#l>4|_dZ0|j|;b9rP%y~jYQh7Ew+w*i-h-EpSLd@=hVd<|CDLP*7EJO ztJtl|RJn4lEb+ zs0WUGKUb*Fc%(kyr4@-Wi)fGOiHJpd$$MaTXH><)(7Dki}`gh|l3= z6SFR{(5g8#g?820{Yn$p^5FEmcd%OdaYMEZd5k>Gn}lt{Va@59QB1B}9BKz)3NDNg zk7=c5fg(tAP7c2!M2|*pI$K<|8jxp=KWn5JKxQ)$U!7xfH-)b>_KKmc0nDnk@G%LV zfVDcccKSl=}ccyTq_ky}M(M3CaB;K^_#Z*Rn ztHzV&Nn8e-QJ8Q+Gm_>JxXu~%oPafDI=ZPe?rj3@9;nm)ErWrV-V|gu1wyIf>}2g^ zV?w++la*y@03VWA?^K zBEeu(>h^m>@wBFtc!sf|oszKAR?j3D%_I!hFL4Ttno6#kjis!M?jX~*lr&gHrw%Nk zS-1@I(`7tjc26aAc*5G?+oWY-jc!6kN>1ml$M;QQO&Nd3+|tx(M2A(mzJ`09{fh6G zXjHnL9=a~I>jbjzjG-Ej4-D8uL}LI4EFyd-_PO9F-js7(ecy;9t9Xn z0vW^*EjHN`P%sU74xEgWBV9>GRXCQ!{&t!T3Pm{Mlr_0-FS1FX#v=J?-L9W@p~xad-_p7~ zG~&&SckGS6n_)Z5bZFN=zjof+`@p^K1?S*|ynSafJ=oYK!^xK`2MV)vq+PpyvNwD? zIU(p4Iz)PF@`~h3Dk9S=98BJO0EQJ0Nf?nRpwUBCNVP+(95@(;MF-XmJCQ}x3JS7@ zUvVkJicp1mXRmmC+e}XM^}JxobA!=U3DrRVk;-%wsSwTKUW7((i-5_Y(7-%0$j8P;Z1rjGxVy0j4?AhJB zcIhcUESz(f%QmBF*JkC%tYj& zVb&+^cew3PX+W7m>}-3Mu{IU4cWMZl-*!)$#)ISLX>>^Ks(gr%{%5xUTuA>V(rkvA6yoz6+PB|wrwl5PW#cDwF zp(2@$0*^^S`ZmVg2o_?(8`U;H)5ZiFU|~9p!wMb361wOZej|He^sz7jvZIq`f+@n% zzY%Vq#8Sg?@n32q6U~xlnrU@BBhiSu;D`=*qARXQ+LPRqQUa#fI8g+ov~)bRpkrA-?+3nneFq41??PHiEa;JBO9mCRjTPcPf zT@fo9%YY`c0W2oCJchu#}`F_dbVf2Fqf;FxapUr#uGFp7IA=zs*3}SU zzTZiiBrPsLih-)YTr**qTn;{%pFu_h5ssak%4(97DO!s*tYbs2-294DWpO?~HF(_- zg08#bt=_@Vb8LIV7`%T5<4|LGa|i@W7p5wH&|fHF&SoaGJVo*homQLebWxcIiw`9U-JDW3b8&uKM(S?85^`D*$d$1?H(6T!j zoelQ@3DKH|0qag*Tl@Zd8)gUeB+;A+*Zu9zxxxgz`oA|&Wqkad)|~~m<7=J1&YKBK z=xA^cD#_U*GMkKw=L%(=Wjx<(Og@p93@b93fOixHBys|Y@rPGTpfq81q7P7%|4A;$ z$OH}iQf7t@t0qbturfMGV1q_1*g~Zd=1 z)^nLq5@js*6dH}i(9nzUxJe|hLh{=yQ?un@Iwb%dCYi*2%IDz{&*x)ZWi#|)54QCvF3{n6v*JC;<_k|9rt9x8U;l?=CL)LB zW*$#1g6&rY@_< zJeRDU!zwni0`92jD)}?zZALTuH{WcX{%!m0_14{YR_)slr6dsRw z_8v3(sdiKJbjg0{>%&#aBk_^X(^BX2c&+F2DTi|jU-*5!v6R~6ge_%R2FIBi{>Oj+ zdjS8!*pisHcYsKO+WdoU1H(){wsk9g!oSGpqnjUn{4w>6pAQW^zWMS0;SK&HCZLHF z6g2<;)Aj$+Lj%pAPDy%zfc9!6y4Zq5{=@wqN75bkC<-V(LE}2ZI{5U7wQE;6P!ycc zSEfBC^SlAiudvNpA76}su7uaZ4ffMGmZ5T_pdL62`;IbMqvsKH!0@R zM@Lt$E+A{fX_N39@JFjx|J*wHHM&urd)?c%Q%E{ys@OzXW?>uhp@6SXu6=WhIafqn zS)(x+6Gjy@L``VmeCqPr$usCkc;j~%SP*j?M5=98QNM2AV_sh|b4wxs`0U*J!tq$O zEz}xWK1ZspUsy1ow@xg^DsQDJp<%EF5UQCYT>td-wX5I5(xcen>baF$$Kg8~dSAGn zF!)CiA`2T~94&!wK zRfY>V!DNcQdgr~?=^HHSQXBjPn#6x{2bSu6c-LAwwtfybNo1A?TwxZY^r1*D#;e6BjS%t*KHeXP&r8($;76y?>6&;n-`L)Gw|6UbaS2;kPqm;4$++7x&gspN~J=w=V+ zHS$ZaV*!O?2!;m+rpk@}pg4zuLD)Ou`~irZ zy!YYwYrAdfGn7vnYBk8umgmY1>0;~Z2krN6g;B#d1v)kWV-qE+yKuR+_#Mom8|aJ% zM>=YBmK4_41V}T;ZzrjlW2A0g(=$Sh;%)g~b;xduUeSak3unBupXtv)@@@ z#v5i45yZ8#&W6a4H{L~OSu$C%%1Q)oI>6U2LL0olMz@Tc7=xqS!Ci>^j`05g-wjDi z0o)yI`gz*Te}1FAu#C*n(wWwqALFFsrA-Zc36qC*R{4WGdF|6@RzJH<8QHFLZ?u;_ zZ$g+Vc*TNJp0L%g0QLO7ef%V%?|bJlXBEzI7&22GJk?$V#~K$y9J_|Klz|K$|Le!3 z7B1lV$o;WG86V+Z!O-7iyn|7626l~m36R50cjGS%H=&@ppj6HbsqU^~EDcxbv_J!E zH@;rG_lB1Utp=RDUq3*>HB&rnjGS@xv$bnSSMFVEAHAk$p>^>M%DIFS0dw?h_1UV2 zVL0yIL*%AG0)<x8N8jw8zgnb)B4E z2_VIc;@nxhOthw=T7a2I+>@LsRr1{HMV7D@jDouE5&sZ|>?v?h)S%4yVEom(`Wp7< z?%T1!!kl8RuM@{xr#|Lc22_lpu#UflQ3pD0Y3P2l0Na#8y)rHLIfGbx{T#-4p{a&R zSpNzTB}FqJaI3e!fZLj}Cp653SMFX|TUg}qA7i^3Jln3w830y7l^welJ{GQ9@#=TKFd*e=mC!{AVk`gh7zEt4{>Nii` z;K;sF?4dxxcCQuYQH{ih6%#%&%oB^qJaQH)L~R5aR+^zAPj&5c#pIp7w)Waxm=$D4 z&Meut*72lvNpGwhy>q*D{de9j%&clCWlu=lHUpv)91umb)p#tp2z55rYtYAla zn{q>w-b>GLT2yCsjq5GGryH4}8<*SPRr#p1hTa~Y7f~yE=2r1M&AI|HfYZ#jQC35X z->odarwG;K$<5^p6WpTZyiB5b{jW2VetzxfyFhs$DFi(si7Gqcb!e286x8nOZ6VL` zObEzxGP4|n>O$N$#dDxem zi|ZeL#sF>RnaUMPr8@JrSb)#6@{9NWvxw%*Xz~qS8m>p?h&lhtP~Ca35BL#s-h;naCnNt z#P!a{#ZTpiqR4Re)LYea{ zoAO3HbpC($^2*KQsxk&GPimPi38Puc5=7!4)p1Sh+PyH^BbiNNGX*qnV{aQm-zYq! zNC3E6wQ|i{efQ(`!qN7*-(pY#LwLn>m&8y#^)~DV_xziz+sUsn`Z+BD`i7fS4Bu0c z?O{R4&vOgJH?${ zIMcfK+Uk|#t?w7zQ>Z8p?t&&*R&IZ}di)P4)*#x-Q88qiE_}rsXk~eM1<1s>l#MGW zCRdIL5%#QgT>a!|bahZ)5jkElVQ~ChQ7t9b^}NxcaW8Hs1Eohdk9*3@CRSggFf=IR zMv;G)2q@=5fE24x)B-@zz*)HXDemaAOVOzg;pY8{0 zuWg%E(7COV$TsQGH$Mhm0Hs1-{=RkUEe_g z!dl}7qT3sgIBgn4TKofvX@i~hUf%nn3-m;xWPnFjHX8Rk3NkxgE)kK0*TV=&q}@!BAXA9!0h1cV;Kai>=795Pd651Cp znIXcU85LU$<%#D`qo|px###zBpJSDkyPtS}UAXN<`l3AtS?#M-x~OMm`FF_DoWLNh zf4YS7kN#pPTZxa4)x!of`@QlE>uKaM=!PE{?_?3Js(zxeWK{oc`<kWXCNt0Gc7< zj=LMtfY^47NTMq!)V+8~g#wN=H5a>~U2&bP8#)$)2+`GFkDc*Y`4=muo#90V-1_Vd zL%?o_?_u&V7?&Lx@!LiUu@F-q>%QXa5>~}XQ}Nf%7B@?ilj9yU_-25r^-H%~w@-Vc z4QTV*x7MzmHT$CkYiQ4I>jdraK@LL(J4z5dAB?>TWBh3O2P!_uAix1g$H);HHZpNa z&29KfMIq>LH;CjvyS?%~itq@5j3`~Q!`Wouzz{Ae%kf5H5{aRqty{KA87<;-6x*yz z9eDA@mvn*L=G>Ot*5M}x2M6JGtjiQ@2fF(V2Dh;&B`c~9Y7_SCM3YN#8an$SoF|JO ziNw;;$kf~UoTE@QB+f89S*dQ|9i*#!F8a)hgTp#l-l9Npt$ukuB%7E-a(9)ZhV zG(o4Lb?ZC5TY6aaFzkzkqJVs%Lxehk*g0~+2_wGHcE!4_cfR7Rl+d(m>r4ERZ~$D* z5=c3tjL38|%^uF!>8~*IWWw2Z^;rcRAtHL2SB!Occu$=;&Zl4GzBH$ptyDx*u19xC8S1%l8Jy#+S zO=Y^eYcIf(WnyC74w1v5;(hYnhzShCD;V{K0`7!)Ht+>(qOl5qI?~ri(Ml7nOkXNj z%5!LLi9YC?{8H5(Tzk~m(CWNFglD%%2X^Sw~$C^6Z2llpDbV$YKLv~0 z*aI*9EFijqSMeJMtMwVLP%6~WjU?l+EPaut-9v7q(O<5}Vx$Wb8HZ)*Gsv^3enp0g zG0|Y|HP1f49CYSBtw~?js&$#@^o;M<0+}}sm&(L;qzOfX?V}a!VobUR<~s1U<5Lv+ zO;tU7mt;KRR}q>;7V)hAI@?tn&#VjVp=ARcX#m z`1Qcv*;y}ub@K%Jb@B?@&C(tE{a{pTVh3wk-`@m6J_O-OwBc zrrSz-TNb+7ma56D&U7*^<)8gH)1A#rU*-qgFmdDQ08tkd_R0-^&fA>n-I7#x51e8G zv?;*IaT~NH71Nu5LNn<7SZ**X^wMHEI_$C;&2l(rieK-|SDSTxyd`LKCfAFtC`@s= zScVsXl$tg4ionVbJ; z9H)1jSMYXi|6k!;9i)whh!s;j6zXbrb3K`j#%_S#Oh?0Nn}Vldd&I5_=oY-3@Vyzo z*2wi}II15-*3)S^8k&Xi1P^1# z@asZvV4a+|19leLk!F+3M*&1t!o&xZ;=(Hx8iia>rlZpZJZPcqL_cGclG;!|1r*aL zVg*Sk749$U=d3@87I%$mlLQ}KEJ$~`T9S=a0!Fk5NG8|aZuHqgh44~g(ub|Diwq0S zGR+!#H6VT2m|A+*eV3T_quau1QuX~q2fyRi8}voT$*|2WWA zqmr1b2Yb<%E0oe!n~fq)l<7dF)=!P5>;5Ec)l!cZqe2jq#ppp85U?OH8kkK4jSuvB z>9AnhDDY*DqV{((8QpE)42UVrOBH{zmKQS+^lCObjBBXsVE`Svqd3Jxgy!#V4m!*R zJ;3QfueDOg%)+K|@JJ6b@{< z8Va@^>Si4JEC-=ry3n=^P17^H>IEw9I=oIT7Bka>J?JxvjT2(jFbM6$R{zvPGD7jd znci$bcQlc_Q}ZFQ4tXS7$G!fiG>hvq1ItBV)#65=neHZ_%<2Zf>+T_5w~GnrE@6Fp zG5>t2P_E44>1M7uJts|JUb}w3f{3h?>1_E)Zv7P^;b5R?MgDpL(2hkP@mm2<48}eC zyP1G?8mDalnyc2Qyxz?}S+>xV@u$cmB%#cG7=G^Knm7|cHHL$;Bs#FYX{9npS;KM7s@Bn zm^H?2{+a1){K;_WXKeLicAs2WJ?PQu6Gc_9RK1ye8jrlR!k~0P5Nk@D%`5_(7Cfn@ z7B~yJLNZ;gKUqliEK38_4Y^0S*q$vw_n$VUnCcqXr~tHXng&x>m0BqrR$?)%e-su8F<%4^gWn!gD}V zmNC=be5SK?=eCJzlNOxb3>#C!^o9(o2NTbIl**_FixOH-iqW7O8!;Q}Y*3QkK|&9D z7@kxQ=Yh7NX-k5~nqb1cSPPIJnfK8A4|X5LkIr;37U5ktS+10WX`FZHe0dV+U80?U z4(eq40lW$~%PSu_e70=~w<82MrJ*X~`T1|F%?D_;8Pg~vn{K+L0x{D~gVv1{b(nAN z)SDYZ%C6E;+LToi1)heEnhB@vCJI#rjrMA`sf3OEWY|-7o7!g6q;l0R?#W_v zCv$%Sxr@!FR!Pvs85(V7x|(cC&2BcEJ7Xj0Vznu9gbCl{M;#0|y)+?yKx>)KMw`!- z1Hg#$oX@sfB@uxN!y~6bEkw7<`b_V`FOK{E?{|MD7-jw^yFryH<`20(|NGj!pPR7P ztJZB|`H~gE-=U_>DvL^3Q@)5YJ(yGqXHv2=VWu}BdJB-x4zfB+Yokh+7Rv*GQ_UnB zQqEVK-3=*GiHRC2Zj)ZHwxd}Q`$=d~1t-iT*iV|8P^al+_Yr0~8BeAwRq2{M%p@92 zz93=Xsn)7h9&&JX?eVC(i| z&B&E3QoWNYqatQ`YEUa4?{BeCL2{A%?7&inHDlxqADs3pBtogx%cw_`6O8v}kn^@F z35>I|mPz9d!A=4<9WfTkda|g9c{5!t8tq;twXTdAD=u6Uv1Z)QKYOud-2HQBgE0ff z9Whm07t6(GR9fm}v&El3gBhXg^GX(7tODI4_J}A3E6(QNLMr)(CYS4 z(#b+G+B=+WZQ)>BFmMviZdQr&2_8%|^@zs_yQMQ`l=**s zfy!Y3ekx0`L;;MBT};|&Ow19+6~@B<`hqG+$xd}~JIHq|X@v9|7!f-%b>|EYs#c%% z#m{yYBf|C{lD`wYwUXsVDUc6ALExPQBIylV-t+z(u-@LYFYbgN2>lZ)b)oNWi!z&IC*`;&s`fKbG0uA$K@&u~CPT=v%zFVK(Ec5ZZ^tt14-gQ4y`T#GGRQ6Dtj_qBUa{?MI0^_fr%y7ka7W&IiO658d=xO!4FcIKq zI-kb|^Lb20Ay8SSw-0X>0h>l$;*~DJE+j{eSpAjlNR?P@G-q%M7 zNhwHpU*EPpd-Bii+^g~&1HA4mzud^WgsY{OalneXJ6j8fA>pyUasWnWKOf6S4>Up&RzTVZ+r2@ zJpA3iJ-M#dVMVI7QuI9%*$O4)*labOvC{4magM}1 zTSEsan?lFOoX2X;1T|Mcp2m;En&YHLg}KsWTQTX;p(h^8!#5*AOrc)H#Cxej@VHNB z1y}Xzb6l^0#oQISOkX^YOboIR`Ke7oza-5<3u7pyW~*4J79*=% zZZPA>pVBQg9Rf0P)5&K%L!I;w(?0ig=3k^FC4^BcO;;msGdu~>O}OzmPO7>&(LeOU z$E~X$aV%I$Zh#>J zgVljgIWAI4DVg<#a*rzXKq(Jl@OivO(k@JZq81O`aMFrSK+*(2`4#5eMpDGNr81Zt zchb4&2t0>Pr6)7J?c-Oq@Cfq?>JFl>gLD!WZLTom1Bn=f*CW~C!v>`DC3)vv{Xf`4 z|EbfZ=3I?h&3cnqCBQRW2#V!0r>@G9+^~Y#In5bWb8qZr4iww|`f}^oiM30Yy+=Hb z{;fGKKwNRcfMOS&;6T-AWWTcfIYw%HGuq4V2O%$_wCl7 zKWg7xBuUTt_Q{W17f+)EXc;3-V5l;B)%xu9)idVVNmx0HJm0{|A?}Er3v>IH0~%JP z=nIx9m5YrG>G~qCc%LgSPYODB36?f@M|$@@%6*>oeo>fh`tp7Me2u@FnM4bLB|Cmq zXCNK+hC<9S4CvXy&-T(7NE-3pnG+l|edXpi80CXj0I(nII835gDEffl){ow6EuNI% zN$-ExI`$zfmP8<=Wil41*R9%^!`$XJTlI*S!c^(-3Tb741e01rUZT^|L+OP5oh64% z;1WhsV-@G}Z}1WU8Vd+(R4oU_NObbY+`&2=oHR8Sc{4fN45lMlBw>7$!F;8dhS%j; zzfw&b$veaO=K)$1l?l^2&dzsGQxFhTk0Oj%o@v>4ktCqF$9V6cOF>;9>~tY3-Ws@^ zDoyDoWx#q@oY!2$P7!b;#reBmQT1to6$y01KC=Xq##N78^_xMz~x6Cj4Qx!osHE$U+(= zwDG`1wF-NI+meSFvoS3J$z!HhG$cwRAC<#DX;qTR2nTYazv^BAG6U6xdIOdf)6#YQ zNkeI^bgovdA%rZkG#TXw8qo-L>5#ghOGuO>{YZbqoz4-bFk#=tOOcSSKt2L}h&J7y zokToKnL3!qi=jVB!pdKA(gQ~>OM5$0g&;YdXNuhn^S3AEn6jC_j5sW zB3)07{;JUb%3%Lb#vh?1-gvD+Va4Yv#ur|2I(s>k3VLMY9KiLq8=?~pt)Ue>xlUu7 z+xq`iS`EME^8Movrzklv!x8O&CSy0Ici-Q&G2<{EEWc8ymrTh7Yo_j;c86DPo%vns z+MV#|y?0#_>kvLLIW?7fxLd5|j9L7L#b(ZEVdtxxA>2W_X*7P%_| zB@Y8PP%BV$6o4sxwQ4znM%#6jL~&-yF(+1x!sIy-yaeY88s>8h@Nz+IwhUbuNM%O* zhsL>jfyzkdT*0S-;0?j)uHvQ-9}^@}A81e=0#l=LN(59vU?`AqQc$Cd#GyZ8W zK3m)>MgQ?{xd&u##>({E~4jDN1KR1Y` zkO%HFVqj(o+YJ3K&0xtF^^8_tsY`~S0m-bO;USKjLQ%#Y*EY zkV+}tiP~JgI9E!eDau@PF2Y{1c%2govOS3i+I318+!8mxz<0*gh6mr)7!YT{Bn#>3 zXn^rj+%t7LNftsg0c&T}%X-q=xLmx_Z6-+tGUAxY+FTCiVPg}i2W4nDu)eCmv0+#x zVhtu-`fx1VmZ=n(ChwWb0kuKUfNF%KKj~0!!5ye{7_!l!a)6I51r2~1O<`atI!tM6 ztd$a}KM;a39ncoZa00)U;cr+2e!-718>55)Fye5DXRzzr?WE{68XyqyOMRsNFg>J5 z|4@Y?Oe?wf>!H`Ip;{C_Mi|KN*}MCH{}SMuG7Lw#ebIulPQ;H$*(!v7g9@qbWTb zSrDD;SEkUws*VwZC&z`74mq{u}aHImB20FHF;91=$S z$|>E~JJ6x=S2qiyQW2awu5?R^8%pbtibB01hL3Sv$V?8a8!HqeHyaK!2tx*lPJCKS znoYPF)b@57N%)7N_7X#b){%inQEQ3Fu~D-h-S}8DXq5QF;ASIpPBH}r1edfEDw7#E zkV-dQT~zI2E~#h>aOM-pv(-yift;1Jean~DzWZ9_2JH(AD|b(=9$x|u^>261Bg^^S z*KnS;r{AQDaEP2aC0(kKn$@axS8-n zqEy?NFnfvqbt7KH#1J*h6(PoA#)F!wD3>gM6f`6=`ZXzxw4(p};eG$1$F}BPDUlXq*{@pro-Ol=xaDz;uasx`TXn zS0Xr(dIXI;T)m8I3??w9xHL*Sm6u4&p{H?_NinNY+rm#Z=YqV;>cgs#+V{e?eJ{VX zZ}X#%;nFq^HKMzUp;c$BO9^R=CSGeeK^>HV+JrO3xuRnEr_b@GXhw1DZ=gBbDm=HB zKhw>u$H5kZkyleM2Y$VOn~M4zIu#A&22)3DprpNxz=WTq&xPONRr1&%scnIHqIWXy zsPCO{Ds%}r##Eq-c-VQL6{njOoIvtVpTCXM1dMXu^%wKk8s z{_4c9(*`uEWa{T@6nX>iJ+&&f&4byrZR$dH3)~khWcLJ7g#$q z!GKLMO9p6AHiL}DW+DgZ_vp}gZdNo>52r9VJ0n8(;W0+awFk#7`_0Y=tx#+<3%J?D zpC%Vf7htEQBdDSdYr{u9lgUl{hf3us+&nS1PIm?coiXmKy zK`;cxO0;QXTn`RMKlImYe{yO4s}t)B=hp7Mk#bX`k%O-feMg99ni)8G1|!?SQbgu$ z1J)u*h$OslBt0t0bIBQ(w3vG2tu?ZKv5JW_ZnFfXI6a-JnqsclK@-X+W<=PJT z)Z@UJd&TbcD}cu+)-nnMV*RkGjwtJdR2ivZ51}b=xXJpTg`Wm2v?<3OVGs>*f;uh? zj1QJE2aX~iOzW5MJy)M=)P3IpBS2xW zbQfwa3;R8Lp4+y6TgpO_g<8aPGO1&Qnv%QQVgO6N-Er$j!6)rRWkt(jxXDPLrZd)B zDKl<*T}+^SJ2bc`QVe}q17ffq@c{9ln!%xENTo94j>lASTvOxJk%Z;8%%`d02u5`% zK8kVapN&UqnfUc8b5pZ|4VVH0W=}-+Tdo9U;JKNk5NtSn-<~(NCX9pEk!R>=)K!#- z$k3xSd`vwUC;B1bWj7nzOh@ky5_SACw6r&6l(X4-XhFn|DuiU%1 zdiFzQ+JIH#=2{3V)_hn5Ut662&&*pcm<4hM#XDFE_baL8^=pxB*#&-vsspO`h&L3| zP-DT-VW~(PSOEdzZIJgcmg$Ss3C#eq02PQcnLN%95gO(hww`2AW14uwjIAzT#0<@E zzR9U$R&KtD)&b-+(faJY_17+oR{q%At;I!5?i@81?`{uQ=)o4QkYER=jH%JouNiRA zQjSK1ig?b90Z+viIJD|y32us1*kW{TS^>C>6AgPr?2FiwYVv@pcI=tzj@2`gzQzzh z*ipj>P@ZLse$yv+T}SmV*JJ)E+Q&KTMZ0a|S_4SuS)TQ$3dMQHP>il?%Rt9Ob5Pfj z5T%<7Eb6n+iwnylmy%Yvjvi%=dz$J*-X^&D@*c`WOdiPe!!oudC`Zg&Fu8Rbg)2h~ zHq1q}uR&1!;7P4S=hWB)c-4#Z52{@-y$x$#BFn6=pc=fyR5$6=zYXN5xH&WUfO3c= zJ57tKo?F7}Hx<<~v)bQDPAL7oYR2t!ao$bQf0`aMj1u=+aVr^z&48+LVqrjn(nr=k=@lstjxV4DZNkPbL>#uEejKq5t9}!%9 zQIK~roTwz@xcH!)XZqYrv!6-UTfg{e>&)+XGBCIKwQt%VoXY$o=xw=d;wQpLW0n!M zT|)_pV~mH{M^$cAUuomkx`glL8e}XR=8kg_4vF2=)iOPgOr`t7V-9$pEQ81UET%zc z-s78zE?%18SH)$DuI5-lMb@*~8QBg)8RL!kOAm#HD?RpG%c94Dlz|pEDi`i$R{9!~J0A~z2DkpFl zaR@S^j)KNEP~L=@nDT>iK-J}9=M)bcIu0r&B<^i$IwV`>N+esW&B0dF6-b7TAupu0 z@o;Fw^4Qx~2g5SMnQ%FarxUkDPlyZ}zJfQB%xqy7k)%rXtFT*HsW#phSD*irSf!^t zF+zaq_Jl^12Jjwfkpm-!wQ$BXiFznz64h|Y%^W+SDlGo$q`~pxowt$1d6MD z{MPy#ru;P~x%n=qsNf(L=oGblW&P4EO@^_4)+?6`dTU~yy~$JnmSHdI zdKw0=IU+P~>*UufckhLcKNQ4<-G3;v)F(jEVy{>#d+(2{i(jrRpKP7J#xWF`Ttu1~ zaP$DV+tENw!k2uRm`G9mNEU69dut>R4En!e02mxz7mB!$;6i0!Aj2geN<=)Q*pVvg z`D{8>IS8Yy;o^?_J7aAGl1kMS1!g*J zMc~oejiO&OUJqi5mPbA)OTotFtH=}3ISv1_K=>L z%~x_Y72H-+Au^b$09N9Y&e*^NLfuzGRN|gkiCAZ=Gg+0+1&x^8%v*$RPP4HHq23u5 zI!R|UX@O-FmIW|N>wacp9o6p4C}wrYA|%&34Br@68t+uTE2K3RU!fy<_$q8wUWOtq z)kh@-jIj3Hsd#U~RPDC5SGV+lVrLrBq(gT*b@|k0rkqClHeIf)7W!<0IvnE^2}&Hs z;<0@SB@^uX)-NoqeQ}hmHgmtm6j&Ha@%>NQU!O(H|K?@38wWhUcI`&{_Y3WhKj+AN zm@E+O?vf1O6Lq@xF;3eq2```Pe_mbwYUS>+_Jyz7$G>kaU2mPZg%N-Gwn<=~g(Z#| zbo9mei5NG5>t&MhhLwalS}0Pf_7|F^GReT{*Cg2bcPd0=UCTH+$=;cSk8%_X^Q+&vf+)EAZ{7qPPbX@9+ON;~K`PM+ z;O;#80OCj3TUE;7}56=by%S(Thcs6QFKI2x9 zh!H#XgL|OOSCLbp3(b4J-0(P1k}?cA+Fp83BFIx-1K_fN^;)}j*63$v5t|-`dG9L% zT_0@ru1bdKq^GUPIZ!SLi*8O#XGx6{2oy0PFzH7*CJlBcYWN*Bl^CUBpU6FW+~xKUJL0CmN8f!=BkJ;cg%f}K)Z~|HE?3+Lh!?#Tr$Y7Lhd{gB_KsDRu%5v zW|AE^lJEj0YO-VlnM4@fPk&d1o^#qd>Uq^V_GUH_(pu5TexXT-=^JX~Du|z;Fcw0_ zd7i5?aWp#rGO!9)W}9iC22l^d8K6jO(w?M2~Wj-Q}40HQj|NsFN( zZ7b*+*H$?^rl$KTG6*FJK|tY)$pY-!MzuB&z1mE-P>gN@zcZcuBE=2Ua;%E!6QxjI zC3aTp-$Z#wFdavE0XsU)AAei=rr`=WEQ?H_53;o(o zxVc=d?5WO{*@W$xdDKJF+Z|ktn#v?leVl{=LoAWEAa9o>*U$UVgv6cuU9k~5ZeHo4 z5Pv6H*DnG!2i;{$hW70<y08AtzCX80{B9y)3) zeV203leAUb4%xataRk=6>7*Eucrv=g6>&LXa)O@8(tWsJcJS$R+6MOE(1{~=5JSv> zaz(NwNJv!^k5!|R)mWZI^A2i8gxzce;BCRsjUJgIBvUSl#sQ&>SSib}#LGR3ddpBR z%s93Y5wG~s#BR`xLyr3Z6d5dh;p`+{>-^o;u|-p=W4JwW{+c}67pCC~&!XfbF#?e* zjgm4JQf5g+(n^?GgsR2yZb^JXzNJpVha6Fc9vfs*1pafRXR^Zv^_GnzrGqAmAgg&G z4@_?XwLp2p&J%+!E}uf}2F)ze*3AR`D)4z7wKHp9{=WUu8Smv^=v;gleDv-+t>Y(K zx4v$jzRs1rwQpZvx&3A9%*g@vT{kT+RZ2+m{jK|nsbf^{V7lSPB6AqKH!0UG%i(Cc zW|9%d`HoJ#hBI!~_^aa>=Zye(KMtp4EO>YX{!67tf0Y`4B$N6v2b1EqLNB*Dj#QT( z%5V_VFa%>5>L{o3!l^`ZTQ-~Kf-0_>O6t~MEA~sax&FD}K#`;IB&L>2$_yvOKWCVW z!3-54LBOrUvTO=ecp>hTAqbwE;1E5{0~9UPVF#qgk=6qN#%I>=m%u^yHwwqGv&LmL zk#SDAYM<(*9RPKIMbF+pTdp(@^-oorf2U5z+sP!YhYHA)yd*O3k9etp=7E%ZTc_Y2 z80OtP*#DD4|K#|qk8M2yn;PI^K|cVL=clRdjJeU_+;`pNa=_$Fpf3r6$x06?^;;pv z3vj+oB#KLK;tjNN`^4J4^O(YW>ALqMlzeI+2lpOE25;S>R6mQKi(?CLoMbYtLVyXd#kkuDRhpSO=B_K2L7*Os` zZh*4VW*WM<117`BSe~Nt3VM_2fKKMD1YC5e8CVic663k&l=7Y9Sd#wJ+zs-cNi2R1 z-#f~w$gc9nU-+E#cpf$LBtZ*9@uilI4itbQEzI@@({Pmx)csi>iUtD;X%A4;ED}Wk zRzRu0*~h_-%ZKnoP z3fq+W$3$xihmYOHrRorWX`_LbB)i@#JXJ!iI0##UE7wCVI@QBKoDuMb6L>=fbHd81 z4U=mLJwpKxxhVy8D^qH`gg87XoSB}hmKe%l_3=j^jl$PhYh%e4%`|@c)Td}I&;*+A z4TZdhaW@^IOm$%z#s?OaNd+pyOHdi_!40@6H#F(J^bBSKq!YzhQ5hDZn2%=88}Nn( zw?6Uc>8<|p+Ujp_iTMXve&OYO z?CaLmbL#RI0~RiF28&3C-#7`BjGa=ttCRzkT8KesgMOUMhHs(M5T);`HiNxBa{>dV z6ecGCUf90vxh}z#JLaF>GMHc(*wHw!Cy|FqE+$&>=(RBihjuwj$J$puR~h_}PFlJ9 zj`!DNZzDPv3KM@B)FNyln3Mr=?%6ZHXQ$`1GBVcbM;$5dZhQ>{=*pdQOlxY& z6Vr#A%^Y`_={ih#Tt=)a9H3#XYu8LrF1^5eFlMJqhs1&)Hn^Jy@52VS$3gsXbJ~9P zkrd5Mpk;d6G%8|G>oU3h54W@BbR5RP>Fc7{L}_BOYgat8H@mjf!rVtM^u{Eq<(h1xdnYI=$ zv~HhOM@-RY3A|=PYg;m&=y|Cf`|O@WY`=07J(SkI{~i<0I#Bs}6NgC0uH8aMrZcax zKYQ!UiS{Qq_@?N*8E62V?j?J_8Fy27FX{dwVvO}SWoIsF)-a|<`c>=jr=H)rKmY9R zT|0I@4<9e@+K)1mp-2cCv(V4C|1v*_g;3k*r1KrO6`9BYb+mi31LR+9d-3J%4BG+1 zsCYylv-p@&FaILH=a>6m*u5*Sve)wYwZMklN=I&qHAnrJK)lqCd6!Ft*=og)vrtCo zumhAo2IGA1ewpX#8?5v4{4+y4ik zGg|#(IpX{RD7;xyB)|bYCAGpl@m*x~OdMSaIKawWlq?WnXjO9Z1{{Kwo5x$HKY&|% z?Z&m%_pi6l-)o=z6fw)Gk6T~9HSjO{cJK1m?*3`z*71S%mEX7DyU@P)2_Th6yw!I< z#@xVgzh8f?wfK4K^zShgX>A_;5vfUTqIKbN`}jM6-P#v!b2?!gi!8Oy{L#Y^u(W37 z?lJmBqyh>^JUFF5c(gvej4?vKJ)wcEE?)#p!o8;USWMJD^QYA>mr3sPN&CuYI@4YI z-CJ$TqxGqf4@z{A*R_IW}wwMq9t?l1@%QfrIm>Sw_0hEAIuS*;4+|Y0#{!?P+-POeOGn# z?;>|q|DG&I9sqC&7+5|;rkR6UbjE2dC_pQ))a6-dm!ta}EX>ZNEj*{HOjfW6mF*I_ zm4Q!IB38?X%*{qtMeryM#VB;TBltO5$U`OZY|-n8g3ZZ_dQ6ix+*{lzr=gl5(FF!0 zD8J&TYZ>n;Z%Z%cIf>Tnp^mwiXk4b)rdQ)QXVc2TtTLZIK$AvGM_y2 z-3U_mi5sgV%KcI**7|%fR++2=T_3%7r2u{(tDsf|Zo@_zf2K1Tgsk#GVgyJP`@-7;i-ns4B;{+;AMg`w=hi#X) zxL763V8NL=$|b)mIl_50qRB3%6VwjSwH{Os)9z#y_GGk9{|OcYV(uY8m3$t--5k({9)(#~%Z^>;|iL|}E&g<7n%jwRpjQbqc)nK zEBqRRJI<9Wm@W~sT~ZQ~bUk(8Y054tNk&tYZYG*lPbUL)Nh2whD8a|TY4{x*$x!B( z^ybZ3Z|EnP9yO%4)LF6Ll7_rvo?%st()(GNBQS^fa4gjdJHN>4?h0Yqil+*r!3t7f zX*cScnp}U3pXa{Zuc&EH;2PEU`mF6wz)~ zVny(0k{+>PW`oh-p?<@!k5Iaocpg17{-=x*qvKoZH%FS4aI}(Q#r-zsY-}8oPBmib z!(+Nj1;|oh#*a-5=V=caec}`vZG8q*;$0TFa@Yuu-LXmY(?0oW`@QSot%J|j?tRcY z^)VL;!&JC1yuIU07F@N9Gu*BbBoaNW)(gE_CJHl50ZkVqII1xQJ_UMoNrp4r zSYjM(ew}m^Z)6j!Bf`II zmRR(5*)3r+G2;}yR@Mnlz}P(wBXmfKHex3q3O9Qy05S^(9N)o6hW@ksH_N zn7FK4s8_nVCpp@Yr1WEEE18oZ6TX3-KCB91G3H^a~uI2QR}y;J;j-<%sul z&~G+hrz%Fmi-gujQ@ofI3r|AP5V_BhCvbXHeEW%CM~$RRzlvV0fozK)07w=-qO+%* zj?o~+`cCIo2CI(^ip?^2+qt96oz2A}Mx8E!e+bSPr8x^miLCdkvAV`~Z`zJB2RH{pA zcqRH5F#D&=l^JOJMgIVUn=2ebgMWoFDc_TaQCt3YXDQ6~w0iZ@>X~CGGelyStrn0M zzwsBO?=X3kk{+sH{1o7YP(Yfal~XvaY?$i8qf8h0fRkS6M;74`&rYMI2VoZHND5Y{ zbYDV8OYr!khX$affna*9@*^Yd74?YH#KD-xDj1W+8%u2p#!~XJDS$8k^s_Mvud&Iw zHU_cZ;Z`wo?__8;GY%ZXgEe>t#V>3MEFmWAVR6Z5h2cUZVtW9m9RAW0z>15ZiCm70 zC)d8Y)xLbG_0d}@h?^b0ByL2=!K+1$$<$a^jUTd3% zyfZl>%BY{&y?cLt&$eH_xO>}kDI=DVgjEraws|fsnJ`@j@ zFjuBgEHnmpQe!SJwtU8S+cy{< zxQ(4Sn567I;4IZ#40t+s=i0R!tCy}~T8|rlkqopX{IxdhiAC70skjcaz4RWcVR>5@rX5Q`pme3H4J-z7#iR0g(d+J|`p zYM|6CmeDXmE(!t*mjqCVs>70^6)I5zT^~D9D#MM{#8@2Ogg;w7nByVBr42PuOUp() z9M`ljG#l0XgXOv+-FV}x*3BkijzIIPG4(%c5?O9^}pRY-+uoS zB~$yZef%VQ{TQM*B{WbADSfd#RE@PTuAO>O6}Cl>jG0BGQ;P)7w9l}D(SZls`|>Wd ze`3_qfd?yv^BB*!+9d(0s+&p7d@k&+D%hFdwax7~u&q;^83_erw1=72sYNwISv^2U zRKj>7Vta2n#uZuah@F@tBv{HEfikT(#cEW0BO%T#h?rq>`O?~VU$>7htS=mwQ`Ek& zuyR*6wOGkUM%E$BSTK*#T=E?(=e@#&$D=~~skc7oCQ;;1wyt7A7BSG}z*9<=V`cv^(pb(-Bw!s?0!hZC! zDY17@hn$R1Dw@<8(~QTo{uYL^V}$$=gqDykKGBg0yX$ab!hd$gcp5~eufrLaxFwNO z9x;+`Q8M%cb^(TFGZZMHhEauk|d0>+m|qtN`^1aC5{n+_E1pu@H2KnI%hM+N~T zYUtC~)?T{{MAq7Oi|c3aY0LR~b)t&Uz1FFZ(Pe-zJ`hM~nfK%qUhCo;D>rX*o=Zgv zb@cXB@GwMS*jF^6-cE+pyLP3kb%n@>bRj{UN+FytcGWtq5&5$=YO zWu$~%8!^$6ofi&3L}g>W-chl+ysuE+nNGo`Rlj==v%Rsf)Bn)$(H$c;Kk(Sny+x5u z2o!DNMnfNC2QtO!VONeMcY}y3M_Zjad<~oy{5tMt)Q;cbb2^#Xn3a7r{4BR+`1|)6 z@deFnqrP)u@*1xJUaB1LIdKmZ93@&Uv$eUUmU^$0>AA_Fj6B93!GdS=syey<-? zXAk%y5rs)a`K-z@H=#7sKlO6>9WZpg5Xqvmcvbp-=EVH63clGJEAw6HO?q}G8jB665OlXSqy z^RsD1BrcIuwrnA|V7P@~l~69P${HCs%!{M^|FQS(ZB1V3!ub9>*X4Iu6LFFtNdOOR zLEJ^f);%5=u`|<+{6b6~AX`W>Nl>Y{FKw%WMX~i%53RM+)=oQ$oz7H+TCeN`iY+A1v(D>Y_i5dSGNF`w#=?umGAV#Ow=5tHaTpye;>Pjd|U?2~yN)kqkpFpO2Ad6X`swJwBID*k}%Z`LNUh-j7 zcSK)Txv$lZ1K&F0&4%s(0o7ED3_5hf&Zv0?3`-jnnGTVSh-J!PdeUS9cg!VMQD7O) zQR?bJV$G;Tn@vWP;3jcktjHf@{zr;&MF4No!C^EF21P!xxfJ7C4Fi%snl%*~c!$m^ z5%#8K_Zwnh3|A2nLGh*=RYU67Dpn!nV7MrKosp(R8WlOYF!P(8zex{SsmbZH*SFen zhW&+#Rk#B9$!9?>0Y0Js{fzJ=ctX+hopwTKdakq78>2rDV9%X4DMfD5i z+_4nBh-x7Aj)pQMt#I|_dkL4%2Ba3EE)}yJ=@s!~I6<=bAgzVy6Tkj7S|y;K8qHfe zQ|yPOE7taYIFdhVwNPy{!%LaytzeMyPZ=lcsy~bn~c`0G} z=?f)*qM*UEph3mZycr$^IdKM?{jF>nv?}YMb>)M3zr^B_m35uw8=z{E8t(UEhlOCe>NiSF(Qc=S42MxLbh@7x^;~QOV5prd&4Db z#0|kww*R6$zm-_HFQE2%2QG(=Um27C_ri>;z=9?Mgq`{M@L$Of1C~~a1IdngRle-u zSFOxY0rwF*^MN6W1wA7%e{+8|Zs^>m|KBfN{Tlh{? zAHThDZ_*X5kz%lOyp?504{1;NETtsXC`V&1WomC

|0&KzpeVDp#e4@4Q0Xmhw66|bugs~3Kowq2KvAAPnE(mJh@z2MPCqu#wrnO- z9?F1U{1!PN^JI}?lPaw;nv83-=~a$aQx(29pdtCH!2`V49g1*QY7X}%N#i3x-GC4s zZ`eD9UnKUyWPW3fMdjDmF{I!2H}>xb?k$CM3TD~G#^)o<9yT|rs#tV?SLY5fZa(?_ z{#^&UVs!w}D6rF&v7$Yc-;P?PF=ld(q2CNf1p^QY`>qfgOzkaHc4EHWpujwK58<#L z_5QBcQeA)O?%ca0)$^||#=pe)y=X@@hc=X=xSgH1icU5$GnCE`QuGa{54$?X95RV% zhks-qkJho`pRG)1B#{A^dW-sr9xhFxFDQW@yu+I%t5k`?E>>az$tcu>JlPV_l7`>< zFYzqo8K;|66nZ^j zO^3?_6(-M|zGutZSiAYR+SLaJmtgWI$T3XM)F$7np8FCR4K#8hu0nYXkqB%pYcqtJ z>lYGHQH7kp!0E`DKcd*Zqoophdf9gR^(Wi%X4wK1Igq2sZLq+Uc1s1yeU>=W-tZ!= zb%mUMrX*Yctg>uj{tKL(UJ*>)+UAOA%v1MaR#DdCn5!}n_~{8&eY5FpZQ|RO!B6FQ8qjA58K71<~wDOJxFS{0;a!>XJESIti#nGx77+QVt{txqyX62(aeuu~3Zat#t;f`6*#4YYkf*|53v8PX|$US0+%cy2E9Xbp+5K z3>#Y>3VT(vD_5hm)6bCn!voc|N2iyrf2PCO`5%flSKz%B=JR|Z`TRg1Jz@3J9^-M? z=MdC2PFlb^ef0Iv8lYyIF|Y_6pM!b*w8!z-Jv3fmPGXZPSJIVH9rhrDN(UVe-^VUV z*2-HIHg0k~&&d3I&<^Q2T(3Dky*48AZyIew&<@L&V_CkU%*?|>3;%fQ5*e{&()m;+ z1IR;1s(_+gk~6|f_2ZAXu7y|V0E1|+-1fhf6NM6<=#3jUG>MkPCZ8TS61*QV_3fKc z0ribQqheUlGhoWx?5+U>GS@?V*{PwGQ)Woos|9)+%h>7MV0yGd2JSB=3iySY>Zk9_ zKe<%<(@AO3R>)KeI$e<@YlZ^Ps3492N%}tzrC)*aa*`=Nn{3xt#{$5Dh(@tVrmlI8 z9Ky0W>2K4fovg-al_)8K46do1Kjy!`!5K#|GcI}SI2psbqQV=lfBx8OJ3VrlGwVoetMD7U>;qX&M;{J3LU-h<28HGQKV5GKV=1myD}bMp3+iacf|c3rB$#mn(%483U-zX#>qmL&aras}bO_ z(D2=D7>;|3?2dk(Hy&#%Vx-{GvP7QxtFDS5u<0;{n8VBvijy7JAjV`S)6W*MrGo<9!mAj5Ht@X*t=sWkWNZvwEiPL6 zcuFy+Ew3D2(1iN}d%$KLCg>muSy>G8gfUkD4i8&n9mDC7L)o-A))w4B0&|iaiyqU$ z2tko1C{8?N-{DrLzp8!s!@_5?fL|A9PSrlVuyFYs;S;<`k@Bgf5C2-b_vzxyO!fRD z%)ohZs(SG}JF9biAme@)L)PRlfsnD8ZVV@Zel)NAGYIFY!xl(?nM;6XvmoDRDz>wZ z)3=98^@c~%d1wGbtT-Bxji2;peFdZYsCX>3n>_eqnUw0!$O1NZ|OLe^N%iIl!+vj6mW7eSnlW7YSS0z zf4Et_a)u8(rE{35PFw?aFIk;9TRZ=0l8qFS9BwyRyK;Kz#x3>g@9!<0yzR8>U@j{& zR49}!V_YwW(L!u5;Y{a_{8iu$tXy%4g`(WQ$!Dm z3w0KY!yrV283 zF(=>Z+GQsLYandK*Bf=R&YX12rzXAFEi7Xwe1Ek%{jg1hS3+!FRHn5eKPwC4T8?0J zfmeSiaDZ|m@!BeXUojlJE zeL}Oj*1JvyYWey2vr$UkkW7^Oz$|`osy2CP@##&Ck+i1{#zmy?z}3@VLP_>#=VDNX zu_hld$I-GGs3K*YLt+>h8g4mm8p*GGms8Ivjz(Yb;q;lZ>ukCtNjb{Elh|q>MN(BP zFWh;=IbSU+V~{k4JSC6b=Vw@KIYvda@IB=|ObN~YXFc??&*gX%D)2m#i<;L@C%UK} zJco`qSAig2?`bL_Lx`7C*o8iaiw`h8tjxAqPI5v~SwGPzm_hI|4wQQOOGYr&i8Iyd z_p1{RFyZX%<;8a~QInIcQI550EDBES5qVLZ6JCQ@b7x8(M-&gPNRHF;qNGWg`>1i? zU6*=jtj;p$=4hI9zU=X`TvFvq8l#4Xk05@K>i+;MTmK}gcKA~xhpKaX%0mHpbi*1g zW3XZ0S+hrk`P!I2yg$(S8oY!_oQOFRQKRz$B@~qTS$!_ZpLsrX`{?Pdh{%TQ1}J6r z-a@xDCdF@E$E?gKDr36~z_(G<>1|_pw@Yt#axw1EV+a(EA4ucH7)%licWZX4DPYaw zojNdw&!Y7OCA4)U)0Q#I(6!DtMLk}h95##%a^+=K65obB3j46fT*C>%XfR9%0;?}` zQ*Wntl=#U=^Fmc)zG)K&@{V8yS|g&iIlitOC&@WI7+{6#NgbKx0B`wNP;6G0cXBZn zY@cgf0c=8w`f{RWKkgZmVJvEEkh5N4bIhv1p`8&1v-0rk)Afk z;>5u*j{{9Kf{w80lVhu$1NRln`MPsO)FOG394u2jr7~IQdQjTGe6O7&%dw? z+Y;`SP5PBlyNKn;Hmxn0gl!xeJ;Y7N(>XMyNginlXaH?o*zEw=puJr^sm|_Qso!+H z8BmGehZ0Kr!}tvUdW$K|xRWLYHxbn^dhT`E4Ce(=M+LuNh=!v}7bDUN$X= z+x$N4yR%{C5&$i?E#tFN3~*VgZ+^?nQ3s!W_}67JD@;)8GdQV9+0&JJ zWB+b=&X`fX*t2g(7e1w3^q)_f6QitlE;M8|&RKl=qClHq1AdQzjA>TpIypzKcuDx0Yrz^WyUF(G)c-5L2yopZb07{R?9bg}BC})PO zku(Zz3h(LqFjWc1oXg%>vuNkIIqpsFpp*Fco-)#gL6@(lbMbQaaFQ1`&MBlYc|m}m zKdYtM6fO@aR3K9tP9a1Is!Tuyr28AnAw&nxzX6$*3hL7*Y{${D04NhXDcD(bpk!IG z@Co>FtC;pSLx1IY603jgv73R~+0 zW}m8{dCP}4Xfu27WtZ`F3Syg3K>+^Qx9}~ybm9(~o&ce^o z8yk^J8zU9rY5+Y3gMx6nVp>&ieQDcuUA%zq=~JiCE>9+oVj3ZL+oU4Z$KNeJ`3vjl zI5dOGM>M&r=vVbbw|c?Zsp|}cRa`}gDmw^=jwge7-SjL!T0%u_sm+$a;260ga`;8# z@P#6o(l7L)f&m2t0bcPVre{;MhB@<7Tj{+DPzT zbNH1y_Sy$E)v?oc?y4iE$&203XNWoy9PZ>r1=%nV+3G@Vu>A&^KPx@h(V^V1MFa6% zsX5h9(rVgaH5Ft{ZE6mCTl$1gJ7`c|afI2|6kBn zY+(XlpIXh%S{^$l;zoTh1`QpXGq)Nt*DbElQXcPC45-0A9Ik6MuHRZu{e3%k?%KYq zbGL5`8(b~0#=tcVTAXw?Tk@NXpEs#F9_^Xx+y6$N8E_4!zo1`aP*O-TgqJu#ZVEH+ z8u#amGxrw1M62%F#}_fVg{h3Qon&@*?tM*gvM25AU+%CnkyUhPl}MND=#hE# zticUncgtq`!=~Bp&c`yG3u7D7H1Dk;c@fz1az248LDRusrmHW0PZcrPaJj-S+swg) zt$dhm6HD|~`UfZlujAUm%4_TC<@&Z|EuUGax4k?QbRNbJhM^YuddlKtrzJs#2h1b( zNY6A51%WhWYzFTRwLg~U)*!fASl|8fGjg6XjM@00dn-H8UQi)<%tKBj;3(&Z2|RnL zc21pbduQ~;bvmE7TrO561&k>_$$E&1du{`jU2dTmGq$WGf@1NB$8?1k+4Km zOEe}nr3(aMgDD7`3#xO=m}1{0I|KO;^EI|AHGl1vmH?+~_H|(ZAp(Pr*(8 z1vh&NZuT$ulBeKH{smw56nxpg;47YjulN`A*eV|yv;3*Mk2%w-h`jQXboqLj6c^yg zDtQ=;WeC4vj7coi5P*uf@r7W(?CU`CqlzP0NA42qX8J7b|sd`fyJi>W26Zo;WrLE6l_yEt^3=cg`JN*m> z*hq<*Y1XaKLzo|NjfP#6n=9hp$vcc(s^Du(Y!xjgcjVKj(E}q~^8&-fz`WG5s0#mU zsM6TtvSLRDGi@!K4wlK#(o|j0T5*zriq4%`aq!)7m3=z^r%Gt%DJuWg%U{;Mz0xKa z!;PtGrb1cRH)}p~Q<%~a_;tELNB#r6wA4AQ!&1$5#C1I7hDzH?qr5vZv+9CYCWpCH zXfNrL*kbIdHxYvb+KQ^((w4(mow}vgw!UQrM6+h!v+gK1vzp!X!9!@fG+H7p+j5D| zJqS(J^U10~(S>^`7j4%u7N>$dn!a$}+f9MBU-huZ%Xl+gCUoWB|R~78VZIy;XkLyoqPm zLBD_E{qhp5(K3w07JrSiEu*LyaSKX=8ukNmCj|s?q-86yKu#~(0^;~_SSL@65qE^A z<&=apcGX!XAJ|o|w;Ku{m~lmJu3vAaIz^S@YJ0^xtDhdnd$KB=Z`=^+$%2EUhGT*8D7mY+%+<_x67F=YN`|7Qe4^AE zVL!+XxuqF@Z)h#!^-+h)3SoQuG`Zb^>~yRY5z6)rDq_-a<2&z+Q9*^%^qe5M8)%C-uB33ISj-F@w&I}11Ohx<R|&$w0m5ef0l_}jzod-?cqUJMhsma z;U};@zVxr}mr+AjlA!2U&xp~%2ZvLa1sxmq*Y-O$h``D!d@g6JK0H`QgvnG2gtAo1 zhcr37U;N3FqX-ZP>2QV4j)3@SaPk}aOP;(|oqkxIIJ0!)GGW=N+OOe5>Sg}c>>@6eRwXz`?E;oi2pURp%E}bAmP%0r zsjyF=WY&e47w^BZ#ts!=(&+kLDvcH^K9}L>Q1I}tOD9iO&(5;B*FXL8^H2Yz_c{rC zQBGR{8vw7o2`U^jW)cHR`aN4E0)v5@KGkt+kY zi}sZx>0wOajLvarp+6R{6fl{U=-efJeTLJc`OFYnH{~cpP!Ve)Zmh&HlQPT<)w8TC zW%F2=8yP~u)YxL%9x(8vYRv0ab%upeh zu^Jl_p-^KZr_g~NI6!L(Wn^9rm<{l7`|_v>8X2K7 zxi^Y~r8L09uWd~e6dvWL@wk4-r4N(}qp)A)A%N{%evp>aT)}w7S%7Qp?EEd197z8W zXk|Pe4~5pQ6+hm%BZ7BXL@_=62*6L)%El0294EK2F%;_W@5fv=Aqv$QA1L?i7Ru5d z&tn47e{uAXA_$4{kQj$^h4rvKb@HR#c(>9+vCflX`<@*!*|_b?9I`(O+oxH$9hwDu zGmH3kIi+yUIwqpgz1GqAzC-_JWh!E?RZ0BbIs|73wjh?+Q8=1M5xu7ZWPUIjS$6!z za!Vu@3#;+(R0sii0y!15DLv(7A`&@IdeSyh(QXY*@59S+BW`p<^%CsuJZcmA<>OMZ9dp<4O{85 ze8wQ2&ScXXD5G$>yjCKN)TW_K;>0B5Px?SgEBusko@e4x%Yu72giUV? zz|FV~hyejXvz;n64hR{}GAus;bvBo-Si@tmW#dSq_T?2FVpGpC1C`3-QKsDhjM~@; zB?K%A&=lCJqf`$X0-}TlscBp+N*7TIttaOp@!K=Bm=LY74p~srk?CrxlIn@tuoptY~1mGZ(sUCEQ93Hl1g-zl4O4W6gGT8vkJ~8+fw4o!Gt+Iu9dEgj;tJ#7mTf+l!xov=2 z1tRR2xnSF9W$92ecY@LQkRYq&g)?Q+pmu1|dS)U|LMmDj7@q&6v6JR8oQ^>Z;z59u z+>b#NlKmzmw979}c2>lX4T#l15;kXVqi*D_ zWm@qEC?Lb)-?_a#%ziuD1$JQ705)!H$OhVw{Xv*ud6p$B{@p%!AsC8cpX_ikz8cWA z8pEw8p8*G13uq@E$MQk#Sb$yi9c)}h;v%>VXwUbipW3AC#RIvFBC9}n#$4={m$!no zuvcQ0j26a>@eC38B>x4YHF{A!#5?7pt`#;T@d8`t6*ShmNv}08DFWi}htd^)@FSXv z6i-tZ*k{-qz%RVx>VBODm>x`HO={}UXg-U?xxc&f&E5Mtccgk=?*vAm=Z!r*iOR7` ze><>9<#LWKy5S>mkiZ3GLH5J|xPSwTY7``hCqzF1V843GU_o8UN#X?-H2@D`K8QIZ zWzoN(aWn#wA$&gMAHv>e2XfO7t zcnQSS=`65ovG&l$1f}?D(`}e5PMH;2TZPP^3j(~w$VCoqD2-fF-f9nRN&pvJR0{!9 z0d~t$)Fh(zwk#Pj$=v6QBe5o6c=8m^uBF%PyK#mj(DBHsdyp&+}*~1Jgr!L}~ zr2{%KuI++GqFD6kK7g!|G@#YpdjJ!UW^)C0>Kqsau2ievCGjgu8oJNL;0>pN=vN3A zg=`Ke^yB4QKVCiw|M?-lq`y85=1gKQu0O=8m~ojIf>?@%H2w7e-bCNTxm{l0^gHRXbCH)|(Kw z5Q^+KEP?RCc`H+N;IZ8Y6={09Skd@izVC-^>(Ax~e4nR_hw-*vKa)aE$s*0%xFKxn z8Hltgk>YeLBE-bUOR20Khu`l^6zob^EVBkH{)7>##>sd^EfqJ=!vXV*<1*O-6Y9*; zbeB%tNXcS`)+tx04Q5wEQpur-yOv}#>3pPuO3BO+RpY}qjyxXsNheFw80?504n~3P zOq-_@WlwH@BerkIYj^)F9BMUSCP|M*9cn!qG75XJK3@W%Ok+y($dLB;w)V+S>-jIS z)qFEdnPOmL(Lf`qkFYercw_%=z<(6926t4UKWqY>b3n}F_y#20Dy0iX8U~@7v?e%I zq*c6*Y0LvbItm3NxH=}6$56%SK-t9Dwjm>9{1-?3Y8eDgD_Jgp0M1Y8V`d~gjS@Y{inazVTyL||CTFEW2s3g7jBk1>1r&@?1M%->+HbF6 zNk0K%d9-vScLYv@)FqS?q6c?apY~kQBB%x0sT809d`ioc%V&m1QEW<}9_Dp8zZTF> zTe{=(C{Gzue07%Mn%9;2n~q>)NrZwC7^yhK`l1S+MBp_%CozggTrP2wW-JUI16wi? zIlglQy^bXaFVK0nu&p9I&LOSOmI_6n?xjMx9GCs_#3+w%4$i9P4{((%RLKm`g+mdM zP+DVR;>G|uP>|SB;NZquhgC++oVQ6G% zplOJ}f)AeD4q8WK-k7t*qXd|FG*cm5pU>)pH85N_iib+?4sSqD?kx+MTMJc|k_>6u zC7}kJkvwkMfMTt$z)dM@9a_7B-t=&}pj2mNR5AM;w|pA!Nsw6iQa}ZMQ`5q6<08}z z3+mK5M=OOm=i31O!<(M3pGjr<5FEtHm{g*o3{X}Uk4OvKp(Q*ixb-?~U=#EBYVyvP zXx^4CDYMBY!s%Gx0P+SyqiOj98{RWIT*<{*p|7=mWsjo1Zr!}8hey81p@_#0yYU-a zcEXX^)Yp%hJqS}HBExy>1Vf9urpHi3(;uef@5e)($od?N>W<_Y>i|--3gZmUHRn zoDTiO9?G$7>|;W3s35~A(7rb|jyPHooEoJBN1SlKx61k{!*VtOQPxO$g92)CQ_lZtqIMuk|QML~@1C0gsQ>-=6Cw8WD!>AFL z*ER64(kBj}(Yn%%v%}yHbXK5499K8Oh7^T*Onr;Y5i??K;w`IGkX&4o7|4~%gyLB$ zYo~S;LQt!N*fE_Sqx<2`T}DVLfc|W;0LPV?t8A07@5=G68>WUIxz*hcQO?0w#;^xH zQYqy{TUs`5*vK)$wY&#UTk#>!rrb_E{E^-8K8-Y5B5LnI)m(Te&gI32HMoX+@ zM5+FEVb}?XXlK4M1bhYXJFtiqpdZ7$C$CZLD6*Z1zE&s<@+!*$bY%ro$gy@koymX% zRVnMU{y;b{sYNt>2q=FK;5%psm#~QewK9||W#h=cj7j1GLq+vRRB~VCN_IGRh=@Dz z_~p?<@v@ac@q!#=MvHBDHV&X9-bQe)Z`GpNbRO_RVHBwqG)UnIt!z>{0%A(~}X%x*JmWr4}U z=xHMQ3hX>AE;O~dc|8zJx_~Xm2(yv91xQ(i!=pvKDk!4<24CaBJ%%hB&ZdBey8uu= zLf!RLVALa|rK76_SQM*_w`f8-w7~*GzkpgrJcD7SF-J5SVjQb5WL4ly zU^`gk5L6oK7xV{n&$Zi3479W2&swJGcq0Rp7HZ&5gyDdpM4Kxg=9z{aHPBe2JcPbZ z>GEN$LoAJ`-Tr*x)_V(I&s3-XR6YL*M#cAZ_Qz4wbK(hdt~R#9u6N6hReE8JAY9TI zu^vr*`8mS+BCCU8(-DWumG;)D@o=J#1MhNk}S@0TctzL4d&c$#}LHqRO$5Z3JaENH-_JZwz%d zjDxM^$)Je2%u1Oxh?tUHM1k?K=oT2WK?Jm!DG2GM<(!ydibYCaKr+loVvl9xHP15^ z0&yW;8W1Mx7N$Bh8T9y&4Frbj7}~=aYss=m{!xV2z0uRPzkC0_ox65-tvhJ<5C&jy z77Wm{hN*oiCNfyP34%-p^+h-@PDiDTo zHsGZAQfLISYcCY8_#x&gEUD0hC-%}R<$*SapyLI&z+#nqJDcSl%}H5HtK%yuzO$;1 z&2iK`(4rO53e(RYKe{CLIc=s^si5sggwe0BbKt>I6qe$D+!tRFfgD5(!i=~+f{1>w zUA!4n#zx3WLCbH*NxFn*s*gb-(}F$2m=iUxlvM@_q!7qPk_uTh*B@}R)~{DnE1JO1kW1?u&F4pmBY3=SQ+SmG$rLUI8^{wK&Zcn;7gf) z$88c7M@iJM>KWHNytDJS9!`-YR(;Iec1EIvSNTqM5BSH>%KT$JOkqVz>%_E?V3r;} znjR}FyVJ5}VG}BE3Le{q`lAM}$*CX%mqr;oi3GMZKTY5MT@ z`)Ia(J~p+w{6CsoTU!4~9Q(!p<0t>w*edW^xWnZK^wv;P=2V$FTRnd*F_Qh|*#B?v z|AKx0XZU#`ZeMl!e{IB7Ve)!AM=k-EuFlL z8JoX9xp4m*PDw?{Tb1t_r;DPT*f*+YPA@#U&rQrf{ir&7rFQFN^})0&)vIr&f=P~C zJOAXmE=>YAeSrZe0RukDTRruL+{*B;ayo<0-8p)pr3m@@82r^T41CtkX{v+a^ilX| zOBV1Yw-fIx`Ew`U0l-+7PTp92dbY7~ar##E{FTMCUoD-S`BJW+ne$dP0u^-)8O@N8aY4tFH*WFXKTa$Es$e947am|*r$Yncpz_6`blIgA5y$bel>GFLu z6#>HHg)bM+UqpZNTeGm?m^AFv<%K8jQ;IT|%`!m4i}SRCzTK`?Vt#fC79GaPfkys2 zcwW(BR6=cSqBe1L{?U7jPo8KY2VRKk^i=ii9B(m9Szfo!&t0m{Uebpe_HuFNa~0Ql zQmxd|m0Q(!rmLrK!J#AYsXn>nzSPA$9Mdz4Kl~u!hxV28xB`p;K+b=Eqc%0UbZ53Y zJI#50st-O|oVhYT_c;ugM_ik|$Pou%`)iZ$L7Cd6^Yc$`{p0(a^N(*s`|{!C$CU5< zJwS*6gcy}z`cFD%EJoxp)YguhW-jUrG1BoQA)Qfj1;Yi!4MA(g!c90XAIrx5+AF1x z%BE0ZES*S$TwKui-lvo5%_p#S)pMT!nw+2e)566wem&WjS7NhP8{bZ~PdTDgwEKRf`UK-_ODV)jqki^wks{ zBSg&5Ewc>OvuCQGovnWU1hX+tp08fGUA=cv@c=hv!{={TKbi(4P(6QkVfHSkLV(kW zp>MNZb^0q<&G|=@wR@ivIH9{+?Y*a%S4I&f?dMi|@8RO#KEhY3tHry2s$O_c zd%Q6|Guvl0K$J2BlyKooKrQDv1*JJ&MO>x;ujm5Y!u;Ia{F5u((c+UCLWL9jwRZJ! z?GAiCMHuVk;<>jK)kA~ig}?kovWPy0@E0M4*+Tqy-CEXH(;I~GZ@}e z+_H&_NN?2=g@ou|o%KsA}t zTvD7VmGzm(zB4giW(O&NnJ_&hL(}ZKEflA-rs}A>;bb!BO#u zOn!;Hi)2FwJ=wc?3G4&asty$GvY9;Ifqwpa2YDCc%)+_Gs8*+Lm>6j4bZz?L{0}z) zJT{7jyXR$vhcne5-bL7$0uIH|>^s09{~Ztlvfx0XkRiN*^v_!eXpxO0zP;k2h$goQ z&DGwWX8cPqsmU17+v#rs&uTYEh8j8b@Bd6#O+o15-`@oqvT*+n5Jg021e;Wod4A1E zIj|b7jc^Q!-6Ijah}HqLS5M#21N(MvVeYnU9GxEfQP_M|4@$+y!>bire=gTbqa(rc zCTBO{UN3*?hc<3JtMBDj0}BE1>TlF9VTTuIzpg&`Mhm}!4*{bNv0fm5_xC9>0KuVN zc~ColA9fCha_pGh3-Bm17bbV}_&b>snPYOX-2L}cK*mDIeK|U zO*ZRyEnTamPRVZKxiV#AQaebN5%>XESJm6(s{Ku2&23G{{Ttk_N9w%s^ZT6gsPw|} z41WsOQfuOYc0vMo!(T-TRb>1!GlSvKppA^si2yU-;_}fKv(EIs9P(#6DiSej1pO z>e*R+rfAMB3BhA=c*r_fAr^K{-i6VkqpSp1TZL$%2V|C=7D4Hv$)_Sd4|EFUqLbK< zcD02HCNs#u;UG}bL<3omxsR%!foOFD!(>jskFYU0!KJuaO{4*Wu6?3=Ku*zS6*W@= zXJz5ZUmF|ee|TEEI15c_w_WJVUM)Z8%YM>qo|kOE`ybXmdWWShoSSs(#oS&r59X5C z*q_xjL1W>OXxCpuGiZ#5Jw2Hb-I`Pjx(PP!!I|3RN#L0jzpDfn34KhuE@;H0yRB9ac^OX9-ZgIhOQp`;QmqE`d0+ zT9;#gN`o#2+`LI`CGX(xpuCcGE;h+ytvx!;^;K>12R!t)7q$~Mpc)z#dy*tRJ-u`X z1ef#kvlrwg1v9`GFW?|So>Qu8I1WJ1ke-{q*(};^1x}nmH!}e0T>8asbF2`2Ue7^+2YfW zQQrs)Oo#_n!1w+Hfb!$X%kZDfhpg^*04*(pv|wcHag)?uHh9x@5rF}*>StF0#8_BY#efepE;LzuAXIOMe17;%?VWE? z*=P$Cl%xEclR%ddidjjmIwF07QdY5kftQ2hEIW0C=yT?EJ9p@sxlew%_`@YsODl); z+SDXB$~r(fW9k^XL1#JS=h#b~Kbhzo{nSa>d8&HnYfdsy{a{K55vLyTTK3+DxI3^T zU%!V8uhbP!;ez6>y#sRu`j6bb};ol6uKuMWy10SsH||pU5kIt#nPnO{JjzKarojE4aM` zh+AK->^AS>v;zDQ4*J%d@;)L0ET?Lk?35OES3!TfGXpDcg`tfUHgR%`j0L+uD2L0zjx1aoGGBwWNPKS^N8Y zK>rpWe#srH=>SQ>yWtNnEZn)j`0(4sr)Oa^s^`z)mE)yTJV(@OoqCFb4)ORPQ`Nq` zBDGY2q`&{lPz>LctE~e9i21qm(!R#w{;x;E3V2#%C-Dfl4bxEWy5B+UH8lyOZQ;W& z7H7X^x&8i!aNwOG16T>YFgFcz<;qDGMv~R@k6^+eBrnbo1!3!WEp6MA&oYoc}+wp(=*J!$>t`m`XU#3XD&DDCToX4yjr+BgO_4wz6Fj*p~dNQ z0NWCZmA-+tP=X!+%r|et9!lVbnW!2h*A={qf+x#&zet#G z&Eoy5F2-O5tIWy_eZbHH<-!L*L@_nS>2J9e(<(|MO@1Y@w^}+`Te|i)9t|(Ow0a;)j>~#+N-uZyv-5KF>b@V}UOdlq&BSps$b;emh_7>m@acZmIMh0;k~Rp!4sbWBH{a3 z#(;XyYZpERO5q>k0z`|YlQ&33h+H*%u1;JxTZEI!6R3W6cj@{W9v13duxq3U3>nn1 zs)yzigf_JKjL|dSX zdy%`X-haGw`MR+ygh9xvWNOlB@r5RoI^H%)ghmh#{AgPx$*)G}4q;k>A-6VjMU94y ze3)AECMkAnQ=hT}f)hcd7VrN6q7+J{Gpufc&8KbA7@Qy#N#g9+(wOM=0|&Z=vLxaz zS@veb8|spw9uOn2fWe_buv@MK@DAiV38-M{+C6#c57H~~_)N=qrizi1=Z{>4oRaA$ z4$CK`%fu;Eubk2Myu?(n((vq*lJH~z61?)AxT;rdW1pira$iCZruj#oEuK7GJ^c;9 zg)&L{3f6(jdV8cbF~XDhmh%r%;uog`f9i@=!Z!^e&f?CoEM%Lg%Y_!(UNXJ=sZD6I zrS+vmGyH35qZl37T!<6A508{NP6y{}%A|+m?5?$38?CwtjF8B2QzXiu@yXSgy(q(| zxRO8VWs)IPTq)J`YZ+UGLArM3^wN!6+zTHSim?J%5l)KPtr|CmTVbBa9dO0e81uO% z{ln6y??P7qVB3&eKtZ&B`7I&X;y(LbTdD=Hr7x}m`^VUiA)d(@gCB?vOEwCae*v9mq=*ITm;*-BDe0?3{TMD?66l|Hyw;9p^ z{QW0D2U#S=!Q7Yz6s@qoq@+9!rvl1UHEA0nR^hX53d#_uF=HzXP1OW~51Mq#<-SRS zLwxn*79cBI4dtAcnm8|r9+m+Wj2dYznNBd6kclQ7=s6xd+y0qkPIBVjATb7Uku;Wo zjhCK~D+?ti^bs=S%?%Xvjo315Z0C}@O@x>}pEQT6FNWN~vEInuLds(~vjq$)uDR~_+61Bgd0&2|iApsol;qyPd=P(qn zFH#KK+sw~?Hb478X#UA3KvHK>wZ>+>JRhC|c0P9p*k3?#Qi6JP8VM?J{`c?ey7|Fe z{+Q77tew0t|9FBI{2$-n*2R)R@nsm_%L636w;iYG@?F7-F;qj5cEKU|(koa9zO`UY zvcpn_j22jssNF8flR!g_TuP(-P~9dgOY@s@6{f#J(aq2V18yPJ!ooLmc-djHLF%@aFQXm4 zIr>goyYqN&rhVeX81_wO`Gv2p0a?OpSUZ^-hl)Y2MA-=}+`BAY`hJTX%%!j9XKyNP zHeZ)N_y*1df{CBa%k9R-5XV+QR@=6_)C;z7`5Py4C2ig3#Jf)f1R^vAe#!nhJcDkk za5KP=UPpo35q?H0<&|$K-LsO?pLMJY*XQ^++d{p%{1ucNT9DV>-{8=)f67(g%cFIMfU;l?*nsaCZ)f4q_|{HB&u54Lk@;lOxQq zdy)3$WJVVt2^Jg|*&&;t#`pBM2sQK-{ZT(aUn0PzfOyoFIad!a#GgLlUf6{J`DgY{ zdi)(b^YM!DS{YO1ixf0VJ3GbZ8nub{&D(Xs98>k&$2?(4cJRi+bu(hBqS4Xny&uT0 z_8sWWyv$fSbrueU)Q3-0 zyVmka4L^KZo%?R_>1{mzXC5XO-nqvjk>uOIxLUn;%`S2AYl?_do4x}mP#gg$`s_Sj zw?6%tRRy(~%eGAb!G<pgM zbmzp6lM@t{h==gHd4GVHuVk8}zAk* z{}bbX7(UoPLHwWK_#e$J8#cGN;(xTfw0ZL{@jrf!pI5ESPywT-tqGN^5z+A+Kiq=B z(`Z{#zc31>n?ECRKs>SuX`9bv?&RF!5AP$hWZ&Y5>cpAqG`U3@AqJ#k`9(}5Gn6Tc z&6@x=#n$}j@R|^=QiA^obBgAqSTZ-wgC=#2_zFL|ATGs&GxCxPh`-yj0I&bnIi+4h z?9~JPuN3ydy?Q{jY9HT1t4m-z$-Hjq@^z4nktohQMDv^5pDQb)3+mDhSqkat;4x)E zex2N2|KsF2S7ev}IQbqELRgaYXxUox3-MYB|Cfh;iui9YZQ2xo|62jwH@orw=GI^E z|IZWu=~twaBOUAW;LHxF@4<_vepWlfYlqB9tiqajRB*3Fo#1K}v{VUD12kYeKPLDE z5Ec+TN&F;i%BWffZBXXC51jf-5^~r($9|YZS&20d&%H_*tT%3rhC=(hy7zU2ys=ne4$D!Z}=}{aG(Z&C^&YrH0u;0psL$AGVzcB(a zG#tl~oY2u1k}CB`k~;{8I=7|vL*pIchT~}Gf5KQVc-h^Z+OcatzLe!opnn^TXV+f! zLe|n6;BY8ZPLD-nLLA3%vH8k?h^#9g%tu7Hp)uSpPJ{}F@vZUt$6J?#vxrqHIa~Pg z)-_iVOjHeJ>>>yA9UWU;gSV3V zTCfGGZ53MzqZOpNTglS}RpkTFWowwe<_2_p<@gbX`K`&UbtIX`*s-l!f89cXg4yrJ zI2OC1=S(4=2f`f31UML+wWS#zmaIx?Otgx4fjWU-En#<)VtiawN~4x;v{%H-T)a>G z`qu*57%k;RvwrUy^gzyM?6fM&k6o%zMf`x+0AsD-F!%lB!<5BZLa@UeEjPu%Yvf)z zo{25ARbq?G)y|t{$@F~y!qN26!y>YGe@91)I8M+c8d^?7cv!8*3~=ls(iz_w5s`F! zAQIz2Wzcvb+@M+v1E$jBZ|wb5bNm%3+}AiB4#)J!MSD9Bqnyr!cp=~{tyOKD2m>DZ zqX5Cb50^~O*SkkN$MWdN3LBNqR7TUoI9t00?a;WO=^GQ5)3Sy=J*~1EEFMn_+=JD1 zg^JB`dARPrRQc>+8K6;ayI+@kcN%?`Z7>9UBf>H&!S}P(2k(oX*E{3b3Ofs{TlWcj z@sesml4`g>^ujjanp-Bp7WX)6<3xlooEK9@{$Yf zYA=5YW#nbgPt?cS{FiS7)kO)A3AqJrGf&{T-Wu$1YvWny%Z)gB07&(l0tZ{&(252iB>H)avLQ)RjP9)2vjH3v>1<=V3 zrwWHV!eQE1q*$<}2Wb^>2Ni!ptOhX`#MuBIlV$1(aOYF6;rMH>pIELzBko)sWo`3M zZ|RVPJYZi$SQ)_HXgCg&J)ucEvjO1-cu25IYi4!{5UR>hO&M0rudsUM0#b(jvTy5j z0-WT{uUOrE;g8(emayY#;jjohkswC|b(T6*veJk36N%^aNpm4lLJbZ=PNgu`Bbxr6 zXAere_u`O@6x|FhGk!ezMVL<-ugzO9K^iqIh%q5P-LAXXkIrh8oe?L zDcKsWjuxcYCJgV#-g$ysLRShtlkC~QT}l8FLD0?sUK%coc&F|Y2;0$&hz~P8Ymorl zi)c$0NxG}VoSW+E$fr21IWLf@t3&Y*uM|9lW}7v&1;KE=op^QpZc?Skvk zdt<>=QDexucfFXJUE|r1ot+(!Qo`^QdUykaLv~VZ_@XByN2?lSK%}AQNA^(aT7t~b zNFgiMAH(fbVCL|9brEI~e4NN(LqaMfjG$+DN9sNL)rp&UW32cRP1?z8PMSO+&Omhr z-E`W)J%}$gfKjqr0E}r6?}GTUEnB+w?F^Y3B*T(S^%&}Y^T6x-_I891Hbf2nUB@yQ z7oMkZUaezRMnDy=9LA3vW55wb#|8FK=+$rt$K*5YL(7lXYry-{58OVB#>fqbse=~| zAq_@mo6SA!mthweZA?(C2EisBW~>(zkXTOT@C|KRN^OKEy5Y8PV@!#rjWJEkx9#4y z{Wl%qwPNemt%m9hzS-OWvW2CLWb~y{h%I%(#*-pnR@iL5lj*_Jh85h5eglmlEZ+w6 z_v+_3bHR~FJAY6Ow1>Rrv|JL0pUU#^T>&q``jNfO_!#F932abfoK#lM$Fu&l_NlB~ zbXaiV47>raIMxQdL`6YxXUH3=xkg6wsE15t;lT;mBVII5RfH`98Uw&e88m-2ji~@R zA(@zT);IV(;>x_6sP_9U27uuGbQN5FYwO+C7rLcC+jiEqmCp4Ft+1p2E(@-_t;UwZ z`6soM6US^yXom*kp~(e8uo(#kf#O(h*S@PhK$i&9sL+Lmy5B_cwN9j~=w>Wzu>Rd| zIvE_MkZ3HWy!+))H)vVHIUXFjBm9+i&h=B_ri+#M%9_wm9VRLCY`}NcF!_F5S5Rv)EAX;g?L)N7kO@<^-$SZ+wWl6LiMe$ zKpr#?kvd^gtah3UtNac(jJqT`SdV z7bcS$FSnNUw&BOud*+1^_Q+(#!ONp+Da?OXcehB)phNd-Jqm#=78>JAlUH^U)4nLtt4CPk)hm~`}@ z!6dgGB!YVIS(g-cjGd^YQ`xoe7H2+Px^}|7_g2dBZRE zKR?IMKjxl3r%B5ir{#}JP3}xUG2sl-Rl7AyMv~Bg3K}y(@ntwU(i%4J@riW*hs2wS ze^tTslR^eGl~E(Ar)9J(GY11&?W;(hs?Xr2WjK2yG%7dUy{~82AB-USDr*ikr(9#y zxZ^U!hrF~v(!p^~WUwC{XN7|rI&yK?LyX(ezoge4##(`f?EqmyX6~S%MmkE%8r!@| zdlAbv>rZmA>I%Y+!YMqNIea6dlS|N=&~rm!Fqzk`*?0f!9lkF>TXS~nzGBca%uP(v5)UuTBQYbo!vmCsmMtfx{a zMxa1XkL4prLu{J>bzg5n2;%Ppv;Ucnh=a;Kb}?rHG7J~xk|h{ zT^WMSOP7%0i~2lk*fX{(f206yzyuR}#-z<~0t>~E?TN-Qk2@|on%JnNKN1n^Mf5eR z65r0*y+rh1U^3h`4XZAmxQ}PD}SV|XAH!K5pJ44Z)iP;2nLv;NT}iULb-xKgENxA z95Lps;fZE$LYH0h1T6Z%XrACh{2q46iua&_TEhrd;s;n*g!{=%tzje#hYfhH!BSx~ zpWR*<2JEnX45ZoL^odStD^#C_FI1(waOJZATVy;ba+aoqA{PUiR~pT3$5nT!)4Ws{b)PN{m|A9 zYal&3TrtWzo8nB{lrTlqme+JhC*97FJvwnz;qr~;&7a~fUf4xW9_PWbE`B9p^b z+};NPppz2~Wa_wYv_f=-yMa~OmM-TqfQiZgNFsiKjUNHsiI&!8F)pBdd@l&wKlx&u zcuwe5Z4adJw(>;Cd3Ji(L{T3YOwFxMOhb7njZmj>Jb>Ouq&T^t%qaFz`KKY+V* z#frvcoeF#%!D_qqC2&Qd1Ug*q2Ox}c^Y+%L!9{zw@Y|~arb8!fPyP&Kh zVT@58Y`lytjffm9uaCrfoBMpg(>$P2`#5TtfYsIwhmf4Bc&xP#KdC-=7x?Qux!zOE zaS%(8OD~k=2jtU}z!D$I02i_+U4)UndYmzQL^H|}=1pEbF34Z2Lxi!#xXE|g`Ms3s ze>-065Wh;VBJdqMgYVcPzQtbg`yhUZAk8+qrLe7$I=iL9cE|qRa*ORj-O6yWa=I&Y zYZo@A%iZ!T=*NGy4WxW^bt)%YU#Gs4b@%F;tg}~Ro-0pP%@c%K+Ec!HH z>Q0Fpvw2HX8SF~0!2J3Dc_>ui;~O^H8eT)NZD^{S6ByWd{^>^q$})|C>Al#1&pQ;K z&zA`#q%KDgV~HM$*s;doq@fZVYF<8LA`youP5$XFAsQ_JBV4Z`kA^H>92{Y36<1!D zM9qOuN!lIMD5nn%Teu^#0y3I}i0Lx}wPj_u)faiL}jQ{I4Z&% z!j?@IC$0)VOH%}UIR;7Ic;SC7NKnMgk=#{$JMZfnFZ;*uX}jef=kj^0q^RQ%fSfFd zaN$EA6Wu+#%6KNyIjk2<0A=$it`el7`G1sqOY8&?+lw@`UB3@2kfWn%fVi^;ovlP> zBpV_8p#(~R(BcTKPjSSH5Lyx#^#Wr7lL0ISBB4;w)u~wrUNDcaS%Gax<(WnBG58*m z=rs~ptAbyjox<=l-<@8%@|2V1$oLl-BJUX6>ftxlZ{8MW!XS=iVQv>juTxn^5s8%w zhYFcOaZDul?Ak9dLe-yV)jE$9D`PwSF$ukk!-lQ`FX;9HaDyI-T~cZ{Xl%*7J9opc z9r){CUdLZOo+ccCY4^7uMFwDw>XA}>8sb5$vK0WOdKN{t?OhRjHApF=R-(&y9g=_8 zA<$hwAdb;`UI!?MRH`^eck`)~NW4Wsl8VqI@MnM6DH;>-($PNxWy9{yo&#Nf*mYq0 zz8zg4AX?&OTUXPCx88b`3ZG11!yS%_coEtzjY1K@Gz<bnc~irs*y^T;KCummZji<8 zr3zA;*XJT>rrN7Z8W1ep{@i9qu&!g>Tr5G@wHDl4A9(`Efuu_rpTpZQl0cO2Cb7PB z23v5F8LsRge~!a~HR{#|ym%rXRRavuP#oiYE>gWx!}jjbZc4z_RMxKEZn{UQpA#YP zr{~xj2MZ8H_>CDkh<`(6q}X-L2XLZc>sY0f2ErT`>qYP2Xf6v*{DCJ8$*$w5B8 z_8BwiJGOv(8hg*bk;q77s~~B$q-;fUMg@u`Yan-Q`9mQ$8ITT+Ip#PY z_2LEDPXJDeRa|I2mWp8RwL_Um zlh6fDxGGX7DQT^k8W>IwmffxRmoXapHA^tscr?!JQ@mUm!;nUCxhi^f;sBB`AOuXh z9EZ>N=T+{re~p9gaPJgBL7vv-X)l|2rbn~63V$3JMYGBHaA9!RI${lXSXk1v3QjH( z;Io-v)~)b0F@u~;#N=Qjv6ureT@+WPrnZB$GLfU*f0Z_$5<=fyn7hZ8cq(JrqyYsA zM;Lh013_$27&bR)IiA)IN-nb*ElfVH-9JaETPRVg5ruH{2nLZv%ft1eSSVNIuFF`b zkH4#)xh}dpxBrG5?F8l~Gt5melAXnt5 z&%7rd4vWzXZneJuU4dVcff`*aqO;-o<-xnb=8$$5I(e3myM43z@UI+E)s>~r>+9hl zpXw;BM&k3dnDKjY!g=~I`J@AFuDsxm27ax~mAzC|S*TDp<%4C*%BDt-q@W3_l*@p$ z2S}c}r=@a^3Kb}??K+U!zHjf&U9Z8PH})Ptt!qnU&9Vi5)AeSm84He?Ap_{?+seZ4b9E2lD{T#-Ff_AfAmHg=m1zG z^LCs}bnN?0I#r#+!v_H4NBvH-Mj&|M6^S)bN3k_^0YL-%9R+QDz-xQ&sDK|1M@&29 zj|7M{RoK_W)%D-FTQs zgb-Q>=e;KliCOB6=?pZrIh$?CytHxSq2>)QZMHTXYRL?2dMRVQ(!6=#m2Bn}>y=H` z=9gb?-MH!HjhUC5UwI|Hc|&vSru2r)hKR4_509pP+aD6^BMMHXw;6*gMt1WP^&>Dd zeZ-u5FQvW+pACd_jNij4ix<9`1E@8@9x3kh`{;lTJ*}5vmEeQ)gqS(A^ug!wRc5$P zv~IAKQ&LLXj`=q_v?ycCO_-PiF`AZhu%xX}!*9PMsXo%2csZdkr&pSZ`inCTpfdOq zWP{WdrBhrYc8v}`$2-?*a~0IpKs}kP|B3bpKRC;05_~et+^EqIP>oY2(Zz{cUyX+A zrNcTBACA%|8r~7L3sfMkz9lMyZ-tvg*!wWn^q(;n6~x7FNb22BI5L$Kr4&EXoWKx< zElJAYl{jpT;h5|%2E8>t+8{kZ(m8FcN9yrWLJ^2G4D`12tqIU~x;0RqR{iljwAtKe zS21~ZIv*;js$1QOLy0+LBp1mxsds(=W>Y?ztLW4078hJLBFE(wwX#6=ScODfthUS8 zBcQ%%@!)B}X}95N!DFcr)PNjAPy<0@IAJVT(EjHK*3_#$<~D2-ZmjH)<(wD2tfO45 zEcCqkeKkV7Ef334_-fx*ROtJ)7qfS z6({g-&@55vP=Lb7Ud)KO1WVWM(csO+oZ{ehoD~EQ(Dp)cj6pbf_$vCF^5iHF!FZjw zv(MBHg#dT91H8~kI-eWhBTULh`@#AS(`IR(R6cJT&1Z+Lu)CnNV1!L?BXcHC0hCrN z1V&JRj^7S)xrcF#0RIyigP-`GJ@IT-y#9LI$VepSX@X=@)r4`|M4k9Uh_SVr8 zUL5(~b4UqqPv_oUJG*+M*zLO8a39&t3Cd5z8ZUxnjAJx2jecD^L;Unt7+vD*SJj8# zNSCi0?^4OhKpEB5s8Dh#>=^lL_%YDFci>b*;o-V5#8A3Cl&X|0i&4TdH}d{(yF1_9 zy{~geitWA8a96ITt;bpsg@k2wnZ(UR+r>asL0rzdOci{ z1{WYzsN`$hik4&gI>9=Y86M4Aa1v}JkW}lzPWI(wW0KnpH?0ZzCcj*l>v4aKo-Zlhj_=2l_Xi>+u7^;20e>h*OTFi)O1;S|{# z2H$#q0Pz(M2j7bMT^_qHSQ(3Y*Ve}pi9JIGj;(gU(hu2eWr*Cz5Elbk(y{E;ID*+p zla?tQ;cr5chl0QcVg>s#1Fh~ld^BZjVw6jvS37=}Wz zjMtcP4WWokM}v_-wyv~fnlqYzbdR&sEPQ#sdh)v5*-AP$jG;c(hZ}I7VHz#~@^Nt} zUAEBO*)vl0Vu$;MicfCWjCZz^HI9zm8s|u@at;`yqddgllb$Rt2Iq#udKGFcv-oR5 zkymXH3%W`{00umzATVBHhc6NCFZJh9xdXoukr~dI>{OY+>Ir1>6vr23Z=F~y=D6oa ze6!+B-oUX`x(KVKgepJ-I5J-ZEZz8f0TK7XW;#(ZoiHcjh4KN27x1ftPT6Xp2#At! zp5QP^BBuQBivRK=vOz7M|7pX9 zmS#`oJiq~nwhVP9;l>MsK*BZ6Q#PJK5^Bi|2~PU zHvi`&uHySzy=AMEr}?XSyd(m+k~!ax$<(G4J?#jnqSu`{UW8y*oRU-?~9(eZwV~Aw})2LwlcP+c@UmLhz;rH0Kko z!WHDy{#mvOp8@HFe0~_CPM1BSBlxy6tTu{1AJpT7Lt7VGT19)uIb5^h9B<#kLt*8e z*DmjU{4lcFcG%H3eP6D}p!@Kj1JJs9Yb@e<@hZzma&nU=iC*_h#` zlt##m(BfuLr^s8SFS0r!i6nYbN1Tr++Me@~zNhqS!r`~#d}a7yJKm5BwrVU9)0$7M z_*7};+&aCEZ3C}D`E7sJhkzU7qntu-g#m0Z9iXlf*tJ(@1{eY`?q%(NYcaa!h6Xs{we^U zQwd*G?qZUa%z_n`<(!|L4$@c-I&NW~hYb2Rw@NA)ObLTm&aYE*`P!e2EGjWkVSL*5 zWBzQPe5~-O9IZ`5z14h>W0IkdQJKt5$F-9U1mc{ZF0f`&R<#pb1s6qCWVq2cdxA<| zBfYj6$4bjTzZ9z*64GN^8ShWHf+p**${an}m4e0&<8Nz@oHFC@JNJ?%OA-sSn1fmv ziRn}om3bqsR9e!s#o+?Z35cX*fyv7v-EVg7+ZhSvMu_deGEL>Na!6U8rE=L0_?}3Y z29NZ%_Js;%d~#f0ptouF>?XsSxJ`y{YjRi!+fNOv-!>KetjTH0tDm3fHOA5x;#qaz zKohvtl!Q5|huG2=i}gzH_efue@%4w`MdwvNzv>6tjF<@h5nkF>AncO4W857?9K z-EaJ^170Chw0qaK?Z4{?J4mUQ_rcoq#J4sDDfDkZ@id+W=tcW-4LBJUY=ED%*EN18 z^WmxO=-ydd^9IHO6O_8v7vT;s2V$b@4+r*lc7)^c++e;?vf}b8z%wRWbe1)O`z<@- z5a40byfMZgK#0?2yZ3kP-1UbJ4{?x30&AOu$VIlecGxuQsV8QDuENIFQrAXrwM#ji=Dk@ZS8!b?gylgg#J2nJ z?k~hOU8&4g@JU}rHN+bm4#|r=-?vGJL$Tzb4hE`+Ux>4~2}gAfiz@`k(a-Bu{ygK6 z%w~{Bw<()DMBze^FL&st_2iaUTPza@nbTFEH|+mo@6FrVxU$6I-`{$k{tkC!y8#DD zEM5{4JWXu8yyJzRA>BRgc(9NPP+LffN@7Xkd2kYJu-Tk=i80<1Z=D6mY8#CGJnu)D zrX=xK-jDE}<=(1Wr4q)8lkS-TFGy8)zvrHN_9KEa9rErYyN{qOpgBm++QDB)9y`|; z++Mbbiu22QFM!>94jipWLy^mFWg2R?oz+~8_bnW(8zBXMp0~1G5#_Edzml8uuib%i zdVUH0tm)jWr8{oFGCD=~=QF?C&$&;l1Pzc4CRx39DH zS6;iMJiKf9L3`%xCs=dkhhB>r)Yv&&5L?j!I=Ch;SE+tQjiHyBD{o+J4dxoMGNRfS2Lx@ZRT0d7WZG)u+Fd_ZJCu9WP@Rz&gFI8&oShF0ZRe9V}l&!dqF&TY2Rw zjX+6y?V7K92lWCnUk_cMuHX&rmWkR&OXd;}tivVR*ZX-*7Ge#LXIm;9bYFFj%#iv3N$bnPDsqnVwUdF+|^PGyy83sQG;ebc8@^cl&YaS)tHMm@(;ym$p z0d{lct$%I~I)vwuj{U7ie;(yYRoOyJ%1nF-Pwa1V>z_4!{+bTFJfJlTvsQ?^54gw# zw>-y95wB|;imxk^54oE2+=%jVw{8#^h?yE2Cy}Fk3YGD7~GTa!F;O>B#TQ$qWtQDx89Z2MQg;z6OE2^?xs983J znT@fA)u&(s7L3Y*aWm(rV&O}80G%zXxvy~7j%}=JtA+-{SS&+xRd1)Nl%Co? zHJbIrUQHE%*it#U@+oy;N}9cnDea3Cu&ttZba&D~(iEX&uOf4xZco<8lph+~EMvoi z@_(rRXNsxoq5t!8{6BYW+g8EH5W(>B{dg7!1CN za3J9HXVdX~EYX!TwCje!1CcwDoFWsAouph!NC)jpoQ`Lqh?Db$g(w`i#s@ zGSQ{Jrp-WiHr*#M(bIu!ORE2{dbK*y1`&V#LgY(0o!T(~(j?vCbQxLx@iv{cJa*ysbl?cU#Vcpu!X`+zOS z?*|X;Zav)IiXYWdz{jJlEqe~NQW0)eJ}^?Un$kdaMRWRBxX|I7hx>;%Y65!>9Btj* zapdTMR$M(fI~pHp$-0wK9$!q3GoFsoTVbYC;!d>ip zOg>km5qk=&P(+M)hk>{ynjNAH>^zO;ARbx(ow$)Saz^uB3TuMYU^Y77%nZJCN?0I7 z1mDB7A1cgOljaqG9W!cMPRkm-L)QQqVmYfjBH8jsUqz%FWK4QE!} z@mc|VPNy824OM+7F*;7Bnyt~A8U6?^-~tMUVXqw^1FosoKir+q51jU9TyfbVUvb(p zr_C@RRnw^Mjyn%=gj_)Zff{p-8#om_de@0!e${I2$N~eh0Kfu3L{p$_(UC3)?}Pv7 zU@6z$<{&IUA7)d;7HSD_(_MdU=4Rj(?qqWvH62U$!6KTb5ij2-rW?YTrBOCft%mAU zbFGaGY*g*c#6}K!{`&Ic4WI}Y@yY7GglPhK(3w8j+yP8djgIt#POD@+kW9w_XL!-S zwuqJ5)Ug<>oi7&qO(AbBs4IiG=RsRJPLw2F_%9Mp^xYxEsCF}vPBq(w;R4#zx)&JZ z);&%MwzGWgB_Yh}^rwRs*u)G0fHD+bkU1oYMQuf1AVE9&WQ9sl*gqIh`J zr4Hm*t{UmoPI~%#QJ3DibEiL!1QOQ(av|A?bRtfWs=$)erGbsB5pTR9>Ua28RV&oBVuG^+LffI{NEAs5H6Gcml}x zT(#?v@-tX0$rDM76?KmE6{rdK8iTS89*~)c8?k6s9U|xa)zC>+5&vHV8^|VK7CKPP zJs%%<=CTGt&`LAZFkcqjVhW0Sf;><)uanw8rnhQE8ShqU`(^vJYKhkX05z1gA)qgs zNO{=^509Z#Qbnb=h2ZI-iQm2}wru7%`y7<>H4)l3XoW zUK(62%BcY>xUQ-)(%9XaUP!xn>_W(d9(VW^iRJ;7$`axJXfkiO?mWNK;ViMf^<>Hu z?IL!?J|UF|Q)4h@WOCw<*dIkKU8^0B8;#V+14vbGi3>V_wE{kIN(zE7s&50BgJR9Z zyRfi8#_-bA5YGYI+DY)-*@;0vfGtIU0G^b`#LyA=$IJhG6zspM{I8*Y+s+1${BL_* zd6r(~~i(V~tG|rl!#r_u;p! zrm7s^4N!{KOzDS@3X9Xlx!c9*GuG7y7+>wtJ#ONsCo*0w{jhG3hvBCoyap}S*S#WE z9^d4!D#h=Xic2@SL1b7cM%xF}A_j6JBdL|;iIv4kCm@bW9l-^E=Ze`T$6`%=2g~7S zyCVMU%*THp9$#60hJira(gQ}ez1K)4rN!~zhbLqc7#wc*p*_&1$Y3dxN`(%m+p=l0 zo(r`O8nHZv?rKXX6R{!j=1?YTnlcusPuKR?=2wR?#-0$N7HG2Uhqb6u{W|hs^}`38 z3W`^tIP(#2o3`u}4npQ1*2B=fGhn3X6LxFM0Ow|$27VzV!p#=#lR2P{aXy{nn_*J5 z>JcU6KCW^jH;bw&@2fTz2hzLW1u!{<7V5eUC?o?e&lu8ARqeSnrjMg2?c&&BBNuKr zvi*se(Uyh_8}S=#*^lV3scj-*-NAWosCJk~4T zqxi4g`4q?6R>5tnH}`SiI4z=U@W{W3&3!=%Wp4Cjks8>YPNGCUYZw$G+|vxqjN5TH z^Jn4T%uyrm(+CEorB>XHoS+bNzU}NDiqdGbrdkIx(NsLtcCx41-ige~o?2&LWY%z* zp*`x!IEMKanKt5>!Thvy;ljlo_f za6w-e@H+&gUL$>cxcX|5`oLBzTF%|z;XCA$(SYO{;SA$*4N zR(tEwwxdV(9yr)4s=~HbtjZfV+dn!jhHE7%p>+CUarpwq+ztdb!=;sq^};PnNl)~c z4S<8PznIirM|>iAHr4r3%zAlHpth65iSgH40Bj`i=q| zeOpB6|K<~hJ8zgw2E*plrF&U&b)yq>Gap$OmRFYUpk;~bBq*`aDR0h+ z`mi);_emA2?pDqKOUP6{p{y$E=CxCh>)CH?NOtn$Ae{Trn+!a58plsr(AF zUlhikTB8fXwi0z&*E5Ajp?K^TgJqH6(ZK5VTxsr(PAE#3NM+j$%UMo3q80n-WuyQ@ zY899=;vD8cS;`BHjoUFg^M})-_>#8}3LSL`ok}bTpfYrgGIaGLI59 zTzA~3fY14s2eFd7i9SyIP&--oTrMW=HdcpcO3%)E&V&~qV0<E{Y&#<^=<;kbk$S7P) z*7QAV^eT#R)IzcMza2E7a_0K8XRJGCmHW9K&P2u!;2=@aE`gNdz0;hUWpiezbr3I| z%_+)9?VOz$o}E8b|LoLRe!1;DjjgXCCui0sQJDOA_39mQC=tu1&2%^LS%Ae1B=FSO ztgk->ngm616y~J#;c{{IrZsn?Fm|63LD@`j%$17E!`g9CCj|p-5SB!1Y{c zJcl(Bu9M4`EwbS;%UYF+J0ykm@Y|IoM}E5c;e+Dxw=#@1AHd-AvIA-~H=_UyP^Mx> zJi6%MNv34|Vo<=*hSO{&#VvDOD{z* zXv3wWJ@_Ls8eK`?pRhF2a&JM+DxkB`T7yJwBr$OsRJ_{jRlX@6Px)mj+uTX4U~4K~ zUG+9*PlfiQ@i@2qTv)6r>xhwc4A2$%s^g(`_rL`@bs38`p|Wu+p>$JI>pOY0-rC$* ztF;e|C9@DQ~! z?gJP56=Cl|jlE6s+Cr(B-0jM>RUuu<0T5J$x~E+_JPbuBOL}}qel#x(0bx*2N9BrA4 z80B-eZ%@os4G6-0xk_@=P4qM3u13ufQU6k3BxP`3!XXhiRU&hnl7X5!Yo=#B-&ZL~ zwj;gqB+B+pjoL?4Pt|`gFZs5)wW*2@lfNvwJmIN5Bu((6_bUpsUs$78th0-}EmgW| z0_{!=JddzQ_SDo#Z$g<&4GI*bK*y=4mP$2Xr`U$^SHKT70i6u+X-ewyoNV1|w&QFO zG@x&hE3>OhK8!LF>`fjLQKg0MA&6?p_Qj6#bNt**;5j&@n$6|;g4GS7{}M z0*~saC#OCA3*nipXc9J+0V|4lkDecEJdR3vj>_q3S))#QS={ZrSk)$ER_!13d0+ap zGc|AqK3`e03#!QIkz_L37X>2p;342T^YKKwy!Dr~K@Nr^Xm$Wt!Ss82f_Fuh+J~?D zd6z?tr0xHw`hS-DVE?-LKkK(O?x^?rf9~Ay|NI}2|I=dy=1Ti1lYQz&V1@I~Q0o7j zET5cTlQVrrobVn309Cg6TuUv!nrxl#--l1juP)=TQ8Wfwd9YBUszI)+-C)@z`(R*RaIme8%VHu>0Ty}V?g z?Yoa2XzS?Ypp||pLA89KEpK+p+@bGblBH7-N7D~4+uCF+@5yqfBGF7H7#1IL(A9n@q&@-Ih0+-oV>2uJTf8mG^ zp?9>=1YO0n&>x-{Nt`#}XW0{|xNRyFkWWY-+q9rkz+V*-5#i`P2ewXmBT%`6I~nWO z|HIM$*(!dh8`Mdl^^RtWB8#~^+SqY3G08h(MY-W4qG#qx^oZ)xA(x%<$b z=Ac~?^PIdu8c|mZPC`-6mg1V4M|1t~t~KHe9oKQ77q#fcPO_)<1PZ2`{E+rT*q% z;K;!}zVAt?5AW@u`m!O4lE!sh9jey>mGa0nX$nH10$$6akqTuM&RI`cj$p99cI^Zm z?y`6-j8PRF)7!NTDNz=o4Zw9vrL7z+C1z4 zLv#@+%&u)5?Lowr_|p;aFXKqq%h0~BLLFs|&#o6QT`f*76lTYYW1|4PaB#{%N5?@j zNrePnInlm;{gDP}FdurS0ih};(WBj&U5D_Z>_$D*y0IVWP0=K+iL=GU`*yfgB(zU| zX5E=6T)A)0&6!9AWxFVRK3uqYm$ha}2YwB2mOIe&OySakhfLOwdfUGfeODe(kI=8@ zsoMFPpiIK`E=I`vci&62O{SyLByaL~M+dd1n2v`b?MOA%PFs!$=>U!)^+;YCSI1_LUN zpD)$<#v2&C%s;H3BKZQGexo_~_PRl%Mn;Z)$C1}bK76CZz2{CbRaeaKF7V0F$*+hm7U-wIFc7Mg-vYn*J@ zE>rnzO!63#i|UG+z1dh$dy-){q~Pn`0Qh`}5tU&DFOT7x3l^x%U8tY;I9g&=)$8)Z zCb4VRE=`sS->P2s@loc|IGxToPlxxyVF~R=&i3GAoKscB28F`PopE)+dDoiOxic;o zn9_W@atFgJP8cj>byw~TuS0v{`4qC!o$)FRwYX~+uVAHYK&~+R>VB4+_b%_|nw#S( zs|SFDTJA9DKWmF#>h}C*TeGfh@vNPm(-MDFhWUW(x=fMT9IQliy9etW<<0Nmqq2nb z+Z9!A>sob+e?7X^K+Dm6#IG<)jO%d^4kD2ePj%ZIKwZUNR=7yTrg=DQ7 zC_JlcVO_z)Yg{38DM=!A?`F8xQkwck@@Hx$=x{oo+e(Glv{i?d#2G6flkv)g_7x-`4#m#RbinQN?(*7DrS zOnZhPw4Tci*^hFf!F3Lm9JBE0yfu9fm?UfVfv-6GU&XP1kED)^DjB{FU@V$4#T!l+ zaEjnbb1>z~ln#$vxnEN6AAUcTe*f^18gH&_qOP6;=z6wn0N#y|uj|wQy@a?A>x}=f zy{_IH|Fv;j-A4R}|DN$5Fg51$;y;XABTuZk$9lMf##dBW2&GmVrDz9ZP7s9`411s~ z<%0=hP*hiIp2p~V|0knscQSziiNbqielO)lq_Pl^^=Be(gfsar{Zv%d)C6fr$i+Xx zw4XA+5Y3!Yh5!ne*URXF*rNN&Zh6~TDlEo9_q9t4d2q?jzl4AY&kbI%8P>4}{k=VJ zJ?;d*QJ90xM~zHcNH^aqJ0F|Ny|^RVBkUsmn1-#cDzN!4i3~Zr2*6!uiJ0>h1{n9r-z$B8_c(| zNhj7sKAY5HO{DWVU+1lKKDRE1E$MG#;}}u;L5fFLmOd{|pF#1=wPheNt*P_Y-DSdZ z*H}PnotY@jUlQn+f6@p+3rCH2@+t-e9YM$Ta3JQ6py0x5zthWw+c0sUI*?AQY~Rgc zAmAyLs;=>=8s42X;?Qa$nlx22&ZFHJT^XHdjqYeZnbXR;o7xW~AfWJYOFUjp7RekW z2JIvrIt0&ijjNhM&=mHOw~DsNWgh8rFvI=hpd92hW$#{1_@I&ML96th9EMEvkI-P_ zB)fy34+W=uHm+=Q1ps40;LJqmNIpjad$=1|B*0aPSX(q}lCOV9qR)UgfK$beI^Esk z*ItWLzwkJ?!&jUNxDR7Hhdgv*zo6N=GTb+NqX={A9s$4`%H-hIie`F;!mRKH-~*_O z<_u|VyqRP0VzmQD!ZL`-k&KZ#iitNiJ3*!SR+EFPKK5oJ2czycvN^iaY~NxW1BFJ( z=g4!rT6R!VQ{%XlhY*mfYW)1RPwBw}(IT0vhxa7R42D6hd7Y-|d?$}pXN?X>T^rmG zExB}GBIYcW3TEqylmi`MJ!c7juKzUq@;N@#TH|gmwP{# zd+72KiK?yW8?(n5*qZLpm7Mn0=`!pR6aEtSVYfTK^t&$e0WOah(x%_>787d(`O`Wy8rsOYR~`q^L#-sWr^hMlUb=*o^@HXKgXThvAqBJ z5wJE1c6u(4S2rp{+F4WcrTd=?@^l^^cx{MYbB z_)D^^&qs7S$lq;5-1=vXxb?fTxKJCBxBht|Z|TlNUeSouzYwRm5ozidMVex{3vyF; zW(teb*4*ROi&vrYZaZTP$yj7UB9h85+jZ{N>hR6gOS9I8Q)QlnxxS1Kx7^WssLhpg z2a^Q72r>0)P0jjzt)YMS7UO`b%xuih%Nk=)0N!+u7b_@%2ozxIhvAElVbB(Wpa>(P z$_8cB30vTy1TbMK`ADR-TzzG=Ht*YCxhXyS{MzO8B=>qr4#pWru@av)J>Ev1U|i1B z9p8)P0}51THs=+sdQv)Lz6ER-G=K}Kh~>V$984;R4^&2%&PH^9Ob@p z?e=Xy(_?j^*P@~BuOHEEu$1(ng z502LS5&a@vRcUv)7WS<)e;4qED+0vA_0s$$fR>d;$M$v^?r5E9S)>t5RBIpD+;(VIl3# zAO9$CmP(N#TxnFtN2>Jbd3rDpL@56Fr^YjJ*&?s7KFG~boTI6@Z|@3d&BtLk+}3`; zM4*l)QgG8$_H33xHn>9yFk$yCKZW-Kq9nS^4m#nK@f(mRyTdC6CR-0eccilA+-n(M zZx2m&u~zgWW&u1Qj_@`dnUF@07e4*_@M-JLP1LCX#sBO}?`^jc18E}$Qdtb7pA`h@ z*Uvv z{K~zBqJ8ll+o;dl3at+e420!;)7hR#cP{gS4Lj}X68Ij{At{PSW1?J?kDPstf1o6t z1abvhVtVLzzC4#Ai+Cpp2<2GtQuc#FcN{7#?Z?l#hz8X-hBK(z7LCD*?1;zfV>`EP z>#A$qxx;Aes*iPV-x)JrtJ~52T0Hie@!ED{$E&Y4Y}@|ow%Dt6ue}!C(OB28J=z#+ ztnzkOCb5=KwQixckNi!kvQ@MxT255@Rwg^jsg++Ch-rxDo5ee$6-b=hvl_C+9SOAG*uWaN~;5Q(%@QJ}x7JV;g* zS62HWG-6A{WsR`>g{KUjo3yRyF&o2FFd>;SClu|;8b%*S4pHxzeb8TdB`L1JUqAa| zb5OCON1XLWYVn8jKx4R;;YA{ap@W0VnqbX4|CdD%dx79#FC{|Q<|yg2xt3IJ|Lz|a zH>_NizwYQ^|M2)>YmEJ8M-lT{8dHdGvjDzOmU-%i}&%|lXF6u=w%}c*+vwy z-#!Z2j<8r+{sa(jMJ!pIoVPyvkPB6LqB?3Kb`BzgxT|6i8Arb-;%UT^8ttxKn%ot; zoH5^FM{`191%;$k#&u&=w%FMr@WaZ$5+5G z%AGY33#V%LI($3vO^(BHb{pa@rDWz!10@Qi8o45Ke5g( zLfu{1Q6SMrK5Sh;jqKQ_zL`U2Ah5r+Wl!r-O6MN*ch8mXYd*u9DPEf^+&WvBU4*Y3 zKgTZxpu89u)03gO*(*9b+xPzYaLb|A&Q3d8QTx9gXlrJ_v#Q8{bas|G>2^B)dgz;xxNfKul1e8guCdPsJl_V|2{hqMxd1Abs$nO#?{<>LX6)pEJil<) zj%}1s*r@KNM9tMQzp>L++@$>E;A`FU7%eVn%vI)vKo)t#F0n9J?Vs#nG^ni$B>US0ah6y9f8(pTi4|HeKeFEhg z@I}aX$l17V{xU3{WoH`Ba_^w=8o-WbI@zxbzh$yWmxcI>5j?%qB9pW1D{2Y736iJGoFzzCFkM^h|g}3^YrSXGK~TRlB<& z;)3>_C=8oWVV{EX?hrg=emwdo#OJki5Z?q$hdV~`(tra%WM9L>P^a}EACrGP5k|E6KYJM;aW@Y={GV!wzAc+UO5V`u#i z&;7rne&@#h{|~KmdO=(LSwkW12(FMOZryOlSZqumvvLB~YW|QmYgO$b%ulneB^aPa0VaNwfS+ zz?sh}t#9e!cco`%m2EFD@ug=sxFrnG>=j6qgR^+UJ2^X4>n?GOWe3*d@2shXKBrCfDQoD&i~I<1g(yOO&1aK{(X-N@Q$Bq+k)c9?LkEr?J#w@iiHaa{dAu4)B3imSH2}nsQ>OqkXjSWGjDWS1EUK!OjVc7#mh{d9+&u|irb%88| zBLS14X+i69R?ZDpp`#|RCxZp!0|^O+2h_<*nkH`*kL7oFf_tsoF02ro#b z!9EjBLnH|~^1$@F81h{B62MTSQKUde3YVx=;J46MhzRzuX&?|(XRF@&W2cPx`nI{X z8U6*UkNrpR_$xKRs#+RIO&GO4nd*8uHX1r~HJCF}*dEY*iBvR;UgB~gj%gF()sLDe z4Q-||Z!smwR@M@C(1-SINXyD*Va@Fl1Y?AIc!#K6N6w`k%ODYM5jdSJ%Oh7{ecnJk z2Ag=gnuR*d8ioet3^NwZ7}eB4P1!6ETP)E^zo1)p z+Zft~cMS!w6@qiXwU~`2LuN04jZch@EoMYQuAEsd!(WX=ynu51EAF#a65jVkPa5#p zv|rN}b*4`?cVGltM>v4!Mc(kvgwWp~*i-;;oJ{2%m5Zq+02>G=11i^eWCQO&Yi=qd zECUQwQ_zH74!_X+UeJlX0M}#C6?-9g%7@wXva-pya^inRQ zzwp~`okF+cVpZUhiEV`w@8(f`%SslGsx(#P_T3I7E;d<8#C_OWcO@@~;@k}1ErUj* zFu`~e@|`udspOhBOutYYEh`HWm?6z8{hNXkap7G`h!dD-6Zff_ajJ$LfKNw+DXC25 zUaIy+UMq~L{e~y2OG-BE+1G3n;OH7aOXR6a!YtX8eqA}L5I|gOt3t3l7dx(9Kw;$5 za&nqTXXw*}qezi*xr@5=&h6X1ohuv|90>X#LeGE*f5!8Dnd~_W^Nt})b7Cbiv8LWcCVaur~Xpwea+(C!=HqpftEbM!{TD-~VgsZY3`3_Qy@Erj1s{O=SvS zc{JChPqk%+e5B+_5AAZD_iFpV*E(lkY!%x?BqADtO4#-*V1i2LzdxEJE7DH6eU46G z=w+Y(oplWj?(^SJSJ$|G(8Z!T)!4>~DeCZiPJf=YEKP`wb*xDJPT z)(ZRqNCK|+im0#g$~>^(u_jrOC-O@y{^|>fwrp^potE%Q{c=VAOTb+z^)o~P`<hL4F) zuXl9VHQI1Y!@pl!*Dbl7>Lcys+f*z5h<(V<=Dn~#Q~9nYQgoZxpki;;7E^7m zd!uT(B^N8eU?2Lc1k_PQRLSe+kR?8NXJ?+0E%@}Zk@eB_^JE}>c_ zV}=Aea^bqr2ef5ys4RsCYFVU>C63E+sLNo@78=)Tp(kN7&}k>P+Qxbgq6?~`Qg-(I z1I=|&E28b5bS|KQ@+TOnYWkS!@AxT|X(*l5Y(4CKNK><#o+T)iE5TZ~0)@XgPnB9i zJ@*qvxYZv)M`PhpZKyY=98r@d*M@1?8|=Uyp?{Wm`rj;Uvr&GNsB@4S;=>~GQX*a} z-aA#ps0q$-Z#vGBLApYCm3c5Wtkl?tMhylJ3H++|VnO!UR)zxVC?Ce`r1H>Il)kGK z@pkU+fdQadxMx%*7{#$tk#fnBXN*$E<)xC;Fv}XJ8$mkHaJQ1uw3>mQe`2b z8tNQ>?!W-s#nT2O7^%guaUbrX-oD=urQJ&`9ZLtxJ6kWU0a(t-D&p~f-SDKjyf#C zAtI9&HW9;P5bAGe2sbo_8$w%^0;HzGsMZ>hel~oskF~+C>;PAQE7jPbnMlu@d%}o$$ojDt#eQ7-h(Y2t$S*TwZmwyNu%FLHor!Evs_#EEwpZfa$lqJ z@;g#?V*3Ljn_W#y#Or_#J^sezE_+*@Czn>YjwL$`TRwwRm8-6SU!7*+T?4P1y0x^P z2w^b30sGW!#^Ja5HU7eEi^AtK|d6FwtFws#* zGDM3TsSnpn*^j3U<)fjR1kC)NwCs^3*J&)|X;;&mRyGRClM9D34B8>>f($d0PU+km zAawOG%xi*vPo8D+I6%?Oag@1R5zDF*|?1a^rWe@S2~u< zN0a3aX>11R>)wUpB(9|$=5?K7bzg|Sgvnv2`x8+GWNL=Ba(x_1w9*Rd5S{8VI=j;G zp<4Ob!L+=buHkuh@cE$Y_TjUwERSMWh`q_gqq#2h+H1j6e)qr**XofZ#~v~Hg4Wm7 zDb<&2{4BDQG2KGk9~n)%^yAdM!0sbn(Wu`}$lIM-!;?G^%~BLNDN-YIULwf7{22@? zNjhOojl;_u^v$Wr~T{t1d9gc^zaV4O=W{-8Jvg&L741~rve(K3;PfB5 z{p!yUbZ+oh|Li~ENI3F`w&)2#CJ72 zasZb9va0%ISH!xxSiC*V5n{uA@r@(>KUMzY+4p~iAK34gb^h0o|7>fl+v&~!y}hA+ zL;mxd$bZB^+;O2Fa|)w+c4g_ul}D5Cp)mUu#&`>C+9d49>?mFMWMXA`HgMv^i7sFd z0!dSZlF?qBzT70N(JR*3MXrbuq^G}JotZ9Onfm+i>6OLB;x|i}sBV7Ax^v%Jz+_B; z%s|}B_iR$(G^y7>EG{BIRz^}lZVfv9oGnaz#wC7wat+FaMCsW@>)MT#N9Q=1i>jUx zp(t9GlVQ24erLiO#R0B7yI#C>wQ&8z)vMEy!j&IauY6w^{qCnH?JXM1IhQ`F;8`Av9vtD`pMJ6ONtMC2 zmQNbMZs}%e?l$IYxwH_V0%p3;2qO^a#Y*#MtkExdb@AlgIPY0w>&{2T=`$;j#;mam z*4$_IV)G87!6Ml`1f8*qGO#X8&nl!bUikEB@y;TKFP?fR8|fFp|JW47@HgG!ec?RY z9F+5(Tq;bC6~240diI?4@p$oXSUo^d7iCz*&GofnbK|KhfnobiQ!SZkts=ltap)ONZ0m=(wpI8$M#jm~+^>rZ$eyA$Ms-cq&=!v(b{WAQLI-|Bd)>zb*g&=uzqZ>D4Q9tDk+k@@x*+;lkK?PTYg^;+3<-b3XzGP=Wwp zsDXiRZ{IJ9SC@d`0SX4#Y@607%uZP6Zd+F$tUSGsEzFMD2|g&JBnFHN)Q8cUBWLu* za!Dce|3GoXD^Q-?X5ss#;`L!``bwYys-wUmmCGo4rKzEzBH@bJI<8%?roY0vjbZWE zbUvGkCb4fIL#SV7-2A#ecb5}OTk~g%w@%aNoA7z{N+I+ZdEu3CiJR=UY1%O+` z>`q_K(~i&JM1ift+&_Q7wgu9<6StYn1mG!reb=T|R~E;iQyypp^W=Vcwe-V7n0ev) zT^pkOfaMLdKekK!{`a1}Xm6#{3(fWz zIV07L8P;&$AAJwUOqljFQ73>{F3rONT+13r<72{m5jxs03a3BA!+z^*@$07u4#m$; z7q5L+-u4b)_|B32m_aicq$Pv)rkk?$ma$e_xbpAdY|_lAbX@OJ#;JnD)j;&}`^ zg-r0=%*yga;Zqc@l^)KQo_z|R#h%0MI1T^;_#~|BQ?OW^x&iqnI3fK;)@eB?cJYy9 zyR|R^5^lA1b`cN8XLS7GmyHVwy6Wb-X1Q(_`LgKrb{A*oKwm zGbqp-A6a?y86#vilu+S;tpc*coh+Tdi`($mXnz!D^jAP0v6He7C4g!{0UlN^ z&U~b*?xJHmez|z_S@Ft9VgBRd*kkMIY03(P1Gc6oRvv!?*8wa5X6yj4J`dFaF>=N( zJk3u&fP2-tbGdZ-B0-E7`Oqj(gAQ1sFpQ_`WCAld28p`fhcj0cWUJJpX5tfOSkH5!i(F zbaZ8T67ReQ_l0`WUfF~QqH{pH8{+|{vqM2X$Ry>)K?s~Mz(1f|xJgP2r|ImOA__D~ zD1_pq=Fk?X>J?)-_d3lBz!vZ+UA<~0Q9w04&oB6Lf#tM5yJ4NXCCq_nhI6hnx+~6~ zl^7MTX4C^nbcT^H5;=i&4$=4zMF*Sf_hCzOkKtCuAUHGtsJHsrbxi{EHKI6$ONj;= zW*UnUu-x-@t@eVjE5S-UFG7QGi-!85gNRLmNvnsAdtb1WFWW1ZB%m*Rs6QIZ=le)z zkCM$pFw%HBM%KDCA(6@EQwGr+XJaT^P_+Ruy`9qVLoqI^N(@sXrp$?b3S^Rz(c45 zH_5}`d}_`}2V-Ykmeme z?WzxVDxI%)(J!XOOhhB?z0p)pZ!}R>49_{HO7;Tm6Chvb#o>;&K&%%I@K8*}b;DcB zZ(v+Z@R$mV(*al-R!lwlpm=}DzNH0O9tpVSS03Nf(-6bLw6q-%t7G2-86vjT)jK== z_&U6lH6)cg8p~&sO(JGwb8H7BO@fA`F^~&f@$GZ)g>`49aA^ThFbi0D=+ILD`++$h z5Xxf8OyrF6O|eEEt}K7TbYpRHKERgEp;$Bot7{_V<^Iv~)1 z)Zwp)RcR0>WjtwA04|M`7CtP^Uvf!QClJlAJo*|B1z~*w*EA^0=Ln#J&3KN~9A?29 z%qN$zF4s|jB3n4va(G|!yS<&e4~O6C*c*D)J_AOo^R0G%7BB|M_T8tf(;EOpY5qD8 zil~w0(Mp}q#RnpRuEqjRHOw7}$^_90EXM^}vJXz;)I+#^`84Ybz&zhjzAqBZ7;C~TI8qpL*J_I5k zA7H%A7!uuhGZLr7v=Y3-=&@;FVIqLNCIt|mNnwpYM#7q)j>C@!_O{{XL&rA0|vQEzc)eol&Q!5jK5+{uz*P;;f!U(ExBl z67mBd{$MRUlGKe_C)fS%4=g}7;x&DHTxOe`fqMf^4=+&#epNRc6$UPDAJmn zNH8H|)QsBV^5!=Qr}#|q>oL4EKX|~@KWgfDH4hw#FkQ~C13U-l>n}_X!sM)xAB&?u z^0bfuqmDC~L|p3_b+xL@hJ1cQ{=Xsr|L-gRCyJ~%ce^-!W<&nJA^-ms?EmWPwwKBO z>o?**{-*MO{g`8FSLS||xZmN|fEED)$tGvYWU`t~9@D*w=0M9o;DJleE?8%8p`{Xu zImzBdZzG#~-^`^m?<>BL+H>)X6eh*p4Y2y9ntS)7y=UZH_#?ZgwNw;?p=xLo*gl-mh-h1pb3)W{rYoj_5tUjMLRg!6u;&|oP0_(!Xu5Bab6FOV8NEw02<-x>#3|oVBcL0kd=#LYewU+Wy-8uw(edj zJ)B=t-tX#(fJ?N*Fj7I2ij;0mohwXD7w;^31yXrgnN>Wv%b`rP$H*#MyYa%M?Af1mzzUzgd!}iR=lb?3a}bD8HQm*6XHM68LHzN}pIupk%W* z?PXj&J1)>6xEU$+vGdls2ZC5FnAgC-0PwCCfH_+|O#-iT52TgOj<8@mQoB97t=2&! z)=uXO>Y>%r#RtWu>%ie~1(fas7{IdVyT}sE3c!Q!ufS?V%iuZZ?A(r={t$#mAv zB89U0aAqiQl&9JpO%6ndO!c+hh&49`S~)jRAI5)gJ94z6`Bk{oU~mW6f%bUdPtjD) zh`%}1+?P-05+PKQsVU&nmE%_TQUfnshSV5u@lWUomfRz8zh z{sQ9Eu~BR4ODRwvLpj=a4`^^CTo=X3dF!(et*K8}&rTJ;eOjCwMqw=lHHTBb^Eu4$fO1~kG<^q1u*nrQyYR6< z)oH~NM0UXz|TkM7xKaslaHB1^f|DRWQRY>(RROGDey zeJ~uuNNTN~yM=jY=_$}sNB6fLWDbi=?8boBd#fv-%H;)GlBgE}$|Gp{_6p>2VQkp? z<_4BC^CIL^N^@Iea$D!=k}&(;be|EyFPnghzAGI}sHo(`aYk{NM=0xQ9vi+TcjDO% zeW_fOqUQYt44&M2mpdozmR$_|9GA^a=qIldzOM|>a566isZ9RO+>rYkUAFB82Y z8=$;gV(0elf|BHvBNq)F#rG2;`W?D_)rV8-OR&tZQgs?datN$#TQY^?hms0LEC)z^lZKRKkdhO2QM~ zJQis%zk&jw`6<+)FW%?XR$RxZGB$mDb9HtYSQ;@XB@tvi7k`d!n>|*6*MInpvhVx? zm#Z->SZ#@C#4h%((r{LlWQ78dGsL8YweSrONSCyrjZ6LaE)%a5%mQwUHjVv?D&k!`g`PM78$ z(V4eKCIG!LJOjo-8ym@c&jj#&%fW-q)$m`9IDDk7rM>-6dz$cBfIQH+9cCeg+zqW7 zMgP?5*`Wf1JYKw67@g+YXa$5-V(H9K2msl!M|O{G^1?>1^U%Bi;!kH5CG^tCI!rGL&e|e&(&jqf&qcvsigD zQ#k)|ap^j*$4^gAza++cL;t&>|6QB^BP&HV2iai$HuS&0g8p}hH~-&8{FmRJ|D$7$ z(rPyRBCde0Y<}Z0Q1=cF^;Yc)3W=g|Xtc7JRip?d>u4Dz8yEyi@;`A9g&CxT~_+sJKg+O;a0YthF z(L$;XC{()rpfrE4@Zm@RTK1=gRZ;QQTL<^C&jdNdM>)e#abN8)EkN!p z-9}XkO%+*#^_r+FEh~D**yDrU3=ImTn;$-K)9+)*I%*xC8~@`-u^Dv! z(0;HP4y%JNv_Lx2q!!&h9)8Qwe^!>y6lT9*Q+6`Q^)sg@Gf?(sARAO^Z8|nloV^J= zgEWLk9W$|FwvU$0-H(4zT3$w=pLhfx>|JLzDFWnv#Ef^r&QVf6PlOJvDocja$UuTt2Uw_B5y;7#a&6X;RpWuDm&MT(j1ak&ylS1SB)UK)1G8AaD%Y^gn=*sf7li0g(BsEmg$h{v|h zOejqpj+E;nOLprCF>y198JY(N2ZdS{V=%W(DBm-n`0Io~?^WoDkOz-S}07+>4y4@<<#E!&Ua<;&dTD)+&nbd6G=rfkpVI;1`aQi zO?Me<82JMue0c%bqr$C6HrfpIo$NNlG*Jg?yqHDJf))hMDb*S5Hk~Q~qahjXGLl*& zds;eLJmB=OaO4zpoe-Hkj>^Cd(sC-R8gAw>wT>2=oI=qC6@rj3l zWIqhjfTJBch!L^&@re3+>LSVhI)y3!=9CBS7;sU8nv7P^?vqvrD!EbMHCTYoo@{ym ztHNgBdZ2UZv#To@s>*=|^kj0lWB7tH61Zn{#j=muzB`&kuY;U{7heO+1FMqc%f+4A zk6|bAqr05!&MAcW;`GYn5rWAX=TMUWlvX!|%4llO900hlvuAVQh!ki!;^s7J`Qe%o z^%d`?`KjXlkJ%)COFoxKiq$VaEzN&l_;eCEmuFXTy%K41NKCKgr$Uk|>1#Cm0E5z< zxk_=yA^`kksuJn%i^Q|(OeZ-Zn6jcdl#0DB$fdIpy*DeBW<*_l@(IvbWTrM;8vP0# zU`gnvcJ+Uw{&$1_|L5iZnVf%iyKs7bga6;)|9=Jj@Ak&V4gUWh&Hro19BIqp`=t+; zSqscwoA*8_-5<5DNi>)-gXaN{GsJdq4Yn<{Y)^9s@!PkQC$Gmd+| z+fx=OcT~$^?u{LHT4j$R$mWyGE~~_0SyS_p2l3^SF}kPZilrEZn)8=zxTP9Mx+`IZF3Auw`o@{7$RIzv zMty4ngsrZ=rTl<6C637IFF&ZnnPdFc*gZ%=#ILD;L61>)CSg(p@gd3L*?>g5Qp%jRimrqv66=w*hRe zXI~aaFzC?g^&8C5Q1n);UYYchtPg413fI0bUi-du{{!ND5^&5m8q$j)r>T~rh zEXqTk5rSfbs8OH+skRKy=#Y|V#~bbM@fa%50>aemBikeO+l8`|y;fYBLRaqLC-9E+ zj3a2Ej{whb?y!ag%pMAQ&Cm{;L@u3+CL?*%h)1wwq$}Uu9U+1>VjqUUngJQ?7z_k| zqT@)L1d2es&oFz|34Aqj5Hb57#4-L$auE6Jg34zu=s>0Q~L2c>&{IMR%Nd*ExCJj%fg(LML1QpFvhBP z9TAgh>xd<_*5EGt+UG&Z9YA;o*{X?iPxb7apxV9${q<+UfphB#gtz#)trfZ$MR}WEqHMj-{lP zV5cgy3cEBKz#O*@g$T67z`;ZOA~UGyK~v(E4zgZO!NOf z6!hRPqA>G;b$Zr*ut&5W+3RpBq?-X=tuXO$^`b*$QqiMAFxcop=Si_Qfw5@is4u`Q zkkq0oEii5R&7Q|MCS5g$ zg(!_o$Q0<#>T6lCU@a|jRW2Vz`$yl>$|3&Q4LA)nr8mVMWG0LEmbh-xTr*sk%xJ-L z2(@!B5jCk$R(5Mo6TRh^9(po~un8-^cVLqc`;Ioqs`-1N||2BA+yd zU{Y}jc33cl;T$<_5Pprv1uN_^EE9asi^9iuRxb`yn}{4z=o+9UJ4r=TX|K(?cT*if z!zk_35jk9j(?4s;XPopRZHPb{8q{z2Br}$v6)8qB?v#;dITOx=bn3nOpm6cAV~=e6 zs7_t*Xi0k#IptRy5t)24iP}=Y0-;bkWnlJG5!w!qFnvQn<&p^X3G|fa|B%gQ6l{A> zN6|@N28!DxGf;@q)tSQioARFFAZ&jYZAaQWL}D3!eMP6~oXmNUwBuOT$;-+6Q9fRgrxQuQK;@eRzN zA9}g)pfGz=`mby_4{z}Q8~p!2H~&xJ0Qu_J;Qu%H|6hUs-(Fw05&!ES&Hro19QC)X z<AehyY#V1)4%LqV`ezrc>%+wUEU*u4;mUocU__#u$<)9aq4|MNC|>*qco8R$ zABE$`s7NYge}5uM^s$Pj$ivc6oi^qm?4fy6NSRDou_bduj?3H7o3MZu?jTx`CJ4E=H=J8gRufk1< zZc^UUG*Kc{IV?9Y3{AddtCTd114ky6KvZ5Tfza`6xG*`!gHwydf$3FLdh5wz0k_s2 zu0Ejb#JMWZ5tiMKmv2o^t~|bJO=0le3|H+ILE`tCL|@d*8QGwwSiZ43JOjjVB^Ou9 zP4H@%{cL0|nm2Qp|g8gHjyzTI7r*KpgTd;f8QycpLEtByp$^7F$70WPe8o zO%454iDbtc+_e&$WaO{Xvt>?gitSR-Y&xGKKZzYOEk+M8udYQzliWwv+>O!?3%GZ* zRQ9H5Q_&N#mL;t4%WR?6^wVb;f{e0aT&u6&7S{d&Pa($=P(cUdLfOR51h@x7i~XcU z6S%A@gk&)p9WQUHSYwprMtXD>KD}ivVD=oj`oLo*!p2|}BZeUi*fX~CY}gatBvfvV zICAcAe;#R%V8j42GjXTgpzwTwO1U^Z&of50FPb98F%*r*Lnth5#uFUL#WKiPd&+Y> zFc?q1djQSGDMCSHkI|KgQg|zPEZ2!XqRH=oQ0+lAl`|yZP96fVr#(3!4jgWKs{`3V z97QM;CmAjwme5~C%kJH+Z5_JfZspjJm6AKDh=7P8D6J3$SulI;Ik`~0lk3R=y>j7) zw+E7!MA(5ocNFNIgXtbjku2IUazr{CZ^`F+Vd zo{Z0iC854lD^mb|h2m#C+UGL+1`G1O-xBc?N+qH(kcMf=}Hd6%9;Ta%TesNGR5 zu#&)$wl|l_cXqz|TAeO~_b-7CBWJF{<-;&yIAQse)<9|qtdR%SH^Wjxu!-<*WB~9Y z#<`E6Kn!iWM!)2%%bK`UJpYv>l0T=O1)?tZ33~jNJ|Dr{>|+zw$S8$p z9djBjqGdko?#>7g}xOCNtv z7VbY^H`TMn#rr@ZtbX_aliW}UZlHqYV2!wD+{6>=Nq$U0OkZyM2TtQUqHPndp` zFKHaPBs%St&B+d9m=Jd*=FJz>zZ*HtCPO{q`td2dy7HAaalZnRqh!Kj2mLzca1_AI%dVs3B_P5$w z;nBN88DPB1X3e!lsC`J8r~(6~9v;=F3~dSwS!b8R2N;!2E5n_5mQjtjFB&@n%jV3=k9V&QlsPsPIWDa)3GCH#O1`2LcvKsV)uw+lEEJM^*`b2@y zVF?Trw_xGXY2h=J7#x?h35i&&tZy*gRB*eveV< zcYD3~O*T{hq6Ws~tPMr7MQhN)jnlGCY}v|1Z4EbkO#%A@#7yb?$0)|Xah|wWil@AM)h@j|y*tfcU;sye znb{2l7<}AsWc#4Ldb1lXHt{#SeKQ}A55ecQ1igsnfnt-j@Yf*x{=Wl8N=(d(^2%=A z`uE`vR6_Rb zojf+jt?4g?TngNgHa0mW`&7&hORI-*cJE_OYH^rD$HC|Vflw$E2)q#$iFk8R!c}nB z8#)W_2iMp(||yA*U|0PFXKDWiIA-6{_p^xc*oFtY8v2HEQFKD0-y zERMsX!#Fu-tL!X;#Y`*~a6XFA;dC4OPKXfZK+2=`tBu79Zw_HtbrISv{T6}=V^CCA zA2tR;N4oxscCCkvT=-8$*KRU*tqJc*52R29)}G4(uTx#M=6o_{eN|13)c4b3}6^Gu2MaXsg+_D z*czFILr35P%!N3ikLiTq^6GMW*_De1EClf2nvuJ-nx+D4U;$y%RPzA6gF)Md5F&Op58y3)*b2-yC za)9Qdz7Uhhg<|RS$#731*PHJOC(;q;X7@r68pXhIxgi_(YcCrekWHbwFUHo`#1E^U zwD$X=iIh(#y2L?h%6xk2>Fti1xo|F>iM+hd<<9dqB6=8|wx%cLS$JPYn}(vWIcUlJ ze&BsL_w*0mIyck_D8e?*e3`I64?5@&azjw!9yr)Nn7f;dbH1QulD-@&XQwCJNvPr{L@ahLvZFZF1q+y0tJifj%YV zOF_IbqQG6yijLjTb>qp*%F-lR3=P|$UYdMpO>2CMS?ex|m&PWn$(z>K(~2;-CL5l(XSu$^nQz)CQu4d4*MJ?~;Oe3Ad0MnY!yARHA}BN*+3w+66@ zb8l(O{3dQ5TsKRL_A<{tK==nB1;U0}iZBh1HVyXaCn#BYbdDix^)}v+*v_MS=&f<% zBWO_FIO8x6zR}=}3tPA-(N^L77(jxHDC1p(eJxEqgfovQ1uX~R+Jaq`7Z(bvJVehZ zUa%@7r1khaK%+>DNm7{T)L-5vK{8|YO!8Mzu@%m9zJR+T5+KZ%;Z0K!wLqO5+5;zB{K^-XCWgGsz z=;zzpNV{lf7S1*L0G*!EG0^x(VQPBi=`{e4ZK8O8LRKJ4KZK2O^p4b<{SXM`9{?dB z2@Y2j5`;5&|CJYlyU4*2-(B+Dh&r{&=^PpV5=`3H7~Hp0-vOQ#e>u>`xiSc9tuZz^zBY4qWhwgVHGxosP$%z|3 z0mt|Ra-i^Aga*6C3t$l0r+spt+xoj}H1CgIfX){GS=NzYev|#=xYvsh{LseC2>|dH zMMg|BIL*Q3bz-ai5_Y(>_$6mNk*<(@2pDyUS19n$53EJOp~|SU<2aPTL8lj>Q5eI> zZXW;05W|#*j~=n57+kk-FqkH?#xKiw+A5PVz>VwnYE*}` zO6QG9>>x=-4j86-tJH~xKE*r0_VXth$k~yE%*}ASWn8BZR|(7KEZz&Un1ofm!vuU< zzR32%@(f>EN1+zE=$nLo+r7m0u{l#;_*#46d3kpUW)p#@l$i8{PfJ7z{e5_x1IP)D z`)9cS`|t#j@uGD8F2~lExpuz3T)cD_h*|(gOw@%e=s93P33*kR&k53|5n{!}v{UoW zc`G|za9OP^o?&enaxTMDg-<6b5-{9gEUOVG+FJho;E|R+o$dQufM;lb>ri_*Hwb*z z3K2H;y|g+!EmM+7R^l3706?-5(NP30%-FWSDeU1hfv62Mozd% zA!c@l@55-(r$Brvb*JAOIsTTyWaA)-O$@y z6m442>wtw@P(ddKWzGcsf|B0aNO~+?$0&h!W&mN^p%}RoH)~(g06|x7**zeo=#Yvw zQ37YBxcu$btt(HT6{Z)VDOrJJEzW9j{}H@fjlM1;E-CYIbW&$B;KHYz@<`5YTUbiw zW@KzJqLS#DU@=XlvG7Q^WJ80{B!k*`P-Pu?GAgaIT0enP zq>*WXn-RNGK?4!U&8_J7heDqN1KOF8QRQ9fiI4W@pFPg?WN=tV?=>@Ld0%ejlC*2n z^HH56PGNJSI7aFAuu!`EUxA3*G)@f&-5I}_D6D2VuY43Kx0R)z++T0^`3X~*T;TJS zj7RxNZhob(b{&aEm4TM6#+uioldnfR<-hG@Uup+Q^SWoms*k0u=?>)@W0v9GQcxxP zs-Y|p|5Tk*B)n9m`BQGDv90}d${9U5MrQ^K#?{r;RWuW`7pZ2{stNR7qYsAax7&_8 zjllB*+gIG)74>mD1wHek>ChLO8rt!(p}qCP{fAOEBO^bX0hrjRR-^B^-%9##EjCox zt?|w(*IC}LV9k`QbK`;i$XH!E)3)l5ADWITX?=N<^5yzU&8|H#RL ze@EET8<>{#>{v@nLu*6o$Wiz8`3p_WZSZuBfEa-8ad4Vk7?xO!WHw&tIN#Pu3X8@j0uU+Soe>K9u_$?X+H1@OU<*z)Vul1&j2=-4GQR2 zxy4RgMJQBEklHt-c!CG3h%azDke(^~TM{D_CLJN`00`12_tht`X12*6i?6N&mQKIV zKM{PUl@bHA5&J7L5hcdBEjSe|f-7R*?wb=w6zuHEO+8im8O&WX+Lq7S0+a7(I;<>{ zhIymP6VIU?4lUqV6}gCV?^3Vc5_7-Ty}s4$fz>cKs~KQ-9-@e?PKNIB zF-xgK-rsuq?1j2>KVgfK4qWR`{1-3$y`!=1-04(DTkC22RX;YiHZe%?_tl6O%2m}O z5-qAOp2;xfGNT6k_}g&$-?1?YF}KSjz|pbG$dj`x?g0;>V^K8=(_0$i5zDtegcx1x z6U9T=Sou3s!k3L8CLdSmc=6us&=|-{P3xPlKRGxKD zhcHuc;Dp^k@5koyv~We}jOI+_+%vzEa7rdJGOMY7rPMo2ty;*C+Z#e>)Ko0pd1-}= z(|%^Wgn;Urc4g9E9!j{k$hu&Q^*#?_#pW{^$sh?fk)9U|KJ=J7;ZWp|Pnb>0%*n|M z6U#W?pY+&+ldBxXe$)G}XeRO%$^{HkKLF5t(3yX61?kOutB+!mZij>QkE2^S5LlYFv(Ywm4$Lg|%TB9bZn-Mo95c1n)M+YhOI#|G)75kLsOyB6b)#9~Av9|LYXFe%vV#-|Qu4 zdZx639Q3nYnD*|6F(8(kxLaJGr6mGrM|1UQCIII99vL!+zWRyTB@q7VqeA~LkV3ty zYUecxPf4ZUovpK*6b>%9I_&S${F zHZJpuE1IU}sRCl34`-=XS#^D5+wOUDW!pkc5VR4ir|>8XUscaDQB*v)8XgeZHY)Zo zfG(kto)FC9C0RowZW)R1gL&SRm66MtBVT=*v??sEiN5PNi;jb(OBV8SausgT@EFNT zW|l=@2l%2`}H)u3$S&F43~ zq~+D^Do_fGYo2$p1vQVuNTRl4^Ev6f6~+YTO5e+vX2A<*dSPt9e&*;6*FiJT0i((_ zN)M2e7sk1zhq-PO@5C2*JV$;%e%N_w&$<9E;`|Ys&CRcrM#rO7Q4XTP9-01RAQmDU zTiPx(ooQ)6YW{u|02Wk$kL6$?`?FTh|8pYa;4COnxag6+VeAd%GZ)EgK?mx6c#iA{ zeX2PBN-P{0i&>&TviQ0zfrBfhLL{y}wHO~w$l?Qh*d$G2#=~fnaT;ZpRxkEv$BzB; zyQ7CsoH%ykZ;fX!3bWQ``4X~oj$~893Q9NU%ond|9YRzPN9y$}+kdUHvMou2@qQv8 zi8pSFrjWbQ6Wp(=R1nMS&3MBrrF8+K6-FFpY=3>CI+4+87t8d_6g#_f-HXWUYmq`v zWFGX{tu5-D5VjMux7Ka@oWoBw&Yj#_?;6zbwxWO3?yEacE0p4$a_{+_)^M&F5hZ-6 zp;_&UANT&5Fp)X{P^XxlZEBoboq$-S#=m|P-;Vj-mdp}+_wN5-KdM6=AJn^+)($o7 z^>GC|YIWY;SjWClMO|GTD(VnBm@I<_pEw(V0b3EkC2? zGxd%noxjmtx;@EOxK-TA^HQ~5i5fTS`+agxy`xS<%>ZP*70BhjR#>1k{j)SB1oj!U z1=xq_H!q3O7TZi$ENQTdO0#34{*n8U;wjEZeqzvo?(5sAKqnI#TC~>%SJBj^o143D?5pcY38j`II&*ti zShVN6)tjg$6a#()g zoRHA1h$_e$buK9~B2|=*{QMR&zLJhz+Nb+;G8d8)%7}gZmM3GcW;47oyTj%KJs7rK;zpAd+Kk zT-HFCZfK;vJ-OBEupMs?m&Si~&3iva>gb`uy@$mteqx}D5eox7En*WBLzxQoO)->m zs&l>1*Ra$KrG%(ie^M5pPJ{Wy)xEi*MX^_frAPI*AdLOepQc9a5+eL zKKGyRYfOa)ohUo9=%s1gRhqlETA1o&e-c+hrWlGrer?G@%Q-_*hA*mHFU8BzQY1O1 zL`qyQ65L^>oAbH(%f5F~#j_h2^!zXKEkmmLn|!&sF%O$$@CHGAV8Q;jbIe4PW)Cx= zeJ#FNf*_#!6Fq$M)s;m2cEc(6 z*765SX3jgvYBtyJi%4As;>BoNj>lhvo#7qq!s5(=TJDBG70rKsKD^5lq+y)-&Y{hf zKA(f?UU-bjK74}5XsXEXZ39_ugv2fyePoFd%9o1AhOho46G3MJ0p3Iai^dYrkjPIw z*Zh!uVb2$C=#9O<_gqAc&;B69fKa7m2z8tfLTPCRxwl2>3+edF=aR~&>(v3f^Dj{V z2U=fW!?7M+5VP9UC6~LFv29@SQGGmZknfrnGiT?f8{3c*4p}S8V~bBDsizOMA@=sZ z9<13`Jw*%ct**BHjEmW*i(SR3oxVQhi8P8XklLD>+g+-|rG9X`b^<$hxj(t&gFE=2 zceyC~lB8#;wk98k=qchqK?^-tpO_G!G7(@3DYl?@dNJnXT5j=ffcJ{otW1~ju;sbJ z^n$P+nzL$Gj){2pe0U-z9)lDrX~MviSPW^@M{Z=DqLW@WdYE;TXzc zjXrc~Bu8_#KOC!l>(2ZZThmO4T(|kDnBh|0fNJ%IBL!3~*h<;YZ%DK{NY}Ob$N z+Y6iF^+En`RUr-j_J=Fg(Wvk`(M+a4gkL6@&))m#&bFP0TLH(;aN9ghanqmFn$9mQ z7dIy3AQ*#>zfui&mCp}f*}*;G zXsSG(v+|Os**IgIt7wRHSyx;QiaQNG(Jp2o*m20-7G&b@>Fj$$q!En3v@pU70nE4{^+|j z%JbRLvQu1XBgE`odH@ob0sIOJtY;9>-Xk}+P=p;Ot~feEk_eQRbPGAL(%kW8_qxB& zeSGlfXY9h4F;WljqsHcV3oi~AEUeDD5BKfS7Y!ZeS*wLb#97M+r9%v>noFWus-;@0 yrCO?`TB@a5s-;@0rCO?`TB@a5s-;@0rCO?`TB@a5s-;@~zvaKV0s12VKn4Kgwai5T diff --git a/pages/agentboot-online-v1.1.0.tar.gz.sha256 b/pages/agentboot-online-v1.1.0.tar.gz.sha256 index 0ff205b..af8f13b 100644 --- a/pages/agentboot-online-v1.1.0.tar.gz.sha256 +++ b/pages/agentboot-online-v1.1.0.tar.gz.sha256 @@ -1 +1 @@ -44472aad3a91b06b4853c66bbbcc71602fb859e768c5a57c4868dae36331a4c7 agentboot-online-v1.1.0.tar.gz +a597f71008061bfb8c71ceae1934e08e1dac638f02219c19eb0822950db1320e agentboot-online-v1.1.0.tar.gz diff --git a/pages/agentboot-online-v1.1.0.zip b/pages/agentboot-online-v1.1.0.zip index d9be2623a0efd8457c737cbe6f1b4a144e8c110d..f656f162e452eefc4d4465e35917b5abd8534e88 100644 GIT binary patch delta 121459 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∈vr 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

#AgentCommandVendorOffline
1CoCo AgentcocoBitCookLinux/macOS
2OpenCodeopencodeopencode.ai
2OpenCodeopencodeopencode.aionline only
3Hermes AgenthermesHermes✓ (needs Git)
4Cline CLIclineCline
5CodeBuddy CLIcodebuddyTencent
#j*&C7(3(uDWCIy(ea);mTEewm59uCy+mL^Kry&|w5= zN8+91IG*TY6x*0cwV#bC4!y`ln`s~S-d0nHKYq~oM*wW#I@a2GN}5;W%y~#A;hx)ki6;(n$h+4NBxH<#y2m z6CgWa?xXuzaBHRNv`p-+!XykVhc?Q&@+d>Oc1{d5!f+ADXyb0j`aY%bVM1Fpe{g;*oWnxx{Q7-M0kKtLvztB&wp9|rze)~-scqYk|S&DHZ9x3 zSl7`Jqjmo_vhm;f$`1Z~S$zK6YvOb78otsA{?akxqxl~_KV&`EhTH^eAXrureSHS& z4s{pUv{mrGYP)=t(rerqI|TX1q*bx2b-{~-Ei8DE5RA!@7qM=acCjuS{7u?oe#sXZ z^FtZ!`G4b%Tsk*yU-=Mc}0|_fz_|0zR!g0b}ayqlt_I=C+-HcXcii&j|nF9m>+&cHltCe zr;+qQ_(-$e1@KI?d@*69Q z-+_H8x@ckM642J&QZ?_8M{icT*{F*xqgEtrfIQ2X98ys^t#%{Vu2&8Pg8*X0A)`5h(sgJ#s(;!eXa_=x-lR6VUb_rgSu;%Hg37fCa0SNt z6lIn4hbmPpdW2Fch?C(PiCSa&%pe&87SS`d#p)M|nlZ4U0T!nz<1q?yf=YO4N5es^ zN_Y8wljtMpfh_*XZHM}rLc2Im%V`>?a!PeAQx#ilg*y&}4=txAQpq3?WN9Gls(+wi zJ;JI2!@?j;WVB}|2oVl~o@7+uPDdmdWEM!p(vcnn)=UYsnNjQmGuFQ88h=fjkCcKi zsqx%okreXS&!99G2inQVEas@o1*5*Y?4v7ck(rvwS2{i-mT$B>N@AT79lDs;uak^I zv0|dE(gV*tn~u2@Q(hq`uVVU9`+uol2q%wG9ugBkC}!0DE5lwh4w_+U@{0SnVNLM0 zit}v%4i`=IdFv8*<{^%jtuW5wNyt4bwg(t@{O)~K>WhX(EH~x=6zs7|jJ4ujNpd_wCgD$# zmzp8No!Mdvzr;}B`g0&Ni-A@%ojMIisGuInp)&(EgcE52A8R3=w8EsSdJ?YA+ICh8 z*wh9x0>ePr;?FN%0A79r2Ro%z%5b+GsWOWd3b??x)Ew2Xdc{LIdXWl%I6fN6EWCz& zfbrH;DI{drr7q>|Xv478bAJdYNM>=2mqx7r@juXX3zd0j12`mJ5B?H=QH<~u=Jl(|Mu>#zkALFn3$U|49dGGwMt5H7f#;uRByOn*EBPLTxwCXI|4 zKHH2i9GsPUln%vl!h0~UIrWo9K|DN4iqep5?7g2<-#{%$3qsPN|F_A8nlnk!`u{BCBcvSN-A^B= zKQ`$Yw(D*=3c)Eh>3@Y2h*7H*XDPk*Mvd~o#;;9x{(Ir^wm2KHw3Hvj@V03#Twy)< zTt(%u-9Hm1SBHwHxs#FRF*u(#(nmwLwaee-tXx;}yr(74pY^!Oc%p z@ibtEhLb30No+LgzYUnl#g^2jyL)Zg1@-f79KKCA+(6oZa4rB>EUl60%0} zXT{Ev@_5j~Ms-=~c0r+&1oC0L?)TnPc5eB?UH{nkY{2fn_Zjpl0vNFC%Zz{T?d9ty zBZ0Uny$*+^Ykxz)NhiY?DJN*J$I&_!70vKSQvCMOQZ+xB8-*#Lh{S%%dj9$6tpGmo zmmMkV5|V?GTefUbO2RK&jm>OwE7d|E>+A=$t+8*z%Fx;p>kTTu)w;6)3ycB)T-puo zE8KmHR1p@%G~0J#S$}Z#DL_-Xg1GYJF%O2#x12!| z&pZvka)m+r>9qBm-&pWhyA|Opz7oMp*K_h~Osi0>xN8(?R`49=3hj#p8;;IbBf560 zP7W!<#@IW(*-^)vsOMETmq>w{$X}l}4j`e@8{Ftf2bvsI>T+}p+irJ`hPu^oc1Uj%9trCo*0mN5J_#pl}L^koV)NvLgsB3wg&y>A52vb$hHzjLQk;^%7^ zF#Dzbd-lLJB!{d5%yb(&#+CV=)0dG|vFM&{TVJ*gt55!Y&-Q)W(j6SiCfo}f)3tCY z|Fh}Vr$L_5=U(W6Q z&wt1bw$3EB7Um3sHl%9pH|%>})9*X^38yknkgi89lBkh`douYp$B>NaX&OeH&f+scBL%zINGGIvlM~X?tVt_herw1e$E&;7Z5VctpaymV ze*ean`X?AoIvOyO+IR^Q+#^gv3o)65@PE=ACbp3r`-3JWleCd2k><`xg~@ApBspeS zgfY~O<1hTsI(tiD)KnG`nYQ_xt&{Kj?_EP)4-K%1v6J4+B+GHz+B2u0RE}Gj(CO6D z!WYY@k28x(nK7F6I(ngpK7^g8vW@4k1#&V**BKiYn3CGcG!#!N8G0uPT^=cg?SF5j z#tE~_;pBo9Y1T_J17wgdgr{z}FQCwXGa86AJI7{Ni!|AmG zhc;8}Nw(uiT6t~3y~u)RFhAKy!g5KU6&$Usfr*P&Zv41(_r5SL!g(ueLdg+uF;vZ( zP~DRoDvEF@`ap1#fWoSdup&T8N3f*n}fZ*xJj1GsbKBjv!j!Ebhr@1 zHmwoiADB*POyf+s;p&9BvZBa~QZB$P{6GE>Ya&`~Z$i1^mC{sxAgE+|N6P$BCiz=tn8NVT}EHvi>MWLOC<|k zX(;mw)U(&JK<8FAh|sUda)p~a1e8G8!yzHHfKkxw+nRSM?ZWCEQd+gR8Eq~xp@-HU znbOp%wN$X(dThtez?NH3Kz}#djH&3}gtCtdz6H1Bas+vC6909;8+N6_@47o|lcF$z zFTlhT-h>_3{j6OL1N^5SA?0E00JZKOTm9s!ZH6?}a3gvq2P5%|*O=qu1^PCfJdCIk zJl(52whd>nqjA!rc6jj&hW1OSIj9V51DxIimEh@K?QwKyyuh5!Gk@nboJKQIj0OK~XM=$&P}2^8dK_vAsqIXqUBi+kf=3)jFQ?&6_u6tp4mXh8{R4 zmWlB(_RZ)a&5DPqAb(sMJp&#ldNomzWW=`G*gRTx3`uw$bRWWy!7Ba=UxOB zpS`|yCSJ>rWs04EEvNLvSrKWY5)~peht$SP*9j{euXM81Ml7x#A|S-aw}X+3?7>q5 z1D0v*q7S?tXnkmRzM!K>EllmE*3wr1Q+uZ41D(IQdh}#`1b{$F$!+1=bu^|yOay%< zmeUAy5R4}hcYi0!JtE_%EInp|r8FDt4u>;AGhl8l5?s*<1MfsccWeN`^3!Uyl%hZm zqo{IL43LGDe>5I@oiryHO^tVq?4^SS8M%e~X?8p5?&;s`!QX)a&l>LbMx_6EU=}Ie zb+Eg1dR=O^m75Fx{8eBr`vmAl(ZLOG}R0%BwM`UxmKC!f>4zrJU!~j?1!n6X=NOJf4W3`X4A}7--Ej9nVFbbW zSps7K=2W)_B-0a+QOsB-a8`#IxT+UiFE1kwYVgjsz}TDRj95(AhONF434U_nc)v=e zoTDx$Jw=Z)#d$>CJ~g8V_Ox+GuPPTo*e?coDn=BEd zsp~kVav^_(T)(wth|*KQt2BOB@O=cWhj9W$jJ2RzkJUfIQ%dWeDq?s^6CO$I0h`qv ztl%c(7BE~W#_j_+oOGv$I7f_iXfU~hEM_`9lsXh#MhJ=mf}-Q0(B#3N|E6{B$K|W{ z0l%)?e5-Zt)bdAvvkXB%B`Kd>J@;Mf`sXV*Z~A|8cLACEr)T}sa~$-D<4h{%5P=i6 zvYAl~CxE_Lk=}=d^W!p$woLo$9^5w^^`O`~3UhvNx=fh4(;%5ArkAdCm^=D4B z=05Lb3!Pq0kJ8&Zb8PkeMfvLQ@2?)cteby9F_)E}s8&5!8P}6xwD7ugZhL*UzyQbaO!2X4f=^ellQ!?)%PzfF5UmypFO*B<41r0 z>ItnOVJ3%-$lGgwUvGau4k#>DaOz4yikW56SYt(kA#tItwOYxw_7+P;;BT$e>lUD9 z*vmB58&OFE-r?c=grVS(8eBaO*R%N9 zA3sF(>5%2$y$e@w%sEWu6j(5Nx>JAd>zqCg73Blp$Fcd4sY~m8Yh;&o23A4XjIZ&2 z6!4N^lX2{3i&$I_&ieCr1}%Fn#1=s;ym{H{DMJ|eB5QztEAUtU#iD-X!i`~|YLR3Z&4o1eOa1@WvkA&A0si8I= zVgt`Xv;SGowCJ-P>p=w`=VE^%=k>3*WI{sVvJmVfh}fB&PEcQL!G&b7#>5OORM zPQnqzF_;doNu0NyCsT{H#udpITB`~Ip?*Hxj_X{^1aZTO5Yw&H4H>Wi^yF1rX65i%t>LKHG5g9ua)`3 z`+Zwqg_kgiBT6v5a)BJ8C<{4{YQ&&wf8_a)axvCh4Ur95C18!7oz>mKRvLe8JLKk@ zC~Mta1-6Wmle{>M>Rf+%`wAE14r4Z1cF#Ts^Z&qF^CSrXb(>Z0;{)C&WAbS z1%6Tzhf&qEG1vN7MT@i(2t4FA_jG$bbTM|u6O7Db`Q{582e^NdP72{439V5}CmSFu z68>k9qCS`HAG2P6k?87}l0!sE6|V#(TCYKYelpCc4TC??ey9+k(TD1!5xq;1qL6O~ z$aN@o4N;OSWO)Z9z=mKQSoE7 z&YoCWxQ!j%`EL2b53N&Qa$N6-D1$`gg16~3fi=xjM)-fu?%uO)@3wt=hedv;5s^LC zbBTq@a27Et4X=kOms$?hsK_kyBbn7Id_r}gsjgVyZeX<(FoXm+9)PvII^22%sV1lvu zh`F$cIc9%v6-}DT$X(sC8HaiTfOP4_rOw3O+c>Q86@O<33i1lXXR+xF(R?%tmJ z-L^j@6zB6*D`NTlgwseU#vXv-PQWiHn3x<=*gix_mEuMFL;^8H9Bkr7miZ>dM36li zJ-SSOS}+~kxU;sjUxt=VP7><;oJXEtn>hwK3hsY=*Cqki3}vE*liI5sGLu=l^=1T0 z1`)R$p*#dp9Py`vZlx!$d#`smoL#%O?cBOO_q3(r)z$O!jBgnOCk#(i)y4;lD;~eN zb?>$u8g>r~%qU;HzU$>}_>^|hJRgVi=dE`xG-S5DS$VkVzxNr?LdG(<^G>lhf@vOU zUig0)=O*Tb6R<@$NaICM$am1Q_~fueWUt!bbZH73)OsQaUbd!29;8z_hPTHzHL$mT zN&W#2UfLwy3+lsE1sqdL`ei4`W{C+M<2k^BT#v?6Myg}z@&%{Z;}s@*d0~4v87bzt zN{Ai8VyQui%M%J!$x?c zR(IXBeFXkR)~BqcgA9S@$bS*`4zs8NAS7f_#U$qiAT~n-2`O4SKz|4@0SxtOz-T^` z3YyR!VI=u{$!Qi`LVvyEZn;8c;#N^r=I0%WcVvzV7U@bD zQ$uI=BlN~L;=+VT#`qgU=gp+>*paAy{>5vd+1BY(7_4FT7@FOQ{Gv=F#BQrp#J_iY zW${~<(Q&vJnYQxey5j$J65nqfVU~Y74X@NeD8Sk}g7k%feS#QOh}YGq2?y&asI3o% zH!wIxktjc=2tP(B63L;vo>Vxr4&sFgsOmV{%adk06M~K<1@P)1dROgH;%bFE9Ym2~ zufcNiUUNvN4))rBnmX9&4tF&Yz2}MV=lbLDBnJU{QekHlWVXKGGi;(k7S4ZC7Itu= zSaN9~F}0d5iV}v=nqgFu!L%wp9PS^n4DF!Jctgv`6jT^Utbkx?sdMmt3cAtktL2ikT`AM`~0KDsnbG4KFg-{gKF6F=t~8fWvMY5!D*kALyk1u2){! z{?hiXJB%%CinPE|gUB>!ah!ibp>CRt$+=e@Pv9tQ?0>Ui23$jT1vG`WCZQxlc%37> z=SogxTv3s)+`PVW4Gp(jmri3IG*uuM`oZkjy7N_w^TJ}n>SMQC-(F#XB8%zJ@R0QA z=<|8@gu)SEcWo0xW7BL}XE6Te!q|qezI$UrCQIsmWXzXQ2k#ySjtbBFO|4!`0v`oe#6hl8CyoWp-sErpwT3GUKWAbnHa zUKcC`&`zOyPTaSKGcJ4&B$FnnssoG_mPiHHAQcHIXC>(*wDlh{QE0iH21}U!s5x!9 z-$coX%ti_hm*N`zc zlBNiaxT%R-JsIy9%B*WDo7S9)YOfY^`UuU`^to<|^SJFM7R_S%BxV+6h9aibrYg@E zs|Z&AaRBDoNW+Z7Fw0fqSbi0$V%Ei*YCadK86~`?I=_ET27@Helg=PEsyPpx8-(_p zbn>C{owV*|T{@ZDOuJh44~^Rnnid0n5>V7Ys9^i#~8U; z!Oyhyyw!gnvPi~0l^z)3s#*^f1M^agqB0J-B7b8u%|;m6O*PQW9Pr3GQIxR<_%Db&l@n={?iIdgvP%>$@mRksQsy%-_GF!2b0!~E`fdCz0`l*zU2BVi< z&>j>qPZ>cCeY3VG&=XH`B#uWz*6trHVqo2%rGdebws%*x=E$SM4mR`T;Ko4FGIEiA zZU_=%(I6<;M{7%=SbshWM}%+#get_C)hSoSy|re2oTQD=7JdyNs4KEF!|;%K2>29b zaHoHWkAO$NP}+!ZUv)CcKD*r(Rwp~&Dihtv@a%@@@4tAz;-sPJ8 zLVY}d{X{HH;YhSBxOKk&(~H4`h>sjnDi+}+8ds{F{F25lJIhxRyBdynLxCpqkud9> zi}YltDD7NtuUKdO)8mLUNdh?9p@G;A4McwdhL)NN*=T(}VNMGXO1F7LWxc3r%{7mKIxzh369r;44b_u*IJ}=AWK>-Wnb) zRz}*Dt`%$RC@n0&x9s1u<9TZflzx7F$0K$$2>bD*5xvl7)P)1Jty0(^{q9w}*2sU> z1wIYNs3pSD1_wtCrxPQWa#uWiPndB;IMCp>Mok&w87o0Y$O*c?5C3i&@KC!oBopEA z1+Q43`>O8ZA3WfARM?-0x>T%bzj;#D=7uGc5BTjRq05jOdE!L*Q8Oq~g zf>l#`m?-X!SUQMZ=0V9UDSWIGO(K8T&o;LCV#8y#X*m=S9kMnPFA`u6vMJ_xu(;NN zdqZ@MNV{GJDmJOWe@3<=zHHLfjxra_o4DzN+=Mi4;UDDcHE2bFS*C6qtrJ|%xPE~{KMvOz(Mz|Pp>RrxM7bRF=YnLO*wz1qPVo8 zb0JMncveY=AW;UDx;Rl;h7)49Nyc8pvwMoo8URQ6^WUtzvq<>rum1IqTQ}#>_4v#! z_zqu|-@XTbm+rpr&-{7${zIs^^6(P8TK@K{M}R_@T{#G`F=$TcGtBWf@CH9Q-WAIx z!}Sq<66@njbA3~=c2P-yqN#sgLO}8$TnV2hL#`g7)D2S#kyh6neq3%3s%WT4di~3* zoLzR6H=SL?-kyvyO-BRf+d*v6Tn_HOxtxJ6Yo1AF+N>1;>L{Gy(9aa89t}?XLRZzJ zAN%un{F&pc=RYD6Gu!(3Gk^YV0Lqnz7s$H)1OMiOE+b9_v=c$9=yre5$z@6)8fL*q z3=*Y|8W=D)z{lF`69Ei+=x6xo40#(Nn|?JC`L)UIt4IEbJJl+gQBHmB&)i1G`zgl# znxaJK@qxRulchWQs3U;Y)rF}GId683TFd3Aft+oKJh)%= zVK8Vw$B;YUtsXt@6aWAK2mk;8Apk1TMZ514006QtmzoCwDt}vV z8%cJ4=dUQpJ29zYH!Y9t&4^wnl&?Z0OJmBJY&^nrvAan2i0o>2b&H}Q4CWPNei|o{ zUKo0He`i}f-xhHq?oZ=H86`$b5vj2(X1QpaMVyCIIhrYvYw<9d%wjX$6oI7WN3{G* zCKI8Opo2wgreY(cn8!&xm$R-IOOtm+rew7Aa_wbBA_m)bH0BpcI91uEh<|forg2I$ zM@2l#J@7Qf&PFmk61<>jk29sPx4{IQVrz39sab>JPFF0ZF)=$;LgSyzPBfx@9}7iF z+{cVA|9jFEpDa{TKG{oEQoq|OqG;I_yYa4eGiDG@SM0|$;J)sPv#);H5i(Pd9Lrxt z;A@=eIc;1eh0tTM)I}!3seg_`wZ87RTI=g?{_fwu`|rQT2^_FYF(%YWP8_bUZ;BUt ziSj}{pUWf?I-w;U`NQ@#UBC3~ORs#{p@UqVJRZMowtc%g{eEF`;-2M&2_gUX>~C+R zmKrl5QZG}J*yP!AWtv+s#bIGegMeGiz46Q}o|ki>aZ)5IU+C_$8}vg4kolT1P%en%8ZEu_Le^}On# z9et4L0_SC>(Cs*xusE9%^zzjKcGjc8Cm1=FFFUQ4=XtHxwQJ(+Z+{`KK4sC)6unVN zq@oTf%!=i%ueVx35PyuMnYO|rn+b1hhC5=K=c(E3^~fH5$ih#HQLm)vo2fX3UC}(E z=PbXyuNNvCP8AmIiTk?`IwkRxo*R1Js=o^Fsou}@m`uxic%s6Byv@Fz#o5$aAM8%0&(`Ie518csFm~0Y77%g$hTPv!xHlIXEeKBH5k_ zC!kZYUu3COGnaiOFOGhWP=4R2U# zxWNnjk|2x`0zyGpkTVF9=7A96icC`_NmyckaPY)$-G2k=1M=W2#sP7T6`~RNA}N*v zr*P3cj{q7kaUg*(INDHVT~ZGC1BfIJL1rmzP{T~p8nBtpRIZ2#5yh~-TxUyP4Dcq) ziZmBdsjg5T2rQ<(m3{)RKqW!E)5j`XWN~gI4{S3ddE%jgo%pr+|L@Pg{-t<}qZaK% z<2$4TFMr6AV?S^(r86VN=lw1#?b%O%0p`;soSQnyGYJc{kN-hX z=;heBx~$3&pTyI~(!?8BDUw%lDvTcI3yO7_dRah3#U6`=Jm{Qva_1JNBmDc=Ss>cZA>#SFrq9S1Hwa+&{^S*CSSS7d6g)FNfx0#+ z2%~0WuRJz*M?pTf(-hbiOO}n=0u0DbP)v2=g-tcXNFOBCZycvPo7hqs!$qWkn6S9H zwSPYAf4V{!d0OORLWTfK4kAEfVh}*e4Gepd&UB`-j%ZTbxY66#07%@~CYk|G zR(L04@jjYF3{871ieZZ5&gXt?6h$pAMt@ayUG*19d$(F z%i8c-V8tPzk`CdG%l@ua9_~Y-fwfn{+7)y>kH%j`N5Q);9s6D=Q%2ORmsijWIR#+J zh?ju=_8ZYOsS4w99J;Vd0O1^Bx(JUTi&_%ziIpDF+w&{}>Rc``meFr(1#eIa^?#bE zfy8f-x|Lu<*4;|hR-~kepH5|dx%zQTrHEHW7o0QB2L8pKcq*4RRK$GTl4dfgQISLx zoP+(rk9YP44?YJp0}vQK-yQn-Ngnh8k&Gdqia?I9b4e&5Li(74IDBC0xZqsc7Xd3^ z;GSBw;HAnDC*dAUfz z_bm;Bu~cU{TZ|=xpuw@1R&-c`e6@@K*E;>yErJJ;+N@|aB~EX|&6|WS@_%@)kb^7h zTuRoal2B5j`mNhOP;lx5fvo^;DHlzyyR$VV5QDUdha{aNvBwaVNjfTroy;_zn||w# z4}4B3DHK=)U-tZ&2F?RcNb2wowEw}*-u=POV1NI?;9&5dr1aaS_G3BgO(7jA?3U<1rAg>XnDl zLpawne3&qcQ~K@uKE}Q-$5uMrB41L|uxi+&0IB996;W_JHza{PdVhDTP<2`c)6+<1 z^i^i_JGbsRx^BIatGhOhkE46NyAF}u>k-AzA?5-pc(3*{PIl+Ab3z)!TD3RE_G1k-Un8i2kXac?3DKau?qo7h?~-p}7YXO#Jk{M)=F@vNq61@}H&lx0 zGR-T0U%n4;Y(bQaFMoY5Q{-$>R6Q$`oJ?_X?X;0>Ryz=~nUT_V6bE9)@nu%lC-wt% zLe7D0;74mec(S+quwhf1KcMGp4xd>H;_Pq!gnw%kPDe;OO_XP~%DMxRijQ0p+Ga~=V!pJW#PRPNB$}#cG!k(8l)r}a z=z9`LITLWRz4U1Ez7$F!t+`ZDok+^)IajQUU~Au(tml!W-Z_YLrsTl-n_;dgF{TOx zLQr+~y_GVm|Ao|$`dEyte~{X zr#j3N*sntTtg}07kENAS#CNvjRan;se!#2bnDuH7PQ}R9i*m9=V2ulw*d`M%Mcl1` zMFV3HrKTgNcThzDjbRK3sgsV+eu3>>5v>%DV~X`rrc*@sOdI2s>)MTBKUp5bRx5l! zQc_fs8Gm!nASEXxD^JX549hyxD8A*)sTC(9Qq= zIBDK=UgvUm15atGhL*+3e9kBJpH z=&tBes6!0`-6^YuHN5gTSdIkVEV3k1f@dzmoPB)~RfaX5=>-{8bvpI{hVd&!;8sz| zvJ692>?*Z}$dnk@G_<&?SJ0uDs)p8g+AC*9yV9AVlJX_ymPl%KP_Vi*0y_2k^Ph;7 zrhkcWO%kf94T@aDG3DSH_`}5}A8P-F@pU!{Y^anY7-GIGi>Q~pL4kVDR|i(}S(Oy@Stp zx1T-Rd-kI+IfeEH?xeo`Mx1L|!Ej``k)X$@BVf2#@^b6Y28NL)V|U1GeSN+{1-h1C z`x#8$<^Vt{Ub)h~TS?GE;O7?`hcINyP3Vumc{lyr-gqXdOjA`?Wg1g;)eev`hkwrF zjSg7-OIOP#YUWT3xpWR|h3v_|c@CT}CFqPk|)7*1hID(`HHS1Qvbs_TkzoEdicHcRU>9p@mN zbjVxEWXUbx!8TRmfzM+~g<<=thJX25uoZPh-TtQbHMT}yE!CZs)NTc6c4&o)(=zL8 zZ*1K9=vIf-tIGfI^d>#DyD@#n^v64RFDYi1j{72`ZZDRVRq@i|X%^4PBB@fD z?x`a}E?NX+JQQjygMHCx{fqV>$)~^>z&{XTj(9S&XYyFlbp^f-(SEG;#7emwz%49n zA-2_a8HUKHa#Pv*e~Q((!2G5dc}9hlZeX`rUZk638wZq`Z?c|OUAA^46Zi#PQ1k-95we>j71^^w7>YXf z21bwDR6P|T3=v~+nw%O$FrBUl4048W`Z>RWd*X(hSf~-gB%Chkg?~$`ZSH!M=moqr zK-Y+ZY5QZGJcJ8UcW!)$02)$aVmj>E3d02qt&fV7S_diBbLcf0?g>FS+KndT*3j}f zFE`A=^_;7A+-iVOl%cMgNU6I97?{8(x8Yia7lPxU_vTmMzWLR^1=ug&tvJc8X63L6 zqC-PQm^2Lpf51?V`hPX30iAdLU9&NsIy8v9m_aA81_PrEH#SFhr)w)S=>CP7BBJEd z9MK$xIO2bP{!edy_GfSY^*_G*$v=Mg7vH>j{m&N{ds$H3lPqXe+C(MN)USLiuP~Z8 z(+PE^1@lPrcjSf6>IA*--3D69txuFWsv@X6+}1u)iZY8bN`!DRc#ebun#YAit5K%Ys_!+`1i6!P z^_xa{8+>Fo0MZ>Hi#l^-D~gfK5d;8)6nBM3)YZG3W~dRr(;}Ow)r~c7S8)*-PR0UD zTG2FK+kJLgNPi!^Y%H3tTQtj~y{jINY9(ltl0gqnLiCL2y%cL7JRd%Mw*PGJ(e}>6 z4?e3`Sc5XG4!ol7y2kX&w9%^7BPt)&9r^ve;r1WZ0_cjyer-S@A7@K)!8LL3-aS$8 z2)_bBuD+N|>FwRScN=fLMYZe6TO`DaFYxH72EW&0U>z>&7>YE@3RS5YDwOT;@T|Kf2st3LI@HR!2c=;z@!P zyt2;`xE$r}eGzBqe3OEMO_v^d++eXz&4%2Xact(tNJ2xZ_0gGxQ%%=dN+kR7p?JQk zwFa!zqJN_1bVga$BB7pBoL;P&RM$vW3McUWWK~d!Od&Cnv59*YCe8qMAa=%J zP-=Du6w`gNqb4$3);%RcJ|WJX2&|&BGT{eAs(%GV5+7Oor^;e9p46gsg`eso3%f%2 zZDrdfeS0f%5tn&#)k?{!^kU1bGAY2n+sCAcBMJc)>zw`l*D!~b8!PWwTo1^(2URN$ z4;GZ@dN239cRKse$lKebsdASTDu^z1HEmvL81{nl^Kz5t3LiY*(9IN*bcrbnc4X}Vj`n!7^~16 zSikjdtp9xgd|p;s7+`Y}EoTe4H1683sejT9|Nj;2lSr22SUB*DG)~BBvGxuB;~V}B z+VBm3;|73l>2s`&QO%C_TCKr6VC3x+=pli3|k z3MSUWgArjNjy)1Os}eCca<6`MZH<(^Mvj`NlGN#j(nGyUiLIS$|Df z*V<^aLn>fa&ED0^U}Z6EN@)iFV{z4*D?*Wos}{Yk=zeF8*-4y8!h|FficsqiGOz{M zgPEG$B~&Ea!e}B(jwA<@qNZewY{`}^f!{A|gI_UNvWJIl$+D~VqY&Nh)?e&L*z>sE zYWV@l&M;(<)ZORYd+s^E^XwC%q1_vZd=(5vgv=(4r!g(rFH_?+HRnWKot}tmGtb43 z_0E5K=gGP{@jqKa8_8+O9&yI<|5?}YIVeKc8~eNrw=7}>?r z_PRFK|8_SnmdKwl{ zUU&ufiF@M4g+ROC7ruS-1E8vb{ zG7;VtJp+I3JHe)@1dZCZ3>QfIy z!zF%B$V^TStjft%*rDu;>BVeme^%y4`SRP{q>Q~T6(`l*<>-{L-*2R6WNOstUn_q{ z6TF~bqWAUXf}YQ)wUaZQ#q_MCnA0=Ts+I+v0Y$o*J(p@7$H zwB^v8J~GD~U_~`G4u_+r=B!8f+P;6RRno3Kch==OS5tH1gm^Qx06e4Rk!&@OxHhzE zq%y!vo5_P@$}>@;XGAYP#N)21tEjdr< zW}SFj7;meod=!qW!KP5~me21Mjtkx1)~<*z7-$OmeXV!JS9d!-;jnO=4|a5T0&Sw! z=j|3Bd~nr!$I;mGH*af1T=hnrfAzMU_xs?eKXiT_yc6&TJ#EdAkT1~w!5`kapU!ao zA3prBmiI%#h}4`pBeeKfX?uUrC>DizBU}(Nos|6rV?SdoBw@>c@)9%kIu;6w2aMwj@H$oeHMp>+rB0@9BN9YbH?7DHvSqln9kLB zFa^d4DqikgE$vQe$wYY}FY{?oV>Ez`StBE9Yfbn@ael3472={2isZwzU z)U~uT2lUmCBRgPH@CYCW7?zAJ$@Ej^#Rpc=jT1ucv@+KRCuaq`u>0Em8%owBW5Cw{9c#*Xxx>^^`E0<;bOC>|O`oHUZQ#Oaqo8J> z-Tf)}jd!CL;`*~(U7ZFnxC^j54GJTg8m?bNXgdc~?5G7W1vixnLo$;jAD~p&7}}EQ zG2sTGdrp1&nOn%6*K#)x0@CIe0ENjslG^A?V9P!e5Lqtv%cUZm1+WH8mFpSP2~I1* zsW~~D2IH2gem#G`A{RG}mtZ-x&gDLRdQ2bM0Q+TvhmbgU>z3aa@Y<00f9Hmm6%?}@ zv7ngYopBg!5kOck%)oK+2bmr(Pi6>~?a#^d8c4IWozT{oNS)q1oEO^QzKn0E+mbQy zrtgt>^Kb!v-!fj#;w6)nvGP<74XPWS2*xQpeKzm9I^2JmjIHXc02wLt63adI^_os2 z33y@Mz!XY_La8{)jErKAATG{dwXq#-0Y3K-5=D)H`>;Qf;R%qG{`|S97rZY%+p3Kx zV<2h>e}IVG1qHP^vjn2$6ztPPp=(~h*AoVfIqvuZj_%J+1En@^xAP}oCj?V*(=Olw9_qU(_|Xm9 zXhb|AXZue`h8^_(hlnG5s~b$EiiiLY!AApVQt?MNF@J@J2X3U0x5PZNiuw;q3b7VZ za&f!~HdC>F(vs5l0Bcxz0X-km*{Mwd!BG{4Whz#Tk3&Gm zLIn^Hw}yP3k+7?!%ja)11?wcb4S%|D^?LJ{wXJ?nSDTk)`!NZ)Ry191xc*J!wJUJd z68?Y3N*ik5NtV`oRHVc!vd2N+UHk6a`NsmrBsQA` zyT*98XUdL1$(WYTl=h}UJx&XKC8ZwN%E`S4s2fR$JgUg{#$?|s00a!C!9`)9H--N1 z@J-;0Dj4x%^ngdSN0C5Idyr=QC7ra~82EqN^b5dQ@!yx4$XZ!z)Yf-@CR8&u)Ohs( ze2AW10H=t6M!HE)ax!HFNL8ptvJq8F67?rt_4TM;1A-`?mgT;e`cLm5e>A*6{4D-{h>_rgOCQR~C%w#dWc4W6m~w-H|5kr6 z;+UaA4xE>}&bkOEY~-KGjZG{26Kn(w9pWQ_aoek;0F(FPQb#wmR2EJSm(tx`;Q}!V zBaC9R^O`k=BM+5$zUl#Q2M?ELAIt6Sa`e8;0A#FzVQ@?&lVdD!M6j8Z99RIosq$W* zn8tRDTYYba)h7O4aXmG#2{VtbK!txe;?D_HC4luq)DMhGkT`s#BFDoqqvbY_;oxw< z4+lA@Y*K}rXjg0}yi3ZvRmceO0Lazkb{rEMe2O3Lcmw>2_L5$!lmfC-O!rVWc|^7d z;;RVnH>Qq+st1<|czRgKmSA~@|1w671|{?p!tU+{wEy1&R&k27{{~%XX zNa{X<5=BD4M3bfBKISgAte*A$muQN@cwr1Kfxplf^IBpB?O}aPA6jGz0%J-ED(b7&FGnZ&un-~J4B@YJ30$3s3O%4Bb zxv}Bv@0u?*K+e$omn+TANH>4vStSZ=EWcEaW*FDZRAL$(0EDa*bm)*}EN)_sFdUcL zkd&nK=gZ~ZA`l_NLVlDneQT>H`gu?Lt+Xm_RI>ZNZkG+*as$n4|tWDJ54 z*`K#;iuPRZ6ucJU?)2Qn;ziiyt`3Db*@>>eYHLn8O?9o*(CqMl!Lon*?=Gj6YPvj~ z_Ba*s{P&j|&o^9dXlnYp;d;aGzqJT`%eN+w&nHgNbT@K47=Q=t!5}L~m4oV}`#!3cje;4{zZ%2!_O+|m^;I30D40t%9&GvHEg?l^g6j#AEU}wA!j*{p%!R43Z*1{{{ zJ5QZbc0rHW))RoMuCpA7o^zQ3{S*#vqfbjjA!ah;T{Ce}+Q+UdQ`Dy?jyOiLa@Sd3 z+d1O!T}QC3%MbYr@CFfWr`Q-V&PMqplvL3rj?6)pB-{)TZt#CmZt~Ui36TQSZ9T!p zh*n8O18~T`4qW$Vpq~Q+v>1P|)#Ha;D)4LdiEmA)y6XNkXpR=&qJjX%RXg{AuM*Ga zPQi5wB^#<^l&8|5>G1zlh?wH!R24XnuU|~-`5eoYZw32jNWXFVCf807RAx5#{)50n zcp|eqdSMvS8FGI`HI=Nf=FP~=n~^B|J<9jFj`1{a`Z9{V-P@|zp+eCP8R9*EkR-2F z+m5mO=g`^3isw3*{#4ks218z#Q2Hby!Jr@hF*6w9bUF{PvBL|H8Bt^`eXpS#E%Ha1 z<8eDM@j%%XoA&{FY))33c~8aA_u4!m{OAdFe0KVrOG$qu^FSqlRfei4nkzR=iT-t< zL0Q&nx2y`yioG%xtFzpjHC~O?RMIkgRbzYGSm`N`XUk6}C@~t^Fg6z;$d-!_0Fe$B z2DO3Hh8^k_K}Ce}?`XT$Um( z&T?vZ4kCYX4#jX09KeF>R&c0bU0_YIGh%AC`7?n>Tj17_zk52r7oN7Z%5Si)a(~L$ zdPtnObjpAO+s4v2?EId9TdW!)ubb=D!tL$u42B{E9ADP{?qcJW3pO-5^E>>#mNOh} zE~8G1Lliz(yL(3==9Vg%FV!pn!{H3jpfb<2^+kVv3T+AyOBGCnSuRP+fq9T-liw4$ z6%2KRF$%a39?vYn9)KT^D5IIN{}}6yAYcL>ECH`S1x0xi9f7}$WLDn>VCfy81uJXx z`#l{V*X1jsInveU3j%kLGRif!sy3I-aSghvlG)l7js!a#r2AFn%$1*oRYkF4eig8r zjj?~y&Y)Zz0~OA;CR8^nOu zYz?A7@zi=@kKq3?Ivm=7g)0;x^e*>f#|h$B@n#}s7FI3UkL|G3+$6fvxANcohYp~Pn3I{v9>MDI~?PvpvD1_fc5g(|Ka&&)w z-)<*om!u_fkfFD%(sRUf<>ez`(q&eg}XlB5;3I-oV|D()JTTMT{9$laOVv?~WOJ4*@B~e>68< z6)I~=?3DY{994rFvU#J^8Brk?S)Q9p#%@zGriZ}L)h#Njzdcmd-eTy&T&({kA`dn1 zRL>-n)aJKTrRUWK7m!U$I44wp{XjU)V9rRcPjAcE3&b7{F~pDFz>kRJW=nrw=5}O$ z0S?d$?SWv+w^@Fe7F=W$Fo%+m4${T)QFWCC29 zKCx`%pK;!vodAQUVHdNjBe)2y7t*j-e%Qsyh)brnVZ%Iufv1S$7TvQIl{Io}9@qV{}&-HUxusO6wpDxiM_E?^SiB2nzI zC41#fPCqt^%bfCH4JnFQ6H-RifS)o$Y9fFd(x#pzOZgQ&@iV%+{yZg=Z2(>__pkRK zYD9&+kg$3x>bsonFKy?`(Q%pHlJUOs)X0&zSk=ie_gYn~>h%4J2P=J-Dnn}xwg!Q~ z$G6F57;LTcYo8PBlj0rSTjLY#fQ~+t736_=g!X(I*?UQ3o z1eA1+<2OYvK6WIysGhkxsA;YaL3*XH98Y>jMP2C5#X%3nVmA2Q* z<1cwNEP6HdK%N}Mnn_yXmWwI1db8h;S2HR0Yj%tacq4a$q3^4}Et$sgIFKRxBW{|| zFxh=LS$p)0XU%_OC%|y_zVcsG!8|a}#+e{t5cXx21;-ZwNVp%%2xy(THuMBMg>Z+w z?I4uUT_*tf-@?vdsGU-aa&(GHgcw!BXBnTgQv^%p4amin@?;+`3+pb(8a)DQ1~E3D z!|@4%4QnRH#+iG$7+IMv9kc<{MkJhe5!a_T%~2pQ3cAb4?m;$%iD`~2PH_HoG8TxFvZ7baKU4EW7q4G$ z66P=wv*h%f7ey>t@c|nl3KVYYn19vSc>TL8m#$rFy!K^l;2z*Lu~j?Sje-Yv0UDIY z*Hzyi5?BiJ*`4uWn6aEP!45cFe|2&?Up4%Mu9<&=1v%PhwR$P8;JRUd(oFJPL<`Ho zfW?-?PT#B|2X2~ja1hU;5sk^%Ca8uvm9z$OpnDH))o^&fIcikb~b6Vluu6#^7ZEaw8n zGoOFA*eY#A6G+yd`rLUE{#SpdzW($lr;!}e_~fSWcZ8{kK(|w2#X)j=Cyi4U38&ME zgu;+>GiuQKlr%t-;hF~|ZWRMK6*9$ym)mZt1nlr-qVEf;kZv(g_kkm| za!fUNQC(OCT;dnix8<_#(rmfJCMvy_vuAs!<-#!#-s;23hlCD_(3z!lO+ zKc%Max>0e38>ky+&2HB+$<>@i=M!h^AfxE5t#Ae9-He21Gjwb zW~!b%oO;^<(bH0mh8yC@p-xW=ES7)A*-_I$sr2X1ai(x=hoe2y5o+_>a=({`Zekde z_V>yBFeZ~z>GI?Q;j8~+09}PXw`An-5)aiVW#OSxH64nAVYiAA9Mx+$nLv4_Hp`Pg zt2*!CvKC)+al*m{Gb2}!eUr!rqVk0-@7j#VdN|DETm#<<7#POE!Qw-DHGzMRgB4E| zuC2A&weSl8@eUk%`N;&XXD+WVM0q_fZvB<^7qp(7i^o0~uU#A*xp*cBJiSZRGO2~= z(x1Z8CS0s?5btVpOD-;1YXecawPLm2%Hvs??KM{iBwmc-rn5i8uRNB`*Wky}eiqY` z)F?L$uP;u$0bPi22<9*CeMXsyPpE$sQtE^!O342MqreU^=KZZ#}8*_?C3J0NhX>YJ<2Hevk-uvf-;E|hBezBB)R8uO>gGPKSoy2(L zx4v6JjBzQT3^*25J+94kEvJFu6TXo$ggH%a7Wq})_vs3lbvJ7E9)HC)EP~vN1(_e^ z15t?^wg2#y7&Zenixq$8Hx{&>Cy?nJ&$=}T@lR)0sNGxHoBj14>M9~NobyFjb4+-O z96}w!5xOPpFe>bAY1eT-x0p(5n`8iLZN89jg@x+}QF~lrwO0I_sJ`)-UU#jqO?tBG zH8nP0`cGBXREJ7V$k?BNq*3h_odRlHsMQT8ir+eU63G1e6J3A9^i#M`h;!%8iOMeF z8wA^!qMZ&t**n|%lt~<4 zkH%XFPt>5c)mx_~h>XSAXIh0B2(}sUDTz8T#KSX)_%1-W3sj(0R9^=L^R)+pA+Mvu z7Y_RZ?QYEd-!p#~gi}iSA$!-<8V!QX6M{7!%HchbZ^rp(bL5U|c~&~{#my?s#+}=y zb4Cujeq|lrwyJtPM7SI1@zglcBf0t5D(@P(9Gr@BS=;OSlMV1RT)?18!Wcwz?ANep zHJQZ%04<0SqpF3iAgY2I({5#0(LF!(Cv`>cQB4ck2fgR!@xkD_d}@fAH0 zFZYZi6Z1U=2rjAkU9scdqBTlm?`PASR>QDQ8a5H24>;IGJI8tlzeB=xC1Q&eD6VkR zom?PSgIPPTl`Dai6~YnPJXe~K}D(C*rQMeiOVp5Nc%Fz+6p z_?>nyXy$(pjgI#M|F?+zDnkX!Pz_7+9MsXKx{CF73`efarD9g9sY1Q}!X(Ed90YSl zuNv?<8o;hJFGxVO`f?A5P-Q37i>swqn5aN9)~_u*MO658(|r6AlGXS(>(Zne=E_xB zfqyh71I)Jurj-=ZYnX%Es`}t0s7$197O-(;k7s|)&N~klRJ~_q%@Z5-kYY^ifkU1`rZ4S&Y)(wzCw*GJTAmw(0pl|X90P;_{$l%F;` z6FmB`u?aSTYI4;4(p+6#4S8n5*vbs8B`|$tv)W5i<#maYu(--ABEb%P8?&+L!qtXL z-_;2_)~h&wzUnQn=^*4;%%*P=D<|f60w>jAvEHf0o;fvexL&SL7TBCC)fuyqF9N{` zHnZ@}$d_QWT1+5&hjM6A}^_`YT;4Z$RA6E1(+E%;S2>=06a^2-?uXc7qAe1+FaGO>Cedx2U* zUtu-C6`lqxMVFVE5@jm&@K(z-r>)9=+|{YrX2sDpc<22ZK<(jb!XST@Bk()v-Z5 z#Y;kee5k4j;PU8DsXwOj4fsn54^l7t z6wFLso6H?pscq(%cgFkSphSzVfOT4%5iMW{h|g1;CRvH5h992D!fRuH4$Z%B%cb|O zb8f2=u;nqiK3=&a^Gsa7+zhb001zmC1T9*BOkwMM|1sBmwA@H#zJqkb8b7`N6jfjm z3;dYi_oeW~h0ORNjZkm6A9xFjRl?G=>c*oe6=I^vC*CCD;*Vck`HGit(cTNfMmmj| znFR#<@6aWAK2mk;8Api}4mkR(2 z0ssIU0{{RO005U^2m%wAd^Z6MfB6p=VTdjqlSR8Iq;xbc3Zh~|(?y|-GtW3>oHsa6 zG`neNqKRWvuqkOJC4{D~)KX~ui1o+ln~zogLdPm1-E`63&4YJ8&OPVcCrHR(!0Ggc zCx^1I^AE9@0NepmNC;yB`;sE!f(Em`?le2J)wYHc+Bvmvj_>cvv}VxKf5@KH?Q4Tp zztLLv{_b=+f_AQ)%i~3L}HiQ;~3`UD!p1%#RZhpGDwyo5W|TaPD?U^K%|I- zJdv=Hz_KJ9Lg-NCH4Oq`oXzrz2wn*l!RL#iLLi=cjRXQQMA&_l3d@oU;b(VoL6I>p zJ|j6vIq+>}2vN01!C=Y-XC)D_YCaWQ^JLTS_j)u$z{`bRMP5AJf7@Xq$z(hkjXaM; z8Sfvu(%U2Rsx|AMnHK|E8d~Q)r+I02-ODiS?ho@uH$Q#0#tm!KqV;p9RJFVB+>}|q zn2je^vu)juR%TFReq{ESH_r9I`q-K3XN!N+DADSBHY-l`ifhnRKXS$5^BVG?qC_B= z0%o}>cE zN_VFV>l+9utY0o|Z!?jM>2Y{@@mpX*8I!B40<1H@aOj_^HC!;AP8w(8+Nk(I; zl#v8Y(qf`=PR@TQf*4~Ac&_P4ZzmE@@S)+B_LI${9(^IOqoeoOiB1Bv@J3@oE{F1* zXtM#j?;vps%n5?$f;>r?}PAPv>rJOeCQBg52KtiK%gG*%Z01pN0C(3 zPvPaljR1jonLr@D5g)+gv;(U-K zjEsP;<|TiJ=qZS34E;2`^9~@5yedPD0}lw@mo6ha)ym$oQI0S&J94gtuv8` z!!Y$G2*pRkOsrbZ35e_vZi;*yhOiLn3s*CtQh0x}5ZR{4W2AEAKXmFqP2@vFK7D9} z=c^sbp}wApp$RFDDFW}(L7T=Xk8$L4c>i5g3#!aH?`|8hGiv$lYYZi%^t_NEr*(Hw z3ylChzUSc9v82o{PH)JDphpBCHh42uN=}kBEwgW4Hoka9LvOUqUXEqk#~z-V>xLL_ zfG>YO*(`4UP~6%uR=zwW{ZnSk9Qr{Yck7i ziH)n=m`FT~oq;doT9EMh)M?`DB<2AhOvEhP0gLGHpEU?oXm%uEzFmI~V!AtU7FRKKKxdHbn(ebrd}wefi3zimwZNu0}es&}z9e^_`Y8_)-__KqaA}H)b^@NGn$yivQF@F8NuyMshjOcsc;);qa z1u|Pa3V}KZeRb#V^WyDg^U9Jj`3xBp)~C#kIb`sOq7I-*NHx@fhS2D@<7vGmpM*|U zD4;8Q^I-SM4sy-11G^5v4@vBl=xe1r!#V|9PStTK>@iC)&E9ySekEFKN5Z=N3LuSvnUDh4_B}IBBoD z4#S5CLk!lk1U1ZG$f93d7Rw!Qgj@ydY`n85`W6E|M1)m|v{pgpdPerFcb|*kOSE>@ zw5d=NIDTcF0pkl*SU|I7)W?aLUS)uog{69howUxRMJ}c^3&*Ko zt@1c(6|8B+EtJdc3k@G{8TEexI4e|Oy$L+?e{z3@QKV7FNUUz-L%2u{NZe zEYEP_R3PioSnjL5C{}6Z0Y(xM$7WYB9bk4aR_~Nn=FtS$6c*MW!^?lMhdhf@OgHE8 zfK+O~Z?o7qHHI07nGeYtcP5-1Qd(Iv?~j>3JSc8|Q`}rYM%WD&wqGFA;=@fR^|5eQ zTDo9Gyz3L@-TS|fU1Cskdcv5w5zUIfk6p&NhGad?ALsC3G%ue^K_mqY<*b9rIFgZ| zw&ueR;_ubgu$pX`N$-CITx07?V|^XzCMkB#+* zfUO=m-;E!47RH$146n4kQrLVJ2*|7uU4{bMM0=uDA@a?EG`Afarj+pa zM>TbDi^?{B&t;#rW-OM0rEw_~(tprq+(IC>~@We`z+JP02aesoLD6!y{ zYX7ASFe-yi#IZ`r*}1~TBC86STVO?5yt`alUc?ibQ%j}0(^z^y$B^Ey$Z+`8)@^ot z^TxB{l~ug=O!1@woxVUL%1u%`c6>_e4NpgqqXZ7yX{~>n_XL)XPpwn#!r#??B9aBc zyBqDx|TC>l(tFm2F0)SK(?Dw1|g?MDz@uTrR7D%!O7=DLC2P0 zi0H!yv6Fv3f-H?!@7cl!8#htz+fxDpe_I|ym6}kC2Z6sWkDQRguY0nwP$FGJ7?@=x zrO170tgtMDzY#YfH&BTc0STf=SwvC-wgrFeK$!N=RpLQmw#N2F-6{t5aZ71-r4=u` zrJmHX@E9YWF>%pYobY%%MuOt}cPus(rzXvXpN)U#&vwSfjEM~r6n%-6T^n{MijOWE z8?)r*godpmc+}TaSOZL+Yis_5wH5xMrc>NIZASpEWJC&g%4mxa@2SAO3~ex%!Y-tf zgg!x;}M{`4#;>zRDu7x30Olrl=tLFD#lVm$XB83tI!MfCyOrmif)94W^osZ^zQa-L z(SddNm=TTf2gdCE-SwO?dE40Ba0UTRKZ<{)BJ1Lf*;P^qk|zsXGcJx7x0l%zfzF;h z&S$l)Jm(PU#r8b0cfZRC$ud}O+iUmCKAJ?OY#(~Mpwmh+fY8v;-2O3l(DNAOPClH2 zVb1SvX>UvLJ(WUAxwI+`N-4lCY%@>3k_QRT;mF+$+$Kc&8_yA$9D$Rsmz1g7#Oi;1 zb(Ssv`69cQ+at5Q+ErPPaYW;r->6k|FZbYRG__K6ZN_fL9KJ<>4$K|Aza5FssM2}XCNcy{da(c2MFeAj9 zM{TXJ%vv9bceX$AD@4^HNlZf9dGVz(?xNmRHlIu%knVcb9k)RVddqumD z4(gxkzE`xAjtVF5C!}^J7zwhIA@c|%Pa2h(k)eQn)^J`XFQ&aBE{vj$n9_fCZ6&@% zoyOx}YKjavCuWSTvEt@r@uw9MVo7qF^6&QyIOsTHw-If7pJxtG*`5K!y-mAcv;I#_ z`hPR$zD()Y7xx;AeqkZL-mD&z;{B%&X#N=UeiRDZSFx4aonebtR*ZXJF(}WmqSTw& z13_0*QaYNZQYpOO{jaYPK8Sw;Y5XVWd?J&vCeQwPv;T-de}a=B!-uaZdv^O1j_E*mpXY)`r6 zb>$vUDy!?EKHc+2Rf-lXY%CTwzGYm^8_!BB_jYb9n>SaCxrgk$=G0YmU8YQ{T$a5P z3i`xEok7=!oF(#V?k(Q!Cqj$zl~q#jQpy2)eFUdIjmf7WY`uyLA_%eu4K53GH(W{Z zvhS%Hmwd0(@<`i=tc)?VwL2-5rBz_HN_jVT$|>(tHeSyE0#Hi>1QY-O00;m803iTb zdDIKc6#xKGLI40Gmmi=36_*DI0uGmtMF9+d!GFkYI$Yg@s#*tNj+F-?1jyDElJGHz zZI`;U)orS)%2m}m07YOgGRPK&9UEg~JY&!JV7zNEYX^s9OvLU#*-^EmPyP%0US`%^ zjfC;+wjH9o>gCIq?|v^ce_4IJlk_~xXGhykLVBmE?i@A@hpd0Sy1w$*y}h*Y*F|@K zd9nGY3-0R5#)TWroB#34PnTY)>1AWqCj4>p=E^TWEinXZE8nay{S6?>HQOn`(_enN z!Cr)L%SNT5)pRP)ysEsW{6TS4OPM}H3Pd?mGXd~_&VLC16L;~J`|t<%%J+hlGN;&8;(r8x>d}$$fmg}K#cwyh`K$Z>dt#NJ++yf9?)=#N z`2B!xndoMntUb8wUb(aW;jQNNdoa*__tx5j_ck6qTKoBN^Xdv2Hp&#p1IT*KvJ8uC zUc2f3>y>~+nQYt_>w!@lm+u2AhFF#jyCBOYvq75gExA`da_>BJS3X=@S>AYm{Hc5C z9vhGI{%~#m%aygC-wP-+jah2hRjO%3K3dZ#u}fCXbnMBgMolYwyiiQL^Qi|Ac~n!K ziec4l0?!(A^4#9t?Xxu<|0ObGxJ^o$+9*@G1dDISKXW+GGisr!T53JFqYddjX**U; zpFWkHP^U=`k)-z6^MJ^-w}Q%lv{xvvmw^{GL&x_sU0q67x6&o;Xv^7myR(Zdkdo?ul&a+H!j3ke zW(*CMz{qh^t2y$h>Qq5~D$wPST*|ZT(ENZtV*n0VpfUvX*6XTXRuBl5U#pOutOH79 zdmhO5*gqqYT_ksmIx?=1VSf=;!;y0;q?h~0#s@}*r96?x)Y-f;Vb$unJOM(pN5Ca8 zG82Q)Ss+`-9pFj~f{n_52-TeQEj|lu7ou zVLPZfxF(^}Qh3?ERo|%(KxmSAUGM36fn@6$ zFgnAc)0WZD%YB9hUZQVa)e%(;(a33rhQtt!yp)dRm_=zC8c<_@jwg!dRg#WojFw}| zLQ$Wvw484?4NGeejL2v>uvTtaW3+C}PC7Tgb!sl!oT7tJ6i%y z57SwBWaLv18`O5dP=ItUdU(p9a`}{@N}ol` zfVHM-wudHo)Tfqzs%UgaXhm&kP6#%N>Nr));7gR=ayciRu&KrUqts3$UtbHIN{199 z;fOJ-Vbx?3ycdRoGJ+PW4)wG-3#h1C$8iHA3bGbJMog-YfllW51R*JT zB<4;Yt~o$|{0y}m7KSE_aYj=PsZbywm<@*>SM6#}%#hFLl`(2+YKi6~8C6>X=WYyQ zMgbC6t(vMk+|lD~m71<<8qO%jE8xdX!v?|+vXutEaY&R^Kv<<_)nyFQy;iAOo1syj zg?!Kq58|OG6_kxyr#@qS#~xN2&UzW#UPx=$Ltkxw=$oK6A+2Fz^%j`58!RFuA{7W~ z{KU{W2ut>eQ=B=BS1oBlR0&$x!#FKbGvJ7XlO~y}1P`VWr`?&sTqryi$ei$Me%5>mrfs%$hQj_T=w=pUs_w5JTrc!TRlz zYJ!)4^QDu|X2AB&k#VZQU=IhRr513pGsZ1OLu*;kITHp$`061!POfZY+C!vCdzX|y z*>NgGRU$Dh03Uw}*;c}<`+aj#y60tWMW!xmpKqc1@6 zJXL~}V@NfDxI;pKlAlsbJb^iMmLOx`TLv+I%HjM}_JKvElsO1v43^ijR}%cj$>29) z#J4yr{+`A!lE)`8t!mZT#M_#d0S6POPs=eLY&C6JwY)TI>(vIpq2=;v`74+weYIH~ z0!4gMvDocRn!4Edtg*#LXAP}$>!o_@gtC{(lzsT5@T$A3wP5{8nN|kbC&?r#c&~PU z=UM!J-4_}Rx*KG+8Lr#1{~;X;S^whp+T+idD)Y)W^d2-CpZ9px0IMH(Is2qAnODY* z1_aY^vJHcL#}-`FXpMSCW?Xvsj-Hji=Ld_RML<8M(gjJOCTt&#B!>KdJrlW* zb4}N&<%P*AsGR^r-AD;x?}>x@BWJ?RuW729+evtnZ1duB^XAgVy~WLIk2mh$aeuym zJ;1NuCM6c-*Kb^C-oNYKeVd@p73)U1p;4Q49hbx60zcCH@J@62EqIQO%rd5ol3~u1 z!qC7NX+Bt7|J#bk=ep_4A4&Hn?41k(eG1>;<7?p`d{P2P(FS3(6^4(04#J-!_~*sr z_-8zUBBGeVd}CNgK$5im`Xz#h6Y-Q-K$W(`6oEU=k+$cEIqy^fbF#1Gbt)ah(CkSY z5foJul04DHGUuhdfaU0!f@KGL$0zz<9hm4FInoclh4PG^I}4$k?#hSQUj6uI_opkM z3hw1=+)qIM5;uS@Mfetf_v!^6MtLOKczku^i{<9^dl56(1}DPnzg2%(q<%Dob<)n1Y^U14K{mR6NHHHLgI)B-6b4?fRd;3ep7} z3wa8i1N5Dq(+uYxF<$W5PNBVfUP-k|DTbA;E9j5oAuu%vAckmv4B&&K(J7+IIAr@q z@Y{#soJV4Y(GsQfnPTadm;(thi3;WQ!(cGp6Kiz%Lhy4TjXO^*p-7l+6`Vt>idCXc z-Rz%BQJ`Fg&N-F}!81d4k(1MnS{X`Cu)kyQEr)#y(cO@SCCEV=Q@mG@>u4u?^ZD&N zb3T6yPaaMmn9B8ki2+Ye5ID}?AVVl)t1ZGC?ol!kk21;4IIy))3`Ptnq=@w}wDB+? z1TqwW#nKBlEG4Q44o1<1JqhL@OglX9;eLO2ef8UnUx0_)akoM?&tK)cf8@Wfi^_)Z z?L1!o@H8S?xp*cV>uDroj>`6rCVi8C!!~rWu>qb$FBxTjY+9a}IJysHBf4ovEu${K z2!Jrrtg53#SRmqiQEWp&Y)b`>8e~hcogs|(P|hb&;UuK0hu9Jky-)7K;i=6UN#a|H ztB=hJO5Cvp@Q--xILmLAyEn2C~J=rjXpuzJX&H0FpY}Yr4d0IG!c&HS5 z>CG6#%6G2vhgcSeD9ADghYf{XYA0Xz!`6NXUm7{7} zv7)Kdb{tDOObF3)ywVT=U}w{sF{NssT;D|D1)M~uayRv1~9^y*60k?dMHB1xRA^cna;+Wv|;Zc79)j= z4k@3EzM;s=w)znt0kup>3p_s&@|6h&K+;=`9qrH7E6~{(KCdk^)pN0>S0E)H8w;|;wGf=A%Ud<&m5@BioeH>;bUeCb|(7lh`1@D`VPCP_;qih9=c^d(;S zQ%Zfa5VJw^^mNpDZq4>6hV2)1l$MK)nIhnzR;?sTI-H;JD@GSKJdO=a6#GVoj}9Dv zgMUs8Phh9CQ+hJsOZ~4EI}os8X^Q7hrmNtoa6cGxdH-R}sWztABL!8Rs^yW&7T90z z9X!#`@u#3k8+_vB;^=D=$47>X1HsfAN(KP&)~Dei8CxbG~Y%N=F14V}H?t?>1wOW=QZLHgN$XONaT zZ=@p^!-rjHTA!k2z{6W}Su@!Ii+3lus!7}H_n56ZVDRP-@qRo9mVB~AGd_J67l-Fl zc6z-++BYGdCD=-}q0Z7;Ni!N{W;}cyg>I#@OX=+JEJ*z11juT=%)9hbVn+NV=9-)O3%-|o`Bj{W=9z1yY)ktDw7K<;UoI<=?{C4d znXGMc>BUWAlSL#em=t-Ni_zkVC2!39-P<2GKYHjlyNTd_$N`ng>2{qcg>aR>sthVU zVK0o4fSnzi6*5r=dnlKG*={tRsyQGK<8%S3Oa`~Yj3)&KAbY^^X>m1 zv?yFHQ%UmP{R1fzVVYXSD(`&Whb-?~rlgK!+5cI(AT_1%mKtg(QmTp^F5H#4(GO7z7oqFtns1!n9UepjWot zSLQf^quMw)sTt8-THd^T>gwoO`~Mz|xZ9l(WTY$cmJR9$;32&(b;X8{q9jB_fYut6R~S|>3cld@;Tdxesm3jIp4dBq`liNJ!e#{ zR#qKa6iwBlh=-yEvGh zOsUT>=ea7kUVw1p{^bq33KU1TSbrTN)9wt`?jg$7RlQb!;l|8bk->vqJ>k?F;UflORe*8eaF69#_ zSf%Qr2yI9u08L-62T0^lR1{3~;sr@j4InA=3*BSzBGV@V>8;AsE2 zD8^&E9|^nNtB~gMl4yr9b%tcUdFKjV=3*VN=FJuN%D0<0&*N39`*+1XuNxN_yYr zNtRN7W)fWvf6HUEVOQlradRpnVSYkL*q4+~y&2KEoQts(uN|ZuEl*x^MAs?vov+{! zVR*XuMTxU5?>8*O8-08?TZP)U!U2(OJ_*T9iQixi;^gf=U>T(|TPz|ab;)JUc0hG~ zw)4O+{5y0wL*z>2J{_NTkgAn@d&}D=1=2Zxbl5v&un@W!F>08BDy61B&nqo&s)9e= z{OnI&h3}u~jk?aPIe$2QMpt;cr#PmISbP;t>tk^Dn|c`_YKUQ zj9gIUvt&xODc*BVQ0l!n5`STsRJUy{G*a$8$PVo|>`)N+9~qAXd27Jy(mfr2Z6Fo) zq!0w3WCDkT9m?P=Y*hC5ZC0JgRz)CdV@J0#S$vskdxDI1v`L2oO>DIpgL)3`%u`g^ z;Hp-@-qG8;*ptpoJts=?P{BHYa>2D%AZSHXdIL zlx}&E`xHE+eC3XN^Oo@6YY*PVW5>~3_CT-)y(A@Xa!7n1nQ!OA``EED=6m=h{&UH5 zJfZ8pxeSCbFOGEvTq!DePzwcJjIjc_@V`(?0|XQR000O8001EX2JSWr*}4$`0OB?P z03w$kpaB(^2MGcYf4y7(a}&ps|9$_8VG)r9?8=tG0UL487#q7{ESGHv#Bi#$c4cjl zw7T7uzXYfvRdK++3zc1!@Vac z(9ZVs^mO-hf2L=&dsli+ucob%u$yFG=L7x8;Jj9~j~Rwde_DTAZ#{Y5c(A(p*OkWF zO7qVjG}fPNe(+`U&VRjldTm^<)|W_{RFpz)ny{D6J5OFbT}3V%Pwur={}aem-Llir z_~Pl8*zV&m8O35*uWHi58TqXIj%+KYJpUeWl;6{9K=|90&)_d`g7xxAGtVd zE1mgBR&hzTe@evta6Xf{>9I3p^Xhk-_x{@W_&T4~7x$^OfB$Ope{O+@RYTSGRcjRx zym{?bW99wL2anl|p=0Bt`x}q1Z$5jr@%QJ=n@`9D5W~!Vzw$na4*wSFW|=@YvN*5V z@LXHAOGdR92WWkEzxng$t`0yvt6=Ii+e**X^|Iq<^%V+{=sqeu4MZJpui!b5)dd^{KHj%WtAWY?QGg&dwRZt21 ztLkP|sc7)ETTG>8StM_~L28R?N)%=WPXOIT_^)4D0D8p+D(sy;Jv=o%mYWb$mqlSB zcYHX{e;bh8{|x;y89CD{XMm7tB|kiI8p+sGzl0nnPv%dKO-<#dvSP`$YgT_cZEEx2 zdgihW=B((ZX_#`ssEESxv1t^ZN`cNP3ezCpFf`$tG}l+!buUp6EM>VXMaV@`Gxe%n zB*{J2xoQ%ovR51+mj&YjzV*HS?arqpNTQi$e~`m(cW#GBEL*DqjYo2>n#~>!5eY@j zE|l^`y{u8%-Nb7kN5KD%k|U~S*?Lv6b)$MzKxZ;5L@EM{j7T5#A^}BIl&VUk1wx(n zXj;`4($#voOfpB`=ouh(NvjIZ0-_{Rahyoth}EiAuq9isXhz*8JqMxD)IiN7LnMO^ ze**vXh+&rG(j{V>bfg~?dKOu>p%Sp;pD@V9? zWQi{&g#hQ5u(dRAK75Watp&~0i_3Wof0%j2ER^&G$0K9jkR$vHxF@`}&^5^sR0&27 z=A|Hyf4r#* zO%6YFs_>9X!LBQ19LeW6)IzDKe6#R^br4B5$QW%@P%P})Rj0y9R!VZeSAd(&^mbe^ zF?}dzWp9d%=B8)zm}0V`>b7HI85r;r$5Jl&=qNgn6g2zZOZ)*D1^Sh}cDLi+7z&56 zW+?^1m;VwM-G_cD;dXi5n;#z@^ZrE1o3`11U2VFx@FS3 z`(WewR|FD??}Y%~xXZub@OArO#3VwRjmI|{pZoxb;KkFm2%Z46@;Bxyl?#wqi3FY4 znqcW1oteGgo^c}vo*2oB$V5u`)2!q-Hb-KvNrHBVPiG!W@f_NFL>qQKfA5In$3)?u zjx1sXqMp<)V8kPbw1gmAF_&pTNe2dkrxDRH6#ahAl@r$NwxZGw_+2D`Cx}S>g?Uip zo1Zp+`4;^ch*|ICxVD+m^PUloEgn>Js=gDx<7%f zq5w(2xImXK&ax}G;#1*p(Ib<_H#ZvB9&X+Jwe_b5{(wP4K+^xVdF$%N`a@jvNdb|B ziJGEtR1|#cpSSS+gae@+oNpUO*-BfsG7sjh)yjH-Vn4aIEOJuOf8!ApHUq-m{D1{P z7JfFL-`u>r*1Y}DFL+p#bWK?<8;WYBneB>(Nw*~sbV#C0E0hojdI6OnrXtDxNdkXT z14K1^5ivCCEbVvR3xhn&VQV0$@ko>Exc;4R1RF~5P5K#|m>8bwL>ve*ZU9N`B+3kQ z8YY<1f&=k@xPyo|fAG?gg6S1MUYt(tB$#&^Dh2`gM(P~r<5JHy#){4hG6IcK%{$+< z{_<@wwY#Ayk^u&%hO)l!6akv>p5wG#Z6Yb9hz+74bn0vtutP`4`sx{o%HoCY*G)k2 z>~@%c+UKD5nu{CMufBm-OGwWC%!#$s>`U>0i#M|z=8Wshe_qjUF~Kp-ypM&l8j+^l z-suE&@w6;<>Y3(UOBF*U`<6PAVhvE-3&7I@q5kbGCNZinC&o5@{HeA6ohYbARSPAC zUYXU`2-tS>#-kTcuQBjzSZPTr)aqpO5wFTMudg;fx%J}dY6u$ht&Uf+32xTj9-N>h zB%Un%WPxlUe+sw(4RmqRpyVV%1tqn-Mf0v@R8gt!hCn1ojwC0~4(CRaf?lBsA8Gbm z%a%|pD>me>N?up9@GL9l{K9PJykJ<^axuxnTCyL%sm7uOlDQ!qTIqMUjRqxOs}~oc zkv({=4l!@PJnNI?yufCaML}gWb(c}os$H&#J?B%Yf7v7>N}dI~)-yv^bLYD~we>sEp6e@{1%~}@3@Mzim`F`WWwavTtHy(fAy!|y>U#Kyh;s9(U zt2Q`|=0>Vl!c?6QQxrAjrcY;~r8fhBWoYu$=`6fLm^40iZ0K}W3?$bm8p7VRCARl` zS)VJ!GjLE&gaLgq(1}41x*!AAGO#WAgK#9$e>*UIu(yjAdSWBz?YWn3}}VdPF8~8_RpNAD1mSw$um?@1f-nZxZTpF74#h@W|MiY$RRqb%wqD zsVS7mSa0tYtPqUMxMb(g$x(a!oel6B@&ySB>tO0!fK-oa5Y^~pGt$*KG zdAPBD%L$CDKES8DUw4y|W>z$dv{rv@e?IsK7@-WG|Kje4fLncmZ2iXvt!EF&K2kHV zv`>uyEcd~-b?B`;#!tXLS2rL0=r`D`d~_6E!-fE*x~8J|ArIi9Ue>HMqm!tU zM2o9F#w@t($_BG+TnATgqim+32{xXuY~5XN+_{gt;jgc9OhJousEuczHdb#Ce{YNz zPuCbB;mZC~Y@cU|)k9C+cg7EK8q_u!hQ z=IaZ2P#?hE0^fnZT+w1^CF1AA*i3#XH!(7H0{%M%$fqZ?Kzsym4WG?-XT`c%mK}6I zUxGzxEG^T0gWIUvrTQFglF^Mce?`p|#rAwp500N2M$Rz|!re}t&QG458O=@P$0i`= zjE_eSs3`L140FCP}U&wT4_LGRg7jaB8<+= zOy+0CP7dcz&18GKyQ4vcpdGeh71y-BH3z69Xe94EFu5&5AN8o*rRyDUfA|AaDSow3 z#O?&FNJybTJ_gMnkV)gi6$~MhRJRaS-ezEyu+npD^%{*QL&lK7Yvnx6M9WtpMwn2w z%ABSG16s#wzaL_T6$O5#7W+2s@}or?hM>;1E!DEku_c%4%A%$h%0^wK-o%;p$~_sm zr`vHU{>b=CN=4EadA;*-RSPRXxILE@^G-}n3tJ}Te-2e;@_Dt;F|^QaCcwvuv$2*9X_b_ z9XgabaPZK9!lCZNhn2qG?#w}@x6q4b_RYZA=Wj=Vf!O)RRRjXle}yHM3^3xG;Uumc zTm|6SEC7(!PwU{?{zZX_>63ql6$uK3q|CGiUk2x^xMY9$aO;oX!Xw>l)5{B9eUl%_ zu}u*{_(=AOka!A!?)S27#ZYc2hsBVr*exHDyT#Ys4S3la4CU77C=iI`yP@M_Q*9w5 z3fTcNVqafC0(noNf3U&$8<$AtbXzJI#sxM&B*>>15{^bFh2%cUHXi8wg9nhAb^kxc z;Yma@rG;*}2mgR-!DHkL+OnrPpXu;3l4Yt*C%Wc<9lvOE$~jODT~iq00W&Tt1rPyn zVC2#K*tWZyy|>@FGbN8zH0iLF6)q-*=NwmAr1@?;dtcw~f7Pu-JC}>vpA^P!UEB3< zdsrFXyG9vwK0NJEOb>HtD??x}>924z|C$(iNtxRt6P+>R%iOP3)pl4r6=-kNZM$l? zvb{r=ez)97iMxH7yS?VxN#LYFx931us2vo&L)#dHmrE(*I#YhZwRP7qQalmpj8 z*&RtpddXyU^1K|G=UInuo!FseFx7cQV_ItDsSp3`Po|TK}rK`YF5$sIE{8%giIV?@pyxyBD`XU$c7r9oStkHW}}# zN{$heWA&<9<_F`9hToim=YD#D#s3a>OExtxyz4@hf0E?BJ!hpo6={!3_Kf!LIhjoP zJJ4;A(;;vG<0Enk(iRf=Zpe5Pyspg0rELt`1kK{-$sii-!2vL#FpPBZ3cHWo*NBfwi<>cVR*vRlS z-LiaRo zCw9Twe=V8bt;Q2cDrEsv1aQV0DDGig&Z+PrpqFMk`VcVjyAWmF_Fl9%oDiv&Zg;vI zrfh%4@3~XANQ6sJ#8knzA`IqL$-?D5%f0h9mf28fNPL41~ILakE)e3d~A3;_jW#?Nb}pn6I1*A_lLX1lwenCcxqa?U~82cmhVH$n|e$ds92Dk zL-{}sDUnD8E|LL-C@}ZJ-xjF!6WAlect@}3`SH57Dv=zOKN1gk?e;6=F zk%~$Xcj4;mI}jtL^Wu2;1sWT2hTBt86;FVp=#OQT?sWj$cv_KYh7$Cd9LpOJAv#1hO((CY8Rf{$IvIw zRg=zvzPq}7*GxuyCnOkE`Om8OY7RtHI(vUabrUW`Wd|40GaYusmK4esk;)|p4nf~} zQ>#T6mwSKZ{{Xj4Z2_PL3eN%*=Rptv0Gcb8QKVIPAgvZP9Kf~UhQ(uRagA)#$v+9Z=St7)2* zI|H=MG%beazuY3*eBv+MeO@FT*@DpNd>MZLTiWM2`|S66ud;J`i}Q`oe`wxW@iuQTLP`rrjc;$j z(Ks*OwQoTjNHZK))ph@Hiskg8|GV_@Pjib~o6lhl8a2;jyD*J)9kre>w;nA1G`GYd z8Vfhkz<=;@z(f|IawwHNVvgEoS<^9+b2GSDbv4r%HFd36L&s{C>NrS#o!pJtI^b<} zd+rLsMRFD(J3h@jPa9XiWJ2`jA8&u~xN&{8v3P+=pn3ZuQ=1@m@{#F92NiX-TEcSC zEaC2V&trprBimBE#^Pmf<#q`03oX%7ZMBl_N`DXrPC4f_w>W(|1&8YPFS)j6Ou;3_ zTR)Pd_FJQBO*hpNz1Nky@tTE!d|Y>W52IOBRDpf;-fUN* zD}Pb08k7O_CM>{m{%kr`$pG8$@e3zS$3@Bff1^|-2^u$TJY}0zqcmXZrj1V67#nD| z0|rjUaH248p?H`vT#5lHxY(j7QIL0x{{G*@;|$bP;3g3QoxrYKm{t$J`dT{BgQdFD zfJv2;a;8-xG+$uKfL*g(bIMk&>6%hFnSX_qAh-b=t1eDw_!<{}R>-o!yh3~cDDoCI z#;{sSGk8kK)MsP2Y8xnh>X_yZn8rD5yHt1MW`Q!4COjwuX2q(y_@wGgr}+k%Ohy^Q zmaZ0YT9T!1Fq@1rZVnM29W>6Vwx$|xIs@k=o0T;KypU|jmn+9L$1)w@`UpK{_s9_(-Qms z%Hav1RPYRzm?LOqlpY5lz6x#vB)dgE|G|*unKB}~BY6PPeM1TYkQ&Ms#&d5Cjt}II z=a7uwMLkFc?opbkdSF`9OM|dETYpLo1U%|bsDO1`bmjcyAK)JeTsGY8&16FTq+Gj- zi4pp{rKWUqQq}t+8}_3fM!^ZGio-S8Qb{Jh1~JNUaAi`jji?ojm_QV;7NTYwI}V7Q zS`NDt0-S22`JHBQ1Ix|0wpw(@&EuL4XE5zrnkk7X=SbunoJYaYW0(b_fPeFh;PZi4 zU}yf7W(p;1SrG44VkD7e3OQB5B8JI!2cE6kNr+$Rw!6S#Mj;Au(wT15`&uT%DTBYJ zQyLK|7^sG1-9@j^uLloC48vFbKcnD1^h-Vkus8@1I>r`~hc#W-99%Swl7n9D=?O`N zRX$o-)tz=RM{kl8D|jN~v=Z7g?}Pnyyi@F0e5P5eU-yB=ILdwuLvq2q7G)w!^Ye2FV6SJwD6S zz@}~UJW4h`{J2^FYwOXa=AE0{mzSV0YTR3HzW;;w(dJhDA=Cquk$)r;UfX%O9$9FN zWgou7H3Lb%x8Z-#0|>w8dViKXT3i}B2f3M_z7eYIs>v!WHF z$`j%x*pQ12A!Jr8&`Oe$DF!~Tq|&FRs#*y|3jTKjzNJZM=Lta?fk0oVPBOG~Pxr4g znPlj}p(pZfkZiLwfq$e4`#&cPNEOLc zttM$~yRq3=jk#l|vC-JJoiw&>+s^Gd_vzlhupjmsYp!p8qZ$=4s&_K>#w<)$4m6;> zATzI0%WjK?bJ*W6=m?VZz&TdTM%pW_#()2_ zhql-gyQ^aUn}jc4m`$YMSO$}Zh{6#<2y(dE*PU3+cDJB(2M@!IYOHOPMN_p93``XU zm4P^b7vN#6=drHIeHU`2;pOrC7w*JWP&RVjWk8*rW#^k1f)Z3C8wg5G(r?H{r6+Py z6QYnY`bY7D*O!kqKOcH?3F0x5YS>0JPh^4yJ9{XuE(5!=AC@ZNmohSlh0Eozi=2sk zqyZO>EUd?UUD;j*nOc?joc%D$bW^un9DgzhpggvH4wUo0o@Ra6t?PN85RJ-$`2j6H z5cyP1Y3~ktO%Y2cBcrm=ypNF^_6ib~_ha1U8FLp(xR^VVg_dFyy%2vj#*~#!lB`fd zcZ7sUe>qNi1QZm)McuGAmi|h>Quk#>M^jYbleCJ!6@@dNB%Ccst|?!ta>0B8n!Yj# z2;DX9*U_?BcOQkK+`LsAZp*6wofSPe)F;nY7wf}Xqu%vkv+#DatLSuf=Nj-`4LiEYC7W!acGG{dA4=5lKVc{ycxNiRWf2T8tO&u_Tqy_=Dlm;vDlDz=h1y zq9urPFqKzev1iM&=G3e+#q5^qozYLM{(M~e@+@lqf!Fw|NM^?@)>R-SlNlX)OwoAw zODlu)F8Gf!d7eQ+INE$NgE-}PqH<1LvR=-QcPx}1On<+IzzRchz>*nX6Kpr)Fax4f zqw92(JQh{lgc(&fCE_{*fyuoG@VBqBJiUh>D@O?u+lxWg3s^~Ji(8Cs$coy~I}vrw zFATJRAYC&XeYAHn3GRJ|F>+!^;TOpKL88|a<51V)9BF`uM=%_X@oWFAXXJc1d|l}i zqI(cJKZ2d{GhKD#kH;aKOBps%W2WU20`Gbx8n}U|%Qxj-3AI|QSiD#SU~sH!Ng1*} zxOazaLAL|#ktr_*f^~TcZQ_+W+6z0E(_&pSHee2xHEe|=E=7s%Zuf8V$BNjp1frY6 zaOqP8{TioP3y0I2&U1K%dc=(y9W&*NYdtIwRzu&?L%%g7xKhDfy7HKM9}ys7ec50s zbZx9i(!?q7aEMLf=rI-pbOcWgC%_uCZ5F;99*!=?OyQ56P0+))2Q!Vddyjazr-9%7 zg^kwP5?&ZW(KLykmll(0k;K;gNUpPL#XZ-U%A3OspCdH$@JneQHs1DHg@zEShf|*? zBs`r~#9#jO6It_t{Z{4M@v$PxQGsbY$2!JD7fbg?4$gbCqZ@z&)Zjfv@4bEBggYO4 zf8JgC*dOTcjcSm@PWS#8lp43n=u;lcQJ+vQxi%Pe-73!MSl?x@HU=h&TxL!BHP(NWS zC5(_l)Wz>u(P=aFIH^@o8K0Ag_5Gp?Eu)kRI<&*e~r zQF@l;wRxL@TMdLy#E;xI-%~alnO$Ra;oUl3Jy}lS+r(!b^gl**o+sOzpw{z6Q94%p zaCzr_5ds?j333yjMjKov2XNstCt}n)NKMI1`q6WlLR%z;>P&}-q+}Nx>r1&txeiHY`$9luCZkX<;*lX>_ta>v@NNj6r% z*5*m)fiqLbOA3P}yz%nP`RrY0HoHdaeLf}m8)UrzBFCAg`926gl!_nD@h#c>U!g6mitOzkC z;oQRm;KD^F)Y){Ah638sE|$Ylm%X%;HN!pe1r9|>iy!7_K0d8(L5p#~r z2`OiwU?x}*Z#mYO;%Gm&6G0Ezb9hn-Cy-|y`bgB8N^@(P@n)S_%cA3qwm$ALWhqr0X8mX-`Q++iuQ5iu-hG!GjTP9g+k9v=zA5y<#k#($zV_B1p z)TCs>qrPC8SI}GIZcJX@pK%3r$l8#`uye?A>9semJq1_GSqlqB)@T|m_pWkGQ-d1- z4Lj{{+%A?8Qu=%|%pm4Ux$Npk$s)CztYVH#LR@ct4V+?=M!AZoVN7i|nQrq0KiH!K zf$%ofcc(RrxFI^FKh#E?)OJyLZhze2n>)tNm|l}bK+GO zh^TlIZHHvrxrnKNl9Y)MC&#?eUnE}Y_y;u;U%EQiMVby>Umz}y<|+^k2GqI$7gf#9 z{cmGF#~{tV@78C;T!GoV0T==Vr>ZRaVJ|@EXYA5czp@@wA4F>@{`>rSI7HUA{1>%A7M>AsD0{_7C>~pa+<$s z6pyUMTX^|~FM0!amsKwm@E&>^^mGjnqWvY?>ayu8;h)SZN;u~w-$J3z*BV$j5qJxG zK4zImG43a-s|LQn|1W^jw{?aT1_uHXj}HR!&ng3wLY4!H_Mb@v3gBchp=J96T?^}T zvwL^hG`b~0%;BeipAn}BhLyik&+)pu4X%I@jrF^Inu>Lg50J3w>86pi1MC_oE@w;wFRB2?09n5H59ZX#SfZ?kHk(ceZyj z;{8_R;1$2M#?0|1yube>vFB~5>+#Rc*W90@U!P7Xad9dwh@WGn47X*vUfLeFO8PBG zzLsJ~rHQ^(x>~)!lWU~c8oVl&hp&3;m$u$UtXm4Q>tPb_(-R;&mz1V+dKoQPWPbk# zuXyzGQ2zx|Kk%t{v)uNfxla2NmO0*le+d6G^)uO$WT~WiF=;Dy3GM}yBw9!&_Ewk2 zb~qZ%e{T+C9_w~CfX(g4W|}%y_HZ!v?XJ36Ed_Q;xE1_a(r$c}6n~KbF_Wg;!otyL zA9>cp`Rk|K*(gvcZ{{09S5>8(OXY+8S1cW0{?dqh=Xn~l$xe~7cr;hDvhnF?Qv%9(AEI2?gw zN6fr{nh*2ZNi3Cn2-fcL;Y63pxvdl=Wuk6;q)OjJR1iqQLf1_n;2UE>f)MoP)i9w8<=s!S5o9OS-ueLs%v{~nR9&>x zRY8gq-c;~?`E)15eqkH-EZ>L)ENir%urYou^b;U+pKci z%2?^|aSH!Tj_iEbblRm<2|3mU!Z+aYJCJ*Q#B8J`8Y)d;;NZ^ z;^rKxsk}_`&YYT@KrA@vougkA40gC%NeJDGgQQ#6`)wSbb-2R0yCX%?A?aTycfcBH zsotAxirSHM;^2o#N1B1BI4g`ZFO?W+jKu&Ah~?%5+Eh@lWyH7VSTs?KtgdMj$U%KC ziM%!LqkqU#59MvXZn`s1j1hFg4uu2uRG^#48S1uW`Yk8kQXP?JY_MS?5fZMmP9=Xi zAE2s%7H{Iv7e;sPXz|O->N{e$AkeAe;S|kMo~E-L`Z{URxd!KV?(Qpw@f)8K>mjG` zh;4JlO@f(6?f%kl22XI~hO#GP)O1jnsKBul^Or7MASKUlMs{?G&fnW*K-82pt#XeD zKLZjGet@Vj_vUdWVMw~s*>Lo(vBQb5=wRb`RBLr&Q<4EOP2qPBM|4n-5#d!%LZ-h3kUyw=p;`VyPC4 ziv?Fd$V8^(GDH`Hr6a~yjhy{6Jse7A>hSq2m7l{!NrF;c(ITWWznPlH76CxEirK~qF~@@82m#*|bTbc}yDrA3y^s=$BKy(=$lH18X@5QrD_+1{$MQ*zprBQJ5z&h9ZNk!eNZmHO)xhLC* zT)xi5)z&jrQ{pUJg16zj!ksWlKYae@c?;2Wqa_El5}8{yhgXJn7f`z19^kI3#WWw~ z8FgPaU5jl;IFY6#_d^xj>M)*hT8Y?p3M&XIZS#k=#a#(lIMo{7b9E9OC3bb`nqpMI zcSVWmG+@M9{9qFO2ezz(`6AKNSu65rzvTfnpTYL7kkIR1T40vitnX6nLquK20UpUk zsr)FjnWz=RBK{KNAHdjl+984OO-kQeGoKDa{ouAKyi%^GG&=s(LHZH_1pDu|m(z;2 zc47ZCPRV67t_(wrJTB-peC^n*A!JbM=U0+W~*he3YjpH3ap4t zOR(^Ac+aR_Q$pqiT*KLwOMX^KZl7p>K=?$E>-Xt#5pCPz*nndhJc?KRF_bttkG(I& z0PQsE1ZN6zs-5bTO*0?4*wxF@Z~dC{H+ZHuWx@?3r=&jx@_k-Kz_TbY41n@aHfn

(T5Nsa2`y#Q~Ix|#76~jx&e)q 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%0Alhwno~AO!*&Kg&#V{fY+GqT+l2m--st>s)=V<<- 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 z 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

?dBt8xyX@Mi#{9 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 KZm9Rs2KYZ#v -

+

English | 中文

@@ -79,7 +79,7 @@

Linux / macOS

Windows (PowerShell)

powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://boot.ide.pub/install.ps1'))"
-
Fallback entries: GitHub Pages (this page) / GitHub Releases / China mirrors — the installer retries sources in order automatically. The CLI UI is Chinese by default; language can be switched to English (agentboot lang en).
+
The installer uses project-controlled Worker / GitHub Pages / GitHub Release origins and verifies each archive against its same-origin SHA-256.

🚀 Three steps

    @@ -93,17 +93,17 @@

    ✨ Features

    📦 Choose what to install (no bundle bloat)

    14 mainstream agents to pick from: Claude Code, Codex, Qwen Code, OpenCode, CodeBuddy, MiMo, Cline, Pi, CoCo…

    🛟 Built-in fallback agent (ab)

    A zero-third-party-dependency Python core with Agnes, an offline Linux knowledge base, and session persistence.

    🧠 Model provider manager

    Agnes out of the box; named custom providers; Ollama / LM Studio local models; failover order.

    -
    🇨🇳 China network adaptive

    Auto-detects and switches to npmmirror / Node mirrors / Tsinghua PyPI; four-source download retry; one-click proxy.

    +
    🇨🇳 China network adaptive

    npm / Node / PyPI mirrors, Worker/Pages/Release fallback, and one-click proxy configuration.

    📴 Verified offline & custom builds

    Release packs pass real install/run/uninstall smoke tests; menu [7] builds selected Agents on their target platform.

    🧹 Ownership-aware uninstall

    Menu [9] or the uninstall command removes AgentBoot-managed programs in batches while preserving config, credentials, and sessions by default.

    ⚡ Measurable performance

    TLS reuse, pre-indexed KB, context trimming, and stream protection; /bench measures the current network and provider.

    -
+

🤖 Supported agents (14)

- + diff --git a/pages/index.html b/pages/index.html index 67a8960..bcf0cd0 100644 --- a/pages/index.html +++ b/pages/index.html @@ -60,7 +60,7 @@ -
+

AgentBoot

@@ -79,7 +79,7 @@

Linux / macOS

Windows(PowerShell)

powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://boot.ide.pub/install.ps1'))"
-
备用入口:GitHub Pages(本页)/ GitHub Releases / 国内加速镜像 —— 安装脚本内自动按序多源重试。
+
安装器只使用项目控制的 Worker / GitHub Pages / GitHub Release 三源,并对包与同源 SHA-256 一起校验。

🚀 三步上手

    @@ -93,17 +93,17 @@

    ✨ 特性

    📦 菜单自选安装(不是全家桶)

    14 个主流 Agent 按需勾选:Claude Code、Codex、Qwen Code、OpenCode、CodeBuddy、MiMo、Cline、Pi、CoCo…

    🛟 内置保底 Agent(ab)

    其他都装不上时它一定能用:零第三方依赖 Python 核心、Agnes 免费模型、离线 Linux 知识库、会话持久化。

    🧠 模型提供商管理器

    Agnes 零配置开箱;自定义提供商命名管理;Ollama / LM Studio 本地模型;故障切换顺序。

    -
    🇨🇳 中国网络自适应

    自动探测并切换 npmmirror / Node 镜像 / 清华 PyPI;四源下载容错;代理一键配置。

    +
    🇨🇳 中国网络自适应

    自动切换 npm / Node / PyPI 镜像;Worker / Pages / Release 三源容错;代理一键配置。

    📴 已验证离线 & 按需构建

    Release 精简包通过真实安装、启动与卸载冒烟;菜单 [7] 可在目标平台自选 Agent 构建。

    🧹 可追溯安全卸载

    菜单 [9] 或 uninstall 命令批量卸载;只清理由 AgentBoot 管理的程序,默认保留配置、认证与会话。

    ⚡ 可测性能

    TLS 连接复用、知识库预建索引、上下文自动瘦身与流式中断保护;/bench 按当前网络与模型现场测量。

    -
+

🤖 支持的 Agent(14 个)

#AgentCommandVendorOffline
1CoCo AgentcocoBitCookLinux/macOS
2OpenCodeopencodeopencode.ai
2OpenCodeopencodeopencode.aionline only
3Hermes AgenthermesHermes✓ (needs Git)
4Cline CLIclineCline
5CodeBuddy CLIcodebuddyTencent
- + @@ -139,7 +139,7 @@

📚 文档

diff --git a/pages/install.ps1 b/pages/install.ps1 index 37b220a..6509068 100644 --- a/pages/install.ps1 +++ b/pages/install.ps1 @@ -67,12 +67,53 @@ function Install-AppAtomic([string]$source, [string]$destination) { if (Test-Path $oldApp) { Move-Item $oldApp $destination } throw } - if (Test-Path $oldApp) { Remove-Item $oldApp -Recurse -Force } + $script:PendingOldApp = if (Test-Path $oldApp) { $oldApp } else { $null } + $script:PendingApp = $destination } finally { if (Test-Path $newApp) { Remove-Item $newApp -Recurse -Force -ErrorAction SilentlyContinue } } } +function Restore-AppAtomic { + if ($script:PendingApp -and (Test-Path $script:PendingApp)) { + Remove-Item $script:PendingApp -Recurse -Force -ErrorAction SilentlyContinue + } + if ($script:PendingOldApp -and (Test-Path $script:PendingOldApp)) { + Move-Item $script:PendingOldApp $script:PendingApp + } + $script:PendingOldApp = $null; $script:PendingApp = $null +} +function Complete-AppAtomic { + if ($script:PendingOldApp -and (Test-Path $script:PendingOldApp)) { Remove-Item $script:PendingOldApp -Recurse -Force } + $script:PendingOldApp = $null; $script:PendingApp = $null +} +$script:PendingOldApp = $null; $script:PendingApp = $null +trap { + Restore-AppAtomic + if ($tmp -and (Test-Path $tmp)) { Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue } + Write-Error $_ + exit 1 +} + +function Assert-ManagedLauncher([string]$path) { + if (-not (Test-Path -LiteralPath $path)) { return } + $item = Get-Item -LiteralPath $path -Force + if (($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { + throw "拒绝覆盖重解析点命令:$path" + } + if (-not (Select-String -LiteralPath $path -Pattern '^rem AgentBoot ' -Quiet)) { + throw "拒绝覆盖不属于 AgentBoot 的命令:$path" + } +} + +function Set-LauncherAtomic([string]$path, [string]$content) { + $tmp = "$path.new.$([guid]::NewGuid().ToString('N').Substring(0,8))" + try { + $content -replace '\r?\n', "`r`n" | Set-Content -LiteralPath $tmp -Encoding ASCII + Move-Item -LiteralPath $tmp -Destination $path -Force + } finally { Remove-Item -LiteralPath $tmp -Force -ErrorAction SilentlyContinue } +} + function Expand-Pkg([string]$pkg, [string]$dest) { # 优先系统自带 tar(Win10+ 可解 zip),其次 .NET,最后 Shell COM —— 免装解压软件 $tar = Join-Path $env:SystemRoot 'System32\tar.exe' @@ -101,21 +142,17 @@ Write-Step "AgentBoot 在线安装 $Tag" $launchers = @((Join-Path $BinDir 'agentboot.cmd'), (Join-Path $BinDir 'ab.cmd')) foreach ($launcher in $launchers) { - if ((Test-Path $launcher) -and -not (Select-String -Path $launcher -Pattern 'AgentBoot' -Quiet)) { - throw "拒绝覆盖不属于 AgentBoot 的命令:$launcher" - } + Assert-ManagedLauncher $launcher } -# ---------- 1. 下载(多源容错:Cloudflare → GitHub → 国内加速镜像) ---------- +# ---------- 1. 下载(项目控制的三源:Worker → Pages → GitHub Release) ---------- $tmp = Join-Path $env:TEMP ("agentboot-" + [guid]::NewGuid().ToString('N').Substring(0,8)) New-Item -ItemType Directory -Path $tmp, (Join-Path $tmp 'src') -Force | Out-Null $pkg = Join-Path $tmp $ZipName $sources = @( "$BootBase/rel/$ZipName", "https://bit-cook.github.io/AgentBoot/$ZipName", - "$GH/$ZipName", - "https://ghfast.top/$GH/$ZipName", - "https://gh-proxy.com/$GH/$ZipName" + "$GH/$ZipName" ) $dl = $false foreach ($u in $sources) { @@ -123,7 +160,7 @@ foreach ($u in $sources) { $ok = Get-Url $u $pkg $sumFile = "$pkg.sha256" $sumOk = Get-Url "$u.sha256" $sumFile - if ($ok -and $sumOk -and (Test-Path $pkg) -and ((Get-Item $pkg).Length -gt 10KB)) { + if ($ok -and $sumOk -and (Test-Path $pkg) -and ((Get-Item $pkg).Length -gt 10KB) -and ((Get-Item $pkg).Length -le 20MB)) { $expected = ((Get-Content $sumFile -Raw).Trim() -split '\s+')[0].ToLowerInvariant() if ($expected -match '^[0-9a-f]{64}$' -and (Get-Sha256 $pkg) -eq $expected) { Write-Ok 'SHA-256 校验通过' @@ -142,10 +179,6 @@ if (-not (Expand-Pkg $pkg (Join-Path $tmp 'src'))) { Write-Err '解压失败'; e $srcDir = Get-ChildItem (Join-Path $tmp 'src') | Where-Object { $_.PSIsContainer } | Select-Object -First 1 if ($srcDir) { $srcDir = $srcDir.FullName } else { $srcDir = Join-Path $tmp 'src' } -Write-Step "安装程序到 $AppDir" -New-Item -ItemType Directory -Path $LocalRoot -Force | Out-Null -Install-AppAtomic $srcDir $AppDir - # ---------- 3. Python:优先内置便携版(免管理员、够用最快) ---------- Write-Step '准备 Python 运行时(内置 Agent ab 需要)' $pyExe = $null @@ -189,24 +222,38 @@ if (-not $pyExe) { $pyExe = (Get-Command python -ErrorAction SilentlyContinue).Source } } else { Write-Ok "检测到系统 Python:$pyExe" } +if (-not $pyExe) { throw '未能准备 Python3,保留现有版本并退出' } +try { $null = & $pyExe -c "import sys; assert sys.version_info[0] == 3" } +catch { throw 'Python3 执行验证失败,保留现有版本并退出' } + +Write-Step "安装程序到 $AppDir" +New-Item -ItemType Directory -Path $LocalRoot -Force | Out-Null +Install-AppAtomic $srcDir $AppDir # ---------- 4. 命令入口(agentboot / ab) ---------- Write-Step '创建命令:agentboot(控制台) / ab(内置 Agent)' New-Item -ItemType Directory -Path $BinDir -Force | Out-Null -$pyRef = if ($pyExe) { $pyExe } else { 'python' } -$abRootRef = $AbRoot - -@" +$pyCommand = if ($pyExe -and ([IO.Path]::GetFileName($pyExe) -like 'py*')) { 'py' } else { 'python' } +$agentbootLauncher = @" @echo off rem AgentBoot 控制台 -"$pyRef" "$AppDir\core\menu.py" %* -"@ -replace '\r?\n', "`r`n" | Set-Content -Path (Join-Path $BinDir 'agentboot.cmd') -Encoding ASCII +set "AB_INSTALL=%~dp0.." +set "PYTHON=$pyCommand" +if exist "%AB_INSTALL%\runtime\python\python.exe" set "PYTHON=%AB_INSTALL%\runtime\python\python.exe" +"%PYTHON%" "%AB_INSTALL%\app\core\menu.py" %* +"@ -@" +$abLauncher = @" @echo off rem AgentBoot 内置最小 Agent -"$pyRef" "$AppDir\core\agent.py" %* -"@ -replace '\r?\n', "`r`n" | Set-Content -Path (Join-Path $BinDir 'ab.cmd') -Encoding ASCII +set "AB_INSTALL=%~dp0.." +set "PYTHON=$pyCommand" +if exist "%AB_INSTALL%\runtime\python\python.exe" set "PYTHON=%AB_INSTALL%\runtime\python\python.exe" +"%PYTHON%" "%AB_INSTALL%\app\core\agent.py" %* +"@ +Set-LauncherAtomic (Join-Path $BinDir 'agentboot.cmd') $agentbootLauncher +Set-LauncherAtomic (Join-Path $BinDir 'ab.cmd') $abLauncher +Complete-AppAtomic Write-Ok "已写入 $BinDir" # ---------- 5. PATH 注册(用户级,幂等) ---------- @@ -227,6 +274,7 @@ Write-Step '环境体检' if ($pyExe) { try { & $pyExe (Join-Path $AppDir 'core\agent.py') doctor } catch { Write-Err '体检脚本执行失败(不影响安装)' } } +if (Test-Path $tmp) { Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue } # ---------- 7. 完成 ---------- Write-Host '' diff --git a/pages/install.sh b/pages/install.sh index 5f9125e..5727b0f 100755 --- a/pages/install.sh +++ b/pages/install.sh @@ -61,25 +61,41 @@ step "AgentBoot 在线安装 ${TAG} · $(uname -s) $(uname -m)" # 在替换 app 前先保护用户已有的同名命令,避免应用已升级但 launcher 更新失败。 for launcher in "${BIN_DIR}/agentboot" "${BIN_DIR}/ab"; do - if [ -e "$launcher" ] && ! grep -q "AgentBoot" "$launcher" 2>/dev/null; then + if [ -L "$launcher" ]; then + err "拒绝覆盖符号链接命令:$launcher" + exit 1 + fi + if [ -e "$launcher" ] && ! grep -q '^# AgentBoot ' "$launcher" 2>/dev/null; then err "拒绝覆盖不属于 AgentBoot 的命令:$launcher" exit 1 fi done -# ---------- 1. 下载在线包(多源容错:Cloudflare → GitHub → 国内加速镜像) ---------- +# ---------- 1. 下载在线包(项目控制的三源:Worker → Pages → GitHub Release) ---------- TMP="$(mktemp -d 2>/dev/null || echo /tmp/agentboot-install-$$)" mkdir -p "$TMP" STAGE="${TMP}/src" mkdir -p "$STAGE" +OLD_APP="" +SWAP_COMMITTED=0 +cleanup_install() { + code=$? + trap - EXIT HUP INT TERM + rm -f "${BIN_DIR}/.agentboot.new.$$" "${BIN_DIR}/.ab.new.$$" + if [ "$code" -ne 0 ] && [ "$SWAP_COMMITTED" -eq 0 ] && [ -n "$OLD_APP" ] && [ -d "$OLD_APP" ]; then + rm -rf "$APP_DIR" + mv "$OLD_APP" "$APP_DIR" || true + fi + rm -rf "$TMP" + exit "$code" +} +trap cleanup_install EXIT HUP INT TERM dl_ok="" for url in \ "${BOOT_BASE}/rel/${TARBALL}" \ "https://bit-cook.github.io/AgentBoot/${TARBALL}" \ - "${GH}/${TARBALL}" \ - "https://ghfast.top/${GH}/${TARBALL}" \ - "https://gh-proxy.com/${GH}/${TARBALL}" + "${GH}/${TARBALL}" do say "下载:${url}" if fetch "$url" "${TMP}/${TARBALL}" && fetch "${url}.sha256" "${TMP}/${TARBALL}.sha256"; then @@ -96,9 +112,16 @@ if [ -z "$dl_ok" ]; then err "所有下载源均失败。请检查网络,或使用离线安装包(见项目文档《安装指南.md》)。" exit 1 fi +[ "$(wc -c < "${TMP}/${TARBALL}")" -le 20971520 ] || { err "在线包异常过大"; exit 1; } # ---------- 2. 解压(系统自带 tar,无需安装解压软件) ---------- step "解压安装包" +members="${TMP}/members.txt" +tar -tzf "${TMP}/${TARBALL}" > "$members" || { err "无法读取安装包目录"; exit 1; } +[ "$(wc -l < "$members")" -le 20000 ] || { err "安装包文件数量异常"; exit 1; } +if awk 'BEGIN{bad=0} /^\//{bad=1} /(^|\/)\.\.($|\/)/{bad=1} END{exit bad?0:1}' "$members"; then + err "安装包包含越界路径"; exit 1 +fi if ! tar -xzf "${TMP}/${TARBALL}" -C "$STAGE"; then err "解压失败:下载文件可能不完整。" exit 1 @@ -108,6 +131,24 @@ if [ "$(ls -A "$STAGE" | wc -l)" = "1" ] && [ -d "$STAGE/$(ls -A "$STAGE")" ]; t SRC_DIR="$STAGE/$(ls -A "$STAGE")" fi +# 在提交应用目录前确认可执行的 Python 3;失败时现有安装保持不变。 +PY="$(command -v python3 || true)" +if [ -z "$PY" ] && command -v python >/dev/null 2>&1 && python -c 'import sys; raise SystemExit(sys.version_info[0] != 3)' >/dev/null 2>&1; then + PY="$(command -v python)" +fi +if [ -z "$PY" ]; then + step "未检测到 Python3,尝试自动安装" + if command -v apt-get >/dev/null 2>&1; then (sudo apt-get update -y && sudo apt-get install -y python3) >/dev/null 2>&1 || true + elif command -v dnf >/dev/null 2>&1; then (sudo dnf install -y python3) >/dev/null 2>&1 || true + elif command -v yum >/dev/null 2>&1; then (sudo yum install -y python3) >/dev/null 2>&1 || true + elif command -v pacman >/dev/null 2>&1; then (sudo pacman -Sy --noconfirm python) >/dev/null 2>&1 || true + elif command -v apk >/dev/null 2>&1; then (apk add --no-cache python3) >/dev/null 2>&1 || true + elif command -v brew >/dev/null 2>&1; then (brew install python3) >/dev/null 2>&1 || true + fi + PY="$(command -v python3 || true)" +fi +[ -n "$PY" ] || { err "未能准备 Python3,保留现有版本并退出。"; exit 1; } + step "安装程序到 ${APP_DIR}" mkdir -p "$AB_ROOT" NEW_APP="${AB_ROOT}/app.new.$$" @@ -122,7 +163,7 @@ if [ ! -f "$NEW_APP/core/menu.py" ] || [ ! -f "$NEW_APP/core/agent.py" ]; then fi if [ -d "$APP_DIR" ]; then mv "$APP_DIR" "$OLD_APP"; fi if mv "$NEW_APP" "$APP_DIR"; then - rm -rf "$OLD_APP" + : else err "切换新版本失败,正在恢复旧版本" [ -d "$OLD_APP" ] && mv "$OLD_APP" "$APP_DIR" @@ -134,19 +175,26 @@ chmod +x "${APP_DIR}/install.sh" 2>/dev/null || true # ---------- 3. 生成命令行入口 ---------- step "创建命令:agentboot(控制台) / ab(内置 Agent)" mkdir -p "$BIN_DIR" -cat > "${BIN_DIR}/agentboot" < "$agentboot_tmp" < "${BIN_DIR}/ab" < "$ab_tmp" </dev/null 2>&1; then - (sudo apt-get update -y && sudo apt-get install -y python3) >/dev/null 2>&1 || true - elif command -v dnf >/dev/null 2>&1; then - (sudo dnf install -y python3) >/dev/null 2>&1 || true - elif command -v yum >/dev/null 2>&1; then - (sudo yum install -y python3) >/dev/null 2>&1 || true - elif command -v pacman >/dev/null 2>&1; then - (sudo pacman -Sy --noconfirm python) >/dev/null 2>&1 || true - elif command -v apk >/dev/null 2>&1; then - (apk add --no-cache python3) >/dev/null 2>&1 || true - elif command -v brew >/dev/null 2>&1; then - (brew install python3) >/dev/null 2>&1 || true - fi - PY="$(command -v python3 || command -v python || true)" - if [ -z "$PY" ]; then - err "未能自动安装 Python3。请手动安装后运行:agentboot" - fi -fi - # ---------- 6. 体检 ---------- -if [ -n "$PY" ]; then - step "环境体检" - "$PY" "${APP_DIR}/core/agent.py" doctor >/dev/null 2>&1 || true - "$PY" "${APP_DIR}/core/agent.py" doctor 2>/dev/null || true -fi +step "环境体检" +"$PY" "${APP_DIR}/core/agent.py" doctor >/dev/null 2>&1 || true +"$PY" "${APP_DIR}/core/agent.py" doctor 2>/dev/null || true # ---------- 7. 完成 ---------- say "" diff --git a/scripts/build-offline.ps1 b/scripts/build-offline.ps1 index 9aab5a3..3bafd1c 100644 --- a/scripts/build-offline.ps1 +++ b/scripts/build-offline.ps1 @@ -307,7 +307,10 @@ tmp="$(mktemp -d 2>/dev/null || echo /tmp/agentboot-sfx-$$)" mkdir -p "$tmp" echo "==> AgentBoot 离线自解压安装:解压中,请稍候 …" tail -n +"$SKIP" "$0" | { base64 -d 2>/dev/null || base64 -D 2>/dev/null || openssl base64 -d -A; } | tar -xzf - -C "$tmp" -exec sh "$tmp/AgentBoot/install-offline.sh" "$@" +code=0 +sh "$tmp/AgentBoot/install-offline.sh" "$@" || code=$? +rm -rf "$tmp" +exit "$code" __AGENTBOOT_PAYLOAD_BELOW__ '@ [IO.File]::WriteAllText($sfx, ($header -replace "`r`n", "`n"), (New-Object System.Text.UTF8Encoding($false))) diff --git a/scripts/build-offline.sh b/scripts/build-offline.sh index a5af453..b5d7a8c 100755 --- a/scripts/build-offline.sh +++ b/scripts/build-offline.sh @@ -139,10 +139,10 @@ PYEOF fi step "Agent 载荷:$WANT" for AID in $WANT; do - PKG="$(python3 - "$AID" <<'PYEOF' + PKG="$(python3 - "$ROOT/agents/registry.json" "$AID" <<'PYEOF' import json,sys -rid=sys.argv[1] -for a in json.load(open('agents/registry.json'))['agents']: +rid=sys.argv[2] +for a in json.load(open(sys.argv[1]))['agents']: if a['id']==rid: print(a.get('npm') or '') break @@ -199,6 +199,8 @@ mkdir -p "$STAGE/payloads/python" || fetch_file "https://www.python.org/ftp/python/3.12.10/python-3.12.10-embed-amd64.zip" \ "$STAGE/payloads/python/win-embed.zip" \ || { err "Windows Python 便携包下载失败"; exit 1; } +[ "$(sha256_file "$STAGE/payloads/python/win-embed.zip")" = "4acbed6dd1c744b0376e3b1cf57ce906f9dc9e95e68824584c8099a63025a3c3" ] \ + || { rm -f "$STAGE/payloads/python/win-embed.zip"; err "Windows Python SHA-256 校验失败"; exit 1; } ok 'win-embed.zip 就绪' # CoCo(script 类)离线载荷:发行包 + sha256 + Agnes 密钥 + Node 22.23 运行时 @@ -293,7 +295,10 @@ tmp="$(mktemp -d 2>/dev/null || echo /tmp/agentboot-sfx-$$)" mkdir -p "$tmp" echo "==> AgentBoot 离线自解压安装:解压中,请稍候 …" tail -n +"$SKIP" "$0" | { base64 -d 2>/dev/null || base64 -D 2>/dev/null || openssl base64 -d -A; } | tar -xzf - -C "$tmp" -exec sh "$tmp/AgentBoot/install-offline.sh" "$@" +code=0 +sh "$tmp/AgentBoot/install-offline.sh" "$@" || code=$? +rm -rf "$tmp" +exit "$code" __AGENTBOOT_PAYLOAD_BELOW__ HF python3 - "$GZ" "$SFX" <<'PYEOF' diff --git a/scripts/install-offline.ps1 b/scripts/install-offline.ps1 index c242e18..96a9ada 100644 --- a/scripts/install-offline.ps1 +++ b/scripts/install-offline.ps1 @@ -22,6 +22,13 @@ function Write-Ok($m) { Write-Host "OK $m" -ForegroundColor Green } function Write-Err($m) { Write-Host "X $m" -ForegroundColor Red } function Write-Step($m) { Write-Host "`n==> $m" -ForegroundColor Cyan } +function Get-Sha256([string]$path) { + $sha = [Security.Cryptography.SHA256]::Create() + $stream = [IO.File]::OpenRead($path) + try { return ([BitConverter]::ToString($sha.ComputeHash($stream))).Replace('-', '').ToLowerInvariant() } + finally { $stream.Dispose(); $sha.Dispose() } +} + function Expand-Pkg([string]$pkg, [string]$dest) { $tar = Join-Path $env:SystemRoot 'System32\tar.exe' if (Test-Path $tar) { @@ -63,6 +70,22 @@ function Set-LauncherAtomic([string]$path, [string]$content) { } finally { Remove-Item -LiteralPath $tmp -Force -ErrorAction SilentlyContinue } } +function Restore-AppAtomic { + if ($script:PendingApp -and (Test-Path $script:PendingApp)) { + Remove-Item $script:PendingApp -Recurse -Force -ErrorAction SilentlyContinue + } + if ($script:PendingOldApp -and (Test-Path $script:PendingOldApp)) { + Move-Item $script:PendingOldApp $script:PendingApp + } + $script:PendingOldApp = $null; $script:PendingApp = $null +} +function Complete-AppAtomic { + if ($script:PendingOldApp -and (Test-Path $script:PendingOldApp)) { Remove-Item $script:PendingOldApp -Recurse -Force } + $script:PendingOldApp = $null; $script:PendingApp = $null +} +$script:PendingOldApp = $null; $script:PendingApp = $null +trap { Restore-AppAtomic; Write-Error $_; exit 1 } + $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path $LocalRoot = Join-Path $env:LOCALAPPDATA 'AgentBoot' $AppDir = Join-Path $LocalRoot 'app' @@ -90,7 +113,7 @@ foreach ($line in Get-Content $sums) { $parts = $line -split '\s+', 2 $file = Join-Path $ScriptDir $parts[1].Replace('/', [IO.Path]::DirectorySeparatorChar) if (-not (Test-Path $file)) { throw "载荷缺失:$($parts[1])" } - if ((Get-FileHash $file -Algorithm SHA256).Hash.ToLowerInvariant() -ne $parts[0].ToLowerInvariant()) { + if ((Get-Sha256 $file) -ne $parts[0].ToLowerInvariant()) { throw "载荷 SHA-256 校验失败:$($parts[1])" } } @@ -114,7 +137,11 @@ if (-not (Test-Path (Join-Path $newApp 'core\menu.py')) -or -not (Test-Path (Joi Remove-Item $newApp -Recurse -Force -ErrorAction SilentlyContinue; throw '离线包结构无效' } if (Test-Path $AppDir) { Move-Item $AppDir $oldApp } -try { Move-Item $newApp $AppDir; if (Test-Path $oldApp) { Remove-Item $oldApp -Recurse -Force } } +try { + Move-Item $newApp $AppDir + $script:PendingOldApp = if (Test-Path $oldApp) { $oldApp } else { $null } + $script:PendingApp = $AppDir +} catch { if (Test-Path $oldApp) { Move-Item $oldApp $AppDir }; throw } # ---------- 3. Python:系统优先,否则用离线包内置便携版 ---------- @@ -169,6 +196,7 @@ if exist "%AB_INSTALL%\runtime\python\python.exe" set "PYTHON=%AB_INSTALL%\runti "@ Set-LauncherAtomic (Join-Path $BinDir 'agentboot.cmd') $agentbootLauncher Set-LauncherAtomic (Join-Path $BinDir 'ab.cmd') $abLauncher +Complete-AppAtomic Write-Ok "已写入 $BinDir" $userPath = [Environment]::GetEnvironmentVariable('Path', 'User') diff --git a/scripts/install-offline.sh b/scripts/install-offline.sh index d271a57..95f5300 100755 --- a/scripts/install-offline.sh +++ b/scripts/install-offline.sh @@ -23,6 +23,20 @@ step() { printf '\n==> %s\n' "$*"; } step "AgentBoot 离线安装(无需联网)" +OLD_APP="" +SWAP_COMMITTED=0 +rollback_install() { + code=$? + trap - EXIT HUP INT TERM + rm -f "${BIN_DIR}/.agentboot.new.$$" "${BIN_DIR}/.ab.new.$$" + if [ "$code" -ne 0 ] && [ "$SWAP_COMMITTED" -eq 0 ] && [ -n "$OLD_APP" ] && [ -d "$OLD_APP" ]; then + rm -rf "$APP_DIR" + mv "$OLD_APP" "$APP_DIR" || true + fi + exit "$code" +} +trap rollback_install EXIT HUP INT TERM + for launcher in "${BIN_DIR}/agentboot" "${BIN_DIR}/ab"; do if [ -L "$launcher" ]; then err "拒绝覆盖符号链接命令:$launcher"; exit 1 @@ -52,6 +66,12 @@ while read -r expected relative; do done < "$SUMS" ok "离线载荷 SHA-256 校验通过:${SCRIPT_DIR}/payloads" +PY="$(command -v python3 || true)" +if [ -z "$PY" ] && command -v python >/dev/null 2>&1 && python -c 'import sys; raise SystemExit(sys.version_info[0] != 3)' >/dev/null 2>&1; then + PY="$(command -v python)" +fi +[ -n "$PY" ] || { err "本机没有可用 Python3,保留现有版本并退出。"; exit 1; } + # ---------- 2. 安装程序本体 ---------- step "安装程序到 ${APP_DIR}" mkdir -p "$AB_ROOT" @@ -70,17 +90,11 @@ if [ ! -f "$NEW_APP/core/menu.py" ] || [ ! -f "$NEW_APP/core/agent.py" ]; then err "离线包结构无效,保留现有版本"; rm -rf "$NEW_APP"; exit 1 fi [ -d "$APP_DIR" ] && mv "$APP_DIR" "$OLD_APP" -if mv "$NEW_APP" "$APP_DIR"; then rm -rf "$OLD_APP" +if mv "$NEW_APP" "$APP_DIR"; then : else [ -d "$OLD_APP" ] && mv "$OLD_APP" "$APP_DIR"; err "升级失败,已恢复旧版本"; exit 1 fi # ---------- 3. Python 检查(ab 需要;绝大多数系统自带) ---------- -PY="$(command -v python3 || command -v python || true)" -if [ -z "$PY" ]; then - err "本机没有 python3。请用系统包管理器安装(apt/dnf/apk/brew install python3),然后重跑本脚本。" - say "(Linux 服务器一般自带 python3;macOS 终端运行会自动触发安装。)" - exit 1 -fi ok "Python:$PY" # ---------- 4. 命令入口 ---------- @@ -104,6 +118,8 @@ EOF chmod +x "$agentboot_tmp" "$ab_tmp" mv -f "$agentboot_tmp" "${BIN_DIR}/agentboot" mv -f "$ab_tmp" "${BIN_DIR}/ab" +SWAP_COMMITTED=1 +rm -rf "$OLD_APP" # PATH(幂等写入) case ":$PATH:" in diff --git a/scripts/install.ps1 b/scripts/install.ps1 index 237ea50..6509068 100644 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -67,12 +67,34 @@ function Install-AppAtomic([string]$source, [string]$destination) { if (Test-Path $oldApp) { Move-Item $oldApp $destination } throw } - if (Test-Path $oldApp) { Remove-Item $oldApp -Recurse -Force } + $script:PendingOldApp = if (Test-Path $oldApp) { $oldApp } else { $null } + $script:PendingApp = $destination } finally { if (Test-Path $newApp) { Remove-Item $newApp -Recurse -Force -ErrorAction SilentlyContinue } } } +function Restore-AppAtomic { + if ($script:PendingApp -and (Test-Path $script:PendingApp)) { + Remove-Item $script:PendingApp -Recurse -Force -ErrorAction SilentlyContinue + } + if ($script:PendingOldApp -and (Test-Path $script:PendingOldApp)) { + Move-Item $script:PendingOldApp $script:PendingApp + } + $script:PendingOldApp = $null; $script:PendingApp = $null +} +function Complete-AppAtomic { + if ($script:PendingOldApp -and (Test-Path $script:PendingOldApp)) { Remove-Item $script:PendingOldApp -Recurse -Force } + $script:PendingOldApp = $null; $script:PendingApp = $null +} +$script:PendingOldApp = $null; $script:PendingApp = $null +trap { + Restore-AppAtomic + if ($tmp -and (Test-Path $tmp)) { Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue } + Write-Error $_ + exit 1 +} + function Assert-ManagedLauncher([string]$path) { if (-not (Test-Path -LiteralPath $path)) { return } $item = Get-Item -LiteralPath $path -Force @@ -123,16 +145,14 @@ foreach ($launcher in $launchers) { Assert-ManagedLauncher $launcher } -# ---------- 1. 下载(多源容错:Cloudflare → GitHub → 国内加速镜像) ---------- +# ---------- 1. 下载(项目控制的三源:Worker → Pages → GitHub Release) ---------- $tmp = Join-Path $env:TEMP ("agentboot-" + [guid]::NewGuid().ToString('N').Substring(0,8)) New-Item -ItemType Directory -Path $tmp, (Join-Path $tmp 'src') -Force | Out-Null $pkg = Join-Path $tmp $ZipName $sources = @( "$BootBase/rel/$ZipName", "https://bit-cook.github.io/AgentBoot/$ZipName", - "$GH/$ZipName", - "https://ghfast.top/$GH/$ZipName", - "https://gh-proxy.com/$GH/$ZipName" + "$GH/$ZipName" ) $dl = $false foreach ($u in $sources) { @@ -140,7 +160,7 @@ foreach ($u in $sources) { $ok = Get-Url $u $pkg $sumFile = "$pkg.sha256" $sumOk = Get-Url "$u.sha256" $sumFile - if ($ok -and $sumOk -and (Test-Path $pkg) -and ((Get-Item $pkg).Length -gt 10KB)) { + if ($ok -and $sumOk -and (Test-Path $pkg) -and ((Get-Item $pkg).Length -gt 10KB) -and ((Get-Item $pkg).Length -le 20MB)) { $expected = ((Get-Content $sumFile -Raw).Trim() -split '\s+')[0].ToLowerInvariant() if ($expected -match '^[0-9a-f]{64}$' -and (Get-Sha256 $pkg) -eq $expected) { Write-Ok 'SHA-256 校验通过' @@ -159,10 +179,6 @@ if (-not (Expand-Pkg $pkg (Join-Path $tmp 'src'))) { Write-Err '解压失败'; e $srcDir = Get-ChildItem (Join-Path $tmp 'src') | Where-Object { $_.PSIsContainer } | Select-Object -First 1 if ($srcDir) { $srcDir = $srcDir.FullName } else { $srcDir = Join-Path $tmp 'src' } -Write-Step "安装程序到 $AppDir" -New-Item -ItemType Directory -Path $LocalRoot -Force | Out-Null -Install-AppAtomic $srcDir $AppDir - # ---------- 3. Python:优先内置便携版(免管理员、够用最快) ---------- Write-Step '准备 Python 运行时(内置 Agent ab 需要)' $pyExe = $null @@ -206,6 +222,13 @@ if (-not $pyExe) { $pyExe = (Get-Command python -ErrorAction SilentlyContinue).Source } } else { Write-Ok "检测到系统 Python:$pyExe" } +if (-not $pyExe) { throw '未能准备 Python3,保留现有版本并退出' } +try { $null = & $pyExe -c "import sys; assert sys.version_info[0] == 3" } +catch { throw 'Python3 执行验证失败,保留现有版本并退出' } + +Write-Step "安装程序到 $AppDir" +New-Item -ItemType Directory -Path $LocalRoot -Force | Out-Null +Install-AppAtomic $srcDir $AppDir # ---------- 4. 命令入口(agentboot / ab) ---------- Write-Step '创建命令:agentboot(控制台) / ab(内置 Agent)' @@ -230,6 +253,7 @@ if exist "%AB_INSTALL%\runtime\python\python.exe" set "PYTHON=%AB_INSTALL%\runti "@ Set-LauncherAtomic (Join-Path $BinDir 'agentboot.cmd') $agentbootLauncher Set-LauncherAtomic (Join-Path $BinDir 'ab.cmd') $abLauncher +Complete-AppAtomic Write-Ok "已写入 $BinDir" # ---------- 5. PATH 注册(用户级,幂等) ---------- @@ -250,6 +274,7 @@ Write-Step '环境体检' if ($pyExe) { try { & $pyExe (Join-Path $AppDir 'core\agent.py') doctor } catch { Write-Err '体检脚本执行失败(不影响安装)' } } +if (Test-Path $tmp) { Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue } # ---------- 7. 完成 ---------- Write-Host '' diff --git a/scripts/tools/stage_application.py b/scripts/tools/stage_application.py index 55a68bf..eeae122 100644 --- a/scripts/tools/stage_application.py +++ b/scripts/tools/stage_application.py @@ -6,9 +6,19 @@ import sys -FILES = ("VERSION", "LICENSE", "CHANGELOG.md", "README.md", "README.en.md", - "install.sh", "install.bat", "安装指南.md") -DIRECTORIES = ("agents", "core", "docs", "scripts", "tools") +FILES = ( + "VERSION", "LICENSE", "CHANGELOG.md", "README.md", "README.en.md", "install.sh", "install.bat", "安装指南.md", + "agents/registry.json", "core/agent.py", "core/i18n.py", "core/menu.py", + "docs/en/install-guide.md", "docs/zh/安装指南.md", + "scripts/build-offline.ps1", "scripts/build-offline.sh", "scripts/build-online.py", + "scripts/install-offline.ps1", "scripts/install-offline.sh", "scripts/install.ps1", "scripts/verify-live-release.py", + "scripts/tools/build_sfx.py", "scripts/tools/hash_tree.py", "scripts/tools/seed_uv_generic.py", + "scripts/tools/sfx_append.py", "scripts/tools/stage_application.py", + "scripts/tools/validate_offline_payload.py", "scripts/tools/zip_tree.py", + "tools/linux-kb/基础命令.md", "tools/linux-kb/故障排查.md", "tools/linux-kb/服务管理.md", + "tools/linux-kb/用户与权限.md", "tools/linux-kb/磁盘存储.md", "tools/linux-kb/系统信息.md", + "tools/linux-kb/终端技巧.md", "tools/linux-kb/网络配置.md", "tools/linux-kb/软件包管理.md", +) def reject_symlinks(path): @@ -27,14 +37,9 @@ def main(): path = source / name if not path.is_file() or path.is_symlink(): raise SystemExit("missing or unsafe release file: %s" % path) - shutil.copy2(path, destination / name) - for name in DIRECTORIES: - path = source / name - if not path.is_dir(): - raise SystemExit("missing release directory: %s" % path) - reject_symlinks(path) - shutil.copytree(path, destination / name, dirs_exist_ok=True, - ignore=shutil.ignore_patterns("__pycache__", "*.pyc", "node_modules", "dist", "payloads")) + target = destination / name + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(path, target) print("staged explicit application allowlist:", destination) diff --git a/scripts/tools/validate_offline_payload.py b/scripts/tools/validate_offline_payload.py index 7ed96c0..9c5a017 100644 --- a/scripts/tools/validate_offline_payload.py +++ b/scripts/tools/validate_offline_payload.py @@ -55,6 +55,8 @@ def main(): agent = agents.get(aid) if not agent: errors.append("unknown requested Agent: %s" % aid) + elif not agent.get("offline"): + errors.append("%s is not marked offline-capable" % aid) elif agent.get("os") and platform_os.get(platform_id) not in agent["os"]: errors.append("%s does not support %s" % (aid, platform_id)) elif aid == "coco": diff --git a/tests/test_agent_lifecycle_methods.py b/tests/test_agent_lifecycle_methods.py new file mode 100644 index 0000000..7918a71 --- /dev/null +++ b/tests/test_agent_lifecycle_methods.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +"""Special lifecycle and offline-support regressions.""" + +import json +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest +from unittest import mock + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) + +import menu # noqa: E402 + + +class AgentLifecycleTests(unittest.TestCase): + def test_opencode_not_advertised_offline_until_postinstall_is_supported(self): + registry = json.loads((ROOT / "agents/registry.json").read_text(encoding="utf-8")) + opencode = next(agent for agent in registry["agents"] if agent["id"] == "opencode") + self.assertFalse(opencode["offline"]) + + def test_aider_uses_private_venv_lifecycle(self): + registry = json.loads((ROOT / "agents/registry.json").read_text(encoding="utf-8")) + aider = next(agent for agent in registry["agents"] if agent["id"] == "aider") + self.assertEqual((aider["method"], aider["pip"]), ("venv", "aider-chat")) + + def test_aider_install_dispatches_private_venv(self): + agent = {"id": "aider", "name": "Aider", "vendor": "Aider", "bin": "aider", + "method": "venv", "pip": "aider-chat"} + with mock.patch.object(menu, "load_registry", return_value=[agent]), \ + mock.patch.object(menu, "install_aider_venv", return_value=True) as install, \ + mock.patch.object(menu, "aider_venv_executable", return_value="/managed/aider"), \ + mock.patch.object(menu, "wire_agnes", return_value=({}, [])), \ + mock.patch.object(menu, "record_install") as record, \ + mock.patch.object(menu, "ensure_path_registered"): + self.assertEqual(menu.install_online(["aider"]), []) + install.assert_called_once_with(agent) + record.assert_called_once() + + def test_hermes_postinstall_uses_node_matching_selected_npm(self): + agent = {"id": "hermes", "name": "Hermes", "method": "npm", "npm": "hermes-agent", "node": ">=20"} + runtime_npm = "/managed/runtime/bin/npm" + runtime_node = "/managed/runtime/bin/node" + completed = subprocess.CompletedProcess([], 0, stdout="/managed/root\n") + with mock.patch.object(menu, "npm_cmd", return_value=runtime_npm), \ + mock.patch.object(menu, "ensure_npm_prefix"), \ + mock.patch.object(menu, "runtime_node_dir", return_value="/managed/runtime"), \ + mock.patch.object(menu, "node_exe", return_value=runtime_node), \ + mock.patch.object(menu, "node_ok", return_value=True), \ + mock.patch.object(menu, "_npm_global_root", return_value="/managed/root"), \ + mock.patch.object(menu.os.path, "isdir", return_value=True), \ + mock.patch.object(menu, "_seed_uv", return_value=True), \ + mock.patch.object(menu, "_github_git_reachable", return_value=True), \ + mock.patch.object(menu.subprocess, "run", return_value=completed) as run: + self.assertTrue(menu.install_hermes_special(agent)) + self.assertEqual(run.call_args_list[-1].args[0][0], runtime_node) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_custom_agent_validation.py b/tests/test_custom_agent_validation.py new file mode 100644 index 0000000..0299073 --- /dev/null +++ b/tests/test_custom_agent_validation.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +"""Custom Agent IDs remain unique and CLI deletion validates arguments.""" + +from pathlib import Path +import json +import sys +import tempfile +import unittest +from unittest import mock + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) +import menu # noqa: E402 + + +class CustomAgentValidationTests(unittest.TestCase): + def test_duplicate_custom_id_is_rejected(self): + with tempfile.TemporaryDirectory() as tmp: + custom = Path(tmp) / "custom.json" + custom.write_text('[{"id":"dup","bin":"dup"}]', encoding="utf-8") + with mock.patch.object(menu, "CUSTOM_AGENTS", str(custom)): + with self.assertRaisesRegex(ValueError, "已存在"): + menu.custom_add_entry({"id": "dup", "bin": "dup", "method": "npm", "npm": "dup"}) + + def test_delete_without_id_exits_usage(self): + with mock.patch.object(sys, "argv", ["menu.py", "add-agent", "--del"]), \ + mock.patch.object(menu, "resolve_lang"), mock.patch.object(menu.agent, "_utf8_console"): + with self.assertRaisesRegex(SystemExit, "2"): + menu.main() + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_docs_consistency.py b/tests/test_docs_consistency.py index 6bfbcce..3a3bdf6 100644 --- a/tests/test_docs_consistency.py +++ b/tests/test_docs_consistency.py @@ -36,6 +36,7 @@ def test_web_surfaces_include_mobile_overflow_and_touch_fixes(self): self.assertIn("minmax(min(100%,280px),1fr)", surface) self.assertIn("min-height:44px", surface) self.assertIn("aria-live", surface) + self.assertIn(" 1] + self.assertEqual(duplicates, []) + + def test_format_mismatch_raises(self): + old = i18n.get_lang() + try: + i18n.set_lang("en") + with self.assertRaises((TypeError, ValueError)): + i18n.t("menu.install_ok", "only-one") + finally: + i18n.set_lang(old) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_install_tracking.py b/tests/test_install_tracking.py index 9aafeb1..d458a26 100644 --- a/tests/test_install_tracking.py +++ b/tests/test_install_tracking.py @@ -2,6 +2,8 @@ """Integration checks for install ownership recording and package delivery.""" from pathlib import Path +import multiprocessing +import os import sys import tempfile import unittest @@ -14,7 +16,26 @@ import menu # noqa: E402 +def _record_worker(index): + menu.record_install({"id": "agent-%d" % index, "name": "A", "bin": "a-%d" % index, + "method": "npm", "npm": "pkg-%d" % index}, "online") + + class InstallTrackingTests(unittest.TestCase): + @unittest.skipIf(os.name == "nt", "fork-based lock stress test") + def test_install_state_serializes_parallel_process_updates(self): + with tempfile.TemporaryDirectory() as tmp: + state = Path(tmp) / "installed.json" + home = Path(tmp) / "home" + with mock.patch.object(menu, "AB_HOME", str(home)), \ + mock.patch.object(menu, "INSTALL_STATE", str(state)): + ctx = multiprocessing.get_context("fork") + processes = [ctx.Process(target=_record_worker, args=(index,)) for index in range(20)] + for process in processes: process.start() + for process in processes: process.join(10) + self.assertTrue(all(process.exitcode == 0 for process in processes)) + saved = menu.load_install_state()["agents"] + self.assertEqual(set(saved), {"agent-%d" % index for index in range(20)}) def test_online_npm_success_records_resolved_install(self): agent = {"id": "codex", "name": "Codex", "vendor": "OpenAI", "bin": "codex", "method": "npm", "npm": "@openai/codex@0.90.0"} @@ -92,11 +113,19 @@ def test_windows_offline_shim_escapes_cmd_percent_variables(self): mock.patch.object(menu, "AB_HOME", str(root)), \ mock.patch.object(menu, "POSIX", False): self.assertTrue(menu.write_shim(agent, node_path="C:\\portable\\node.exe")) - shim = (root / "bin" / "codex.cmd").read_text(encoding="ascii") + shim = (root / "bin" / "codex.cmd").read_text(encoding="utf-8-sig") self.assertIn("%AB_ROOT%", shim) self.assertIn("%PATH%", shim) self.assertIn('"C:\\portable\\node.exe"', shim) + def test_native_npm_entry_executes_directly_without_node(self): + with tempfile.TemporaryDirectory() as tmp: + native = Path(tmp) / "agent" + native.write_bytes(b"\x7fELFfake") + self.assertEqual(menu._npm_entry_kind(str(native)), "direct") + self.assertEqual(menu._npm_entry_kind("tool.cmd"), "cmd") + self.assertEqual(menu._npm_entry_kind("tool.js"), "node") + def test_posix_path_block_uses_npm_bin_and_upgrades_existing_block(self): with tempfile.TemporaryDirectory() as tmp: home = Path(tmp) diff --git a/tests/test_installer_transactions.py b/tests/test_installer_transactions.py index f7479b7..54b92b2 100644 --- a/tests/test_installer_transactions.py +++ b/tests/test_installer_transactions.py @@ -15,6 +15,8 @@ def test_posix_installers_use_atomic_app_switch(self): self.assertIn("app.new.", text, relative) self.assertIn("app.old.", text, relative) self.assertIn('mv "$OLD_APP" "$APP_DIR"', text, relative) + self.assertIn("SWAP_COMMITTED", text, relative) + self.assertIn("trap", text, relative) def test_installers_refuse_unowned_launcher_collision(self): for relative in ("install.sh", "scripts/install-offline.sh", @@ -49,6 +51,34 @@ def test_launchers_reject_links_and_write_atomically(self): text = (ROOT / relative).read_text(encoding="utf-8-sig") self.assertIn("ReparsePoint", text, relative) self.assertIn("Set-LauncherAtomic", text, relative) + self.assertIn("Restore-AppAtomic", text, relative) + self.assertIn("Complete-AppAtomic", text, relative) + + def test_batch_bootstrap_propagates_installer_exit(self): + text = (ROOT / "install.bat").read_text(encoding="utf-8") + self.assertIn("set \"AB_EXIT=%ERRORLEVEL%\"", text) + self.assertIn("exit /b %AB_EXIT%", text) + + def test_online_installers_validate_python_before_app_commit(self): + shell = (ROOT / "install.sh").read_text(encoding="utf-8") + self.assertLess(shell.index("未能准备 Python3"), shell.index("安装程序到 ${APP_DIR}")) + powershell = (ROOT / "scripts/install.ps1").read_text(encoding="utf-8-sig") + self.assertLess(powershell.index("未能准备 Python3"), powershell.index('Install-AppAtomic $srcDir $AppDir')) + + def test_online_installers_reject_untrusted_accelerators_and_oversized_archives(self): + shell = (ROOT / "install.sh").read_text(encoding="utf-8") + powershell = (ROOT / "scripts/install.ps1").read_text(encoding="utf-8-sig") + self.assertNotIn("ghfast.top", shell + powershell) + self.assertNotIn("gh-proxy.com", shell + powershell) + self.assertIn("20971520", shell) + self.assertIn("20MB", powershell) + self.assertIn("越界路径", shell) + + def test_online_installers_clean_temporary_directories(self): + shell = (ROOT / "install.sh").read_text(encoding="utf-8") + powershell = (ROOT / "scripts/install.ps1").read_text(encoding="utf-8-sig") + self.assertIn('rm -rf "$TMP"', shell) + self.assertIn("Remove-Item $tmp -Recurse -Force", powershell) if __name__ == "__main__": diff --git a/tests/test_language_persistence.py b/tests/test_language_persistence.py new file mode 100644 index 0000000..d13ffb0 --- /dev/null +++ b/tests/test_language_persistence.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +"""Language changes persist in the active config and prompt.""" + +from pathlib import Path +import sys +import unittest +from unittest import mock + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) +import agent # noqa: E402 +import i18n # noqa: E402 +import menu # noqa: E402 + + +class LanguagePersistenceTests(unittest.TestCase): + def test_language_switch_mutates_live_config(self): + cfg = agent.default_config() + with mock.patch.object(menu.agent, "save_config"): + menu.set_lang_persist("en", cfg) + self.assertEqual(cfg["lang"], "en") + + def test_english_prompt_does_not_order_chinese(self): + previous = i18n.get_lang() + try: + i18n.set_lang("en") + prompt = agent.system_prompt() + finally: + i18n.set_lang(previous) + self.assertIn("English", prompt) + self.assertNotIn("简体中文", prompt) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_offline_payload_validation.py b/tests/test_offline_payload_validation.py index a72e4a5..17c6fcd 100644 --- a/tests/test_offline_payload_validation.py +++ b/tests/test_offline_payload_validation.py @@ -20,7 +20,7 @@ def test_missing_npm_payload_fails(self): stage = Path(tmp) (stage / "agents").mkdir() (stage / "agents" / "registry.json").write_text(json.dumps({"agents": [{ - "id": "demo", "method": "npm", "npm": "@scope/demo", "bin": "demo"}]}), + "id": "demo", "method": "npm", "npm": "@scope/demo", "bin": "demo", "offline": True}]}), encoding="utf-8") (stage / "payloads" / "node" / "linux-x64").mkdir(parents=True) result = subprocess.run([sys.executable, str(VALIDATOR), str(stage), @@ -46,13 +46,26 @@ def test_unsupported_requested_platform_fails(self): stage = Path(tmp) (stage / "agents").mkdir() (stage / "agents" / "registry.json").write_text(json.dumps({"agents": [{ - "id": "coco", "method": "script", "bin": "coco", "os": ["linux", "darwin"]}]}), + "id": "coco", "method": "script", "bin": "coco", "offline": True, + "os": ["linux", "darwin"]}]}), encoding="utf-8") result = subprocess.run([sys.executable, str(VALIDATOR), str(stage), "win-x64", "coco"], capture_output=True, text=True) self.assertNotEqual(result.returncode, 0) self.assertIn("does not support", result.stderr) + def test_agent_not_marked_offline_fails(self): + with tempfile.TemporaryDirectory() as tmp: + stage = Path(tmp) + (stage / "agents").mkdir() + (stage / "agents" / "registry.json").write_text(json.dumps({"agents": [{ + "id": "online", "method": "npm", "npm": "online", "bin": "online", "offline": False}]}), + encoding="utf-8") + result = subprocess.run([sys.executable, str(VALIDATOR), str(stage), "linux-x64", "online"], + capture_output=True, text=True) + self.assertNotEqual(result.returncode, 0) + self.assertIn("not marked offline-capable", result.stderr) + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_offline_transaction.py b/tests/test_offline_transaction.py new file mode 100644 index 0000000..f834e43 --- /dev/null +++ b/tests/test_offline_transaction.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""Offline Agent updates roll back when shim commit fails.""" + +from pathlib import Path +import sys +import tempfile +import unittest +from unittest import mock + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) + +import menu # noqa: E402 + + +class OfflineTransactionTests(unittest.TestCase): + def test_existing_payload_restored_when_shim_fails(self): + agent = {"id": "demo", "name": "Demo", "bin": "demo", "method": "npm", + "npm": "demo", "node": ">=18"} + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + payload = root / "payloads" + source = payload / "agents" / "demo" / menu.plat_id() / "node_modules" / "demo" + source.mkdir(parents=True) + (source / "package.json").write_text('{"bin":{"demo":"demo.js"}}', encoding="utf-8") + (source / "demo.js").write_text("new", encoding="utf-8") + agents_dir = root / "managed" + old = agents_dir / "demo" / "node_modules" / "demo" + old.mkdir(parents=True) + (old / "old.txt").write_text("keep", encoding="utf-8") + with mock.patch.object(menu, "AGENTS_DIR", str(agents_dir)), \ + mock.patch.object(menu, "RUNTIME_DIR", str(root / "runtime")), \ + mock.patch.object(menu, "load_registry", return_value=[agent]), \ + mock.patch.object(menu, "find_payload_dir", return_value=str(payload)), \ + mock.patch.object(menu.shutil, "which", return_value="node"), \ + mock.patch.object(menu, "node_ok", return_value=True), \ + mock.patch.object(menu, "write_shim", return_value=False), \ + mock.patch.object(menu, "ensure_path_registered"): + failures = menu.offline_install(["demo"], str(payload)) + self.assertEqual(failures, ["demo"]) + self.assertTrue((old / "old.txt").is_file()) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_process_timeout.py b/tests/test_process_timeout.py new file mode 100644 index 0000000..c5aa878 --- /dev/null +++ b/tests/test_process_timeout.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +"""Command timeout must terminate descendants and keep output bounded.""" + +from pathlib import Path +import os +import sys +import tempfile +import time +import unittest + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) + +import agent # noqa: E402 + + +@unittest.skipIf(os.name == "nt", "POSIX process-group regression") +class ProcessTimeoutTests(unittest.TestCase): + def test_timeout_kills_background_child(self): + with tempfile.TemporaryDirectory() as tmp: + marker = Path(tmp) / "survived" + command = "(sleep 6; touch %s) & sleep 30" % marker + result = agent.run_cmd(command, timeout=5) + self.assertIn("exit=124", result) + time.sleep(1.5) + self.assertFalse(marker.exists()) + + def test_large_output_is_bounded(self): + result = agent.run_cmd("yes x | head -c 200000", timeout=10) + self.assertLess(len(result), 10000) + self.assertIn("截断", result) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_proxy_behavior.py b/tests/test_proxy_behavior.py new file mode 100644 index 0000000..638a984 --- /dev/null +++ b/tests/test_proxy_behavior.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""Saved proxy settings apply to Python downloads and model connections.""" + +from pathlib import Path +import json +import os +import sys +import tempfile +import unittest +from unittest import mock + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) +import agent # noqa: E402 +import menu # noqa: E402 + + +class ProxyBehaviorTests(unittest.TestCase): + def test_invalid_proxy_is_rejected(self): + with mock.patch.object(menu, "load_env_json", return_value={}), \ + mock.patch.object(menu, "save_env_json") as save: + self.assertFalse(menu.set_proxy("socks5://localhost:1080")) + save.assert_not_called() + + def test_saved_proxy_updates_python_environment(self): + with mock.patch.object(menu, "load_env_json", return_value={}), \ + mock.patch.object(menu, "save_env_json"), \ + mock.patch.object(menu, "npm_cmd", return_value=None), \ + mock.patch.object(menu, "write_env_scripts"): + self.assertTrue(menu.set_proxy("http://127.0.0.1:7890")) + self.assertEqual(os.environ.get("HTTPS_PROXY"), "http://127.0.0.1:7890") + os.environ.pop("HTTP_PROXY", None); os.environ.pop("HTTPS_PROXY", None) + + def test_https_model_connection_tunnels_through_proxy(self): + fake = mock.Mock() + with mock.patch.dict(os.environ, {"HTTPS_PROXY": "http://proxy.example:8080"}, clear=False), \ + mock.patch("http.client.HTTPSConnection", return_value=fake) as connection: + agent._POOL.clear() + self.assertIs(agent._connect("https", "api.example", 443), fake) + connection.assert_called_once() + fake.set_tunnel.assert_called_once_with("api.example", 443, headers={}) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_regressions.py b/tests/test_regressions.py index f70114d..ae27d2c 100644 --- a/tests/test_regressions.py +++ b/tests/test_regressions.py @@ -78,6 +78,22 @@ def read(self): self.assertTrue(response.drained) drop.assert_not_called() + def test_ab_run_prints_final_answer_in_interactive_mode(self): + with mock.patch.object(agent, "load_config", return_value=agent.default_config()), \ + mock.patch.object(agent, "_is_interactive", return_value=True), \ + mock.patch.object(agent, "agent_loop", return_value=("answer", [])), \ + mock.patch.object(sys, "argv", ["agent.py", "run", "task"]), \ + mock.patch("builtins.print") as printed: + agent.main() + self.assertTrue(any(call.args == ("answer",) for call in printed.call_args_list)) + + def test_provider_name_selects_requested_provider(self): + cfg = {"active": "first", "providers": {"first": {}, "second": {}}} + with mock.patch.object(agent, "chat", return_value=("ok", [])) as chat: + ok, _message = agent.test_provider(cfg, name="second") + self.assertTrue(ok) + self.assertEqual(chat.call_args.args[0]["active"], "second") + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_release_workflow.py b/tests/test_release_workflow.py index d35bb06..373c5af 100644 --- a/tests/test_release_workflow.py +++ b/tests/test_release_workflow.py @@ -18,15 +18,21 @@ def test_release_supports_prerelease_dry_run_and_tag_only_publish(self): self.assertIn("--prerelease", text) self.assertIn("verify-live-release.py", text) self.assertIn("--prerelease=false --latest", text) - self.assertIn("needs: [validate, online, offline-linux, offline-windows]", text) + self.assertIn("needs: [validate, online, offline-linux, offline-windows, macos-smoke]", text) self.assertIn("$smokeHome", text) + self.assertIn("测试-home", text) self.assertNotIn("$home =", text) self.assertIn("contents: read", text) self.assertIn("contents: write", text) + self.assertIn("environment: release-production", text) self.assertIn("persist-credentials: false", text) self.assertIn("actions/checkout@11d5960a326750d5838078e36cf38b85af677262", text) + self.assertIn("gh release upload", text) + self.assertIn("--clobber", text) self.assertIn("install-offline.sh\" codex", text) self.assertIn("install-offline.ps1\" -Agents codex", text) + self.assertIn("runs-on: macos-15-intel", text) + self.assertIn("PLATFORMS=darwin-x64", text) def test_live_verifier_covers_primary_and_mirror(self): text = (ROOT / "scripts/verify-live-release.py").read_text(encoding="utf-8") @@ -41,12 +47,19 @@ def test_worker_has_reproducible_wrangler_config(self): self.assertIn('"name": "boot"', text) self.assertIn('"pattern": "boot.ide.pub/*"', text) + def test_pages_workflow_pins_actions_and_drops_checkout_credentials(self): + text = (ROOT / ".github/workflows/deploy-pages.yml").read_text(encoding="utf-8") + self.assertNotIn("actions/checkout@v4", text) + self.assertIn("persist-credentials: false", text) + self.assertIn("actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e", text) + def test_worker_health_checks_assets_and_proxy_forwards_ranges(self): text = (ROOT / "cloudflare/worker.js").read_text(encoding="utf-8") self.assertIn("const required =", text) self.assertIn("assets[name] = response.status", text) self.assertIn('"Range", "If-Range"', text) self.assertIn("cacheEverything: !requestHeaders.has(\"Range\")", text) + self.assertIn("resp.status !== 304", text) if __name__ == "__main__": diff --git a/tests/test_runtime_platforms.py b/tests/test_runtime_platforms.py index 9ab11ef..93a99d3 100644 --- a/tests/test_runtime_platforms.py +++ b/tests/test_runtime_platforms.py @@ -48,6 +48,12 @@ def test_or_range_rejects_unsupported_node_major(self): self.assertTrue(menu._version_satisfies((24, 15, 0), requirement)) self.assertFalse(menu._version_satisfies((24, 14, 9), requirement)) + def test_unknown_architecture_is_rejected(self): + with mock.patch.object(menu.platform, "system", return_value="Linux"), \ + mock.patch.object(menu.platform, "machine", return_value="riscv64"), \ + self.assertRaisesRegex(RuntimeError, "不支持"): + menu.plat_id() + class OfflineBuilderTests(unittest.TestCase): def test_default_build_targets_native_platform_only(self): @@ -83,6 +89,11 @@ def test_generic_uv_seeder_verifies_downloaded_digest(self): self.assertIn("hashlib.sha256", source) self.assertIn("uv SHA-256 mismatch", source) + def test_posix_builder_uses_root_registry_and_verifies_windows_python(self): + shell = (ROOT / "scripts/build-offline.sh").read_text(encoding="utf-8") + self.assertIn('"$ROOT/agents/registry.json" "$AID"', shell) + self.assertIn("4acbed6dd1c744b0376e3b1cf57ce906f9dc9e95e68824584c8099a63025a3c3", shell) + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_state_safety.py b/tests/test_state_safety.py new file mode 100644 index 0000000..97804ad --- /dev/null +++ b/tests/test_state_safety.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +"""Config/session privacy, validation, and atomic state regressions.""" + +import json +import os +from pathlib import Path +import stat +import sys +import tempfile +import unittest +from unittest import mock + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "core")) + +import agent # noqa: E402 + + +class StateSafetyTests(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory() + self.home = Path(self.tmp.name) / "agentboot" + self.config = self.home / "config.json" + self.session = self.home / "last-session.json" + self.patches = [mock.patch.object(agent, "AB_HOME", str(self.home)), + mock.patch.object(agent, "CONFIG_PATH", str(self.config)), + mock.patch.object(agent, "SESSION_FILE", str(self.session))] + for patch in self.patches: patch.start() + + def tearDown(self): + for patch in reversed(self.patches): patch.stop() + self.tmp.cleanup() + + def test_sensitive_files_and_home_are_private(self): + agent.save_config(agent.default_config()) + agent.save_session([{"role": "user", "content": "secret"}]) + self.assertEqual(stat.S_IMODE(os.stat(self.home).st_mode), 0o700) + self.assertEqual(stat.S_IMODE(os.stat(self.config).st_mode), 0o600) + self.assertEqual(stat.S_IMODE(os.stat(self.session).st_mode), 0o600) + + def test_invalid_root_and_values_fall_back_safely(self): + self.home.mkdir() + self.config.write_text("[]", encoding="utf-8") + self.assertEqual(agent.load_config()["confirm"], "smart") + self.config.write_text(json.dumps({"confirm": "TYPO", "max_steps": 0, "providers": []}), encoding="utf-8") + cfg = agent.load_config() + self.assertEqual((cfg["confirm"], cfg["max_steps"], cfg["providers"]), ("smart", 12, {})) + + def test_max_steps_is_bounded(self): + self.home.mkdir() + self.config.write_text(json.dumps({"max_steps": 999999}), encoding="utf-8") + self.assertEqual(agent.load_config()["max_steps"], 50) + + +if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/test_uninstall.py b/tests/test_uninstall.py index e0429e2..a2ea026 100644 --- a/tests/test_uninstall.py +++ b/tests/test_uninstall.py @@ -123,6 +123,19 @@ def test_online_npm_uninstall_uses_exact_package_name(self): self.assertEqual(command[:4], ["npm", "uninstall", "-g", "@openai/codex"]) self.assertFalse(wrapper.exists()) + def test_managed_uninstall_prefers_recorded_package_over_changed_registry(self): + installed = self.npm_agent(package="old-package@1.0.0") + current = self.npm_agent(package="new-package@2.0.0") + wrapper = self.write_wrapper() + menu.record_install(installed, "online", str(wrapper)) + completed = subprocess.CompletedProcess([], 0) + with mock.patch.object(menu, "npm_cmd", return_value="npm"), \ + mock.patch.object(menu.subprocess, "run", return_value=completed) as run: + ok, _message = menu.uninstall_one(current) + self.assertTrue(ok) + self.assertIn("old-package", run.call_args.args[0]) + self.assertNotIn("new-package", run.call_args.args[0]) + def test_online_pip_uninstall_uses_noninteractive_mode(self): agent = {"id": "aider", "name": "Aider", "bin": "aider", "method": "pip", "pip": "aider-install"} @@ -178,6 +191,19 @@ def test_coco_uninstall_refuses_symlinked_root(self): menu._remove_coco(False) self.assertTrue((program / "coco").exists()) + def test_coco_uninstall_removes_verified_external_launchers(self): + coco = self.home / ".coco" + (coco / "bin").mkdir(parents=True) + target = coco / "bin" / "coco" + target.write_text("app", encoding="utf-8") + external_dir = self.home / ".local" / "bin" + external_dir.mkdir(parents=True) + for name in ("coco", "web", "coweb"): + (external_dir / name).symlink_to(target) + entry = {"executable": str(external_dir / "coco")} + menu._remove_coco_external_launchers(entry) + self.assertFalse(any((external_dir / name).exists() for name in ("coco", "web", "coweb"))) + def test_coco_offline_private_node_survives_install_swap(self): payload = self.home / "payload" payload.mkdir() diff --git "a/\345\256\211\350\243\205\346\214\207\345\215\227.md" "b/\345\256\211\350\243\205\346\214\207\345\215\227.md" index 7ef8d0f..d113265 100644 --- "a/\345\256\211\350\243\205\346\214\207\345\215\227.md" +++ "b/\345\256\211\350\243\205\346\214\207\345\215\227.md" @@ -34,7 +34,7 @@ curl -fsSL https://bit-cook.github.io/AgentBoot/install.sh | sh # 直连 GitHub curl -fsSL https://raw.githubusercontent.com/bit-cook/AgentBoot/main/install.sh | sh # 国内加速代理 -curl -fsSL https://ghfast.top/https://raw.githubusercontent.com/bit-cook/AgentBoot/main/install.sh | sh +curl -fsSL https://bit-cook.github.io/AgentBoot/install.sh | sh ``` **安装完成后:** @@ -213,7 +213,7 @@ AgentBoot 对国内复杂网络做了开箱即用的处理: - **npm 镜像**:自动切换到 `https://registry.npmmirror.com` 安装所有 npm 类 Agent; - **Node 运行时镜像**:便携 Node 从 npmmirror 二进制镜像下载(备用 nodejs.org); - **pip 镜像**:Aider 等 Python 工具自动使用清华 PyPI 镜像; -- **多源下载容错**:安装包下载按 `boot.ide.pub(Cloudflare) → GitHub → ghfast.top → gh-proxy.com` 顺序自动重试; +- **多源下载容错**:安装包只从项目控制的 `boot.ide.pub → GitHub Pages → GitHub Release` 获取,并强制同源 SHA-256; - **代理支持**:菜单 `[5] 镜像与代理设置` 可一键为 npm 与 AgentBoot 自身配置 HTTP 代理; - **手动强制**:环境变量 `AGENTBOOT_MIRROR=cn|off` 可强制开启/关闭镜像模式(默认自动)。 @@ -280,6 +280,10 @@ rm -rf ~/.agentboot ~/.local/bin/agentboot ~/.local/bin/ab # Linux/macOS rmdir /s /q "%USERPROFILE%\.agentboot" & rmdir /s /q "%LOCALAPPDATA%\AgentBoot" # Windows ``` +POSIX 完全卸载后,还应删除 shell 配置中 `# >>> agentboot >>>` 到 `# <<< agentboot <<<` 的整段;Windows 在用户 Path 中删除 AgentBoot 的两个 bin 目录。 + +下载离线包后可先运行 `sha256sum -c SHA256SUMS.txt --ignore-missing` 验证外部归档;包内 `PAYLOAD_SHA256SUMS.txt` 用于解压后的逐文件二次校验。 + 也可在控制台选择菜单 `[9] 卸载 Agent`。AgentBoot 会记录安装归属,避免误删系统中碰巧同名的外部命令;默认保留 Agent 配置、认证信息与会话。`--purge` 目前只定义了 CoCo 的数据清理边界,其他 Agent 的数据目录不会被猜测删除。
#Agent命令厂商离线
1CoCo AgentcocoBitCookLinux/macOS
2OpenCodeopencodeopencode.ai
2OpenCodeopencodeopencode.ai仅在线
3Hermes AgenthermesHermes✓(需 Git)
4Cline CLIclineCline
5CodeBuddy CLIcodebuddyTencent